1This is gccint.info, produced by makeinfo version 6.1 from gccint.texi. 2 3Copyright (C) 1988-2015 Free Software Foundation, Inc. 4 5 Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Funding Free Software", the Front-Cover Texts 9being (a) (see below), and with the Back-Cover Texts being (b) (see 10below). A copy of the license is included in the section entitled "GNU 11Free Documentation License". 12 13 (a) The FSF's Front-Cover Text is: 14 15 A GNU Manual 16 17 (b) The FSF's Back-Cover Text is: 18 19 You have freedom to copy and modify this GNU Manual, like GNU software. 20Copies published by the Free Software Foundation raise funds for GNU 21development. 22INFO-DIR-SECTION Software development 23START-INFO-DIR-ENTRY 24* gccint: (gccint). Internals of the GNU Compiler Collection. 25END-INFO-DIR-ENTRY 26 27 This file documents the internals of the GNU compilers. 28 29 Copyright (C) 1988-2015 Free Software Foundation, Inc. 30 31 Permission is granted to copy, distribute and/or modify this document 32under the terms of the GNU Free Documentation License, Version 1.3 or 33any later version published by the Free Software Foundation; with the 34Invariant Sections being "Funding Free Software", the Front-Cover Texts 35being (a) (see below), and with the Back-Cover Texts being (b) (see 36below). A copy of the license is included in the section entitled "GNU 37Free Documentation License". 38 39 (a) The FSF's Front-Cover Text is: 40 41 A GNU Manual 42 43 (b) The FSF's Back-Cover Text is: 44 45 You have freedom to copy and modify this GNU Manual, like GNU software. 46Copies published by the Free Software Foundation raise funds for GNU 47development. 48 49 50File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 51 52Introduction 53************ 54 55This manual documents the internals of the GNU compilers, including how 56to port them to new targets and some information about how to write 57front ends for new languages. It corresponds to the compilers (GCC) 58version 5.5.0. The use of the GNU compilers is documented in a separate 59manual. *Note Introduction: (gcc)Top. 60 61 This manual is mainly a reference manual rather than a tutorial. It 62discusses how to contribute to GCC (*note Contributing::), the 63characteristics of the machines supported by GCC as hosts and targets 64(*note Portability::), how GCC relates to the ABIs on such systems 65(*note Interface::), and the characteristics of the languages for which 66GCC front ends are written (*note Languages::). It then describes the 67GCC source tree structure and build system, some of the interfaces to 68GCC front ends, and how support for a target system is implemented in 69GCC. 70 71 Additional tutorial information is linked to from 72<http://gcc.gnu.org/readings.html>. 73 74* Menu: 75 76* Contributing:: How to contribute to testing and developing GCC. 77* Portability:: Goals of GCC's portability features. 78* Interface:: Function-call interface of GCC output. 79* Libgcc:: Low-level runtime library used by GCC. 80* Languages:: Languages for which GCC front ends are written. 81* Source Tree:: GCC source tree structure and build system. 82* Testsuites:: GCC testsuites. 83* Options:: Option specification files. 84* Passes:: Order of passes, what they do, and what each file is for. 85* GENERIC:: Language-independent representation generated by Front Ends 86* GIMPLE:: Tuple representation used by Tree SSA optimizers 87* Tree SSA:: Analysis and optimization of GIMPLE 88* RTL:: Machine-dependent low-level intermediate representation. 89* Control Flow:: Maintaining and manipulating the control flow graph. 90* Loop Analysis and Representation:: Analysis and representation of loops 91* Machine Desc:: How to write machine description instruction patterns. 92* Target Macros:: How to write the machine description C macros and functions. 93* Host Config:: Writing the 'xm-MACHINE.h' file. 94* Fragments:: Writing the 't-TARGET' and 'x-HOST' files. 95* Collect2:: How 'collect2' works; how it finds 'ld'. 96* Header Dirs:: Understanding the standard header file directories. 97* Type Information:: GCC's memory management; generating type information. 98* Plugins:: Extending the compiler with plugins. 99* LTO:: Using Link-Time Optimization. 100 101* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC 102* Funding:: How to help assure funding for free software. 103* GNU Project:: The GNU Project and GNU/Linux. 104 105* Copying:: GNU General Public License says 106 how you can copy and share GCC. 107* GNU Free Documentation License:: How you can copy and share this manual. 108* Contributors:: People who have contributed to GCC. 109 110* Option Index:: Index to command line options. 111* Concept Index:: Index of concepts and symbol names. 112 113 114File: gccint.info, Node: Contributing, Next: Portability, Up: Top 115 1161 Contributing to GCC Development 117********************************* 118 119If you would like to help pretest GCC releases to assure they work well, 120current development sources are available by SVN (see 121<http://gcc.gnu.org/svn.html>). Source and binary snapshots are also 122available for FTP; see <http://gcc.gnu.org/snapshots.html>. 123 124 If you would like to work on improvements to GCC, please read the 125advice at these URLs: 126 127 <http://gcc.gnu.org/contribute.html> 128 <http://gcc.gnu.org/contributewhy.html> 129 130for information on how to make useful contributions and avoid 131duplication of effort. Suggested projects are listed at 132<http://gcc.gnu.org/projects/>. 133 134 135File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 136 1372 GCC and Portability 138********************* 139 140GCC itself aims to be portable to any machine where 'int' is at least a 14132-bit type. It aims to target machines with a flat (non-segmented) 142byte addressed data address space (the code address space can be 143separate). Target ABIs may have 8, 16, 32 or 64-bit 'int' type. 'char' 144can be wider than 8 bits. 145 146 GCC gets most of the information about the target machine from a 147machine description which gives an algebraic formula for each of the 148machine's instructions. This is a very clean way to describe the 149target. But when the compiler needs information that is difficult to 150express in this fashion, ad-hoc parameters have been defined for machine 151descriptions. The purpose of portability is to reduce the total work 152needed on the compiler; it was not of interest for its own sake. 153 154 GCC does not contain machine dependent code, but it does contain code 155that depends on machine parameters such as endianness (whether the most 156significant byte has the highest or lowest address of the bytes in a 157word) and the availability of autoincrement addressing. In the 158RTL-generation pass, it is often necessary to have multiple strategies 159for generating code for a particular kind of syntax tree, strategies 160that are usable for different combinations of parameters. Often, not 161all possible cases have been addressed, but only the common ones or only 162the ones that have been encountered. As a result, a new target may 163require additional strategies. You will know if this happens because 164the compiler will call 'abort'. Fortunately, the new strategies can be 165added in a machine-independent fashion, and will affect only the target 166machines that need them. 167 168 169File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 170 1713 Interfacing to GCC Output 172*************************** 173 174GCC is normally configured to use the same function calling convention 175normally in use on the target system. This is done with the 176machine-description macros described (*note Target Macros::). 177 178 However, returning of structure and union values is done differently on 179some target machines. As a result, functions compiled with PCC 180returning such types cannot be called from code compiled with GCC, and 181vice versa. This does not cause trouble often because few Unix library 182routines return structures or unions. 183 184 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long 185in the same registers used for 'int' or 'double' return values. (GCC 186typically allocates variables of such types in registers also.) 187Structures and unions of other sizes are returned by storing them into 188an address passed by the caller (usually in a register). The target 189hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 190 191 By contrast, PCC on most target machines returns structures and unions 192of any size by copying the data into an area of static storage, and then 193returning the address of that storage as if it were a pointer value. 194The caller must copy the data from that memory area to the place where 195the value is wanted. This is slower than the method used by GCC, and 196fails to be reentrant. 197 198 On some target machines, such as RISC machines and the 80386, the 199standard system convention is to pass to the subroutine the address of 200where to return the value. On these machines, GCC has been configured 201to be compatible with the standard compiler, when this method is used. 202It may not be compatible for structures of 1, 2, 4 or 8 bytes. 203 204 GCC uses the system's standard convention for passing arguments. On 205some machines, the first few arguments are passed in registers; in 206others, all are passed on the stack. It would be possible to use 207registers for argument passing on any machine, and this would probably 208result in a significant speedup. But the result would be complete 209incompatibility with code that follows the standard convention. So this 210change is practical only if you are switching to GCC as the sole C 211compiler for the system. We may implement register argument passing on 212certain machines once we have a complete GNU system so that we can 213compile the libraries with GCC. 214 215 On some machines (particularly the SPARC), certain types of arguments 216are passed "by invisible reference". This means that the value is 217stored in memory, and the address of the memory location is passed to 218the subroutine. 219 220 If you use 'longjmp', beware of automatic variables. ISO C says that 221automatic variables that are not declared 'volatile' have undefined 222values after a 'longjmp'. And this is all GCC promises to do, because 223it is very difficult to restore register variables correctly, and one of 224GCC's features is that it can put variables in registers without your 225asking it to. 226 227 228File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 229 2304 The GCC low-level runtime library 231*********************************** 232 233GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1' 234on some platforms. GCC generates calls to routines in this library 235automatically, whenever it needs to perform some operation that is too 236complicated to emit inline code for. 237 238 Most of the routines in 'libgcc' handle arithmetic operations that the 239target processor cannot perform directly. This includes integer 240multiply and divide on some machines, and all floating-point and 241fixed-point operations on other machines. 'libgcc' also includes 242routines for exception handling, and a handful of miscellaneous 243operations. 244 245 Some of these routines can be defined in mostly machine-independent C. 246Others must be hand-written in assembly language for each processor that 247needs them. 248 249 GCC will also generate calls to C library routines, such as 'memcpy' 250and 'memset', in some cases. The set of routines that GCC may possibly 251use is documented in *note (gcc)Other Builtins::. 252 253 These routines take arguments and return values of a specific machine 254mode, not a specific C type. *Note Machine Modes::, for an explanation 255of this concept. For illustrative purposes, in this chapter the 256floating point type 'float' is assumed to correspond to 'SFmode'; 257'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'. 258Similarly, the integer types 'int' and 'unsigned int' correspond to 259'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and 260'unsigned long long' to 'TImode'. 261 262* Menu: 263 264* Integer library routines:: 265* Soft float library routines:: 266* Decimal float library routines:: 267* Fixed-point fractional library routines:: 268* Exception handling routines:: 269* Miscellaneous routines:: 270 271 272File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 273 2744.1 Routines for integer arithmetic 275=================================== 276 277The integer arithmetic routines are used on platforms that don't provide 278hardware support for arithmetic operations on some modes. 279 2804.1.1 Arithmetic functions 281-------------------------- 282 283 -- Runtime Function: int __ashlsi3 (int A, int B) 284 -- Runtime Function: long __ashldi3 (long A, int B) 285 -- Runtime Function: long long __ashlti3 (long long A, int B) 286 These functions return the result of shifting A left by B bits. 287 288 -- Runtime Function: int __ashrsi3 (int A, int B) 289 -- Runtime Function: long __ashrdi3 (long A, int B) 290 -- Runtime Function: long long __ashrti3 (long long A, int B) 291 These functions return the result of arithmetically shifting A 292 right by B bits. 293 294 -- Runtime Function: int __divsi3 (int A, int B) 295 -- Runtime Function: long __divdi3 (long A, long B) 296 -- Runtime Function: long long __divti3 (long long A, long long B) 297 These functions return the quotient of the signed division of A and 298 B. 299 300 -- Runtime Function: int __lshrsi3 (int A, int B) 301 -- Runtime Function: long __lshrdi3 (long A, int B) 302 -- Runtime Function: long long __lshrti3 (long long A, int B) 303 These functions return the result of logically shifting A right by 304 B bits. 305 306 -- Runtime Function: int __modsi3 (int A, int B) 307 -- Runtime Function: long __moddi3 (long A, long B) 308 -- Runtime Function: long long __modti3 (long long A, long long B) 309 These functions return the remainder of the signed division of A 310 and B. 311 312 -- Runtime Function: int __mulsi3 (int A, int B) 313 -- Runtime Function: long __muldi3 (long A, long B) 314 -- Runtime Function: long long __multi3 (long long A, long long B) 315 These functions return the product of A and B. 316 317 -- Runtime Function: long __negdi2 (long A) 318 -- Runtime Function: long long __negti2 (long long A) 319 These functions return the negation of A. 320 321 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 322 int B) 323 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned 324 long B) 325 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 326 A, unsigned long long B) 327 These functions return the quotient of the unsigned division of A 328 and B. 329 330 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, 331 unsigned long B, unsigned long *C) 332 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long 333 long A, unsigned long long B, unsigned long long *C) 334 These functions calculate both the quotient and remainder of the 335 unsigned division of A and B. The return value is the quotient, 336 and the remainder is placed in variable pointed to by C. 337 338 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 339 int B) 340 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned 341 long B) 342 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 343 A, unsigned long long B) 344 These functions return the remainder of the unsigned division of A 345 and B. 346 3474.1.2 Comparison functions 348-------------------------- 349 350The following functions implement integral comparisons. These functions 351implement a low-level compare, upon which the higher level comparison 352operators (such as less than and greater than or equal to) can be 353constructed. The returned values lie in the range zero to two, to allow 354the high-level operators to be implemented by testing the returned 355result using either signed or unsigned comparison. 356 357 -- Runtime Function: int __cmpdi2 (long A, long B) 358 -- Runtime Function: int __cmpti2 (long long A, long long B) 359 These functions perform a signed comparison of A and B. If A is 360 less than B, they return 0; if A is greater than B, they return 2; 361 and if A and B are equal they return 1. 362 363 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 364 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long 365 long B) 366 These functions perform an unsigned comparison of A and B. If A is 367 less than B, they return 0; if A is greater than B, they return 2; 368 and if A and B are equal they return 1. 369 3704.1.3 Trapping arithmetic functions 371----------------------------------- 372 373The following functions implement trapping arithmetic. These functions 374call the libc function 'abort' upon signed arithmetic overflow. 375 376 -- Runtime Function: int __absvsi2 (int A) 377 -- Runtime Function: long __absvdi2 (long A) 378 These functions return the absolute value of A. 379 380 -- Runtime Function: int __addvsi3 (int A, int B) 381 -- Runtime Function: long __addvdi3 (long A, long B) 382 These functions return the sum of A and B; that is 'A + B'. 383 384 -- Runtime Function: int __mulvsi3 (int A, int B) 385 -- Runtime Function: long __mulvdi3 (long A, long B) 386 The functions return the product of A and B; that is 'A * B'. 387 388 -- Runtime Function: int __negvsi2 (int A) 389 -- Runtime Function: long __negvdi2 (long A) 390 These functions return the negation of A; that is '-A'. 391 392 -- Runtime Function: int __subvsi3 (int A, int B) 393 -- Runtime Function: long __subvdi3 (long A, long B) 394 These functions return the difference between B and A; that is 'A - 395 B'. 396 3974.1.4 Bit operations 398-------------------- 399 400 -- Runtime Function: int __clzsi2 (unsigned int A) 401 -- Runtime Function: int __clzdi2 (unsigned long A) 402 -- Runtime Function: int __clzti2 (unsigned long long A) 403 These functions return the number of leading 0-bits in A, starting 404 at the most significant bit position. If A is zero, the result is 405 undefined. 406 407 -- Runtime Function: int __ctzsi2 (unsigned int A) 408 -- Runtime Function: int __ctzdi2 (unsigned long A) 409 -- Runtime Function: int __ctzti2 (unsigned long long A) 410 These functions return the number of trailing 0-bits in A, starting 411 at the least significant bit position. If A is zero, the result is 412 undefined. 413 414 -- Runtime Function: int __ffsdi2 (unsigned long A) 415 -- Runtime Function: int __ffsti2 (unsigned long long A) 416 These functions return the index of the least significant 1-bit in 417 A, or the value zero if A is zero. The least significant bit is 418 index one. 419 420 -- Runtime Function: int __paritysi2 (unsigned int A) 421 -- Runtime Function: int __paritydi2 (unsigned long A) 422 -- Runtime Function: int __parityti2 (unsigned long long A) 423 These functions return the value zero if the number of bits set in 424 A is even, and the value one otherwise. 425 426 -- Runtime Function: int __popcountsi2 (unsigned int A) 427 -- Runtime Function: int __popcountdi2 (unsigned long A) 428 -- Runtime Function: int __popcountti2 (unsigned long long A) 429 These functions return the number of bits set in A. 430 431 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 432 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 433 These functions return the A byteswapped. 434 435 436File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 437 4384.2 Routines for floating point emulation 439========================================= 440 441The software floating point library is used on machines which do not 442have hardware support for floating point. It is also used whenever 443'-msoft-float' is used to disable generation of floating point 444instructions. (Not all targets support this switch.) 445 446 For compatibility with other compilers, the floating point emulation 447routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note 448Library Calls::). In this section, the default names are used. 449 450 Presently the library does not support 'XFmode', which is used for 451'long double' on some architectures. 452 4534.2.1 Arithmetic functions 454-------------------------- 455 456 -- Runtime Function: float __addsf3 (float A, float B) 457 -- Runtime Function: double __adddf3 (double A, double B) 458 -- Runtime Function: long double __addtf3 (long double A, long double 459 B) 460 -- Runtime Function: long double __addxf3 (long double A, long double 461 B) 462 These functions return the sum of A and B. 463 464 -- Runtime Function: float __subsf3 (float A, float B) 465 -- Runtime Function: double __subdf3 (double A, double B) 466 -- Runtime Function: long double __subtf3 (long double A, long double 467 B) 468 -- Runtime Function: long double __subxf3 (long double A, long double 469 B) 470 These functions return the difference between B and A; that is, 471 A - B. 472 473 -- Runtime Function: float __mulsf3 (float A, float B) 474 -- Runtime Function: double __muldf3 (double A, double B) 475 -- Runtime Function: long double __multf3 (long double A, long double 476 B) 477 -- Runtime Function: long double __mulxf3 (long double A, long double 478 B) 479 These functions return the product of A and B. 480 481 -- Runtime Function: float __divsf3 (float A, float B) 482 -- Runtime Function: double __divdf3 (double A, double B) 483 -- Runtime Function: long double __divtf3 (long double A, long double 484 B) 485 -- Runtime Function: long double __divxf3 (long double A, long double 486 B) 487 These functions return the quotient of A and B; that is, A / B. 488 489 -- Runtime Function: float __negsf2 (float A) 490 -- Runtime Function: double __negdf2 (double A) 491 -- Runtime Function: long double __negtf2 (long double A) 492 -- Runtime Function: long double __negxf2 (long double A) 493 These functions return the negation of A. They simply flip the 494 sign bit, so they can produce negative zero and negative NaN. 495 4964.2.2 Conversion functions 497-------------------------- 498 499 -- Runtime Function: double __extendsfdf2 (float A) 500 -- Runtime Function: long double __extendsftf2 (float A) 501 -- Runtime Function: long double __extendsfxf2 (float A) 502 -- Runtime Function: long double __extenddftf2 (double A) 503 -- Runtime Function: long double __extenddfxf2 (double A) 504 These functions extend A to the wider mode of their return type. 505 506 -- Runtime Function: double __truncxfdf2 (long double A) 507 -- Runtime Function: double __trunctfdf2 (long double A) 508 -- Runtime Function: float __truncxfsf2 (long double A) 509 -- Runtime Function: float __trunctfsf2 (long double A) 510 -- Runtime Function: float __truncdfsf2 (double A) 511 These functions truncate A to the narrower mode of their return 512 type, rounding toward zero. 513 514 -- Runtime Function: int __fixsfsi (float A) 515 -- Runtime Function: int __fixdfsi (double A) 516 -- Runtime Function: int __fixtfsi (long double A) 517 -- Runtime Function: int __fixxfsi (long double A) 518 These functions convert A to a signed integer, rounding toward 519 zero. 520 521 -- Runtime Function: long __fixsfdi (float A) 522 -- Runtime Function: long __fixdfdi (double A) 523 -- Runtime Function: long __fixtfdi (long double A) 524 -- Runtime Function: long __fixxfdi (long double A) 525 These functions convert A to a signed long, rounding toward zero. 526 527 -- Runtime Function: long long __fixsfti (float A) 528 -- Runtime Function: long long __fixdfti (double A) 529 -- Runtime Function: long long __fixtfti (long double A) 530 -- Runtime Function: long long __fixxfti (long double A) 531 These functions convert A to a signed long long, rounding toward 532 zero. 533 534 -- Runtime Function: unsigned int __fixunssfsi (float A) 535 -- Runtime Function: unsigned int __fixunsdfsi (double A) 536 -- Runtime Function: unsigned int __fixunstfsi (long double A) 537 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 538 These functions convert A to an unsigned integer, rounding toward 539 zero. Negative values all become zero. 540 541 -- Runtime Function: unsigned long __fixunssfdi (float A) 542 -- Runtime Function: unsigned long __fixunsdfdi (double A) 543 -- Runtime Function: unsigned long __fixunstfdi (long double A) 544 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 545 These functions convert A to an unsigned long, rounding toward 546 zero. Negative values all become zero. 547 548 -- Runtime Function: unsigned long long __fixunssfti (float A) 549 -- Runtime Function: unsigned long long __fixunsdfti (double A) 550 -- Runtime Function: unsigned long long __fixunstfti (long double A) 551 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 552 These functions convert A to an unsigned long long, rounding toward 553 zero. Negative values all become zero. 554 555 -- Runtime Function: float __floatsisf (int I) 556 -- Runtime Function: double __floatsidf (int I) 557 -- Runtime Function: long double __floatsitf (int I) 558 -- Runtime Function: long double __floatsixf (int I) 559 These functions convert I, a signed integer, to floating point. 560 561 -- Runtime Function: float __floatdisf (long I) 562 -- Runtime Function: double __floatdidf (long I) 563 -- Runtime Function: long double __floatditf (long I) 564 -- Runtime Function: long double __floatdixf (long I) 565 These functions convert I, a signed long, to floating point. 566 567 -- Runtime Function: float __floattisf (long long I) 568 -- Runtime Function: double __floattidf (long long I) 569 -- Runtime Function: long double __floattitf (long long I) 570 -- Runtime Function: long double __floattixf (long long I) 571 These functions convert I, a signed long long, to floating point. 572 573 -- Runtime Function: float __floatunsisf (unsigned int I) 574 -- Runtime Function: double __floatunsidf (unsigned int I) 575 -- Runtime Function: long double __floatunsitf (unsigned int I) 576 -- Runtime Function: long double __floatunsixf (unsigned int I) 577 These functions convert I, an unsigned integer, to floating point. 578 579 -- Runtime Function: float __floatundisf (unsigned long I) 580 -- Runtime Function: double __floatundidf (unsigned long I) 581 -- Runtime Function: long double __floatunditf (unsigned long I) 582 -- Runtime Function: long double __floatundixf (unsigned long I) 583 These functions convert I, an unsigned long, to floating point. 584 585 -- Runtime Function: float __floatuntisf (unsigned long long I) 586 -- Runtime Function: double __floatuntidf (unsigned long long I) 587 -- Runtime Function: long double __floatuntitf (unsigned long long I) 588 -- Runtime Function: long double __floatuntixf (unsigned long long I) 589 These functions convert I, an unsigned long long, to floating 590 point. 591 5924.2.3 Comparison functions 593-------------------------- 594 595There are two sets of basic comparison functions. 596 597 -- Runtime Function: int __cmpsf2 (float A, float B) 598 -- Runtime Function: int __cmpdf2 (double A, double B) 599 -- Runtime Function: int __cmptf2 (long double A, long double B) 600 These functions calculate a <=> b. That is, if A is less than B, 601 they return -1; if A is greater than B, they return 1; and if A and 602 B are equal they return 0. If either argument is NaN they return 603 1, but you should not rely on this; if NaN is a possibility, use 604 one of the higher-level comparison functions. 605 606 -- Runtime Function: int __unordsf2 (float A, float B) 607 -- Runtime Function: int __unorddf2 (double A, double B) 608 -- Runtime Function: int __unordtf2 (long double A, long double B) 609 These functions return a nonzero value if either argument is NaN, 610 otherwise 0. 611 612 There is also a complete group of higher level functions which 613correspond directly to comparison operators. They implement the ISO C 614semantics for floating-point comparisons, taking NaN into account. Pay 615careful attention to the return values defined for each set. Under the 616hood, all of these routines are implemented as 617 618 if (__unordXf2 (a, b)) 619 return E; 620 return __cmpXf2 (a, b); 621 622where E is a constant chosen to give the proper behavior for NaN. Thus, 623the meaning of the return value is different for each set. Do not rely 624on this implementation; only the semantics documented below are 625guaranteed. 626 627 -- Runtime Function: int __eqsf2 (float A, float B) 628 -- Runtime Function: int __eqdf2 (double A, double B) 629 -- Runtime Function: int __eqtf2 (long double A, long double B) 630 These functions return zero if neither argument is NaN, and A and B 631 are equal. 632 633 -- Runtime Function: int __nesf2 (float A, float B) 634 -- Runtime Function: int __nedf2 (double A, double B) 635 -- Runtime Function: int __netf2 (long double A, long double B) 636 These functions return a nonzero value if either argument is NaN, 637 or if A and B are unequal. 638 639 -- Runtime Function: int __gesf2 (float A, float B) 640 -- Runtime Function: int __gedf2 (double A, double B) 641 -- Runtime Function: int __getf2 (long double A, long double B) 642 These functions return a value greater than or equal to zero if 643 neither argument is NaN, and A is greater than or equal to B. 644 645 -- Runtime Function: int __ltsf2 (float A, float B) 646 -- Runtime Function: int __ltdf2 (double A, double B) 647 -- Runtime Function: int __lttf2 (long double A, long double B) 648 These functions return a value less than zero if neither argument 649 is NaN, and A is strictly less than B. 650 651 -- Runtime Function: int __lesf2 (float A, float B) 652 -- Runtime Function: int __ledf2 (double A, double B) 653 -- Runtime Function: int __letf2 (long double A, long double B) 654 These functions return a value less than or equal to zero if 655 neither argument is NaN, and A is less than or equal to B. 656 657 -- Runtime Function: int __gtsf2 (float A, float B) 658 -- Runtime Function: int __gtdf2 (double A, double B) 659 -- Runtime Function: int __gttf2 (long double A, long double B) 660 These functions return a value greater than zero if neither 661 argument is NaN, and A is strictly greater than B. 662 6634.2.4 Other floating-point functions 664------------------------------------ 665 666 -- Runtime Function: float __powisf2 (float A, int B) 667 -- Runtime Function: double __powidf2 (double A, int B) 668 -- Runtime Function: long double __powitf2 (long double A, int B) 669 -- Runtime Function: long double __powixf2 (long double A, int B) 670 These functions convert raise A to the power B. 671 672 -- Runtime Function: complex float __mulsc3 (float A, float B, float C, 673 float D) 674 -- Runtime Function: complex double __muldc3 (double A, double B, 675 double C, double D) 676 -- Runtime Function: complex long double __multc3 (long double A, long 677 double B, long double C, long double D) 678 -- Runtime Function: complex long double __mulxc3 (long double A, long 679 double B, long double C, long double D) 680 These functions return the product of A + iB and C + iD, following 681 the rules of C99 Annex G. 682 683 -- Runtime Function: complex float __divsc3 (float A, float B, float C, 684 float D) 685 -- Runtime Function: complex double __divdc3 (double A, double B, 686 double C, double D) 687 -- Runtime Function: complex long double __divtc3 (long double A, long 688 double B, long double C, long double D) 689 -- Runtime Function: complex long double __divxc3 (long double A, long 690 double B, long double C, long double D) 691 These functions return the quotient of A + iB and C + iD (i.e., (A 692 + iB) / (C + iD)), following the rules of C99 Annex G. 693 694 695File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 696 6974.3 Routines for decimal floating point emulation 698================================================= 699 700The software decimal floating point library implements IEEE 754-2008 701decimal floating point arithmetic and is only activated on selected 702targets. 703 704 The software decimal floating point library supports either DPD 705(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 706selected at configure time. 707 7084.3.1 Arithmetic functions 709-------------------------- 710 711 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 712 B) 713 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 714 B) 715 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 716 B) 717 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 718 B) 719 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 720 _Decimal128 B) 721 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 722 _Decimal128 B) 723 These functions return the sum of A and B. 724 725 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 726 B) 727 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 728 B) 729 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 730 B) 731 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 732 B) 733 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 734 _Decimal128 B) 735 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 736 _Decimal128 B) 737 These functions return the difference between B and A; that is, 738 A - B. 739 740 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 741 B) 742 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 743 B) 744 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 745 B) 746 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 747 B) 748 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 749 _Decimal128 B) 750 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 751 _Decimal128 B) 752 These functions return the product of A and B. 753 754 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 755 B) 756 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 757 B) 758 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 759 B) 760 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 761 B) 762 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 763 _Decimal128 B) 764 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 765 _Decimal128 B) 766 These functions return the quotient of A and B; that is, A / B. 767 768 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 769 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 770 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 771 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 772 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 773 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 774 These functions return the negation of A. They simply flip the 775 sign bit, so they can produce negative zero and negative NaN. 776 7774.3.2 Conversion functions 778-------------------------- 779 780 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 781 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 782 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 783 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 784 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 785 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 786 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 787 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 788 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 789 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 790 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 791 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 792 These functions convert the value A from one decimal floating type 793 to another. 794 795 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 796 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 797 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 798 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 799 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 800 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 801 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 802 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 803 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 804 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 805 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 806 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 807 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 808 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 809 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 810 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 811 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 812 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 813 These functions convert the value of A from a binary floating type 814 to a decimal floating type of a different size. 815 816 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 817 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 818 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 819 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 820 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 821 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 822 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 823 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 824 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 825 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 826 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 827 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 828 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 829 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 830 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 831 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 832 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 833 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 834 These functions convert the value of A from a decimal floating type 835 to a binary floating type of a different size. 836 837 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 838 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 839 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 840 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 841 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 842 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 843 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 844 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 845 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 846 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 847 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 848 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 849 These functions convert the value of A between decimal and binary 850 floating types of the same size. 851 852 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 853 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 854 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 855 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 856 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 857 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 858 These functions convert A to a signed integer. 859 860 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 861 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 862 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 863 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 864 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 865 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 866 These functions convert A to a signed long. 867 868 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 869 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 870 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 871 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 872 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 873 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 874 These functions convert A to an unsigned integer. Negative values 875 all become zero. 876 877 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 878 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 879 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 880 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 881 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 882 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 883 These functions convert A to an unsigned long. Negative values all 884 become zero. 885 886 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 887 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 888 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 889 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 890 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 891 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 892 These functions convert I, a signed integer, to decimal floating 893 point. 894 895 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 896 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 897 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 898 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 899 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 900 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 901 These functions convert I, a signed long, to decimal floating 902 point. 903 904 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 905 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 906 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 907 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 908 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 909 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 910 These functions convert I, an unsigned integer, to decimal floating 911 point. 912 913 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 914 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 915 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 916 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 917 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 918 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 919 These functions convert I, an unsigned long, to decimal floating 920 point. 921 9224.3.3 Comparison functions 923-------------------------- 924 925 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 926 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 927 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 928 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 929 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 930 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 931 These functions return a nonzero value if either argument is NaN, 932 otherwise 0. 933 934 There is also a complete group of higher level functions which 935correspond directly to comparison operators. They implement the ISO C 936semantics for floating-point comparisons, taking NaN into account. Pay 937careful attention to the return values defined for each set. Under the 938hood, all of these routines are implemented as 939 940 if (__bid_unordXd2 (a, b)) 941 return E; 942 return __bid_cmpXd2 (a, b); 943 944where E is a constant chosen to give the proper behavior for NaN. Thus, 945the meaning of the return value is different for each set. Do not rely 946on this implementation; only the semantics documented below are 947guaranteed. 948 949 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 950 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 951 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 952 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 953 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 954 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 955 These functions return zero if neither argument is NaN, and A and B 956 are equal. 957 958 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 959 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 960 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 961 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 962 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 963 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 964 These functions return a nonzero value if either argument is NaN, 965 or if A and B are unequal. 966 967 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 968 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 969 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 970 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 971 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 972 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 973 These functions return a value greater than or equal to zero if 974 neither argument is NaN, and A is greater than or equal to B. 975 976 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 977 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 978 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 979 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 980 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 981 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 982 These functions return a value less than zero if neither argument 983 is NaN, and A is strictly less than B. 984 985 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 986 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 987 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 988 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 989 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 990 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 991 These functions return a value less than or equal to zero if 992 neither argument is NaN, and A is less than or equal to B. 993 994 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 995 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 996 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 997 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 998 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 999 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 1000 These functions return a value greater than zero if neither 1001 argument is NaN, and A is strictly greater than B. 1002 1003 1004File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1005 10064.4 Routines for fixed-point fractional emulation 1007================================================= 1008 1009The software fixed-point library implements fixed-point fractional 1010arithmetic, and is only activated on selected targets. 1011 1012 For ease of comprehension 'fract' is an alias for the '_Fract' type, 1013'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'. 1014 1015 For illustrative purposes, in this section the fixed-point fractional 1016type 'short fract' is assumed to correspond to machine mode 'QQmode'; 1017'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode'; 1018'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode'; 1019'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and 1020'unsigned long long fract' to 'UDQmode'. Similarly the fixed-point 1021accumulator type 'short accum' corresponds to 'HAmode'; 1022'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode'; 1023'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode'; 1024'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and 1025'unsigned long long accum' to 'UTAmode'. 1026 10274.4.1 Arithmetic functions 1028-------------------------- 1029 1030 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1031 B) 1032 -- Runtime Function: fract __addhq3 (fract A, fract B) 1033 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1034 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1035 long fract B) 1036 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1037 fract A, unsigned short fract B) 1038 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1039 unsigned fract B) 1040 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract 1041 A, unsigned long fract B) 1042 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1043 long fract A, unsigned long long fract B) 1044 -- Runtime Function: short accum __addha3 (short accum A, short accum 1045 B) 1046 -- Runtime Function: accum __addsa3 (accum A, accum B) 1047 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1048 -- Runtime Function: long long accum __addta3 (long long accum A, long 1049 long accum B) 1050 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1051 accum A, unsigned short accum B) 1052 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1053 unsigned accum B) 1054 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum 1055 A, unsigned long accum B) 1056 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1057 long accum A, unsigned long long accum B) 1058 These functions return the sum of A and B. 1059 1060 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract 1061 B) 1062 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1063 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1064 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1065 long long fract B) 1066 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum 1067 B) 1068 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1069 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1070 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1071 long long accum B) 1072 These functions return the sum of A and B with signed saturation. 1073 1074 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1075 fract A, unsigned short fract B) 1076 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1077 unsigned fract B) 1078 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1079 fract A, unsigned long fract B) 1080 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1081 long long fract A, unsigned long long fract B) 1082 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1083 accum A, unsigned short accum B) 1084 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1085 unsigned accum B) 1086 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1087 accum A, unsigned long accum B) 1088 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1089 long long accum A, unsigned long long accum B) 1090 These functions return the sum of A and B with unsigned saturation. 1091 1092 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1093 B) 1094 -- Runtime Function: fract __subhq3 (fract A, fract B) 1095 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1096 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1097 long fract B) 1098 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1099 fract A, unsigned short fract B) 1100 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1101 unsigned fract B) 1102 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract 1103 A, unsigned long fract B) 1104 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1105 long fract A, unsigned long long fract B) 1106 -- Runtime Function: short accum __subha3 (short accum A, short accum 1107 B) 1108 -- Runtime Function: accum __subsa3 (accum A, accum B) 1109 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1110 -- Runtime Function: long long accum __subta3 (long long accum A, long 1111 long accum B) 1112 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1113 accum A, unsigned short accum B) 1114 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1115 unsigned accum B) 1116 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum 1117 A, unsigned long accum B) 1118 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1119 long accum A, unsigned long long accum B) 1120 These functions return the difference of A and B; that is, 'A - B'. 1121 1122 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract 1123 B) 1124 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1125 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1126 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1127 long long fract B) 1128 -- Runtime Function: short accum __sssubha3 (short accum A, short accum 1129 B) 1130 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1131 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1132 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1133 long long accum B) 1134 These functions return the difference of A and B with signed 1135 saturation; that is, 'A - B'. 1136 1137 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1138 fract A, unsigned short fract B) 1139 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1140 unsigned fract B) 1141 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1142 fract A, unsigned long fract B) 1143 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1144 long long fract A, unsigned long long fract B) 1145 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1146 accum A, unsigned short accum B) 1147 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1148 unsigned accum B) 1149 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1150 accum A, unsigned long accum B) 1151 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1152 long long accum A, unsigned long long accum B) 1153 These functions return the difference of A and B with unsigned 1154 saturation; that is, 'A - B'. 1155 1156 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1157 B) 1158 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1159 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1160 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1161 long fract B) 1162 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1163 fract A, unsigned short fract B) 1164 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1165 unsigned fract B) 1166 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract 1167 A, unsigned long fract B) 1168 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1169 long fract A, unsigned long long fract B) 1170 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1171 B) 1172 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1173 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1174 -- Runtime Function: long long accum __multa3 (long long accum A, long 1175 long accum B) 1176 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1177 accum A, unsigned short accum B) 1178 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1179 unsigned accum B) 1180 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum 1181 A, unsigned long accum B) 1182 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1183 long accum A, unsigned long long accum B) 1184 These functions return the product of A and B. 1185 1186 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract 1187 B) 1188 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1189 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1190 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1191 long long fract B) 1192 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum 1193 B) 1194 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1195 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1196 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1197 long long accum B) 1198 These functions return the product of A and B with signed 1199 saturation. 1200 1201 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1202 fract A, unsigned short fract B) 1203 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1204 unsigned fract B) 1205 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1206 fract A, unsigned long fract B) 1207 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1208 long long fract A, unsigned long long fract B) 1209 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1210 accum A, unsigned short accum B) 1211 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1212 unsigned accum B) 1213 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1214 accum A, unsigned long accum B) 1215 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1216 long long accum A, unsigned long long accum B) 1217 These functions return the product of A and B with unsigned 1218 saturation. 1219 1220 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1221 B) 1222 -- Runtime Function: fract __divhq3 (fract A, fract B) 1223 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1224 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1225 long fract B) 1226 -- Runtime Function: short accum __divha3 (short accum A, short accum 1227 B) 1228 -- Runtime Function: accum __divsa3 (accum A, accum B) 1229 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1230 -- Runtime Function: long long accum __divta3 (long long accum A, long 1231 long accum B) 1232 These functions return the quotient of the signed division of A and 1233 B. 1234 1235 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1236 fract A, unsigned short fract B) 1237 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1238 unsigned fract B) 1239 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1240 fract A, unsigned long fract B) 1241 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long 1242 long fract A, unsigned long long fract B) 1243 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1244 accum A, unsigned short accum B) 1245 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1246 unsigned accum B) 1247 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1248 accum A, unsigned long accum B) 1249 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long 1250 long accum A, unsigned long long accum B) 1251 These functions return the quotient of the unsigned division of A 1252 and B. 1253 1254 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract 1255 B) 1256 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1257 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1258 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1259 long long fract B) 1260 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum 1261 B) 1262 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1263 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1264 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1265 long long accum B) 1266 These functions return the quotient of the signed division of A and 1267 B with signed saturation. 1268 1269 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1270 fract A, unsigned short fract B) 1271 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1272 unsigned fract B) 1273 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1274 fract A, unsigned long fract B) 1275 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1276 long long fract A, unsigned long long fract B) 1277 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1278 accum A, unsigned short accum B) 1279 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1280 unsigned accum B) 1281 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1282 accum A, unsigned long accum B) 1283 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1284 long long accum A, unsigned long long accum B) 1285 These functions return the quotient of the unsigned division of A 1286 and B with unsigned saturation. 1287 1288 -- Runtime Function: short fract __negqq2 (short fract A) 1289 -- Runtime Function: fract __neghq2 (fract A) 1290 -- Runtime Function: long fract __negsq2 (long fract A) 1291 -- Runtime Function: long long fract __negdq2 (long long fract A) 1292 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1293 fract A) 1294 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1295 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract 1296 A) 1297 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1298 long fract A) 1299 -- Runtime Function: short accum __negha2 (short accum A) 1300 -- Runtime Function: accum __negsa2 (accum A) 1301 -- Runtime Function: long accum __negda2 (long accum A) 1302 -- Runtime Function: long long accum __negta2 (long long accum A) 1303 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1304 accum A) 1305 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1306 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum 1307 A) 1308 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1309 long accum A) 1310 These functions return the negation of A. 1311 1312 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1313 -- Runtime Function: fract __ssneghq2 (fract A) 1314 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1315 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1316 -- Runtime Function: short accum __ssnegha2 (short accum A) 1317 -- Runtime Function: accum __ssnegsa2 (accum A) 1318 -- Runtime Function: long accum __ssnegda2 (long accum A) 1319 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1320 These functions return the negation of A with signed saturation. 1321 1322 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1323 fract A) 1324 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1325 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1326 fract A) 1327 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1328 long long fract A) 1329 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1330 accum A) 1331 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1332 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1333 accum A) 1334 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1335 long long accum A) 1336 These functions return the negation of A with unsigned saturation. 1337 1338 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1339 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1340 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1341 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1342 B) 1343 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1344 fract A, int B) 1345 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1346 B) 1347 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1348 fract A, int B) 1349 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long 1350 long fract A, int B) 1351 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1352 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1353 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1354 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1355 B) 1356 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1357 accum A, int B) 1358 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1359 B) 1360 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1361 accum A, int B) 1362 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long 1363 long accum A, int B) 1364 These functions return the result of shifting A left by B bits. 1365 1366 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1367 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1368 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1369 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1370 B) 1371 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1372 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1373 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1374 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1375 B) 1376 These functions return the result of arithmetically shifting A 1377 right by B bits. 1378 1379 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1380 fract A, int B) 1381 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1382 B) 1383 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1384 fract A, int B) 1385 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long 1386 long fract A, int B) 1387 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1388 accum A, int B) 1389 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1390 B) 1391 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1392 accum A, int B) 1393 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long 1394 long accum A, int B) 1395 These functions return the result of logically shifting A right by 1396 B bits. 1397 1398 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1399 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1400 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1401 int B) 1402 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1403 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1404 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1405 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1406 int B) 1407 These functions return the result of shifting A left by B bits with 1408 signed saturation. 1409 1410 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1411 fract A, int B) 1412 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int 1413 B) 1414 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1415 fract A, int B) 1416 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1417 long long fract A, int B) 1418 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1419 accum A, int B) 1420 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int 1421 B) 1422 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1423 accum A, int B) 1424 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1425 long long accum A, int B) 1426 These functions return the result of shifting A left by B bits with 1427 unsigned saturation. 1428 14294.4.2 Comparison functions 1430-------------------------- 1431 1432The following functions implement fixed-point comparisons. These 1433functions implement a low-level compare, upon which the higher level 1434comparison operators (such as less than and greater than or equal to) 1435can be constructed. The returned values lie in the range zero to two, 1436to allow the high-level operators to be implemented by testing the 1437returned result using either signed or unsigned comparison. 1438 1439 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1440 -- Runtime Function: int __cmphq2 (fract A, fract B) 1441 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1442 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1443 B) 1444 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1445 short fract B) 1446 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1447 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1448 long fract B) 1449 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1450 unsigned long long fract B) 1451 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1452 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1453 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1454 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1455 B) 1456 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1457 short accum B) 1458 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1459 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1460 long accum B) 1461 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1462 unsigned long long accum B) 1463 These functions perform a signed or unsigned comparison of A and B 1464 (depending on the selected machine mode). If A is less than B, 1465 they return 0; if A is greater than B, they return 2; and if A and 1466 B are equal they return 1. 1467 14684.4.3 Conversion functions 1469-------------------------- 1470 1471 -- Runtime Function: fract __fractqqhq2 (short fract A) 1472 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1473 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1474 -- Runtime Function: short accum __fractqqha (short fract A) 1475 -- Runtime Function: accum __fractqqsa (short fract A) 1476 -- Runtime Function: long accum __fractqqda (short fract A) 1477 -- Runtime Function: long long accum __fractqqta (short fract A) 1478 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1479 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1480 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1481 -- Runtime Function: unsigned long long fract __fractqqudq (short fract 1482 A) 1483 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1484 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1485 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1486 -- Runtime Function: unsigned long long accum __fractqquta (short fract 1487 A) 1488 -- Runtime Function: signed char __fractqqqi (short fract A) 1489 -- Runtime Function: short __fractqqhi (short fract A) 1490 -- Runtime Function: int __fractqqsi (short fract A) 1491 -- Runtime Function: long __fractqqdi (short fract A) 1492 -- Runtime Function: long long __fractqqti (short fract A) 1493 -- Runtime Function: float __fractqqsf (short fract A) 1494 -- Runtime Function: double __fractqqdf (short fract A) 1495 -- Runtime Function: short fract __fracthqqq2 (fract A) 1496 -- Runtime Function: long fract __fracthqsq2 (fract A) 1497 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1498 -- Runtime Function: short accum __fracthqha (fract A) 1499 -- Runtime Function: accum __fracthqsa (fract A) 1500 -- Runtime Function: long accum __fracthqda (fract A) 1501 -- Runtime Function: long long accum __fracthqta (fract A) 1502 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1503 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1504 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1505 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1506 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1507 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1508 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1509 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1510 -- Runtime Function: signed char __fracthqqi (fract A) 1511 -- Runtime Function: short __fracthqhi (fract A) 1512 -- Runtime Function: int __fracthqsi (fract A) 1513 -- Runtime Function: long __fracthqdi (fract A) 1514 -- Runtime Function: long long __fracthqti (fract A) 1515 -- Runtime Function: float __fracthqsf (fract A) 1516 -- Runtime Function: double __fracthqdf (fract A) 1517 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1518 -- Runtime Function: fract __fractsqhq2 (long fract A) 1519 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1520 -- Runtime Function: short accum __fractsqha (long fract A) 1521 -- Runtime Function: accum __fractsqsa (long fract A) 1522 -- Runtime Function: long accum __fractsqda (long fract A) 1523 -- Runtime Function: long long accum __fractsqta (long fract A) 1524 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1525 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1526 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1527 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1528 A) 1529 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1530 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1531 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1532 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1533 A) 1534 -- Runtime Function: signed char __fractsqqi (long fract A) 1535 -- Runtime Function: short __fractsqhi (long fract A) 1536 -- Runtime Function: int __fractsqsi (long fract A) 1537 -- Runtime Function: long __fractsqdi (long fract A) 1538 -- Runtime Function: long long __fractsqti (long fract A) 1539 -- Runtime Function: float __fractsqsf (long fract A) 1540 -- Runtime Function: double __fractsqdf (long fract A) 1541 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1542 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1543 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1544 -- Runtime Function: short accum __fractdqha (long long fract A) 1545 -- Runtime Function: accum __fractdqsa (long long fract A) 1546 -- Runtime Function: long accum __fractdqda (long long fract A) 1547 -- Runtime Function: long long accum __fractdqta (long long fract A) 1548 -- Runtime Function: unsigned short fract __fractdquqq (long long fract 1549 A) 1550 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1551 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1552 A) 1553 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1554 fract A) 1555 -- Runtime Function: unsigned short accum __fractdquha (long long fract 1556 A) 1557 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1558 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1559 A) 1560 -- Runtime Function: unsigned long long accum __fractdquta (long long 1561 fract A) 1562 -- Runtime Function: signed char __fractdqqi (long long fract A) 1563 -- Runtime Function: short __fractdqhi (long long fract A) 1564 -- Runtime Function: int __fractdqsi (long long fract A) 1565 -- Runtime Function: long __fractdqdi (long long fract A) 1566 -- Runtime Function: long long __fractdqti (long long fract A) 1567 -- Runtime Function: float __fractdqsf (long long fract A) 1568 -- Runtime Function: double __fractdqdf (long long fract A) 1569 -- Runtime Function: short fract __fracthaqq (short accum A) 1570 -- Runtime Function: fract __fracthahq (short accum A) 1571 -- Runtime Function: long fract __fracthasq (short accum A) 1572 -- Runtime Function: long long fract __fracthadq (short accum A) 1573 -- Runtime Function: accum __fracthasa2 (short accum A) 1574 -- Runtime Function: long accum __fracthada2 (short accum A) 1575 -- Runtime Function: long long accum __fracthata2 (short accum A) 1576 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1577 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1578 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1579 -- Runtime Function: unsigned long long fract __fracthaudq (short accum 1580 A) 1581 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1582 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1583 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1584 -- Runtime Function: unsigned long long accum __fracthauta (short accum 1585 A) 1586 -- Runtime Function: signed char __fracthaqi (short accum A) 1587 -- Runtime Function: short __fracthahi (short accum A) 1588 -- Runtime Function: int __fracthasi (short accum A) 1589 -- Runtime Function: long __fracthadi (short accum A) 1590 -- Runtime Function: long long __fracthati (short accum A) 1591 -- Runtime Function: float __fracthasf (short accum A) 1592 -- Runtime Function: double __fracthadf (short accum A) 1593 -- Runtime Function: short fract __fractsaqq (accum A) 1594 -- Runtime Function: fract __fractsahq (accum A) 1595 -- Runtime Function: long fract __fractsasq (accum A) 1596 -- Runtime Function: long long fract __fractsadq (accum A) 1597 -- Runtime Function: short accum __fractsaha2 (accum A) 1598 -- Runtime Function: long accum __fractsada2 (accum A) 1599 -- Runtime Function: long long accum __fractsata2 (accum A) 1600 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1601 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1602 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1603 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1604 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1605 -- Runtime Function: unsigned accum __fractsausa (accum A) 1606 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1607 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1608 -- Runtime Function: signed char __fractsaqi (accum A) 1609 -- Runtime Function: short __fractsahi (accum A) 1610 -- Runtime Function: int __fractsasi (accum A) 1611 -- Runtime Function: long __fractsadi (accum A) 1612 -- Runtime Function: long long __fractsati (accum A) 1613 -- Runtime Function: float __fractsasf (accum A) 1614 -- Runtime Function: double __fractsadf (accum A) 1615 -- Runtime Function: short fract __fractdaqq (long accum A) 1616 -- Runtime Function: fract __fractdahq (long accum A) 1617 -- Runtime Function: long fract __fractdasq (long accum A) 1618 -- Runtime Function: long long fract __fractdadq (long accum A) 1619 -- Runtime Function: short accum __fractdaha2 (long accum A) 1620 -- Runtime Function: accum __fractdasa2 (long accum A) 1621 -- Runtime Function: long long accum __fractdata2 (long accum A) 1622 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1623 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1624 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1625 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1626 A) 1627 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1628 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1629 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1630 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1631 A) 1632 -- Runtime Function: signed char __fractdaqi (long accum A) 1633 -- Runtime Function: short __fractdahi (long accum A) 1634 -- Runtime Function: int __fractdasi (long accum A) 1635 -- Runtime Function: long __fractdadi (long accum A) 1636 -- Runtime Function: long long __fractdati (long accum A) 1637 -- Runtime Function: float __fractdasf (long accum A) 1638 -- Runtime Function: double __fractdadf (long accum A) 1639 -- Runtime Function: short fract __fracttaqq (long long accum A) 1640 -- Runtime Function: fract __fracttahq (long long accum A) 1641 -- Runtime Function: long fract __fracttasq (long long accum A) 1642 -- Runtime Function: long long fract __fracttadq (long long accum A) 1643 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1644 -- Runtime Function: accum __fracttasa2 (long long accum A) 1645 -- Runtime Function: long accum __fracttada2 (long long accum A) 1646 -- Runtime Function: unsigned short fract __fracttauqq (long long accum 1647 A) 1648 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1649 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1650 A) 1651 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1652 accum A) 1653 -- Runtime Function: unsigned short accum __fracttauha (long long accum 1654 A) 1655 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1656 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1657 A) 1658 -- Runtime Function: unsigned long long accum __fracttauta (long long 1659 accum A) 1660 -- Runtime Function: signed char __fracttaqi (long long accum A) 1661 -- Runtime Function: short __fracttahi (long long accum A) 1662 -- Runtime Function: int __fracttasi (long long accum A) 1663 -- Runtime Function: long __fracttadi (long long accum A) 1664 -- Runtime Function: long long __fracttati (long long accum A) 1665 -- Runtime Function: float __fracttasf (long long accum A) 1666 -- Runtime Function: double __fracttadf (long long accum A) 1667 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1668 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1669 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1670 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract 1671 A) 1672 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1673 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1674 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1675 -- Runtime Function: long long accum __fractuqqta (unsigned short fract 1676 A) 1677 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1678 fract A) 1679 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short 1680 fract A) 1681 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1682 short fract A) 1683 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short 1684 fract A) 1685 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract 1686 A) 1687 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1688 fract A) 1689 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1690 short fract A) 1691 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1692 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1693 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1694 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1695 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1696 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1697 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1698 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1699 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1700 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1701 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1702 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1703 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1704 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1705 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1706 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1707 fract A) 1708 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract 1709 A) 1710 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1711 fract A) 1712 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract 1713 A) 1714 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1715 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1716 A) 1717 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1718 fract A) 1719 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1720 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1721 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1722 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1723 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1724 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1725 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1726 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1727 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1728 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1729 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1730 A) 1731 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1732 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1733 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1734 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1735 A) 1736 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long 1737 fract A) 1738 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract 1739 A) 1740 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1741 long fract A) 1742 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1743 fract A) 1744 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1745 A) 1746 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1747 fract A) 1748 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1749 long fract A) 1750 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1751 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1752 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1753 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1754 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1755 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1756 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1757 -- Runtime Function: short fract __fractudqqq (unsigned long long fract 1758 A) 1759 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1760 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1761 A) 1762 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1763 fract A) 1764 -- Runtime Function: short accum __fractudqha (unsigned long long fract 1765 A) 1766 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1767 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1768 A) 1769 -- Runtime Function: long long accum __fractudqta (unsigned long long 1770 fract A) 1771 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long 1772 long fract A) 1773 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1774 fract A) 1775 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1776 long fract A) 1777 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1778 long fract A) 1779 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1780 fract A) 1781 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1782 long fract A) 1783 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1784 long long fract A) 1785 -- Runtime Function: signed char __fractudqqi (unsigned long long fract 1786 A) 1787 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1788 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1789 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1790 -- Runtime Function: long long __fractudqti (unsigned long long fract 1791 A) 1792 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1793 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1794 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1795 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1796 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1797 -- Runtime Function: long long fract __fractuhadq (unsigned short accum 1798 A) 1799 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1800 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1801 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1802 -- Runtime Function: long long accum __fractuhata (unsigned short accum 1803 A) 1804 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short 1805 accum A) 1806 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum 1807 A) 1808 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1809 accum A) 1810 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1811 short accum A) 1812 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1813 accum A) 1814 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short 1815 accum A) 1816 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1817 short accum A) 1818 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1819 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1820 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1821 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1822 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1823 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1824 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1825 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1826 -- Runtime Function: fract __fractusahq (unsigned accum A) 1827 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1828 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1829 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1830 -- Runtime Function: accum __fractusasa (unsigned accum A) 1831 -- Runtime Function: long accum __fractusada (unsigned accum A) 1832 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1833 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum 1834 A) 1835 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1836 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1837 A) 1838 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1839 accum A) 1840 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1841 accum A) 1842 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum 1843 A) 1844 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1845 accum A) 1846 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1847 -- Runtime Function: short __fractusahi (unsigned accum A) 1848 -- Runtime Function: int __fractusasi (unsigned accum A) 1849 -- Runtime Function: long __fractusadi (unsigned accum A) 1850 -- Runtime Function: long long __fractusati (unsigned accum A) 1851 -- Runtime Function: float __fractusasf (unsigned accum A) 1852 -- Runtime Function: double __fractusadf (unsigned accum A) 1853 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1854 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1855 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1856 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1857 A) 1858 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1859 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1860 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1861 -- Runtime Function: long long accum __fractudata (unsigned long accum 1862 A) 1863 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1864 accum A) 1865 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1866 A) 1867 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1868 accum A) 1869 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1870 long accum A) 1871 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long 1872 accum A) 1873 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum 1874 A) 1875 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1876 long accum A) 1877 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1878 -- Runtime Function: short __fractudahi (unsigned long accum A) 1879 -- Runtime Function: int __fractudasi (unsigned long accum A) 1880 -- Runtime Function: long __fractudadi (unsigned long accum A) 1881 -- Runtime Function: long long __fractudati (unsigned long accum A) 1882 -- Runtime Function: float __fractudasf (unsigned long accum A) 1883 -- Runtime Function: double __fractudadf (unsigned long accum A) 1884 -- Runtime Function: short fract __fractutaqq (unsigned long long accum 1885 A) 1886 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1887 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1888 A) 1889 -- Runtime Function: long long fract __fractutadq (unsigned long long 1890 accum A) 1891 -- Runtime Function: short accum __fractutaha (unsigned long long accum 1892 A) 1893 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1894 -- Runtime Function: long accum __fractutada (unsigned long long accum 1895 A) 1896 -- Runtime Function: long long accum __fractutata (unsigned long long 1897 accum A) 1898 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1899 long accum A) 1900 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1901 accum A) 1902 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1903 long accum A) 1904 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1905 long long accum A) 1906 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long 1907 long accum A) 1908 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1909 accum A) 1910 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1911 long accum A) 1912 -- Runtime Function: signed char __fractutaqi (unsigned long long accum 1913 A) 1914 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1915 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1916 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1917 -- Runtime Function: long long __fractutati (unsigned long long accum 1918 A) 1919 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1920 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1921 -- Runtime Function: short fract __fractqiqq (signed char A) 1922 -- Runtime Function: fract __fractqihq (signed char A) 1923 -- Runtime Function: long fract __fractqisq (signed char A) 1924 -- Runtime Function: long long fract __fractqidq (signed char A) 1925 -- Runtime Function: short accum __fractqiha (signed char A) 1926 -- Runtime Function: accum __fractqisa (signed char A) 1927 -- Runtime Function: long accum __fractqida (signed char A) 1928 -- Runtime Function: long long accum __fractqita (signed char A) 1929 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1930 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1931 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1932 -- Runtime Function: unsigned long long fract __fractqiudq (signed char 1933 A) 1934 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1935 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1936 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1937 -- Runtime Function: unsigned long long accum __fractqiuta (signed char 1938 A) 1939 -- Runtime Function: short fract __fracthiqq (short A) 1940 -- Runtime Function: fract __fracthihq (short A) 1941 -- Runtime Function: long fract __fracthisq (short A) 1942 -- Runtime Function: long long fract __fracthidq (short A) 1943 -- Runtime Function: short accum __fracthiha (short A) 1944 -- Runtime Function: accum __fracthisa (short A) 1945 -- Runtime Function: long accum __fracthida (short A) 1946 -- Runtime Function: long long accum __fracthita (short A) 1947 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1948 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1949 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1950 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1951 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1952 -- Runtime Function: unsigned accum __fracthiusa (short A) 1953 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1954 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1955 -- Runtime Function: short fract __fractsiqq (int A) 1956 -- Runtime Function: fract __fractsihq (int A) 1957 -- Runtime Function: long fract __fractsisq (int A) 1958 -- Runtime Function: long long fract __fractsidq (int A) 1959 -- Runtime Function: short accum __fractsiha (int A) 1960 -- Runtime Function: accum __fractsisa (int A) 1961 -- Runtime Function: long accum __fractsida (int A) 1962 -- Runtime Function: long long accum __fractsita (int A) 1963 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1964 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1965 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1966 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1967 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1968 -- Runtime Function: unsigned accum __fractsiusa (int A) 1969 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1970 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1971 -- Runtime Function: short fract __fractdiqq (long A) 1972 -- Runtime Function: fract __fractdihq (long A) 1973 -- Runtime Function: long fract __fractdisq (long A) 1974 -- Runtime Function: long long fract __fractdidq (long A) 1975 -- Runtime Function: short accum __fractdiha (long A) 1976 -- Runtime Function: accum __fractdisa (long A) 1977 -- Runtime Function: long accum __fractdida (long A) 1978 -- Runtime Function: long long accum __fractdita (long A) 1979 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1980 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1981 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1982 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1983 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1984 -- Runtime Function: unsigned accum __fractdiusa (long A) 1985 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1986 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1987 -- Runtime Function: short fract __fracttiqq (long long A) 1988 -- Runtime Function: fract __fracttihq (long long A) 1989 -- Runtime Function: long fract __fracttisq (long long A) 1990 -- Runtime Function: long long fract __fracttidq (long long A) 1991 -- Runtime Function: short accum __fracttiha (long long A) 1992 -- Runtime Function: accum __fracttisa (long long A) 1993 -- Runtime Function: long accum __fracttida (long long A) 1994 -- Runtime Function: long long accum __fracttita (long long A) 1995 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 1996 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 1997 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 1998 -- Runtime Function: unsigned long long fract __fracttiudq (long long 1999 A) 2000 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2001 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2002 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2003 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2004 A) 2005 -- Runtime Function: short fract __fractsfqq (float A) 2006 -- Runtime Function: fract __fractsfhq (float A) 2007 -- Runtime Function: long fract __fractsfsq (float A) 2008 -- Runtime Function: long long fract __fractsfdq (float A) 2009 -- Runtime Function: short accum __fractsfha (float A) 2010 -- Runtime Function: accum __fractsfsa (float A) 2011 -- Runtime Function: long accum __fractsfda (float A) 2012 -- Runtime Function: long long accum __fractsfta (float A) 2013 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2014 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2015 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2016 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2017 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2018 -- Runtime Function: unsigned accum __fractsfusa (float A) 2019 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2020 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2021 -- Runtime Function: short fract __fractdfqq (double A) 2022 -- Runtime Function: fract __fractdfhq (double A) 2023 -- Runtime Function: long fract __fractdfsq (double A) 2024 -- Runtime Function: long long fract __fractdfdq (double A) 2025 -- Runtime Function: short accum __fractdfha (double A) 2026 -- Runtime Function: accum __fractdfsa (double A) 2027 -- Runtime Function: long accum __fractdfda (double A) 2028 -- Runtime Function: long long accum __fractdfta (double A) 2029 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2030 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2031 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2032 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2033 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2034 -- Runtime Function: unsigned accum __fractdfusa (double A) 2035 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2036 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2037 These functions convert from fractional and signed non-fractionals 2038 to fractionals and signed non-fractionals, without saturation. 2039 2040 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2041 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2042 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2043 -- Runtime Function: short accum __satfractqqha (short fract A) 2044 -- Runtime Function: accum __satfractqqsa (short fract A) 2045 -- Runtime Function: long accum __satfractqqda (short fract A) 2046 -- Runtime Function: long long accum __satfractqqta (short fract A) 2047 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2048 A) 2049 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2050 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2051 A) 2052 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2053 fract A) 2054 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2055 A) 2056 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2057 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2058 A) 2059 -- Runtime Function: unsigned long long accum __satfractqquta (short 2060 fract A) 2061 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2062 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2063 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2064 -- Runtime Function: short accum __satfracthqha (fract A) 2065 -- Runtime Function: accum __satfracthqsa (fract A) 2066 -- Runtime Function: long accum __satfracthqda (fract A) 2067 -- Runtime Function: long long accum __satfracthqta (fract A) 2068 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2069 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2070 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2071 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2072 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2073 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2074 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2075 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2076 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2077 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2078 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2079 -- Runtime Function: short accum __satfractsqha (long fract A) 2080 -- Runtime Function: accum __satfractsqsa (long fract A) 2081 -- Runtime Function: long accum __satfractsqda (long fract A) 2082 -- Runtime Function: long long accum __satfractsqta (long fract A) 2083 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2084 A) 2085 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2086 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2087 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2088 fract A) 2089 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2090 A) 2091 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2092 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2093 -- Runtime Function: unsigned long long accum __satfractsquta (long 2094 fract A) 2095 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2096 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2097 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2098 -- Runtime Function: short accum __satfractdqha (long long fract A) 2099 -- Runtime Function: accum __satfractdqsa (long long fract A) 2100 -- Runtime Function: long accum __satfractdqda (long long fract A) 2101 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2102 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2103 fract A) 2104 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2105 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2106 fract A) 2107 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2108 long fract A) 2109 -- Runtime Function: unsigned short accum __satfractdquha (long long 2110 fract A) 2111 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2112 -- Runtime Function: unsigned long accum __satfractdquda (long long 2113 fract A) 2114 -- Runtime Function: unsigned long long accum __satfractdquta (long 2115 long fract A) 2116 -- Runtime Function: short fract __satfracthaqq (short accum A) 2117 -- Runtime Function: fract __satfracthahq (short accum A) 2118 -- Runtime Function: long fract __satfracthasq (short accum A) 2119 -- Runtime Function: long long fract __satfracthadq (short accum A) 2120 -- Runtime Function: accum __satfracthasa2 (short accum A) 2121 -- Runtime Function: long accum __satfracthada2 (short accum A) 2122 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2123 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2124 A) 2125 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2126 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2127 A) 2128 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2129 accum A) 2130 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2131 A) 2132 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2133 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2134 A) 2135 -- Runtime Function: unsigned long long accum __satfracthauta (short 2136 accum A) 2137 -- Runtime Function: short fract __satfractsaqq (accum A) 2138 -- Runtime Function: fract __satfractsahq (accum A) 2139 -- Runtime Function: long fract __satfractsasq (accum A) 2140 -- Runtime Function: long long fract __satfractsadq (accum A) 2141 -- Runtime Function: short accum __satfractsaha2 (accum A) 2142 -- Runtime Function: long accum __satfractsada2 (accum A) 2143 -- Runtime Function: long long accum __satfractsata2 (accum A) 2144 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2145 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2146 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2147 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2148 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2149 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2150 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2151 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2152 -- Runtime Function: short fract __satfractdaqq (long accum A) 2153 -- Runtime Function: fract __satfractdahq (long accum A) 2154 -- Runtime Function: long fract __satfractdasq (long accum A) 2155 -- Runtime Function: long long fract __satfractdadq (long accum A) 2156 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2157 -- Runtime Function: accum __satfractdasa2 (long accum A) 2158 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2159 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2160 A) 2161 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2162 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2163 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2164 accum A) 2165 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2166 A) 2167 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2168 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2169 -- Runtime Function: unsigned long long accum __satfractdauta (long 2170 accum A) 2171 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2172 -- Runtime Function: fract __satfracttahq (long long accum A) 2173 -- Runtime Function: long fract __satfracttasq (long long accum A) 2174 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2175 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2176 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2177 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2178 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2179 accum A) 2180 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2181 -- Runtime Function: unsigned long fract __satfracttausq (long long 2182 accum A) 2183 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2184 long accum A) 2185 -- Runtime Function: unsigned short accum __satfracttauha (long long 2186 accum A) 2187 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2188 -- Runtime Function: unsigned long accum __satfracttauda (long long 2189 accum A) 2190 -- Runtime Function: unsigned long long accum __satfracttauta (long 2191 long accum A) 2192 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2193 A) 2194 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2195 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2196 A) 2197 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2198 fract A) 2199 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2200 A) 2201 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2202 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2203 A) 2204 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2205 fract A) 2206 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2207 fract A) 2208 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2209 short fract A) 2210 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2211 (unsigned short fract A) 2212 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2213 short fract A) 2214 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2215 fract A) 2216 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2217 short fract A) 2218 -- Runtime Function: unsigned long long accum __satfractuqquta 2219 (unsigned short fract A) 2220 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2221 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2222 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2223 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2224 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2225 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2226 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2227 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2228 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2229 fract A) 2230 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2231 fract A) 2232 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2233 (unsigned fract A) 2234 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2235 fract A) 2236 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2237 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2238 fract A) 2239 -- Runtime Function: unsigned long long accum __satfractuhquta 2240 (unsigned fract A) 2241 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2242 A) 2243 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2244 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2245 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2246 fract A) 2247 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2248 A) 2249 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2250 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2251 -- Runtime Function: long long accum __satfractusqta (unsigned long 2252 fract A) 2253 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2254 long fract A) 2255 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2256 fract A) 2257 -- Runtime Function: unsigned long long fract __satfractusqudq2 2258 (unsigned long fract A) 2259 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2260 long fract A) 2261 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2262 fract A) 2263 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2264 long fract A) 2265 -- Runtime Function: unsigned long long accum __satfractusquta 2266 (unsigned long fract A) 2267 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2268 fract A) 2269 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2270 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2271 fract A) 2272 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2273 long fract A) 2274 -- Runtime Function: short accum __satfractudqha (unsigned long long 2275 fract A) 2276 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2277 -- Runtime Function: long accum __satfractudqda (unsigned long long 2278 fract A) 2279 -- Runtime Function: long long accum __satfractudqta (unsigned long 2280 long fract A) 2281 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2282 long long fract A) 2283 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2284 long fract A) 2285 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2286 long long fract A) 2287 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2288 long long fract A) 2289 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2290 long fract A) 2291 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2292 long long fract A) 2293 -- Runtime Function: unsigned long long accum __satfractudquta 2294 (unsigned long long fract A) 2295 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2296 A) 2297 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2298 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2299 A) 2300 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2301 accum A) 2302 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2303 A) 2304 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2305 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2306 A) 2307 -- Runtime Function: long long accum __satfractuhata (unsigned short 2308 accum A) 2309 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2310 short accum A) 2311 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2312 accum A) 2313 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2314 short accum A) 2315 -- Runtime Function: unsigned long long fract __satfractuhaudq 2316 (unsigned short accum A) 2317 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2318 accum A) 2319 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2320 short accum A) 2321 -- Runtime Function: unsigned long long accum __satfractuhauta2 2322 (unsigned short accum A) 2323 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2324 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2325 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2326 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2327 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2328 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2329 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2330 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2331 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2332 accum A) 2333 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2334 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2335 accum A) 2336 -- Runtime Function: unsigned long long fract __satfractusaudq 2337 (unsigned accum A) 2338 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2339 accum A) 2340 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2341 accum A) 2342 -- Runtime Function: unsigned long long accum __satfractusauta2 2343 (unsigned accum A) 2344 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2345 A) 2346 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2347 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2348 -- Runtime Function: long long fract __satfractudadq (unsigned long 2349 accum A) 2350 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2351 A) 2352 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2353 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2354 -- Runtime Function: long long accum __satfractudata (unsigned long 2355 accum A) 2356 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2357 long accum A) 2358 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2359 accum A) 2360 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2361 long accum A) 2362 -- Runtime Function: unsigned long long fract __satfractudaudq 2363 (unsigned long accum A) 2364 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2365 long accum A) 2366 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2367 accum A) 2368 -- Runtime Function: unsigned long long accum __satfractudauta2 2369 (unsigned long accum A) 2370 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2371 accum A) 2372 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2373 -- Runtime Function: long fract __satfractutasq (unsigned long long 2374 accum A) 2375 -- Runtime Function: long long fract __satfractutadq (unsigned long 2376 long accum A) 2377 -- Runtime Function: short accum __satfractutaha (unsigned long long 2378 accum A) 2379 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2380 -- Runtime Function: long accum __satfractutada (unsigned long long 2381 accum A) 2382 -- Runtime Function: long long accum __satfractutata (unsigned long 2383 long accum A) 2384 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2385 long long accum A) 2386 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2387 long accum A) 2388 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2389 long long accum A) 2390 -- Runtime Function: unsigned long long fract __satfractutaudq 2391 (unsigned long long accum A) 2392 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2393 long long accum A) 2394 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2395 long accum A) 2396 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2397 long long accum A) 2398 -- Runtime Function: short fract __satfractqiqq (signed char A) 2399 -- Runtime Function: fract __satfractqihq (signed char A) 2400 -- Runtime Function: long fract __satfractqisq (signed char A) 2401 -- Runtime Function: long long fract __satfractqidq (signed char A) 2402 -- Runtime Function: short accum __satfractqiha (signed char A) 2403 -- Runtime Function: accum __satfractqisa (signed char A) 2404 -- Runtime Function: long accum __satfractqida (signed char A) 2405 -- Runtime Function: long long accum __satfractqita (signed char A) 2406 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2407 A) 2408 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2409 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2410 A) 2411 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2412 char A) 2413 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2414 A) 2415 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2416 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2417 A) 2418 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2419 char A) 2420 -- Runtime Function: short fract __satfracthiqq (short A) 2421 -- Runtime Function: fract __satfracthihq (short A) 2422 -- Runtime Function: long fract __satfracthisq (short A) 2423 -- Runtime Function: long long fract __satfracthidq (short A) 2424 -- Runtime Function: short accum __satfracthiha (short A) 2425 -- Runtime Function: accum __satfracthisa (short A) 2426 -- Runtime Function: long accum __satfracthida (short A) 2427 -- Runtime Function: long long accum __satfracthita (short A) 2428 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2429 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2430 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2431 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2432 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2433 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2434 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2435 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2436 -- Runtime Function: short fract __satfractsiqq (int A) 2437 -- Runtime Function: fract __satfractsihq (int A) 2438 -- Runtime Function: long fract __satfractsisq (int A) 2439 -- Runtime Function: long long fract __satfractsidq (int A) 2440 -- Runtime Function: short accum __satfractsiha (int A) 2441 -- Runtime Function: accum __satfractsisa (int A) 2442 -- Runtime Function: long accum __satfractsida (int A) 2443 -- Runtime Function: long long accum __satfractsita (int A) 2444 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2445 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2446 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2447 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2448 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2449 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2450 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2451 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2452 -- Runtime Function: short fract __satfractdiqq (long A) 2453 -- Runtime Function: fract __satfractdihq (long A) 2454 -- Runtime Function: long fract __satfractdisq (long A) 2455 -- Runtime Function: long long fract __satfractdidq (long A) 2456 -- Runtime Function: short accum __satfractdiha (long A) 2457 -- Runtime Function: accum __satfractdisa (long A) 2458 -- Runtime Function: long accum __satfractdida (long A) 2459 -- Runtime Function: long long accum __satfractdita (long A) 2460 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2461 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2462 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2463 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2464 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2465 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2466 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2467 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2468 -- Runtime Function: short fract __satfracttiqq (long long A) 2469 -- Runtime Function: fract __satfracttihq (long long A) 2470 -- Runtime Function: long fract __satfracttisq (long long A) 2471 -- Runtime Function: long long fract __satfracttidq (long long A) 2472 -- Runtime Function: short accum __satfracttiha (long long A) 2473 -- Runtime Function: accum __satfracttisa (long long A) 2474 -- Runtime Function: long accum __satfracttida (long long A) 2475 -- Runtime Function: long long accum __satfracttita (long long A) 2476 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2477 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2478 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2479 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2480 long A) 2481 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2482 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2483 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2484 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2485 long A) 2486 -- Runtime Function: short fract __satfractsfqq (float A) 2487 -- Runtime Function: fract __satfractsfhq (float A) 2488 -- Runtime Function: long fract __satfractsfsq (float A) 2489 -- Runtime Function: long long fract __satfractsfdq (float A) 2490 -- Runtime Function: short accum __satfractsfha (float A) 2491 -- Runtime Function: accum __satfractsfsa (float A) 2492 -- Runtime Function: long accum __satfractsfda (float A) 2493 -- Runtime Function: long long accum __satfractsfta (float A) 2494 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2495 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2496 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2497 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2498 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2499 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2500 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2501 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2502 -- Runtime Function: short fract __satfractdfqq (double A) 2503 -- Runtime Function: fract __satfractdfhq (double A) 2504 -- Runtime Function: long fract __satfractdfsq (double A) 2505 -- Runtime Function: long long fract __satfractdfdq (double A) 2506 -- Runtime Function: short accum __satfractdfha (double A) 2507 -- Runtime Function: accum __satfractdfsa (double A) 2508 -- Runtime Function: long accum __satfractdfda (double A) 2509 -- Runtime Function: long long accum __satfractdfta (double A) 2510 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2511 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2512 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2513 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2514 A) 2515 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2516 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2517 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2518 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2519 A) 2520 The functions convert from fractional and signed non-fractionals to 2521 fractionals, with saturation. 2522 2523 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2524 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2525 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2526 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2527 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2528 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2529 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2530 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2531 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2532 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2533 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2534 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2535 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2536 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2537 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2538 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2539 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2540 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2541 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2542 -- Runtime Function: unsigned long long __fractunsdqti (long long fract 2543 A) 2544 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2545 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2546 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2547 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2548 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2549 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2550 -- Runtime Function: unsigned short __fractunssahi (accum A) 2551 -- Runtime Function: unsigned int __fractunssasi (accum A) 2552 -- Runtime Function: unsigned long __fractunssadi (accum A) 2553 -- Runtime Function: unsigned long long __fractunssati (accum A) 2554 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2555 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2556 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2557 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2558 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2559 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2560 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2561 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2562 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2563 -- Runtime Function: unsigned long long __fractunstati (long long accum 2564 A) 2565 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2566 fract A) 2567 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2568 fract A) 2569 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract 2570 A) 2571 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2572 fract A) 2573 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short 2574 fract A) 2575 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2576 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2577 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2578 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2579 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract 2580 A) 2581 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract 2582 A) 2583 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2584 fract A) 2585 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2586 A) 2587 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract 2588 A) 2589 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2590 fract A) 2591 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2592 fract A) 2593 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long 2594 fract A) 2595 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2596 fract A) 2597 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2598 fract A) 2599 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2600 long fract A) 2601 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2602 accum A) 2603 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2604 accum A) 2605 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum 2606 A) 2607 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2608 accum A) 2609 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short 2610 accum A) 2611 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2612 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2613 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2614 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2615 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum 2616 A) 2617 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum 2618 A) 2619 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2620 accum A) 2621 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2622 A) 2623 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum 2624 A) 2625 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2626 accum A) 2627 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2628 accum A) 2629 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long 2630 accum A) 2631 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2632 accum A) 2633 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2634 accum A) 2635 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2636 long accum A) 2637 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2638 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2639 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2640 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2641 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2642 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2643 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2644 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2645 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2646 char A) 2647 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2648 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char 2649 A) 2650 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned 2651 char A) 2652 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2653 char A) 2654 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2655 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char 2656 A) 2657 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned 2658 char A) 2659 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2660 -- Runtime Function: fract __fractunshihq (unsigned short A) 2661 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2662 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2663 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2664 -- Runtime Function: accum __fractunshisa (unsigned short A) 2665 -- Runtime Function: long accum __fractunshida (unsigned short A) 2666 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2667 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2668 short A) 2669 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2670 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2671 short A) 2672 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned 2673 short A) 2674 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2675 short A) 2676 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2677 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2678 short A) 2679 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned 2680 short A) 2681 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2682 -- Runtime Function: fract __fractunssihq (unsigned int A) 2683 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2684 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2685 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2686 -- Runtime Function: accum __fractunssisa (unsigned int A) 2687 -- Runtime Function: long accum __fractunssida (unsigned int A) 2688 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2689 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int 2690 A) 2691 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2692 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2693 A) 2694 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned 2695 int A) 2696 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int 2697 A) 2698 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2699 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2700 A) 2701 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned 2702 int A) 2703 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2704 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2705 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2706 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2707 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2708 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2709 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2710 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2711 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2712 long A) 2713 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2714 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long 2715 A) 2716 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned 2717 long A) 2718 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2719 long A) 2720 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2721 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long 2722 A) 2723 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned 2724 long A) 2725 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2726 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2727 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2728 -- Runtime Function: long long fract __fractunstidq (unsigned long long 2729 A) 2730 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2731 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2732 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2733 -- Runtime Function: long long accum __fractunstita (unsigned long long 2734 A) 2735 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2736 long long A) 2737 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long 2738 A) 2739 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long 2740 long A) 2741 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned 2742 long long A) 2743 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2744 long long A) 2745 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long 2746 A) 2747 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long 2748 long A) 2749 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned 2750 long long A) 2751 These functions convert from fractionals to unsigned 2752 non-fractionals; and from unsigned non-fractionals to fractionals, 2753 without saturation. 2754 2755 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2756 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2757 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2758 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2759 A) 2760 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2761 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2762 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2763 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2764 A) 2765 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2766 char A) 2767 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2768 A) 2769 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2770 char A) 2771 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2772 (unsigned char A) 2773 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2774 char A) 2775 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2776 A) 2777 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2778 char A) 2779 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2780 (unsigned char A) 2781 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2782 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2783 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2784 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2785 A) 2786 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2787 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2788 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2789 -- Runtime Function: long long accum __satfractunshita (unsigned short 2790 A) 2791 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2792 short A) 2793 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2794 A) 2795 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2796 short A) 2797 -- Runtime Function: unsigned long long fract __satfractunshiudq 2798 (unsigned short A) 2799 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2800 short A) 2801 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2802 A) 2803 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2804 short A) 2805 -- Runtime Function: unsigned long long accum __satfractunshiuta 2806 (unsigned short A) 2807 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2808 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2809 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2810 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2811 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2812 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2813 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2814 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2815 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2816 int A) 2817 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2818 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2819 int A) 2820 -- Runtime Function: unsigned long long fract __satfractunssiudq 2821 (unsigned int A) 2822 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2823 int A) 2824 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2825 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2826 int A) 2827 -- Runtime Function: unsigned long long accum __satfractunssiuta 2828 (unsigned int A) 2829 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2830 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2831 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2832 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2833 A) 2834 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2835 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2836 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2837 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2838 A) 2839 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2840 long A) 2841 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2842 A) 2843 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2844 long A) 2845 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2846 (unsigned long A) 2847 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2848 long A) 2849 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2850 A) 2851 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2852 long A) 2853 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2854 (unsigned long A) 2855 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2856 A) 2857 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2858 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2859 A) 2860 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2861 long A) 2862 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2863 A) 2864 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2865 -- Runtime Function: long accum __satfractunstida (unsigned long long 2866 A) 2867 -- Runtime Function: long long accum __satfractunstita (unsigned long 2868 long A) 2869 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2870 long long A) 2871 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2872 long A) 2873 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2874 long long A) 2875 -- Runtime Function: unsigned long long fract __satfractunstiudq 2876 (unsigned long long A) 2877 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2878 long long A) 2879 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2880 long A) 2881 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2882 long long A) 2883 -- Runtime Function: unsigned long long accum __satfractunstiuta 2884 (unsigned long long A) 2885 These functions convert from unsigned non-fractionals to 2886 fractionals, with saturation. 2887 2888 2889File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2890 28914.5 Language-independent routines for exception handling 2892======================================================== 2893 2894document me! 2895 2896 _Unwind_DeleteException 2897 _Unwind_Find_FDE 2898 _Unwind_ForcedUnwind 2899 _Unwind_GetGR 2900 _Unwind_GetIP 2901 _Unwind_GetLanguageSpecificData 2902 _Unwind_GetRegionStart 2903 _Unwind_GetTextRelBase 2904 _Unwind_GetDataRelBase 2905 _Unwind_RaiseException 2906 _Unwind_Resume 2907 _Unwind_SetGR 2908 _Unwind_SetIP 2909 _Unwind_FindEnclosingFunction 2910 _Unwind_SjLj_Register 2911 _Unwind_SjLj_Unregister 2912 _Unwind_SjLj_RaiseException 2913 _Unwind_SjLj_ForcedUnwind 2914 _Unwind_SjLj_Resume 2915 __deregister_frame 2916 __deregister_frame_info 2917 __deregister_frame_info_bases 2918 __register_frame 2919 __register_frame_info 2920 __register_frame_info_bases 2921 __register_frame_info_table 2922 __register_frame_info_table_bases 2923 __register_frame_table 2924 2925 2926File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2927 29284.6 Miscellaneous runtime library routines 2929========================================== 2930 29314.6.1 Cache control functions 2932----------------------------- 2933 2934 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2935 This function clears the instruction cache between BEG and END. 2936 29374.6.2 Split stack functions and variables 2938----------------------------------------- 2939 2940 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void 2941 *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void 2942 **INITIAL_SP) 2943 When using '-fsplit-stack', this call may be used to iterate over 2944 the stack segments. It may be called like this: 2945 void *next_segment = NULL; 2946 void *next_sp = NULL; 2947 void *initial_sp = NULL; 2948 void *stack; 2949 size_t stack_size; 2950 while ((stack = __splitstack_find (next_segment, next_sp, 2951 &stack_size, &next_segment, 2952 &next_sp, &initial_sp)) 2953 != NULL) 2954 { 2955 /* Stack segment starts at stack and is 2956 stack_size bytes long. */ 2957 } 2958 2959 There is no way to iterate over the stack segments of a different 2960 thread. However, what is permitted is for one thread to call this 2961 with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, 2962 NEXT_SP, and INITIAL_SP to a different thread, and then to suspend 2963 one way or another. A different thread may run the subsequent 2964 '__splitstack_find' iterations. Of course, this will only work if 2965 the first thread is suspended while the second thread is calling 2966 '__splitstack_find'. If not, the second thread could be looking at 2967 the stack while it is changing, and anything could happen. 2968 2969 -- Variable: __morestack_segments 2970 -- Variable: __morestack_current_segment 2971 -- Variable: __morestack_initial_sp 2972 Internal variables used by the '-fsplit-stack' implementation. 2973 2974 2975File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2976 29775 Language Front Ends in GCC 2978**************************** 2979 2980The interface to front ends for languages in GCC, and in particular the 2981'tree' structure (*note GENERIC::), was initially designed for C, and 2982many aspects of it are still somewhat biased towards C and C-like 2983languages. It is, however, reasonably well suited to other procedural 2984languages, and front ends for many such languages have been written for 2985GCC. 2986 2987 Writing a compiler as a front end for GCC, rather than compiling 2988directly to assembler or generating C code which is then compiled by 2989GCC, has several advantages: 2990 2991 * GCC front ends benefit from the support for many different target 2992 machines already present in GCC. 2993 * GCC front ends benefit from all the optimizations in GCC. Some of 2994 these, such as alias analysis, may work better when GCC is 2995 compiling directly from source code then when it is compiling from 2996 generated C code. 2997 * Better debugging information is generated when compiling directly 2998 from source code than when going via intermediate generated C code. 2999 3000 Because of the advantages of writing a compiler as a GCC front end, GCC 3001front ends have also been created for languages very different from 3002those for which GCC was designed, such as the declarative 3003logic/functional language Mercury. For these reasons, it may also be 3004useful to implement compilers created for specialized purposes (for 3005example, as part of a research project) as GCC front ends. 3006 3007 3008File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 3009 30106 Source Tree Structure and Build System 3011**************************************** 3012 3013This chapter describes the structure of the GCC source tree, and how GCC 3014is built. The user documentation for building and installing GCC is in 3015a separate manual (<http://gcc.gnu.org/install/>), with which it is 3016presumed that you are familiar. 3017 3018* Menu: 3019 3020* Configure Terms:: Configuration terminology and history. 3021* Top Level:: The top level source directory. 3022* gcc Directory:: The 'gcc' subdirectory. 3023 3024 3025File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 3026 30276.1 Configure Terms and History 3028=============================== 3029 3030The configure and build process has a long and colorful history, and can 3031be confusing to anyone who doesn't know why things are the way they are. 3032While there are other documents which describe the configuration process 3033in detail, here are a few things that everyone working on GCC should 3034know. 3035 3036 There are three system names that the build knows about: the machine 3037you are building on ("build"), the machine that you are building for 3038("host"), and the machine that GCC will produce code for ("target"). 3039When you configure GCC, you specify these with '--build=', '--host=', 3040and '--target='. 3041 3042 Specifying the host without specifying the build should be avoided, as 3043'configure' may (and once did) assume that the host you specify is also 3044the build, which may not be true. 3045 3046 If build, host, and target are all the same, this is called a "native". 3047If build and host are the same but target is different, this is called a 3048"cross". If build, host, and target are all different this is called a 3049"canadian" (for obscure reasons dealing with Canada's political party 3050and the background of the person working on the build at that time). If 3051host and target are the same, but build is different, you are using a 3052cross-compiler to build a native for a different system. Some people 3053call this a "host-x-host", "crossed native", or "cross-built native". 3054If build and target are the same, but host is different, you are using a 3055cross compiler to build a cross compiler that produces code for the 3056machine you're building on. This is rare, so there is no common way of 3057describing it. There is a proposal to call this a "crossback". 3058 3059 If build and host are the same, the GCC you are building will also be 3060used to build the target libraries (like 'libstdc++'). If build and 3061host are different, you must have already built and installed a cross 3062compiler that will be used to build the target libraries (if you 3063configured with '--target=foo-bar', this compiler will be called 3064'foo-bar-gcc'). 3065 3066 In the case of target libraries, the machine you're building for is the 3067machine you specified with '--target'. So, build is the machine you're 3068building on (no change there), host is the machine you're building for 3069(the target libraries are built for the target, so host is the target 3070you specified), and target doesn't apply (because you're not building a 3071compiler, you're building libraries). The configure/make process will 3072adjust these variables as needed. It also sets '$with_cross_host' to 3073the original '--host' value in case you need it. 3074 3075 The 'libiberty' support library is built up to three times: once for 3076the host, once for the target (even if they are the same), and once for 3077the build if build and host are different. This allows it to be used by 3078all programs which are generated in the course of the build process. 3079 3080 3081File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3082 30836.2 Top Level Source Directory 3084============================== 3085 3086The top level source directory in a GCC distribution contains several 3087files and directories that are shared with other software distributions 3088such as that of GNU Binutils. It also contains several subdirectories 3089that contain parts of GCC and its runtime libraries: 3090 3091'boehm-gc' 3092 The Boehm conservative garbage collector, used as part of the Java 3093 runtime library. 3094 3095'config' 3096 Autoconf macros and Makefile fragments used throughout the tree. 3097 3098'contrib' 3099 Contributed scripts that may be found useful in conjunction with 3100 GCC. One of these, 'contrib/texi2pod.pl', is used to generate man 3101 pages from Texinfo manuals as part of the GCC build process. 3102 3103'fixincludes' 3104 The support for fixing system headers to work with GCC. See 3105 'fixincludes/README' for more information. The headers fixed by 3106 this mechanism are installed in 'LIBSUBDIR/include-fixed'. Along 3107 with those headers, 'README-fixinc' is also installed, as 3108 'LIBSUBDIR/include-fixed/README'. 3109 3110'gcc' 3111 The main sources of GCC itself (except for runtime libraries), 3112 including optimizers, support for different target architectures, 3113 language front ends, and testsuites. *Note The 'gcc' Subdirectory: 3114 gcc Directory, for details. 3115 3116'gnattools' 3117 Support tools for GNAT. 3118 3119'include' 3120 Headers for the 'libiberty' library. 3121 3122'intl' 3123 GNU 'libintl', from GNU 'gettext', for systems which do not include 3124 it in 'libc'. 3125 3126'libada' 3127 The Ada runtime library. 3128 3129'libatomic' 3130 The runtime support library for atomic operations (e.g. for 3131 '__sync' and '__atomic'). 3132 3133'libcpp' 3134 The C preprocessor library. 3135 3136'libdecnumber' 3137 The Decimal Float support library. 3138 3139'libffi' 3140 The 'libffi' library, used as part of the Java runtime library. 3141 3142'libgcc' 3143 The GCC runtime library. 3144 3145'libgfortran' 3146 The Fortran runtime library. 3147 3148'libgo' 3149 The Go runtime library. The bulk of this library is mirrored from 3150 the master Go repository (http://code.google.com/p/go/). 3151 3152'libgomp' 3153 The GNU Offloading and Multi Processing Runtime Library. 3154 3155'libiberty' 3156 The 'libiberty' library, used for portability and for some 3157 generally useful data structures and algorithms. *Note 3158 Introduction: (libiberty)Top, for more information about this 3159 library. 3160 3161'libitm' 3162 The runtime support library for transactional memory. 3163 3164'libjava' 3165 The Java runtime library. 3166 3167'libobjc' 3168 The Objective-C and Objective-C++ runtime library. 3169 3170'libquadmath' 3171 The runtime support library for quad-precision math operations. 3172 3173'libssp' 3174 The Stack protector runtime library. 3175 3176'libstdc++-v3' 3177 The C++ runtime library. 3178 3179'lto-plugin' 3180 Plugin used by the linker if link-time optimizations are enabled. 3181 3182'maintainer-scripts' 3183 Scripts used by the 'gccadmin' account on 'gcc.gnu.org'. 3184 3185'zlib' 3186 The 'zlib' compression library, used by the Java front end, as part 3187 of the Java runtime library, and for compressing and uncompressing 3188 GCC's intermediate language in LTO object files. 3189 3190 The build system in the top level directory, including how recursion 3191into subdirectories works and how building runtime libraries for 3192multilibs is handled, is documented in a separate manual, included with 3193GNU Binutils. *Note GNU configure and build system: (configure)Top, for 3194details. 3195 3196 3197File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3198 31996.3 The 'gcc' Subdirectory 3200========================== 3201 3202The 'gcc' directory contains many files that are part of the C sources 3203of GCC, other files used as part of the configuration and build process, 3204and subdirectories including documentation and a testsuite. The files 3205that are sources of GCC are documented in a separate chapter. *Note 3206Passes and Files of the Compiler: Passes. 3207 3208* Menu: 3209 3210* Subdirectories:: Subdirectories of 'gcc'. 3211* Configuration:: The configuration process, and the files it uses. 3212* Build:: The build system in the 'gcc' directory. 3213* Makefile:: Targets in 'gcc/Makefile'. 3214* Library Files:: Library source files and headers under 'gcc/'. 3215* Headers:: Headers installed by GCC. 3216* Documentation:: Building documentation in GCC. 3217* Front End:: Anatomy of a language front end. 3218* Back End:: Anatomy of a target back end. 3219 3220 3221File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3222 32236.3.1 Subdirectories of 'gcc' 3224----------------------------- 3225 3226The 'gcc' directory contains the following subdirectories: 3227 3228'LANGUAGE' 3229 Subdirectories for various languages. Directories containing a 3230 file 'config-lang.in' are language subdirectories. The contents of 3231 the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for 3232 Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are 3233 documented in this manual (*note Passes and Files of the Compiler: 3234 Passes.); those for other languages are not. *Note Anatomy of a 3235 Language Front End: Front End, for details of the files in these 3236 directories. 3237 3238'common' 3239 Source files shared between the compiler drivers (such as 'gcc') 3240 and the compilers proper (such as 'cc1'). If an architecture 3241 defines target hooks shared between those places, it also has a 3242 subdirectory in 'common/config'. *Note Target Structure::. 3243 3244'config' 3245 Configuration files for supported architectures and operating 3246 systems. *Note Anatomy of a Target Back End: Back End, for details 3247 of the files in this directory. 3248 3249'doc' 3250 Texinfo documentation for GCC, together with automatically 3251 generated man pages and support for converting the installation 3252 manual to HTML. *Note Documentation::. 3253 3254'ginclude' 3255 System headers installed by GCC, mainly those required by the C 3256 standard of freestanding implementations. *Note Headers Installed 3257 by GCC: Headers, for details of when these and other headers are 3258 installed. 3259 3260'po' 3261 Message catalogs with translations of messages produced by GCC into 3262 various languages, 'LANGUAGE.po'. This directory also contains 3263 'gcc.pot', the template for these message catalogues, 'exgettext', 3264 a wrapper around 'gettext' to extract the messages from the GCC 3265 sources and create 'gcc.pot', which is run by 'make gcc.pot', and 3266 'EXCLUDES', a list of files from which messages should not be 3267 extracted. 3268 3269'testsuite' 3270 The GCC testsuites (except for those for runtime libraries). *Note 3271 Testsuites::. 3272 3273 3274File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3275 32766.3.2 Configuration in the 'gcc' Directory 3277------------------------------------------ 3278 3279The 'gcc' directory is configured with an Autoconf-generated script 3280'configure'. The 'configure' script is generated from 'configure.ac' 3281and 'aclocal.m4'. From the files 'configure.ac' and 'acconfig.h', 3282Autoheader generates the file 'config.in'. The file 'cstamp-h.in' is 3283used as a timestamp. 3284 3285* Menu: 3286 3287* Config Fragments:: Scripts used by 'configure'. 3288* System Config:: The 'config.build', 'config.host', and 3289 'config.gcc' files. 3290* Configuration Files:: Files created by running 'configure'. 3291 3292 3293File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3294 32956.3.2.1 Scripts Used by 'configure' 3296................................... 3297 3298'configure' uses some other scripts to help in its work: 3299 3300 * The standard GNU 'config.sub' and 'config.guess' files, kept in the 3301 top level directory, are used. 3302 3303 * The file 'config.gcc' is used to handle configuration specific to 3304 the particular target machine. The file 'config.build' is used to 3305 handle configuration specific to the particular build machine. The 3306 file 'config.host' is used to handle configuration specific to the 3307 particular host machine. (In general, these should only be used 3308 for features that cannot reasonably be tested in Autoconf feature 3309 tests.) *Note The 'config.build'; 'config.host'; and 'config.gcc' 3310 Files: System Config, for details of the contents of these files. 3311 3312 * Each language subdirectory has a file 'LANGUAGE/config-lang.in' 3313 that is used for front-end-specific configuration. *Note The Front 3314 End 'config-lang.in' File: Front End Config, for details of this 3315 file. 3316 3317 * A helper script 'configure.frag' is used as part of creating the 3318 output of 'configure'. 3319 3320 3321File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3322 33236.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files 3324................................................................. 3325 3326The 'config.build' file contains specific rules for particular systems 3327which GCC is built on. This should be used as rarely as possible, as 3328the behavior of the build system can always be detected by autoconf. 3329 3330 The 'config.host' file contains specific rules for particular systems 3331which GCC will run on. This is rarely needed. 3332 3333 The 'config.gcc' file contains specific rules for particular systems 3334which GCC will generate code for. This is usually needed. 3335 3336 Each file has a list of the shell variables it sets, with descriptions, 3337at the top of the file. 3338 3339 FIXME: document the contents of these files, and what variables should 3340be set to control build, host and target configuration. 3341 3342 3343File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3344 33456.3.2.3 Files Created by 'configure' 3346.................................... 3347 3348Here we spell out what files will be set up by 'configure' in the 'gcc' 3349directory. Some other files are created as temporary files in the 3350configuration process, and are not used in the subsequent build; these 3351are not documented. 3352 3353 * 'Makefile' is constructed from 'Makefile.in', together with the 3354 host and target fragments (*note Makefile Fragments: Fragments.) 3355 't-TARGET' and 'x-HOST' from 'config', if any, and language 3356 Makefile fragments 'LANGUAGE/Make-lang.in'. 3357 * 'auto-host.h' contains information about the host machine 3358 determined by 'configure'. If the host machine is different from 3359 the build machine, then 'auto-build.h' is also created, containing 3360 such information about the build machine. 3361 * 'config.status' is a script that may be run to recreate the current 3362 configuration. 3363 * 'configargs.h' is a header containing details of the arguments 3364 passed to 'configure' to configure GCC, and of the thread model 3365 used. 3366 * 'cstamp-h' is used as a timestamp. 3367 * If a language 'config-lang.in' file (*note The Front End 3368 'config-lang.in' File: Front End Config.) sets 'outputs', then the 3369 files listed in 'outputs' there are also generated. 3370 3371 The following configuration headers are created from the Makefile, 3372using 'mkconfig.sh', rather than directly by 'configure'. 'config.h', 3373'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if 3374any, appropriate to the host, build and target machines respectively, 3375the configuration headers for the target, and some definitions; for the 3376host and build machines, these include the autoconfigured headers 3377generated by 'configure'. The other configuration headers are 3378determined by 'config.gcc'. They also contain the typedefs for 'rtx', 3379'rtvec' and 'tree'. 3380 3381 * 'config.h', for use in programs that run on the host machine. 3382 * 'bconfig.h', for use in programs that run on the build machine. 3383 * 'tconfig.h', for use in programs and libraries for the target 3384 machine. 3385 * 'tm_p.h', which includes the header 'MACHINE-protos.h' that 3386 contains prototypes for functions in the target 'MACHINE.c' file. 3387 The header 'MACHINE-protos.h' can include prototypes of functions 3388 that use rtl and tree data structures inside appropriate '#ifdef 3389 RTX_CODE' and '#ifdef TREE_CODE' conditional code segements. The 3390 'MACHINE-protos.h' is included after the 'rtl.h' and/or 'tree.h' 3391 would have been included. The 'tm_p.h' also includes the header 3392 'tm-preds.h' which is generated by 'genpreds' program during the 3393 build to define the declarations and inline functions for the 3394 predicate functions. 3395 3396 3397File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3398 33996.3.3 Build System in the 'gcc' Directory 3400----------------------------------------- 3401 3402FIXME: describe the build system, including what is built in what 3403stages. Also list the various source files that are used in the build 3404process but aren't source files of GCC itself and so aren't documented 3405below (*note Passes::). 3406 3407 3408File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3409 34106.3.4 Makefile Targets 3411---------------------- 3412 3413These targets are available from the 'gcc' directory: 3414 3415'all' 3416 This is the default target. Depending on what your 3417 build/host/target configuration is, it coordinates all the things 3418 that need to be built. 3419 3420'doc' 3421 Produce info-formatted documentation and man pages. Essentially it 3422 calls 'make man' and 'make info'. 3423 3424'dvi' 3425 Produce DVI-formatted documentation. 3426 3427'pdf' 3428 Produce PDF-formatted documentation. 3429 3430'html' 3431 Produce HTML-formatted documentation. 3432 3433'man' 3434 Generate man pages. 3435 3436'info' 3437 Generate info-formatted pages. 3438 3439'mostlyclean' 3440 Delete the files made while building the compiler. 3441 3442'clean' 3443 That, and all the other files built by 'make all'. 3444 3445'distclean' 3446 That, and all the files created by 'configure'. 3447 3448'maintainer-clean' 3449 Distclean plus any file that can be generated from other files. 3450 Note that additional tools may be required beyond what is normally 3451 needed to build GCC. 3452 3453'srcextra' 3454 Generates files in the source directory that are not 3455 version-controlled but should go into a release tarball. 3456 3457'srcinfo' 3458'srcman' 3459 Copies the info-formatted and manpage documentation into the source 3460 directory usually for the purpose of generating a release tarball. 3461 3462'install' 3463 Installs GCC. 3464 3465'uninstall' 3466 Deletes installed files, though this is not supported. 3467 3468'check' 3469 Run the testsuite. This creates a 'testsuite' subdirectory that 3470 has various '.sum' and '.log' files containing the results of the 3471 testing. You can run subsets with, for example, 'make check-gcc'. 3472 You can specify specific tests by setting 'RUNTESTFLAGS' to be the 3473 name of the '.exp' file, optionally followed by (for some tests) an 3474 equals and a file wildcard, like: 3475 3476 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3477 3478 Note that running the testsuite may require additional tools be 3479 installed, such as Tcl or DejaGnu. 3480 3481 The toplevel tree from which you start GCC compilation is not the GCC 3482directory, but rather a complex Makefile that coordinates the various 3483steps of the build, including bootstrapping the compiler and using the 3484new compiler to build target libraries. 3485 3486 When GCC is configured for a native configuration, the default action 3487for 'make' is to do a full three-stage bootstrap. This means that GCC 3488is built three times--once with the native compiler, once with the 3489native-built compiler it just built, and once with the compiler it built 3490the second time. In theory, the last two should produce the same 3491results, which 'make compare' can check. Each stage is configured 3492separately and compiled into a separate directory, to minimize problems 3493due to ABI incompatibilities between the native compiler and GCC. 3494 3495 If you do a change, rebuilding will also start from the first stage and 3496"bubble" up the change through the three stages. Each stage is taken 3497from its build directory (if it had been built previously), rebuilt, and 3498copied to its subdirectory. This will allow you to, for example, 3499continue a bootstrap after fixing a bug which causes the stage2 build to 3500crash. It does not provide as good coverage of the compiler as 3501bootstrapping from scratch, but it ensures that the new code is 3502syntactically correct (e.g., that you did not use GCC extensions by 3503mistake), and avoids spurious bootstrap comparison failures(1). 3504 3505 Other targets available from the top level include: 3506 3507'bootstrap-lean' 3508 Like 'bootstrap', except that the various stages are removed once 3509 they're no longer needed. This saves disk space. 3510 3511'bootstrap2' 3512'bootstrap2-lean' 3513 Performs only the first two stages of bootstrap. Unlike a 3514 three-stage bootstrap, this does not perform a comparison to test 3515 that the compiler is running properly. Note that the disk space 3516 required by a "lean" bootstrap is approximately independent of the 3517 number of stages. 3518 3519'stageN-bubble (N = 1...4, profile, feedback)' 3520 Rebuild all the stages up to N, with the appropriate flags, 3521 "bubbling" the changes as described above. 3522 3523'all-stageN (N = 1...4, profile, feedback)' 3524 Assuming that stage N has already been built, rebuild it with the 3525 appropriate flags. This is rarely needed. 3526 3527'cleanstrap' 3528 Remove everything ('make clean') and rebuilds ('make bootstrap'). 3529 3530'compare' 3531 Compares the results of stages 2 and 3. This ensures that the 3532 compiler is running properly, since it should produce the same 3533 object files regardless of how it itself was compiled. 3534 3535'profiledbootstrap' 3536 Builds a compiler with profiling feedback information. In this 3537 case, the second and third stages are named 'profile' and 3538 'feedback', respectively. For more information, see *note Building 3539 with profile feedback: (gccinstall)Building. 3540 3541'restrap' 3542 Restart a bootstrap, so that everything that was not built with the 3543 system compiler is rebuilt. 3544 3545'stageN-start (N = 1...4, profile, feedback)' 3546 For each package that is bootstrapped, rename directories so that, 3547 for example, 'gcc' points to the stageN GCC, compiled with the 3548 stageN-1 GCC(2). 3549 3550 You will invoke this target if you need to test or debug the stageN 3551 GCC. If you only need to execute GCC (but you need not run 'make' 3552 either to rebuild it or to run test suites), you should be able to 3553 work directly in the 'stageN-gcc' directory. This makes it easier 3554 to debug multiple stages in parallel. 3555 3556'stage' 3557 For each package that is bootstrapped, relocate its build directory 3558 to indicate its stage. For example, if the 'gcc' directory points 3559 to the stage2 GCC, after invoking this target it will be renamed to 3560 'stage2-gcc'. 3561 3562 If you wish to use non-default GCC flags when compiling the stage2 and 3563stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing 3564'make'. 3565 3566 Usually, the first stage only builds the languages that the compiler is 3567written in: typically, C and maybe Ada. If you are debugging a 3568miscompilation of a different stage2 front-end (for example, of the 3569Fortran front-end), you may want to have front-ends for other languages 3570in the first stage as well. To do so, set 'STAGE1_LANGUAGES' on the 3571command line when doing 'make'. 3572 3573 For example, in the aforementioned scenario of debugging a Fortran 3574front-end miscompilation caused by the stage1 compiler, you may need a 3575command like 3576 3577 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3578 3579 Alternatively, you can use per-language targets to build and test 3580languages that are not enabled by default in stage1. For example, 'make 3581f951' will build a Fortran compiler even in the stage1 build directory. 3582 3583 ---------- Footnotes ---------- 3584 3585 (1) Except if the compiler was buggy and miscompiled some of the 3586files that were not modified. In this case, it's best to use 'make 3587restrap'. 3588 3589 (2) Customarily, the system compiler is also termed the 'stage0' GCC. 3590 3591 3592File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3593 35946.3.5 Library Source Files and Headers under the 'gcc' Directory 3595---------------------------------------------------------------- 3596 3597FIXME: list here, with explanation, all the C source files and headers 3598under the 'gcc' directory that aren't built into the GCC executable but 3599rather are part of runtime libraries and object files, such as 3600'crtstuff.c' and 'unwind-dw2.c'. *Note Headers Installed by GCC: 3601Headers, for more information about the 'ginclude' directory. 3602 3603 3604File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3605 36066.3.6 Headers Installed by GCC 3607------------------------------ 3608 3609In general, GCC expects the system C library to provide most of the 3610headers to be used with it. However, GCC will fix those headers if 3611necessary to make them work with GCC, and will install some headers 3612required of freestanding implementations. These headers are installed 3613in 'LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3614installed by GCC; these are not documented here. (FIXME: document them 3615somewhere.) 3616 3617 Several of the headers GCC installs are in the 'ginclude' directory. 3618These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are 3619installed in 'LIBSUBDIR/include', unless the target Makefile fragment 3620(*note Target Fragment::) overrides this by setting 'USER_H'. 3621 3622 In addition to these headers and those generated by fixing system 3623headers to work with GCC, some other headers may also be installed in 3624'LIBSUBDIR/include'. 'config.gcc' may set 'extra_headers'; this 3625specifies additional headers under 'config' to be installed on some 3626systems. 3627 3628 GCC installs its own version of '<float.h>', from 'ginclude/float.h'. 3629This is done to cope with command-line options that change the 3630representation of floating point numbers. 3631 3632 GCC also installs its own version of '<limits.h>'; this is generated 3633from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system 3634also has its own version of '<limits.h>'. (GCC provides its own header 3635because it is required of ISO C freestanding implementations, but needs 3636to include the system header from its own header as well because other 3637standards such as POSIX specify additional values to be defined in 3638'<limits.h>'.) The system's '<limits.h>' header is used via 3639'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if 3640it does not need fixing to work with GCC; if it needs fixing, 3641'syslimits.h' is the fixed copy. 3642 3643 GCC can also install '<tgmath.h>'. It will do this when 'config.gcc' 3644sets 'use_gcc_tgmath' to 'yes'. 3645 3646 3647File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3648 36496.3.7 Building Documentation 3650---------------------------- 3651 3652The main GCC documentation is in the form of manuals in Texinfo format. 3653These are installed in Info format; DVI versions may be generated by 3654'make dvi', PDF versions by 'make pdf', and HTML versions by 'make 3655html'. In addition, some man pages are generated from the Texinfo 3656manuals, there are some other text files with miscellaneous 3657documentation, and runtime libraries have their own documentation 3658outside the 'gcc' directory. FIXME: document the documentation for 3659runtime libraries somewhere. 3660 3661* Menu: 3662 3663* Texinfo Manuals:: GCC manuals in Texinfo format. 3664* Man Page Generation:: Generating man pages from Texinfo manuals. 3665* Miscellaneous Docs:: Miscellaneous text files with documentation. 3666 3667 3668File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3669 36706.3.7.1 Texinfo Manuals 3671....................... 3672 3673The manuals for GCC as a whole, and the C and C++ front ends, are in 3674files 'doc/*.texi'. Other front ends have their own manuals in files 3675'LANGUAGE/*.texi'. Common files 'doc/include/*.texi' are provided which 3676may be included in multiple manuals; the following files are in 3677'doc/include': 3678 3679'fdl.texi' 3680 The GNU Free Documentation License. 3681'funding.texi' 3682 The section "Funding Free Software". 3683'gcc-common.texi' 3684 Common definitions for manuals. 3685'gpl_v3.texi' 3686 The GNU General Public License. 3687'texinfo.tex' 3688 A copy of 'texinfo.tex' known to work with the GCC manuals. 3689 3690 DVI-formatted manuals are generated by 'make dvi', which uses 3691'texi2dvi' (via the Makefile macro '$(TEXI2DVI)'). PDF-formatted 3692manuals are generated by 'make pdf', which uses 'texi2pdf' (via the 3693Makefile macro '$(TEXI2PDF)'). HTML formatted manuals are generated by 3694'make html'. Info manuals are generated by 'make info' (which is run as 3695part of a bootstrap); this generates the manuals in the source 3696directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and 3697they are included in release distributions. 3698 3699 Manuals are also provided on the GCC web site, in both HTML and 3700PostScript forms. This is done via the script 3701'maintainer-scripts/update_web_docs_svn'. Each manual to be provided 3702online must be listed in the definition of 'MANUALS' in that file; a 3703file 'NAME.texi' must only appear once in the source tree, and the 3704output manual must have the same name as the source file. (However, 3705other Texinfo files, included in manuals but not themselves the root 3706files of manuals, may have names that appear more than once in the 3707source tree.) The manual file 'NAME.texi' should only include other 3708files in its own directory or in 'doc/include'. HTML manuals will be 3709generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and 3710'dvips', and PDF manuals by 'texi2pdf'. All Texinfo files that are 3711parts of manuals must be version-controlled, even if they are generated 3712files, for the generation of online manuals to work. 3713 3714 The installation manual, 'doc/install.texi', is also provided on the 3715GCC web site. The HTML version is generated by the script 3716'doc/install.texi2html'. 3717 3718 3719File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3720 37216.3.7.2 Man Page Generation 3722........................... 3723 3724Because of user demand, in addition to full Texinfo manuals, man pages 3725are provided which contain extracts from those manuals. These man pages 3726are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and 3727'pod2man'. (The man page for 'g++', 'cp/g++.1', just contains a '.so' 3728reference to 'gcc.1', but all the other man pages are generated from 3729Texinfo manuals.) 3730 3731 Because many systems may not have the necessary tools installed to 3732generate the man pages, they are only generated if the 'configure' 3733script detects that recent enough tools are installed, and the Makefiles 3734allow generating man pages to fail without aborting the build. Man 3735pages are also included in release distributions. They are generated in 3736the source directory. 3737 3738 Magic comments in Texinfo files starting '@c man' control what parts of 3739a Texinfo file go into a man page. Only a subset of Texinfo is 3740supported by 'texi2pod.pl', and it may be necessary to add support for 3741more Texinfo features to this script when generating new man pages. To 3742improve the man page output, some special Texinfo macros are provided in 3743'doc/include/gcc-common.texi' which 'texi2pod.pl' understands: 3744 3745'@gcctabopt' 3746 Use in the form '@table @gcctabopt' for tables of options, where 3747 for printed output the effect of '@code' is better than that of 3748 '@option' but for man page output a different effect is wanted. 3749'@gccoptlist' 3750 Use for summary lists of options in manuals. 3751'@gol' 3752 Use at the end of each line inside '@gccoptlist'. This is 3753 necessary to avoid problems with differences in how the 3754 '@gccoptlist' macro is handled by different Texinfo formatters. 3755 3756 FIXME: describe the 'texi2pod.pl' input language and magic comments in 3757more detail. 3758 3759 3760File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3761 37626.3.7.3 Miscellaneous Documentation 3763................................... 3764 3765In addition to the formal documentation that is installed by GCC, there 3766are several other text files in the 'gcc' subdirectory with 3767miscellaneous documentation: 3768 3769'ABOUT-GCC-NLS' 3770 Notes on GCC's Native Language Support. FIXME: this should be part 3771 of this manual rather than a separate file. 3772'ABOUT-NLS' 3773 Notes on the Free Translation Project. 3774'COPYING' 3775'COPYING3' 3776 The GNU General Public License, Versions 2 and 3. 3777'COPYING.LIB' 3778'COPYING3.LIB' 3779 The GNU Lesser General Public License, Versions 2.1 and 3. 3780'*ChangeLog*' 3781'*/ChangeLog*' 3782 Change log files for various parts of GCC. 3783'LANGUAGES' 3784 Details of a few changes to the GCC front-end interface. FIXME: 3785 the information in this file should be part of general 3786 documentation of the front-end interface in this manual. 3787'ONEWS' 3788 Information about new features in old versions of GCC. (For recent 3789 versions, the information is on the GCC web site.) 3790'README.Portability' 3791 Information about portability issues when writing code in GCC. 3792 FIXME: why isn't this part of this manual or of the GCC Coding 3793 Conventions? 3794 3795 FIXME: document such files in subdirectories, at least 'config', 'c', 3796'cp', 'objc', 'testsuite'. 3797 3798 3799File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3800 38016.3.8 Anatomy of a Language Front End 3802------------------------------------- 3803 3804A front end for a language in GCC has the following parts: 3805 3806 * A directory 'LANGUAGE' under 'gcc' containing source files for that 3807 front end. *Note The Front End 'LANGUAGE' Directory: Front End 3808 Directory, for details. 3809 * A mention of the language in the list of supported languages in 3810 'gcc/doc/install.texi'. 3811 * A mention of the name under which the language's runtime library is 3812 recognized by '--enable-shared=PACKAGE' in the documentation of 3813 that option in 'gcc/doc/install.texi'. 3814 * A mention of any special prerequisites for building the front end 3815 in the documentation of prerequisites in 'gcc/doc/install.texi'. 3816 * Details of contributors to that front end in 3817 'gcc/doc/contrib.texi'. If the details are in that front end's own 3818 manual then there should be a link to that manual's list in 3819 'contrib.texi'. 3820 * Information about support for that language in 3821 'gcc/doc/frontends.texi'. 3822 * Information about standards for that language, and the front end's 3823 support for them, in 'gcc/doc/standards.texi'. This may be a link 3824 to such information in the front end's own manual. 3825 * Details of source file suffixes for that language and '-x LANG' 3826 options supported, in 'gcc/doc/invoke.texi'. 3827 * Entries in 'default_compilers' in 'gcc.c' for source file suffixes 3828 for that language. 3829 * Preferably testsuites, which may be under 'gcc/testsuite' or 3830 runtime library directories. FIXME: document somewhere how to 3831 write testsuite harnesses. 3832 * Probably a runtime library for the language, outside the 'gcc' 3833 directory. FIXME: document this further. 3834 * Details of the directories of any runtime libraries in 3835 'gcc/doc/sourcebuild.texi'. 3836 * Check targets in 'Makefile.def' for the top-level 'Makefile' to 3837 check just the compiler or the compiler and runtime library for the 3838 language. 3839 3840 If the front end is added to the official GCC source repository, the 3841following are also necessary: 3842 3843 * At least one Bugzilla component for bugs in that front end and 3844 runtime libraries. This category needs to be added to the Bugzilla 3845 database. 3846 * Normally, one or more maintainers of that front end listed in 3847 'MAINTAINERS'. 3848 * Mentions on the GCC web site in 'index.html' and 'frontends.html', 3849 with any relevant links on 'readings.html'. (Front ends that are 3850 not an official part of GCC may also be listed on 'frontends.html', 3851 with relevant links.) 3852 * A news item on 'index.html', and possibly an announcement on the 3853 <gcc-announce@gcc.gnu.org> mailing list. 3854 * The front end's manuals should be mentioned in 3855 'maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::) 3856 and the online manuals should be linked to from 3857 'onlinedocs/index.html'. 3858 * Any old releases or CVS repositories of the front end, before its 3859 inclusion in GCC, should be made available on the GCC FTP site 3860 <ftp://gcc.gnu.org/pub/gcc/old-releases/>. 3861 * The release and snapshot script 'maintainer-scripts/gcc_release' 3862 should be updated to generate appropriate tarballs for this front 3863 end. 3864 * If this front end includes its own version files that include the 3865 current date, 'maintainer-scripts/update_version' should be updated 3866 accordingly. 3867 3868* Menu: 3869 3870* Front End Directory:: The front end 'LANGUAGE' directory. 3871* Front End Config:: The front end 'config-lang.in' file. 3872* Front End Makefile:: The front end 'Make-lang.in' file. 3873 3874 3875File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3876 38776.3.8.1 The Front End 'LANGUAGE' Directory 3878.......................................... 3879 3880A front end 'LANGUAGE' directory contains the source files of that front 3881end (but not of any runtime libraries, which should be outside the 'gcc' 3882directory). This includes documentation, and possibly some subsidiary 3883programs built alongside the front end. Certain files are special and 3884other parts of the compiler depend on their names: 3885 3886'config-lang.in' 3887 This file is required in all language subdirectories. *Note The 3888 Front End 'config-lang.in' File: Front End Config, for details of 3889 its contents 3890'Make-lang.in' 3891 This file is required in all language subdirectories. *Note The 3892 Front End 'Make-lang.in' File: Front End Makefile, for details of 3893 its contents. 3894'lang.opt' 3895 This file registers the set of switches that the front end accepts 3896 on the command line, and their '--help' text. *Note Options::. 3897'lang-specs.h' 3898 This file provides entries for 'default_compilers' in 'gcc.c' which 3899 override the default of giving an error that a compiler for that 3900 language is not installed. 3901'LANGUAGE-tree.def' 3902 This file, which need not exist, defines any language-specific tree 3903 codes. 3904 3905 3906File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3907 39086.3.8.2 The Front End 'config-lang.in' File 3909........................................... 3910 3911Each language subdirectory contains a 'config-lang.in' file. This file 3912is a shell script that may define some variables describing the 3913language: 3914 3915'language' 3916 This definition must be present, and gives the name of the language 3917 for some purposes such as arguments to '--enable-languages'. 3918'lang_requires' 3919 If defined, this variable lists (space-separated) language front 3920 ends other than C that this front end requires to be enabled (with 3921 the names given being their 'language' settings). For example, the 3922 Java front end depends on the C++ front end, so sets 3923 'lang_requires=c++'. 3924'subdir_requires' 3925 If defined, this variable lists (space-separated) front end 3926 directories other than C that this front end requires to be 3927 present. For example, the Objective-C++ front end uses source 3928 files from the C++ and Objective-C front ends, so sets 3929 'subdir_requires="cp objc"'. 3930'target_libs' 3931 If defined, this variable lists (space-separated) targets in the 3932 top level 'Makefile' to build the runtime libraries for this 3933 language, such as 'target-libobjc'. 3934'lang_dirs' 3935 If defined, this variable lists (space-separated) top level 3936 directories (parallel to 'gcc'), apart from the runtime libraries, 3937 that should not be configured if this front end is not built. 3938'build_by_default' 3939 If defined to 'no', this language front end is not built unless 3940 enabled in a '--enable-languages' argument. Otherwise, front ends 3941 are built by default, subject to any special logic in 3942 'configure.ac' (as is present to disable the Ada front end if the 3943 Ada compiler is not already installed). 3944'boot_language' 3945 If defined to 'yes', this front end is built in stage1 of the 3946 bootstrap. This is only relevant to front ends written in their 3947 own languages. 3948'compilers' 3949 If defined, a space-separated list of compiler executables that 3950 will be run by the driver. The names here will each end with 3951 '\$(exeext)'. 3952'outputs' 3953 If defined, a space-separated list of files that should be 3954 generated by 'configure' substituting values in them. This 3955 mechanism can be used to create a file 'LANGUAGE/Makefile' from 3956 'LANGUAGE/Makefile.in', but this is deprecated, building everything 3957 from the single 'gcc/Makefile' is preferred. 3958'gtfiles' 3959 If defined, a space-separated list of files that should be scanned 3960 by 'gengtype.c' to generate the garbage collection tables and 3961 routines for this language. This excludes the files that are 3962 common to all front ends. *Note Type Information::. 3963 3964 3965File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 3966 39676.3.8.3 The Front End 'Make-lang.in' File 3968......................................... 3969 3970Each language subdirectory contains a 'Make-lang.in' file. It contains 3971targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in 3972'config-lang.in') for the following values of 'HOOK', and any other 3973Makefile rules required to build those targets (which may if necessary 3974use other Makefiles specified in 'outputs' in 'config-lang.in', although 3975this is deprecated). It also adds any testsuite targets that can use 3976the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'. 3977 3978'all.cross' 3979'start.encap' 3980'rest.encap' 3981 FIXME: exactly what goes in each of these targets? 3982'tags' 3983 Build an 'etags' 'TAGS' file in the language subdirectory in the 3984 source tree. 3985'info' 3986 Build info documentation for the front end, in the build directory. 3987 This target is only called by 'make bootstrap' if a suitable 3988 version of 'makeinfo' is available, so does not need to check for 3989 this, and should fail if an error occurs. 3990'dvi' 3991 Build DVI documentation for the front end, in the build directory. 3992 This should be done using '$(TEXI2DVI)', with appropriate '-I' 3993 arguments pointing to directories of included files. 3994'pdf' 3995 Build PDF documentation for the front end, in the build directory. 3996 This should be done using '$(TEXI2PDF)', with appropriate '-I' 3997 arguments pointing to directories of included files. 3998'html' 3999 Build HTML documentation for the front end, in the build directory. 4000'man' 4001 Build generated man pages for the front end from Texinfo manuals 4002 (*note Man Page Generation::), in the build directory. This target 4003 is only called if the necessary tools are available, but should 4004 ignore errors so as not to stop the build if errors occur; man 4005 pages are optional and the tools involved may be installed in a 4006 broken way. 4007'install-common' 4008 Install everything that is part of the front end, apart from the 4009 compiler executables listed in 'compilers' in 'config-lang.in'. 4010'install-info' 4011 Install info documentation for the front end, if it is present in 4012 the source directory. This target should have dependencies on info 4013 files that should be installed. 4014'install-man' 4015 Install man pages for the front end. This target should ignore 4016 errors. 4017'install-plugin' 4018 Install headers needed for plugins. 4019'srcextra' 4020 Copies its dependencies into the source directory. This generally 4021 should be used for generated files such as Bison output files which 4022 are not version-controlled, but should be included in any release 4023 tarballs. This target will be executed during a bootstrap if 4024 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4025 option. 4026'srcinfo' 4027'srcman' 4028 Copies its dependencies into the source directory. These targets 4029 will be executed during a bootstrap if 4030 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4031 option. 4032'uninstall' 4033 Uninstall files installed by installing the compiler. This is 4034 currently documented not to be supported, so the hook need not do 4035 anything. 4036'mostlyclean' 4037'clean' 4038'distclean' 4039'maintainer-clean' 4040 The language parts of the standard GNU '*clean' targets. *Note 4041 Standard Targets for Users: (standards)Standard Targets, for 4042 details of the standard targets. For GCC, 'maintainer-clean' 4043 should delete all generated files in the source directory that are 4044 not version-controlled, but should not delete anything that is. 4045 4046 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of 4047host object files that are used by that language. 4048 4049 4050File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4051 40526.3.9 Anatomy of a Target Back End 4053---------------------------------- 4054 4055A back end for a target architecture in GCC has the following parts: 4056 4057 * A directory 'MACHINE' under 'gcc/config', containing a machine 4058 description 'MACHINE.md' file (*note Machine Descriptions: Machine 4059 Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a 4060 source file 'MACHINE.c' (*note Target Description Macros and 4061 Functions: Target Macros.), possibly a target Makefile fragment 4062 't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.), 4063 and maybe some other files. The names of these files may be 4064 changed from the defaults given by explicit specifications in 4065 'config.gcc'. 4066 * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE' 4067 directory, containing additional machine modes to represent 4068 condition codes. *Note Condition Code::, for further details. 4069 * An optional 'MACHINE.opt' file in the 'MACHINE' directory, 4070 containing a list of target-specific options. You can also add 4071 other option files using the 'extra_options' variable in 4072 'config.gcc'. *Note Options::. 4073 * Entries in 'config.gcc' (*note The 'config.gcc' File: System 4074 Config.) for the systems with this target architecture. 4075 * Documentation in 'gcc/doc/invoke.texi' for any command-line options 4076 supported by this target (*note Run-time Target Specification: 4077 Run-time Target.). This means both entries in the summary table of 4078 options and details of the individual options. 4079 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4080 attributes supported (*note Defining target-specific uses of 4081 '__attribute__': Target Attributes.), including where the same 4082 attribute is already supported on some targets, which are 4083 enumerated in the manual. 4084 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4085 pragmas supported. 4086 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4087 built-in functions supported. 4088 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4089 format checking styles supported. 4090 * Documentation in 'gcc/doc/md.texi' of any target-specific 4091 constraint letters (*note Constraints for Particular Machines: 4092 Machine Constraints.). 4093 * A note in 'gcc/doc/contrib.texi' under the person or people who 4094 contributed the target support. 4095 * Entries in 'gcc/doc/install.texi' for all target triplets supported 4096 with this target architecture, giving details of any special notes 4097 about installation for this target, or saying that there are no 4098 special notes if there are none. 4099 * Possibly other support outside the 'gcc' directory for runtime 4100 libraries. FIXME: reference docs for this. The 'libstdc++' 4101 porting manual needs to be installed as info for this to work, or 4102 to be a chapter of this manual. 4103 4104 If the back end is added to the official GCC source repository, the 4105following are also necessary: 4106 4107 * An entry for the target architecture in 'readings.html' on the GCC 4108 web site, with any relevant links. 4109 * Details of the properties of the back end and target architecture 4110 in 'backends.html' on the GCC web site. 4111 * A news item about the contribution of support for that target 4112 architecture, in 'index.html' on the GCC web site. 4113 * Normally, one or more maintainers of that target listed in 4114 'MAINTAINERS'. Some existing architectures may be unmaintained, 4115 but it would be unusual to add support for a target that does not 4116 have a maintainer when support is added. 4117 * Target triplets covering all 'config.gcc' stanzas for the target, 4118 in the list in 'contrib/config-list.mk'. 4119 4120 4121File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4122 41237 Testsuites 4124************ 4125 4126GCC contains several testsuites to help maintain compiler quality. Most 4127of the runtime libraries and language front ends in GCC have testsuites. 4128Currently only the C language testsuites are documented here; FIXME: 4129document the others. 4130 4131* Menu: 4132 4133* Test Idioms:: Idioms used in testsuite code. 4134* Test Directives:: Directives used within DejaGnu tests. 4135* Ada Tests:: The Ada language testsuites. 4136* C Tests:: The C language testsuites. 4137* libgcj Tests:: The Java library testsuites. 4138* LTO Testing:: Support for testing link-time optimizations. 4139* gcov Testing:: Support for testing gcov. 4140* profopt Testing:: Support for testing profile-directed optimizations. 4141* compat Testing:: Support for testing binary compatibility. 4142* Torture Tests:: Support for torture testing using multiple options. 4143 4144 4145File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4146 41477.1 Idioms Used in Testsuite Code 4148================================= 4149 4150In general, C testcases have a trailing '-N.c', starting with '-1.c', in 4151case other testcases with similar names are added later. If the test is 4152a test of some well-defined feature, it should have a name referring to 4153that feature such as 'FEATURE-1.c'. If it does not test a well-defined 4154feature but just happens to exercise a bug somewhere in the compiler, 4155and a bug report has been filed for this bug in the GCC bug database, 4156'prBUG-NUMBER-1.c' is the appropriate form of name. Otherwise (for 4157miscellaneous bugs not filed in the GCC bug database), and previously 4158more generally, test cases are named after the date on which they were 4159added. This allows people to tell at a glance whether a test failure is 4160because of a recently found bug that has not yet been fixed, or whether 4161it may be a regression, but does not give any other information about 4162the bug or where discussion of it may be found. Some other language 4163testsuites follow similar conventions. 4164 4165 In the 'gcc.dg' testsuite, it is often necessary to test that an error 4166is indeed a hard error and not just a warning--for example, where it is 4167a constraint violation in the C standard, which must become an error 4168with '-pedantic-errors'. The following idiom, where the first line 4169shown is line LINE of the file and the line that generates the error, is 4170used for this: 4171 4172 /* { dg-bogus "warning" "warning in place of error" } */ 4173 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4174 4175 It may be necessary to check that an expression is an integer constant 4176expression and has a certain value. To check that 'E' has value 'V', an 4177idiom similar to the following is used: 4178 4179 char x[((E) == (V) ? 1 : -1)]; 4180 4181 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions 4182about the types of expressions. See, for example, 4183'gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4184rules for the types of conditional expressions in the C standard; see, 4185for example, 'gcc.dg/c99-intconst-1.c'. 4186 4187 It is useful to be able to test that optimizations are being made 4188properly. This cannot be done in all cases, but it can be done where 4189the optimization will lead to code being optimized away (for example, 4190where flow analysis or alias analysis should show that certain code 4191cannot be called) or to functions not being called because they have 4192been expanded as built-in functions. Such tests go in 4193'gcc.c-torture/execute'. Where code should be optimized away, a call to 4194a nonexistent function such as 'link_failure ()' may be inserted; a 4195definition 4196 4197 #ifndef __OPTIMIZE__ 4198 void 4199 link_failure (void) 4200 { 4201 abort (); 4202 } 4203 #endif 4204 4205will also be needed so that linking still succeeds when the test is run 4206without optimization. When all calls to a built-in function should have 4207been optimized and no calls to the non-built-in version of the function 4208should remain, that function may be defined as 'static' to call 'abort 4209()' (although redeclaring a function as static may not work on all 4210targets). 4211 4212 All testcases must be portable. Target-specific testcases must have 4213appropriate code to avoid causing failures on unsupported systems; 4214unfortunately, the mechanisms for this differ by directory. 4215 4216 FIXME: discuss non-C testsuites here. 4217 4218 4219File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4220 42217.2 Directives used within DejaGnu tests 4222======================================== 4223 4224* Menu: 4225 4226* Directives:: Syntax and descriptions of test directives. 4227* Selectors:: Selecting targets to which a test applies. 4228* Effective-Target Keywords:: Keywords describing target attributes. 4229* Add Options:: Features for 'dg-add-options' 4230* Require Support:: Variants of 'dg-require-SUPPORT' 4231* Final Actions:: Commands for use in 'dg-final' 4232 4233 4234File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4235 42367.2.1 Syntax and Descriptions of test directives 4237------------------------------------------------ 4238 4239Test directives appear within comments in a test source file and begin 4240with 'dg-'. Some of these are defined within DejaGnu and others are 4241local to the GCC testsuite. 4242 4243 The order in which test directives appear in a test can be important: 4244directives local to GCC sometimes override information used by the 4245DejaGnu directives, which know nothing about the GCC directives, so the 4246DejaGnu directives must precede GCC directives. 4247 4248 Several test directives include selectors (*note Selectors::) which are 4249usually preceded by the keyword 'target' or 'xfail'. 4250 42517.2.1.1 Specify how to build the test 4252..................................... 4253 4254'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4255 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4256 is executed. It is one of: 4257 4258 'preprocess' 4259 Compile with '-E' to run only the preprocessor. 4260 'compile' 4261 Compile with '-S' to produce an assembly code file. 4262 'assemble' 4263 Compile with '-c' to produce a relocatable object file. 4264 'link' 4265 Compile, assemble, and link to produce an executable file. 4266 'run' 4267 Produce and run an executable file, which is expected to 4268 return an exit code of 0. 4269 4270 The default is 'compile'. That can be overridden for a set of 4271 tests by redefining 'dg-do-what-default' within the '.exp' file for 4272 those tests. 4273 4274 If the directive includes the optional '{ target SELECTOR }' then 4275 the test is skipped unless the target system matches the SELECTOR. 4276 4277 If DO-WHAT-KEYWORD is 'run' and the directive includes the optional 4278 '{ xfail SELECTOR }' and the selector is met then the test is 4279 expected to fail. The 'xfail' clause is ignored for other values 4280 of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'. 4281 42827.2.1.2 Specify additional compiler options 4283........................................... 4284 4285'{ dg-options OPTIONS [{ target SELECTOR }] }' 4286 This DejaGnu directive provides a list of compiler options, to be 4287 used if the target system matches SELECTOR, that replace the 4288 default options used for this set of tests. 4289 4290'{ dg-add-options FEATURE ... }' 4291 Add any compiler options that are needed to access certain 4292 features. This directive does nothing on targets that enable the 4293 features by default, or that don't provide them at all. It must 4294 come after all 'dg-options' directives. For supported values of 4295 FEATURE see *note Add Options::. 4296 4297'{ dg-additional-options OPTIONS [{ target SELECTOR }] }' 4298 This directive provides a list of compiler options, to be used if 4299 the target system matches SELECTOR, that are added to the default 4300 options used for this set of tests. 4301 43027.2.1.3 Modify the test timeout value 4303..................................... 4304 4305The normal timeout limit, in seconds, is found by searching the 4306following in order: 4307 4308 * the value defined by an earlier 'dg-timeout' directive in the test 4309 4310 * variable TOOL_TIMEOUT defined by the set of tests 4311 4312 * GCC,TIMEOUT set in the target board 4313 4314 * 300 4315 4316'{ dg-timeout N [{target SELECTOR }] }' 4317 Set the time limit for the compilation and for the execution of the 4318 test to the specified number of seconds. 4319 4320'{ dg-timeout-factor X [{ target SELECTOR }] }' 4321 Multiply the normal time limit for compilation and execution of the 4322 test by the specified floating-point factor. 4323 43247.2.1.4 Skip a test for some targets 4325.................................... 4326 4327'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4328 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4329 element is a string of zero or more GCC options. Skip the test if 4330 all of the following conditions are met: 4331 * the test system is included in SELECTOR 4332 4333 * for at least one of the option strings in INCLUDE-OPTS, every 4334 option from that string is in the set of options with which 4335 the test would be compiled; use '"*"' for an INCLUDE-OPTS list 4336 that matches any options; that is the default if INCLUDE-OPTS 4337 is not specified 4338 4339 * for each of the option strings in EXCLUDE-OPTS, at least one 4340 option from that string is not in the set of options with 4341 which the test would be compiled; use '""' for an empty 4342 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4343 specified 4344 4345 For example, to skip a test if option '-Os' is present: 4346 4347 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4348 4349 To skip a test if both options '-O2' and '-g' are present: 4350 4351 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4352 4353 To skip a test if either '-O2' or '-O3' is present: 4354 4355 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4356 4357 To skip a test unless option '-Os' is present: 4358 4359 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4360 4361 To skip a test if either '-O2' or '-O3' is used with '-g' but not 4362 if '-fpic' is also present: 4363 4364 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4365 4366'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4367 Skip the test if the test target, including current multilib flags, 4368 is not covered by the effective-target keyword. If the directive 4369 includes the optional '{ SELECTOR }' then the effective-target test 4370 is only performed if the target system matches the SELECTOR. This 4371 directive must appear after any 'dg-do' directive in the test and 4372 before any 'dg-additional-sources' directive. *Note 4373 Effective-Target Keywords::. 4374 4375'{ dg-require-SUPPORT args }' 4376 Skip the test if the target does not provide the required support. 4377 These directives must appear after any 'dg-do' directive in the 4378 test and before any 'dg-additional-sources' directive. They 4379 require at least one argument, which can be an empty string if the 4380 specific procedure does not examine the argument. *Note Require 4381 Support::, for a complete list of these directives. 4382 43837.2.1.5 Expect a test to fail for some targets 4384.............................................. 4385 4386'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4387 Expect the test to fail if the conditions (which are the same as 4388 for 'dg-skip-if') are met. This does not affect the execute step. 4389 4390'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4391 Expect the execute step of a test to fail if the conditions (which 4392 are the same as for 'dg-skip-if') are met. 4393 43947.2.1.6 Expect the test executable to fail 4395.......................................... 4396 4397'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4398 Expect the test executable to return a nonzero exit status if the 4399 conditions (which are the same as for 'dg-skip-if') are met. 4400 44017.2.1.7 Verify compiler messages 4402................................ 4403 4404'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4405 This DejaGnu directive appears on a source line that is expected to 4406 get an error message, or else specifies the source line associated 4407 with the message. If there is no message for that line or if the 4408 text of that message is not matched by REGEXP then the check fails 4409 and COMMENT is included in the 'FAIL' message. The check does not 4410 look for the string 'error' unless it is part of REGEXP. 4411 4412'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4413 This DejaGnu directive appears on a source line that is expected to 4414 get a warning message, or else specifies the source line associated 4415 with the message. If there is no message for that line or if the 4416 text of that message is not matched by REGEXP then the check fails 4417 and COMMENT is included in the 'FAIL' message. The check does not 4418 look for the string 'warning' unless it is part of REGEXP. 4419 4420'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4421 The line is expected to get a message other than an error or 4422 warning. If there is no message for that line or if the text of 4423 that message is not matched by REGEXP then the check fails and 4424 COMMENT is included in the 'FAIL' message. 4425 4426'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4427 This DejaGnu directive appears on a source line that should not get 4428 a message matching REGEXP, or else specifies the source line 4429 associated with the bogus message. It is usually used with 'xfail' 4430 to indicate that the message is a known problem for a particular 4431 set of targets. 4432 4433'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4434 This DejaGnu directive indicates that the test is expected to fail 4435 due to compiler messages that are not handled by 'dg-error', 4436 'dg-warning' or 'dg-bogus'. For this directive 'xfail' has the 4437 same effect as 'target'. 4438 4439'{ dg-prune-output REGEXP }' 4440 Prune messages matching REGEXP from the test output. 4441 44427.2.1.8 Verify output of the test executable 4443............................................ 4444 4445'{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4446 This DejaGnu directive compares REGEXP to the combined output that 4447 the test executable writes to 'stdout' and 'stderr'. 4448 44497.2.1.9 Specify additional files for a test 4450........................................... 4451 4452'{ dg-additional-files "FILELIST" }' 4453 Specify additional files, other than source files, that must be 4454 copied to the system where the compiler runs. 4455 4456'{ dg-additional-sources "FILELIST" }' 4457 Specify additional source files to appear in the compile line 4458 following the main test file. 4459 44607.2.1.10 Add checks at the end of a test 4461........................................ 4462 4463'{ dg-final { LOCAL-DIRECTIVE } }' 4464 This DejaGnu directive is placed within a comment anywhere in the 4465 source file and is processed after the test has been compiled and 4466 run. Multiple 'dg-final' commands are processed in the order in 4467 which they appear in the source file. *Note Final Actions::, for a 4468 list of directives that can be used within 'dg-final'. 4469 4470 4471File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4472 44737.2.2 Selecting targets to which a test applies 4474----------------------------------------------- 4475 4476Several test directives include SELECTORs to limit the targets for which 4477a test is run or to declare that a test is expected to fail on 4478particular targets. 4479 4480 A selector is: 4481 * one or more target triplets, possibly including wildcard 4482 characters; use '*-*-*' to match any target 4483 * a single effective-target keyword (*note Effective-Target 4484 Keywords::) 4485 * a logical expression 4486 4487 Depending on the context, the selector specifies whether a test is 4488skipped and reported as unsupported or is expected to fail. A context 4489that allows either 'target' or 'xfail' also allows '{ target SELECTOR1 4490xfail SELECTOR2 }' to skip the test for targets that don't match 4491SELECTOR1 and the test to fail for targets that match SELECTOR2. 4492 4493 A selector expression appears within curly braces and uses a single 4494logical operator: one of '!', '&&', or '||'. An operand is another 4495selector expression, an effective-target keyword, a single target 4496triplet, or a list of target triplets within quotes or curly braces. 4497For example: 4498 4499 { target { ! "hppa*-*-* ia64*-*-*" } } 4500 { target { powerpc*-*-* && lp64 } } 4501 { xfail { lp64 || vect_no_align } } 4502 4503 4504File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4505 45067.2.3 Keywords describing target attributes 4507------------------------------------------- 4508 4509Effective-target keywords identify sets of targets that support 4510particular functionality. They are used to limit tests to be run only 4511for particular targets, or to specify that particular sets of targets 4512are expected to fail some tests. 4513 4514 Effective-target keywords are defined in 'lib/target-supports.exp' in 4515the GCC testsuite, with the exception of those that are documented as 4516being local to a particular test directory. 4517 4518 The 'effective target' takes into account all of the compiler options 4519with which the test will be compiled, including the multilib options. 4520By convention, keywords ending in '_nocache' can also include options 4521specified for the particular test in an earlier 'dg-options' or 4522'dg-add-options' directive. 4523 45247.2.3.1 Data type sizes 4525....................... 4526 4527'ilp32' 4528 Target has 32-bit 'int', 'long', and pointers. 4529 4530'lp64' 4531 Target has 32-bit 'int', 64-bit 'long' and pointers. 4532 4533'llp64' 4534 Target has 32-bit 'int' and 'long', 64-bit 'long long' and 4535 pointers. 4536 4537'double64' 4538 Target has 64-bit 'double'. 4539 4540'double64plus' 4541 Target has 'double' that is 64 bits or longer. 4542 4543'longdouble128' 4544 Target has 128-bit 'long double'. 4545 4546'int32plus' 4547 Target has 'int' that is at 32 bits or longer. 4548 4549'int16' 4550 Target has 'int' that is 16 bits or shorter. 4551 4552'long_neq_int' 4553 Target has 'int' and 'long' with different sizes. 4554 4555'large_double' 4556 Target supports 'double' that is longer than 'float'. 4557 4558'large_long_double' 4559 Target supports 'long double' that is longer than 'double'. 4560 4561'ptr32plus' 4562 Target has pointers that are 32 bits or longer. 4563 4564'size32plus' 4565 Target supports array and structure sizes that are 32 bits or 4566 longer. 4567 4568'4byte_wchar_t' 4569 Target has 'wchar_t' that is at least 4 bytes. 4570 45717.2.3.2 Fortran-specific attributes 4572................................... 4573 4574'fortran_integer_16' 4575 Target supports Fortran 'integer' that is 16 bytes or longer. 4576 4577'fortran_large_int' 4578 Target supports Fortran 'integer' kinds larger than 'integer(8)'. 4579 4580'fortran_large_real' 4581 Target supports Fortran 'real' kinds larger than 'real(8)'. 4582 45837.2.3.3 Vector-specific attributes 4584.................................. 4585 4586'vect_condition' 4587 Target supports vector conditional operations. 4588 4589'vect_double' 4590 Target supports hardware vectors of 'double'. 4591 4592'vect_float' 4593 Target supports hardware vectors of 'float'. 4594 4595'vect_int' 4596 Target supports hardware vectors of 'int'. 4597 4598'vect_long' 4599 Target supports hardware vectors of 'long'. 4600 4601'vect_long_long' 4602 Target supports hardware vectors of 'long long'. 4603 4604'vect_aligned_arrays' 4605 Target aligns arrays to vector alignment boundary. 4606 4607'vect_hw_misalign' 4608 Target supports a vector misalign access. 4609 4610'vect_no_align' 4611 Target does not support a vector alignment mechanism. 4612 4613'vect_no_int_max' 4614 Target does not support a vector max instruction on 'int'. 4615 4616'vect_no_int_add' 4617 Target does not support a vector add instruction on 'int'. 4618 4619'vect_no_bitwise' 4620 Target does not support vector bitwise instructions. 4621 4622'vect_char_mult' 4623 Target supports 'vector char' multiplication. 4624 4625'vect_short_mult' 4626 Target supports 'vector short' multiplication. 4627 4628'vect_int_mult' 4629 Target supports 'vector int' multiplication. 4630 4631'vect_extract_even_odd' 4632 Target supports vector even/odd element extraction. 4633 4634'vect_extract_even_odd_wide' 4635 Target supports vector even/odd element extraction of vectors with 4636 elements 'SImode' or larger. 4637 4638'vect_interleave' 4639 Target supports vector interleaving. 4640 4641'vect_strided' 4642 Target supports vector interleaving and extract even/odd. 4643 4644'vect_strided_wide' 4645 Target supports vector interleaving and extract even/odd for wide 4646 element types. 4647 4648'vect_perm' 4649 Target supports vector permutation. 4650 4651'vect_shift' 4652 Target supports a hardware vector shift operation. 4653 4654'vect_widen_sum_hi_to_si' 4655 Target supports a vector widening summation of 'short' operands 4656 into 'int' results, or can promote (unpack) from 'short' to 'int'. 4657 4658'vect_widen_sum_qi_to_hi' 4659 Target supports a vector widening summation of 'char' operands into 4660 'short' results, or can promote (unpack) from 'char' to 'short'. 4661 4662'vect_widen_sum_qi_to_si' 4663 Target supports a vector widening summation of 'char' operands into 4664 'int' results. 4665 4666'vect_widen_mult_qi_to_hi' 4667 Target supports a vector widening multiplication of 'char' operands 4668 into 'short' results, or can promote (unpack) from 'char' to 4669 'short' and perform non-widening multiplication of 'short'. 4670 4671'vect_widen_mult_hi_to_si' 4672 Target supports a vector widening multiplication of 'short' 4673 operands into 'int' results, or can promote (unpack) from 'short' 4674 to 'int' and perform non-widening multiplication of 'int'. 4675 4676'vect_widen_mult_si_to_di_pattern' 4677 Target supports a vector widening multiplication of 'int' operands 4678 into 'long' results. 4679 4680'vect_sdot_qi' 4681 Target supports a vector dot-product of 'signed char'. 4682 4683'vect_udot_qi' 4684 Target supports a vector dot-product of 'unsigned char'. 4685 4686'vect_sdot_hi' 4687 Target supports a vector dot-product of 'signed short'. 4688 4689'vect_udot_hi' 4690 Target supports a vector dot-product of 'unsigned short'. 4691 4692'vect_pack_trunc' 4693 Target supports a vector demotion (packing) of 'short' to 'char' 4694 and from 'int' to 'short' using modulo arithmetic. 4695 4696'vect_unpack' 4697 Target supports a vector promotion (unpacking) of 'char' to 'short' 4698 and from 'char' to 'int'. 4699 4700'vect_intfloat_cvt' 4701 Target supports conversion from 'signed int' to 'float'. 4702 4703'vect_uintfloat_cvt' 4704 Target supports conversion from 'unsigned int' to 'float'. 4705 4706'vect_floatint_cvt' 4707 Target supports conversion from 'float' to 'signed int'. 4708 4709'vect_floatuint_cvt' 4710 Target supports conversion from 'float' to 'unsigned int'. 4711 47127.2.3.4 Thread Local Storage attributes 4713....................................... 4714 4715'tls' 4716 Target supports thread-local storage. 4717 4718'tls_native' 4719 Target supports native (rather than emulated) thread-local storage. 4720 4721'tls_runtime' 4722 Test system supports executing TLS executables. 4723 47247.2.3.5 Decimal floating point attributes 4725......................................... 4726 4727'dfp' 4728 Targets supports compiling decimal floating point extension to C. 4729 4730'dfp_nocache' 4731 Including the options used to compile this particular test, the 4732 target supports compiling decimal floating point extension to C. 4733 4734'dfprt' 4735 Test system can execute decimal floating point tests. 4736 4737'dfprt_nocache' 4738 Including the options used to compile this particular test, the 4739 test system can execute decimal floating point tests. 4740 4741'hard_dfp' 4742 Target generates decimal floating point instructions with current 4743 options. 4744 47457.2.3.6 ARM-specific attributes 4746............................... 4747 4748'arm32' 4749 ARM target generates 32-bit code. 4750 4751'arm_eabi' 4752 ARM target adheres to the ABI for the ARM Architecture. 4753 4754'arm_hf_eabi' 4755 ARM target adheres to the VFP and Advanced SIMD Register Arguments 4756 variant of the ABI for the ARM Architecture (as selected with 4757 '-mfloat-abi=hard'). 4758 4759'arm_hard_vfp_ok' 4760 ARM target supports '-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4761 may be incompatible with these options. 4762 4763'arm_iwmmxt_ok' 4764 ARM target supports '-mcpu=iwmmxt'. Some multilibs may be 4765 incompatible with this option. 4766 4767'arm_neon' 4768 ARM target supports generating NEON instructions. 4769 4770'arm_tune_string_ops_prefer_neon' 4771 Test CPU tune supports inlining string operations with NEON 4772 instructions. 4773 4774'arm_neon_hw' 4775 Test system supports executing NEON instructions. 4776 4777'arm_neonv2_hw' 4778 Test system supports executing NEON v2 instructions. 4779 4780'arm_neon_ok' 4781 ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible 4782 options. Some multilibs may be incompatible with these options. 4783 4784'arm_neonv2_ok' 4785 ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or 4786 compatible options. Some multilibs may be incompatible with these 4787 options. 4788 4789'arm_neon_fp16_ok' 4790 ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or 4791 compatible options. Some multilibs may be incompatible with these 4792 options. 4793 4794'arm_thumb1_ok' 4795 ARM target generates Thumb-1 code for '-mthumb'. 4796 4797'arm_thumb2_ok' 4798 ARM target generates Thumb-2 code for '-mthumb'. 4799 4800'arm_vfp_ok' 4801 ARM target supports '-mfpu=vfp -mfloat-abi=softfp'. Some multilibs 4802 may be incompatible with these options. 4803 4804'arm_vfp3_ok' 4805 ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'. Some 4806 multilibs may be incompatible with these options. 4807 4808'arm_v8_vfp_ok' 4809 ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'. Some 4810 multilibs may be incompatible with these options. 4811 4812'arm_v8_neon_ok' 4813 ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'. Some 4814 multilibs may be incompatible with these options. 4815 4816'arm_prefer_ldrd_strd' 4817 ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and 4818 'STM' instructions. 4819 48207.2.3.7 MIPS-specific attributes 4821................................ 4822 4823'mips64' 4824 MIPS target supports 64-bit instructions. 4825 4826'nomips16' 4827 MIPS target does not produce MIPS16 code. 4828 4829'mips16_attribute' 4830 MIPS target can generate MIPS16 code. 4831 4832'mips_loongson' 4833 MIPS target is a Loongson-2E or -2F target using an ABI that 4834 supports the Loongson vector modes. 4835 4836'mips_newabi_large_long_double' 4837 MIPS target supports 'long double' larger than 'double' when using 4838 the new ABI. 4839 4840'mpaired_single' 4841 MIPS target supports '-mpaired-single'. 4842 48437.2.3.8 PowerPC-specific attributes 4844................................... 4845 4846'dfp_hw' 4847 PowerPC target supports executing hardware DFP instructions. 4848 4849'p8vector_hw' 4850 PowerPC target supports executing VSX instructions (ISA 2.07). 4851 4852'powerpc64' 4853 Test system supports executing 64-bit instructions. 4854 4855'powerpc_altivec' 4856 PowerPC target supports AltiVec. 4857 4858'powerpc_altivec_ok' 4859 PowerPC target supports '-maltivec'. 4860 4861'powerpc_eabi_ok' 4862 PowerPC target supports '-meabi'. 4863 4864'powerpc_elfv2' 4865 PowerPC target supports '-mabi=elfv2'. 4866 4867'powerpc_fprs' 4868 PowerPC target supports floating-point registers. 4869 4870'powerpc_hard_double' 4871 PowerPC target supports hardware double-precision floating-point. 4872 4873'powerpc_htm_ok' 4874 PowerPC target supports '-mhtm' 4875 4876'powerpc_p8vector_ok' 4877 PowerPC target supports '-mpower8-vector' 4878 4879'powerpc_ppu_ok' 4880 PowerPC target supports '-mcpu=cell'. 4881 4882'powerpc_spe' 4883 PowerPC target supports PowerPC SPE. 4884 4885'powerpc_spe_nocache' 4886 Including the options used to compile this particular test, the 4887 PowerPC target supports PowerPC SPE. 4888 4889'powerpc_spu' 4890 PowerPC target supports PowerPC SPU. 4891 4892'powerpc_vsx_ok' 4893 PowerPC target supports '-mvsx'. 4894 4895'powerpc_405_nocache' 4896 Including the options used to compile this particular test, the 4897 PowerPC target supports PowerPC 405. 4898 4899'ppc_recip_hw' 4900 PowerPC target supports executing reciprocal estimate instructions. 4901 4902'spu_auto_overlay' 4903 SPU target has toolchain that supports automatic overlay 4904 generation. 4905 4906'vmx_hw' 4907 PowerPC target supports executing AltiVec instructions. 4908 4909'vsx_hw' 4910 PowerPC target supports executing VSX instructions (ISA 2.06). 4911 49127.2.3.9 Other hardware attributes 4913................................. 4914 4915'avx' 4916 Target supports compiling 'avx' instructions. 4917 4918'avx_runtime' 4919 Target supports the execution of 'avx' instructions. 4920 4921'cell_hw' 4922 Test system can execute AltiVec and Cell PPU instructions. 4923 4924'coldfire_fpu' 4925 Target uses a ColdFire FPU. 4926 4927'hard_float' 4928 Target supports FPU instructions. 4929 4930'non_strict_align' 4931 Target does not require strict alignment. 4932 4933'sse' 4934 Target supports compiling 'sse' instructions. 4935 4936'sse_runtime' 4937 Target supports the execution of 'sse' instructions. 4938 4939'sse2' 4940 Target supports compiling 'sse2' instructions. 4941 4942'sse2_runtime' 4943 Target supports the execution of 'sse2' instructions. 4944 4945'sync_char_short' 4946 Target supports atomic operations on 'char' and 'short'. 4947 4948'sync_int_long' 4949 Target supports atomic operations on 'int' and 'long'. 4950 4951'ultrasparc_hw' 4952 Test environment appears to run executables on a simulator that 4953 accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS' 4954 or 'EM_SPARCV9' executables. 4955 4956'vect_cmdline_needed' 4957 Target requires a command line argument to enable a SIMD 4958 instruction set. 4959 4960'pie_copyreloc' 4961 The x86-64 target linker supports PIE with copy reloc. 4962 49637.2.3.10 Environment attributes 4964............................... 4965 4966'c' 4967 The language for the compiler under test is C. 4968 4969'c++' 4970 The language for the compiler under test is C++. 4971 4972'c99_runtime' 4973 Target provides a full C99 runtime. 4974 4975'correct_iso_cpp_string_wchar_protos' 4976 Target 'string.h' and 'wchar.h' headers provide C++ required 4977 overloads for 'strchr' etc. functions. 4978 4979'dummy_wcsftime' 4980 Target uses a dummy 'wcsftime' function that always returns zero. 4981 4982'fd_truncate' 4983 Target can truncate a file from a file descriptor, as used by 4984 'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'. 4985 4986'freestanding' 4987 Target is 'freestanding' as defined in section 4 of the C99 4988 standard. Effectively, it is a target which supports no extra 4989 headers or libraries other than what is considered essential. 4990 4991'init_priority' 4992 Target supports constructors with initialization priority 4993 arguments. 4994 4995'inttypes_types' 4996 Target has the basic signed and unsigned types in 'inttypes.h'. 4997 This is for tests that GCC's notions of these types agree with 4998 those in the header, as some systems have only 'inttypes.h'. 4999 5000'lax_strtofp' 5001 Target might have errors of a few ULP in string to floating-point 5002 conversion functions and overflow is not always detected correctly 5003 by those functions. 5004 5005'mempcpy' 5006 Target provides 'mempcpy' function. 5007 5008'mmap' 5009 Target supports 'mmap'. 5010 5011'newlib' 5012 Target supports Newlib. 5013 5014'pow10' 5015 Target provides 'pow10' function. 5016 5017'pthread' 5018 Target can compile using 'pthread.h' with no errors or warnings. 5019 5020'pthread_h' 5021 Target has 'pthread.h'. 5022 5023'run_expensive_tests' 5024 Expensive testcases (usually those that consume excessive amounts 5025 of CPU time) should be run on this target. This can be enabled by 5026 setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a 5027 non-empty string. 5028 5029'simulator' 5030 Test system runs executables on a simulator (i.e. slowly) rather 5031 than hardware (i.e. fast). 5032 5033'stabs' 5034 Target supports the stabs debugging format. 5035 5036'stdint_types' 5037 Target has the basic signed and unsigned C types in 'stdint.h'. 5038 This will be obsolete when GCC ensures a working 'stdint.h' for all 5039 targets. 5040 5041'stpcpy' 5042 Target provides 'stpcpy' function. 5043 5044'trampolines' 5045 Target supports trampolines. 5046 5047'uclibc' 5048 Target supports uClibc. 5049 5050'unwrapped' 5051 Target does not use a status wrapper. 5052 5053'vxworks_kernel' 5054 Target is a VxWorks kernel. 5055 5056'vxworks_rtp' 5057 Target is a VxWorks RTP. 5058 5059'wchar' 5060 Target supports wide characters. 5061 50627.2.3.11 Other attributes 5063......................... 5064 5065'automatic_stack_alignment' 5066 Target supports automatic stack alignment. 5067 5068'cxa_atexit' 5069 Target uses '__cxa_atexit'. 5070 5071'default_packed' 5072 Target has packed layout of structure members by default. 5073 5074'fgraphite' 5075 Target supports Graphite optimizations. 5076 5077'fixed_point' 5078 Target supports fixed-point extension to C. 5079 5080'fopenacc' 5081 Target supports OpenACC via '-fopenacc'. 5082 5083'fopenmp' 5084 Target supports OpenMP via '-fopenmp'. 5085 5086'fpic' 5087 Target supports '-fpic' and '-fPIC'. 5088 5089'freorder' 5090 Target supports '-freorder-blocks-and-partition'. 5091 5092'fstack_protector' 5093 Target supports '-fstack-protector'. 5094 5095'gas' 5096 Target uses GNU 'as'. 5097 5098'gc_sections' 5099 Target supports '--gc-sections'. 5100 5101'gld' 5102 Target uses GNU 'ld'. 5103 5104'keeps_null_pointer_checks' 5105 Target keeps null pointer checks, either due to the use of 5106 '-fno-delete-null-pointer-checks' or hardwired into the target. 5107 5108'lto' 5109 Compiler has been configured to support link-time optimization 5110 (LTO). 5111 5112'naked_functions' 5113 Target supports the 'naked' function attribute. 5114 5115'named_sections' 5116 Target supports named sections. 5117 5118'natural_alignment_32' 5119 Target uses natural alignment (aligned to type size) for types of 5120 32 bits or less. 5121 5122'target_natural_alignment_64' 5123 Target uses natural alignment (aligned to type size) for types of 5124 64 bits or less. 5125 5126'nonpic' 5127 Target does not generate PIC by default. 5128 5129'pie_enabled' 5130 Target generates PIE by default. 5131 5132'pcc_bitfield_type_matters' 5133 Target defines 'PCC_BITFIELD_TYPE_MATTERS'. 5134 5135'pe_aligned_commons' 5136 Target supports '-mpe-aligned-commons'. 5137 5138'pie' 5139 Target supports '-pie', '-fpie' and '-fPIE'. 5140 5141'section_anchors' 5142 Target supports section anchors. 5143 5144'short_enums' 5145 Target defaults to short enums. 5146 5147'static' 5148 Target supports '-static'. 5149 5150'static_libgfortran' 5151 Target supports statically linking 'libgfortran'. 5152 5153'string_merging' 5154 Target supports merging string constants at link time. 5155 5156'ucn' 5157 Target supports compiling and assembling UCN. 5158 5159'ucn_nocache' 5160 Including the options used to compile this particular test, the 5161 target supports compiling and assembling UCN. 5162 5163'unaligned_stack' 5164 Target does not guarantee that its 'STACK_BOUNDARY' is greater than 5165 or equal to the required vector alignment. 5166 5167'vector_alignment_reachable' 5168 Vector alignment is reachable for types of 32 bits or less. 5169 5170'vector_alignment_reachable_for_64bit' 5171 Vector alignment is reachable for types of 64 bits or less. 5172 5173'wchar_t_char16_t_compatible' 5174 Target supports 'wchar_t' that is compatible with 'char16_t'. 5175 5176'wchar_t_char32_t_compatible' 5177 Target supports 'wchar_t' that is compatible with 'char32_t'. 5178 5179'comdat_group' 5180 Target uses comdat groups. 5181 51827.2.3.12 Local to tests in 'gcc.target/i386' 5183............................................ 5184 5185'3dnow' 5186 Target supports compiling '3dnow' instructions. 5187 5188'aes' 5189 Target supports compiling 'aes' instructions. 5190 5191'fma4' 5192 Target supports compiling 'fma4' instructions. 5193 5194'ms_hook_prologue' 5195 Target supports attribute 'ms_hook_prologue'. 5196 5197'pclmul' 5198 Target supports compiling 'pclmul' instructions. 5199 5200'sse3' 5201 Target supports compiling 'sse3' instructions. 5202 5203'sse4' 5204 Target supports compiling 'sse4' instructions. 5205 5206'sse4a' 5207 Target supports compiling 'sse4a' instructions. 5208 5209'ssse3' 5210 Target supports compiling 'ssse3' instructions. 5211 5212'vaes' 5213 Target supports compiling 'vaes' instructions. 5214 5215'vpclmul' 5216 Target supports compiling 'vpclmul' instructions. 5217 5218'xop' 5219 Target supports compiling 'xop' instructions. 5220 52217.2.3.13 Local to tests in 'gcc.target/spu/ea' 5222.............................................. 5223 5224'ealib' 5225 Target '__ea' library functions are available. 5226 52277.2.3.14 Local to tests in 'gcc.test-framework' 5228............................................... 5229 5230'no' 5231 Always returns 0. 5232 5233'yes' 5234 Always returns 1. 5235 5236 5237File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5238 52397.2.4 Features for 'dg-add-options' 5240----------------------------------- 5241 5242The supported values of FEATURE for directive 'dg-add-options' are: 5243 5244'arm_neon' 5245 NEON support. Only ARM targets support this feature, and only then 5246 in certain modes; see the *note arm_neon_ok effective target 5247 keyword: arm_neon_ok. 5248 5249'arm_neon_fp16' 5250 NEON and half-precision floating point support. Only ARM targets 5251 support this feature, and only then in certain modes; see the *note 5252 arm_neon_fp16_ok effective target keyword: arm_neon_ok. 5253 5254'arm_vfp3' 5255 arm vfp3 floating point support; see the *note arm_vfp3_ok 5256 effective target keyword: arm_vfp3_ok. 5257 5258'bind_pic_locally' 5259 Add the target-specific flags needed to enable functions to bind 5260 locally when using pic/PIC passes in the testsuite. 5261 5262'c99_runtime' 5263 Add the target-specific flags needed to access the C99 runtime. 5264 5265'ieee' 5266 Add the target-specific flags needed to enable full IEEE compliance 5267 mode. 5268 5269'mips16_attribute' 5270 'mips16' function attributes. Only MIPS targets support this 5271 feature, and only then in certain modes. 5272 5273'tls' 5274 Add the target-specific flags needed to use thread-local storage. 5275 5276 5277File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5278 52797.2.5 Variants of 'dg-require-SUPPORT' 5280-------------------------------------- 5281 5282A few of the 'dg-require' directives take arguments. 5283 5284'dg-require-iconv CODESET' 5285 Skip the test if the target does not support iconv. CODESET is the 5286 codeset to convert to. 5287 5288'dg-require-profiling PROFOPT' 5289 Skip the test if the target does not support profiling with option 5290 PROFOPT. 5291 5292'dg-require-visibility VIS' 5293 Skip the test if the target does not support the 'visibility' 5294 attribute. If VIS is '""', support for 'visibility("hidden")' is 5295 checked, for 'visibility("VIS")' otherwise. 5296 5297 The original 'dg-require' directives were defined before there was 5298support for effective-target keywords. The directives that do not take 5299arguments could be replaced with effective-target keywords. 5300 5301'dg-require-alias ""' 5302 Skip the test if the target does not support the 'alias' attribute. 5303 5304'dg-require-ascii-locale ""' 5305 Skip the test if the host does not support an ASCII locale. 5306 5307'dg-require-compat-dfp ""' 5308 Skip this test unless both compilers in a 'compat' testsuite 5309 support decimal floating point. 5310 5311'dg-require-cxa-atexit ""' 5312 Skip the test if the target does not support '__cxa_atexit'. This 5313 is equivalent to 'dg-require-effective-target cxa_atexit'. 5314 5315'dg-require-dll ""' 5316 Skip the test if the target does not support DLL attributes. 5317 5318'dg-require-fork ""' 5319 Skip the test if the target does not support 'fork'. 5320 5321'dg-require-gc-sections ""' 5322 Skip the test if the target's linker does not support the 5323 '--gc-sections' flags. This is equivalent to 5324 'dg-require-effective-target gc-sections'. 5325 5326'dg-require-host-local ""' 5327 Skip the test if the host is remote, rather than the same as the 5328 build system. Some tests are incompatible with DejaGnu's handling 5329 of remote hosts, which involves copying the source file to the host 5330 and compiling it with a relative path and "'-o a.out'". 5331 5332'dg-require-mkfifo ""' 5333 Skip the test if the target does not support 'mkfifo'. 5334 5335'dg-require-named-sections ""' 5336 Skip the test is the target does not support named sections. This 5337 is equivalent to 'dg-require-effective-target named_sections'. 5338 5339'dg-require-weak ""' 5340 Skip the test if the target does not support weak symbols. 5341 5342'dg-require-weak-override ""' 5343 Skip the test if the target does not support overriding weak 5344 symbols. 5345 5346 5347File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5348 53497.2.6 Commands for use in 'dg-final' 5350------------------------------------ 5351 5352The GCC testsuite defines the following directives to be used within 5353'dg-final'. 5354 53557.2.6.1 Scan a particular file 5356.............................. 5357 5358'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 5359 Passes if REGEXP matches text in FILENAME. 5360'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 5361 Passes if REGEXP does not match text in FILENAME. 5362'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 5363 Passes if REGEXP matches in Fortran module MODULE. 5364 53657.2.6.2 Scan the assembly output 5366................................ 5367 5368'scan-assembler REGEX [{ target/xfail SELECTOR }]' 5369 Passes if REGEX matches text in the test's assembler output. 5370 5371'scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 5372 Passes if REGEX does not match text in the test's assembler output. 5373 5374'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 5375 Passes if REGEX is matched exactly NUM times in the test's 5376 assembler output. 5377 5378'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 5379 Passes if REGEX matches text in the test's demangled assembler 5380 output. 5381 5382'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 5383 Passes if REGEX does not match text in the test's demangled 5384 assembler output. 5385 5386'scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 5387 Passes if SYMBOL is defined as a hidden symbol in the test's 5388 assembly output. 5389 5390'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 5391 Passes if SYMBOL is not defined as a hidden symbol in the test's 5392 assembly output. 5393 53947.2.6.3 Scan optimization dump files 5395.................................... 5396 5397These commands are available for KIND of 'tree', 'rtl', and 'ipa'. 5398 5399'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 5400 Passes if REGEX matches text in the dump file with suffix SUFFIX. 5401 5402'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5403 Passes if REGEX does not match text in the dump file with suffix 5404 SUFFIX. 5405 5406'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 5407 Passes if REGEX is found exactly NUM times in the dump file with 5408 suffix SUFFIX. 5409 5410'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 5411 Passes if REGEX matches demangled text in the dump file with suffix 5412 SUFFIX. 5413 5414'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5415 Passes if REGEX does not match demangled text in the dump file with 5416 suffix SUFFIX. 5417 54187.2.6.4 Verify that an output files exists or not 5419................................................. 5420 5421'output-exists [{ target/xfail SELECTOR }]' 5422 Passes if compiler output file exists. 5423 5424'output-exists-not [{ target/xfail SELECTOR }]' 5425 Passes if compiler output file does not exist. 5426 54277.2.6.5 Check for LTO tests 5428........................... 5429 5430'scan-symbol REGEXP [{ target/xfail SELECTOR }]' 5431 Passes if the pattern is present in the final executable. 5432 54337.2.6.6 Checks for 'gcov' tests 5434............................... 5435 5436'run-gcov SOURCEFILE' 5437 Check line counts in 'gcov' tests. 5438 5439'run-gcov [branches] [calls] { OPTS SOURCEFILE }' 5440 Check branch and/or call counts, in addition to line counts, in 5441 'gcov' tests. 5442 54437.2.6.7 Clean up generated test files 5444..................................... 5445 5446'cleanup-coverage-files' 5447 Removes coverage data files generated for this test. 5448 5449'cleanup-ipa-dump SUFFIX' 5450 Removes IPA dump files generated for this test. 5451 5452'cleanup-modules "LIST-OF-EXTRA-MODULES"' 5453 Removes Fortran module files generated for this test, excluding the 5454 module names listed in keep-modules. Cleaning up module files is 5455 usually done automatically by the testsuite by looking at the 5456 source files and removing the modules after the test has been 5457 executed. 5458 module MoD1 5459 end module MoD1 5460 module Mod2 5461 end module Mod2 5462 module moD3 5463 end module moD3 5464 module mod4 5465 end module mod4 5466 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant 5467 ! { dg-final { keep-modules "mod3 mod4" } } 5468 5469'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"' 5470 Whitespace separated list of module names that should not be 5471 deleted by cleanup-modules. If the list of modules is empty, all 5472 modules defined in this file are kept. 5473 module maybe_unneeded 5474 end module maybe_unneeded 5475 module keep1 5476 end module keep1 5477 module keep2 5478 end module keep2 5479 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two 5480 ! { dg-final { keep-modules "" } } ! keep all 5481 5482'cleanup-profile-file' 5483 Removes profiling files generated for this test. 5484 5485'cleanup-repo-files' 5486 Removes files generated for this test for '-frepo'. 5487 5488'cleanup-rtl-dump SUFFIX' 5489 Removes RTL dump files generated for this test. 5490 5491'cleanup-saved-temps' 5492 Removes files for the current test which were kept for 5493 '-save-temps'. 5494 5495'cleanup-tree-dump SUFFIX' 5496 Removes tree dump files matching SUFFIX which were generated for 5497 this test. 5498 5499 5500File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 5501 55027.3 Ada Language Testsuites 5503=========================== 5504 5505The Ada testsuite includes executable tests from the ACATS testsuite, 5506publicly available at <http://www.ada-auth.org/acats.html>. 5507 5508 These tests are integrated in the GCC testsuite in the 'ada/acats' 5509directory, and enabled automatically when running 'make check', assuming 5510the Ada language has been enabled when configuring GCC. 5511 5512 You can also run the Ada testsuite independently, using 'make 5513check-ada', or run a subset of the tests by specifying which chapter to 5514run, e.g.: 5515 5516 $ make check-ada CHAPTERS="c3 c9" 5517 5518 The tests are organized by directory, each directory corresponding to a 5519chapter of the Ada Reference Manual. So for example, 'c9' corresponds 5520to chapter 9, which deals with tasking features of the language. 5521 5522 There is also an extra chapter called 'gcc' containing a template for 5523creating new executable tests, although this is deprecated in favor of 5524the 'gnat.dg' testsuite. 5525 5526 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'. 5527To run the tests using a simulator or a cross target, see the small 5528customization section at the top of 'run_all.sh'. 5529 5530 These tests are run using the build tree: they can be run without doing 5531a 'make install'. 5532 5533 5534File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 5535 55367.4 C Language Testsuites 5537========================= 5538 5539GCC contains the following C language testsuites, in the 'gcc/testsuite' 5540directory: 5541 5542'gcc.dg' 5543 This contains tests of particular features of the C compiler, using 5544 the more modern 'dg' harness. Correctness tests for various 5545 compiler features should go here if possible. 5546 5547 Magic comments determine whether the file is preprocessed, 5548 compiled, linked or run. In these tests, error and warning message 5549 texts are compared against expected texts or regular expressions 5550 given in comments. These tests are run with the options '-ansi 5551 -pedantic' unless other options are given in the test. Except as 5552 noted below they are not run with multiple optimization options. 5553'gcc.dg/compat' 5554 This subdirectory contains tests for binary compatibility using 5555 'lib/compat.exp', which in turn uses the language-independent 5556 support (*note Support for testing binary compatibility: compat 5557 Testing.). 5558'gcc.dg/cpp' 5559 This subdirectory contains tests of the preprocessor. 5560'gcc.dg/debug' 5561 This subdirectory contains tests for debug formats. Tests in this 5562 subdirectory are run for each debug format that the compiler 5563 supports. 5564'gcc.dg/format' 5565 This subdirectory contains tests of the '-Wformat' format checking. 5566 Tests in this directory are run with and without '-DWIDE'. 5567'gcc.dg/noncompile' 5568 This subdirectory contains tests of code that should not compile 5569 and does not need any special compilation options. They are run 5570 with multiple optimization options, since sometimes invalid code 5571 crashes the compiler with optimization. 5572'gcc.dg/special' 5573 FIXME: describe this. 5574 5575'gcc.c-torture' 5576 This contains particular code fragments which have historically 5577 broken easily. These tests are run with multiple optimization 5578 options, so tests for features which only break at some 5579 optimization levels belong here. This also contains tests to check 5580 that certain optimizations occur. It might be worthwhile to 5581 separate the correctness tests cleanly from the code quality tests, 5582 but it hasn't been done yet. 5583 5584'gcc.c-torture/compat' 5585 FIXME: describe this. 5586 5587 This directory should probably not be used for new tests. 5588'gcc.c-torture/compile' 5589 This testsuite contains test cases that should compile, but do not 5590 need to link or run. These test cases are compiled with several 5591 different combinations of optimization options. All warnings are 5592 disabled for these test cases, so this directory is not suitable if 5593 you wish to test for the presence or absence of compiler warnings. 5594 While special options can be set, and tests disabled on specific 5595 platforms, by the use of '.x' files, mostly these test cases should 5596 not contain platform dependencies. FIXME: discuss how defines such 5597 as 'NO_LABEL_VALUES' and 'STACK_SIZE' are used. 5598'gcc.c-torture/execute' 5599 This testsuite contains test cases that should compile, link and 5600 run; otherwise the same comments as for 'gcc.c-torture/compile' 5601 apply. 5602'gcc.c-torture/execute/ieee' 5603 This contains tests which are specific to IEEE floating point. 5604'gcc.c-torture/unsorted' 5605 FIXME: describe this. 5606 5607 This directory should probably not be used for new tests. 5608'gcc.misc-tests' 5609 This directory contains C tests that require special handling. 5610 Some of these tests have individual expect files, and others share 5611 special-purpose expect files: 5612 5613 'bprob*.c' 5614 Test '-fbranch-probabilities' using 5615 'gcc.misc-tests/bprob.exp', which in turn uses the generic, 5616 language-independent framework (*note Support for testing 5617 profile-directed optimizations: profopt Testing.). 5618 5619 'gcov*.c' 5620 Test 'gcov' output using 'gcov.exp', which in turn uses the 5621 language-independent support (*note Support for testing gcov: 5622 gcov Testing.). 5623 5624 'i386-pf-*.c' 5625 Test i386-specific support for data prefetch using 5626 'i386-prefetch.exp'. 5627 5628'gcc.test-framework' 5629 'dg-*.c' 5630 Test the testsuite itself using 5631 'gcc.test-framework/test-framework.exp'. 5632 5633 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test 5634cases and magic comments more. 5635 5636 5637File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites 5638 56397.5 The Java library testsuites. 5640================================ 5641 5642Runtime tests are executed via 'make check' in the 5643'TARGET/libjava/testsuite' directory in the build tree. Additional 5644runtime tests can be checked into this testsuite. 5645 5646 Regression testing of the core packages in libgcj is also covered by 5647the Mauve testsuite. The Mauve Project develops tests for the Java 5648Class Libraries. These tests are run as part of libgcj testing by 5649placing the Mauve tree within the libjava testsuite sources at 5650'libjava/testsuite/libjava.mauve/mauve', or by specifying the location 5651of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'. 5652 5653 To detect regressions, a mechanism in 'mauve.exp' compares the failures 5654for a test run against the list of expected failures in 5655'libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 5656Update this file when adding new failing tests to Mauve, or when fixing 5657bugs in libgcj that had caused Mauve test failures. 5658 5659 We encourage developers to contribute test cases to Mauve. 5660 5661 5662File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites 5663 56647.6 Support for testing link-time optimizations 5665=============================================== 5666 5667Tests for link-time optimizations usually require multiple source files 5668that are compiled separately, perhaps with different sets of options. 5669There are several special-purpose test directives used for these tests. 5670 5671'{ dg-lto-do DO-WHAT-KEYWORD }' 5672 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 5673 is executed. It is one of: 5674 5675 'assemble' 5676 Compile with '-c' to produce a relocatable object file. 5677 'link' 5678 Compile, assemble, and link to produce an executable file. 5679 'run' 5680 Produce and run an executable file, which is expected to 5681 return an exit code of 0. 5682 5683 The default is 'assemble'. That can be overridden for a set of 5684 tests by redefining 'dg-do-what-default' within the '.exp' file for 5685 those tests. 5686 5687 Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target' 5688 or 'xfail' list. Use 'dg-skip-if', 'dg-xfail-if', or 5689 'dg-xfail-run-if'. 5690 5691'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 5692 This directive provides a list of one or more sets of compiler 5693 options to override LTO_OPTIONS. Each test will be compiled and 5694 run with each of these sets of options. 5695 5696'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}' 5697 This directive adds OPTIONS to the linker options used. 5698 5699'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}' 5700 This directive removes OPTIONS from the set of linker options used. 5701 5702 5703File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 5704 57057.7 Support for testing 'gcov' 5706============================== 5707 5708Language-independent support for testing 'gcov', and for checking that 5709branch profiling produces expected values, is provided by the expect 5710file 'lib/gcov.exp'. 'gcov' tests also rely on procedures in 5711'lib/gcc-dg.exp' to compile and run the test program. A typical 'gcov' 5712test contains the following DejaGnu commands within comments: 5713 5714 { dg-options "-fprofile-arcs -ftest-coverage" } 5715 { dg-do run { target native } } 5716 { dg-final { run-gcov sourcefile } } 5717 5718 Checks of 'gcov' output can include line counts, branch percentages, 5719and call return percentages. All of these checks are requested via 5720commands that appear in comments in the test's source file. Commands to 5721check line counts are processed by default. Commands to check branch 5722percentages and call return percentages are processed if the 'run-gcov' 5723command has arguments 'branches' or 'calls', respectively. For example, 5724the following specifies checking both, as well as passing '-b' to 5725'gcov': 5726 5727 { dg-final { run-gcov branches calls { -b sourcefile } } } 5728 5729 A line count command appears within a comment on the source line that 5730is expected to get the specified count and has the form 'count(CNT)'. A 5731test should only check line counts for lines that will get the same 5732count for any architecture. 5733 5734 Commands to check branch percentages ('branch') and call return 5735percentages ('returns') are very similar to each other. A beginning 5736command appears on or before the first of a range of lines that will 5737report the percentage, and the ending command follows that range of 5738lines. The beginning command can include a list of percentages, all of 5739which are expected to be found within the range. A range is terminated 5740by the next command of the same kind. A command 'branch(end)' or 5741'returns(end)' marks the end of a range without starting a new one. For 5742example: 5743 5744 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 5745 /* branch(end) */ 5746 foo (i, j); 5747 5748 For a call return percentage, the value specified is the percentage of 5749calls reported to return. For a branch percentage, the value is either 5750the expected percentage or 100 minus that value, since the direction of 5751a branch can differ depending on the target or the optimization level. 5752 5753 Not all branches and calls need to be checked. A test should not check 5754for branches that might be optimized away or replaced with predicated 5755instructions. Don't check for calls inserted by the compiler or ones 5756that might be inlined or optimized away. 5757 5758 A single test can check for combinations of line counts, branch 5759percentages, and call return percentages. The command to check a line 5760count must appear on the line that will report that count, but commands 5761to check branch percentages and call return percentages can bracket the 5762lines that report them. 5763 5764 5765File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 5766 57677.8 Support for testing profile-directed optimizations 5768====================================================== 5769 5770The file 'profopt.exp' provides language-independent support for 5771checking correct execution of a test built with profile-directed 5772optimization. This testing requires that a test program be built and 5773executed twice. The first time it is compiled to generate profile data, 5774and the second time it is compiled to use the data that was generated 5775during the first execution. The second execution is to verify that the 5776test produces the expected results. 5777 5778 To check that the optimization actually generated better code, a test 5779can be built and run a third time with normal optimizations to verify 5780that the performance is better with the profile-directed optimizations. 5781'profopt.exp' has the beginnings of this kind of support. 5782 5783 'profopt.exp' provides generic support for profile-directed 5784optimizations. Each set of tests that uses it provides information 5785about a specific optimization: 5786 5787'tool' 5788 tool being tested, e.g., 'gcc' 5789 5790'profile_option' 5791 options used to generate profile data 5792 5793'feedback_option' 5794 options used to optimize using that profile data 5795 5796'prof_ext' 5797 suffix of profile data files 5798 5799'PROFOPT_OPTIONS' 5800 list of options with which to run each test, similar to the lists 5801 for torture tests 5802 5803'{ dg-final-generate { LOCAL-DIRECTIVE } }' 5804 This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is 5805 run after the generation of profile data. 5806 5807'{ dg-final-use { LOCAL-DIRECTIVE } }' 5808 The LOCAL-DIRECTIVE is run after the profile data have been used. 5809 5810 5811File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 5812 58137.9 Support for testing binary compatibility 5814============================================ 5815 5816The file 'compat.exp' provides language-independent support for binary 5817compatibility testing. It supports testing interoperability of two 5818compilers that follow the same ABI, or of multiple sets of compiler 5819options that should not affect binary compatibility. It is intended to 5820be used for testsuites that complement ABI testsuites. 5821 5822 A test supported by this framework has three parts, each in a separate 5823source file: a main program and two pieces that interact with each other 5824to split up the functionality being tested. 5825 5826'TESTNAME_main.SUFFIX' 5827 Contains the main program, which calls a function in file 5828 'TESTNAME_x.SUFFIX'. 5829 5830'TESTNAME_x.SUFFIX' 5831 Contains at least one call to a function in 'TESTNAME_y.SUFFIX'. 5832 5833'TESTNAME_y.SUFFIX' 5834 Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'. 5835 5836 Within each test, the main program and one functional piece are 5837compiled by the GCC under test. The other piece can be compiled by an 5838alternate compiler. If no alternate compiler is specified, then all 5839three source files are all compiled by the GCC under test. You can 5840specify pairs of sets of compiler options. The first element of such a 5841pair specifies options used with the GCC under test, and the second 5842element of the pair specifies options used with the alternate compiler. 5843Each test is compiled with each pair of options. 5844 5845 'compat.exp' defines default pairs of compiler options. These can be 5846overridden by defining the environment variable 'COMPAT_OPTIONS' as: 5847 5848 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 5849 ...[list {TSTN} {ALTN}]]" 5850 5851 where TSTI and ALTI are lists of options, with TSTI used by the 5852compiler under test and ALTI used by the alternate compiler. For 5853example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 5854the test is first built with '-g -O0' by the compiler under test and 5855with '-O3' by the alternate compiler. The test is built a second time 5856using '-fpic' by the compiler under test and '-fPIC -O2' by the 5857alternate compiler. 5858 5859 An alternate compiler is specified by defining an environment variable 5860to be the full pathname of an installed compiler; for C define 5861'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'. These 5862will be written to the 'site.exp' file used by DejaGnu. The default is 5863to build each test with the compiler under test using the first of each 5864pair of compiler options from 'COMPAT_OPTIONS'. When 5865'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is 5866built using the compiler under test but with combinations of the options 5867from 'COMPAT_OPTIONS'. 5868 5869 To run only the C++ compatibility suite using the compiler under test 5870and another version of GCC using specific compiler options, do the 5871following from 'OBJDIR/gcc': 5872 5873 rm site.exp 5874 make -k \ 5875 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 5876 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 5877 check-c++ \ 5878 RUNTESTFLAGS="compat.exp" 5879 5880 A test that fails when the source files are compiled with different 5881compilers, but passes when the files are compiled with the same 5882compiler, demonstrates incompatibility of the generated code or runtime 5883support. A test that fails for the alternate compiler but passes for 5884the compiler under test probably tests for a bug that was fixed in the 5885compiler under test but is present in the alternate compiler. 5886 5887 The binary compatibility tests support a small number of test framework 5888commands that appear within comments in a test file. 5889 5890'dg-require-*' 5891 These commands can be used in 'TESTNAME_main.SUFFIX' to skip the 5892 test if specific support is not available on the target. 5893 5894'dg-options' 5895 The specified options are used for compiling this particular source 5896 file, appended to the options from 'COMPAT_OPTIONS'. When this 5897 command appears in 'TESTNAME_main.SUFFIX' the options are also used 5898 to link the test program. 5899 5900'dg-xfail-if' 5901 This command can be used in a secondary source file to specify that 5902 compilation is expected to fail for particular options on 5903 particular targets. 5904 5905 5906File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites 5907 59087.10 Support for torture testing using multiple options 5909======================================================= 5910 5911Throughout the compiler testsuite there are several directories whose 5912tests are run multiple times, each with a different set of options. 5913These are known as torture tests. 'lib/torture-options.exp' defines 5914procedures to set up these lists: 5915 5916'torture-init' 5917 Initialize use of torture lists. 5918'set-torture-options' 5919 Set lists of torture options to use for tests with and without 5920 loops. Optionally combine a set of torture options with a set of 5921 other options, as is done with Objective-C runtime options. 5922'torture-finish' 5923 Finalize use of torture lists. 5924 5925 The '.exp' file for a set of tests that use torture options must 5926include calls to these three procedures if: 5927 5928 * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 5929 5930 * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL 5931 is 'c', 'fortran', or 'objc'. 5932 5933 * It calls 'dg-pch'. 5934 5935 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to 5936call the torture procedures if the tests should use the list in 5937DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'. 5938 5939 Most uses of torture options can override the default lists by defining 5940TORTURE_OPTIONS or add to the default list by defining 5941ADDITIONAL_TORTURE_OPTIONS. Define these in a '.dejagnurc' file or add 5942them to the 'site.exp' file; for example 5943 5944 set ADDITIONAL_TORTURE_OPTIONS [list \ 5945 { -O2 -ftree-loop-linear } \ 5946 { -O2 -fpeel-loops } ] 5947 5948 5949File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 5950 59518 Option specification files 5952**************************** 5953 5954Most GCC command-line options are described by special option definition 5955files, the names of which conventionally end in '.opt'. This chapter 5956describes the format of these files. 5957 5958* Menu: 5959 5960* Option file format:: The general layout of the files 5961* Option properties:: Supported option properties 5962 5963 5964File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 5965 59668.1 Option file format 5967====================== 5968 5969Option files are a simple list of records in which each field occupies 5970its own line and in which the records themselves are separated by blank 5971lines. Comments may appear on their own line anywhere within the file 5972and are preceded by semicolons. Whitespace is allowed before the 5973semicolon. 5974 5975 The files can contain the following types of record: 5976 5977 * A language definition record. These records have two fields: the 5978 string 'Language' and the name of the language. Once a language 5979 has been declared in this way, it can be used as an option 5980 property. *Note Option properties::. 5981 5982 * A target specific save record to save additional information. 5983 These records have two fields: the string 'TargetSave', and a 5984 declaration type to go in the 'cl_target_option' structure. 5985 5986 * A variable record to define a variable used to store option 5987 information. These records have two fields: the string 'Variable', 5988 and a declaration of the type and name of the variable, optionally 5989 with an initializer (but without any trailing ';'). These records 5990 may be used for variables used for many options where declaring the 5991 initializer in a single option definition record, or duplicating it 5992 in many records, would be inappropriate, or for variables set in 5993 option handlers rather than referenced by 'Var' properties. 5994 5995 * A variable record to define a variable used to store option 5996 information. These records have two fields: the string 5997 'TargetVariable', and a declaration of the type and name of the 5998 variable, optionally with an initializer (but without any trailing 5999 ';'). 'TargetVariable' is a combination of 'Variable' and 6000 'TargetSave' records in that the variable is defined in the 6001 'gcc_options' structure, but these variables are also stored in the 6002 'cl_target_option' structure. The variables are saved in the 6003 target save code and restored in the target restore code. 6004 6005 * A variable record to record any additional files that the 6006 'options.h' file should include. This is useful to provide 6007 enumeration or structure definitions needed for target variables. 6008 These records have two fields: the string 'HeaderInclude' and the 6009 name of the include file. 6010 6011 * A variable record to record any additional files that the 6012 'options.c' or 'options-save.c' file should include. This is 6013 useful to provide inline functions needed for target variables 6014 and/or '#ifdef' sequences to properly set up the initialization. 6015 These records have two fields: the string 'SourceInclude' and the 6016 name of the include file. 6017 6018 * An enumeration record to define a set of strings that may be used 6019 as arguments to an option or options. These records have three 6020 fields: the string 'Enum', a space-separated list of properties and 6021 help text used to describe the set of strings in '--help' output. 6022 Properties use the same format as option properties; the following 6023 are valid: 6024 'Name(NAME)' 6025 This property is required; NAME must be a name (suitable for 6026 use in C identifiers) used to identify the set of strings in 6027 'Enum' option properties. 6028 6029 'Type(TYPE)' 6030 This property is required; TYPE is the C type for variables 6031 set by options using this enumeration together with 'Var'. 6032 6033 'UnknownError(MESSAGE)' 6034 The message MESSAGE will be used as an error message if the 6035 argument is invalid; for enumerations without 'UnknownError', 6036 a generic error message is used. MESSAGE should contain a 6037 single '%qs' format, which will be used to format the invalid 6038 argument. 6039 6040 * An enumeration value record to define one of the strings in a set 6041 given in an 'Enum' record. These records have two fields: the 6042 string 'EnumValue' and a space-separated list of properties. 6043 Properties use the same format as option properties; the following 6044 are valid: 6045 'Enum(NAME)' 6046 This property is required; NAME says which 'Enum' record this 6047 'EnumValue' record corresponds to. 6048 6049 'String(STRING)' 6050 This property is required; STRING is the string option 6051 argument being described by this record. 6052 6053 'Value(VALUE)' 6054 This property is required; it says what value (representable 6055 as 'int') should be used for the given string. 6056 6057 'Canonical' 6058 This property is optional. If present, it says the present 6059 string is the canonical one among all those with the given 6060 value. Other strings yielding that value will be mapped to 6061 this one so specs do not need to handle them. 6062 6063 'DriverOnly' 6064 This property is optional. If present, the present string 6065 will only be accepted by the driver. This is used for cases 6066 such as '-march=native' that are processed by the driver so 6067 that 'gcc -v' shows how the options chosen depended on the 6068 system on which the compiler was run. 6069 6070 * An option definition record. These records have the following 6071 fields: 6072 1. the name of the option, with the leading "-" removed 6073 2. a space-separated list of option properties (*note Option 6074 properties::) 6075 3. the help text to use for '--help' (omitted if the second field 6076 contains the 'Undocumented' property). 6077 6078 By default, all options beginning with "f", "W" or "m" are 6079 implicitly assumed to take a "no-" form. This form should not be 6080 listed separately. If an option beginning with one of these 6081 letters does not have a "no-" form, you can use the 6082 'RejectNegative' property to reject it. 6083 6084 The help text is automatically line-wrapped before being displayed. 6085 Normally the name of the option is printed on the left-hand side of 6086 the output and the help text is printed on the right. However, if 6087 the help text contains a tab character, the text to the left of the 6088 tab is used instead of the option's name and the text to the right 6089 of the tab forms the help text. This allows you to elaborate on 6090 what type of argument the option takes. 6091 6092 * A target mask record. These records have one field of the form 6093 'Mask(X)'. The options-processing script will automatically 6094 allocate a bit in 'target_flags' (*note Run-time Target::) for each 6095 mask name X and set the macro 'MASK_X' to the appropriate bitmask. 6096 It will also declare a 'TARGET_X' macro that has the value 1 when 6097 bit 'MASK_X' is set and 0 otherwise. 6098 6099 They are primarily intended to declare target masks that are not 6100 associated with user options, either because these masks represent 6101 internal switches or because the options are not available on all 6102 configurations and yet the masks always need to be defined. 6103 6104 6105File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 6106 61078.2 Option properties 6108===================== 6109 6110The second field of an option record can specify any of the following 6111properties. When an option takes an argument, it is enclosed in 6112parentheses following the option property name. The parser that handles 6113option files is quite simplistic, and will be tricked by any nested 6114parentheses within the argument text itself; in this case, the entire 6115option argument can be wrapped in curly braces within the parentheses to 6116demarcate it, e.g.: 6117 6118 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 6119 6120'Common' 6121 The option is available for all languages and targets. 6122 6123'Target' 6124 The option is available for all languages but is target-specific. 6125 6126'Driver' 6127 The option is handled by the compiler driver using code not shared 6128 with the compilers proper ('cc1' etc.). 6129 6130'LANGUAGE' 6131 The option is available when compiling for the given language. 6132 6133 It is possible to specify several different languages for the same 6134 option. Each LANGUAGE must have been declared by an earlier 6135 'Language' record. *Note Option file format::. 6136 6137'RejectDriver' 6138 The option is only handled by the compilers proper ('cc1' etc.) and 6139 should not be accepted by the driver. 6140 6141'RejectNegative' 6142 The option does not have a "no-" form. All options beginning with 6143 "f", "W" or "m" are assumed to have a "no-" form unless this 6144 property is used. 6145 6146'Negative(OTHERNAME)' 6147 The option will turn off another option OTHERNAME, which is the 6148 option name with the leading "-" removed. This chain action will 6149 propagate through the 'Negative' property of the option to be 6150 turned off. 6151 6152 As a consequence, if you have a group of mutually-exclusive 6153 options, their 'Negative' properties should form a circular chain. 6154 For example, if options '-A', '-B' and '-C' are mutually exclusive, 6155 their respective 'Negative' properties should be 'Negative(B)', 6156 'Negative(C)' and 'Negative(A)'. 6157 6158'Joined' 6159'Separate' 6160 The option takes a mandatory argument. 'Joined' indicates that the 6161 option and argument can be included in the same 'argv' entry (as 6162 with '-mflush-func=NAME', for example). 'Separate' indicates that 6163 the option and argument can be separate 'argv' entries (as with 6164 '-o'). An option is allowed to have both of these properties. 6165 6166'JoinedOrMissing' 6167 The option takes an optional argument. If the argument is given, 6168 it will be part of the same 'argv' entry as the option itself. 6169 6170 This property cannot be used alongside 'Joined' or 'Separate'. 6171 6172'MissingArgError(MESSAGE)' 6173 For an option marked 'Joined' or 'Separate', the message MESSAGE 6174 will be used as an error message if the mandatory argument is 6175 missing; for options without 'MissingArgError', a generic error 6176 message is used. MESSAGE should contain a single '%qs' format, 6177 which will be used to format the name of the option passed. 6178 6179'Args(N)' 6180 For an option marked 'Separate', indicate that it takes N 6181 arguments. The default is 1. 6182 6183'UInteger' 6184 The option's argument is a non-negative integer. The option parser 6185 will check and convert the argument before passing it to the 6186 relevant option handler. 'UInteger' should also be used on options 6187 like '-falign-loops' where both '-falign-loops' and 6188 '-falign-loops'=N are supported to make sure the saved options are 6189 given a full integer. 6190 6191'ToLower' 6192 The option's argument should be converted to lowercase as part of 6193 putting it in canonical form, and before comparing with the strings 6194 indicated by any 'Enum' property. 6195 6196'NoDriverArg' 6197 For an option marked 'Separate', the option only takes an argument 6198 in the compiler proper, not in the driver. This is for 6199 compatibility with existing options that are used both directly and 6200 via '-Wp,'; new options should not have this property. 6201 6202'Var(VAR)' 6203 The state of this option should be stored in variable VAR (actually 6204 a macro for 'global_options.x_VAR'). The way that the state is 6205 stored depends on the type of option: 6206 6207 * If the option uses the 'Mask' or 'InverseMask' properties, VAR 6208 is the integer variable that contains the mask. 6209 6210 * If the option is a normal on/off switch, VAR is an integer 6211 variable that is nonzero when the option is enabled. The 6212 options parser will set the variable to 1 when the positive 6213 form of the option is used and 0 when the "no-" form is used. 6214 6215 * If the option takes an argument and has the 'UInteger' 6216 property, VAR is an integer variable that stores the value of 6217 the argument. 6218 6219 * If the option takes an argument and has the 'Enum' property, 6220 VAR is a variable (type given in the 'Type' property of the 6221 'Enum' record whose 'Name' property has the same argument as 6222 the 'Enum' property of this option) that stores the value of 6223 the argument. 6224 6225 * If the option has the 'Defer' property, VAR is a pointer to a 6226 'VEC(cl_deferred_option,heap)' that stores the option for 6227 later processing. (VAR is declared with type 'void *' and 6228 needs to be cast to 'VEC(cl_deferred_option,heap)' before 6229 use.) 6230 6231 * Otherwise, if the option takes an argument, VAR is a pointer 6232 to the argument string. The pointer will be null if the 6233 argument is optional and wasn't given. 6234 6235 The option-processing script will usually zero-initialize VAR. You 6236 can modify this behavior using 'Init'. 6237 6238'Var(VAR, SET)' 6239 The option controls an integer variable VAR and is active when VAR 6240 equals SET. The option parser will set VAR to SET when the 6241 positive form of the option is used and '!SET' when the "no-" form 6242 is used. 6243 6244 VAR is declared in the same way as for the single-argument form 6245 described above. 6246 6247'Init(VALUE)' 6248 The variable specified by the 'Var' property should be statically 6249 initialized to VALUE. If more than one option using the same 6250 variable specifies 'Init', all must specify the same initializer. 6251 6252'Mask(NAME)' 6253 The option is associated with a bit in the 'target_flags' variable 6254 (*note Run-time Target::) and is active when that bit is set. You 6255 may also specify 'Var' to select a variable other than 6256 'target_flags'. 6257 6258 The options-processing script will automatically allocate a unique 6259 bit for the option. If the option is attached to 'target_flags', 6260 the script will set the macro 'MASK_NAME' to the appropriate 6261 bitmask. It will also declare a 'TARGET_NAME' macro that has the 6262 value 1 when the option is active and 0 otherwise. If you use 6263 'Var' to attach the option to a different variable, the bitmask 6264 macro with be called 'OPTION_MASK_NAME'. 6265 6266'InverseMask(OTHERNAME)' 6267'InverseMask(OTHERNAME, THISNAME)' 6268 The option is the inverse of another option that has the 6269 'Mask(OTHERNAME)' property. If THISNAME is given, the 6270 options-processing script will declare a 'TARGET_THISNAME' macro 6271 that is 1 when the option is active and 0 otherwise. 6272 6273'Enum(NAME)' 6274 The option's argument is a string from the set of strings 6275 associated with the corresponding 'Enum' record. The string is 6276 checked and converted to the integer specified in the corresponding 6277 'EnumValue' record before being passed to option handlers. 6278 6279'Defer' 6280 The option should be stored in a vector, specified with 'Var', for 6281 later processing. 6282 6283'Alias(OPT)' 6284'Alias(OPT, ARG)' 6285'Alias(OPT, POSARG, NEGARG)' 6286 The option is an alias for '-OPT' (or the negative form of that 6287 option, depending on 'NegativeAlias'). In the first form, any 6288 argument passed to the alias is considered to be passed to '-OPT', 6289 and '-OPT' is considered to be negated if the alias is used in 6290 negated form. In the second form, the alias may not be negated or 6291 have an argument, and POSARG is considered to be passed as an 6292 argument to '-OPT'. In the third form, the alias may not have an 6293 argument, if the alias is used in the positive form then POSARG is 6294 considered to be passed to '-OPT', and if the alias is used in the 6295 negative form then NEGARG is considered to be passed to '-OPT'. 6296 6297 Aliases should not specify 'Var' or 'Mask' or 'UInteger'. Aliases 6298 should normally specify the same languages as the target of the 6299 alias; the flags on the target will be used to determine any 6300 diagnostic for use of an option for the wrong language, while those 6301 on the alias will be used to identify what command-line text is the 6302 option and what text is any argument to that option. 6303 6304 When an 'Alias' definition is used for an option, driver specs do 6305 not need to handle it and no 'OPT_' enumeration value is defined 6306 for it; only the canonical form of the option will be seen in those 6307 places. 6308 6309'NegativeAlias' 6310 For an option marked with 'Alias(OPT)', the option is considered to 6311 be an alias for the positive form of '-OPT' if negated and for the 6312 negative form of '-OPT' if not negated. 'NegativeAlias' may not be 6313 used with the forms of 'Alias' taking more than one argument. 6314 6315'Ignore' 6316 This option is ignored apart from printing any warning specified 6317 using 'Warn'. The option will not be seen by specs and no 'OPT_' 6318 enumeration value is defined for it. 6319 6320'SeparateAlias' 6321 For an option marked with 'Joined', 'Separate' and 'Alias', the 6322 option only acts as an alias when passed a separate argument; with 6323 a joined argument it acts as a normal option, with an 'OPT_' 6324 enumeration value. This is for compatibility with the Java '-d' 6325 option and should not be used for new options. 6326 6327'Warn(MESSAGE)' 6328 If this option is used, output the warning MESSAGE. MESSAGE is a 6329 format string, either taking a single operand with a '%qs' format 6330 which is the option name, or not taking any operands, which is 6331 passed to the 'warning' function. If an alias is marked 'Warn', 6332 the target of the alias must not also be marked 'Warn'. 6333 6334'Report' 6335 The state of the option should be printed by '-fverbose-asm'. 6336 6337'Warning' 6338 This is a warning option and should be shown as such in '--help' 6339 output. This flag does not currently affect anything other than 6340 '--help'. 6341 6342'Optimization' 6343 This is an optimization option. It should be shown as such in 6344 '--help' output, and any associated variable named using 'Var' 6345 should be saved and restored when the optimization level is changed 6346 with 'optimize' attributes. 6347 6348'Undocumented' 6349 The option is deliberately missing documentation and should not be 6350 included in the '--help' output. 6351 6352'Condition(COND)' 6353 The option should only be accepted if preprocessor condition COND 6354 is true. Note that any C declarations associated with the option 6355 will be present even if COND is false; COND simply controls whether 6356 the option is accepted and whether it is printed in the '--help' 6357 output. 6358 6359'Save' 6360 Build the 'cl_target_option' structure to hold a copy of the 6361 option, add the functions 'cl_target_option_save' and 6362 'cl_target_option_restore' to save and restore the options. 6363 6364'SetByCombined' 6365 The option may also be set by a combined option such as 6366 '-ffast-math'. This causes the 'gcc_options' struct to have a 6367 field 'frontend_set_NAME', where 'NAME' is the name of the field 6368 holding the value of this option (without the leading 'x_'). This 6369 gives the front end a way to indicate that the value has been set 6370 explicitly and should not be changed by the combined option. For 6371 example, some front ends use this to prevent '-ffast-math' and 6372 '-fno-fast-math' from changing the value of '-fmath-errno' for 6373 languages that do not use 'errno'. 6374 6375'EnabledBy(OPT)' 6376'EnabledBy(OPT || OPT2)' 6377'EnabledBy(OPT && OPT2)' 6378 If not explicitly set, the option is set to the value of '-OPT'; 6379 multiple options can be given, separated by '||'. The third form 6380 using '&&' specifies that the option is only set if both OPT and 6381 OPT2 are set. 6382 6383'LangEnabledBy(LANGUAGE, OPT)' 6384'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)' 6385 When compiling for the given language, the option is set to the 6386 value of '-OPT', if not explicitly set. OPT can be also a list of 6387 '||' separated options. In the second form, if OPT is used in the 6388 positive form then POSARG is considered to be passed to the option, 6389 and if OPT is used in the negative form then NEGARG is considered 6390 to be passed to the option. It is possible to specify several 6391 different languages. Each LANGUAGE must have been declared by an 6392 earlier 'Language' record. *Note Option file format::. 6393 6394'NoDWARFRecord' 6395 The option is omitted from the producer string written by 6396 '-grecord-gcc-switches'. 6397 6398'PchIgnore' 6399 Even if this is a target option, this option will not be recorded / 6400 compared to determine if a precompiled header file matches. 6401 6402'CPP(VAR)' 6403 The state of this option should be kept in sync with the 6404 preprocessor option VAR. If this property is set, then properties 6405 'Var' and 'Init' must be set as well. 6406 6407'CppReason(CPP_W_ENUM)' 6408 This warning option corresponds to 'cpplib.h' warning reason code 6409 CPP_W_ENUM. This should only be used for warning options of the 6410 C-family front-ends. 6411 6412 6413File: gccint.info, Node: Passes, Next: GENERIC, Prev: Options, Up: Top 6414 64159 Passes and Files of the Compiler 6416********************************** 6417 6418This chapter is dedicated to giving an overview of the optimization and 6419code generation passes of the compiler. In the process, it describes 6420some of the language front end interface, though this description is no 6421where near complete. 6422 6423* Menu: 6424 6425* Parsing pass:: The language front end turns text into bits. 6426* Cilk Plus Transformation:: Transform Cilk Plus Code to equivalent C/C++. 6427* Gimplification pass:: The bits are turned into something we can optimize. 6428* Pass manager:: Sequencing the optimization passes. 6429* Tree SSA passes:: Optimizations on a high-level representation. 6430* RTL passes:: Optimizations on a low-level representation. 6431* Optimization info:: Dumping optimization information from passes. 6432 6433 6434File: gccint.info, Node: Parsing pass, Next: Cilk Plus Transformation, Up: Passes 6435 64369.1 Parsing pass 6437================ 6438 6439The language front end is invoked only once, via 6440'lang_hooks.parse_file', to parse the entire input. The language front 6441end may use any intermediate language representation deemed appropriate. 6442The C front end uses GENERIC trees (*note GENERIC::), plus a double 6443handful of language specific tree codes defined in 'c-common.def'. The 6444Fortran front end uses a completely different private representation. 6445 6446 At some point the front end must translate the representation used in 6447the front end to a representation understood by the language-independent 6448portions of the compiler. Current practice takes one of two forms. The 6449C front end manually invokes the gimplifier (*note GIMPLE::) on each 6450function, and uses the gimplifier callbacks to convert the 6451language-specific tree nodes directly to GIMPLE before passing the 6452function off to be compiled. The Fortran front end converts from a 6453private representation to GENERIC, which is later lowered to GIMPLE when 6454the function is compiled. Which route to choose probably depends on how 6455well GENERIC (plus extensions) can be made to match up with the source 6456language and necessary parsing data structures. 6457 6458 BUG: Gimplification must occur before nested function lowering, and 6459nested function lowering must be done by the front end before passing 6460the data off to cgraph. 6461 6462 TODO: Cgraph should control nested function lowering. It would only be 6463invoked when it is certain that the outer-most function is used. 6464 6465 TODO: Cgraph needs a gimplify_function callback. It should be invoked 6466when (1) it is certain that the function is used, (2) warning flags 6467specified by the user require some amount of compilation in order to 6468honor, (3) the language indicates that semantic analysis is not complete 6469until gimplification occurs. Hum... this sounds overly complicated. 6470Perhaps we should just have the front end gimplify always; in most cases 6471it's only one function call. 6472 6473 The front end needs to pass all function definitions and top level 6474declarations off to the middle-end so that they can be compiled and 6475emitted to the object file. For a simple procedural language, it is 6476usually most convenient to do this as each top level declaration or 6477definition is seen. There is also a distinction to be made between 6478generating functional code and generating complete debug information. 6479The only thing that is absolutely required for functional code is that 6480function and data _definitions_ be passed to the middle-end. For 6481complete debug information, function, data and type declarations should 6482all be passed as well. 6483 6484 In any case, the front end needs each complete top-level function or 6485data declaration, and each data definition should be passed to 6486'rest_of_decl_compilation'. Each complete type definition should be 6487passed to 'rest_of_type_compilation'. Each function definition should 6488be passed to 'cgraph_finalize_function'. 6489 6490 TODO: I know rest_of_compilation currently has all sorts of RTL 6491generation semantics. I plan to move all code generation bits (both 6492Tree and RTL) to compile_function. Should we hide cgraph from the front 6493ends and move back to rest_of_compilation as the official interface? 6494Possibly we should rename all three interfaces such that the names match 6495in some meaningful way and that is more descriptive than "rest_of". 6496 6497 The middle-end will, at its option, emit the function and data 6498definitions immediately or queue them for later processing. 6499 6500 6501File: gccint.info, Node: Cilk Plus Transformation, Next: Gimplification pass, Prev: Parsing pass, Up: Passes 6502 65039.2 Cilk Plus Transformation 6504============================ 6505 6506If Cilk Plus generation (flag '-fcilkplus') is enabled, all the Cilk 6507Plus code is transformed into equivalent C and C++ functions. Majority 6508of this transformation occurs toward the end of the parsing and right 6509before the gimplification pass. 6510 6511 These are the major components to the Cilk Plus language extension: 6512 * Array Notations: During parsing phase, all the array notation 6513 specific information is stored in 'ARRAY_NOTATION_REF' tree using 6514 the function 'c_parser_array_notation'. During the end of parsing, 6515 we check the entire function to see if there are any array notation 6516 specific code (using the function 'contains_array_notation_expr'). 6517 If this function returns true, then we expand them using either 6518 'expand_array_notation_exprs' or 'build_array_notation_expr'. For 6519 the cases where array notations are inside conditions, they are 6520 transformed using the function 'fix_conditional_array_notations'. 6521 The C language-specific routines are located in 6522 'c/c-array-notation.c' and the equivalent C++ routines are in the 6523 file 'cp/cp-array-notation.c'. Common routines such as functions 6524 to initialize built-in functions are stored in 6525 'array-notation-common.c'. 6526 6527 * Cilk keywords: 6528 * '_Cilk_spawn': The '_Cilk_spawn' keyword is parsed and the 6529 function it contains is marked as a spawning function. The 6530 spawning function is called the spawner. At the end of the 6531 parsing phase, appropriate built-in functions are added to the 6532 spawner that are defined in the Cilk runtime. The appropriate 6533 locations of these functions, and the internal structures are 6534 detailed in 'cilk_init_builtins' in the file 'cilk-common.c'. 6535 The pointers to Cilk functions and fields of internal 6536 structures are described in 'cilk.h'. The built-in functions 6537 are described in 'cilk-builtins.def'. 6538 6539 During gimplification, a new "spawn-helper" function is 6540 created. The spawned function is replaced with a spawn helper 6541 function in the spawner. The spawned function-call is moved 6542 into the spawn helper. The main function that does these 6543 transformations is 'gimplify_cilk_spawn' in 'c-family/cilk.c'. 6544 In the spawn-helper, the gimplification function 6545 'gimplify_call_expr', inserts a function call 6546 '__cilkrts_detach'. This function is expanded by 6547 'builtin_expand_cilk_detach' located in 'c-family/cilk.c'. 6548 6549 * '_Cilk_sync': '_Cilk_sync' is parsed like a keyword. During 6550 gimplification, the function 'gimplify_cilk_sync' in 6551 'c-family/cilk.c', will replace this keyword with a set of 6552 functions that are stored in the Cilk runtime. One of the 6553 internal functions inserted during gimplification, 6554 '__cilkrts_pop_frame' must be expanded by the compiler and is 6555 done by 'builtin_expand_cilk_pop_frame' in 'cilk-common.c'. 6556 6557 Documentation about Cilk Plus and language specification is provided 6558under the "Learn" section in <https://www.cilkplus.org>. It is worth 6559mentioning that the current implementation follows ABI 1.1. 6560 6561 6562File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Cilk Plus Transformation, Up: Passes 6563 65649.3 Gimplification pass 6565======================= 6566 6567"Gimplification" is a whimsical term for the process of converting the 6568intermediate representation of a function into the GIMPLE language 6569(*note GIMPLE::). The term stuck, and so words like "gimplification", 6570"gimplify", "gimplifier" and the like are sprinkled throughout this 6571section of code. 6572 6573 While a front end may certainly choose to generate GIMPLE directly if 6574it chooses, this can be a moderately complex process unless the 6575intermediate language used by the front end is already fairly simple. 6576Usually it is easier to generate GENERIC trees plus extensions and let 6577the language-independent gimplifier do most of the work. 6578 6579 The main entry point to this pass is 'gimplify_function_tree' located 6580in 'gimplify.c'. From here we process the entire function gimplifying 6581each statement in turn. The main workhorse for this pass is 6582'gimplify_expr'. Approximately everything passes through here at least 6583once, and it is from here that we invoke the 'lang_hooks.gimplify_expr' 6584callback. 6585 6586 The callback should examine the expression in question and return 6587'GS_UNHANDLED' if the expression is not a language specific construct 6588that requires attention. Otherwise it should alter the expression in 6589some way to such that forward progress is made toward producing valid 6590GIMPLE. If the callback is certain that the transformation is complete 6591and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'. 6592Otherwise it should return 'GS_OK', which will cause the expression to 6593be processed again. If the callback encounters an error during the 6594transformation (because the front end is relying on the gimplification 6595process to finish semantic checks), it should return 'GS_ERROR'. 6596 6597 6598File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes 6599 66009.4 Pass manager 6601================ 6602 6603The pass manager is located in 'passes.c', 'tree-optimize.c' and 6604'tree-pass.h'. It processes passes as described in 'passes.def'. Its 6605job is to run all of the individual passes in the correct order, and 6606take care of standard bookkeeping that applies to every pass. 6607 6608 The theory of operation is that each pass defines a structure that 6609represents everything we need to know about that pass--when it should be 6610run, how it should be run, what intermediate language form or 6611on-the-side data structures it needs. We register the pass to be run in 6612some particular order, and the pass manager arranges for everything to 6613happen in the correct order. 6614 6615 The actuality doesn't completely live up to the theory at present. 6616Command-line switches and 'timevar_id_t' enumerations must still be 6617defined elsewhere. The pass manager validates constraints but does not 6618attempt to (re-)generate data structures or lower intermediate language 6619form based on the requirements of the next pass. Nevertheless, what is 6620present is useful, and a far sight better than nothing at all. 6621 6622 Each pass should have a unique name. Each pass may have its own dump 6623file (for GCC debugging purposes). Passes with a name starting with a 6624star do not dump anything. Sometimes passes are supposed to share a 6625dump file / option name. To still give these unique names, you can use 6626a prefix that is delimited by a space from the part that is used for the 6627dump file / option name. E.g. When the pass name is "ud dce", the name 6628used for dump file/options is "dce". 6629 6630 TODO: describe the global variables set up by the pass manager, and a 6631brief description of how a new pass should use it. I need to look at 6632what info RTL passes use first... 6633 6634 6635File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 6636 66379.5 Tree SSA passes 6638=================== 6639 6640The following briefly describes the Tree optimization passes that are 6641run after gimplification and what source files they are located in. 6642 6643 * Remove useless statements 6644 6645 This pass is an extremely simple sweep across the gimple code in 6646 which we identify obviously dead code and remove it. Here we do 6647 things like simplify 'if' statements with constant conditions, 6648 remove exception handling constructs surrounding code that 6649 obviously cannot throw, remove lexical bindings that contain no 6650 variables, and other assorted simplistic cleanups. The idea is to 6651 get rid of the obvious stuff quickly rather than wait until later 6652 when it's more work to get rid of it. This pass is located in 6653 'tree-cfg.c' and described by 'pass_remove_useless_stmts'. 6654 6655 * OpenMP lowering 6656 6657 If OpenMP generation ('-fopenmp') is enabled, this pass lowers 6658 OpenMP constructs into GIMPLE. 6659 6660 Lowering of OpenMP constructs involves creating replacement 6661 expressions for local variables that have been mapped using data 6662 sharing clauses, exposing the control flow of most synchronization 6663 directives and adding region markers to facilitate the creation of 6664 the control flow graph. The pass is located in 'omp-low.c' and is 6665 described by 'pass_lower_omp'. 6666 6667 * OpenMP expansion 6668 6669 If OpenMP generation ('-fopenmp') is enabled, this pass expands 6670 parallel regions into their own functions to be invoked by the 6671 thread library. The pass is located in 'omp-low.c' and is 6672 described by 'pass_expand_omp'. 6673 6674 * Lower control flow 6675 6676 This pass flattens 'if' statements ('COND_EXPR') and moves lexical 6677 bindings ('BIND_EXPR') out of line. After this pass, all 'if' 6678 statements will have exactly two 'goto' statements in its 'then' 6679 and 'else' arms. Lexical binding information for each statement 6680 will be found in 'TREE_BLOCK' rather than being inferred from its 6681 position under a 'BIND_EXPR'. This pass is found in 'gimple-low.c' 6682 and is described by 'pass_lower_cf'. 6683 6684 * Lower exception handling control flow 6685 6686 This pass decomposes high-level exception handling constructs 6687 ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that 6688 explicitly represents the control flow involved. After this pass, 6689 'lookup_stmt_eh_region' will return a non-negative number for any 6690 statement that may have EH control flow semantics; examine 6691 'tree_can_throw_internal' or 'tree_can_throw_external' for exact 6692 semantics. Exact control flow may be extracted from 6693 'foreach_reachable_handler'. The EH region nesting tree is defined 6694 in 'except.h' and built in 'except.c'. The lowering pass itself is 6695 in 'tree-eh.c' and is described by 'pass_lower_eh'. 6696 6697 * Build the control flow graph 6698 6699 This pass decomposes a function into basic blocks and creates all 6700 of the edges that connect them. It is located in 'tree-cfg.c' and 6701 is described by 'pass_build_cfg'. 6702 6703 * Find all referenced variables 6704 6705 This pass walks the entire function and collects an array of all 6706 variables referenced in the function, 'referenced_vars'. The index 6707 at which a variable is found in the array is used as a UID for the 6708 variable within this function. This data is needed by the SSA 6709 rewriting routines. The pass is located in 'tree-dfa.c' and is 6710 described by 'pass_referenced_vars'. 6711 6712 * Enter static single assignment form 6713 6714 This pass rewrites the function such that it is in SSA form. After 6715 this pass, all 'is_gimple_reg' variables will be referenced by 6716 'SSA_NAME', and all occurrences of other variables will be 6717 annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been 6718 inserted as necessary for each basic block. This pass is located 6719 in 'tree-ssa.c' and is described by 'pass_build_ssa'. 6720 6721 * Warn for uninitialized variables 6722 6723 This pass scans the function for uses of 'SSA_NAME's that are fed 6724 by default definition. For non-parameter variables, such uses are 6725 uninitialized. The pass is run twice, before and after 6726 optimization (if turned on). In the first pass we only warn for 6727 uses that are positively uninitialized; in the second pass we warn 6728 for uses that are possibly uninitialized. The pass is located in 6729 'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and 6730 'pass_late_warn_uninitialized'. 6731 6732 * Dead code elimination 6733 6734 This pass scans the function for statements without side effects 6735 whose result is unused. It does not do memory life analysis, so 6736 any value that is stored in memory is considered used. The pass is 6737 run multiple times throughout the optimization process. It is 6738 located in 'tree-ssa-dce.c' and is described by 'pass_dce'. 6739 6740 * Dominator optimizations 6741 6742 This pass performs trivial dominator-based copy and constant 6743 propagation, expression simplification, and jump threading. It is 6744 run multiple times throughout the optimization process. It is 6745 located in 'tree-ssa-dom.c' and is described by 'pass_dominator'. 6746 6747 * Forward propagation of single-use variables 6748 6749 This pass attempts to remove redundant computation by substituting 6750 variables that are used once into the expression that uses them and 6751 seeing if the result can be simplified. It is located in 6752 'tree-ssa-forwprop.c' and is described by 'pass_forwprop'. 6753 6754 * Copy Renaming 6755 6756 This pass attempts to change the name of compiler temporaries 6757 involved in copy operations such that SSA->normal can coalesce the 6758 copy away. When compiler temporaries are copies of user variables, 6759 it also renames the compiler temporary to the user variable 6760 resulting in better use of user symbols. It is located in 6761 'tree-ssa-copyrename.c' and is described by 'pass_copyrename'. 6762 6763 * PHI node optimizations 6764 6765 This pass recognizes forms of PHI inputs that can be represented as 6766 conditional expressions and rewrites them into straight line code. 6767 It is located in 'tree-ssa-phiopt.c' and is described by 6768 'pass_phiopt'. 6769 6770 * May-alias optimization 6771 6772 This pass performs a flow sensitive SSA-based points-to analysis. 6773 The resulting may-alias, must-alias, and escape analysis 6774 information is used to promote variables from in-memory addressable 6775 objects to non-aliased variables that can be renamed into SSA form. 6776 We also update the 'VDEF'/'VUSE' memory tags for non-renameable 6777 aggregates so that we get fewer false kills. The pass is located 6778 in 'tree-ssa-alias.c' and is described by 'pass_may_alias'. 6779 6780 Interprocedural points-to information is located in 6781 'tree-ssa-structalias.c' and described by 'pass_ipa_pta'. 6782 6783 * Profiling 6784 6785 This pass instruments the function in order to collect runtime 6786 block and value profiling data. Such data may be fed back into the 6787 compiler on a subsequent run so as to allow optimization based on 6788 expected execution frequencies. The pass is located in 6789 'tree-profile.c' and is described by 'pass_ipa_tree_profile'. 6790 6791 * Static profile estimation 6792 6793 This pass implements series of heuristics to guess propababilities 6794 of branches. The resulting predictions are turned into edge 6795 profile by propagating branches across the control flow graphs. 6796 The pass is located in 'tree-profile.c' and is described by 6797 'pass_profile'. 6798 6799 * Lower complex arithmetic 6800 6801 This pass rewrites complex arithmetic operations into their 6802 component scalar arithmetic operations. The pass is located in 6803 'tree-complex.c' and is described by 'pass_lower_complex'. 6804 6805 * Scalar replacement of aggregates 6806 6807 This pass rewrites suitable non-aliased local aggregate variables 6808 into a set of scalar variables. The resulting scalar variables are 6809 rewritten into SSA form, which allows subsequent optimization 6810 passes to do a significantly better job with them. The pass is 6811 located in 'tree-sra.c' and is described by 'pass_sra'. 6812 6813 * Dead store elimination 6814 6815 This pass eliminates stores to memory that are subsequently 6816 overwritten by another store, without any intervening loads. The 6817 pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'. 6818 6819 * Tail recursion elimination 6820 6821 This pass transforms tail recursion into a loop. It is located in 6822 'tree-tailcall.c' and is described by 'pass_tail_recursion'. 6823 6824 * Forward store motion 6825 6826 This pass sinks stores and assignments down the flowgraph closer to 6827 their use point. The pass is located in 'tree-ssa-sink.c' and is 6828 described by 'pass_sink_code'. 6829 6830 * Partial redundancy elimination 6831 6832 This pass eliminates partially redundant computations, as well as 6833 performing load motion. The pass is located in 'tree-ssa-pre.c' 6834 and is described by 'pass_pre'. 6835 6836 Just before partial redundancy elimination, if 6837 '-funsafe-math-optimizations' is on, GCC tries to convert divisions 6838 to multiplications by the reciprocal. The pass is located in 6839 'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'. 6840 6841 * Full redundancy elimination 6842 6843 This is a simpler form of PRE that only eliminates redundancies 6844 that occur on all paths. It is located in 'tree-ssa-pre.c' and 6845 described by 'pass_fre'. 6846 6847 * Loop optimization 6848 6849 The main driver of the pass is placed in 'tree-ssa-loop.c' and 6850 described by 'pass_loop'. 6851 6852 The optimizations performed by this pass are: 6853 6854 Loop invariant motion. This pass moves only invariants that would 6855 be hard to handle on RTL level (function calls, operations that 6856 expand to nontrivial sequences of insns). With '-funswitch-loops' 6857 it also moves operands of conditions that are invariant out of the 6858 loop, so that we can use just trivial invariantness analysis in 6859 loop unswitching. The pass also includes store motion. The pass 6860 is implemented in 'tree-ssa-loop-im.c'. 6861 6862 Canonical induction variable creation. This pass creates a simple 6863 counter for number of iterations of the loop and replaces the exit 6864 condition of the loop using it, in case when a complicated analysis 6865 is necessary to determine the number of iterations. Later 6866 optimizations then may determine the number easily. The pass is 6867 implemented in 'tree-ssa-loop-ivcanon.c'. 6868 6869 Induction variable optimizations. This pass performs standard 6870 induction variable optimizations, including strength reduction, 6871 induction variable merging and induction variable elimination. The 6872 pass is implemented in 'tree-ssa-loop-ivopts.c'. 6873 6874 Loop unswitching. This pass moves the conditional jumps that are 6875 invariant out of the loops. To achieve this, a duplicate of the 6876 loop is created for each possible outcome of conditional jump(s). 6877 The pass is implemented in 'tree-ssa-loop-unswitch.c'. 6878 6879 The optimizations also use various utility functions contained in 6880 'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and 6881 'cfgloopmanip.c'. 6882 6883 Vectorization. This pass transforms loops to operate on vector 6884 types instead of scalar types. Data parallelism across loop 6885 iterations is exploited to group data elements from consecutive 6886 iterations into a vector and operate on them in parallel. 6887 Depending on available target support the loop is conceptually 6888 unrolled by a factor 'VF' (vectorization factor), which is the 6889 number of elements operated upon in parallel in each iteration, and 6890 the 'VF' copies of each scalar operation are fused to form a vector 6891 operation. Additional loop transformations such as peeling and 6892 versioning may take place to align the number of iterations, and to 6893 align the memory accesses in the loop. The pass is implemented in 6894 'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and 6895 'tree-vect-loop-manip.c' (loop specific parts and general loop 6896 utilities), 'tree-vect-slp' (loop-aware SLP functionality), 6897 'tree-vect-stmts.c' and 'tree-vect-data-refs.c'. Analysis of data 6898 references is in 'tree-data-ref.c'. 6899 6900 SLP Vectorization. This pass performs vectorization of 6901 straight-line code. The pass is implemented in 'tree-vectorizer.c' 6902 (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and 6903 'tree-vect-data-refs.c'. 6904 6905 Autoparallelization. This pass splits the loop iteration space to 6906 run into several threads. The pass is implemented in 6907 'tree-parloops.c'. 6908 6909 Graphite is a loop transformation framework based on the polyhedral 6910 model. Graphite stands for Gimple Represented as Polyhedra. The 6911 internals of this infrastructure are documented in 6912 <http://gcc.gnu.org/wiki/Graphite>. The passes working on this 6913 representation are implemented in the various 'graphite-*' files. 6914 6915 * Tree level if-conversion for vectorizer 6916 6917 This pass applies if-conversion to simple loops to help vectorizer. 6918 We identify if convertible loops, if-convert statements and merge 6919 basic blocks in one big block. The idea is to present loop in such 6920 form so that vectorizer can have one to one mapping between 6921 statements and available vector operations. This pass is located 6922 in 'tree-if-conv.c' and is described by 'pass_if_conversion'. 6923 6924 * Conditional constant propagation 6925 6926 This pass relaxes a lattice of values in order to identify those 6927 that must be constant even in the presence of conditional branches. 6928 The pass is located in 'tree-ssa-ccp.c' and is described by 6929 'pass_ccp'. 6930 6931 A related pass that works on memory loads and stores, and not just 6932 register values, is located in 'tree-ssa-ccp.c' and described by 6933 'pass_store_ccp'. 6934 6935 * Conditional copy propagation 6936 6937 This is similar to constant propagation but the lattice of values 6938 is the "copy-of" relation. It eliminates redundant copies from the 6939 code. The pass is located in 'tree-ssa-copy.c' and described by 6940 'pass_copy_prop'. 6941 6942 A related pass that works on memory copies, and not just register 6943 copies, is located in 'tree-ssa-copy.c' and described by 6944 'pass_store_copy_prop'. 6945 6946 * Value range propagation 6947 6948 This transformation is similar to constant propagation but instead 6949 of propagating single constant values, it propagates known value 6950 ranges. The implementation is based on Patterson's range 6951 propagation algorithm (Accurate Static Branch Prediction by Value 6952 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 6953 Patterson's algorithm, this implementation does not propagate 6954 branch probabilities nor it uses more than a single range per SSA 6955 name. This means that the current implementation cannot be used 6956 for branch prediction (though adapting it would not be difficult). 6957 The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'. 6958 6959 * Folding built-in functions 6960 6961 This pass simplifies built-in functions, as applicable, with 6962 constant arguments or with inferable string lengths. It is located 6963 in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'. 6964 6965 * Split critical edges 6966 6967 This pass identifies critical edges and inserts empty basic blocks 6968 such that the edge is no longer critical. The pass is located in 6969 'tree-cfg.c' and is described by 'pass_split_crit_edges'. 6970 6971 * Control dependence dead code elimination 6972 6973 This pass is a stronger form of dead code elimination that can 6974 eliminate unnecessary control flow statements. It is located in 6975 'tree-ssa-dce.c' and is described by 'pass_cd_dce'. 6976 6977 * Tail call elimination 6978 6979 This pass identifies function calls that may be rewritten into 6980 jumps. No code transformation is actually applied here, but the 6981 data and control flow problem is solved. The code transformation 6982 requires target support, and so is delayed until RTL. In the 6983 meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility. 6984 The pass is located in 'tree-tailcall.c' and is described by 6985 'pass_tail_calls'. The RTL transformation is handled by 6986 'fixup_tail_calls' in 'calls.c'. 6987 6988 * Warn for function return without value 6989 6990 For non-void functions, this pass locates return statements that do 6991 not specify a value and issues a warning. Such a statement may 6992 have been injected by falling off the end of the function. This 6993 pass is run last so that we have as much time as possible to prove 6994 that the statement is not reachable. It is located in 'tree-cfg.c' 6995 and is described by 'pass_warn_function_return'. 6996 6997 * Leave static single assignment form 6998 6999 This pass rewrites the function such that it is in normal form. At 7000 the same time, we eliminate as many single-use temporaries as 7001 possible, so the intermediate language is no longer GIMPLE, but 7002 GENERIC. The pass is located in 'tree-outof-ssa.c' and is 7003 described by 'pass_del_ssa'. 7004 7005 * Merge PHI nodes that feed into one another 7006 7007 This is part of the CFG cleanup passes. It attempts to join PHI 7008 nodes from a forwarder CFG block into another block with PHI nodes. 7009 The pass is located in 'tree-cfgcleanup.c' and is described by 7010 'pass_merge_phi'. 7011 7012 * Return value optimization 7013 7014 If a function always returns the same local variable, and that 7015 local variable is an aggregate type, then the variable is replaced 7016 with the return value for the function (i.e., the function's 7017 DECL_RESULT). This is equivalent to the C++ named return value 7018 optimization applied to GIMPLE. The pass is located in 7019 'tree-nrv.c' and is described by 'pass_nrv'. 7020 7021 * Return slot optimization 7022 7023 If a function returns a memory object and is called as 'var = 7024 foo()', this pass tries to change the call so that the address of 7025 'var' is sent to the caller to avoid an extra memory copy. This 7026 pass is located in 'tree-nrv.c' and is described by 7027 'pass_return_slot'. 7028 7029 * Optimize calls to '__builtin_object_size' 7030 7031 This is a propagation pass similar to CCP that tries to remove 7032 calls to '__builtin_object_size' when the size of the object can be 7033 computed at compile-time. This pass is located in 7034 'tree-object-size.c' and is described by 'pass_object_sizes'. 7035 7036 * Loop invariant motion 7037 7038 This pass removes expensive loop-invariant computations out of 7039 loops. The pass is located in 'tree-ssa-loop.c' and described by 7040 'pass_lim'. 7041 7042 * Loop nest optimizations 7043 7044 This is a family of loop transformations that works on loop nests. 7045 It includes loop interchange, scaling, skewing and reversal and 7046 they are all geared to the optimization of data locality in array 7047 traversals and the removal of dependencies that hamper 7048 optimizations such as loop parallelization and vectorization. The 7049 pass is located in 'tree-loop-linear.c' and described by 7050 'pass_linear_transform'. 7051 7052 * Removal of empty loops 7053 7054 This pass removes loops with no code in them. The pass is located 7055 in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'. 7056 7057 * Unrolling of small loops 7058 7059 This pass completely unrolls loops with few iterations. The pass 7060 is located in 'tree-ssa-loop-ivcanon.c' and described by 7061 'pass_complete_unroll'. 7062 7063 * Predictive commoning 7064 7065 This pass makes the code reuse the computations from the previous 7066 iterations of the loops, especially loads and stores to memory. It 7067 does so by storing the values of these computations to a bank of 7068 temporary variables that are rotated at the end of loop. To avoid 7069 the need for this rotation, the loop is then unrolled and the 7070 copies of the loop body are rewritten to use the appropriate 7071 version of the temporary variable. This pass is located in 7072 'tree-predcom.c' and described by 'pass_predcom'. 7073 7074 * Array prefetching 7075 7076 This pass issues prefetch instructions for array references inside 7077 loops. The pass is located in 'tree-ssa-loop-prefetch.c' and 7078 described by 'pass_loop_prefetch'. 7079 7080 * Reassociation 7081 7082 This pass rewrites arithmetic expressions to enable optimizations 7083 that operate on them, like redundancy elimination and 7084 vectorization. The pass is located in 'tree-ssa-reassoc.c' and 7085 described by 'pass_reassoc'. 7086 7087 * Optimization of 'stdarg' functions 7088 7089 This pass tries to avoid the saving of register arguments into the 7090 stack on entry to 'stdarg' functions. If the function doesn't use 7091 any 'va_start' macros, no registers need to be saved. If 7092 'va_start' macros are used, the 'va_list' variables don't escape 7093 the function, it is only necessary to save registers that will be 7094 used in 'va_arg' macros. For instance, if 'va_arg' is only used 7095 with integral types in the function, floating point registers don't 7096 need to be saved. This pass is located in 'tree-stdarg.c' and 7097 described by 'pass_stdarg'. 7098 7099 7100File: gccint.info, Node: RTL passes, Next: Optimization info, Prev: Tree SSA passes, Up: Passes 7101 71029.6 RTL passes 7103============== 7104 7105The following briefly describes the RTL generation and optimization 7106passes that are run after the Tree optimization passes. 7107 7108 * RTL generation 7109 7110 The source files for RTL generation include 'stmt.c', 'calls.c', 7111 'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and 7112 'emit-rtl.c'. Also, the file 'insn-emit.c', generated from the 7113 machine description by the program 'genemit', is used in this pass. 7114 The header file 'expr.h' is used for communication within this 7115 pass. 7116 7117 The header files 'insn-flags.h' and 'insn-codes.h', generated from 7118 the machine description by the programs 'genflags' and 'gencodes', 7119 tell this pass which standard names are available for use and which 7120 patterns correspond to them. 7121 7122 * Generation of exception landing pads 7123 7124 This pass generates the glue that handles communication between the 7125 exception handling library routines and the exception handlers 7126 within the function. Entry points in the function that are invoked 7127 by the exception handling library are called "landing pads". The 7128 code for this pass is located in 'except.c'. 7129 7130 * Control flow graph cleanup 7131 7132 This pass removes unreachable code, simplifies jumps to next, jumps 7133 to jump, jumps across jumps, etc. The pass is run multiple times. 7134 For historical reasons, it is occasionally referred to as the "jump 7135 optimization pass". The bulk of the code for this pass is in 7136 'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and 7137 'jump.c'. 7138 7139 * Forward propagation of single-def values 7140 7141 This pass attempts to remove redundant computation by substituting 7142 variables that come from a single definition, and seeing if the 7143 result can be simplified. It performs copy propagation and 7144 addressing mode selection. The pass is run twice, with values 7145 being propagated into loops only on the second run. The code is 7146 located in 'fwprop.c'. 7147 7148 * Common subexpression elimination 7149 7150 This pass removes redundant computation within basic blocks, and 7151 optimizes addressing modes based on cost. The pass is run twice. 7152 The code for this pass is located in 'cse.c'. 7153 7154 * Global common subexpression elimination 7155 7156 This pass performs two different types of GCSE depending on whether 7157 you are optimizing for size or not (LCM based GCSE tends to 7158 increase code size for a gain in speed, while Morel-Renvoise based 7159 GCSE does not). When optimizing for size, GCSE is done using 7160 Morel-Renvoise Partial Redundancy Elimination, with the exception 7161 that it does not try to move invariants out of loops--that is left 7162 to the loop optimization pass. If MR PRE GCSE is done, code 7163 hoisting (aka unification) is also done, as well as load motion. 7164 If you are optimizing for speed, LCM (lazy code motion) based GCSE 7165 is done. LCM is based on the work of Knoop, Ruthing, and Steffen. 7166 LCM based GCSE also does loop invariant code motion. We also 7167 perform load and store motion when optimizing for speed. 7168 Regardless of which type of GCSE is used, the GCSE pass also 7169 performs global constant and copy propagation. The source file for 7170 this pass is 'gcse.c', and the LCM routines are in 'lcm.c'. 7171 7172 * Loop optimization 7173 7174 This pass performs several loop related optimizations. The source 7175 files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop 7176 analysis and manipulation code. Initialization and finalization of 7177 loop structures is handled by 'loop-init.c'. A loop invariant 7178 motion pass is implemented in 'loop-invariant.c'. Basic block 7179 level optimizations--unrolling, and peeling loops-- are implemented 7180 in 'loop-unroll.c'. Replacing of the exit condition of loops by 7181 special machine-dependent instructions is handled by 7182 'loop-doloop.c'. 7183 7184 * Jump bypassing 7185 7186 This pass is an aggressive form of GCSE that transforms the control 7187 flow graph of a function by propagating constants into conditional 7188 branch instructions. The source file for this pass is 'gcse.c'. 7189 7190 * If conversion 7191 7192 This pass attempts to replace conditional branches and surrounding 7193 assignments with arithmetic, boolean value producing comparison 7194 instructions, and conditional move instructions. In the very last 7195 invocation after reload/LRA, it will generate predicated 7196 instructions when supported by the target. The code is located in 7197 'ifcvt.c'. 7198 7199 * Web construction 7200 7201 This pass splits independent uses of each pseudo-register. This 7202 can improve effect of the other transformation, such as CSE or 7203 register allocation. The code for this pass is located in 'web.c'. 7204 7205 * Instruction combination 7206 7207 This pass attempts to combine groups of two or three instructions 7208 that are related by data flow into single instructions. It 7209 combines the RTL expressions for the instructions by substitution, 7210 simplifies the result using algebra, and then attempts to match the 7211 result against the machine description. The code is located in 7212 'combine.c'. 7213 7214 * Mode switching optimization 7215 7216 This pass looks for instructions that require the processor to be 7217 in a specific "mode" and minimizes the number of mode changes 7218 required to satisfy all users. What these modes are, and what they 7219 apply to are completely target-specific. The code for this pass is 7220 located in 'mode-switching.c'. 7221 7222 * Modulo scheduling 7223 7224 This pass looks at innermost loops and reorders their instructions 7225 by overlapping different iterations. Modulo scheduling is 7226 performed immediately before instruction scheduling. The code for 7227 this pass is located in 'modulo-sched.c'. 7228 7229 * Instruction scheduling 7230 7231 This pass looks for instructions whose output will not be available 7232 by the time that it is used in subsequent instructions. Memory 7233 loads and floating point instructions often have this behavior on 7234 RISC machines. It re-orders instructions within a basic block to 7235 try to separate the definition and use of items that otherwise 7236 would cause pipeline stalls. This pass is performed twice, before 7237 and after register allocation. The code for this pass is located 7238 in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c' 7239 and 'sched-vis.c'. 7240 7241 * Register allocation 7242 7243 These passes make sure that all occurrences of pseudo registers are 7244 eliminated, either by allocating them to a hard register, replacing 7245 them by an equivalent expression (e.g. a constant) or by placing 7246 them on the stack. This is done in several subpasses: 7247 7248 * The integrated register allocator (IRA). It is called 7249 integrated because coalescing, register live range splitting, 7250 and hard register preferencing are done on-the-fly during 7251 coloring. It also has better integration with the reload/LRA 7252 pass. Pseudo-registers spilled by the allocator or the 7253 reload/LRA have still a chance to get hard-registers if the 7254 reload/LRA evicts some pseudo-registers from hard-registers. 7255 The allocator helps to choose better pseudos for spilling 7256 based on their live ranges and to coalesce stack slots 7257 allocated for the spilled pseudo-registers. IRA is a regional 7258 register allocator which is transformed into Chaitin-Briggs 7259 allocator if there is one region. By default, IRA chooses 7260 regions using register pressure but the user can force it to 7261 use one region or regions corresponding to all loops. 7262 7263 Source files of the allocator are 'ira.c', 'ira-build.c', 7264 'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c', 7265 'ira-lives', plus header files 'ira.h' and 'ira-int.h' used 7266 for the communication between the allocator and the rest of 7267 the compiler and between the IRA files. 7268 7269 * Reloading. This pass renumbers pseudo registers with the 7270 hardware registers numbers they were allocated. Pseudo 7271 registers that did not get hard registers are replaced with 7272 stack slots. Then it finds instructions that are invalid 7273 because a value has failed to end up in a register, or has 7274 ended up in a register of the wrong kind. It fixes up these 7275 instructions by reloading the problematical values temporarily 7276 into registers. Additional instructions are generated to do 7277 the copying. 7278 7279 The reload pass also optionally eliminates the frame pointer 7280 and inserts instructions to save and restore call-clobbered 7281 registers around calls. 7282 7283 Source files are 'reload.c' and 'reload1.c', plus the header 7284 'reload.h' used for communication between them. 7285 7286 * This pass is a modern replacement of the reload pass. Source 7287 files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c', 7288 'lra-constraints.c', 'lra-eliminations.c', 'lra-lives.c', 7289 'lra-remat.c', 'lra-spills.c', the header 'lra-int.h' used for 7290 communication between them, and the header 'lra.h' used for 7291 communication between LRA and the rest of compiler. 7292 7293 Unlike the reload pass, intermediate LRA decisions are 7294 reflected in RTL as much as possible. This reduces the number 7295 of target-dependent macros and hooks, leaving instruction 7296 constraints as the primary source of control. 7297 7298 LRA is run on targets for which TARGET_LRA_P returns true. 7299 7300 * Basic block reordering 7301 7302 This pass implements profile guided code positioning. If profile 7303 information is not available, various types of static analysis are 7304 performed to make the predictions normally coming from the profile 7305 feedback (IE execution frequency, branch probability, etc). It is 7306 implemented in the file 'bb-reorder.c', and the various prediction 7307 routines are in 'predict.c'. 7308 7309 * Variable tracking 7310 7311 This pass computes where the variables are stored at each position 7312 in code and generates notes describing the variable locations to 7313 RTL code. The location lists are then generated according to these 7314 notes to debug information if the debugging information format 7315 supports location lists. The code is located in 'var-tracking.c'. 7316 7317 * Delayed branch scheduling 7318 7319 This optional pass attempts to find instructions that can go into 7320 the delay slots of other instructions, usually jumps and calls. 7321 The code for this pass is located in 'reorg.c'. 7322 7323 * Branch shortening 7324 7325 On many RISC machines, branch instructions have a limited range. 7326 Thus, longer sequences of instructions must be used for long 7327 branches. In this pass, the compiler figures out what how far each 7328 instruction will be from each other instruction, and therefore 7329 whether the usual instructions, or the longer sequences, must be 7330 used for each branch. The code for this pass is located in 7331 'final.c'. 7332 7333 * Register-to-stack conversion 7334 7335 Conversion from usage of some hard registers to usage of a register 7336 stack may be done at this point. Currently, this is supported only 7337 for the floating-point registers of the Intel 80387 coprocessor. 7338 The code for this pass is located in 'reg-stack.c'. 7339 7340 * Final 7341 7342 This pass outputs the assembler code for the function. The source 7343 files are 'final.c' plus 'insn-output.c'; the latter is generated 7344 automatically from the machine description by the tool 'genoutput'. 7345 The header file 'conditions.h' is used for communication between 7346 these files. 7347 7348 * Debugging information output 7349 7350 This is run after final because it must output the stack slot 7351 offsets for pseudo registers that did not get hard registers. 7352 Source files are 'dbxout.c' for DBX symbol table format, 'sdbout.c' 7353 for SDB symbol table format, 'dwarfout.c' for DWARF symbol table 7354 format, files 'dwarf2out.c' and 'dwarf2asm.c' for DWARF2 symbol 7355 table format, and 'vmsdbgout.c' for VMS debug symbol table format. 7356 7357 7358File: gccint.info, Node: Optimization info, Prev: RTL passes, Up: Passes 7359 73609.7 Optimization info 7361===================== 7362 7363This section is describes dump infrastructure which is common to both 7364pass dumps as well as optimization dumps. The goal for this 7365infrastructure is to provide both gcc developers and users detailed 7366information about various compiler transformations and optimizations. 7367 7368* Menu: 7369 7370* Dump setup:: Setup of optimization dumps. 7371* Optimization groups:: Groups made up of optimization passes. 7372* Dump files and streams:: Dump output file names and streams. 7373* Dump output verbosity:: How much information to dump. 7374* Dump types:: Various types of dump functions. 7375* Dump examples:: Sample usage. 7376 7377 7378File: gccint.info, Node: Dump setup, Next: Optimization groups, Up: Optimization info 7379 73809.7.1 Dump setup 7381---------------- 7382 7383A dump_manager class is defined in 'dumpfile.h'. Various passes 7384register dumping pass-specific information via 'dump_register' in 7385'passes.c'. During the registration, an optimization pass can select 7386its optimization group (*note Optimization groups::). After that 7387optimization information corresponding to the entire group (presumably 7388from multiple passes) can be output via command-line switches. Note 7389that if a pass does not fit into any of the pre-defined groups, it can 7390select 'OPTGROUP_NONE'. 7391 7392 Note that in general, a pass need not know its dump output file name, 7393whether certain flags are enabled, etc. However, for legacy reasons, 7394passes could also call 'dump_begin' which returns a stream in case the 7395particular pass has optimization dumps enabled. A pass could call 7396'dump_end' when the dump has ended. These methods should go away once 7397all the passes are converted to use the new dump infrastructure. 7398 7399 The recommended way to setup the dump output is via 'dump_start' and 7400'dump_end'. 7401 7402 7403File: gccint.info, Node: Optimization groups, Next: Dump files and streams, Prev: Dump setup, Up: Optimization info 7404 74059.7.2 Optimization groups 7406------------------------- 7407 7408The optimization passes are grouped into several categories. Currently 7409defined categories in 'dumpfile.h' are 7410 7411'OPTGROUP_IPA' 7412 IPA optimization passes. Enabled by '-ipa' 7413 7414'OPTGROUP_LOOP' 7415 Loop optimization passes. Enabled by '-loop'. 7416 7417'OPTGROUP_INLINE' 7418 Inlining passes. Enabled by '-inline'. 7419 7420'OPTGROUP_VEC' 7421 Vectorization passes. Enabled by '-vec'. 7422 7423'OPTGROUP_OTHER' 7424 All other optimization passes which do not fall into one of the 7425 above. 7426 7427'OPTGROUP_ALL' 7428 All optimization passes. Enabled by '-all'. 7429 7430 By using groups a user could selectively enable optimization 7431information only for a group of passes. By default, the optimization 7432information for all the passes is dumped. 7433 7434 7435File: gccint.info, Node: Dump files and streams, Next: Dump output verbosity, Prev: Optimization groups, Up: Optimization info 7436 74379.7.3 Dump files and streams 7438---------------------------- 7439 7440There are two separate output streams available for outputting 7441optimization information from passes. Note that both these streams 7442accept 'stderr' and 'stdout' as valid streams and thus it is possible to 7443dump output to standard output or error. This is specially handy for 7444outputting all available information in a single file by redirecting 7445'stderr'. 7446 7447'pstream' 7448 This stream is for pass-specific dump output. For example, 7449 '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into 7450 the given file name 'foo.v'. If the file name is not provided, the 7451 default file name is based on the source file and pass number. 7452 Note that one could also use special file names 'stdout' and 7453 'stderr' for dumping to standard output and standard error 7454 respectively. 7455 7456'alt_stream' 7457 This steam is used for printing optimization specific output in 7458 response to the '-fopt-info'. Again a file name can be given. If 7459 the file name is not given, it defaults to 'stderr'. 7460 7461 7462File: gccint.info, Node: Dump output verbosity, Next: Dump types, Prev: Dump files and streams, Up: Optimization info 7463 74649.7.4 Dump output verbosity 7465--------------------------- 7466 7467The dump verbosity has the following options 7468 7469'optimized' 7470 Print information when an optimization is successfully applied. It 7471 is up to a pass to decide which information is relevant. For 7472 example, the vectorizer passes print the source location of loops 7473 which got successfully vectorized. 7474 7475'missed' 7476 Print information about missed optimizations. Individual passes 7477 control which information to include in the output. For example, 7478 7479 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 7480 7481 will print information about missed optimization opportunities from 7482 vectorization passes on stderr. 7483 7484'note' 7485 Print verbose information about optimizations, such as certain 7486 transformations, more detailed messages about decisions etc. 7487 7488'all' 7489 Print detailed optimization information. This includes OPTIMIZED, 7490 MISSED, and NOTE. 7491 7492 7493File: gccint.info, Node: Dump types, Next: Dump examples, Prev: Dump output verbosity, Up: Optimization info 7494 74959.7.5 Dump types 7496---------------- 7497 7498'dump_printf' 7499 7500 This is a generic method for doing formatted output. It takes an 7501 additional argument 'dump_kind' which signifies the type of dump. 7502 This method outputs information only when the dumps are enabled for 7503 this particular 'dump_kind'. Note that the caller doesn't need to 7504 know if the particular dump is enabled or not, or even the file 7505 name. The caller only needs to decide which dump output 7506 information is relevant, and under what conditions. This 7507 determines the associated flags. 7508 7509 Consider the following example from 'loop-unroll.c' where an 7510 informative message about a loop (along with its location) is 7511 printed when any of the following flags is enabled 7512 7513 - optimization messages 7514 - RTL dumps 7515 - detailed dumps 7516 7517 int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS; 7518 dump_printf_loc (report_flags, locus, 7519 "loop turned into non-loop; it never loops.\n"); 7520 7521'dump_basic_block' 7522 Output basic block. 7523'dump_generic_expr' 7524 Output generic expression. 7525'dump_gimple_stmt' 7526 Output gimple statement. 7527 7528 Note that the above methods also have variants prefixed with 7529 '_loc', such as 'dump_printf_loc', which are similar except they 7530 also output the source location information. 7531 7532 7533File: gccint.info, Node: Dump examples, Prev: Dump types, Up: Optimization info 7534 75359.7.6 Dump examples 7536------------------- 7537 7538 gcc -O3 -fopt-info-missed=missed.all 7539 7540 outputs missed optimization report from all the passes into 7541'missed.all'. 7542 7543 As another example, 7544 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 7545 7546 will output information about missed optimizations as well as optimized 7547locations from all the inlining passes into 'inline.txt'. 7548 7549 If the FILENAME is provided, then the dumps from all the applicable 7550optimizations are concatenated into the 'filename'. Otherwise the dump 7551is output onto 'stderr'. If OPTIONS is omitted, it defaults to 7552'all-all', which means dump all available optimization info from all the 7553passes. In the following example, all optimization info is output on to 7554'stderr'. 7555 7556 gcc -O3 -fopt-info 7557 7558 Note that '-fopt-info-vec-missed' behaves the same as 7559'-fopt-info-missed-vec'. 7560 7561 As another example, consider 7562 7563 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 7564 7565 Here the two output file names 'vec.miss' and 'loop.opt' are in 7566conflict since only one output file is allowed. In this case, only the 7567first option takes effect and the subsequent options are ignored. Thus 7568only the 'vec.miss' is produced which containts dumps from the 7569vectorizer about missed opportunities. 7570 7571 7572File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: Passes, Up: Top 7573 757410 GENERIC 7575********** 7576 7577The purpose of GENERIC is simply to provide a language-independent way 7578of representing an entire function in trees. To this end, it was 7579necessary to add a few new tree codes to the back end, but almost 7580everything was already there. If you can express it with the codes in 7581'gcc/tree.def', it's GENERIC. 7582 7583 Early on, there was a great deal of debate about how to think about 7584statements in a tree IL. In GENERIC, a statement is defined as any 7585expression whose value, if any, is ignored. A statement will always 7586have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a 7587non-statement expression may also have side effects. A 'CALL_EXPR', for 7588instance. 7589 7590 It would be possible for some local optimizations to work on the 7591GENERIC form of a function; indeed, the adapted tree inliner works fine 7592on GENERIC, but the current compiler performs inlining after lowering to 7593GIMPLE (a restricted form described in the next section). Indeed, 7594currently the frontends perform this lowering before handing off to 7595'tree_rest_of_compilation', but this seems inelegant. 7596 7597* Menu: 7598 7599* Deficiencies:: Topics net yet covered in this document. 7600* Tree overview:: All about 'tree's. 7601* Types:: Fundamental and aggregate types. 7602* Declarations:: Type declarations and variables. 7603* Attributes:: Declaration and type attributes. 7604* Expressions: Expression trees. Operating on data. 7605* Statements:: Control flow and related trees. 7606* Functions:: Function bodies, linkage, and other aspects. 7607* Language-dependent trees:: Topics and trees specific to language front ends. 7608* C and C++ Trees:: Trees specific to C and C++. 7609* Java Trees:: Trees specific to Java. 7610 7611 7612File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 7613 761410.1 Deficiencies 7615================= 7616 7617There are many places in which this document is incomplet and incorrekt. 7618It is, as of yet, only _preliminary_ documentation. 7619 7620 7621File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 7622 762310.2 Overview 7624============= 7625 7626The central data structure used by the internal representation is the 7627'tree'. These nodes, while all of the C type 'tree', are of many 7628varieties. A 'tree' is a pointer type, but the object to which it 7629points may be of a variety of types. From this point forward, we will 7630refer to trees in ordinary type, rather than in 'this font', except when 7631talking about the actual C type 'tree'. 7632 7633 You can tell what kind of node a particular tree is by using the 7634'TREE_CODE' macro. Many, many macros take trees as input and return 7635trees as output. However, most macros require a certain kind of tree 7636node as input. In other words, there is a type-system for trees, but it 7637is not reflected in the C type-system. 7638 7639 For safety, it is useful to configure GCC with '--enable-checking'. 7640Although this results in a significant performance penalty (since all 7641tree types are checked at run-time), and is therefore inappropriate in a 7642release version, it is extremely helpful during the development process. 7643 7644 Many macros behave as predicates. Many, although not all, of these 7645predicates end in '_P'. Do not rely on the result type of these macros 7646being of any particular type. You may, however, rely on the fact that 7647the type can be compared to '0', so that statements like 7648 if (TEST_P (t) && !TEST_P (y)) 7649 x = 1; 7650and 7651 int i = (TEST_P (t) != 0); 7652are legal. Macros that return 'int' values now may be changed to return 7653'tree' values, or other pointers in the future. Even those that 7654continue to return 'int' may return multiple nonzero codes where 7655previously they returned only zero and one. Therefore, you should not 7656write code like 7657 if (TEST_P (t) == 1) 7658as this code is not guaranteed to work correctly in the future. 7659 7660 You should not take the address of values returned by the macros or 7661functions described here. In particular, no guarantee is given that the 7662values are lvalues. 7663 7664 In general, the names of macros are all in uppercase, while the names 7665of functions are entirely in lowercase. There are rare exceptions to 7666this rule. You should assume that any macro or function whose name is 7667made up entirely of uppercase letters may evaluate its arguments more 7668than once. You may assume that a macro or function whose name is made 7669up entirely of lowercase letters will evaluate its arguments only once. 7670 7671 The 'error_mark_node' is a special tree. Its tree code is 7672'ERROR_MARK', but since there is only ever one node with that code, the 7673usual practice is to compare the tree against 'error_mark_node'. (This 7674test is just a test for pointer equality.) If an error has occurred 7675during front-end processing the flag 'errorcount' will be set. If the 7676front end has encountered code it cannot handle, it will issue a message 7677to the user and set 'sorrycount'. When these flags are set, any macro 7678or function which normally returns a tree of a particular kind may 7679instead return the 'error_mark_node'. Thus, if you intend to do any 7680processing of erroneous code, you must be prepared to deal with the 7681'error_mark_node'. 7682 7683 Occasionally, a particular tree slot (like an operand to an expression, 7684or a particular field in a declaration) will be referred to as "reserved 7685for the back end". These slots are used to store RTL when the tree is 7686converted to RTL for use by the GCC back end. However, if that process 7687is not taking place (e.g., if the front end is being hooked up to an 7688intelligent editor), then those slots may be used by the back end 7689presently in use. 7690 7691 If you encounter situations that do not match this documentation, such 7692as tree nodes of types not mentioned here, or macros documented to 7693return entities of a particular kind that instead return entities of 7694some different kind, you have found a bug, either in the front end or in 7695the documentation. Please report these bugs as you would any other bug. 7696 7697* Menu: 7698 7699* Macros and Functions::Macros and functions that can be used with all trees. 7700* Identifiers:: The names of things. 7701* Containers:: Lists and vectors. 7702 7703 7704File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 7705 770610.2.1 Trees 7707------------ 7708 7709All GENERIC trees have two fields in common. First, 'TREE_CHAIN' is a 7710pointer that can be used as a singly-linked list to other trees. The 7711other is 'TREE_TYPE'. Many trees store the type of an expression or 7712declaration in this field. 7713 7714 These are some other functions for handling trees: 7715 7716'tree_size' 7717 Return the number of bytes a tree takes. 7718 7719'build0' 7720'build1' 7721'build2' 7722'build3' 7723'build4' 7724'build5' 7725'build6' 7726 7727 These functions build a tree and supply values to put in each 7728 parameter. The basic signature is 'code, type, [operands]'. 7729 'code' is the 'TREE_CODE', and 'type' is a tree representing the 7730 'TREE_TYPE'. These are followed by the operands, each of which is 7731 also a tree. 7732 7733 7734File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 7735 773610.2.2 Identifiers 7737------------------ 7738 7739An 'IDENTIFIER_NODE' represents a slightly more general concept than the 7740standard C or C++ concept of identifier. In particular, an 7741'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters. 7742 7743 There are never two distinct 'IDENTIFIER_NODE's representing the same 7744identifier. Therefore, you may use pointer equality to compare 7745'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'. Use 7746'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied 7747string. 7748 7749 You can use the following macros to access identifiers: 7750'IDENTIFIER_POINTER' 7751 The string represented by the identifier, represented as a 'char*'. 7752 This string is always 'NUL'-terminated, and contains no embedded 7753 'NUL' characters. 7754 7755'IDENTIFIER_LENGTH' 7756 The length of the string returned by 'IDENTIFIER_POINTER', not 7757 including the trailing 'NUL'. This value of 'IDENTIFIER_LENGTH 7758 (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'. 7759 7760'IDENTIFIER_OPNAME_P' 7761 This predicate holds if the identifier represents the name of an 7762 overloaded operator. In this case, you should not depend on the 7763 contents of either the 'IDENTIFIER_POINTER' or the 7764 'IDENTIFIER_LENGTH'. 7765 7766'IDENTIFIER_TYPENAME_P' 7767 This predicate holds if the identifier represents the name of a 7768 user-defined conversion operator. In this case, the 'TREE_TYPE' of 7769 the 'IDENTIFIER_NODE' holds the type to which the conversion 7770 operator converts. 7771 7772 7773File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 7774 777510.2.3 Containers 7776----------------- 7777 7778Two common container data structures can be represented directly with 7779tree nodes. A 'TREE_LIST' is a singly linked list containing two trees 7780per node. These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node. 7781(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional 7782information, while the 'TREE_VALUE' contains the majority of the 7783payload. In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE', 7784while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of 7785equal stature.) Given one 'TREE_LIST' node, the next node is found by 7786following the 'TREE_CHAIN'. If the 'TREE_CHAIN' is 'NULL_TREE', then 7787you have reached the end of the list. 7788 7789 A 'TREE_VEC' is a simple vector. The 'TREE_VEC_LENGTH' is an integer 7790(not a tree) giving the number of nodes in the vector. The nodes 7791themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two 7792arguments. The first is the 'TREE_VEC' in question; the second is an 7793integer indicating which element in the vector is desired. The elements 7794are indexed from zero. 7795 7796 7797File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 7798 779910.3 Types 7800========== 7801 7802All types have corresponding tree nodes. However, you should not assume 7803that there is exactly one tree node corresponding to each type. There 7804are often multiple nodes corresponding to the same type. 7805 7806 For the most part, different kinds of types have different tree codes. 7807(For example, pointer types use a 'POINTER_TYPE' code while arrays use 7808an 'ARRAY_TYPE' code.) However, pointers to member functions use the 7809'RECORD_TYPE' code. Therefore, when writing a 'switch' statement that 7810depends on the code associated with a particular type, you should take 7811care to handle pointers to member functions under the 'RECORD_TYPE' case 7812label. 7813 7814 The following functions and macros deal with cv-qualification of types: 7815'TYPE_MAIN_VARIANT' 7816 This macro returns the unqualified version of a type. It may be 7817 applied to an unqualified type, but it is not always the identity 7818 function in that case. 7819 7820 A few other macros and functions are usable with all types: 7821'TYPE_SIZE' 7822 The number of bits required to represent the type, represented as 7823 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 7824 'NULL_TREE'. 7825 7826'TYPE_ALIGN' 7827 The alignment of the type, in bits, represented as an 'int'. 7828 7829'TYPE_NAME' 7830 This macro returns a declaration (in the form of a 'TYPE_DECL') for 7831 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 7832 as you might expect, given its name!) You can look at the 7833 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 7834 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 7835 built-in type, the result of a typedef, or a named class type. 7836 7837'TYPE_CANONICAL' 7838 This macro returns the "canonical" type for the given type node. 7839 Canonical types are used to improve performance in the C++ and 7840 Objective-C++ front ends by allowing efficient comparison between 7841 two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of 7842 the types are equal, the types are equivalent; otherwise, the types 7843 are not equivalent. The notion of equivalence for canonical types 7844 is the same as the notion of type equivalence in the language 7845 itself. For instance, 7846 7847 When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type 7848 for the given type node. In this case, comparison between this 7849 type and any other type requires the compiler to perform a deep, 7850 "structural" comparison to see if the two type nodes have the same 7851 form and properties. 7852 7853 The canonical type for a node is always the most fundamental type 7854 in the equivalence class of types. For instance, 'int' is its own 7855 canonical type. A typedef 'I' of 'int' will have 'int' as its 7856 canonical type. Similarly, 'I*' and a typedef 'IP' (defined to 7857 'I*') will has 'int*' as their canonical type. When building a new 7858 type node, be sure to set 'TYPE_CANONICAL' to the appropriate 7859 canonical type. If the new type is a compound type (built from 7860 other types), and any of those other types require structural 7861 equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new 7862 type also requires structural equality. Finally, if for some 7863 reason you cannot guarantee that 'TYPE_CANONICAL' will point to the 7864 canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure 7865 that the new type-and any type constructed based on it-requires 7866 structural equality. If you suspect that the canonical type system 7867 is miscomparing types, pass '--param verify-canonical-types=1' to 7868 the compiler or configure with '--enable-checking' to force the 7869 compiler to verify its canonical-type comparisons against the 7870 structural comparisons; the compiler will then print any warnings 7871 if the canonical types miscompare. 7872 7873'TYPE_STRUCTURAL_EQUALITY_P' 7874 This predicate holds when the node requires structural equality 7875 checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'. 7876 7877'SET_TYPE_STRUCTURAL_EQUALITY' 7878 This macro states that the type node it is given requires 7879 structural equality checks, e.g., it sets 'TYPE_CANONICAL' to 7880 'NULL_TREE'. 7881 7882'same_type_p' 7883 This predicate takes two types as input, and holds if they are the 7884 same type. For example, if one type is a 'typedef' for the other, 7885 or both are 'typedef's for the same type. This predicate also 7886 holds if the two trees given as input are simply copies of one 7887 another; i.e., there is no difference between them at the source 7888 level, but, for whatever reason, a duplicate has been made in the 7889 representation. You should never use '==' (pointer equality) to 7890 compare types; always use 'same_type_p' instead. 7891 7892 Detailed below are the various kinds of types, and the macros that can 7893be used to access them. Although other kinds of types are used 7894elsewhere in G++, the types described here are the only ones that you 7895will encounter while examining the intermediate representation. 7896 7897'VOID_TYPE' 7898 Used to represent the 'void' type. 7899 7900'INTEGER_TYPE' 7901 Used to represent the various integral types, including 'char', 7902 'short', 'int', 'long', and 'long long'. This code is not used for 7903 enumeration types, nor for the 'bool' type. The 'TYPE_PRECISION' 7904 is the number of bits used in the representation, represented as an 7905 'unsigned int'. (Note that in the general case this is not the 7906 same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer 7907 type, but that alignment requirements for the ABI required 32-bit 7908 alignment. Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32, 7909 while 'TYPE_PRECISION' would be 24.) The integer type is unsigned 7910 if 'TYPE_UNSIGNED' holds; otherwise, it is signed. 7911 7912 The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer 7913 that may be represented by this type. Similarly, the 7914 'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that 7915 may be represented by this type. 7916 7917'REAL_TYPE' 7918 Used to represent the 'float', 'double', and 'long double' types. 7919 The number of bits in the floating-point representation is given by 7920 'TYPE_PRECISION', as in the 'INTEGER_TYPE' case. 7921 7922'FIXED_POINT_TYPE' 7923 Used to represent the 'short _Fract', '_Fract', 'long _Fract', 7924 'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and 7925 'long long _Accum' types. The number of bits in the fixed-point 7926 representation is given by 'TYPE_PRECISION', as in the 7927 'INTEGER_TYPE' case. There may be padding bits, fractional bits 7928 and integral bits. The number of fractional bits is given by 7929 'TYPE_FBIT', and the number of integral bits is given by 7930 'TYPE_IBIT'. The fixed-point type is unsigned if 'TYPE_UNSIGNED' 7931 holds; otherwise, it is signed. The fixed-point type is saturating 7932 if 'TYPE_SATURATING' holds; otherwise, it is not saturating. 7933 7934'COMPLEX_TYPE' 7935 Used to represent GCC built-in '__complex__' data types. The 7936 'TREE_TYPE' is the type of the real and imaginary parts. 7937 7938'ENUMERAL_TYPE' 7939 Used to represent an enumeration type. The 'TYPE_PRECISION' gives 7940 (as an 'int'), the number of bits used to represent the type. If 7941 there are no negative enumeration constants, 'TYPE_UNSIGNED' will 7942 hold. The minimum and maximum enumeration constants may be 7943 obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively; 7944 each of these macros returns an 'INTEGER_CST'. 7945 7946 The actual enumeration constants themselves may be obtained by 7947 looking at the 'TYPE_VALUES'. This macro will return a 7948 'TREE_LIST', containing the constants. The 'TREE_PURPOSE' of each 7949 node will be an 'IDENTIFIER_NODE' giving the name of the constant; 7950 the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned 7951 to that constant. These constants will appear in the order in 7952 which they were declared. The 'TREE_TYPE' of each of these 7953 constants will be the type of enumeration type itself. 7954 7955'BOOLEAN_TYPE' 7956 Used to represent the 'bool' type. 7957 7958'POINTER_TYPE' 7959 Used to represent pointer types, and pointer to data member types. 7960 The 'TREE_TYPE' gives the type to which this type points. 7961 7962'REFERENCE_TYPE' 7963 Used to represent reference types. The 'TREE_TYPE' gives the type 7964 to which this type refers. 7965 7966'FUNCTION_TYPE' 7967 Used to represent the type of non-member functions and of static 7968 member functions. The 'TREE_TYPE' gives the return type of the 7969 function. The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument 7970 types. The 'TREE_VALUE' of each node in this list is the type of 7971 the corresponding argument; the 'TREE_PURPOSE' is an expression for 7972 the default argument value, if any. If the last node in the list 7973 is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the 7974 'void_type_node'), then functions of this type do not take variable 7975 arguments. Otherwise, they do take a variable number of arguments. 7976 7977 Note that in C (but not in C++) a function declared like 'void f()' 7978 is an unprototyped function taking a variable number of arguments; 7979 the 'TYPE_ARG_TYPES' of such a function will be 'NULL'. 7980 7981'METHOD_TYPE' 7982 Used to represent the type of a non-static member function. Like a 7983 'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'. The 7984 type of '*this', i.e., the class of which functions of this type 7985 are a member, is given by the 'TYPE_METHOD_BASETYPE'. The 7986 'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE', 7987 and includes the 'this' argument. 7988 7989'ARRAY_TYPE' 7990 Used to represent array types. The 'TREE_TYPE' gives the type of 7991 the elements in the array. If the array-bound is present in the 7992 type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE' 7993 and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the 7994 array, respectively. The 'TYPE_MIN_VALUE' will always be an 7995 'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less 7996 than the number of elements in the array, i.e., the highest value 7997 which may be used to index an element in the array. 7998 7999'RECORD_TYPE' 8000 Used to represent 'struct' and 'class' types, as well as pointers 8001 to member functions and similar constructs in other languages. 8002 'TYPE_FIELDS' contains the items contained in this type, each of 8003 which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or 8004 'TYPE_DECL'. You may not make any assumptions about the ordering 8005 of the fields in the type or whether one or more of them overlap. 8006 8007'UNION_TYPE' 8008 Used to represent 'union' types. Similar to 'RECORD_TYPE' except 8009 that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position 8010 zero. 8011 8012'QUAL_UNION_TYPE' 8013 Used to represent part of a variant record in Ada. Similar to 8014 'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER' 8015 field, which contains a boolean expression that indicates whether 8016 the field is present in the object. The type will only have one 8017 field, so each field's 'DECL_QUALIFIER' is only evaluated if none 8018 of the expressions in the previous fields in 'TYPE_FIELDS' are 8019 nonzero. Normally these expressions will reference a field in the 8020 outer object using a 'PLACEHOLDER_EXPR'. 8021 8022'LANG_TYPE' 8023 This node is used to represent a language-specific type. The front 8024 end must handle it. 8025 8026'OFFSET_TYPE' 8027 This node is used to represent a pointer-to-data member. For a 8028 data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the 8029 'TREE_TYPE' is the type of 'm'. 8030 8031 There are variables whose values represent some of the basic types. 8032These include: 8033'void_type_node' 8034 A node for 'void'. 8035 8036'integer_type_node' 8037 A node for 'int'. 8038 8039'unsigned_type_node.' 8040 A node for 'unsigned int'. 8041 8042'char_type_node.' 8043 A node for 'char'. 8044It may sometimes be useful to compare one of these variables with a type 8045in hand, using 'same_type_p'. 8046 8047 8048File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 8049 805010.4 Declarations 8051================= 8052 8053This section covers the various kinds of declarations that appear in the 8054internal representation, except for declarations of functions 8055(represented by 'FUNCTION_DECL' nodes), which are described in *note 8056Functions::. 8057 8058* Menu: 8059 8060* Working with declarations:: Macros and functions that work on 8061declarations. 8062* Internal structure:: How declaration nodes are represented. 8063 8064 8065File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 8066 806710.4.1 Working with declarations 8068-------------------------------- 8069 8070Some macros can be used with any kind of declaration. These include: 8071'DECL_NAME' 8072 This macro returns an 'IDENTIFIER_NODE' giving the name of the 8073 entity. 8074 8075'TREE_TYPE' 8076 This macro returns the type of the entity declared. 8077 8078'EXPR_FILENAME' 8079 This macro returns the name of the file in which the entity was 8080 declared, as a 'char*'. For an entity declared implicitly by the 8081 compiler (like '__builtin_memcpy'), this will be the string 8082 '"<internal>"'. 8083 8084'EXPR_LINENO' 8085 This macro returns the line number at which the entity was 8086 declared, as an 'int'. 8087 8088'DECL_ARTIFICIAL' 8089 This predicate holds if the declaration was implicitly generated by 8090 the compiler. For example, this predicate will hold of an 8091 implicitly declared member function, or of the 'TYPE_DECL' 8092 implicitly generated for a class type. Recall that in C++ code 8093 like: 8094 struct S {}; 8095 is roughly equivalent to C code like: 8096 struct S {}; 8097 typedef struct S S; 8098 The implicitly generated 'typedef' declaration is represented by a 8099 'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds. 8100 8101 The various kinds of declarations include: 8102'LABEL_DECL' 8103 These nodes are used to represent labels in function bodies. For 8104 more information, see *note Functions::. These nodes only appear 8105 in block scopes. 8106 8107'CONST_DECL' 8108 These nodes are used to represent enumeration constants. The value 8109 of the constant is given by 'DECL_INITIAL' which will be an 8110 'INTEGER_CST' with the same type as the 'TREE_TYPE' of the 8111 'CONST_DECL', i.e., an 'ENUMERAL_TYPE'. 8112 8113'RESULT_DECL' 8114 These nodes represent the value returned by a function. When a 8115 value is assigned to a 'RESULT_DECL', that indicates that the value 8116 should be returned, via bitwise copy, by the function. You can use 8117 'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a 8118 'VAR_DECL'. 8119 8120'TYPE_DECL' 8121 These nodes represent 'typedef' declarations. The 'TREE_TYPE' is 8122 the type declared to have the name given by 'DECL_NAME'. In some 8123 cases, there is no associated name. 8124 8125'VAR_DECL' 8126 These nodes represent variables with namespace or block scope, as 8127 well as static data members. The 'DECL_SIZE' and 'DECL_ALIGN' are 8128 analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'. For a declaration, you 8129 should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the 8130 'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since 8131 special attributes may have been applied to the variable to give it 8132 a particular size and alignment. You may use the predicates 8133 'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the 8134 storage class specifiers 'static' or 'extern' were used to declare 8135 a variable. 8136 8137 If this variable is initialized (but does not require a 8138 constructor), the 'DECL_INITIAL' will be an expression for the 8139 initializer. The initializer should be evaluated, and a bitwise 8140 copy into the variable performed. If the 'DECL_INITIAL' is the 8141 'error_mark_node', there is an initializer, but it is given by an 8142 explicit statement later in the code; no bitwise copy is required. 8143 8144 GCC provides an extension that allows either automatic variables, 8145 or global variables, to be placed in particular registers. This 8146 extension is being used for a particular 'VAR_DECL' if 8147 'DECL_REGISTER' holds for the 'VAR_DECL', and if 8148 'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'. In that case, 8149 'DECL_ASSEMBLER_NAME' is the name of the register into which the 8150 variable will be placed. 8151 8152'PARM_DECL' 8153 Used to represent a parameter to a function. Treat these nodes 8154 similarly to 'VAR_DECL' nodes. These nodes only appear in the 8155 'DECL_ARGUMENTS' for a 'FUNCTION_DECL'. 8156 8157 The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will 8158 actually be used when a value is passed to this function. It may 8159 be a wider type than the 'TREE_TYPE' of the parameter; for example, 8160 the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is 8161 'int'. 8162 8163'DEBUG_EXPR_DECL' 8164 Used to represent an anonymous debug-information temporary created 8165 to hold an expression as it is optimized away, so that its value 8166 can be referenced in debug bind statements. 8167 8168'FIELD_DECL' 8169 These nodes represent non-static data members. The 'DECL_SIZE' and 8170 'DECL_ALIGN' behave as for 'VAR_DECL' nodes. The position of the 8171 field within the parent record is specified by a combination of 8172 three attributes. 'DECL_FIELD_OFFSET' is the position, counting in 8173 bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit 8174 of the field closest to the beginning of the structure. 8175 'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 8176 field within this word; this may be nonzero even for fields that 8177 are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than 8178 the natural alignment of the field's type. 8179 8180 If 'DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 8181 bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was 8182 originally specified for it, while DECL_TYPE may be a modified type 8183 with lesser precision, according to the size of the bit field. 8184 8185'NAMESPACE_DECL' 8186 Namespaces provide a name hierarchy for other declarations. They 8187 appear in the 'DECL_CONTEXT' of other '_DECL' nodes. 8188 8189 8190File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 8191 819210.4.2 Internal structure 8193------------------------- 8194 8195'DECL' nodes are represented internally as a hierarchy of structures. 8196 8197* Menu: 8198 8199* Current structure hierarchy:: The current DECL node structure 8200hierarchy. 8201* Adding new DECL node types:: How to add a new DECL node to a 8202frontend. 8203 8204 8205File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 8206 820710.4.2.1 Current structure hierarchy 8208.................................... 8209 8210'struct tree_decl_minimal' 8211 This is the minimal structure to inherit from in order for common 8212 'DECL' macros to work. The fields it contains are a unique ID, 8213 source location, context, and name. 8214 8215'struct tree_decl_common' 8216 This structure inherits from 'struct tree_decl_minimal'. It 8217 contains fields that most 'DECL' nodes need, such as a field to 8218 store alignment, machine mode, size, and attributes. 8219 8220'struct tree_field_decl' 8221 This structure inherits from 'struct tree_decl_common'. It is used 8222 to represent 'FIELD_DECL'. 8223 8224'struct tree_label_decl' 8225 This structure inherits from 'struct tree_decl_common'. It is used 8226 to represent 'LABEL_DECL'. 8227 8228'struct tree_translation_unit_decl' 8229 This structure inherits from 'struct tree_decl_common'. It is used 8230 to represent 'TRANSLATION_UNIT_DECL'. 8231 8232'struct tree_decl_with_rtl' 8233 This structure inherits from 'struct tree_decl_common'. It 8234 contains a field to store the low-level RTL associated with a 8235 'DECL' node. 8236 8237'struct tree_result_decl' 8238 This structure inherits from 'struct tree_decl_with_rtl'. It is 8239 used to represent 'RESULT_DECL'. 8240 8241'struct tree_const_decl' 8242 This structure inherits from 'struct tree_decl_with_rtl'. It is 8243 used to represent 'CONST_DECL'. 8244 8245'struct tree_parm_decl' 8246 This structure inherits from 'struct tree_decl_with_rtl'. It is 8247 used to represent 'PARM_DECL'. 8248 8249'struct tree_decl_with_vis' 8250 This structure inherits from 'struct tree_decl_with_rtl'. It 8251 contains fields necessary to store visibility information, as well 8252 as a section name and assembler name. 8253 8254'struct tree_var_decl' 8255 This structure inherits from 'struct tree_decl_with_vis'. It is 8256 used to represent 'VAR_DECL'. 8257 8258'struct tree_function_decl' 8259 This structure inherits from 'struct tree_decl_with_vis'. It is 8260 used to represent 'FUNCTION_DECL'. 8261 8262 8263File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 8264 826510.4.2.2 Adding new DECL node types 8266................................... 8267 8268Adding a new 'DECL' tree consists of the following steps 8269 8270Add a new tree code for the 'DECL' node 8271 For language specific 'DECL' nodes, there is a '.def' file in each 8272 frontend directory where the tree code should be added. For 'DECL' 8273 nodes that are part of the middle-end, the code should be added to 8274 'tree.def'. 8275 8276Create a new structure type for the 'DECL' node 8277 These structures should inherit from one of the existing structures 8278 in the language hierarchy by using that structure as the first 8279 member. 8280 8281 struct tree_foo_decl 8282 { 8283 struct tree_decl_with_vis common; 8284 } 8285 8286 Would create a structure name 'tree_foo_decl' that inherits from 8287 'struct tree_decl_with_vis'. 8288 8289 For language specific 'DECL' nodes, this new structure type should 8290 go in the appropriate '.h' file. For 'DECL' nodes that are part of 8291 the middle-end, the structure type should go in 'tree.h'. 8292 8293Add a member to the tree structure enumerator for the node 8294 For garbage collection and dynamic checking purposes, each 'DECL' 8295 node structure type is required to have a unique enumerator value 8296 specified with it. For language specific 'DECL' nodes, this new 8297 enumerator value should go in the appropriate '.def' file. For 8298 'DECL' nodes that are part of the middle-end, the enumerator values 8299 are specified in 'treestruct.def'. 8300 8301Update 'union tree_node' 8302 In order to make your new structure type usable, it must be added 8303 to 'union tree_node'. For language specific 'DECL' nodes, a new 8304 entry should be added to the appropriate '.h' file of the form 8305 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 8306 For 'DECL' nodes that are part of the middle-end, the additional 8307 member goes directly into 'union tree_node' in 'tree.h'. 8308 8309Update dynamic checking info 8310 In order to be able to check whether accessing a named portion of 8311 'union tree_node' is legal, and whether a certain 'DECL' node 8312 contains one of the enumerated 'DECL' node structures in the 8313 hierarchy, a simple lookup table is used. This lookup table needs 8314 to be kept up to date with the tree structure hierarchy, or else 8315 checking and containment macros will fail inappropriately. 8316 8317 For language specific 'DECL' nodes, their is an 'init_ts' function 8318 in an appropriate '.c' file, which initializes the lookup table. 8319 Code setting up the table for new 'DECL' nodes should be added 8320 there. For each 'DECL' tree code and enumerator value representing 8321 a member of the inheritance hierarchy, the table should contain 1 8322 if that tree code inherits (directly or indirectly) from that 8323 member. Thus, a 'FOO_DECL' node derived from 'struct 8324 decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up 8325 as follows 8326 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 8327 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 8328 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 8329 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 8330 8331 For 'DECL' nodes that are part of the middle-end, the setup code 8332 goes into 'tree.c'. 8333 8334Add macros to access any new fields and flags 8335 8336 Each added field or flag should have a macro that is used to access 8337 it, that performs appropriate checking to ensure only the right 8338 type of 'DECL' nodes access the field. 8339 8340 These macros generally take the following form 8341 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 8342 However, if the structure is simply a base class for further 8343 structures, something like the following should be used 8344 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 8345 #define BASE_STRUCT_FIELDNAME(NODE) \ 8346 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 8347 8348 Reading them from the generated 'all-tree.def' file (which in turn 8349 includes all the 'tree.def' files), 'gencheck.c' is used during 8350 GCC's build to generate the '*_CHECK' macros for all tree codes. 8351 8352 8353File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 8354 835510.5 Attributes in trees 8356======================== 8357 8358Attributes, as specified using the '__attribute__' keyword, are 8359represented internally as a 'TREE_LIST'. The 'TREE_PURPOSE' is the name 8360of the attribute, as an 'IDENTIFIER_NODE'. The 'TREE_VALUE' is a 8361'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if 8362there are no arguments; the arguments are stored as the 'TREE_VALUE' of 8363successive entries in the list, and may be identifiers or expressions. 8364The 'TREE_CHAIN' of the attribute is the next attribute in a list of 8365attributes applying to the same declaration or type, or 'NULL_TREE' if 8366there are no further attributes in the list. 8367 8368 Attributes may be attached to declarations and to types; these 8369attributes may be accessed with the following macros. All attributes 8370are stored in this way, and many also cause other changes to the 8371declaration or type or to other internal compiler data structures. 8372 8373 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 8374 This macro returns the attributes on the declaration DECL. 8375 8376 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 8377 This macro returns the attributes on the type TYPE. 8378 8379 8380File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 8381 838210.6 Expressions 8383================ 8384 8385The internal representation for expressions is for the most part quite 8386straightforward. However, there are a few facts that one must bear in 8387mind. In particular, the expression "tree" is actually a directed 8388acyclic graph. (For example there may be many references to the integer 8389constant zero throughout the source program; many of these will be 8390represented by the same expression node.) You should not rely on 8391certain kinds of node being shared, nor should you rely on certain kinds 8392of nodes being unshared. 8393 8394 The following macros can be used with all expression nodes: 8395 8396'TREE_TYPE' 8397 Returns the type of the expression. This value may not be 8398 precisely the same type that would be given the expression in the 8399 original program. 8400 8401 In what follows, some nodes that one might expect to always have type 8402'bool' are documented to have either integral or boolean type. At some 8403point in the future, the C front end may also make use of this same 8404intermediate representation, and at this point these nodes will 8405certainly have integral type. The previous sentence is not meant to 8406imply that the C++ front end does not or will not give these nodes 8407integral type. 8408 8409 Below, we list the various kinds of expression nodes. Except where 8410noted otherwise, the operands to an expression are accessed using the 8411'TREE_OPERAND' macro. For example, to access the first operand to a 8412binary plus expression 'expr', use: 8413 8414 TREE_OPERAND (expr, 0) 8415 8416 As this example indicates, the operands are zero-indexed. 8417 8418* Menu: 8419 8420* Constants: Constant expressions. 8421* Storage References:: 8422* Unary and Binary Expressions:: 8423* Vectors:: 8424 8425 8426File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 8427 842810.6.1 Constant expressions 8429--------------------------- 8430 8431The table below begins with constants, moves on to unary expressions, 8432then proceeds to binary expressions, and concludes with various other 8433kinds of expressions: 8434 8435'INTEGER_CST' 8436 These nodes represent integer constants. Note that the type of 8437 these constants is obtained with 'TREE_TYPE'; they are not always 8438 of type 'int'. In particular, 'char' constants are represented 8439 with 'INTEGER_CST' nodes. The value of the integer constant 'e' is 8440 represented in an array of HOST_WIDE_INT. There are enough elements 8441 in the array to represent the value without taking extra elements 8442 for redundant 0s or -1. The number of elements used to represent 8443 'e' is available via 'TREE_INT_CST_NUNITS'. Element 'i' can be 8444 extracted by using 'TREE_INT_CST_ELT (e, i)'. 'TREE_INT_CST_LOW' 8445 is a shorthand for 'TREE_INT_CST_ELT (e, 0)'. 8446 8447 The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used 8448 to tell if the value is small enough to fit in a signed 8449 HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively. The value 8450 can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'. 8451 8452'REAL_CST' 8453 8454 FIXME: Talk about how to obtain representations of this constant, 8455 do comparisons, and so forth. 8456 8457'FIXED_CST' 8458 8459 These nodes represent fixed-point constants. The type of these 8460 constants is obtained with 'TREE_TYPE'. 'TREE_FIXED_CST_PTR' 8461 points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the 8462 structure itself. 'struct fixed_value' contains 'data' with the 8463 size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated 8464 fixed-point machine mode for 'data'. 8465 8466'COMPLEX_CST' 8467 These nodes are used to represent complex number constants, that is 8468 a '__complex__' whose parts are constant nodes. The 8469 'TREE_REALPART' and 'TREE_IMAGPART' return the real and the 8470 imaginary parts respectively. 8471 8472'VECTOR_CST' 8473 These nodes are used to represent vector constants, whose parts are 8474 constant nodes. Each individual constant node is either an integer 8475 or a double constant node. The first operand is a 'TREE_LIST' of 8476 the constant nodes and is accessed through 'TREE_VECTOR_CST_ELTS'. 8477 8478'STRING_CST' 8479 These nodes represent string-constants. The 'TREE_STRING_LENGTH' 8480 returns the length of the string, as an 'int'. The 8481 'TREE_STRING_POINTER' is a 'char*' containing the string itself. 8482 The string may not be 'NUL'-terminated, and it may contain embedded 8483 'NUL' characters. Therefore, the 'TREE_STRING_LENGTH' includes the 8484 trailing 'NUL' if it is present. 8485 8486 For wide string constants, the 'TREE_STRING_LENGTH' is the number 8487 of bytes in the string, and the 'TREE_STRING_POINTER' points to an 8488 array of the bytes of the string, as represented on the target 8489 system (that is, as integers in the target endianness). Wide and 8490 non-wide string constants are distinguished only by the 'TREE_TYPE' 8491 of the 'STRING_CST'. 8492 8493 FIXME: The formats of string constants are not well-defined when 8494 the target system bytes are not the same width as host system 8495 bytes. 8496 8497 8498File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 8499 850010.6.2 References to storage 8501---------------------------- 8502 8503'ARRAY_REF' 8504 These nodes represent array accesses. The first operand is the 8505 array; the second is the index. To calculate the address of the 8506 memory accessed, you must scale the index by the size of the type 8507 of the array elements. The type of these expressions must be the 8508 type of a component of the array. The third and fourth operands 8509 are used after gimplification to represent the lower bound and 8510 component size but should not be used directly; call 8511 'array_ref_low_bound' and 'array_ref_element_size' instead. 8512 8513'ARRAY_RANGE_REF' 8514 These nodes represent access to a range (or "slice") of an array. 8515 The operands are the same as that for 'ARRAY_REF' and have the same 8516 meanings. The type of these expressions must be an array whose 8517 component type is the same as that of the first operand. The range 8518 of that array type determines the amount of data these expressions 8519 access. 8520 8521'TARGET_MEM_REF' 8522 These nodes represent memory accesses whose address directly map to 8523 an addressing mode of the target architecture. The first argument 8524 is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed 8525 address. The second argument is 'TMR_BASE' and the third one is 8526 'TMR_INDEX'. The fourth argument is 'TMR_STEP' and must be an 8527 'INTEGER_CST'. The fifth argument is 'TMR_OFFSET' and must be an 8528 'INTEGER_CST'. Any of the arguments may be NULL if the appropriate 8529 component does not appear in the address. Address of the 8530 'TARGET_MEM_REF' is determined in the following way. 8531 8532 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 8533 8534 The sixth argument is the reference to the original memory access, 8535 which is preserved for the purposes of the RTL alias analysis. The 8536 seventh argument is a tag representing the results of tree level 8537 alias analysis. 8538 8539'ADDR_EXPR' 8540 These nodes are used to represent the address of an object. (These 8541 expressions will always have pointer or reference type.) The 8542 operand may be another expression, or it may be a declaration. 8543 8544 As an extension, GCC allows users to take the address of a label. 8545 In this case, the operand of the 'ADDR_EXPR' will be a 8546 'LABEL_DECL'. The type of such an expression is 'void*'. 8547 8548 If the object addressed is not an lvalue, a temporary is created, 8549 and the address of the temporary is used. 8550 8551'INDIRECT_REF' 8552 These nodes are used to represent the object pointed to by a 8553 pointer. The operand is the pointer being dereferenced; it will 8554 always have pointer or reference type. 8555 8556'MEM_REF' 8557 These nodes are used to represent the object pointed to by a 8558 pointer offset by a constant. The first operand is the pointer 8559 being dereferenced; it will always have pointer or reference type. 8560 The second operand is a pointer constant. Its type is specifying 8561 the type to be used for type-based alias analysis. 8562 8563'COMPONENT_REF' 8564 These nodes represent non-static data member accesses. The first 8565 operand is the object (rather than a pointer to it); the second 8566 operand is the 'FIELD_DECL' for the data member. The third operand 8567 represents the byte offset of the field, but should not be used 8568 directly; call 'component_ref_field_offset' instead. 8569 8570 8571File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 8572 857310.6.3 Unary and Binary Expressions 8574----------------------------------- 8575 8576'NEGATE_EXPR' 8577 These nodes represent unary negation of the single operand, for 8578 both integer and floating-point types. The type of negation can be 8579 determined by looking at the type of the expression. 8580 8581 The behavior of this operation on signed arithmetic overflow is 8582 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8583 8584'ABS_EXPR' 8585 These nodes represent the absolute value of the single operand, for 8586 both integer and floating-point types. This is typically used to 8587 implement the 'abs', 'labs' and 'llabs' builtins for integer types, 8588 and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point 8589 types. The type of abs operation can be determined by looking at 8590 the type of the expression. 8591 8592 This node is not used for complex types. To represent the modulus 8593 or complex abs of a complex value, use the 'BUILT_IN_CABS', 8594 'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement 8595 the C99 'cabs', 'cabsf' and 'cabsl' built-in functions. 8596 8597'BIT_NOT_EXPR' 8598 These nodes represent bitwise complement, and will always have 8599 integral type. The only operand is the value to be complemented. 8600 8601'TRUTH_NOT_EXPR' 8602 These nodes represent logical negation, and will always have 8603 integral (or boolean) type. The operand is the value being 8604 negated. The type of the operand and that of the result are always 8605 of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 8606 8607'PREDECREMENT_EXPR' 8608'PREINCREMENT_EXPR' 8609'POSTDECREMENT_EXPR' 8610'POSTINCREMENT_EXPR' 8611 These nodes represent increment and decrement expressions. The 8612 value of the single operand is computed, and the operand 8613 incremented or decremented. In the case of 'PREDECREMENT_EXPR' and 8614 'PREINCREMENT_EXPR', the value of the expression is the value 8615 resulting after the increment or decrement; in the case of 8616 'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before 8617 the increment or decrement occurs. The type of the operand, like 8618 that of the result, will be either integral, boolean, or 8619 floating-point. 8620 8621'FIX_TRUNC_EXPR' 8622 These nodes represent conversion of a floating-point value to an 8623 integer. The single operand will have a floating-point type, while 8624 the complete expression will have an integral (or boolean) type. 8625 The operand is rounded towards zero. 8626 8627'FLOAT_EXPR' 8628 These nodes represent conversion of an integral (or boolean) value 8629 to a floating-point value. The single operand will have integral 8630 type, while the complete expression will have a floating-point 8631 type. 8632 8633 FIXME: How is the operand supposed to be rounded? Is this 8634 dependent on '-mieee'? 8635 8636'COMPLEX_EXPR' 8637 These nodes are used to represent complex numbers constructed from 8638 two expressions of the same (integer or real) type. The first 8639 operand is the real part and the second operand is the imaginary 8640 part. 8641 8642'CONJ_EXPR' 8643 These nodes represent the conjugate of their operand. 8644 8645'REALPART_EXPR' 8646'IMAGPART_EXPR' 8647 These nodes represent respectively the real and the imaginary parts 8648 of complex numbers (their sole argument). 8649 8650'NON_LVALUE_EXPR' 8651 These nodes indicate that their one and only operand is not an 8652 lvalue. A back end can treat these identically to the single 8653 operand. 8654 8655'NOP_EXPR' 8656 These nodes are used to represent conversions that do not require 8657 any code-generation. For example, conversion of a 'char*' to an 8658 'int*' does not require any code be generated; such a conversion is 8659 represented by a 'NOP_EXPR'. The single operand is the expression 8660 to be converted. The conversion from a pointer to a reference is 8661 also represented with a 'NOP_EXPR'. 8662 8663'CONVERT_EXPR' 8664 These nodes are similar to 'NOP_EXPR's, but are used in those 8665 situations where code may need to be generated. For example, if an 8666 'int*' is converted to an 'int' code may need to be generated on 8667 some platforms. These nodes are never used for C++-specific 8668 conversions, like conversions between pointers to different classes 8669 in an inheritance hierarchy. Any adjustments that need to be made 8670 in such cases are always indicated explicitly. Similarly, a 8671 user-defined conversion is never represented by a 'CONVERT_EXPR'; 8672 instead, the function calls are made explicit. 8673 8674'FIXED_CONVERT_EXPR' 8675 These nodes are used to represent conversions that involve 8676 fixed-point values. For example, from a fixed-point value to 8677 another fixed-point value, from an integer to a fixed-point value, 8678 from a fixed-point value to an integer, from a floating-point value 8679 to a fixed-point value, or from a fixed-point value to a 8680 floating-point value. 8681 8682'LSHIFT_EXPR' 8683'RSHIFT_EXPR' 8684 These nodes represent left and right shifts, respectively. The 8685 first operand is the value to shift; it will always be of integral 8686 type. The second operand is an expression for the number of bits 8687 by which to shift. Right shift should be treated as arithmetic, 8688 i.e., the high-order bits should be zero-filled when the expression 8689 has unsigned type and filled with the sign bit when the expression 8690 has signed type. Note that the result is undefined if the second 8691 operand is larger than or equal to the first operand's type size. 8692 Unlike most nodes, these can have a vector as first operand and a 8693 scalar as second operand. 8694 8695'BIT_IOR_EXPR' 8696'BIT_XOR_EXPR' 8697'BIT_AND_EXPR' 8698 These nodes represent bitwise inclusive or, bitwise exclusive or, 8699 and bitwise and, respectively. Both operands will always have 8700 integral type. 8701 8702'TRUTH_ANDIF_EXPR' 8703'TRUTH_ORIF_EXPR' 8704 These nodes represent logical "and" and logical "or", respectively. 8705 These operators are not strict; i.e., the second operand is 8706 evaluated only if the value of the expression is not determined by 8707 evaluation of the first operand. The type of the operands and that 8708 of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 8709 8710'TRUTH_AND_EXPR' 8711'TRUTH_OR_EXPR' 8712'TRUTH_XOR_EXPR' 8713 These nodes represent logical and, logical or, and logical 8714 exclusive or. They are strict; both arguments are always 8715 evaluated. There are no corresponding operators in C or C++, but 8716 the front end will sometimes generate these expressions anyhow, if 8717 it can tell that strictness does not matter. The type of the 8718 operands and that of the result are always of 'BOOLEAN_TYPE' or 8719 'INTEGER_TYPE'. 8720 8721'POINTER_PLUS_EXPR' 8722 This node represents pointer arithmetic. The first operand is 8723 always a pointer/reference type. The second operand is always an 8724 unsigned integer type compatible with sizetype. This is the only 8725 binary arithmetic operand that can operate on pointer types. 8726 8727'PLUS_EXPR' 8728'MINUS_EXPR' 8729'MULT_EXPR' 8730 These nodes represent various binary arithmetic operations. 8731 Respectively, these operations are addition, subtraction (of the 8732 second operand from the first) and multiplication. Their operands 8733 may have either integral or floating type, but there will never be 8734 case in which one operand is of floating type and the other is of 8735 integral type. 8736 8737 The behavior of these operations on signed arithmetic overflow is 8738 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8739 8740'MULT_HIGHPART_EXPR' 8741 This node represents the "high-part" of a widening multiplication. 8742 For an integral type with B bits of precision, the result is the 8743 most significant B bits of the full 2B product. 8744 8745'RDIV_EXPR' 8746 This node represents a floating point division operation. 8747 8748'TRUNC_DIV_EXPR' 8749'FLOOR_DIV_EXPR' 8750'CEIL_DIV_EXPR' 8751'ROUND_DIV_EXPR' 8752 These nodes represent integer division operations that return an 8753 integer result. 'TRUNC_DIV_EXPR' rounds towards zero, 8754 'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR' 8755 rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the 8756 closest integer. Integer division in C and C++ is truncating, i.e. 8757 'TRUNC_DIV_EXPR'. 8758 8759 The behavior of these operations on signed arithmetic overflow, 8760 when dividing the minimum signed integer by minus one, is 8761 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8762 8763'TRUNC_MOD_EXPR' 8764'FLOOR_MOD_EXPR' 8765'CEIL_MOD_EXPR' 8766'ROUND_MOD_EXPR' 8767 These nodes represent the integer remainder or modulus operation. 8768 The integer modulus of two operands 'a' and 'b' is defined as 'a - 8769 (a/b)*b' where the division calculated using the corresponding 8770 division operator. Hence for 'TRUNC_MOD_EXPR' this definition 8771 assumes division using truncation towards zero, i.e. 8772 'TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 8773 division, i.e. 'TRUNC_MOD_EXPR'. 8774 8775'EXACT_DIV_EXPR' 8776 The 'EXACT_DIV_EXPR' code is used to represent integer divisions 8777 where the numerator is known to be an exact multiple of the 8778 denominator. This allows the backend to choose between the faster 8779 of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the 8780 current target. 8781 8782'LT_EXPR' 8783'LE_EXPR' 8784'GT_EXPR' 8785'GE_EXPR' 8786'EQ_EXPR' 8787'NE_EXPR' 8788 These nodes represent the less than, less than or equal to, greater 8789 than, greater than or equal to, equal, and not equal comparison 8790 operators. The first and second operands will either be both of 8791 integral type, both of floating type or both of vector type. The 8792 result type of these expressions will always be of integral, 8793 boolean or signed integral vector type. These operations return 8794 the result type's zero value for false, the result type's one value 8795 for true, and a vector whose elements are zero (false) or minus one 8796 (true) for vectors. 8797 8798 For floating point comparisons, if we honor IEEE NaNs and either 8799 operand is NaN, then 'NE_EXPR' always returns true and the 8800 remaining operators always return false. On some targets, 8801 comparisons against an IEEE NaN, other than equality and 8802 inequality, may generate a floating point exception. 8803 8804'ORDERED_EXPR' 8805'UNORDERED_EXPR' 8806 These nodes represent non-trapping ordered and unordered comparison 8807 operators. These operations take two floating point operands and 8808 determine whether they are ordered or unordered relative to each 8809 other. If either operand is an IEEE NaN, their comparison is 8810 defined to be unordered, otherwise the comparison is defined to be 8811 ordered. The result type of these expressions will always be of 8812 integral or boolean type. These operations return the result 8813 type's zero value for false, and the result type's one value for 8814 true. 8815 8816'UNLT_EXPR' 8817'UNLE_EXPR' 8818'UNGT_EXPR' 8819'UNGE_EXPR' 8820'UNEQ_EXPR' 8821'LTGT_EXPR' 8822 These nodes represent the unordered comparison operators. These 8823 operations take two floating point operands and determine whether 8824 the operands are unordered or are less than, less than or equal to, 8825 greater than, greater than or equal to, or equal respectively. For 8826 example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN 8827 or the first operand is less than the second. With the possible 8828 exception of 'LTGT_EXPR', all of these operations are guaranteed 8829 not to generate a floating point exception. The result type of 8830 these expressions will always be of integral or boolean type. 8831 These operations return the result type's zero value for false, and 8832 the result type's one value for true. 8833 8834'MODIFY_EXPR' 8835 These nodes represent assignment. The left-hand side is the first 8836 operand; the right-hand side is the second operand. The left-hand 8837 side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or 8838 other lvalue. 8839 8840 These nodes are used to represent not only assignment with '=' but 8841 also compound assignments (like '+='), by reduction to '=' 8842 assignment. In other words, the representation for 'i += 3' looks 8843 just like that for 'i = i + 3'. 8844 8845'INIT_EXPR' 8846 These nodes are just like 'MODIFY_EXPR', but are used only when a 8847 variable is initialized, rather than assigned to subsequently. 8848 This means that we can assume that the target of the initialization 8849 is not used in computing its own value; any reference to the lhs in 8850 computing the rhs is undefined. 8851 8852'COMPOUND_EXPR' 8853 These nodes represent comma-expressions. The first operand is an 8854 expression whose value is computed and thrown away prior to the 8855 evaluation of the second operand. The value of the entire 8856 expression is the value of the second operand. 8857 8858'COND_EXPR' 8859 These nodes represent '?:' expressions. The first operand is of 8860 boolean or integral type. If it evaluates to a nonzero value, the 8861 second operand should be evaluated, and returned as the value of 8862 the expression. Otherwise, the third operand is evaluated, and 8863 returned as the value of the expression. 8864 8865 The second operand must have the same type as the entire 8866 expression, unless it unconditionally throws an exception or calls 8867 a noreturn function, in which case it should have void type. The 8868 same constraints apply to the third operand. This allows array 8869 bounds checks to be represented conveniently as '(i >= 0 && i < 10) 8870 ? i : abort()'. 8871 8872 As a GNU extension, the C language front-ends allow the second 8873 operand of the '?:' operator may be omitted in the source. For 8874 example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x' 8875 is an expression without side-effects. In the tree representation, 8876 however, the second operand is always present, possibly protected 8877 by 'SAVE_EXPR' if the first argument does cause side-effects. 8878 8879'CALL_EXPR' 8880 These nodes are used to represent calls to functions, including 8881 non-static member functions. 'CALL_EXPR's are implemented as 8882 expression nodes with a variable number of operands. Rather than 8883 using 'TREE_OPERAND' to extract them, it is preferable to use the 8884 specialized accessor macros and functions that operate specifically 8885 on 'CALL_EXPR' nodes. 8886 8887 'CALL_EXPR_FN' returns a pointer to the function to call; it is 8888 always an expression whose type is a 'POINTER_TYPE'. 8889 8890 The number of arguments to the call is returned by 8891 'call_expr_nargs', while the arguments themselves can be accessed 8892 with the 'CALL_EXPR_ARG' macro. The arguments are zero-indexed and 8893 numbered left-to-right. You can iterate over the arguments using 8894 'FOR_EACH_CALL_EXPR_ARG', as in: 8895 8896 tree call, arg; 8897 call_expr_arg_iterator iter; 8898 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 8899 /* arg is bound to successive arguments of call. */ 8900 ...; 8901 8902 For non-static member functions, there will be an operand 8903 corresponding to the 'this' pointer. There will always be 8904 expressions corresponding to all of the arguments, even if the 8905 function is declared with default arguments and some arguments are 8906 not explicitly provided at the call sites. 8907 8908 'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is 8909 used to implement nested functions. This operand is otherwise 8910 null. 8911 8912'CLEANUP_POINT_EXPR' 8913 These nodes represent full-expressions. The single operand is an 8914 expression to evaluate. Any destructor calls engendered by the 8915 creation of temporaries during the evaluation of that expression 8916 should be performed immediately after the expression is evaluated. 8917 8918'CONSTRUCTOR' 8919 These nodes represent the brace-enclosed initializers for a 8920 structure or an array. They contain a sequence of component values 8921 made out of a vector of constructor_elt, which is a ('INDEX', 8922 'VALUE') pair. 8923 8924 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE', 8925 'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in 8926 the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the 8927 expression used to initialize that field. 8928 8929 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then 8930 the 'INDEX' of each node in the sequence will be an 'INTEGER_CST' 8931 or a 'RANGE_EXPR' of two 'INTEGER_CST's. A single 'INTEGER_CST' 8932 indicates which element of the array is being assigned to. A 8933 'RANGE_EXPR' indicates an inclusive range of elements to 8934 initialize. In both cases the 'VALUE' is the corresponding 8935 initializer. It is re-evaluated for each element of a 8936 'RANGE_EXPR'. If the 'INDEX' is 'NULL_TREE', then the initializer 8937 is for the next available array element. 8938 8939 In the front end, you should not depend on the fields appearing in 8940 any particular order. However, in the middle end, fields must 8941 appear in declaration order. You should not assume that all fields 8942 will be represented. Unrepresented fields will be cleared 8943 (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which 8944 case their value becomes undefined. 8945 8946'COMPOUND_LITERAL_EXPR' 8947 These nodes represent ISO C99 compound literals. The 8948 'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an 8949 anonymous 'VAR_DECL' for the unnamed object represented by the 8950 compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a 8951 'CONSTRUCTOR' representing the brace-enclosed list of initializers 8952 in the compound literal. That anonymous 'VAR_DECL' can also be 8953 accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro. 8954 8955'SAVE_EXPR' 8956 8957 A 'SAVE_EXPR' represents an expression (possibly involving 8958 side-effects) that is used more than once. The side-effects should 8959 occur only the first time the expression is evaluated. Subsequent 8960 uses should just reuse the computed value. The first operand to 8961 the 'SAVE_EXPR' is the expression to evaluate. The side-effects 8962 should be executed where the 'SAVE_EXPR' is first encountered in a 8963 depth-first preorder traversal of the expression tree. 8964 8965'TARGET_EXPR' 8966 A 'TARGET_EXPR' represents a temporary object. The first operand 8967 is a 'VAR_DECL' for the temporary variable. The second operand is 8968 the initializer for the temporary. The initializer is evaluated 8969 and, if non-void, copied (bitwise) into the temporary. If the 8970 initializer is void, that means that it will perform the 8971 initialization itself. 8972 8973 Often, a 'TARGET_EXPR' occurs on the right-hand side of an 8974 assignment, or as the second operand to a comma-expression which is 8975 itself the right-hand side of an assignment, etc. In this case, we 8976 say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is 8977 "orphaned". For a normal 'TARGET_EXPR' the temporary variable 8978 should be treated as an alias for the left-hand side of the 8979 assignment, rather than as a new temporary variable. 8980 8981 The third operand to the 'TARGET_EXPR', if present, is a 8982 cleanup-expression (i.e., destructor call) for the temporary. If 8983 this expression is orphaned, then this expression must be executed 8984 when the statement containing this expression is complete. These 8985 cleanups must always be executed in the order opposite to that in 8986 which they were encountered. Note that if a temporary is created 8987 on one branch of a conditional operator (i.e., in the second or 8988 third operand to a 'COND_EXPR'), the cleanup must be run only if 8989 that branch is actually executed. 8990 8991'VA_ARG_EXPR' 8992 This node is used to implement support for the C/C++ variable 8993 argument-list mechanism. It represents expressions like 'va_arg 8994 (ap, type)'. Its 'TREE_TYPE' yields the tree representation for 8995 'type' and its sole argument yields the representation for 'ap'. 8996 8997'ANNOTATE_EXPR' 8998 This node is used to attach markers to an expression. The first 8999 operand is the annotated expression, the second is an 'INTEGER_CST' 9000 with a value from 'enum annot_expr_kind'. 9001 9002 9003File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 9004 900510.6.4 Vectors 9006-------------- 9007 9008'VEC_LSHIFT_EXPR' 9009'VEC_RSHIFT_EXPR' 9010 These nodes represent whole vector left and right shifts, 9011 respectively. The first operand is the vector to shift; it will 9012 always be of vector type. The second operand is an expression for 9013 the number of bits by which to shift. Note that the result is 9014 undefined if the second operand is larger than or equal to the 9015 first operand's type size. 9016 9017'VEC_WIDEN_MULT_HI_EXPR' 9018'VEC_WIDEN_MULT_LO_EXPR' 9019 These nodes represent widening vector multiplication of the high 9020 and low parts of the two input vectors, respectively. Their 9021 operands are vectors that contain the same number of elements ('N') 9022 of the same integral type. The result is a vector that contains 9023 half as many elements, of an integral type whose size is twice as 9024 wide. In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2' 9025 elements of the two vector are multiplied to produce the vector of 9026 'N/2' products. In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low 9027 'N/2' elements of the two vector are multiplied to produce the 9028 vector of 'N/2' products. 9029 9030'VEC_UNPACK_HI_EXPR' 9031'VEC_UNPACK_LO_EXPR' 9032 These nodes represent unpacking of the high and low parts of the 9033 input vector, respectively. The single operand is a vector that 9034 contains 'N' elements of the same integral or floating point type. 9035 The result is a vector that contains half as many elements, of an 9036 integral or floating point type whose size is twice as wide. In 9037 the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the 9038 vector are extracted and widened (promoted). In the case of 9039 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are 9040 extracted and widened (promoted). 9041 9042'VEC_UNPACK_FLOAT_HI_EXPR' 9043'VEC_UNPACK_FLOAT_LO_EXPR' 9044 These nodes represent unpacking of the high and low parts of the 9045 input vector, where the values are converted from fixed point to 9046 floating point. The single operand is a vector that contains 'N' 9047 elements of the same integral type. The result is a vector that 9048 contains half as many elements of a floating point type whose size 9049 is twice as wide. In the case of 'VEC_UNPACK_HI_EXPR' the high 9050 'N/2' elements of the vector are extracted, converted and widened. 9051 In the case of 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the 9052 vector are extracted, converted and widened. 9053 9054'VEC_PACK_TRUNC_EXPR' 9055 This node represents packing of truncated elements of the two input 9056 vectors into the output vector. Input operands are vectors that 9057 contain the same number of elements of the same integral or 9058 floating point type. The result is a vector that contains twice as 9059 many elements of an integral or floating point type whose size is 9060 half as wide. The elements of the two vectors are demoted and 9061 merged (concatenated) to form the output vector. 9062 9063'VEC_PACK_SAT_EXPR' 9064 This node represents packing of elements of the two input vectors 9065 into the output vector using saturation. Input operands are 9066 vectors that contain the same number of elements of the same 9067 integral type. The result is a vector that contains twice as many 9068 elements of an integral type whose size is half as wide. The 9069 elements of the two vectors are demoted and merged (concatenated) 9070 to form the output vector. 9071 9072'VEC_PACK_FIX_TRUNC_EXPR' 9073 This node represents packing of elements of the two input vectors 9074 into the output vector, where the values are converted from 9075 floating point to fixed point. Input operands are vectors that 9076 contain the same number of elements of a floating point type. The 9077 result is a vector that contains twice as many elements of an 9078 integral type whose size is half as wide. The elements of the two 9079 vectors are merged (concatenated) to form the output vector. 9080 9081'VEC_COND_EXPR' 9082 These nodes represent '?:' expressions. The three operands must be 9083 vectors of the same size and number of elements. The second and 9084 third operands must have the same type as the entire expression. 9085 The first operand is of signed integral vector type. If an element 9086 of the first operand evaluates to a zero value, the corresponding 9087 element of the result is taken from the third operand. If it 9088 evaluates to a minus one value, it is taken from the second 9089 operand. It should never evaluate to any other value currently, 9090 but optimizations should not rely on that property. In contrast 9091 with a 'COND_EXPR', all operands are always evaluated. 9092 9093'SAD_EXPR' 9094 This node represents the Sum of Absolute Differences operation. 9095 The three operands must be vectors of integral types. The first 9096 and second operand must have the same type. The size of the vector 9097 element of the third operand must be at lease twice of the size of 9098 the vector element of the first and second one. The SAD is 9099 calculated between the first and second operands, added to the 9100 third operand, and returned. 9101 9102 9103File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 9104 910510.7 Statements 9106=============== 9107 9108Most statements in GIMPLE are assignment statements, represented by 9109'GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 9110a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'. 9111 9112 There are also several varieties of complex statements. 9113 9114* Menu: 9115 9116* Basic Statements:: 9117* Blocks:: 9118* Statement Sequences:: 9119* Empty Statements:: 9120* Jumps:: 9121* Cleanups:: 9122* OpenMP:: 9123* OpenACC:: 9124 9125 9126File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 9127 912810.7.1 Basic Statements 9129----------------------- 9130 9131'ASM_EXPR' 9132 9133 Used to represent an inline assembly statement. For an inline 9134 assembly statement like: 9135 asm ("mov x, y"); 9136 The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x, 9137 y"'. If the original statement made use of the extended-assembly 9138 syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will 9139 be the outputs, inputs, and clobbers for the statement, represented 9140 as 'STRING_CST' nodes. The extended-assembly syntax looks like: 9141 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 9142 The first string is the 'ASM_STRING', containing the instruction 9143 template. The next two strings are the output and inputs, 9144 respectively; this statement has no clobbers. As this example 9145 indicates, "plain" assembly statements are merely a special case of 9146 extended assembly statements; they have no cv-qualifiers, outputs, 9147 inputs, or clobbers. All of the strings will be 'NUL'-terminated, 9148 and will contain no embedded 'NUL'-characters. 9149 9150 If the assembly statement is declared 'volatile', or if the 9151 statement was not an extended assembly statement, and is therefore 9152 implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold 9153 of the 'ASM_EXPR'. 9154 9155'DECL_EXPR' 9156 9157 Used to represent a local declaration. The 'DECL_EXPR_DECL' macro 9158 can be used to obtain the entity declared. This declaration may be 9159 a 'LABEL_DECL', indicating that the label declared is a local 9160 label. (As an extension, GCC allows the declaration of labels with 9161 scope.) In C, this declaration may be a 'FUNCTION_DECL', 9162 indicating the use of the GCC nested function extension. For more 9163 information, *note Functions::. 9164 9165'LABEL_EXPR' 9166 9167 Used to represent a label. The 'LABEL_DECL' declared by this 9168 statement can be obtained with the 'LABEL_EXPR_LABEL' macro. The 9169 'IDENTIFIER_NODE' giving the name of the label can be obtained from 9170 the 'LABEL_DECL' with 'DECL_NAME'. 9171 9172'GOTO_EXPR' 9173 9174 Used to represent a 'goto' statement. The 'GOTO_DESTINATION' will 9175 usually be a 'LABEL_DECL'. However, if the "computed goto" 9176 extension has been used, the 'GOTO_DESTINATION' will be an 9177 arbitrary expression indicating the destination. This expression 9178 will always have pointer type. 9179 9180'RETURN_EXPR' 9181 9182 Used to represent a 'return' statement. Operand 0 represents the 9183 value to return. It should either be the 'RESULT_DECL' for the 9184 containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the 9185 function's 'RESULT_DECL'. It will be 'NULL_TREE' if the statement 9186 was just 9187 return; 9188 9189'LOOP_EXPR' 9190 These nodes represent "infinite" loops. The 'LOOP_EXPR_BODY' 9191 represents the body of the loop. It should be executed forever, 9192 unless an 'EXIT_EXPR' is encountered. 9193 9194'EXIT_EXPR' 9195 These nodes represent conditional exits from the nearest enclosing 9196 'LOOP_EXPR'. The single operand is the condition; if it is 9197 nonzero, then the loop should be exited. An 'EXIT_EXPR' will only 9198 appear within a 'LOOP_EXPR'. 9199 9200'SWITCH_STMT' 9201 9202 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 9203 the expression on which the switch is occurring. See the 9204 documentation for an 'IF_STMT' for more information on the 9205 representation used for the condition. The 'SWITCH_STMT_BODY' is 9206 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 9207 original type of switch expression as given in the source, before 9208 any compiler conversions. 9209 9210'CASE_LABEL_EXPR' 9211 9212 Use to represent a 'case' label, range of 'case' labels, or a 9213 'default' label. If 'CASE_LOW' is 'NULL_TREE', then this is a 9214 'default' label. Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then 9215 this is an ordinary 'case' label. In this case, 'CASE_LOW' is an 9216 expression giving the value of the label. Both 'CASE_LOW' and 9217 'CASE_HIGH' are 'INTEGER_CST' nodes. These values will have the 9218 same type as the condition expression in the switch statement. 9219 9220 Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the 9221 statement is a range of case labels. Such statements originate 9222 with the extension that allows users to write things of the form: 9223 case 2 ... 5: 9224 The first value will be 'CASE_LOW', while the second will be 9225 'CASE_HIGH'. 9226 9227 9228File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 9229 923010.7.2 Blocks 9231------------- 9232 9233Block scopes and the variables they declare in GENERIC are expressed 9234using the 'BIND_EXPR' code, which in previous versions of GCC was 9235primarily used for the C statement-expression extension. 9236 9237 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration 9238order through their 'TREE_CHAIN' field. Any runtime initialization is 9239moved out of 'DECL_INITIAL' and into a statement in the controlled 9240block. When gimplifying from C or C++, this initialization replaces the 9241'DECL_STMT'. These variables will never require cleanups. The scope of 9242these variables is just the body 9243 9244 Variable-length arrays (VLAs) complicate this process, as their size 9245often refers to variables initialized earlier in the block. To handle 9246this, we currently split the block at that point, and move the VLA into 9247a new, inner 'BIND_EXPR'. This strategy may change in the future. 9248 9249 A C++ program will usually contain more 'BIND_EXPR's than there are 9250syntactic blocks in the source code, since several C++ constructs have 9251implicit scopes associated with them. On the other hand, although the 9252C++ front end uses pseudo-scopes to handle cleanups for objects with 9253destructors, these don't translate into the GIMPLE form; multiple 9254declarations at the same level use the same 'BIND_EXPR'. 9255 9256 9257File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 9258 925910.7.3 Statement Sequences 9260-------------------------- 9261 9262Multiple statements at the same nesting level are collected into a 9263'STATEMENT_LIST'. Statement lists are modified and traversed using the 9264interface in 'tree-iterator.h'. 9265 9266 9267File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 9268 926910.7.4 Empty Statements 9270----------------------- 9271 9272Whenever possible, statements with no effect are discarded. But if they 9273are nested within another construct which cannot be discarded for some 9274reason, they are instead replaced with an empty statement, generated by 9275'build_empty_stmt'. Initially, all empty statements were shared, after 9276the pattern of the Java front end, but this caused a lot of trouble in 9277practice. 9278 9279 An empty statement is represented as '(void)0'. 9280 9281 9282File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 9283 928410.7.5 Jumps 9285------------ 9286 9287Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'. 9288 9289 The operand of a 'GOTO_EXPR' must be either a label or a variable 9290containing the address to jump to. 9291 9292 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or 9293a 'MODIFY_EXPR' which sets the return value. It would be nice to move 9294the 'MODIFY_EXPR' into a separate statement, but the special return 9295semantics in 'expand_return' make that difficult. It may still happen 9296in the future, perhaps by moving most of that logic into 9297'expand_assignment'. 9298 9299 9300File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 9301 930210.7.6 Cleanups 9303--------------- 9304 9305Destructors for local C++ objects and similar dynamic cleanups are 9306represented in GIMPLE by a 'TRY_FINALLY_EXPR'. 'TRY_FINALLY_EXPR' has 9307two operands, both of which are a sequence of statements to execute. 9308The first sequence is executed. When it completes the second sequence 9309is executed. 9310 9311 The first sequence may complete in the following ways: 9312 9313 1. Execute the last statement in the sequence and fall off the end. 9314 9315 2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside 9316 the sequence. 9317 9318 3. Execute a return statement ('RETURN_EXPR'). 9319 9320 4. Throw an exception. This is currently not explicitly represented 9321 in GIMPLE. 9322 9323 The second sequence is not executed if the first sequence completes by 9324calling 'setjmp' or 'exit' or any other function that does not return. 9325The second sequence is also not executed if the first sequence completes 9326via a non-local goto or a computed goto (in general the compiler does 9327not know whether such a goto statement exits the first sequence or not, 9328so we assume that it doesn't). 9329 9330 After the second sequence is executed, if it completes normally by 9331falling off the end, execution continues wherever the first sequence 9332would have continued, by falling off the end, or doing a goto, etc. 9333 9334 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 9335to appear on every edge out of the controlled block; this reduces the 9336freedom to move code across these edges. Therefore, the EH lowering 9337pass which runs before most of the optimization passes eliminates these 9338expressions by explicitly adding the cleanup to each edge. Rethrowing 9339the exception is represented using 'RESX_EXPR'. 9340 9341 9342File: gccint.info, Node: OpenMP, Next: OpenACC, Prev: Cleanups, Up: Statements 9343 934410.7.7 OpenMP 9345------------- 9346 9347All the statements starting with 'OMP_' represent directives and clauses 9348used by the OpenMP API <http://www.openmp.org/>. 9349 9350'OMP_PARALLEL' 9351 9352 Represents '#pragma omp parallel [clause1 ... clauseN]'. It has 9353 four operands: 9354 9355 Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High 9356 GIMPLE forms. It contains the body of code to be executed by all 9357 the threads. During GIMPLE lowering, this operand becomes 'NULL' 9358 and the body is emitted linearly after 'OMP_PARALLEL'. 9359 9360 Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated 9361 with the directive. 9362 9363 Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it 9364 contains the 'FUNCTION_DECL' for the function that will contain the 9365 body of the parallel region. 9366 9367 Operand 'OMP_PARALLEL_DATA_ARG' is also created by 9368 'pass_lower_omp'. If there are shared variables to be communicated 9369 to the children threads, this operand will contain the 'VAR_DECL' 9370 that contains all the shared values and variables. 9371 9372'OMP_FOR' 9373 9374 Represents '#pragma omp for [clause1 ... clauseN]'. It has six 9375 operands: 9376 9377 Operand 'OMP_FOR_BODY' contains the loop body. 9378 9379 Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with 9380 the directive. 9381 9382 Operand 'OMP_FOR_INIT' is the loop initialization code of the form 9383 'VAR = N1'. 9384 9385 Operand 'OMP_FOR_COND' is the loop conditional expression of the 9386 form 'VAR {<,>,<=,>=} N2'. 9387 9388 Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR 9389 {+=,-=} INCR'. 9390 9391 Operand 'OMP_FOR_PRE_BODY' contains side-effect code from operands 9392 'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'. These 9393 side-effects are part of the 'OMP_FOR' block but must be evaluated 9394 before the start of loop body. 9395 9396 The loop index variable 'VAR' must be a signed integer variable, 9397 which is implicitly private to each thread. Bounds 'N1' and 'N2' 9398 and the increment expression 'INCR' are required to be loop 9399 invariant integer expressions that are evaluated without any 9400 synchronization. The evaluation order, frequency of evaluation and 9401 side-effects are unspecified by the standard. 9402 9403'OMP_SECTIONS' 9404 9405 Represents '#pragma omp sections [clause1 ... clauseN]'. 9406 9407 Operand 'OMP_SECTIONS_BODY' contains the sections body, which in 9408 turn contains a set of 'OMP_SECTION' nodes for each of the 9409 concurrent sections delimited by '#pragma omp section'. 9410 9411 Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated 9412 with the directive. 9413 9414'OMP_SECTION' 9415 9416 Section delimiter for 'OMP_SECTIONS'. 9417 9418'OMP_SINGLE' 9419 9420 Represents '#pragma omp single'. 9421 9422 Operand 'OMP_SINGLE_BODY' contains the body of code to be executed 9423 by a single thread. 9424 9425 Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with 9426 the directive. 9427 9428'OMP_MASTER' 9429 9430 Represents '#pragma omp master'. 9431 9432 Operand 'OMP_MASTER_BODY' contains the body of code to be executed 9433 by the master thread. 9434 9435'OMP_ORDERED' 9436 9437 Represents '#pragma omp ordered'. 9438 9439 Operand 'OMP_ORDERED_BODY' contains the body of code to be executed 9440 in the sequential order dictated by the loop index variable. 9441 9442'OMP_CRITICAL' 9443 9444 Represents '#pragma omp critical [name]'. 9445 9446 Operand 'OMP_CRITICAL_BODY' is the critical section. 9447 9448 Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the 9449 critical section. 9450 9451'OMP_RETURN' 9452 9453 This does not represent any OpenMP directive, it is an artificial 9454 marker to indicate the end of the body of an OpenMP. It is used by 9455 the flow graph ('tree-cfg.c') and OpenMP region building code 9456 ('omp-low.c'). 9457 9458'OMP_CONTINUE' 9459 9460 Similarly, this instruction does not represent an OpenMP directive, 9461 it is used by 'OMP_FOR' (and similar codes) as well as 9462 'OMP_SECTIONS' to mark the place where the code needs to loop to 9463 the next iteration, or the next section, respectively. 9464 9465 In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'. 9466 But if there are cleanups that need to occur right after the 9467 looping body, it will be emitted between 'OMP_CONTINUE' and 9468 'OMP_RETURN'. 9469 9470'OMP_ATOMIC' 9471 9472 Represents '#pragma omp atomic'. 9473 9474 Operand 0 is the address at which the atomic operation is to be 9475 performed. 9476 9477 Operand 1 is the expression to evaluate. The gimplifier tries 9478 three alternative code generation strategies. Whenever possible, 9479 an atomic update built-in is used. If that fails, a 9480 compare-and-swap loop is attempted. If that also fails, a regular 9481 critical section around the expression is used. 9482 9483'OMP_CLAUSE' 9484 9485 Represents clauses associated with one of the 'OMP_' directives. 9486 Clauses are represented by separate subcodes defined in 'tree.h'. 9487 Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE', 9488 'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE', 9489 'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN', 9490 'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF', 9491 'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE', 9492 'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT', 9493 'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED', 9494 'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'. Each code 9495 represents the corresponding OpenMP clause. 9496 9497 Clauses associated with the same directive are chained together via 9498 'OMP_CLAUSE_CHAIN'. Those clauses that accept a list of variables 9499 are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'. 9500 Therefore, multiple variables under the same clause 'C' need to be 9501 represented as multiple 'C' clauses chained together. This 9502 facilitates adding new clauses during compilation. 9503 9504 9505File: gccint.info, Node: OpenACC, Prev: OpenMP, Up: Statements 9506 950710.7.8 OpenACC 9508-------------- 9509 9510All the statements starting with 'OACC_' represent directives and 9511clauses used by the OpenACC API <http://www.openacc.org/>. 9512 9513'OACC_CACHE' 9514 9515 Represents '#pragma acc cache (var ...)'. 9516 9517'OACC_DATA' 9518 9519 Represents '#pragma acc data [clause1 ... clauseN]'. 9520 9521'OACC_DECLARE' 9522 9523 Represents '#pragma acc declare [clause1 ... clauseN]'. 9524 9525'OACC_ENTER_DATA' 9526 9527 Represents '#pragma acc enter data [clause1 ... clauseN]'. 9528 9529'OACC_EXIT_DATA' 9530 9531 Represents '#pragma acc exit data [clause1 ... clauseN]'. 9532 9533'OACC_HOST_DATA' 9534 9535 Represents '#pragma acc host_data [clause1 ... clauseN]'. 9536 9537'OACC_KERNELS' 9538 9539 Represents '#pragma acc kernels [clause1 ... clauseN]'. 9540 9541'OACC_LOOP' 9542 9543 Represents '#pragma acc loop [clause1 ... clauseN]'. 9544 9545 See the description of the 'OMP_FOR' code. 9546 9547'OACC_PARALLEL' 9548 9549 Represents '#pragma acc parallel [clause1 ... clauseN]'. 9550 9551'OACC_UPDATE' 9552 9553 Represents '#pragma acc update [clause1 ... clauseN]'. 9554 9555 9556File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 9557 955810.8 Functions 9559============== 9560 9561A function is represented by a 'FUNCTION_DECL' node. It stores the 9562basic pieces of the function such as body, parameters, and return type 9563as well as information on the surrounding context, visibility, and 9564linkage. 9565 9566* Menu: 9567 9568* Function Basics:: Function names, body, and parameters. 9569* Function Properties:: Context, linkage, etc. 9570 9571 9572File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 9573 957410.8.1 Function Basics 9575---------------------- 9576 9577A function has four core parts: the name, the parameters, the result, 9578and the body. The following macros and functions access these parts of 9579a 'FUNCTION_DECL' as well as other basic features: 9580'DECL_NAME' 9581 This macro returns the unqualified name of the function, as an 9582 'IDENTIFIER_NODE'. For an instantiation of a function template, 9583 the 'DECL_NAME' is the unqualified name of the template, not 9584 something like 'f<int>'. The value of 'DECL_NAME' is undefined 9585 when used on a constructor, destructor, overloaded operator, or 9586 type-conversion operator, or any function that is implicitly 9587 generated by the compiler. See below for macros that can be used 9588 to distinguish these cases. 9589 9590'DECL_ASSEMBLER_NAME' 9591 This macro returns the mangled name of the function, also an 9592 'IDENTIFIER_NODE'. This name does not contain leading underscores 9593 on systems that prefix all identifiers with underscores. The 9594 mangled name is computed in the same way on all platforms; if 9595 special processing is required to deal with the object file format 9596 used on a particular platform, it is the responsibility of the back 9597 end to perform those modifications. (Of course, the back end 9598 should not modify 'DECL_ASSEMBLER_NAME' itself.) 9599 9600 Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be 9601 allocated (for the mangled name of the entity) so it should be used 9602 only when emitting assembly code. It should not be used within the 9603 optimizers to determine whether or not two declarations are the 9604 same, even though some of the existing optimizers do use it in that 9605 way. These uses will be removed over time. 9606 9607'DECL_ARGUMENTS' 9608 This macro returns the 'PARM_DECL' for the first argument to the 9609 function. Subsequent 'PARM_DECL' nodes can be obtained by 9610 following the 'TREE_CHAIN' links. 9611 9612'DECL_RESULT' 9613 This macro returns the 'RESULT_DECL' for the function. 9614 9615'DECL_SAVED_TREE' 9616 This macro returns the complete body of the function. 9617 9618'TREE_TYPE' 9619 This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the 9620 function. 9621 9622'DECL_INITIAL' 9623 A function that has a definition in the current translation unit 9624 will have a non-'NULL' 'DECL_INITIAL'. However, back ends should 9625 not make use of the particular value given by 'DECL_INITIAL'. 9626 9627 It should contain a tree of 'BLOCK' nodes that mirrors the scopes 9628 that variables are bound in the function. Each block contains a 9629 list of decls declared in a basic block, a pointer to a chain of 9630 blocks at the next lower scope level, then a pointer to the next 9631 block at the same level and a backpointer to the parent 'BLOCK' or 9632 'FUNCTION_DECL'. So given a function as follows: 9633 9634 void foo() 9635 { 9636 int a; 9637 { 9638 int b; 9639 } 9640 int c; 9641 } 9642 9643 you would get the following: 9644 9645 tree foo = FUNCTION_DECL; 9646 tree decl_a = VAR_DECL; 9647 tree decl_b = VAR_DECL; 9648 tree decl_c = VAR_DECL; 9649 tree block_a = BLOCK; 9650 tree block_b = BLOCK; 9651 tree block_c = BLOCK; 9652 BLOCK_VARS(block_a) = decl_a; 9653 BLOCK_SUBBLOCKS(block_a) = block_b; 9654 BLOCK_CHAIN(block_a) = block_c; 9655 BLOCK_SUPERCONTEXT(block_a) = foo; 9656 BLOCK_VARS(block_b) = decl_b; 9657 BLOCK_SUPERCONTEXT(block_b) = block_a; 9658 BLOCK_VARS(block_c) = decl_c; 9659 BLOCK_SUPERCONTEXT(block_c) = foo; 9660 DECL_INITIAL(foo) = block_a; 9661 9662 9663File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 9664 966510.8.2 Function Properties 9666-------------------------- 9667 9668To determine the scope of a function, you can use the 'DECL_CONTEXT' 9669macro. This macro will return the class (either a 'RECORD_TYPE' or a 9670'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 9671a member. For a virtual function, this macro returns the class in which 9672the function was actually defined, not the base class in which the 9673virtual declaration occurred. 9674 9675 In C, the 'DECL_CONTEXT' for a function maybe another function. This 9676representation indicates that the GNU nested function extension is in 9677use. For details on the semantics of nested functions, see the GCC 9678Manual. The nested function can refer to local variables in its 9679containing function. Such references are not explicitly marked in the 9680tree structure; back ends must look at the 'DECL_CONTEXT' for the 9681referenced 'VAR_DECL'. If the 'DECL_CONTEXT' for the referenced 9682'VAR_DECL' is not the same as the function currently being processed, 9683and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference 9684is to a local variable in a containing function, and the back end must 9685take appropriate action. 9686 9687'DECL_EXTERNAL' 9688 This predicate holds if the function is undefined. 9689 9690'TREE_PUBLIC' 9691 This predicate holds if the function has external linkage. 9692 9693'TREE_STATIC' 9694 This predicate holds if the function has been defined. 9695 9696'TREE_THIS_VOLATILE' 9697 This predicate holds if the function does not return normally. 9698 9699'TREE_READONLY' 9700 This predicate holds if the function can only read its arguments. 9701 9702'DECL_PURE_P' 9703 This predicate holds if the function can only read its arguments, 9704 but may also read global memory. 9705 9706'DECL_VIRTUAL_P' 9707 This predicate holds if the function is virtual. 9708 9709'DECL_ARTIFICIAL' 9710 This macro holds if the function was implicitly generated by the 9711 compiler, rather than explicitly declared. In addition to 9712 implicitly generated class member functions, this macro holds for 9713 the special functions created to implement static initialization 9714 and destruction, to compute run-time type information, and so 9715 forth. 9716 9717'DECL_FUNCTION_SPECIFIC_TARGET' 9718 This macro returns a tree node that holds the target options that 9719 are to be used to compile this particular function or 'NULL_TREE' 9720 if the function is to be compiled with the target options specified 9721 on the command line. 9722 9723'DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 9724 This macro returns a tree node that holds the optimization options 9725 that are to be used to compile this particular function or 9726 'NULL_TREE' if the function is to be compiled with the optimization 9727 options specified on the command line. 9728 9729 9730File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 9731 973210.9 Language-dependent trees 9733============================= 9734 9735Front ends may wish to keep some state associated with various GENERIC 9736trees while parsing. To support this, trees provide a set of flags that 9737may be used by the front end. They are accessed using 9738'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6. 9739 9740 If necessary, a front end can use some language-dependent tree codes in 9741its GENERIC representation, so long as it provides a hook for converting 9742them to GIMPLE and doesn't expect them to work with any (hypothetical) 9743optimizers that run before the conversion to GIMPLE. The intermediate 9744representation used while parsing C and C++ looks very little like 9745GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take 9746it as input and spit out GIMPLE. 9747 9748 9749File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC 9750 975110.10 C and C++ Trees 9752===================== 9753 9754This section documents the internal representation used by GCC to 9755represent C and C++ source programs. When presented with a C or C++ 9756source program, GCC parses the program, performs semantic analysis 9757(including the generation of error messages), and then produces the 9758internal representation described here. This representation contains a 9759complete representation for the entire translation unit provided as 9760input to the front end. This representation is then typically processed 9761by a code-generator in order to produce machine code, but could also be 9762used in the creation of source browsers, intelligent editors, automatic 9763documentation generators, interpreters, and any other programs needing 9764the ability to process C or C++ code. 9765 9766 This section explains the internal representation. In particular, it 9767documents the internal representation for C and C++ source constructs, 9768and the macros, functions, and variables that can be used to access 9769these constructs. The C++ representation is largely a superset of the 9770representation used in the C front end. There is only one construct 9771used in C that does not appear in the C++ front end and that is the GNU 9772"nested function" extension. Many of the macros documented here do not 9773apply in C because the corresponding language constructs do not appear 9774in C. 9775 9776 The C and C++ front ends generate a mix of GENERIC trees and ones 9777specific to C and C++. These language-specific trees are higher-level 9778constructs than the ones in GENERIC to make the parser's job easier. 9779This section describes those trees that aren't part of GENERIC as well 9780as aspects of GENERIC trees that are treated in a language-specific 9781manner. 9782 9783 If you are developing a "back end", be it is a code-generator or some 9784other tool, that uses this representation, you may occasionally find 9785that you need to ask questions not easily answered by the functions and 9786macros available here. If that situation occurs, it is quite likely 9787that GCC already supports the functionality you desire, but that the 9788interface is simply not documented here. In that case, you should ask 9789the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting 9790the functionality you require. Similarly, if you find yourself writing 9791functions that do not deal directly with your back end, but instead 9792might be useful to other people using the GCC front end, you should 9793submit your patches for inclusion in GCC. 9794 9795* Menu: 9796 9797* Types for C++:: Fundamental and aggregate types. 9798* Namespaces:: Namespaces. 9799* Classes:: Classes. 9800* Functions for C++:: Overloading and accessors for C++. 9801* Statements for C++:: Statements specific to C and C++. 9802* C++ Expressions:: From 'typeid' to 'throw'. 9803 9804 9805File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 9806 980710.10.1 Types for C++ 9808--------------------- 9809 9810In C++, an array type is not qualified; rather the type of the array 9811elements is qualified. This situation is reflected in the intermediate 9812representation. The macros described here will always examine the 9813qualification of the underlying element type when applied to an array 9814type. (If the element type is itself an array, then the recursion 9815continues until a non-array type is found, and the qualification of this 9816type is examined.) So, for example, 'CP_TYPE_CONST_P' will hold of the 9817type 'const int ()[7]', denoting an array of seven 'int's. 9818 9819 The following functions and macros deal with cv-qualification of types: 9820'cp_type_quals' 9821 This function returns the set of type qualifiers applied to this 9822 type. This value is 'TYPE_UNQUALIFIED' if no qualifiers have been 9823 applied. The 'TYPE_QUAL_CONST' bit is set if the type is 9824 'const'-qualified. The 'TYPE_QUAL_VOLATILE' bit is set if the type 9825 is 'volatile'-qualified. The 'TYPE_QUAL_RESTRICT' bit is set if 9826 the type is 'restrict'-qualified. 9827 9828'CP_TYPE_CONST_P' 9829 This macro holds if the type is 'const'-qualified. 9830 9831'CP_TYPE_VOLATILE_P' 9832 This macro holds if the type is 'volatile'-qualified. 9833 9834'CP_TYPE_RESTRICT_P' 9835 This macro holds if the type is 'restrict'-qualified. 9836 9837'CP_TYPE_CONST_NON_VOLATILE_P' 9838 This predicate holds for a type that is 'const'-qualified, but 9839 _not_ 'volatile'-qualified; other cv-qualifiers are ignored as 9840 well: only the 'const'-ness is tested. 9841 9842 A few other macros and functions are usable with all types: 9843'TYPE_SIZE' 9844 The number of bits required to represent the type, represented as 9845 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 9846 'NULL_TREE'. 9847 9848'TYPE_ALIGN' 9849 The alignment of the type, in bits, represented as an 'int'. 9850 9851'TYPE_NAME' 9852 This macro returns a declaration (in the form of a 'TYPE_DECL') for 9853 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 9854 as you might expect, given its name!) You can look at the 9855 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 9856 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 9857 built-in type, the result of a typedef, or a named class type. 9858 9859'CP_INTEGRAL_TYPE' 9860 This predicate holds if the type is an integral type. Notice that 9861 in C++, enumerations are _not_ integral types. 9862 9863'ARITHMETIC_TYPE_P' 9864 This predicate holds if the type is an integral type (in the C++ 9865 sense) or a floating point type. 9866 9867'CLASS_TYPE_P' 9868 This predicate holds for a class-type. 9869 9870'TYPE_BUILT_IN' 9871 This predicate holds for a built-in type. 9872 9873'TYPE_PTRDATAMEM_P' 9874 This predicate holds if the type is a pointer to data member. 9875 9876'TYPE_PTR_P' 9877 This predicate holds if the type is a pointer type, and the pointee 9878 is not a data member. 9879 9880'TYPE_PTRFN_P' 9881 This predicate holds for a pointer to function type. 9882 9883'TYPE_PTROB_P' 9884 This predicate holds for a pointer to object type. Note however 9885 that it does not hold for the generic pointer to object type 'void 9886 *'. You may use 'TYPE_PTROBV_P' to test for a pointer to object 9887 type as well as 'void *'. 9888 9889 The table below describes types specific to C and C++ as well as 9890language-dependent info about GENERIC types. 9891 9892'POINTER_TYPE' 9893 Used to represent pointer types, and pointer to data member types. 9894 If 'TREE_TYPE' is a pointer to data member type, then 9895 'TYPE_PTRDATAMEM_P' will hold. For a pointer to data member type 9896 of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type 9897 'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'. 9898 9899'RECORD_TYPE' 9900 Used to represent 'struct' and 'class' types in C and C++. If 9901 'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 9902 type. In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a 9903 'POINTER_TYPE' pointing to a 'METHOD_TYPE'. The 'METHOD_TYPE' is 9904 the type of a function pointed to by the pointer-to-member 9905 function. If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a 9906 class type. For more information, *note Classes::. 9907 9908'UNKNOWN_TYPE' 9909 This node is used to represent a type the knowledge of which is 9910 insufficient for a sound processing. 9911 9912'TYPENAME_TYPE' 9913 Used to represent a construct of the form 'typename T::A'. The 9914 'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for 9915 'A'. If the type is specified via a template-id, then 9916 'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'. The 9917 'TREE_TYPE' is non-'NULL' if the node is implicitly generated in 9918 support for the implicit typename extension; in which case the 9919 'TREE_TYPE' is a type node for the base-class. 9920 9921'TYPEOF_TYPE' 9922 Used to represent the '__typeof__' extension. The 'TYPE_FIELDS' is 9923 the expression the type of which is being represented. 9924 9925 9926File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 9927 992810.10.2 Namespaces 9929------------------ 9930 9931The root of the entire intermediate representation is the variable 9932'global_namespace'. This is the namespace specified with '::' in C++ 9933source code. All other namespaces, types, variables, functions, and so 9934forth can be found starting with this namespace. 9935 9936 However, except for the fact that it is distinguished as the root of 9937the representation, the global namespace is no different from any other 9938namespace. Thus, in what follows, we describe namespaces generally, 9939rather than the global namespace in particular. 9940 9941 A namespace is represented by a 'NAMESPACE_DECL' node. 9942 9943 The following macros and functions can be used on a 'NAMESPACE_DECL': 9944 9945'DECL_NAME' 9946 This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to 9947 the unqualified name of the name of the namespace (*note 9948 Identifiers::). The name of the global namespace is '::', even 9949 though in C++ the global namespace is unnamed. However, you should 9950 use comparison with 'global_namespace', rather than 'DECL_NAME' to 9951 determine whether or not a namespace is the global one. An unnamed 9952 namespace will have a 'DECL_NAME' equal to 9953 'anonymous_namespace_name'. Within a single translation unit, all 9954 unnamed namespaces will have the same name. 9955 9956'DECL_CONTEXT' 9957 This macro returns the enclosing namespace. The 'DECL_CONTEXT' for 9958 the 'global_namespace' is 'NULL_TREE'. 9959 9960'DECL_NAMESPACE_ALIAS' 9961 If this declaration is for a namespace alias, then 9962 'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 9963 alias. 9964 9965 Do not attempt to use 'cp_namespace_decls' for a namespace which is 9966 an alias. Instead, follow 'DECL_NAMESPACE_ALIAS' links until you 9967 reach an ordinary, non-alias, namespace, and call 9968 'cp_namespace_decls' there. 9969 9970'DECL_NAMESPACE_STD_P' 9971 This predicate holds if the namespace is the special '::std' 9972 namespace. 9973 9974'cp_namespace_decls' 9975 This function will return the declarations contained in the 9976 namespace, including types, overloaded functions, other namespaces, 9977 and so forth. If there are no declarations, this function will 9978 return 'NULL_TREE'. The declarations are connected through their 9979 'TREE_CHAIN' fields. 9980 9981 Although most entries on this list will be declarations, 9982 'TREE_LIST' nodes may also appear. In this case, the 'TREE_VALUE' 9983 will be an 'OVERLOAD'. The value of the 'TREE_PURPOSE' is 9984 unspecified; back ends should ignore this value. As with the other 9985 kinds of declarations returned by 'cp_namespace_decls', the 9986 'TREE_CHAIN' will point to the next declaration in this list. 9987 9988 For more information on the kinds of declarations that can occur on 9989 this list, *Note Declarations::. Some declarations will not appear 9990 on this list. In particular, no 'FIELD_DECL', 'LABEL_DECL', or 9991 'PARM_DECL' nodes will appear here. 9992 9993 This function cannot be used with namespaces that have 9994 'DECL_NAMESPACE_ALIAS' set. 9995 9996 9997File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 9998 999910.10.3 Classes 10000--------------- 10001 10002Besides namespaces, the other high-level scoping construct in C++ is the 10003class. (Throughout this manual the term "class" is used to mean the 10004types referred to in the ANSI/ISO C++ Standard as classes; these include 10005types defined with the 'class', 'struct', and 'union' keywords.) 10006 10007 A class type is represented by either a 'RECORD_TYPE' or a 10008'UNION_TYPE'. A class declared with the 'union' tag is represented by a 10009'UNION_TYPE', while classes declared with either the 'struct' or the 10010'class' tag are represented by 'RECORD_TYPE's. You can use the 10011'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 10012type is a 'class' as opposed to a 'struct'. This macro will be true 10013only for classes declared with the 'class' tag. 10014 10015 Almost all non-function members are available on the 'TYPE_FIELDS' 10016list. Given one member, the next can be found by following the 10017'TREE_CHAIN'. You should not depend in any way on the order in which 10018fields appear on this list. All nodes on this list will be 'DECL' 10019nodes. A 'FIELD_DECL' is used to represent a non-static data member, a 10020'VAR_DECL' is used to represent a static data member, and a 'TYPE_DECL' 10021is used to represent a type. Note that the 'CONST_DECL' for an 10022enumeration constant will appear on this list, if the enumeration type 10023was declared in the class. (Of course, the 'TYPE_DECL' for the 10024enumeration type will appear here as well.) There are no entries for 10025base classes on this list. In particular, there is no 'FIELD_DECL' for 10026the "base-class portion" of an object. 10027 10028 The 'TYPE_VFIELD' is a compiler-generated field used to point to 10029virtual function tables. It may or may not appear on the 'TYPE_FIELDS' 10030list. However, back ends should handle the 'TYPE_VFIELD' just like all 10031the entries on the 'TYPE_FIELDS' list. 10032 10033 The function members are available on the 'TYPE_METHODS' list. Again, 10034subsequent members are found by following the 'TREE_CHAIN' field. If a 10035function is overloaded, each of the overloaded functions appears; no 10036'OVERLOAD' nodes appear on the 'TYPE_METHODS' list. Implicitly declared 10037functions (including default constructors, copy constructors, assignment 10038operators, and destructors) will appear on this list as well. 10039 10040 Every class has an associated "binfo", which can be obtained with 10041'TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 10042given by 'TYPE_BINFO' is the degenerate case, whereby every class is 10043considered to be its own base-class. The base binfos for a particular 10044binfo are held in a vector, whose length is obtained with 10045'BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 10046'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'. To add a new binfo, use 10047'BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 10048'BINFO_BASE_BINFOS', but normally you do not need to use that. The 10049class type associated with a binfo is given by 'BINFO_TYPE'. It is not 10050always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 10051and qualified types. Neither is it the case that 'TYPE_BINFO 10052(BINFO_TYPE (y))' is the same binfo as 'y'. The reason is that if 'y' 10053is a binfo representing a base-class 'B' of a derived class 'D', then 10054'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be 10055'B' as its own base-class, rather than as a base-class of 'D'. 10056 10057 The access to a base type can be found with 'BINFO_BASE_ACCESS'. This 10058will produce 'access_public_node', 'access_private_node' or 10059'access_protected_node'. If bases are always public, 10060'BINFO_BASE_ACCESSES' may be 'NULL'. 10061 10062 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 10063virtually or not. The other flags, 'BINFO_MARKED_P' and 'BINFO_FLAG_1' 10064to 'BINFO_FLAG_6' can be used for language specific use. 10065 10066 The following macros can be used on a tree node representing a 10067class-type. 10068 10069'LOCAL_CLASS_P' 10070 This predicate holds if the class is local class _i.e._ declared 10071 inside a function body. 10072 10073'TYPE_POLYMORPHIC_P' 10074 This predicate holds if the class has at least one virtual function 10075 (declared or inherited). 10076 10077'TYPE_HAS_DEFAULT_CONSTRUCTOR' 10078 This predicate holds whenever its argument represents a class-type 10079 with default constructor. 10080 10081'CLASSTYPE_HAS_MUTABLE' 10082'TYPE_HAS_MUTABLE_P' 10083 These predicates hold for a class-type having a mutable data 10084 member. 10085 10086'CLASSTYPE_NON_POD_P' 10087 This predicate holds only for class-types that are not PODs. 10088 10089'TYPE_HAS_NEW_OPERATOR' 10090 This predicate holds for a class-type that defines 'operator new'. 10091 10092'TYPE_HAS_ARRAY_NEW_OPERATOR' 10093 This predicate holds for a class-type for which 'operator new[]' is 10094 defined. 10095 10096'TYPE_OVERLOADS_CALL_EXPR' 10097 This predicate holds for class-type for which the function call 10098 'operator()' is overloaded. 10099 10100'TYPE_OVERLOADS_ARRAY_REF' 10101 This predicate holds for a class-type that overloads 'operator[]' 10102 10103'TYPE_OVERLOADS_ARROW' 10104 This predicate holds for a class-type for which 'operator->' is 10105 overloaded. 10106 10107 10108File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 10109 1011010.10.4 Functions for C++ 10111------------------------- 10112 10113A function is represented by a 'FUNCTION_DECL' node. A set of 10114overloaded functions is sometimes represented by an 'OVERLOAD' node. 10115 10116 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros 10117should be used on an 'OVERLOAD'. An 'OVERLOAD' node is similar to a 10118'TREE_LIST'. Use 'OVL_CURRENT' to get the function associated with an 10119'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the 10120list of overloaded functions. The macros 'OVL_CURRENT' and 'OVL_NEXT' 10121are actually polymorphic; you can use them to work with 'FUNCTION_DECL' 10122nodes as well as with overloads. In the case of a 'FUNCTION_DECL', 10123'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT' 10124will always be 'NULL_TREE'. 10125 10126 To determine the scope of a function, you can use the 'DECL_CONTEXT' 10127macro. This macro will return the class (either a 'RECORD_TYPE' or a 10128'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 10129a member. For a virtual function, this macro returns the class in which 10130the function was actually defined, not the base class in which the 10131virtual declaration occurred. 10132 10133 If a friend function is defined in a class scope, the 10134'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 10135it was defined. For example, in 10136 class C { friend void f() {} }; 10137the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the 10138'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'. 10139 10140 The following macros and functions can be used on a 'FUNCTION_DECL': 10141'DECL_MAIN_P' 10142 This predicate holds for a function that is the program entry point 10143 '::code'. 10144 10145'DECL_LOCAL_FUNCTION_P' 10146 This predicate holds if the function was declared at block scope, 10147 even though it has a global scope. 10148 10149'DECL_ANTICIPATED' 10150 This predicate holds if the function is a built-in function but its 10151 prototype is not yet explicitly declared. 10152 10153'DECL_EXTERN_C_FUNCTION_P' 10154 This predicate holds if the function is declared as an ''extern 10155 "C"'' function. 10156 10157'DECL_LINKONCE_P' 10158 This macro holds if multiple copies of this function may be emitted 10159 in various translation units. It is the responsibility of the 10160 linker to merge the various copies. Template instantiations are 10161 the most common example of functions for which 'DECL_LINKONCE_P' 10162 holds; G++ instantiates needed templates in all translation units 10163 which require them, and then relies on the linker to remove 10164 duplicate instantiations. 10165 10166 FIXME: This macro is not yet implemented. 10167 10168'DECL_FUNCTION_MEMBER_P' 10169 This macro holds if the function is a member of a class, rather 10170 than a member of a namespace. 10171 10172'DECL_STATIC_FUNCTION_P' 10173 This predicate holds if the function a static member function. 10174 10175'DECL_NONSTATIC_MEMBER_FUNCTION_P' 10176 This macro holds for a non-static member function. 10177 10178'DECL_CONST_MEMFUNC_P' 10179 This predicate holds for a 'const'-member function. 10180 10181'DECL_VOLATILE_MEMFUNC_P' 10182 This predicate holds for a 'volatile'-member function. 10183 10184'DECL_CONSTRUCTOR_P' 10185 This macro holds if the function is a constructor. 10186 10187'DECL_NONCONVERTING_P' 10188 This predicate holds if the constructor is a non-converting 10189 constructor. 10190 10191'DECL_COMPLETE_CONSTRUCTOR_P' 10192 This predicate holds for a function which is a constructor for an 10193 object of a complete type. 10194 10195'DECL_BASE_CONSTRUCTOR_P' 10196 This predicate holds for a function which is a constructor for a 10197 base class sub-object. 10198 10199'DECL_COPY_CONSTRUCTOR_P' 10200 This predicate holds for a function which is a copy-constructor. 10201 10202'DECL_DESTRUCTOR_P' 10203 This macro holds if the function is a destructor. 10204 10205'DECL_COMPLETE_DESTRUCTOR_P' 10206 This predicate holds if the function is the destructor for an 10207 object a complete type. 10208 10209'DECL_OVERLOADED_OPERATOR_P' 10210 This macro holds if the function is an overloaded operator. 10211 10212'DECL_CONV_FN_P' 10213 This macro holds if the function is a type-conversion operator. 10214 10215'DECL_GLOBAL_CTOR_P' 10216 This predicate holds if the function is a file-scope initialization 10217 function. 10218 10219'DECL_GLOBAL_DTOR_P' 10220 This predicate holds if the function is a file-scope finalization 10221 function. 10222 10223'DECL_THUNK_P' 10224 This predicate holds if the function is a thunk. 10225 10226 These functions represent stub code that adjusts the 'this' pointer 10227 and then jumps to another function. When the jumped-to function 10228 returns, control is transferred directly to the caller, without 10229 returning to the thunk. The first parameter to the thunk is always 10230 the 'this' pointer; the thunk should add 'THUNK_DELTA' to this 10231 value. (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.) 10232 10233 Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the 10234 adjusted 'this' pointer must be adjusted again. The complete 10235 calculation is given by the following pseudo-code: 10236 10237 this += THUNK_DELTA 10238 if (THUNK_VCALL_OFFSET) 10239 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 10240 10241 Finally, the thunk should jump to the location given by 10242 'DECL_INITIAL'; this will always be an expression for the address 10243 of a function. 10244 10245'DECL_NON_THUNK_FUNCTION_P' 10246 This predicate holds if the function is _not_ a thunk function. 10247 10248'GLOBAL_INIT_PRIORITY' 10249 If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then 10250 this gives the initialization priority for the function. The 10251 linker will arrange that all functions for which 10252 'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 10253 before 'main' is called. When the program exits, all functions for 10254 which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 10255 10256'TYPE_RAISES_EXCEPTIONS' 10257 This macro returns the list of exceptions that a (member-)function 10258 can raise. The returned list, if non 'NULL', is comprised of nodes 10259 whose 'TREE_VALUE' represents a type. 10260 10261'TYPE_NOTHROW_P' 10262 This predicate holds when the exception-specification of its 10263 arguments is of the form ''()''. 10264 10265'DECL_ARRAY_DELETE_OPERATOR_P' 10266 This predicate holds if the function an overloaded 'operator 10267 delete[]'. 10268 10269 10270File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 10271 1027210.10.5 Statements for C++ 10273-------------------------- 10274 10275A function that has a definition in the current translation unit will 10276have a non-'NULL' 'DECL_INITIAL'. However, back ends should not make 10277use of the particular value given by 'DECL_INITIAL'. 10278 10279 The 'DECL_SAVED_TREE' macro will give the complete body of the 10280function. 10281 1028210.10.5.1 Statements 10283.................... 10284 10285There are tree nodes corresponding to all of the source-level statement 10286constructs, used within the C and C++ frontends. These are enumerated 10287here, together with a list of the various macros that can be used to 10288obtain information about them. There are a few macros that can be used 10289with all statements: 10290 10291'STMT_IS_FULL_EXPR_P' 10292 In C++, statements normally constitute "full expressions"; 10293 temporaries created during a statement are destroyed when the 10294 statement is complete. However, G++ sometimes represents 10295 expressions by statements; these statements will not have 10296 'STMT_IS_FULL_EXPR_P' set. Temporaries created during such 10297 statements should be destroyed when the innermost enclosing 10298 statement with 'STMT_IS_FULL_EXPR_P' set is exited. 10299 10300 Here is the list of the various statement nodes, and the macros used to 10301access them. This documentation describes the use of these nodes in 10302non-template functions (including instantiations of template functions). 10303In template functions, the same nodes are used, but sometimes in 10304slightly different ways. 10305 10306 Many of the statements have substatements. For example, a 'while' loop 10307will have a body, which is itself a statement. If the substatement is 10308'NULL_TREE', it is considered equivalent to a statement consisting of a 10309single ';', i.e., an expression statement in which the expression has 10310been omitted. A substatement may in fact be a list of statements, 10311connected via their 'TREE_CHAIN's. So, you should always process the 10312statement tree by looping over substatements, like this: 10313 void process_stmt (stmt) 10314 tree stmt; 10315 { 10316 while (stmt) 10317 { 10318 switch (TREE_CODE (stmt)) 10319 { 10320 case IF_STMT: 10321 process_stmt (THEN_CLAUSE (stmt)); 10322 /* More processing here. */ 10323 break; 10324 10325 ... 10326 } 10327 10328 stmt = TREE_CHAIN (stmt); 10329 } 10330 } 10331 In other words, while the 'then' clause of an 'if' statement in C++ can 10332be only one statement (although that one statement may be a compound 10333statement), the intermediate representation will sometimes use several 10334statements chained together. 10335 10336'BREAK_STMT' 10337 10338 Used to represent a 'break' statement. There are no additional 10339 fields. 10340 10341'CILK_SPAWN_STMT' 10342 10343 Used to represent a spawning function in the Cilk Plus language 10344 extension. This tree has one field that holds the name of the 10345 spawning function. '_Cilk_spawn' can be written in C in the 10346 following way: 10347 10348 _Cilk_spawn <function_name> (<parameters>); 10349 10350 Detailed description for usage and functionality of '_Cilk_spawn' 10351 can be found at <https://www.cilkplus.org>. 10352 10353'CILK_SYNC_STMT' 10354 10355 This statement is part of the Cilk Plus language extension. It 10356 indicates that the current function cannot continue in parallel 10357 with its spawned children. There are no additional fields. 10358 '_Cilk_sync' can be written in C in the following way: 10359 10360 _Cilk_sync; 10361 10362'CLEANUP_STMT' 10363 10364 Used to represent an action that should take place upon exit from 10365 the enclosing scope. Typically, these actions are calls to 10366 destructors for local objects, but back ends cannot rely on this 10367 fact. If these nodes are in fact representing such destructors, 10368 'CLEANUP_DECL' will be the 'VAR_DECL' destroyed. Otherwise, 10369 'CLEANUP_DECL' will be 'NULL_TREE'. In any case, the 10370 'CLEANUP_EXPR' is the expression to execute. The cleanups executed 10371 on exit from a scope should be run in the reverse order of the 10372 order in which the associated 'CLEANUP_STMT's were encountered. 10373 10374'CONTINUE_STMT' 10375 10376 Used to represent a 'continue' statement. There are no additional 10377 fields. 10378 10379'CTOR_STMT' 10380 10381 Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if 10382 'CTOR_END_P' holds of the main body of a constructor. See also 10383 'SUBOBJECT' for more information on how to use these nodes. 10384 10385'DO_STMT' 10386 10387 Used to represent a 'do' loop. The body of the loop is given by 10388 'DO_BODY' while the termination condition for the loop is given by 10389 'DO_COND'. The condition for a 'do'-statement is always an 10390 expression. 10391 10392'EMPTY_CLASS_EXPR' 10393 10394 Used to represent a temporary object of a class with no data whose 10395 address is never taken. (All such objects are interchangeable.) 10396 The 'TREE_TYPE' represents the type of the object. 10397 10398'EXPR_STMT' 10399 10400 Used to represent an expression statement. Use 'EXPR_STMT_EXPR' to 10401 obtain the expression. 10402 10403'FOR_STMT' 10404 10405 Used to represent a 'for' statement. The 'FOR_INIT_STMT' is the 10406 initialization statement for the loop. The 'FOR_COND' is the 10407 termination condition. The 'FOR_EXPR' is the expression executed 10408 right before the 'FOR_COND' on each loop iteration; often, this 10409 expression increments a counter. The body of the loop is given by 10410 'FOR_BODY'. Note that 'FOR_INIT_STMT' and 'FOR_BODY' return 10411 statements, while 'FOR_COND' and 'FOR_EXPR' return expressions. 10412 10413'HANDLER' 10414 10415 Used to represent a C++ 'catch' block. The 'HANDLER_TYPE' is the 10416 type of exception that will be caught by this handler; it is equal 10417 (by pointer equality) to 'NULL' if this handler is for all types. 10418 'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and 10419 'HANDLER_BODY' is the code for the block itself. 10420 10421'IF_STMT' 10422 10423 Used to represent an 'if' statement. The 'IF_COND' is the 10424 expression. 10425 10426 If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a 10427 statement (usually a 'DECL_STMT'). Each time the condition is 10428 evaluated, the statement should be executed. Then, the 10429 'TREE_VALUE' should be used as the conditional expression itself. 10430 This representation is used to handle C++ code like this: 10431 10432 C++ distinguishes between this and 'COND_EXPR' for handling 10433 templates. 10434 10435 if (int i = 7) ... 10436 10437 where there is a new local variable (or variables) declared within 10438 the condition. 10439 10440 The 'THEN_CLAUSE' represents the statement given by the 'then' 10441 condition, while the 'ELSE_CLAUSE' represents the statement given 10442 by the 'else' condition. 10443 10444'SUBOBJECT' 10445 10446 In a constructor, these nodes are used to mark the point at which a 10447 subobject of 'this' is fully constructed. If, after this point, an 10448 exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is 10449 encountered, the 'SUBOBJECT_CLEANUP' must be executed. The 10450 cleanups must be executed in the reverse order in which they 10451 appear. 10452 10453'SWITCH_STMT' 10454 10455 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 10456 the expression on which the switch is occurring. See the 10457 documentation for an 'IF_STMT' for more information on the 10458 representation used for the condition. The 'SWITCH_STMT_BODY' is 10459 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 10460 original type of switch expression as given in the source, before 10461 any compiler conversions. 10462 10463'TRY_BLOCK' 10464 Used to represent a 'try' block. The body of the try block is 10465 given by 'TRY_STMTS'. Each of the catch blocks is a 'HANDLER' 10466 node. The first handler is given by 'TRY_HANDLERS'. Subsequent 10467 handlers are obtained by following the 'TREE_CHAIN' link from one 10468 handler to the next. The body of the handler is given by 10469 'HANDLER_BODY'. 10470 10471 If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS' 10472 will not be a 'HANDLER' node. Instead, it will be an expression 10473 that should be executed if an exception is thrown in the try block. 10474 It must rethrow the exception after executing that code. And, if 10475 an exception is thrown while the expression is executing, 10476 'terminate' must be called. 10477 10478'USING_STMT' 10479 Used to represent a 'using' directive. The namespace is given by 10480 'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 10481 is needed inside template functions, to implement using directives 10482 during instantiation. 10483 10484'WHILE_STMT' 10485 10486 Used to represent a 'while' loop. The 'WHILE_COND' is the 10487 termination condition for the loop. See the documentation for an 10488 'IF_STMT' for more information on the representation used for the 10489 condition. 10490 10491 The 'WHILE_BODY' is the body of the loop. 10492 10493 10494File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 10495 1049610.10.6 C++ Expressions 10497----------------------- 10498 10499This section describes expressions specific to the C and C++ front ends. 10500 10501'TYPEID_EXPR' 10502 10503 Used to represent a 'typeid' expression. 10504 10505'NEW_EXPR' 10506'VEC_NEW_EXPR' 10507 10508 Used to represent a call to 'new' and 'new[]' respectively. 10509 10510'DELETE_EXPR' 10511'VEC_DELETE_EXPR' 10512 10513 Used to represent a call to 'delete' and 'delete[]' respectively. 10514 10515'MEMBER_REF' 10516 10517 Represents a reference to a member of a class. 10518 10519'THROW_EXPR' 10520 10521 Represents an instance of 'throw' in the program. Operand 0, which 10522 is the expression to throw, may be 'NULL_TREE'. 10523 10524'AGGR_INIT_EXPR' 10525 An 'AGGR_INIT_EXPR' represents the initialization as the return 10526 value of a function call, or as the result of a constructor. An 10527 'AGGR_INIT_EXPR' will only appear as a full-expression, or as the 10528 second operand of a 'TARGET_EXPR'. 'AGGR_INIT_EXPR's have a 10529 representation similar to that of 'CALL_EXPR's. You can use the 10530 'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the 10531 function to call and the arguments to pass. 10532 10533 If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the 10534 initialization is via a constructor call. The address of the 10535 'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is 10536 taken, and this value replaces the first argument in the argument 10537 list. 10538 10539 In either case, the expression is void. 10540 10541 10542File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC 10543 1054410.11 Java Trees 10545================ 10546 10547 10548File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 10549 1055011 GIMPLE 10551********* 10552 10553GIMPLE is a three-address representation derived from GENERIC by 10554breaking down GENERIC expressions into tuples of no more than 3 operands 10555(with some exceptions like function calls). GIMPLE was heavily 10556influenced by the SIMPLE IL used by the McCAT compiler project at McGill 10557University, though we have made some different choices. For one thing, 10558SIMPLE doesn't support 'goto'. 10559 10560 Temporaries are introduced to hold intermediate values needed to 10561compute complex expressions. Additionally, all the control structures 10562used in GENERIC are lowered into conditional jumps, lexical scopes are 10563removed and exception regions are converted into an on the side 10564exception region tree. 10565 10566 The compiler pass which converts GENERIC into GIMPLE is referred to as 10567the 'gimplifier'. The gimplifier works recursively, generating GIMPLE 10568tuples out of the original GENERIC expressions. 10569 10570 One of the early implementation strategies used for the GIMPLE 10571representation was to use the same internal data structures used by 10572front ends to represent parse trees. This simplified implementation 10573because we could leverage existing functionality and interfaces. 10574However, GIMPLE is a much more restrictive representation than abstract 10575syntax trees (AST), therefore it does not require the full structural 10576complexity provided by the main tree data structure. 10577 10578 The GENERIC representation of a function is stored in the 10579'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node. It 10580is converted to GIMPLE by a call to 'gimplify_function_tree'. 10581 10582 If a front end wants to include language-specific tree codes in the 10583tree representation which it provides to the back end, it must provide a 10584definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 10585front end trees to GIMPLE. Usually such a hook will involve much of the 10586same code for expanding front end trees to RTL. This function can 10587return fully lowered GIMPLE, or it can return GENERIC trees and let the 10588main gimplifier lower them the rest of the way; this is often simpler. 10589GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 10590of the IL before the pass 'pass_lower_cf'. High GIMPLE contains some 10591container statements like lexical scopes (represented by 'GIMPLE_BIND') 10592and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes 10593all of the implicit jumps for control and exception expressions directly 10594in the IL and EH region trees. 10595 10596 The C and C++ front ends currently convert directly from front end 10597trees to GIMPLE, and hand that off to the back end rather than first 10598converting to GENERIC. Their gimplifier hooks know about all the 10599'_STMT' nodes and how to convert them to GENERIC forms. There was some 10600work done on a genericization pass which would run first, but the 10601existence of 'STMT_EXPR' meant that in order to convert all of the C 10602statements into GENERIC equivalents would involve walking the entire 10603tree anyway, so it was simpler to lower all the way. This might change 10604in the future if someone writes an optimization pass which would work 10605better with higher-level trees, but currently the optimizers all expect 10606GIMPLE. 10607 10608 You can request to dump a C-like representation of the GIMPLE form with 10609the flag '-fdump-tree-gimple'. 10610 10611* Menu: 10612 10613* Tuple representation:: 10614* Class hierarchy of GIMPLE statements:: 10615* GIMPLE instruction set:: 10616* GIMPLE Exception Handling:: 10617* Temporaries:: 10618* Operands:: 10619* Manipulating GIMPLE statements:: 10620* Tuple specific accessors:: 10621* GIMPLE sequences:: 10622* Sequence iterators:: 10623* Adding a new GIMPLE statement code:: 10624* Statement and operand traversals:: 10625 10626 10627File: gccint.info, Node: Tuple representation, Next: Class hierarchy of GIMPLE statements, Up: GIMPLE 10628 1062911.1 Tuple representation 10630========================= 10631 10632GIMPLE instructions are tuples of variable size divided in two groups: a 10633header describing the instruction and its locations, and a variable 10634length body with all the operands. Tuples are organized into a 10635hierarchy with 3 main classes of tuples. 10636 1063711.1.1 'gimple_statement_base' (gsbase) 10638--------------------------------------- 10639 10640This is the root of the hierarchy, it holds basic information needed by 10641most GIMPLE statements. There are some fields that may not be relevant 10642to every GIMPLE statement, but those were moved into the base structure 10643to take advantage of holes left by other fields (thus making the 10644structure more compact). The structure takes 4 words (32 bytes) on 64 10645bit hosts: 10646 10647Field Size (bits) 10648'code' 8 10649'subcode' 16 10650'no_warning' 1 10651'visited' 1 10652'nontemporal_move' 1 10653'plf' 2 10654'modified' 1 10655'has_volatile_ops' 1 10656'references_memory_p' 1 10657'uid' 32 10658'location' 32 10659'num_ops' 32 10660'bb' 64 10661'block' 63 10662Total size 32 bytes 10663 10664 * 'code' Main identifier for a GIMPLE instruction. 10665 10666 * 'subcode' Used to distinguish different variants of the same basic 10667 instruction or provide flags applicable to a given code. The 10668 'subcode' flags field has different uses depending on the code of 10669 the instruction, but mostly it distinguishes instructions of the 10670 same family. The most prominent use of this field is in 10671 assignments, where subcode indicates the operation done on the RHS 10672 of the assignment. For example, a = b + c is encoded as 10673 'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 10674 10675 * 'no_warning' Bitflag to indicate whether a warning has already been 10676 issued on this statement. 10677 10678 * 'visited' General purpose "visited" marker. Set and cleared by 10679 each pass when needed. 10680 10681 * 'nontemporal_move' Bitflag used in assignments that represent 10682 non-temporal moves. Although this bitflag is only used in 10683 assignments, it was moved into the base to take advantage of the 10684 bit holes left by the previous fields. 10685 10686 * 'plf' Pass Local Flags. This 2-bit mask can be used as general 10687 purpose markers by any pass. Passes are responsible for clearing 10688 and setting these two flags accordingly. 10689 10690 * 'modified' Bitflag to indicate whether the statement has been 10691 modified. Used mainly by the operand scanner to determine when to 10692 re-scan a statement for operands. 10693 10694 * 'has_volatile_ops' Bitflag to indicate whether this statement 10695 contains operands that have been marked volatile. 10696 10697 * 'references_memory_p' Bitflag to indicate whether this statement 10698 contains memory references (i.e., its operands are either global 10699 variables, or pointer dereferences or anything that must reside in 10700 memory). 10701 10702 * 'uid' This is an unsigned integer used by passes that want to 10703 assign IDs to every statement. These IDs must be assigned and used 10704 by each pass. 10705 10706 * 'location' This is a 'location_t' identifier to specify source code 10707 location for this statement. It is inherited from the front end. 10708 10709 * 'num_ops' Number of operands that this statement has. This 10710 specifies the size of the operand vector embedded in the tuple. 10711 Only used in some tuples, but it is declared in the base tuple to 10712 take advantage of the 32-bit hole left by the previous fields. 10713 10714 * 'bb' Basic block holding the instruction. 10715 10716 * 'block' Lexical block holding this statement. Also used for debug 10717 information generation. 10718 1071911.1.2 'gimple_statement_with_ops' 10720---------------------------------- 10721 10722This tuple is actually split in two: 'gimple_statement_with_ops_base' 10723and 'gimple_statement_with_ops'. This is needed to accommodate the way 10724the operand vector is allocated. The operand vector is defined to be an 10725array of 1 element. So, to allocate a dynamic number of operands, the 10726memory allocator ('gimple_alloc') simply allocates enough memory to hold 10727the structure itself plus 'N - 1' operands which run "off the end" of 10728the structure. For example, to allocate space for a tuple with 3 10729operands, 'gimple_alloc' reserves 'sizeof (struct 10730gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 10731 10732 On the other hand, several fields in this tuple need to be shared with 10733the 'gimple_statement_with_memory_ops' tuple. So, these common fields 10734are placed in 'gimple_statement_with_ops_base' which is then inherited 10735from the other two tuples. 10736 10737'gsbase' 256 10738'def_ops' 64 10739'use_ops' 64 10740'op' 'num_ops' * 64 10741Total 48 + 8 * 'num_ops' bytes 10742size 10743 10744 * 'gsbase' Inherited from 'struct gimple_statement_base'. 10745 10746 * 'def_ops' Array of pointers into the operand array indicating all 10747 the slots that contain a variable written-to by the statement. 10748 This array is also used for immediate use chaining. Note that it 10749 would be possible to not rely on this array, but the changes 10750 required to implement this are pretty invasive. 10751 10752 * 'use_ops' Similar to 'def_ops' but for variables read by the 10753 statement. 10754 10755 * 'op' Array of trees with 'num_ops' slots. 10756 1075711.1.3 'gimple_statement_with_memory_ops' 10758----------------------------------------- 10759 10760This tuple is essentially identical to 'gimple_statement_with_ops', 10761except that it contains 4 additional fields to hold vectors related 10762memory stores and loads. Similar to the previous case, the structure is 10763split in two to accommodate for the operand vector 10764('gimple_statement_with_memory_ops_base' and 10765'gimple_statement_with_memory_ops'). 10766 10767Field Size (bits) 10768'gsbase' 256 10769'def_ops' 64 10770'use_ops' 64 10771'vdef_ops' 64 10772'vuse_ops' 64 10773'stores' 64 10774'loads' 64 10775'op' 'num_ops' * 64 10776Total size 80 + 8 * 'num_ops' bytes 10777 10778 * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators. There is 10779 one entry per memory symbol written by this statement. This is 10780 used to maintain the memory SSA use-def and def-def chains. 10781 10782 * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators. There is 10783 one entry per memory symbol loaded by this statement. This is used 10784 to maintain the memory SSA use-def chains. 10785 10786 * 'stores' Bitset with all the UIDs for the symbols written-to by the 10787 statement. This is different than 'vdef_ops' in that all the 10788 affected symbols are mentioned in this set. If memory partitioning 10789 is enabled, the 'vdef_ops' vector will refer to memory partitions. 10790 Furthermore, no SSA information is stored in this set. 10791 10792 * 'loads' Similar to 'stores', but for memory loads. (Note that 10793 there is some amount of redundancy here, it should be possible to 10794 reduce memory utilization further by removing these sets). 10795 10796 All the other tuples are defined in terms of these three basic ones. 10797Each tuple will add some fields. 10798 10799 10800File: gccint.info, Node: Class hierarchy of GIMPLE statements, Next: GIMPLE instruction set, Prev: Tuple representation, Up: GIMPLE 10801 1080211.2 Class hierarchy of GIMPLE statements 10803========================================= 10804 10805The following diagram shows the C++ inheritance hierarchy of statement 10806kinds, along with their relationships to 'GSS_' values (layouts) and 10807'GIMPLE_' values (codes): 10808 10809 gimple_statement_base 10810 | layout: GSS_BASE 10811 | used for 4 codes: GIMPLE_ERROR_MARK 10812 | GIMPLE_NOP 10813 | GIMPLE_OMP_SECTIONS_SWITCH 10814 | GIMPLE_PREDICT 10815 | 10816 + gimple_statement_with_ops_base 10817 | | (no GSS layout) 10818 | | 10819 | + gimple_statement_with_ops 10820 | | | layout: GSS_WITH_OPS 10821 | | | 10822 | | + gcond 10823 | | | code: GIMPLE_COND 10824 | | | 10825 | | + gdebug 10826 | | | code: GIMPLE_DEBUG 10827 | | | 10828 | | + ggoto 10829 | | | code: GIMPLE_GOTO 10830 | | | 10831 | | + glabel 10832 | | | code: GIMPLE_LABEL 10833 | | | 10834 | | + gswitch 10835 | | code: GIMPLE_SWITCH 10836 | | 10837 | + gimple_statement_with_memory_ops_base 10838 | | layout: GSS_WITH_MEM_OPS_BASE 10839 | | 10840 | + gimple_statement_with_memory_ops 10841 | | | layout: GSS_WITH_MEM_OPS 10842 | | | 10843 | | + gassign 10844 | | | code GIMPLE_ASSIGN 10845 | | | 10846 | | + greturn 10847 | | code GIMPLE_RETURN 10848 | | 10849 | + gcall 10850 | | layout: GSS_CALL, code: GIMPLE_CALL 10851 | | 10852 | + gasm 10853 | | layout: GSS_ASM, code: GIMPLE_ASM 10854 | | 10855 | + gtransaction 10856 | layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION 10857 | 10858 + gimple_statement_omp 10859 | | layout: GSS_OMP. Used for code GIMPLE_OMP_SECTION 10860 | | 10861 | + gomp_critical 10862 | | layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL 10863 | | 10864 | + gomp_for 10865 | | layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR 10866 | | 10867 | + gomp_parallel_layout 10868 | | | layout: GSS_OMP_PARALLEL_LAYOUT 10869 | | | 10870 | | + gimple_statement_omp_taskreg 10871 | | | | 10872 | | | + gomp_parallel 10873 | | | | code: GIMPLE_OMP_PARALLEL 10874 | | | | 10875 | | | + gomp_task 10876 | | | code: GIMPLE_OMP_TASK 10877 | | | 10878 | | + gimple_statement_omp_target 10879 | | code: GIMPLE_OMP_TARGET 10880 | | 10881 | + gomp_sections 10882 | | layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS 10883 | | 10884 | + gimple_statement_omp_single_layout 10885 | | layout: GSS_OMP_SINGLE_LAYOUT 10886 | | 10887 | + gomp_single 10888 | | code: GIMPLE_OMP_SINGLE 10889 | | 10890 | + gomp_teams 10891 | code: GIMPLE_OMP_TEAMS 10892 | 10893 + gbind 10894 | layout: GSS_BIND, code: GIMPLE_BIND 10895 | 10896 + gcatch 10897 | layout: GSS_CATCH, code: GIMPLE_CATCH 10898 | 10899 + geh_filter 10900 | layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER 10901 | 10902 + geh_else 10903 | layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE 10904 | 10905 + geh_mnt 10906 | layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW 10907 | 10908 + gphi 10909 | layout: GSS_PHI, code: GIMPLE_PHI 10910 | 10911 + gimple_statement_eh_ctrl 10912 | | layout: GSS_EH_CTRL 10913 | | 10914 | + gresx 10915 | | code: GIMPLE_RESX 10916 | | 10917 | + geh_dispatch 10918 | code: GIMPLE_EH_DISPATCH 10919 | 10920 + gtry 10921 | layout: GSS_TRY, code: GIMPLE_TRY 10922 | 10923 + gimple_statement_wce 10924 | layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR 10925 | 10926 + gomp_continue 10927 | layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE 10928 | 10929 + gomp_atomic_load 10930 | layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD 10931 | 10932 + gimple_statement_omp_atomic_store_layout 10933 | layout: GSS_OMP_ATOMIC_STORE_LAYOUT, 10934 | code: GIMPLE_OMP_ATOMIC_STORE 10935 | 10936 + gomp_atomic_store 10937 | code: GIMPLE_OMP_ATOMIC_STORE 10938 | 10939 + gomp_return 10940 code: GIMPLE_OMP_RETURN 10941 10942 10943File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Class hierarchy of GIMPLE statements, Up: GIMPLE 10944 1094511.3 GIMPLE instruction set 10946=========================== 10947 10948The following table briefly describes the GIMPLE instruction set. 10949 10950Instruction High GIMPLE Low GIMPLE 10951'GIMPLE_ASM' x x 10952'GIMPLE_ASSIGN' x x 10953'GIMPLE_BIND' x 10954'GIMPLE_CALL' x x 10955'GIMPLE_CATCH' x 10956'GIMPLE_COND' x x 10957'GIMPLE_DEBUG' x x 10958'GIMPLE_EH_FILTER' x 10959'GIMPLE_GOTO' x x 10960'GIMPLE_LABEL' x x 10961'GIMPLE_NOP' x x 10962'GIMPLE_OMP_ATOMIC_LOAD' x x 10963'GIMPLE_OMP_ATOMIC_STORE' x x 10964'GIMPLE_OMP_CONTINUE' x x 10965'GIMPLE_OMP_CRITICAL' x x 10966'GIMPLE_OMP_FOR' x x 10967'GIMPLE_OMP_MASTER' x x 10968'GIMPLE_OMP_ORDERED' x x 10969'GIMPLE_OMP_PARALLEL' x x 10970'GIMPLE_OMP_RETURN' x x 10971'GIMPLE_OMP_SECTION' x x 10972'GIMPLE_OMP_SECTIONS' x x 10973'GIMPLE_OMP_SECTIONS_SWITCH' x x 10974'GIMPLE_OMP_SINGLE' x x 10975'GIMPLE_PHI' x 10976'GIMPLE_RESX' x 10977'GIMPLE_RETURN' x x 10978'GIMPLE_SWITCH' x x 10979'GIMPLE_TRY' x 10980 10981 10982File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 10983 1098411.4 Exception Handling 10985======================= 10986 10987Other exception handling constructs are represented using 10988'GIMPLE_TRY_CATCH'. 'GIMPLE_TRY_CATCH' has two operands. The first 10989operand is a sequence of statements to execute. If executing these 10990statements does not throw an exception, then the second operand is 10991ignored. Otherwise, if an exception is thrown, then the second operand 10992of the 'GIMPLE_TRY_CATCH' is checked. The second operand may have the 10993following forms: 10994 10995 1. A sequence of statements to execute. When an exception occurs, 10996 these statements are executed, and then the exception is rethrown. 10997 10998 2. A sequence of 'GIMPLE_CATCH' statements. Each 'GIMPLE_CATCH' has a 10999 list of applicable exception types and handler code. If the thrown 11000 exception matches one of the caught types, the associated handler 11001 code is executed. If the handler code falls off the bottom, 11002 execution continues after the original 'GIMPLE_TRY_CATCH'. 11003 11004 3. A 'GIMPLE_EH_FILTER' statement. This has a list of permitted 11005 exception types, and code to handle a match failure. If the thrown 11006 exception does not match one of the allowed types, the associated 11007 match failure code is executed. If the thrown exception does 11008 match, it continues unwinding the stack looking for the next 11009 handler. 11010 11011 Currently throwing an exception is not directly represented in GIMPLE, 11012since it is implemented by calling a function. At some point in the 11013future we will want to add some way to express that the call will throw 11014an exception of a known type. 11015 11016 Just before running the optimizers, the compiler lowers the high-level 11017EH constructs above into a set of 'goto's, magic labels, and EH regions. 11018Continuing to unwind at the end of a cleanup is represented with a 11019'GIMPLE_RESX'. 11020 11021 11022File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 11023 1102411.5 Temporaries 11025================ 11026 11027When gimplification encounters a subexpression that is too complex, it 11028creates a new temporary variable to hold the value of the subexpression, 11029and adds a new statement to initialize it before the current statement. 11030These special temporaries are known as 'expression temporaries', and are 11031allocated using 'get_formal_tmp_var'. The compiler tries to always 11032evaluate identical expressions into the same temporary, to simplify 11033elimination of redundant calculations. 11034 11035 We can only use expression temporaries when we know that it will not be 11036reevaluated before its value is used, and that it will not be otherwise 11037modified(1). Other temporaries can be allocated using 11038'get_initialized_tmp_var' or 'create_tmp_var'. 11039 11040 Currently, an expression like 'a = b + 5' is not reduced any further. 11041We tried converting it to something like 11042 T1 = b + 5; 11043 a = T1; 11044 but this bloated the representation for minimal benefit. However, a 11045variable which must live in memory cannot appear in an expression; its 11046value is explicitly loaded into a temporary first. Similarly, storing 11047the value of an expression to a memory variable goes through a 11048temporary. 11049 11050 ---------- Footnotes ---------- 11051 11052 (1) These restrictions are derived from those in Morgan 4.8. 11053 11054 11055File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 11056 1105711.6 Operands 11058============= 11059 11060In general, expressions in GIMPLE consist of an operation and the 11061appropriate number of simple operands; these operands must either be a 11062GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable. 11063More complex operands are factored out into temporaries, so that 11064 a = b + c + d 11065 becomes 11066 T1 = b + c; 11067 a = T1 + d; 11068 11069 The same rule holds for arguments to a 'GIMPLE_CALL'. 11070 11071 The target of an assignment is usually a variable, but can also be a 11072'MEM_REF' or a compound lvalue as described below. 11073 11074* Menu: 11075 11076* Compound Expressions:: 11077* Compound Lvalues:: 11078* Conditional Expressions:: 11079* Logical Operators:: 11080 11081 11082File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 11083 1108411.6.1 Compound Expressions 11085--------------------------- 11086 11087The left-hand side of a C comma expression is simply moved into a 11088separate statement. 11089 11090 11091File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 11092 1109311.6.2 Compound Lvalues 11094----------------------- 11095 11096Currently compound lvalues involving array and structure field 11097references are not broken down; an expression like 'a.b[2] = 42' is not 11098reduced any further (though complex array subscripts are). This 11099restriction is a workaround for limitations in later optimizers; if we 11100were to convert this to 11101 11102 T1 = &a.b; 11103 T1[2] = 42; 11104 11105 alias analysis would not remember that the reference to 'T1[2]' came by 11106way of 'a.b', so it would think that the assignment could alias another 11107member of 'a'; this broke 'struct-alias-1.c'. Future optimizer 11108improvements may make this limitation unnecessary. 11109 11110 11111File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 11112 1111311.6.3 Conditional Expressions 11114------------------------------ 11115 11116A C '?:' expression is converted into an 'if' statement with each branch 11117assigning to the same temporary. So, 11118 11119 a = b ? c : d; 11120 becomes 11121 if (b == 1) 11122 T1 = c; 11123 else 11124 T1 = d; 11125 a = T1; 11126 11127 The GIMPLE level if-conversion pass re-introduces '?:' expression, if 11128appropriate. It is used to vectorize loops with conditions using vector 11129conditional operations. 11130 11131 Note that in GIMPLE, 'if' statements are represented using 11132'GIMPLE_COND', as described below. 11133 11134 11135File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 11136 1113711.6.4 Logical Operators 11138------------------------ 11139 11140Except when they appear in the condition operand of a 'GIMPLE_COND', 11141logical 'and' and 'or' operators are simplified as follows: 'a = b && c' 11142becomes 11143 11144 T1 = (bool)b; 11145 if (T1 == true) 11146 T1 = (bool)c; 11147 a = T1; 11148 11149 Note that 'T1' in this example cannot be an expression temporary, 11150because it has two different assignments. 11151 1115211.6.5 Manipulating operands 11153---------------------------- 11154 11155All gimple operands are of type 'tree'. But only certain types of trees 11156are allowed to be used as operand tuples. Basic validation is 11157controlled by the function 'get_gimple_rhs_class', which given a tree 11158code, returns an 'enum' with the following values of type 'enum 11159gimple_rhs_class' 11160 11161 * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 11162 11163 * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation. 11164 11165 * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 11166 11167 * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 11168 11169 * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 11170 split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL', 11171 'COMPONENT_REF', etc). 11172 11173 This operand class also acts as an escape hatch for tree nodes that 11174 may be flattened out into the operand vector, but would need more 11175 than two slots on the RHS. For instance, a 'COND_EXPR' expression 11176 of the form '(a op b) ? x : y' could be flattened out on the 11177 operand vector using 4 slots, but it would also require additional 11178 processing to distinguish 'c = a op b' from 'c = a op b ? x : y'. 11179 Something similar occurs with 'ASSERT_EXPR'. In time, these 11180 special case tree expressions should be flattened into the operand 11181 vector. 11182 11183 For tree nodes in the categories 'GIMPLE_TERNARY_RHS', 11184'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside 11185tuples directly. They first need to be flattened and separated into 11186individual components. For instance, given the GENERIC expression 11187 11188 a = b + c 11189 11190 its tree representation is: 11191 11192 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 11193 11194 In this case, the GIMPLE form for this statement is logically identical 11195to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the 11196assignment is not represented as a tree, instead the two operands are 11197taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE 11198tuple as follows: 11199 11200 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 11201 1120211.6.6 Operand vector allocation 11203-------------------------------- 11204 11205The operand vector is stored at the bottom of the three tuple structures 11206that accept operands. This means, that depending on the code of a given 11207statement, its operand vector will be at different offsets from the base 11208of the structure. To access tuple operands use the following accessors 11209 11210 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 11211 Returns the number of operands in statement G. 11212 11213 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 11214 Returns operand 'I' from statement 'G'. 11215 11216 -- GIMPLE function: tree * gimple_ops (gimple g) 11217 Returns a pointer into the operand vector for statement 'G'. This 11218 is computed using an internal table called 'gimple_ops_offset_'[]. 11219 This table is indexed by the gimple code of 'G'. 11220 11221 When the compiler is built, this table is filled-in using the sizes 11222 of the structures used by each statement code defined in 11223 gimple.def. Since the operand vector is at the bottom of the 11224 structure, for a gimple code 'C' the offset is computed as sizeof 11225 (struct-of 'C') - sizeof (tree). 11226 11227 This mechanism adds one memory indirection to every access when 11228 using 'gimple_op'(), if this becomes a bottleneck, a pass can 11229 choose to memoize the result from 'gimple_ops'() and use that to 11230 access the operands. 11231 1123211.6.7 Operand validation 11233------------------------- 11234 11235When adding a new operand to a gimple statement, the operand will be 11236validated according to what each tuple accepts in its operand vector. 11237These predicates are called by the 'gimple_NAME_set_...()'. Each tuple 11238will use one of the following predicates (Note, this list is not 11239exhaustive): 11240 11241 -- GIMPLE function: bool is_gimple_val (tree t) 11242 Returns true if t is a "GIMPLE value", which are all the 11243 non-addressable stack variables (variables for which 11244 'is_gimple_reg' returns true) and constants (expressions for which 11245 'is_gimple_min_invariant' returns true). 11246 11247 -- GIMPLE function: bool is_gimple_addressable (tree t) 11248 Returns true if t is a symbol or memory reference whose address can 11249 be taken. 11250 11251 -- GIMPLE function: bool is_gimple_asm_val (tree t) 11252 Similar to 'is_gimple_val' but it also accepts hard registers. 11253 11254 -- GIMPLE function: bool is_gimple_call_addr (tree t) 11255 Return true if t is a valid expression to use as the function 11256 called by a 'GIMPLE_CALL'. 11257 11258 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t) 11259 Return true if t is a valid expression to use as first operand of a 11260 'MEM_REF' expression. 11261 11262 -- GIMPLE function: bool is_gimple_constant (tree t) 11263 Return true if t is a valid gimple constant. 11264 11265 -- GIMPLE function: bool is_gimple_min_invariant (tree t) 11266 Return true if t is a valid minimal invariant. This is different 11267 from constants, in that the specific value of t may not be known at 11268 compile time, but it is known that it doesn't change (e.g., the 11269 address of a function local variable). 11270 11271 -- GIMPLE function: bool is_gimple_ip_invariant (tree t) 11272 Return true if t is an interprocedural invariant. This means that 11273 t is a valid invariant in all functions (e.g. it can be an address 11274 of a global variable but not of a local one). 11275 11276 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t) 11277 Return true if t is an 'ADDR_EXPR' that does not change once the 11278 program is running (and which is valid in all functions). 11279 1128011.6.8 Statement validation 11281--------------------------- 11282 11283 -- GIMPLE function: bool is_gimple_assign (gimple g) 11284 Return true if the code of g is 'GIMPLE_ASSIGN'. 11285 11286 -- GIMPLE function: bool is_gimple_call (gimple g) 11287 Return true if the code of g is 'GIMPLE_CALL'. 11288 11289 -- GIMPLE function: bool is_gimple_debug (gimple g) 11290 Return true if the code of g is 'GIMPLE_DEBUG'. 11291 11292 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g) 11293 Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast 11294 operation. 11295 11296 -- GIMPLE function: bool gimple_debug_bind_p (gimple g) 11297 Return true if g is a 'GIMPLE_DEBUG' that binds the value of an 11298 expression to a variable. 11299 11300 -- GIMPLE function: bool is_gimple_omp (gimple g) 11301 Return true if g is any of the OpenMP codes. 11302 11303 11304File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 11305 1130611.7 Manipulating GIMPLE statements 11307=================================== 11308 11309This section documents all the functions available to handle each of the 11310GIMPLE instructions. 11311 1131211.7.1 Common accessors 11313----------------------- 11314 11315The following are common accessors for gimple statements. 11316 11317 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 11318 Return the code for statement 'G'. 11319 11320 -- GIMPLE function: basic_block gimple_bb (gimple g) 11321 Return the basic block to which statement 'G' belongs to. 11322 11323 -- GIMPLE function: tree gimple_block (gimple g) 11324 Return the lexical scope block holding statement 'G'. 11325 11326 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 11327 Return the type of the main expression computed by 'STMT'. Return 11328 'void_type_node' if 'STMT' computes nothing. This will only return 11329 something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and 11330 'GIMPLE_CALL'. For all other tuple codes, it will return 11331 'void_type_node'. 11332 11333 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 11334 Return the tree code for the expression computed by 'STMT'. This 11335 is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and 11336 'GIMPLE_COND'. If 'STMT' is 'GIMPLE_CALL', it will return 11337 'CALL_EXPR'. For 'GIMPLE_COND', it returns the code of the 11338 comparison predicate. For 'GIMPLE_ASSIGN' it returns the code of 11339 the operation performed by the 'RHS' of the assignment. 11340 11341 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 11342 Set the lexical scope block of 'G' to 'BLOCK'. 11343 11344 -- GIMPLE function: location_t gimple_locus (gimple g) 11345 Return locus information for statement 'G'. 11346 11347 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 11348 Set locus information for statement 'G'. 11349 11350 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 11351 Return true if 'G' does not have locus information. 11352 11353 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 11354 Return true if no warnings should be emitted for statement 'STMT'. 11355 11356 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 11357 visited_p) 11358 Set the visited status on statement 'STMT' to 'VISITED_P'. 11359 11360 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 11361 Return the visited status on statement 'STMT'. 11362 11363 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 11364 plf, bool val_p) 11365 Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'. 11366 11367 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask 11368 plf) 11369 Return the value of pass local flag 'PLF' on statement 'STMT'. 11370 11371 -- GIMPLE function: bool gimple_has_ops (gimple g) 11372 Return true if statement 'G' has register or memory operands. 11373 11374 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 11375 Return true if statement 'G' has memory operands. 11376 11377 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 11378 Return the number of operands for statement 'G'. 11379 11380 -- GIMPLE function: tree * gimple_ops (gimple g) 11381 Return the array of operands for statement 'G'. 11382 11383 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 11384 Return operand 'I' for statement 'G'. 11385 11386 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i) 11387 Return a pointer to operand 'I' for statement 'G'. 11388 11389 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 11390 Set operand 'I' of statement 'G' to 'OP'. 11391 11392 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 11393 Return the set of symbols that have had their address taken by 11394 'STMT'. 11395 11396 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g) 11397 Return the set of 'DEF' operands for statement 'G'. 11398 11399 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 11400 def_optype_d *def) 11401 Set 'DEF' to be the set of 'DEF' operands for statement 'G'. 11402 11403 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g) 11404 Return the set of 'USE' operands for statement 'G'. 11405 11406 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 11407 use_optype_d *use) 11408 Set 'USE' to be the set of 'USE' operands for statement 'G'. 11409 11410 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g) 11411 Return the set of 'VUSE' operands for statement 'G'. 11412 11413 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 11414 voptype_d *ops) 11415 Set 'OPS' to be the set of 'VUSE' operands for statement 'G'. 11416 11417 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g) 11418 Return the set of 'VDEF' operands for statement 'G'. 11419 11420 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 11421 voptype_d *ops) 11422 Set 'OPS' to be the set of 'VDEF' operands for statement 'G'. 11423 11424 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 11425 Return the set of symbols loaded by statement 'G'. Each element of 11426 the set is the 'DECL_UID' of the corresponding symbol. 11427 11428 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 11429 Return the set of symbols stored by statement 'G'. Each element of 11430 the set is the 'DECL_UID' of the corresponding symbol. 11431 11432 -- GIMPLE function: bool gimple_modified_p (gimple g) 11433 Return true if statement 'G' has operands and the modified field 11434 has been set. 11435 11436 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 11437 Return true if statement 'STMT' contains volatile operands. 11438 11439 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool 11440 volatilep) 11441 Return true if statement 'STMT' contains volatile operands. 11442 11443 -- GIMPLE function: void update_stmt (gimple s) 11444 Mark statement 'S' as modified, and update it. 11445 11446 -- GIMPLE function: void update_stmt_if_modified (gimple s) 11447 Update statement 'S' if it has been marked modified. 11448 11449 -- GIMPLE function: gimple gimple_copy (gimple stmt) 11450 Return a deep copy of statement 'STMT'. 11451 11452 11453File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 11454 1145511.8 Tuple specific accessors 11456============================= 11457 11458* Menu: 11459 11460* GIMPLE_ASM:: 11461* GIMPLE_ASSIGN:: 11462* GIMPLE_BIND:: 11463* GIMPLE_CALL:: 11464* GIMPLE_CATCH:: 11465* GIMPLE_COND:: 11466* GIMPLE_DEBUG:: 11467* GIMPLE_EH_FILTER:: 11468* GIMPLE_LABEL:: 11469* GIMPLE_GOTO:: 11470* GIMPLE_NOP:: 11471* GIMPLE_OMP_ATOMIC_LOAD:: 11472* GIMPLE_OMP_ATOMIC_STORE:: 11473* GIMPLE_OMP_CONTINUE:: 11474* GIMPLE_OMP_CRITICAL:: 11475* GIMPLE_OMP_FOR:: 11476* GIMPLE_OMP_MASTER:: 11477* GIMPLE_OMP_ORDERED:: 11478* GIMPLE_OMP_PARALLEL:: 11479* GIMPLE_OMP_RETURN:: 11480* GIMPLE_OMP_SECTION:: 11481* GIMPLE_OMP_SECTIONS:: 11482* GIMPLE_OMP_SINGLE:: 11483* GIMPLE_PHI:: 11484* GIMPLE_RESX:: 11485* GIMPLE_RETURN:: 11486* GIMPLE_SWITCH:: 11487* GIMPLE_TRY:: 11488* GIMPLE_WITH_CLEANUP_EXPR:: 11489 11490 11491File: gccint.info, Node: GIMPLE_ASM, Next: GIMPLE_ASSIGN, Up: Tuple specific accessors 11492 1149311.8.1 'GIMPLE_ASM' 11494------------------- 11495 11496 -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string, 11497 vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree, 11498 va_gc> *clobbers, vec<tree, va_gc> *labels) 11499 Build a 'GIMPLE_ASM' statement. This statement is used for 11500 building in-line assembly constructs. 'STRING' is the assembly 11501 code. 'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs, 11502 outputs, clobbered registers and labels. 11503 11504 -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g) 11505 Return the number of input operands for 'GIMPLE_ASM' 'G'. 11506 11507 -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g) 11508 Return the number of output operands for 'GIMPLE_ASM' 'G'. 11509 11510 -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g) 11511 Return the number of clobber operands for 'GIMPLE_ASM' 'G'. 11512 11513 -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned 11514 index) 11515 Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11516 11517 -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned 11518 index, tree in_op) 11519 Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11520 11521 -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned 11522 index) 11523 Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11524 11525 -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned 11526 index, tree out_op) 11527 Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11528 11529 -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned 11530 index) 11531 Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11532 11533 -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned 11534 index, tree clobber_op) 11535 Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11536 11537 -- GIMPLE function: const char * gimple_asm_string (const gasm *g) 11538 Return the string representing the assembly instruction in 11539 'GIMPLE_ASM' 'G'. 11540 11541 -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g) 11542 Return true if 'G' is an asm statement marked volatile. 11543 11544 -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool 11545 volatile_p) 11546 Mark asm statement 'G' as volatile or non-volatile based on 11547 'VOLATILE_P'. 11548 11549 11550File: gccint.info, Node: GIMPLE_ASSIGN, Next: GIMPLE_BIND, Prev: GIMPLE_ASM, Up: Tuple specific accessors 11551 1155211.8.2 'GIMPLE_ASSIGN' 11553---------------------- 11554 11555 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs) 11556 Build a 'GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 11557 passed in lhs. The right-hand side can be either a unary or binary 11558 tree expression. The expression tree rhs will be flattened and its 11559 operands assigned to the corresponding operand slots in the new 11560 statement. This function is useful when you already have a tree 11561 expression that you want to convert into a tuple. However, try to 11562 avoid building expression trees for the sole purpose of calling 11563 this function. If you already have the operands in separate trees, 11564 it is better to use 'gimple_build_assign' with 'enum tree_code' 11565 argument and separate arguments for each operand. 11566 11567 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11568 tree_code subcode, tree op1, tree op2, tree op3) 11569 This function is similar to two operand 'gimple_build_assign', but 11570 is used to build a 'GIMPLE_ASSIGN' statement when the operands of 11571 the right-hand side of the assignment are already split into 11572 different operands. 11573 11574 The left-hand side is an lvalue passed in lhs. Subcode is the 11575 'tree_code' for the right-hand side of the assignment. Op1, op2 11576 and op3 are the operands. 11577 11578 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11579 tree_code subcode, tree op1, tree op2) 11580 Like the above 5 operand 'gimple_build_assign', but with the last 11581 argument 'NULL' - this overload should not be used for 11582 'GIMPLE_TERNARY_RHS' assignments. 11583 11584 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11585 tree_code subcode, tree op1) 11586 Like the above 4 operand 'gimple_build_assign', but with the last 11587 argument 'NULL' - this overload should be used only for 11588 'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments. 11589 11590 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 11591 gimple_seq *seq_p) 11592 Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of 11593 '*SEQ_P'. 11594 11595 'DST'/'SRC' are the destination and source respectively. You can pass 11596ungimplified trees in 'DST' or 'SRC', in which case they will be 11597converted to a gimple operand if necessary. 11598 11599 This function returns the newly created 'GIMPLE_ASSIGN' tuple. 11600 11601 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 11602 Return the code of the expression computed on the 'RHS' of 11603 assignment statement 'G'. 11604 11605 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 11606 (gimple g) 11607 Return the gimple rhs class of the code for the expression computed 11608 on the rhs of assignment statement 'G'. This will never return 11609 'GIMPLE_INVALID_RHS'. 11610 11611 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 11612 Return the 'LHS' of assignment statement 'G'. 11613 11614 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g) 11615 Return a pointer to the 'LHS' of assignment statement 'G'. 11616 11617 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 11618 Return the first operand on the 'RHS' of assignment statement 'G'. 11619 11620 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g) 11621 Return the address of the first operand on the 'RHS' of assignment 11622 statement 'G'. 11623 11624 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 11625 Return the second operand on the 'RHS' of assignment statement 'G'. 11626 11627 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g) 11628 Return the address of the second operand on the 'RHS' of assignment 11629 statement 'G'. 11630 11631 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g) 11632 Return the third operand on the 'RHS' of assignment statement 'G'. 11633 11634 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g) 11635 Return the address of the third operand on the 'RHS' of assignment 11636 statement 'G'. 11637 11638 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 11639 Set 'LHS' to be the 'LHS' operand of assignment statement 'G'. 11640 11641 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 11642 Set 'RHS' to be the first operand on the 'RHS' of assignment 11643 statement 'G'. 11644 11645 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 11646 Set 'RHS' to be the second operand on the 'RHS' of assignment 11647 statement 'G'. 11648 11649 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs) 11650 Set 'RHS' to be the third operand on the 'RHS' of assignment 11651 statement 'G'. 11652 11653 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s) 11654 Return true if 'S' is a type-cast assignment. 11655 11656 11657File: gccint.info, Node: GIMPLE_BIND, Next: GIMPLE_CALL, Prev: GIMPLE_ASSIGN, Up: Tuple specific accessors 11658 1165911.8.3 'GIMPLE_BIND' 11660-------------------- 11661 11662 -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq 11663 body) 11664 Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS' 11665 and a body of statements in sequence 'BODY'. 11666 11667 -- GIMPLE function: tree gimple_bind_vars (const gbind *g) 11668 Return the variables declared in the 'GIMPLE_BIND' statement 'G'. 11669 11670 -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars) 11671 Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND' 11672 statement 'G'. 11673 11674 -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars) 11675 Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND' 11676 statement 'G'. 11677 11678 -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g) 11679 Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement 11680 'G'. 11681 11682 -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq 11683 seq) 11684 Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement 11685 'G'. 11686 11687 -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt) 11688 Append a statement to the end of a 'GIMPLE_BIND''s body. 11689 11690 -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq 11691 seq) 11692 Append a sequence of statements to the end of a 'GIMPLE_BIND''s 11693 body. 11694 11695 -- GIMPLE function: tree gimple_bind_block (const gbind *g) 11696 Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND' 11697 statement 'G'. This is analogous to the 'BIND_EXPR_BLOCK' field in 11698 trees. 11699 11700 -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block) 11701 Set 'BLOCK' to be the 'TREE_BLOCK' node associated with 11702 'GIMPLE_BIND' statement 'G'. 11703 11704 11705File: gccint.info, Node: GIMPLE_CALL, Next: GIMPLE_CATCH, Prev: GIMPLE_BIND, Up: Tuple specific accessors 11706 1170711.8.4 'GIMPLE_CALL' 11708-------------------- 11709 11710 -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs, 11711 ...) 11712 Build a 'GIMPLE_CALL' statement to function 'FN'. The argument 11713 'FN' must be either a 'FUNCTION_DECL' or a gimple call address as 11714 determined by 'is_gimple_call_addr'. 'NARGS' are the number of 11715 arguments. The rest of the arguments follow the argument 'NARGS', 11716 and must be trees that are valid as rvalues in gimple (i.e., each 11717 operand is validated with 'is_gimple_operand'). 11718 11719 -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr) 11720 Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node. The arguments and 11721 the function are taken from the expression directly. This routine 11722 assumes that 'call_expr' is already in GIMPLE form. That is, its 11723 operands are GIMPLE values and the function call needs no further 11724 simplification. All the call flags in 'call_expr' are copied over 11725 to the new 'GIMPLE_CALL'. 11726 11727 -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>' 11728 args) 11729 Identical to 'gimple_build_call' but the arguments are stored in a 11730 'vec<tree>'. 11731 11732 -- GIMPLE function: tree gimple_call_lhs (gimple g) 11733 Return the 'LHS' of call statement 'G'. 11734 11735 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g) 11736 Return a pointer to the 'LHS' of call statement 'G'. 11737 11738 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 11739 Set 'LHS' to be the 'LHS' operand of call statement 'G'. 11740 11741 -- GIMPLE function: tree gimple_call_fn (gimple g) 11742 Return the tree node representing the function called by call 11743 statement 'G'. 11744 11745 -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn) 11746 Set 'FN' to be the function called by call statement 'G'. This has 11747 to be a gimple value specifying the address of the called function. 11748 11749 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 11750 If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it. 11751 Otherwise return 'NULL'. This function is analogous to 11752 'get_callee_fndecl' in 'GENERIC'. 11753 11754 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 11755 Set the called function to 'FNDECL'. 11756 11757 -- GIMPLE function: tree gimple_call_return_type (const gcall *g) 11758 Return the type returned by call statement 'G'. 11759 11760 -- GIMPLE function: tree gimple_call_chain (gimple g) 11761 Return the static chain for call statement 'G'. 11762 11763 -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain) 11764 Set 'CHAIN' to be the static chain for call statement 'G'. 11765 11766 -- GIMPLE function: unsigned gimple_call_num_args (gimple g) 11767 Return the number of arguments used by call statement 'G'. 11768 11769 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 11770 Return the argument at position 'INDEX' for call statement 'G'. 11771 The first argument is 0. 11772 11773 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned 11774 index) 11775 Return a pointer to the argument at position 'INDEX' for call 11776 statement 'G'. 11777 11778 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index, 11779 tree arg) 11780 Set 'ARG' to be the argument at position 'INDEX' for call statement 11781 'G'. 11782 11783 -- GIMPLE function: void gimple_call_set_tail (gcall *s) 11784 Mark call statement 'S' as being a tail call (i.e., a call just 11785 before the exit of a function). These calls are candidate for tail 11786 call optimization. 11787 11788 -- GIMPLE function: bool gimple_call_tail_p (gcall *s) 11789 Return true if 'GIMPLE_CALL' 'S' is marked as a tail call. 11790 11791 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 11792 Return true if 'S' is a noreturn call. 11793 11794 -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt, 11795 bitmap args_to_skip) 11796 Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the 11797 arguments in the positions marked by the set 'ARGS_TO_SKIP'. 11798 11799 11800File: gccint.info, Node: GIMPLE_CATCH, Next: GIMPLE_COND, Prev: GIMPLE_CALL, Up: Tuple specific accessors 11801 1180211.8.5 'GIMPLE_CATCH' 11803--------------------- 11804 11805 -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq 11806 handler) 11807 Build a 'GIMPLE_CATCH' statement. 'TYPES' are the tree types this 11808 catch handles. 'HANDLER' is a sequence of statements with the code 11809 for the handler. 11810 11811 -- GIMPLE function: tree gimple_catch_types (const gcatch *g) 11812 Return the types handled by 'GIMPLE_CATCH' statement 'G'. 11813 11814 -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g) 11815 Return a pointer to the types handled by 'GIMPLE_CATCH' statement 11816 'G'. 11817 11818 -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g) 11819 Return the GIMPLE sequence representing the body of the handler of 11820 'GIMPLE_CATCH' statement 'G'. 11821 11822 -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t) 11823 Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'. 11824 11825 -- GIMPLE function: void gimple_catch_set_handler (gcatch *g, 11826 gimple_seq handler) 11827 Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'. 11828 11829 11830File: gccint.info, Node: GIMPLE_COND, Next: GIMPLE_DEBUG, Prev: GIMPLE_CATCH, Up: Tuple specific accessors 11831 1183211.8.6 'GIMPLE_COND' 11833-------------------- 11834 11835 -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code 11836 pred_code, tree lhs, tree rhs, tree t_label, tree f_label) 11837 Build a 'GIMPLE_COND' statement. 'A' 'GIMPLE_COND' statement 11838 compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is 11839 true, jump to the label in 't_label', otherwise jump to the label 11840 in 'f_label'. 'PRED_CODE' are relational operator tree codes like 11841 'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc. 11842 11843 -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree 11844 t_label, tree f_label) 11845 Build a 'GIMPLE_COND' statement from the conditional expression 11846 tree 'COND'. 'T_LABEL' and 'F_LABEL' are as in 11847 'gimple_build_cond'. 11848 11849 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 11850 Return the code of the predicate computed by conditional statement 11851 'G'. 11852 11853 -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code 11854 code) 11855 Set 'CODE' to be the predicate code for the conditional statement 11856 'G'. 11857 11858 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 11859 Return the 'LHS' of the predicate computed by conditional statement 11860 'G'. 11861 11862 -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs) 11863 Set 'LHS' to be the 'LHS' operand of the predicate computed by 11864 conditional statement 'G'. 11865 11866 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 11867 Return the 'RHS' operand of the predicate computed by conditional 11868 'G'. 11869 11870 -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs) 11871 Set 'RHS' to be the 'RHS' operand of the predicate computed by 11872 conditional statement 'G'. 11873 11874 -- GIMPLE function: tree gimple_cond_true_label (const gcond *g) 11875 Return the label used by conditional statement 'G' when its 11876 predicate evaluates to true. 11877 11878 -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree 11879 label) 11880 Set 'LABEL' to be the label used by conditional statement 'G' when 11881 its predicate evaluates to true. 11882 11883 -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree 11884 label) 11885 Set 'LABEL' to be the label used by conditional statement 'G' when 11886 its predicate evaluates to false. 11887 11888 -- GIMPLE function: tree gimple_cond_false_label (const gcond *g) 11889 Return the label used by conditional statement 'G' when its 11890 predicate evaluates to false. 11891 11892 -- GIMPLE function: void gimple_cond_make_false (gcond *g) 11893 Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'. 11894 11895 -- GIMPLE function: void gimple_cond_make_true (gcond *g) 11896 Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'. 11897 11898 11899File: gccint.info, Node: GIMPLE_DEBUG, Next: GIMPLE_EH_FILTER, Prev: GIMPLE_COND, Up: Tuple specific accessors 11900 1190111.8.7 'GIMPLE_DEBUG' 11902--------------------- 11903 11904 -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree 11905 value, gimple stmt) 11906 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' of 11907 'subcode'. The effect of this statement is to tell debug 11908 information generation machinery that the value of user variable 11909 'var' is given by 'value' at that point, and to remain with that 11910 value until 'var' runs out of scope, a dynamically-subsequent debug 11911 bind statement overrides the binding, or conflicting values reach a 11912 control flow merge point. Even if components of the 'value' 11913 expression change afterwards, the variable is supposed to retain 11914 the same value, though not necessarily the same location. 11915 11916 It is expected that 'var' be most often a tree for automatic user 11917 variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements 11918 for gimple registers, but it may also be a tree for a scalarized 11919 component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a 11920 debug temporary ('DEBUG_EXPR_DECL'). 11921 11922 As for 'value', it can be an arbitrary tree expression, but it is 11923 recommended that it be in a suitable form for a gimple assignment 11924 'RHS'. It is not expected that user variables that could appear as 11925 'var' ever appear in 'value', because in the latter we'd have their 11926 'SSA_NAME's instead, but even if they were not in SSA form, user 11927 variables appearing in 'value' are to be regarded as part of the 11928 executable code space, whereas those in 'var' are to be regarded as 11929 part of the source code space. There is no way to refer to the 11930 value bound to a user variable within a 'value' expression. 11931 11932 If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information 11933 generation machinery is informed that the variable 'var' is 11934 unbound, i.e., that its value is indeterminate, which sometimes 11935 means it is really unavailable, and other times that the compiler 11936 could not keep track of it. 11937 11938 Block and location information for the newly-created stmt are taken 11939 from 'stmt', if given. 11940 11941 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 11942 Return the user variable VAR that is bound at 'stmt'. 11943 11944 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 11945 Return the value expression that is bound to a user variable at 11946 'stmt'. 11947 11948 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple 11949 stmt) 11950 Return a pointer to the value expression that is bound to a user 11951 variable at 'stmt'. 11952 11953 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 11954 var) 11955 Modify the user variable bound at 'stmt' to VAR. 11956 11957 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree 11958 var) 11959 Modify the value bound to the user variable bound at 'stmt' to 11960 VALUE. 11961 11962 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 11963 Modify the value bound to the user variable bound at 'stmt' so that 11964 the variable becomes unbound. 11965 11966 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 11967 Return 'TRUE' if 'stmt' binds a user variable to a value, and 11968 'FALSE' if it unbinds the variable. 11969 11970 11971File: gccint.info, Node: GIMPLE_EH_FILTER, Next: GIMPLE_LABEL, Prev: GIMPLE_DEBUG, Up: Tuple specific accessors 11972 1197311.8.8 'GIMPLE_EH_FILTER' 11974------------------------- 11975 11976 -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types, 11977 gimple_seq failure) 11978 Build a 'GIMPLE_EH_FILTER' statement. 'TYPES' are the filter's 11979 types. 'FAILURE' is a sequence with the filter's failure action. 11980 11981 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 11982 Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'. 11983 11984 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g) 11985 Return a pointer to the types handled by 'GIMPLE_EH_FILTER' 11986 statement 'G'. 11987 11988 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 11989 Return the sequence of statement to execute when 'GIMPLE_EH_FILTER' 11990 statement fails. 11991 11992 -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g, 11993 tree types) 11994 Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER' 11995 'G'. 11996 11997 -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g, 11998 gimple_seq failure) 11999 Set 'FAILURE' to be the sequence of statements to execute on 12000 failure for 'GIMPLE_EH_FILTER' 'G'. 12001 12002 -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt 12003 *eh_mnt_stmt) 12004 Get the function decl to be called by the MUST_NOT_THROW region. 12005 12006 -- GIMPLE function: void gimple_eh_must_not_throw_set_fndecl ( geh_mnt 12007 *eh_mnt_stmt, tree decl) 12008 Set the function decl to be called by GS to DECL. 12009 12010 12011File: gccint.info, Node: GIMPLE_LABEL, Next: GIMPLE_GOTO, Prev: GIMPLE_EH_FILTER, Up: Tuple specific accessors 12012 1201311.8.9 'GIMPLE_LABEL' 12014--------------------- 12015 12016 -- GIMPLE function: glabel *gimple_build_label (tree label) 12017 Build a 'GIMPLE_LABEL' statement with corresponding to the tree 12018 label, 'LABEL'. 12019 12020 -- GIMPLE function: tree gimple_label_label (const glabel *g) 12021 Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'. 12022 12023 -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label) 12024 Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL' 12025 statement 'G'. 12026 12027 12028File: gccint.info, Node: GIMPLE_GOTO, Next: GIMPLE_NOP, Prev: GIMPLE_LABEL, Up: Tuple specific accessors 12029 1203011.8.10 'GIMPLE_GOTO' 12031--------------------- 12032 12033 -- GIMPLE function: ggoto *gimple_build_goto (tree dest) 12034 Build a 'GIMPLE_GOTO' statement to label 'DEST'. 12035 12036 -- GIMPLE function: tree gimple_goto_dest (gimple g) 12037 Return the destination of the unconditional jump 'G'. 12038 12039 -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest) 12040 Set 'DEST' to be the destination of the unconditional jump 'G'. 12041 12042 12043File: gccint.info, Node: GIMPLE_NOP, Next: GIMPLE_OMP_ATOMIC_LOAD, Prev: GIMPLE_GOTO, Up: Tuple specific accessors 12044 1204511.8.11 'GIMPLE_NOP' 12046-------------------- 12047 12048 -- GIMPLE function: gimple gimple_build_nop (void) 12049 Build a 'GIMPLE_NOP' statement. 12050 12051 -- GIMPLE function: bool gimple_nop_p (gimple g) 12052 Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'. 12053 12054 12055File: gccint.info, Node: GIMPLE_OMP_ATOMIC_LOAD, Next: GIMPLE_OMP_ATOMIC_STORE, Prev: GIMPLE_NOP, Up: Tuple specific accessors 12056 1205711.8.12 'GIMPLE_OMP_ATOMIC_LOAD' 12058-------------------------------- 12059 12060 -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load ( 12061 tree lhs, tree rhs) 12062 Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement. 'LHS' is the left-hand 12063 side of the assignment. 'RHS' is the right-hand side of the 12064 assignment. 12065 12066 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs ( 12067 gomp_atomic_load *g, tree lhs) 12068 Set the 'LHS' of an atomic load. 12069 12070 -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const 12071 gomp_atomic_load *g) 12072 Get the 'LHS' of an atomic load. 12073 12074 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs ( 12075 gomp_atomic_load *g, tree rhs) 12076 Set the 'RHS' of an atomic set. 12077 12078 -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const 12079 gomp_atomic_load *g) 12080 Get the 'RHS' of an atomic set. 12081 12082 12083File: gccint.info, Node: GIMPLE_OMP_ATOMIC_STORE, Next: GIMPLE_OMP_CONTINUE, Prev: GIMPLE_OMP_ATOMIC_LOAD, Up: Tuple specific accessors 12084 1208511.8.13 'GIMPLE_OMP_ATOMIC_STORE' 12086--------------------------------- 12087 12088 -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store ( 12089 tree val) 12090 Build a 'GIMPLE_OMP_ATOMIC_STORE' statement. 'VAL' is the value to 12091 be stored. 12092 12093 -- GIMPLE function: void gimple_omp_atomic_store_set_val ( 12094 gomp_atomic_store *g, tree val) 12095 Set the value being stored in an atomic store. 12096 12097 -- GIMPLE function: tree gimple_omp_atomic_store_val ( const 12098 gomp_atomic_store *g) 12099 Return the value being stored in an atomic store. 12100 12101 12102File: gccint.info, Node: GIMPLE_OMP_CONTINUE, Next: GIMPLE_OMP_CRITICAL, Prev: GIMPLE_OMP_ATOMIC_STORE, Up: Tuple specific accessors 12103 1210411.8.14 'GIMPLE_OMP_CONTINUE' 12105----------------------------- 12106 12107 -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree 12108 control_def, tree control_use) 12109 Build a 'GIMPLE_OMP_CONTINUE' statement. 'CONTROL_DEF' is the 12110 definition of the control variable. 'CONTROL_USE' is the use of 12111 the control variable. 12112 12113 -- GIMPLE function: tree gimple_omp_continue_control_def ( const 12114 gomp_continue *s) 12115 Return the definition of the control variable on a 12116 'GIMPLE_OMP_CONTINUE' in 'S'. 12117 12118 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr ( 12119 gomp_continue *s) 12120 Same as above, but return the pointer. 12121 12122 -- GIMPLE function: tree gimple_omp_continue_set_control_def ( 12123 gomp_continue *s) 12124 Set the control variable definition for a 'GIMPLE_OMP_CONTINUE' 12125 statement in 'S'. 12126 12127 -- GIMPLE function: tree gimple_omp_continue_control_use ( const 12128 gomp_continue *s) 12129 Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE' 12130 in 'S'. 12131 12132 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr ( 12133 gomp_continue *s) 12134 Same as above, but return the pointer. 12135 12136 -- GIMPLE function: tree gimple_omp_continue_set_control_use ( 12137 gomp_continue *s) 12138 Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement 12139 in 'S'. 12140 12141 12142File: gccint.info, Node: GIMPLE_OMP_CRITICAL, Next: GIMPLE_OMP_FOR, Prev: GIMPLE_OMP_CONTINUE, Up: Tuple specific accessors 12143 1214411.8.15 'GIMPLE_OMP_CRITICAL' 12145----------------------------- 12146 12147 -- GIMPLE function: gomp_critical *gimple_build_omp_critical ( 12148 gimple_seq body, tree name) 12149 Build a 'GIMPLE_OMP_CRITICAL' statement. 'BODY' is the sequence of 12150 statements for which only one thread can execute. 'NAME' is an 12151 optional identifier for this critical block. 12152 12153 -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical 12154 *g) 12155 Return the name associated with 'OMP_CRITICAL' statement 'G'. 12156 12157 -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical 12158 *g) 12159 Return a pointer to the name associated with 'OMP' critical 12160 statement 'G'. 12161 12162 -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical 12163 *g, tree name) 12164 Set 'NAME' to be the name associated with 'OMP' critical statement 12165 'G'. 12166 12167 12168File: gccint.info, Node: GIMPLE_OMP_FOR, Next: GIMPLE_OMP_MASTER, Prev: GIMPLE_OMP_CRITICAL, Up: Tuple specific accessors 12169 1217011.8.16 'GIMPLE_OMP_FOR' 12171------------------------ 12172 12173 -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body, 12174 tree clauses, tree index, tree initial, tree final, tree incr, 12175 gimple_seq pre_body, enum tree_code omp_for_cond) 12176 Build a 'GIMPLE_OMP_FOR' statement. 'BODY' is sequence of 12177 statements inside the for loop. 'CLAUSES', are any of the loop 12178 construct's clauses. 'PRE_BODY' is the sequence of statements that 12179 are loop invariant. 'INDEX' is the index variable. 'INITIAL' is 12180 the initial value of 'INDEX'. 'FINAL' is final value of 'INDEX'. 12181 OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'. 12182 'INCR' is the increment expression. 12183 12184 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 12185 Return the clauses associated with 'OMP_FOR' 'G'. 12186 12187 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g) 12188 Return a pointer to the 'OMP_FOR' 'G'. 12189 12190 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 12191 clauses) 12192 Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR' 12193 'G'. 12194 12195 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 12196 Return the index variable for 'OMP_FOR' 'G'. 12197 12198 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g) 12199 Return a pointer to the index variable for 'OMP_FOR' 'G'. 12200 12201 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 12202 index) 12203 Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'. 12204 12205 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 12206 Return the initial value for 'OMP_FOR' 'G'. 12207 12208 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g) 12209 Return a pointer to the initial value for 'OMP_FOR' 'G'. 12210 12211 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 12212 initial) 12213 Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'. 12214 12215 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 12216 Return the final value for 'OMP_FOR' 'G'. 12217 12218 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g) 12219 turn a pointer to the final value for 'OMP_FOR' 'G'. 12220 12221 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 12222 final) 12223 Set 'FINAL' to be the final value for 'OMP_FOR' 'G'. 12224 12225 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 12226 Return the increment value for 'OMP_FOR' 'G'. 12227 12228 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g) 12229 Return a pointer to the increment value for 'OMP_FOR' 'G'. 12230 12231 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 12232 Set 'INCR' to be the increment value for 'OMP_FOR' 'G'. 12233 12234 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 12235 Return the sequence of statements to execute before the 'OMP_FOR' 12236 statement 'G' starts. 12237 12238 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 12239 gimple_seq pre_body) 12240 Set 'PRE_BODY' to be the sequence of statements to execute before 12241 the 'OMP_FOR' statement 'G' starts. 12242 12243 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 12244 tree_code cond) 12245 Set 'COND' to be the condition code for 'OMP_FOR' 'G'. 12246 12247 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 12248 Return the condition code associated with 'OMP_FOR' 'G'. 12249 12250 12251File: gccint.info, Node: GIMPLE_OMP_MASTER, Next: GIMPLE_OMP_ORDERED, Prev: GIMPLE_OMP_FOR, Up: Tuple specific accessors 12252 1225311.8.17 'GIMPLE_OMP_MASTER' 12254--------------------------- 12255 12256 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 12257 Build a 'GIMPLE_OMP_MASTER' statement. 'BODY' is the sequence of 12258 statements to be executed by just the master. 12259 12260 12261File: gccint.info, Node: GIMPLE_OMP_ORDERED, Next: GIMPLE_OMP_PARALLEL, Prev: GIMPLE_OMP_MASTER, Up: Tuple specific accessors 12262 1226311.8.18 'GIMPLE_OMP_ORDERED' 12264---------------------------- 12265 12266 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 12267 Build a 'GIMPLE_OMP_ORDERED' statement. 12268 12269 'BODY' is the sequence of statements inside a loop that will executed 12270in sequence. 12271 12272 12273File: gccint.info, Node: GIMPLE_OMP_PARALLEL, Next: GIMPLE_OMP_RETURN, Prev: GIMPLE_OMP_ORDERED, Up: Tuple specific accessors 12274 1227511.8.19 'GIMPLE_OMP_PARALLEL' 12276----------------------------- 12277 12278 -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel 12279 (gimple_seq body, tree clauses, tree child_fn, tree data_arg) 12280 Build a 'GIMPLE_OMP_PARALLEL' statement. 12281 12282 'BODY' is sequence of statements which are executed in parallel. 12283'CLAUSES', are the 'OMP' parallel construct's clauses. 'CHILD_FN' is 12284the function created for the parallel threads to execute. 'DATA_ARG' 12285are the shared data argument(s). 12286 12287 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 12288 Return true if 'OMP' parallel statement 'G' has the 12289 'GF_OMP_PARALLEL_COMBINED' flag set. 12290 12291 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 12292 Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel 12293 statement 'G'. 12294 12295 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 12296 Return the body for the 'OMP' statement 'G'. 12297 12298 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 12299 body) 12300 Set 'BODY' to be the body for the 'OMP' statement 'G'. 12301 12302 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 12303 Return the clauses associated with 'OMP_PARALLEL' 'G'. 12304 12305 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr ( 12306 gomp_parallel *g) 12307 Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'. 12308 12309 -- GIMPLE function: void gimple_omp_parallel_set_clauses ( 12310 gomp_parallel *g, tree clauses) 12311 Set 'CLAUSES' to be the list of clauses associated with 12312 'OMP_PARALLEL' 'G'. 12313 12314 -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const 12315 gomp_parallel *g) 12316 Return the child function used to hold the body of 'OMP_PARALLEL' 12317 'G'. 12318 12319 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr ( 12320 gomp_parallel *g) 12321 Return a pointer to the child function used to hold the body of 12322 'OMP_PARALLEL' 'G'. 12323 12324 -- GIMPLE function: void gimple_omp_parallel_set_child_fn ( 12325 gomp_parallel *g, tree child_fn) 12326 Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'. 12327 12328 -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const 12329 gomp_parallel *g) 12330 Return the artificial argument used to send variables and values 12331 from the parent to the children threads in 'OMP_PARALLEL' 'G'. 12332 12333 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr ( 12334 gomp_parallel *g) 12335 Return a pointer to the data argument for 'OMP_PARALLEL' 'G'. 12336 12337 -- GIMPLE function: void gimple_omp_parallel_set_data_arg ( 12338 gomp_parallel *g, tree data_arg) 12339 Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'. 12340 12341 12342File: gccint.info, Node: GIMPLE_OMP_RETURN, Next: GIMPLE_OMP_SECTION, Prev: GIMPLE_OMP_PARALLEL, Up: Tuple specific accessors 12343 1234411.8.20 'GIMPLE_OMP_RETURN' 12345--------------------------- 12346 12347 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 12348 Build a 'GIMPLE_OMP_RETURN' statement. 'WAIT_P' is true if this is 12349 a non-waiting return. 12350 12351 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 12352 Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'. 12353 12354 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 12355 Return true if 'OMP' return statement 'G' has the 12356 'GF_OMP_RETURN_NOWAIT' flag set. 12357 12358 12359File: gccint.info, Node: GIMPLE_OMP_SECTION, Next: GIMPLE_OMP_SECTIONS, Prev: GIMPLE_OMP_RETURN, Up: Tuple specific accessors 12360 1236111.8.21 'GIMPLE_OMP_SECTION' 12362---------------------------- 12363 12364 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 12365 Build a 'GIMPLE_OMP_SECTION' statement for a sections statement. 12366 12367 'BODY' is the sequence of statements in the section. 12368 12369 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 12370 Return true if 'OMP' section statement 'G' has the 12371 'GF_OMP_SECTION_LAST' flag set. 12372 12373 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 12374 Set the 'GF_OMP_SECTION_LAST' flag on 'G'. 12375 12376 12377File: gccint.info, Node: GIMPLE_OMP_SECTIONS, Next: GIMPLE_OMP_SINGLE, Prev: GIMPLE_OMP_SECTION, Up: Tuple specific accessors 12378 1237911.8.22 'GIMPLE_OMP_SECTIONS' 12380----------------------------- 12381 12382 -- GIMPLE function: gomp_sections *gimple_build_omp_sections ( 12383 gimple_seq body, tree clauses) 12384 Build a 'GIMPLE_OMP_SECTIONS' statement. 'BODY' is a sequence of 12385 section statements. 'CLAUSES' are any of the 'OMP' sections 12386 construct's clauses: private, firstprivate, lastprivate, reduction, 12387 and nowait. 12388 12389 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 12390 Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement. 12391 12392 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 12393 Return the control variable associated with the 12394 'GIMPLE_OMP_SECTIONS' in 'G'. 12395 12396 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g) 12397 Return a pointer to the clauses associated with the 12398 'GIMPLE_OMP_SECTIONS' in 'G'. 12399 12400 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 12401 tree control) 12402 Set 'CONTROL' to be the set of clauses associated with the 12403 'GIMPLE_OMP_SECTIONS' in 'G'. 12404 12405 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 12406 Return the clauses associated with 'OMP_SECTIONS' 'G'. 12407 12408 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g) 12409 Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'. 12410 12411 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 12412 tree clauses) 12413 Set 'CLAUSES' to be the set of clauses associated with 12414 'OMP_SECTIONS' 'G'. 12415 12416 12417File: gccint.info, Node: GIMPLE_OMP_SINGLE, Next: GIMPLE_PHI, Prev: GIMPLE_OMP_SECTIONS, Up: Tuple specific accessors 12418 1241911.8.23 'GIMPLE_OMP_SINGLE' 12420--------------------------- 12421 12422 -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq 12423 body, tree clauses) 12424 Build a 'GIMPLE_OMP_SINGLE' statement. 'BODY' is the sequence of 12425 statements that will be executed once. 'CLAUSES' are any of the 12426 'OMP' single construct's clauses: private, firstprivate, 12427 copyprivate, nowait. 12428 12429 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 12430 Return the clauses associated with 'OMP_SINGLE' 'G'. 12431 12432 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g) 12433 Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'. 12434 12435 -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single 12436 *g, tree clauses) 12437 Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'. 12438 12439 12440File: gccint.info, Node: GIMPLE_PHI, Next: GIMPLE_RESX, Prev: GIMPLE_OMP_SINGLE, Up: Tuple specific accessors 12441 1244211.8.24 'GIMPLE_PHI' 12443-------------------- 12444 12445 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 12446 Return the maximum number of arguments supported by 'GIMPLE_PHI' 12447 'G'. 12448 12449 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 12450 Return the number of arguments in 'GIMPLE_PHI' 'G'. This must 12451 always be exactly the number of incoming edges for the basic block 12452 holding 'G'. 12453 12454 -- GIMPLE function: tree gimple_phi_result (gimple g) 12455 Return the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12456 12457 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g) 12458 Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12459 12460 -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result) 12461 Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12462 12463 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index) 12464 Return the 'PHI' argument corresponding to incoming edge 'INDEX' 12465 for 'GIMPLE_PHI' 'G'. 12466 12467 -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct 12468 phi_arg_d * phiarg) 12469 Set 'PHIARG' to be the argument corresponding to incoming edge 12470 'INDEX' for 'GIMPLE_PHI' 'G'. 12471 12472 12473File: gccint.info, Node: GIMPLE_RESX, Next: GIMPLE_RETURN, Prev: GIMPLE_PHI, Up: Tuple specific accessors 12474 1247511.8.25 'GIMPLE_RESX' 12476--------------------- 12477 12478 -- GIMPLE function: gresx *gimple_build_resx (int region) 12479 Build a 'GIMPLE_RESX' statement which is a statement. This 12480 statement is a placeholder for _Unwind_Resume before we know if a 12481 function call or a branch is needed. 'REGION' is the exception 12482 region from which control is flowing. 12483 12484 -- GIMPLE function: int gimple_resx_region (const gresx *g) 12485 Return the region number for 'GIMPLE_RESX' 'G'. 12486 12487 -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region) 12488 Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'. 12489 12490 12491File: gccint.info, Node: GIMPLE_RETURN, Next: GIMPLE_SWITCH, Prev: GIMPLE_RESX, Up: Tuple specific accessors 12492 1249311.8.26 'GIMPLE_RETURN' 12494----------------------- 12495 12496 -- GIMPLE function: greturn *gimple_build_return (tree retval) 12497 Build a 'GIMPLE_RETURN' statement whose return value is retval. 12498 12499 -- GIMPLE function: tree gimple_return_retval (const greturn *g) 12500 Return the return value for 'GIMPLE_RETURN' 'G'. 12501 12502 -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree 12503 retval) 12504 Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'. 12505 12506 12507File: gccint.info, Node: GIMPLE_SWITCH, Next: GIMPLE_TRY, Prev: GIMPLE_RETURN, Up: Tuple specific accessors 12508 1250911.8.27 'GIMPLE_SWITCH' 12510----------------------- 12511 12512 -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree 12513 default_label, 'vec'<tree> *args) 12514 Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable 12515 to switch on, and 'DEFAULT_LABEL' represents the default label. 12516 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the 12517 non-default case labels. Each label is a tree of code 12518 'CASE_LABEL_EXPR'. 12519 12520 -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch 12521 *g) 12522 Return the number of labels associated with the switch statement 12523 'G'. 12524 12525 -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g, 12526 unsigned nlabels) 12527 Set 'NLABELS' to be the number of labels for the switch statement 12528 'G'. 12529 12530 -- GIMPLE function: tree gimple_switch_index (const gswitch *g) 12531 Return the index variable used by the switch statement 'G'. 12532 12533 -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree 12534 index) 12535 Set 'INDEX' to be the index variable for switch statement 'G'. 12536 12537 -- GIMPLE function: tree gimple_switch_label (const gswitch *g, 12538 unsigned index) 12539 Return the label numbered 'INDEX'. The default label is 0, 12540 followed by any labels in a switch statement. 12541 12542 -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned 12543 index, tree label) 12544 Set the label number 'INDEX' to 'LABEL'. 0 is always the default 12545 label. 12546 12547 -- GIMPLE function: tree gimple_switch_default_label ( const gswitch 12548 *g) 12549 Return the default label for a switch statement. 12550 12551 -- GIMPLE function: void gimple_switch_set_default_label (gswitch *g, 12552 tree label) 12553 Set the default label for a switch statement. 12554 12555 12556File: gccint.info, Node: GIMPLE_TRY, Next: GIMPLE_WITH_CLEANUP_EXPR, Prev: GIMPLE_SWITCH, Up: Tuple specific accessors 12557 1255811.8.28 'GIMPLE_TRY' 12559-------------------- 12560 12561 -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq 12562 cleanup, unsigned int kind) 12563 Build a 'GIMPLE_TRY' statement. 'EVAL' is a sequence with the 12564 expression to evaluate. 'CLEANUP' is a sequence of statements to 12565 run at clean-up time. 'KIND' is the enumeration value 12566 'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 12567 or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 12568 construct. 12569 12570 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 12571 Return the kind of try block represented by 'GIMPLE_TRY' 'G'. This 12572 is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'. 12573 12574 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 12575 Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 12576 12577 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 12578 Return the sequence of statements used as the body for 'GIMPLE_TRY' 12579 'G'. 12580 12581 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 12582 Return the sequence of statements used as the cleanup body for 12583 'GIMPLE_TRY' 'G'. 12584 12585 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 12586 bool catch_is_cleanup) 12587 Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 12588 12589 -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval) 12590 Set 'EVAL' to be the sequence of statements to use as the body for 12591 'GIMPLE_TRY' 'G'. 12592 12593 -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq 12594 cleanup) 12595 Set 'CLEANUP' to be the sequence of statements to use as the 12596 cleanup body for 'GIMPLE_TRY' 'G'. 12597 12598 12599File: gccint.info, Node: GIMPLE_WITH_CLEANUP_EXPR, Prev: GIMPLE_TRY, Up: Tuple specific accessors 12600 1260111.8.29 'GIMPLE_WITH_CLEANUP_EXPR' 12602---------------------------------- 12603 12604 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 12605 Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement. 'CLEANUP' is the 12606 clean-up expression. 12607 12608 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 12609 Return the cleanup sequence for cleanup statement 'G'. 12610 12611 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 12612 cleanup) 12613 Set 'CLEANUP' to be the cleanup sequence for 'G'. 12614 12615 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 12616 Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 12617 12618 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool 12619 eh_only_p) 12620 Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 12621 12622 12623File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 12624 1262511.9 GIMPLE sequences 12626===================== 12627 12628GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in 12629'GENERIC'. They are used to chain statements together, and when used in 12630conjunction with sequence iterators, provide a framework for iterating 12631through statements. 12632 12633 GIMPLE sequences are of type struct 'gimple_sequence', but are more 12634commonly passed by reference to functions dealing with sequences. The 12635type for a sequence pointer is 'gimple_seq' which is the same as struct 12636'gimple_sequence' *. When declaring a local sequence, you can define a 12637local variable of type struct 'gimple_sequence'. When declaring a 12638sequence allocated on the garbage collected heap, use the function 12639'gimple_seq_alloc' documented below. 12640 12641 There are convenience functions for iterating through sequences in the 12642section entitled Sequence Iterators. 12643 12644 Below is a list of functions to manipulate and query sequences. 12645 12646 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 12647 g) 12648 Link a gimple statement to the end of the sequence *'SEQ' if 'G' is 12649 not 'NULL'. If *'SEQ' is 'NULL', allocate a sequence before 12650 linking. 12651 12652 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 12653 gimple_seq src) 12654 Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is 12655 not 'NULL'. If *'DEST' is 'NULL', allocate a new sequence before 12656 appending. 12657 12658 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 12659 Perform a deep copy of sequence 'SRC' and return the result. 12660 12661 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 12662 Reverse the order of the statements in the sequence 'SEQ'. Return 12663 'SEQ'. 12664 12665 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 12666 Return the first statement in sequence 'S'. 12667 12668 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 12669 Return the last statement in sequence 'S'. 12670 12671 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 12672 last) 12673 Set the last statement in sequence 'S' to the statement in 'LAST'. 12674 12675 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 12676 first) 12677 Set the first statement in sequence 'S' to the statement in 12678 'FIRST'. 12679 12680 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 12681 Initialize sequence 'S' to an empty sequence. 12682 12683 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 12684 Allocate a new sequence in the garbage collected store and return 12685 it. 12686 12687 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 12688 src) 12689 Copy the sequence 'SRC' into the sequence 'DEST'. 12690 12691 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 12692 Return true if the sequence 'S' is empty. 12693 12694 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 12695 Returns the sequence of statements in 'BB'. 12696 12697 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 12698 Sets the sequence of statements in 'BB' to 'SEQ'. 12699 12700 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 12701 Determine whether 'SEQ' contains exactly one statement. 12702 12703 12704File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 12705 1270611.10 Sequence iterators 12707======================== 12708 12709Sequence iterators are convenience constructs for iterating through 12710statements in a sequence. Given a sequence 'SEQ', here is a typical use 12711of gimple sequence iterators: 12712 12713 gimple_stmt_iterator gsi; 12714 12715 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 12716 { 12717 gimple g = gsi_stmt (gsi); 12718 /* Do something with gimple statement G. */ 12719 } 12720 12721 Backward iterations are possible: 12722 12723 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 12724 12725 Forward and backward iterations on basic blocks are possible with 12726'gsi_start_bb' and 'gsi_last_bb'. 12727 12728 In the documentation below we sometimes refer to enum 12729'gsi_iterator_update'. The valid options for this enumeration are: 12730 12731 * 'GSI_NEW_STMT' Only valid when a single statement is added. Move 12732 the iterator to it. 12733 12734 * 'GSI_SAME_STMT' Leave the iterator at the same statement. 12735 12736 * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is 12737 suitable for linking other statements in the same direction. 12738 12739 Below is a list of the functions used to manipulate and use statement 12740iterators. 12741 12742 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 12743 Return a new iterator pointing to the sequence 'SEQ''s first 12744 statement. If 'SEQ' is empty, the iterator's basic block is 12745 'NULL'. Use 'gsi_start_bb' instead when the iterator needs to 12746 always have the correct basic block set. 12747 12748 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 12749 Return a new iterator pointing to the first statement in basic 12750 block 'BB'. 12751 12752 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 12753 Return a new iterator initially pointing to the last statement of 12754 sequence 'SEQ'. If 'SEQ' is empty, the iterator's basic block is 12755 'NULL'. Use 'gsi_last_bb' instead when the iterator needs to 12756 always have the correct basic block set. 12757 12758 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 12759 Return a new iterator pointing to the last statement in basic block 12760 'BB'. 12761 12762 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 12763 Return 'TRUE' if at the end of 'I'. 12764 12765 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 12766 Return 'TRUE' if we're one statement before the end of 'I'. 12767 12768 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 12769 Advance the iterator to the next gimple statement. 12770 12771 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 12772 Advance the iterator to the previous gimple statement. 12773 12774 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 12775 Return the current stmt. 12776 12777 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 12778 bb) 12779 Return a block statement iterator that points to the first 12780 non-label statement in block 'BB'. 12781 12782 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i) 12783 Return a pointer to the current stmt. 12784 12785 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 12786 Return the basic block associated with this iterator. 12787 12788 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 12789 Return the sequence associated with this iterator. 12790 12791 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 12792 remove_eh_info) 12793 Remove the current stmt from the sequence. The iterator is updated 12794 to point to the next statement. When 'REMOVE_EH_INFO' is true we 12795 remove the statement pointed to by iterator 'I' from the 'EH' 12796 tables. Otherwise we do not modify the 'EH' tables. Generally, 12797 'REMOVE_EH_INFO' should be true when the statement is going to be 12798 removed from the 'IL' and not reinserted elsewhere. 12799 12800 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 12801 gimple_seq seq, enum gsi_iterator_update mode) 12802 Links the sequence of statements 'SEQ' before the statement pointed 12803 by iterator 'I'. 'MODE' indicates what to do with the iterator 12804 after insertion (see 'enum gsi_iterator_update' above). 12805 12806 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 12807 gimple g, enum gsi_iterator_update mode) 12808 Links statement 'G' before the statement pointed-to by iterator 12809 'I'. Updates iterator 'I' according to 'MODE'. 12810 12811 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 12812 gimple_seq seq, enum gsi_iterator_update mode) 12813 Links sequence 'SEQ' after the statement pointed-to by iterator 12814 'I'. 'MODE' is as in 'gsi_insert_after'. 12815 12816 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 12817 gimple g, enum gsi_iterator_update mode) 12818 Links statement 'G' after the statement pointed-to by iterator 'I'. 12819 'MODE' is as in 'gsi_insert_after'. 12820 12821 -- GIMPLE function: gimple_seq gsi_split_seq_after 12822 (gimple_stmt_iterator i) 12823 Move all statements in the sequence after 'I' to a new sequence. 12824 Return this new sequence. 12825 12826 -- GIMPLE function: gimple_seq gsi_split_seq_before 12827 (gimple_stmt_iterator *i) 12828 Move all statements in the sequence before 'I' to a new sequence. 12829 Return this new sequence. 12830 12831 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 12832 stmt, bool update_eh_info) 12833 Replace the statement pointed-to by 'I' to 'STMT'. If 12834 'UPDATE_EH_INFO' is true, the exception handling information of the 12835 original statement is moved to the new statement. 12836 12837 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 12838 gimple stmt, enum gsi_iterator_update mode) 12839 Insert statement 'STMT' before the statement pointed-to by iterator 12840 'I', update 'STMT''s basic block and scan it for new operands. 12841 'MODE' specifies how to update iterator 'I' after insertion (see 12842 enum 'gsi_iterator_update'). 12843 12844 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 12845 *i, gimple_seq seq, enum gsi_iterator_update mode) 12846 Like 'gsi_insert_before', but for all the statements in 'SEQ'. 12847 12848 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 12849 gimple stmt, enum gsi_iterator_update mode) 12850 Insert statement 'STMT' after the statement pointed-to by iterator 12851 'I', update 'STMT''s basic block and scan it for new operands. 12852 'MODE' specifies how to update iterator 'I' after insertion (see 12853 enum 'gsi_iterator_update'). 12854 12855 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i, 12856 gimple_seq seq, enum gsi_iterator_update mode) 12857 Like 'gsi_insert_after', but for all the statements in 'SEQ'. 12858 12859 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 12860 Finds iterator for 'STMT'. 12861 12862 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 12863 gimple_stmt_iterator *to) 12864 Move the statement at 'FROM' so it comes right after the statement 12865 at 'TO'. 12866 12867 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 12868 gimple_stmt_iterator *to) 12869 Move the statement at 'FROM' so it comes right before the statement 12870 at 'TO'. 12871 12872 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 12873 *from, basic_block bb) 12874 Move the statement at 'FROM' to the end of basic block 'BB'. 12875 12876 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 12877 Add 'STMT' to the pending list of edge 'E'. No actual insertion is 12878 made until a call to 'gsi_commit_edge_inserts'() is made. 12879 12880 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 12881 seq) 12882 Add the sequence of statements in 'SEQ' to the pending list of edge 12883 'E'. No actual insertion is made until a call to 12884 'gsi_commit_edge_inserts'() is made. 12885 12886 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 12887 gimple stmt) 12888 Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'. If a 12889 new block has to be created, it is returned. 12890 12891 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 12892 basic_block *new_bb) 12893 Commit insertions pending at edge 'E'. If a new block is created, 12894 set 'NEW_BB' to this block, otherwise set it to 'NULL'. 12895 12896 -- GIMPLE function: void gsi_commit_edge_inserts (void) 12897 This routine will commit all pending edge insertions, creating any 12898 new basic blocks which are necessary. 12899 12900 12901File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 12902 1290311.11 Adding a new GIMPLE statement code 12904======================================== 12905 12906The first step in adding a new GIMPLE statement code, is modifying the 12907file 'gimple.def', which contains all the GIMPLE codes. Then you must 12908add a corresponding gimple_statement_base subclass located in 12909'gimple.h'. This in turn, will require you to add a corresponding 'GTY' 12910tag in 'gsstruct.def', and code to handle this tag in 'gss_for_code' 12911which is located in 'gimple.c'. 12912 12913 In order for the garbage collector to know the size of the structure 12914you created in 'gimple.h', you need to add a case to handle your new 12915GIMPLE statement in 'gimple_size' which is located in 'gimple.c'. 12916 12917 You will probably want to create a function to build the new gimple 12918statement in 'gimple.c'. The function should be called 12919'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a 12920pointer to the appropriate gimple_statement_base subclass. 12921 12922 If your new statement requires accessors for any members or operands it 12923may have, put simple inline accessors in 'gimple.h' and any non-trivial 12924accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'. 12925 12926 You should add the new statement subclass to the class hierarchy 12927diagram in 'gimple.texi'. 12928 12929 12930File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 12931 1293211.12 Statement and operand traversals 12933====================================== 12934 12935There are two functions available for walking statements and sequences: 12936'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third 12937function for walking the operands in a statement: 'walk_gimple_op'. 12938 12939 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 12940 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 12941 walk_stmt_info *wi) 12942 This function is used to walk the current statement in 'GSI', 12943 optionally using traversal state stored in 'WI'. If 'WI' is 12944 'NULL', no state is kept during the traversal. 12945 12946 The callback 'CALLBACK_STMT' is called. If 'CALLBACK_STMT' returns 12947 true, it means that the callback function has handled all the 12948 operands of the statement and it is not necessary to walk its 12949 operands. 12950 12951 If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is 12952 called on each operand of the statement via 'walk_gimple_op'. If 12953 'walk_gimple_op' returns non-'NULL' for any operand, the remaining 12954 operands are not scanned. 12955 12956 The return value is that returned by the last call to 12957 'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified. 12958 12959 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 12960 callback_op, struct walk_stmt_info *wi) 12961 Use this function to walk the operands of statement 'STMT'. Every 12962 operand is walked via 'walk_tree' with optional state information 12963 in 'WI'. 12964 12965 'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'. 12966 Additional parameters to 'walk_tree' must be stored in 'WI'. For 12967 each operand 'OP', 'walk_tree' is called as: 12968 12969 walk_tree (&OP, CALLBACK_OP, WI, PSET) 12970 12971 If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining 12972 operands are not scanned. The return value is that returned by the 12973 last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is 12974 specified. 12975 12976 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 12977 callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info 12978 *wi) 12979 This function walks all the statements in the sequence 'SEQ' 12980 calling 'walk_gimple_stmt' on each one. 'WI' is as in 12981 'walk_gimple_stmt'. If 'walk_gimple_stmt' returns non-'NULL', the 12982 walk is stopped and the value returned. Otherwise, all the 12983 statements are walked and 'NULL_TREE' returned. 12984 12985 12986File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top 12987 1298812 Analysis and Optimization of GIMPLE tuples 12989********************************************* 12990 12991GCC uses three main intermediate languages to represent the program 12992during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 12993language-independent representation generated by each front end. It is 12994used to serve as an interface between the parser and optimizer. GENERIC 12995is a common representation that is able to represent programs written in 12996all the languages supported by GCC. 12997 12998 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 12999target and language independent optimizations (e.g., inlining, constant 13000propagation, tail call elimination, redundancy elimination, etc). Much 13001like GENERIC, GIMPLE is a language independent, tree based 13002representation. However, it differs from GENERIC in that the GIMPLE 13003grammar is more restrictive: expressions contain no more than 3 operands 13004(except function calls), it has no control flow structures and 13005expressions with side-effects are only allowed on the right hand side of 13006assignments. See the chapter describing GENERIC and GIMPLE for more 13007details. 13008 13009 This chapter describes the data structures and functions used in the 13010GIMPLE optimizers (also known as "tree optimizers" or "middle end"). In 13011particular, it focuses on all the macros, data structures, functions and 13012programming constructs needed to implement optimization passes for 13013GIMPLE. 13014 13015* Menu: 13016 13017* Annotations:: Attributes for variables. 13018* SSA Operands:: SSA names referenced by GIMPLE statements. 13019* SSA:: Static Single Assignment representation. 13020* Alias analysis:: Representing aliased loads and stores. 13021* Memory model:: Memory model used by the middle-end. 13022 13023 13024File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 13025 1302612.1 Annotations 13027================ 13028 13029The optimizers need to associate attributes with variables during the 13030optimization process. For instance, we need to know whether a variable 13031has aliases. All these attributes are stored in data structures called 13032annotations which are then linked to the field 'ann' in 'struct 13033tree_common'. 13034 13035 13036File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 13037 1303812.2 SSA Operands 13039================= 13040 13041Almost every GIMPLE statement will contain a reference to a variable or 13042memory location. Since statements come in different shapes and sizes, 13043their operands are going to be located at various spots inside the 13044statement's tree. To facilitate access to the statement's operands, 13045they are organized into lists associated inside each statement's 13046annotation. Each element in an operand list is a pointer to a 13047'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node. This provides a very 13048convenient way of examining and replacing operands. 13049 13050 Data flow analysis and optimization is done on all tree nodes 13051representing variables. Any node for which 'SSA_VAR_P' returns nonzero 13052is considered when scanning statement operands. However, not all 13053'SSA_VAR_P' variables are processed in the same way. For the purposes 13054of optimization, we need to distinguish between references to local 13055scalar variables and references to globals, statics, structures, arrays, 13056aliased variables, etc. The reason is simple, the compiler can gather 13057complete data flow information for a local scalar. On the other hand, a 13058global variable may be modified by a function call, it may not be 13059possible to keep track of all the elements of an array or the fields of 13060a structure, etc. 13061 13062 The operand scanner gathers two kinds of operands: "real" and 13063"virtual". An operand for which 'is_gimple_reg' returns true is 13064considered real, otherwise it is a virtual operand. We also distinguish 13065between uses and definitions. An operand is used if its value is loaded 13066by the statement (e.g., the operand at the RHS of an assignment). If 13067the statement assigns a new value to the operand, the operand is 13068considered a definition (e.g., the operand at the LHS of an assignment). 13069 13070 Virtual and real operands also have very different data flow 13071properties. Real operands are unambiguous references to the full object 13072that they represent. For instance, given 13073 13074 { 13075 int a, b; 13076 a = b 13077 } 13078 13079 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will 13080have one real definition and one real use because variable 'a' is 13081completely modified with the contents of variable 'b'. Real definition 13082are also known as "killing definitions". Similarly, the use of 'b' 13083reads all its bits. 13084 13085 In contrast, virtual operands are used with variables that can have a 13086partial or ambiguous reference. This includes structures, arrays, 13087globals, and aliased variables. In these cases, we have two types of 13088definitions. For globals, structures, and arrays, we can determine from 13089a statement whether a variable of these types has a killing definition. 13090If the variable does, then the statement is marked as having a "must 13091definition" of that variable. However, if a statement is only defining 13092a part of the variable (i.e. a field in a structure), or if we know that 13093a statement might define the variable but we cannot say for sure, then 13094we mark that statement as having a "may definition". For instance, 13095given 13096 13097 { 13098 int a, b, *p; 13099 13100 if (...) 13101 p = &a; 13102 else 13103 p = &b; 13104 *p = 5; 13105 return *p; 13106 } 13107 13108 The assignment '*p = 5' may be a definition of 'a' or 'b'. If we 13109cannot determine statically where 'p' is pointing to at the time of the 13110store operation, we create virtual definitions to mark that statement as 13111a potential definition site for 'a' and 'b'. Memory loads are similarly 13112marked with virtual use operands. Virtual operands are shown in tree 13113dumps right before the statement that contains them. To request a tree 13114dump with virtual operands, use the '-vops' option to '-fdump-tree': 13115 13116 { 13117 int a, b, *p; 13118 13119 if (...) 13120 p = &a; 13121 else 13122 p = &b; 13123 # a = VDEF <a> 13124 # b = VDEF <b> 13125 *p = 5; 13126 13127 # VUSE <a> 13128 # VUSE <b> 13129 return *p; 13130 } 13131 13132 Notice that 'VDEF' operands have two copies of the referenced variable. 13133This indicates that this is not a killing definition of that variable. 13134In this case we refer to it as a "may definition" or "aliased store". 13135The presence of the second copy of the variable in the 'VDEF' operand 13136will become important when the function is converted into SSA form. 13137This will be used to link all the non-killing definitions to prevent 13138optimizations from making incorrect assumptions about them. 13139 13140 Operands are updated as soon as the statement is finished via a call to 13141'update_stmt'. If statement elements are changed via 'SET_USE' or 13142'SET_DEF', then no further action is required (i.e., those macros take 13143care of updating the statement). If changes are made by manipulating 13144the statement's tree directly, then a call must be made to 'update_stmt' 13145when complete. Calling one of the 'bsi_insert' routines or 13146'bsi_replace' performs an implicit call to 'update_stmt'. 13147 1314812.2.1 Operand Iterators And Access Routines 13149-------------------------------------------- 13150 13151Operands are collected by 'tree-ssa-operands.c'. They are stored inside 13152each statement's annotation and can be accessed through either the 13153operand iterators or an access routine. 13154 13155 The following access routines are available for examining operands: 13156 13157 1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 13158 NULL unless there is exactly one operand matching the specified 13159 flags. If there is exactly one operand, the operand is returned as 13160 either a 'tree', 'def_operand_p', or 'use_operand_p'. 13161 13162 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 13163 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 13164 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 13165 13166 2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no 13167 operands matching the specified flags. 13168 13169 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 13170 return; 13171 13172 3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands 13173 matching 'flags'. This actually executes a loop to perform the 13174 count, so only use this if it is really needed. 13175 13176 int count = NUM_SSA_OPERANDS (stmt, flags) 13177 13178 If you wish to iterate over some or all operands, use the 13179'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 13180all the operands for a statement: 13181 13182 void 13183 print_ops (tree stmt) 13184 { 13185 ssa_op_iter; 13186 tree var; 13187 13188 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 13189 print_generic_expr (stderr, var, TDF_SLIM); 13190 } 13191 13192 How to choose the appropriate iterator: 13193 13194 1. Determine whether you are need to see the operand pointers, or just 13195 the trees, and choose the appropriate macro: 13196 13197 Need Macro: 13198 ---- ------- 13199 use_operand_p FOR_EACH_SSA_USE_OPERAND 13200 def_operand_p FOR_EACH_SSA_DEF_OPERAND 13201 tree FOR_EACH_SSA_TREE_OPERAND 13202 13203 2. You need to declare a variable of the type you are interested in, 13204 and an ssa_op_iter structure which serves as the loop controlling 13205 variable. 13206 13207 3. Determine which operands you wish to use, and specify the flags of 13208 those you are interested in. They are documented in 13209 'tree-ssa-operands.h': 13210 13211 #define SSA_OP_USE 0x01 /* Real USE operands. */ 13212 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 13213 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 13214 #define SSA_OP_VDEF 0x08 /* VDEF operands. */ 13215 13216 /* These are commonly grouped operand flags. */ 13217 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE) 13218 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 13219 #define SSA_OP_ALL_VIRTUALS (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS) 13220 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 13221 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 13222 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 13223 13224 So if you want to look at the use pointers for all the 'USE' and 'VUSE' 13225operands, you would do something like: 13226 13227 use_operand_p use_p; 13228 ssa_op_iter iter; 13229 13230 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 13231 { 13232 process_use_ptr (use_p); 13233 } 13234 13235 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros, 13236only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and 13237'DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use and 13238defs flags can be mixed. 13239 13240 tree var; 13241 ssa_op_iter iter; 13242 13243 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 13244 { 13245 print_generic_expr (stderr, var, TDF_SLIM); 13246 } 13247 13248 'VDEF's are broken into two flags, one for the 'DEF' portion 13249('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE'). 13250 13251 There are many examples in the code, in addition to the documentation 13252in 'tree-ssa-operands.h' and 'ssa-iterators.h'. 13253 13254 There are also a couple of variants on the stmt iterators regarding PHI 13255nodes. 13256 13257 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND', 13258except it works over 'PHI' arguments instead of statement operands. 13259 13260 /* Look at every virtual PHI use. */ 13261 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 13262 { 13263 my_code; 13264 } 13265 13266 /* Look at every real PHI use. */ 13267 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 13268 my_code; 13269 13270 /* Look at every PHI use. */ 13271 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 13272 my_code; 13273 13274 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 13275'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 13276statement or a 'PHI' node. These should be used when it is appropriate 13277but they are not quite as efficient as the individual 'FOR_EACH_PHI' and 13278'FOR_EACH_SSA' routines. 13279 13280 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 13281 { 13282 my_code; 13283 } 13284 13285 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 13286 { 13287 my_code; 13288 } 13289 1329012.2.2 Immediate Uses 13291--------------------- 13292 13293Immediate use information is now always available. Using the immediate 13294use iterators, you may examine every use of any 'SSA_NAME'. For 13295instance, to change each use of 'ssa_var' to 'ssa_var2' and call 13296fold_stmt on each stmt after that is done: 13297 13298 use_operand_p imm_use_p; 13299 imm_use_iterator iterator; 13300 tree ssa_var, stmt; 13301 13302 13303 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 13304 { 13305 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 13306 SET_USE (imm_use_p, ssa_var_2); 13307 fold_stmt (stmt); 13308 } 13309 13310 There are 2 iterators which can be used. 'FOR_EACH_IMM_USE_FAST' is 13311used when the immediate uses are not changed, i.e., you are looking at 13312the uses, but not setting them. 13313 13314 If they do get changed, then care must be taken that things are not 13315changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and 13316'FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 13317sanity of the use list by moving all the uses for a statement into a 13318controlled position, and then iterating over those uses. Then the 13319optimization can manipulate the stmt when all the uses have been 13320processed. This is a little slower than the FAST version since it adds 13321a placeholder element and must sort through the list a bit for each 13322statement. This placeholder element must be also be removed if the loop 13323is terminated early. The macro 'BREAK_FROM_IMM_USE_SAFE' is provided to 13324do this : 13325 13326 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 13327 { 13328 if (stmt == last_stmt) 13329 BREAK_FROM_SAFE_IMM_USE (iter); 13330 13331 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 13332 SET_USE (imm_use_p, ssa_var_2); 13333 fold_stmt (stmt); 13334 } 13335 13336 There are checks in 'verify_ssa' which verify that the immediate use 13337list is up to date, as well as checking that an optimization didn't 13338break from the loop without using this macro. It is safe to simply 13339'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse. 13340 13341 Some useful functions and macros: 13342 1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of 13343 'ssa_var'. 13344 2. 'has_single_use (ssa_var)' : Returns true if there is only a single 13345 use of 'ssa_var'. 13346 3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 13347 Returns true if there is only a single use of 'ssa_var', and also 13348 returns the use pointer and statement it occurs in, in the second 13349 and third parameters. 13350 4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of 13351 'ssa_var'. It is better not to use this if possible since it 13352 simply utilizes a loop to count the uses. 13353 5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node, 13354 return the index number for the use. An assert is triggered if the 13355 use isn't located in a 'PHI' node. 13356 6. 'USE_STMT (use_p)' : Return the statement a use occurs in. 13357 13358 Note that uses are not put into an immediate use list until their 13359statement is actually inserted into the instruction stream via a 'bsi_*' 13360routine. 13361 13362 It is also still possible to utilize lazy updating of statements, but 13363this should be used only when absolutely required. Both alias analysis 13364and the dominator optimizations currently do this. 13365 13366 When lazy updating is being used, the immediate use information is out 13367of date and cannot be used reliably. Lazy updating is achieved by 13368simply marking statements modified via calls to 'mark_stmt_modified' 13369instead of 'update_stmt'. When lazy updating is no longer required, all 13370the modified statements must have 'update_stmt' called in order to bring 13371them up to date. This must be done before the optimization is finished, 13372or 'verify_ssa' will trigger an abort. 13373 13374 This is done with a simple loop over the instruction stream: 13375 block_stmt_iterator bsi; 13376 basic_block bb; 13377 FOR_EACH_BB (bb) 13378 { 13379 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 13380 update_stmt_if_modified (bsi_stmt (bsi)); 13381 } 13382 13383 13384File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 13385 1338612.3 Static Single Assignment 13387============================= 13388 13389Most of the tree optimizers rely on the data flow information provided 13390by the Static Single Assignment (SSA) form. We implement the SSA form 13391as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 13392Zadeck. Efficiently Computing Static Single Assignment Form and the 13393Control Dependence Graph. ACM Transactions on Programming Languages and 13394Systems, 13(4):451-490, October 1991'. 13395 13396 The SSA form is based on the premise that program variables are 13397assigned in exactly one location in the program. Multiple assignments 13398to the same variable create new versions of that variable. Naturally, 13399actual programs are seldom in SSA form initially because variables tend 13400to be assigned multiple times. The compiler modifies the program 13401representation so that every time a variable is assigned in the code, a 13402new version of the variable is created. Different versions of the same 13403variable are distinguished by subscripting the variable name with its 13404version number. Variables used in the right-hand side of expressions 13405are renamed so that their version number matches that of the most recent 13406assignment. 13407 13408 We represent variable versions using 'SSA_NAME' nodes. The renaming 13409process in 'tree-ssa.c' wraps every real and virtual operand with an 13410'SSA_NAME' node which contains the version number and the statement that 13411created the 'SSA_NAME'. Only definitions and virtual definitions may 13412create new 'SSA_NAME' nodes. 13413 13414 Sometimes, flow of control makes it impossible to determine the most 13415recent version of a variable. In these cases, the compiler inserts an 13416artificial definition for that variable called "PHI function" or "PHI 13417node". This new definition merges all the incoming versions of the 13418variable to create a new name for it. For instance, 13419 13420 if (...) 13421 a_1 = 5; 13422 else if (...) 13423 a_2 = 2; 13424 else 13425 a_3 = 13; 13426 13427 # a_4 = PHI <a_1, a_2, a_3> 13428 return a_4; 13429 13430 Since it is not possible to determine which of the three branches will 13431be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use 13432at the return statement. So, the SSA renamer creates a new version 13433'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'. 13434Hence, PHI nodes mean "one of these operands. I don't know which". 13435 13436 The following functions can be used to examine PHI nodes 13437 13438 -- Function: gimple_phi_result (PHI) 13439 Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 13440 13441 -- Function: gimple_phi_num_args (PHI) 13442 Returns the number of arguments in PHI. This number is exactly the 13443 number of incoming edges to the basic block holding PHI. 13444 13445 -- Function: gimple_phi_arg (PHI, I) 13446 Returns Ith argument of PHI. 13447 13448 -- Function: gimple_phi_arg_edge (PHI, I) 13449 Returns the incoming edge for the Ith argument of PHI. 13450 13451 -- Function: gimple_phi_arg_def (PHI, I) 13452 Returns the 'SSA_NAME' for the Ith argument of PHI. 13453 1345412.3.1 Preserving the SSA form 13455------------------------------ 13456 13457Some optimization passes make changes to the function that invalidate 13458the SSA property. This can happen when a pass has added new symbols or 13459changed the program so that variables that were previously aliased 13460aren't anymore. Whenever something like this happens, the affected 13461symbols must be renamed into SSA form again. Transformations that emit 13462new code or replicate existing statements will also need to update the 13463SSA form. 13464 13465 Since GCC implements two different SSA forms for register and virtual 13466variables, keeping the SSA form up to date depends on whether you are 13467updating register or virtual names. In both cases, the general idea 13468behind incremental SSA updates is similar: when new SSA names are 13469created, they typically are meant to replace other existing names in the 13470program. 13471 13472 For instance, given the following code: 13473 13474 1 L0: 13475 2 x_1 = PHI (0, x_5) 13476 3 if (x_1 < 10) 13477 4 if (x_1 > 7) 13478 5 y_2 = 0 13479 6 else 13480 7 y_3 = x_1 + x_7 13481 8 endif 13482 9 x_5 = x_1 + 1 13483 10 goto L0; 13484 11 endif 13485 13486 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8'). 13487 13488 1 L0: 13489 2 x_1 = PHI (0, x_5) 13490 3 if (x_1 < 10) 13491 4 x_10 = ... 13492 5 if (x_1 > 7) 13493 6 y_2 = 0 13494 7 else 13495 8 x_11 = ... 13496 9 y_3 = x_1 + x_7 13497 10 endif 13498 11 x_5 = x_1 + 1 13499 12 goto L0; 13500 13 endif 13501 13502 We want to replace all the uses of 'x_1' with the new definitions of 13503'x_10' and 'x_11'. Note that the only uses that should be replaced are 13504those at lines '5', '9' and '11'. Also, the use of 'x_7' at line '9' 13505should _not_ be replaced (this is why we cannot just mark symbol 'x' for 13506renaming). 13507 13508 Additionally, we may need to insert a PHI node at line '11' because 13509that is a merge point for 'x_10' and 'x_11'. So the use of 'x_1' at 13510line '11' will be replaced with the new PHI node. The insertion of PHI 13511nodes is optional. They are not strictly necessary to preserve the SSA 13512form, and depending on what the caller inserted, they may not even be 13513useful for the optimizers. 13514 13515 Updating the SSA form is a two step process. First, the pass has to 13516identify which names need to be updated and/or which symbols need to be 13517renamed into SSA form for the first time. When new names are introduced 13518to replace existing names in the program, the mapping between the old 13519and the new names are registered by calling 'register_new_name_mapping' 13520(note that if your pass creates new code by duplicating basic blocks, 13521the call to 'tree_duplicate_bb' will set up the necessary mappings 13522automatically). 13523 13524 After the replacement mappings have been registered and new symbols 13525marked for renaming, a call to 'update_ssa' makes the registered 13526changes. This can be done with an explicit call or by creating 'TODO' 13527flags in the 'tree_opt_pass' structure for your pass. There are several 13528'TODO' flags that control the behavior of 'update_ssa': 13529 13530 * 'TODO_update_ssa'. Update the SSA form inserting PHI nodes for 13531 newly exposed symbols and virtual names marked for updating. When 13532 updating real names, only insert PHI nodes for a real name 'O_j' in 13533 blocks reached by all the new and old definitions for 'O_j'. If 13534 the iterated dominance frontier for 'O_j' is not pruned, we may end 13535 up inserting PHI nodes in blocks that have one or more edges with 13536 no incoming definition for 'O_j'. This would lead to uninitialized 13537 warnings for 'O_j''s symbol. 13538 13539 * 'TODO_update_ssa_no_phi'. Update the SSA form without inserting 13540 any new PHI nodes at all. This is used by passes that have either 13541 inserted all the PHI nodes themselves or passes that need only to 13542 patch use-def and def-def chains for virtuals (e.g., DCE). 13543 13544 * 'TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 13545 needed. No pruning of the IDF is done. This is used by passes 13546 that need the PHI nodes for 'O_j' even if it means that some 13547 arguments will come from the default definition of 'O_j''s symbol 13548 (e.g., 'pass_linear_transform'). 13549 13550 WARNING: If you need to use this flag, chances are that your pass 13551 may be doing something wrong. Inserting PHI nodes for an old name 13552 where not all edges carry a new replacement may lead to silent 13553 codegen errors or spurious uninitialized warnings. 13554 13555 * 'TODO_update_ssa_only_virtuals'. Passes that update the SSA form 13556 on their own may want to delegate the updating of virtual names to 13557 the generic updater. Since FUD chains are easier to maintain, this 13558 simplifies the work they need to do. NOTE: If this flag is used, 13559 any OLD->NEW mappings for real names are explicitly destroyed and 13560 only the symbols marked for renaming are processed. 13561 1356212.3.2 Preserving the virtual SSA form 13563-------------------------------------- 13564 13565The virtual SSA form is harder to preserve than the non-virtual SSA form 13566mainly because the set of virtual operands for a statement may change at 13567what some would consider unexpected times. In general, statement 13568modifications should be bracketed between calls to 'push_stmt_changes' 13569and 'pop_stmt_changes'. For example, 13570 13571 munge_stmt (tree stmt) 13572 { 13573 push_stmt_changes (&stmt); 13574 ... rewrite STMT ... 13575 pop_stmt_changes (&stmt); 13576 } 13577 13578 The call to 'push_stmt_changes' saves the current state of the 13579statement operands and the call to 'pop_stmt_changes' compares the saved 13580state with the current one and does the appropriate symbol marking for 13581the SSA renamer. 13582 13583 It is possible to modify several statements at a time, provided that 13584'push_stmt_changes' and 'pop_stmt_changes' are called in LIFO order, as 13585when processing a stack of statements. 13586 13587 Additionally, if the pass discovers that it did not need to make 13588changes to the statement after calling 'push_stmt_changes', it can 13589simply discard the topmost change buffer by calling 13590'discard_stmt_changes'. This will avoid the expensive operand re-scan 13591operation and the buffer comparison that determines if symbols need to 13592be marked for renaming. 13593 1359412.3.3 Examining 'SSA_NAME' nodes 13595--------------------------------- 13596 13597The following macros can be used to examine 'SSA_NAME' nodes 13598 13599 -- Macro: SSA_NAME_DEF_STMT (VAR) 13600 Returns the statement S that creates the 'SSA_NAME' VAR. If S is 13601 an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it 13602 means that the first reference to this variable is a USE or a VUSE. 13603 13604 -- Macro: SSA_NAME_VERSION (VAR) 13605 Returns the version number of the 'SSA_NAME' object VAR. 13606 1360712.3.4 Walking the dominator tree 13608--------------------------------- 13609 13610 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 13611 13612 This function walks the dominator tree for the current CFG calling 13613 a set of callback functions defined in STRUCT DOM_WALK_DATA in 13614 'domwalk.h'. The call back functions you need to define give you 13615 hooks to execute custom code at various points during traversal: 13616 13617 1. Once to initialize any local data needed while processing BB 13618 and its children. This local data is pushed into an internal 13619 stack which is automatically pushed and popped as the walker 13620 traverses the dominator tree. 13621 13622 2. Once before traversing all the statements in the BB. 13623 13624 3. Once for every statement inside BB. 13625 13626 4. Once after traversing all the statements and before recursing 13627 into BB's dominator children. 13628 13629 5. It then recurses into all the dominator children of BB. 13630 13631 6. After recursing into all the dominator children of BB it can, 13632 optionally, traverse every statement in BB again (i.e., 13633 repeating steps 2 and 3). 13634 13635 7. Once after walking the statements in BB and BB's dominator 13636 children. At this stage, the block local data stack is 13637 popped. 13638 13639 13640File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 13641 1364212.4 Alias analysis 13643=================== 13644 13645Alias analysis in GIMPLE SSA form consists of two pieces. First the 13646virtual SSA web ties conflicting memory accesses and provides a SSA 13647use-def chain and SSA immediate-use chains for walking possibly 13648dependent memory accesses. Second an alias-oracle can be queried to 13649disambiguate explicit and implicit memory references. 13650 13651 1. Memory SSA form. 13652 13653 All statements that may use memory have exactly one accompanied use 13654 of a virtual SSA name that represents the state of memory at the 13655 given point in the IL. 13656 13657 All statements that may define memory have exactly one accompanied 13658 definition of a virtual SSA name using the previous state of memory 13659 and defining the new state of memory after the given point in the 13660 IL. 13661 13662 int i; 13663 int foo (void) 13664 { 13665 # .MEM_3 = VDEF <.MEM_2(D)> 13666 i = 1; 13667 # VUSE <.MEM_3> 13668 return i; 13669 } 13670 13671 The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'. 13672 The store to the global variable 'i' defines '.MEM_3' invalidating 13673 '.MEM_2(D)'. The load from 'i' uses that new state '.MEM_3'. 13674 13675 The virtual SSA web serves as constraints to SSA optimizers 13676 preventing illegitimate code-motion and optimization. It also 13677 provides a way to walk related memory statements. 13678 13679 2. Points-to and escape analysis. 13680 13681 Points-to analysis builds a set of constraints from the GIMPLE SSA 13682 IL representing all pointer operations and facts we do or do not 13683 know about pointers. Solving this set of constraints yields a 13684 conservatively correct solution for each pointer variable in the 13685 program (though we are only interested in SSA name pointers) as to 13686 what it may possibly point to. 13687 13688 This points-to solution for a given SSA name pointer is stored in 13689 the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record. 13690 The following accessor functions are available: 13691 13692 * 'pt_solution_includes' 13693 * 'pt_solutions_intersect' 13694 13695 Points-to analysis also computes the solution for two special set 13696 of pointers, 'ESCAPED' and 'CALLUSED'. Those represent all memory 13697 that has escaped the scope of analysis or that is used by pure or 13698 nested const calls. 13699 13700 3. Type-based alias analysis 13701 13702 Type-based alias analysis is frontend dependent though generic 13703 support is provided by the middle-end in 'alias.c'. TBAA code is 13704 used by both tree optimizers and RTL optimizers. 13705 13706 Every language that wishes to perform language-specific alias 13707 analysis should define a function that computes, given a 'tree' 13708 node, an alias set for the node. Nodes in different alias sets are 13709 not allowed to alias. For an example, see the C front-end function 13710 'c_get_alias_set'. 13711 13712 4. Tree alias-oracle 13713 13714 The tree alias-oracle provides means to disambiguate two memory 13715 references and memory references against statements. The following 13716 queries are available: 13717 13718 * 'refs_may_alias_p' 13719 * 'ref_maybe_used_by_stmt_p' 13720 * 'stmt_may_clobber_ref_p' 13721 13722 In addition to those two kind of statement walkers are available 13723 walking statements related to a reference ref. 13724 'walk_non_aliased_vuses' walks over dominating memory defining 13725 statements and calls back if the statement does not clobber ref 13726 providing the non-aliased VUSE. The walk stops at the first 13727 clobbering statement or if asked to. 'walk_aliased_vdefs' walks 13728 over dominating memory defining statements and calls back on each 13729 statement clobbering ref providing its aliasing VDEF. The walk 13730 stops if asked to. 13731 13732 13733File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 13734 1373512.5 Memory model 13736================= 13737 13738The memory model used by the middle-end models that of the C/C++ 13739languages. The middle-end has the notion of an effective type of a 13740memory region which is used for type-based alias analysis. 13741 13742 The following is a refinement of ISO C99 6.5/6, clarifying the block 13743copy case to follow common sense and extending the concept of a dynamic 13744effective type to objects with a declared type as required for C++. 13745 13746 The effective type of an object for an access to its stored value is 13747 the declared type of the object or the effective type determined by 13748 a previous store to it. If a value is stored into an object through 13749 an lvalue having a type that is not a character type, then the 13750 type of the lvalue becomes the effective type of the object for that 13751 access and for subsequent accesses that do not modify the stored value. 13752 If a value is copied into an object using memcpy or memmove, 13753 or is copied as an array of character type, then the effective type 13754 of the modified object for that access and for subsequent accesses that 13755 do not modify the value is undetermined. For all other accesses to an 13756 object, the effective type of the object is simply the type of the 13757 lvalue used for the access. 13758 13759 13760File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top 13761 1376213 RTL Representation 13763********************* 13764 13765The last part of the compiler work is done on a low-level intermediate 13766representation called Register Transfer Language. In this language, the 13767instructions to be output are described, pretty much one by one, in an 13768algebraic form that describes what the instruction does. 13769 13770 RTL is inspired by Lisp lists. It has both an internal form, made up 13771of structures that point at other structures, and a textual form that is 13772used in the machine description and in printed debugging dumps. The 13773textual form uses nested parentheses to indicate the pointers in the 13774internal form. 13775 13776* Menu: 13777 13778* RTL Objects:: Expressions vs vectors vs strings vs integers. 13779* RTL Classes:: Categories of RTL expression objects, and their structure. 13780* Accessors:: Macros to access expression operands or vector elts. 13781* Special Accessors:: Macros to access specific annotations on RTL. 13782* Flags:: Other flags in an RTL expression. 13783* Machine Modes:: Describing the size and format of a datum. 13784* Constants:: Expressions with constant values. 13785* Regs and Memory:: Expressions representing register contents or memory. 13786* Arithmetic:: Expressions representing arithmetic on other expressions. 13787* Comparisons:: Expressions representing comparison of expressions. 13788* Bit-Fields:: Expressions representing bit-fields in memory or reg. 13789* Vector Operations:: Expressions involving vector datatypes. 13790* Conversions:: Extending, truncating, floating or fixing. 13791* RTL Declarations:: Declaring volatility, constancy, etc. 13792* Side Effects:: Expressions for storing in registers, etc. 13793* Incdec:: Embedded side-effects for autoincrement addressing. 13794* Assembler:: Representing 'asm' with operands. 13795* Debug Information:: Expressions representing debugging information. 13796* Insns:: Expression types for entire insns. 13797* Calls:: RTL representation of function call insns. 13798* Sharing:: Some expressions are unique; others *must* be copied. 13799* Reading RTL:: Reading textual RTL from a file. 13800 13801 13802File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 13803 1380413.1 RTL Object Types 13805===================== 13806 13807RTL uses five kinds of objects: expressions, integers, wide integers, 13808strings and vectors. Expressions are the most important ones. An RTL 13809expression ("RTX", for short) is a C structure, but it is usually 13810referred to with a pointer; a type that is given the typedef name 'rtx'. 13811 13812 An integer is simply an 'int'; their written form uses decimal digits. 13813A wide integer is an integral object whose type is 'HOST_WIDE_INT'; 13814their written form uses decimal digits. 13815 13816 A string is a sequence of characters. In core it is represented as a 13817'char *' in usual C fashion, and it is written in C syntax as well. 13818However, strings in RTL may never be null. If you write an empty string 13819in a machine description, it is represented in core as a null pointer 13820rather than as a pointer to a null character. In certain contexts, 13821these null pointers instead of strings are valid. Within RTL code, 13822strings are most commonly found inside 'symbol_ref' expressions, but 13823they appear in other contexts in the RTL expressions that make up 13824machine descriptions. 13825 13826 In a machine description, strings are normally written with double 13827quotes, as you would in C. However, strings in machine descriptions may 13828extend over many lines, which is invalid C, and adjacent string 13829constants are not concatenated as they are in C. Any string constant 13830may be surrounded with a single set of parentheses. Sometimes this 13831makes the machine description easier to read. 13832 13833 There is also a special syntax for strings, which can be useful when C 13834code is embedded in a machine description. Wherever a string can 13835appear, it is also valid to write a C-style brace block. The entire 13836brace block, including the outermost pair of braces, is considered to be 13837the string constant. Double quote characters inside the braces are not 13838special. Therefore, if you write string constants in the C code, you 13839need not escape each quote character with a backslash. 13840 13841 A vector contains an arbitrary number of pointers to expressions. The 13842number of elements in the vector is explicitly present in the vector. 13843The written form of a vector consists of square brackets ('[...]') 13844surrounding the elements, in sequence and with whitespace separating 13845them. Vectors of length zero are not created; null pointers are used 13846instead. 13847 13848 Expressions are classified by "expression codes" (also called RTX 13849codes). The expression code is a name defined in 'rtl.def', which is 13850also (in uppercase) a C enumeration constant. The possible expression 13851codes and their meanings are machine-independent. The code of an RTX 13852can be extracted with the macro 'GET_CODE (X)' and altered with 13853'PUT_CODE (X, NEWCODE)'. 13854 13855 The expression code determines how many operands the expression 13856contains, and what kinds of objects they are. In RTL, unlike Lisp, you 13857cannot tell by looking at an operand what kind of object it is. 13858Instead, you must know from its context--from the expression code of the 13859containing expression. For example, in an expression of code 'subreg', 13860the first operand is to be regarded as an expression and the second 13861operand as an integer. In an expression of code 'plus', there are two 13862operands, both of which are to be regarded as expressions. In a 13863'symbol_ref' expression, there is one operand, which is to be regarded 13864as a string. 13865 13866 Expressions are written as parentheses containing the name of the 13867expression type, its flags and machine mode if any, and then the 13868operands of the expression (separated by spaces). 13869 13870 Expression code names in the 'md' file are written in lowercase, but 13871when they appear in C code they are written in uppercase. In this 13872manual, they are shown as follows: 'const_int'. 13873 13874 In a few contexts a null pointer is valid where an expression is 13875normally wanted. The written form of this is '(nil)'. 13876 13877 13878File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 13879 1388013.2 RTL Classes and Formats 13881============================ 13882 13883The various expression codes are divided into several "classes", which 13884are represented by single characters. You can determine the class of an 13885RTX code with the macro 'GET_RTX_CLASS (CODE)'. Currently, 'rtl.def' 13886defines these classes: 13887 13888'RTX_OBJ' 13889 An RTX code that represents an actual object, such as a register 13890 ('REG') or a memory location ('MEM', 'SYMBOL_REF'). 'LO_SUM') is 13891 also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in 13892 this class, but in class 'x'. 13893 13894'RTX_CONST_OBJ' 13895 An RTX code that represents a constant object. 'HIGH' is also 13896 included in this class. 13897 13898'RTX_COMPARE' 13899 An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'. 13900 13901'RTX_COMM_COMPARE' 13902 An RTX code for a symmetric (commutative) comparison, such as 'EQ' 13903 or 'ORDERED'. 13904 13905'RTX_UNARY' 13906 An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT', 13907 or 'ABS'. This category also includes value extension (sign or 13908 zero) and conversions between integer and floating point. 13909 13910'RTX_COMM_ARITH' 13911 An RTX code for a commutative binary operation, such as 'PLUS' or 13912 'AND'. 'NE' and 'EQ' are comparisons, so they have class '<'. 13913 13914'RTX_BIN_ARITH' 13915 An RTX code for a non-commutative binary operation, such as 13916 'MINUS', 'DIV', or 'ASHIFTRT'. 13917 13918'RTX_BITFIELD_OPS' 13919 An RTX code for a bit-field operation. Currently only 13920 'ZERO_EXTRACT' and 'SIGN_EXTRACT'. These have three inputs and are 13921 lvalues (so they can be used for insertion as well). *Note 13922 Bit-Fields::. 13923 13924'RTX_TERNARY' 13925 An RTX code for other three input operations. Currently only 13926 'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and 13927 'FMA'. 13928 13929'RTX_INSN' 13930 An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and 13931 'CALL_INSN'. *Note Insns::. 13932 13933'RTX_MATCH' 13934 An RTX code for something that matches in insns, such as 13935 'MATCH_DUP'. These only occur in machine descriptions. 13936 13937'RTX_AUTOINC' 13938 An RTX code for an auto-increment addressing mode, such as 13939 'POST_INC'. 'XEXP (X, 0)' gives the auto-modified register. 13940 13941'RTX_EXTRA' 13942 All other RTX codes. This category includes the remaining codes 13943 used only in machine descriptions ('DEFINE_*', etc.). It also 13944 includes all the codes describing side effects ('SET', 'USE', 13945 'CLOBBER', etc.) and the non-insns that may appear on an insn 13946 chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'. 'SUBREG' is 13947 also part of this class. 13948 13949 For each expression code, 'rtl.def' specifies the number of contained 13950objects and their kinds using a sequence of characters called the 13951"format" of the expression code. For example, the format of 'subreg' is 13952'ei'. 13953 13954 These are the most commonly used format characters: 13955 13956'e' 13957 An expression (actually a pointer to an expression). 13958 13959'i' 13960 An integer. 13961 13962'w' 13963 A wide integer. 13964 13965's' 13966 A string. 13967 13968'E' 13969 A vector of expressions. 13970 13971 A few other format characters are used occasionally: 13972 13973'u' 13974 'u' is equivalent to 'e' except that it is printed differently in 13975 debugging dumps. It is used for pointers to insns. 13976 13977'n' 13978 'n' is equivalent to 'i' except that it is printed differently in 13979 debugging dumps. It is used for the line number or code number of 13980 a 'note' insn. 13981 13982'S' 13983 'S' indicates a string which is optional. In the RTL objects in 13984 core, 'S' is equivalent to 's', but when the object is read, from 13985 an 'md' file, the string value of this operand may be omitted. An 13986 omitted string is taken to be the null string. 13987 13988'V' 13989 'V' indicates a vector which is optional. In the RTL objects in 13990 core, 'V' is equivalent to 'E', but when the object is read from an 13991 'md' file, the vector value of this operand may be omitted. An 13992 omitted vector is effectively the same as a vector of no elements. 13993 13994'B' 13995 'B' indicates a pointer to basic block structure. 13996 13997'0' 13998 '0' means a slot whose contents do not fit any normal category. 13999 '0' slots are not printed at all in dumps, and are often used in 14000 special ways by small parts of the compiler. 14001 14002 There are macros to get the number of operands and the format of an 14003expression code: 14004 14005'GET_RTX_LENGTH (CODE)' 14006 Number of operands of an RTX of code CODE. 14007 14008'GET_RTX_FORMAT (CODE)' 14009 The format of an RTX of code CODE, as a C string. 14010 14011 Some classes of RTX codes always have the same format. For example, it 14012is safe to assume that all comparison operations have format 'ee'. 14013 14014'1' 14015 All codes of this class have format 'e'. 14016 14017'<' 14018'c' 14019'2' 14020 All codes of these classes have format 'ee'. 14021 14022'b' 14023'3' 14024 All codes of these classes have format 'eee'. 14025 14026'i' 14027 All codes of this class have formats that begin with 'iuueiee'. 14028 *Note Insns::. Note that not all RTL objects linked onto an insn 14029 chain are of class 'i'. 14030 14031'o' 14032'm' 14033'x' 14034 You can make no assumptions about the format of these codes. 14035 14036 14037File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 14038 1403913.3 Access to Operands 14040======================= 14041 14042Operands of expressions are accessed using the macros 'XEXP', 'XINT', 14043'XWINT' and 'XSTR'. Each of these macros takes two arguments: an 14044expression-pointer (RTX) and an operand number (counting from zero). 14045Thus, 14046 14047 XEXP (X, 2) 14048 14049accesses operand 2 of expression X, as an expression. 14050 14051 XINT (X, 2) 14052 14053accesses the same operand as an integer. 'XSTR', used in the same 14054fashion, would access it as a string. 14055 14056 Any operand can be accessed as an integer, as an expression or as a 14057string. You must choose the correct method of access for the kind of 14058value actually stored in the operand. You would do this based on the 14059expression code of the containing expression. That is also how you 14060would know how many operands there are. 14061 14062 For example, if X is a 'subreg' expression, you know that it has two 14063operands which can be correctly accessed as 'XEXP (X, 0)' and 'XINT (X, 140641)'. If you did 'XINT (X, 0)', you would get the address of the 14065expression operand but cast as an integer; that might occasionally be 14066useful, but it would be cleaner to write '(int) XEXP (X, 0)'. 'XEXP (X, 140671)' would also compile without error, and would return the second, 14068integer operand cast as an expression pointer, which would probably 14069result in a crash when accessed. Nothing stops you from writing 'XEXP 14070(X, 28)' either, but this will access memory past the end of the 14071expression with unpredictable results. 14072 14073 Access to operands which are vectors is more complicated. You can use 14074the macro 'XVEC' to get the vector-pointer itself, or the macros 14075'XVECEXP' and 'XVECLEN' to access the elements and length of a vector. 14076 14077'XVEC (EXP, IDX)' 14078 Access the vector-pointer which is operand number IDX in EXP. 14079 14080'XVECLEN (EXP, IDX)' 14081 Access the length (number of elements) in the vector which is in 14082 operand number IDX in EXP. This value is an 'int'. 14083 14084'XVECEXP (EXP, IDX, ELTNUM)' 14085 Access element number ELTNUM in the vector which is in operand 14086 number IDX in EXP. This value is an RTX. 14087 14088 It is up to you to make sure that ELTNUM is not negative and is 14089 less than 'XVECLEN (EXP, IDX)'. 14090 14091 All the macros defined in this section expand into lvalues and 14092therefore can be used to assign the operands, lengths and vector 14093elements as well as to access them. 14094 14095 14096File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 14097 1409813.4 Access to Special Operands 14099=============================== 14100 14101Some RTL nodes have special annotations associated with them. 14102 14103'MEM' 14104 'MEM_ALIAS_SET (X)' 14105 If 0, X is not in any alias set, and may alias anything. 14106 Otherwise, X can only alias 'MEM's in a conflicting alias set. 14107 This value is set in a language-dependent manner in the 14108 front-end, and should not be altered in the back-end. In some 14109 front-ends, these numbers may correspond in some way to types, 14110 or other language-level entities, but they need not, and the 14111 back-end makes no such assumptions. These set numbers are 14112 tested with 'alias_sets_conflict_p'. 14113 14114 'MEM_EXPR (X)' 14115 If this register is known to hold the value of some user-level 14116 declaration, this is that tree node. It may also be a 14117 'COMPONENT_REF', in which case this is some field reference, 14118 and 'TREE_OPERAND (X, 0)' contains the declaration, or another 14119 'COMPONENT_REF', or null if there is no compile-time object 14120 associated with the reference. 14121 14122 'MEM_OFFSET_KNOWN_P (X)' 14123 True if the offset of the memory reference from 'MEM_EXPR' is 14124 known. 'MEM_OFFSET (X)' provides the offset if so. 14125 14126 'MEM_OFFSET (X)' 14127 The offset from the start of 'MEM_EXPR'. The value is only 14128 valid if 'MEM_OFFSET_KNOWN_P (X)' is true. 14129 14130 'MEM_SIZE_KNOWN_P (X)' 14131 True if the size of the memory reference is known. 'MEM_SIZE 14132 (X)' provides its size if so. 14133 14134 'MEM_SIZE (X)' 14135 The size in bytes of the memory reference. This is mostly 14136 relevant for 'BLKmode' references as otherwise the size is 14137 implied by the mode. The value is only valid if 14138 'MEM_SIZE_KNOWN_P (X)' is true. 14139 14140 'MEM_ALIGN (X)' 14141 The known alignment in bits of the memory reference. 14142 14143 'MEM_ADDR_SPACE (X)' 14144 The address space of the memory reference. This will commonly 14145 be zero for the generic address space. 14146 14147'REG' 14148 'ORIGINAL_REGNO (X)' 14149 This field holds the number the register "originally" had; for 14150 a pseudo register turned into a hard reg this will hold the 14151 old pseudo register number. 14152 14153 'REG_EXPR (X)' 14154 If this register is known to hold the value of some user-level 14155 declaration, this is that tree node. 14156 14157 'REG_OFFSET (X)' 14158 If this register is known to hold the value of some user-level 14159 declaration, this is the offset into that logical storage. 14160 14161'SYMBOL_REF' 14162 'SYMBOL_REF_DECL (X)' 14163 If the 'symbol_ref' X was created for a 'VAR_DECL' or a 14164 'FUNCTION_DECL', that tree is recorded here. If this value is 14165 null, then X was created by back end code generation routines, 14166 and there is no associated front end symbol table entry. 14167 14168 'SYMBOL_REF_DECL' may also point to a tree of class ''c'', 14169 that is, some sort of constant. In this case, the 14170 'symbol_ref' is an entry in the per-file constant pool; again, 14171 there is no associated front end symbol table entry. 14172 14173 'SYMBOL_REF_CONSTANT (X)' 14174 If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 14175 pool entry for X. It is null otherwise. 14176 14177 'SYMBOL_REF_DATA (X)' 14178 A field of opaque type used to store 'SYMBOL_REF_DECL' or 14179 'SYMBOL_REF_CONSTANT'. 14180 14181 'SYMBOL_REF_FLAGS (X)' 14182 In a 'symbol_ref', this is used to communicate various 14183 predicates about the symbol. Some of these are common enough 14184 to be computed by common code, some are specific to the 14185 target. The common bits are: 14186 14187 'SYMBOL_FLAG_FUNCTION' 14188 Set if the symbol refers to a function. 14189 14190 'SYMBOL_FLAG_LOCAL' 14191 Set if the symbol is local to this "module". See 14192 'TARGET_BINDS_LOCAL_P'. 14193 14194 'SYMBOL_FLAG_EXTERNAL' 14195 Set if this symbol is not defined in this translation 14196 unit. Note that this is not the inverse of 14197 'SYMBOL_FLAG_LOCAL'. 14198 14199 'SYMBOL_FLAG_SMALL' 14200 Set if the symbol is located in the small data section. 14201 See 'TARGET_IN_SMALL_DATA_P'. 14202 14203 'SYMBOL_REF_TLS_MODEL (X)' 14204 This is a multi-bit field accessor that returns the 14205 'tls_model' to be used for a thread-local storage symbol. 14206 It returns zero for non-thread-local symbols. 14207 14208 'SYMBOL_FLAG_HAS_BLOCK_INFO' 14209 Set if the symbol has 'SYMBOL_REF_BLOCK' and 14210 'SYMBOL_REF_BLOCK_OFFSET' fields. 14211 14212 'SYMBOL_FLAG_ANCHOR' 14213 Set if the symbol is used as a section anchor. "Section 14214 anchors" are symbols that have a known position within an 14215 'object_block' and that can be used to access nearby 14216 members of that block. They are used to implement 14217 '-fsection-anchors'. 14218 14219 If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO' 14220 will be too. 14221 14222 Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for 14223 the target's use. 14224 14225'SYMBOL_REF_BLOCK (X)' 14226 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block' 14227 structure to which the symbol belongs, or 'NULL' if it has not been 14228 assigned a block. 14229 14230'SYMBOL_REF_BLOCK_OFFSET (X)' 14231 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 14232 the first object in 'SYMBOL_REF_BLOCK (X)'. The value is negative 14233 if X has not yet been assigned to a block, or it has not been given 14234 an offset within that block. 14235 14236 14237File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 14238 1423913.5 Flags in an RTL Expression 14240=============================== 14241 14242RTL expressions contain several flags (one-bit bit-fields) that are used 14243in certain types of expression. Most often they are accessed with the 14244following macros, which expand into lvalues. 14245 14246'CONSTANT_POOL_ADDRESS_P (X)' 14247 Nonzero in a 'symbol_ref' if it refers to part of the current 14248 function's constant pool. For most targets these addresses are in 14249 a '.rodata' section entirely separate from the function, but for 14250 some targets the addresses are close to the beginning of the 14251 function. In either case GCC assumes these addresses can be 14252 addressed directly, perhaps with the help of base registers. 14253 Stored in the 'unchanging' field and printed as '/u'. 14254 14255'RTL_CONST_CALL_P (X)' 14256 In a 'call_insn' indicates that the insn represents a call to a 14257 const function. Stored in the 'unchanging' field and printed as 14258 '/u'. 14259 14260'RTL_PURE_CALL_P (X)' 14261 In a 'call_insn' indicates that the insn represents a call to a 14262 pure function. Stored in the 'return_val' field and printed as 14263 '/i'. 14264 14265'RTL_CONST_OR_PURE_CALL_P (X)' 14266 In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' 14267 is true. 14268 14269'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 14270 In a 'call_insn' indicates that the insn represents a possibly 14271 infinite looping call to a const or pure function. Stored in the 14272 'call' field and printed as '/c'. Only true if one of 14273 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true. 14274 14275'INSN_ANNULLED_BRANCH_P (X)' 14276 In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch 14277 is an annulling one. See the discussion under 'sequence' below. 14278 Stored in the 'unchanging' field and printed as '/u'. 14279 14280'INSN_DELETED_P (X)' 14281 In an 'insn', 'call_insn', 'jump_insn', 'code_label', 14282 'jump_table_data', 'barrier', or 'note', nonzero if the insn has 14283 been deleted. Stored in the 'volatil' field and printed as '/v'. 14284 14285'INSN_FROM_TARGET_P (X)' 14286 In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a 14287 branch, indicates that the insn is from the target of the branch. 14288 If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will 14289 only be executed if the branch is taken. For annulled branches 14290 with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if 14291 the branch is not taken. When 'INSN_ANNULLED_BRANCH_P' is not set, 14292 this insn will always be executed. Stored in the 'in_struct' field 14293 and printed as '/s'. 14294 14295'LABEL_PRESERVE_P (X)' 14296 In a 'code_label' or 'note', indicates that the label is referenced 14297 by code or data not visible to the RTL of a given function. Labels 14298 referenced by a non-local goto will have this bit set. Stored in 14299 the 'in_struct' field and printed as '/s'. 14300 14301'LABEL_REF_NONLOCAL_P (X)' 14302 In 'label_ref' and 'reg_label' expressions, nonzero if this is a 14303 reference to a non-local label. Stored in the 'volatil' field and 14304 printed as '/v'. 14305 14306'MEM_KEEP_ALIAS_SET_P (X)' 14307 In 'mem' expressions, 1 if we should keep the alias set for this 14308 mem unchanged when we access a component. Set to 1, for example, 14309 when we are already in a non-addressable component of an aggregate. 14310 Stored in the 'jump' field and printed as '/j'. 14311 14312'MEM_VOLATILE_P (X)' 14313 In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for 14314 volatile memory references. Stored in the 'volatil' field and 14315 printed as '/v'. 14316 14317'MEM_NOTRAP_P (X)' 14318 In 'mem', nonzero for memory references that will not trap. Stored 14319 in the 'call' field and printed as '/c'. 14320 14321'MEM_POINTER (X)' 14322 Nonzero in a 'mem' if the memory reference holds a pointer. Stored 14323 in the 'frame_related' field and printed as '/f'. 14324 14325'REG_FUNCTION_VALUE_P (X)' 14326 Nonzero in a 'reg' if it is the place in which this function's 14327 value is going to be returned. (This happens only in a hard 14328 register.) Stored in the 'return_val' field and printed as '/i'. 14329 14330'REG_POINTER (X)' 14331 Nonzero in a 'reg' if the register holds a pointer. Stored in the 14332 'frame_related' field and printed as '/f'. 14333 14334'REG_USERVAR_P (X)' 14335 In a 'reg', nonzero if it corresponds to a variable present in the 14336 user's source code. Zero for temporaries generated internally by 14337 the compiler. Stored in the 'volatil' field and printed as '/v'. 14338 14339 The same hard register may be used also for collecting the values 14340 of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero 14341 in this kind of use. 14342 14343'RTX_FRAME_RELATED_P (X)' 14344 Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set' 14345 which is part of a function prologue and sets the stack pointer, 14346 sets the frame pointer, or saves a register. This flag should also 14347 be set on an instruction that sets up a temporary register to use 14348 in place of the frame pointer. Stored in the 'frame_related' field 14349 and printed as '/f'. 14350 14351 In particular, on RISC targets where there are limits on the sizes 14352 of immediate constants, it is sometimes impossible to reach the 14353 register save area directly from the stack pointer. In that case, 14354 a temporary register is used that is near enough to the register 14355 save area, and the Canonical Frame Address, i.e., DWARF2's logical 14356 frame pointer, register must (temporarily) be changed to be this 14357 temporary register. So, the instruction that sets this temporary 14358 register must be marked as 'RTX_FRAME_RELATED_P'. 14359 14360 If the marked instruction is overly complex (defined in terms of 14361 what 'dwarf2out_frame_debug_expr' can handle), you will also have 14362 to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the 14363 instruction. This note should contain a simple expression of the 14364 computation performed by this instruction, i.e., one that 14365 'dwarf2out_frame_debug_expr' can handle. 14366 14367 This flag is required for exception handling support on targets 14368 with RTL prologues. 14369 14370'MEM_READONLY_P (X)' 14371 Nonzero in a 'mem', if the memory is statically allocated and 14372 read-only. 14373 14374 Read-only in this context means never modified during the lifetime 14375 of the program, not necessarily in ROM or in write-disabled pages. 14376 A common example of the later is a shared library's global offset 14377 table. This table is initialized by the runtime loader, so the 14378 memory is technically writable, but after control is transferred 14379 from the runtime loader to the application, this memory will never 14380 be subsequently modified. 14381 14382 Stored in the 'unchanging' field and printed as '/u'. 14383 14384'SCHED_GROUP_P (X)' 14385 During instruction scheduling, in an 'insn', 'call_insn', 14386 'jump_insn' or 'jump_table_data', indicates that the previous insn 14387 must be scheduled together with this insn. This is used to ensure 14388 that certain groups of instructions will not be split up by the 14389 instruction scheduling pass, for example, 'use' insns before a 14390 'call_insn' may not be separated from the 'call_insn'. Stored in 14391 the 'in_struct' field and printed as '/s'. 14392 14393'SET_IS_RETURN_P (X)' 14394 For a 'set', nonzero if it is for a return. Stored in the 'jump' 14395 field and printed as '/j'. 14396 14397'SIBLING_CALL_P (X)' 14398 For a 'call_insn', nonzero if the insn is a sibling call. Stored 14399 in the 'jump' field and printed as '/j'. 14400 14401'STRING_POOL_ADDRESS_P (X)' 14402 For a 'symbol_ref' expression, nonzero if it addresses this 14403 function's string constant pool. Stored in the 'frame_related' 14404 field and printed as '/f'. 14405 14406'SUBREG_PROMOTED_UNSIGNED_P (X)' 14407 Returns a value greater then zero for a 'subreg' that has 14408 'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 14409 kept zero-extended, zero if it is kept sign-extended, and less then 14410 zero if it is extended some other way via the 'ptr_extend' 14411 instruction. Stored in the 'unchanging' field and 'volatil' field, 14412 printed as '/u' and '/v'. This macro may only be used to get the 14413 value it may not be used to change the value. Use 14414 'SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 14415 14416'SUBREG_PROMOTED_UNSIGNED_SET (X)' 14417 Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect 14418 zero, sign, or other extension. If 'volatil' is zero, then 14419 'unchanging' as nonzero means zero extension and as zero means sign 14420 extension. If 'volatil' is nonzero then some other type of 14421 extension was done via the 'ptr_extend' instruction. 14422 14423'SUBREG_PROMOTED_VAR_P (X)' 14424 Nonzero in a 'subreg' if it was made when accessing an object that 14425 was promoted to a wider mode in accord with the 'PROMOTED_MODE' 14426 machine description macro (*note Storage Layout::). In this case, 14427 the mode of the 'subreg' is the declared mode of the object and the 14428 mode of 'SUBREG_REG' is the mode of the register that holds the 14429 object. Promoted variables are always either sign- or 14430 zero-extended to the wider mode on every assignment. Stored in the 14431 'in_struct' field and printed as '/s'. 14432 14433'SYMBOL_REF_USED (X)' 14434 In a 'symbol_ref', indicates that X has been used. This is 14435 normally only used to ensure that X is only declared external once. 14436 Stored in the 'used' field. 14437 14438'SYMBOL_REF_WEAK (X)' 14439 In a 'symbol_ref', indicates that X has been declared weak. Stored 14440 in the 'return_val' field and printed as '/i'. 14441 14442'SYMBOL_REF_FLAG (X)' 14443 In a 'symbol_ref', this is used as a flag for machine-specific 14444 purposes. Stored in the 'volatil' field and printed as '/v'. 14445 14446 Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by 14447 'SYMBOL_REF_FLAGS'. Certainly use of 'SYMBOL_REF_FLAGS' is 14448 mandatory if the target requires more than one bit of storage. 14449 14450'PREFETCH_SCHEDULE_BARRIER_P (X)' 14451 In a 'prefetch', indicates that the prefetch is a scheduling 14452 barrier. No other INSNs will be moved over it. Stored in the 14453 'volatil' field and printed as '/v'. 14454 14455 These are the fields to which the above macros refer: 14456 14457'call' 14458 In a 'mem', 1 means that the memory reference will not trap. 14459 14460 In a 'call', 1 means that this pure or const call may possibly 14461 infinite loop. 14462 14463 In an RTL dump, this flag is represented as '/c'. 14464 14465'frame_related' 14466 In an 'insn' or 'set' expression, 1 means that it is part of a 14467 function prologue and sets the stack pointer, sets the frame 14468 pointer, saves a register, or sets up a temporary register to use 14469 in place of the frame pointer. 14470 14471 In 'reg' expressions, 1 means that the register holds a pointer. 14472 14473 In 'mem' expressions, 1 means that the memory reference holds a 14474 pointer. 14475 14476 In 'symbol_ref' expressions, 1 means that the reference addresses 14477 this function's string constant pool. 14478 14479 In an RTL dump, this flag is represented as '/f'. 14480 14481'in_struct' 14482 In 'reg' expressions, it is 1 if the register has its entire life 14483 contained within the test expression of some loop. 14484 14485 In 'subreg' expressions, 1 means that the 'subreg' is accessing an 14486 object that has had its mode promoted from a wider mode. 14487 14488 In 'label_ref' expressions, 1 means that the referenced label is 14489 outside the innermost loop containing the insn in which the 14490 'label_ref' was found. 14491 14492 In 'code_label' expressions, it is 1 if the label may never be 14493 deleted. This is used for labels which are the target of non-local 14494 gotos. Such a label that would have been deleted is replaced with 14495 a 'note' of type 'NOTE_INSN_DELETED_LABEL'. 14496 14497 In an 'insn' during dead-code elimination, 1 means that the insn is 14498 dead code. 14499 14500 In an 'insn' or 'jump_insn' during reorg for an insn in the delay 14501 slot of a branch, 1 means that this insn is from the target of the 14502 branch. 14503 14504 In an 'insn' during instruction scheduling, 1 means that this insn 14505 must be scheduled as part of a group together with the previous 14506 insn. 14507 14508 In an RTL dump, this flag is represented as '/s'. 14509 14510'return_val' 14511 In 'reg' expressions, 1 means the register contains the value to be 14512 returned by the current function. On machines that pass parameters 14513 in registers, the same register number may be used for parameters 14514 as well, but this flag is not set on such uses. 14515 14516 In 'symbol_ref' expressions, 1 means the referenced symbol is weak. 14517 14518 In 'call' expressions, 1 means the call is pure. 14519 14520 In an RTL dump, this flag is represented as '/i'. 14521 14522'jump' 14523 In a 'mem' expression, 1 means we should keep the alias set for 14524 this mem unchanged when we access a component. 14525 14526 In a 'set', 1 means it is for a return. 14527 14528 In a 'call_insn', 1 means it is a sibling call. 14529 14530 In an RTL dump, this flag is represented as '/j'. 14531 14532'unchanging' 14533 In 'reg' and 'mem' expressions, 1 means that the value of the 14534 expression never changes. 14535 14536 In 'subreg' expressions, it is 1 if the 'subreg' references an 14537 unsigned object whose mode has been promoted to a wider mode. 14538 14539 In an 'insn' or 'jump_insn' in the delay slot of a branch 14540 instruction, 1 means an annulling branch should be used. 14541 14542 In a 'symbol_ref' expression, 1 means that this symbol addresses 14543 something in the per-function constant pool. 14544 14545 In a 'call_insn' 1 means that this instruction is a call to a const 14546 function. 14547 14548 In an RTL dump, this flag is represented as '/u'. 14549 14550'used' 14551 This flag is used directly (without an access macro) at the end of 14552 RTL generation for a function, to count the number of times an 14553 expression appears in insns. Expressions that appear more than 14554 once are copied, according to the rules for shared structure (*note 14555 Sharing::). 14556 14557 For a 'reg', it is used directly (without an access macro) by the 14558 leaf register renumbering code to ensure that each register is only 14559 renumbered once. 14560 14561 In a 'symbol_ref', it indicates that an external declaration for 14562 the symbol has already been written. 14563 14564'volatil' 14565 In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if 14566 the memory reference is volatile. Volatile memory references may 14567 not be deleted, reordered or combined. 14568 14569 In a 'symbol_ref' expression, it is used for machine-specific 14570 purposes. 14571 14572 In a 'reg' expression, it is 1 if the value is a user-level 14573 variable. 0 indicates an internal compiler temporary. 14574 14575 In an 'insn', 1 means the insn has been deleted. 14576 14577 In 'label_ref' and 'reg_label' expressions, 1 means a reference to 14578 a non-local label. 14579 14580 In 'prefetch' expressions, 1 means that the containing insn is a 14581 scheduling barrier. 14582 14583 In an RTL dump, this flag is represented as '/v'. 14584 14585 14586File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 14587 1458813.6 Machine Modes 14589================== 14590 14591A machine mode describes a size of data object and the representation 14592used for it. In the C code, machine modes are represented by an 14593enumeration type, 'machine_mode', defined in 'machmode.def'. Each RTL 14594expression has room for a machine mode and so do certain kinds of tree 14595expressions (declarations and types, to be precise). 14596 14597 In debugging dumps and machine descriptions, the machine mode of an RTL 14598expression is written after the expression code with a colon to separate 14599them. The letters 'mode' which appear at the end of each machine mode 14600name are omitted. For example, '(reg:SI 38)' is a 'reg' expression with 14601machine mode 'SImode'. If the mode is 'VOIDmode', it is not written at 14602all. 14603 14604 Here is a table of machine modes. The term "byte" below refers to an 14605object of 'BITS_PER_UNIT' bits (*note Storage Layout::). 14606 14607'BImode' 14608 "Bit" mode represents a single bit, for predicate registers. 14609 14610'QImode' 14611 "Quarter-Integer" mode represents a single byte treated as an 14612 integer. 14613 14614'HImode' 14615 "Half-Integer" mode represents a two-byte integer. 14616 14617'PSImode' 14618 "Partial Single Integer" mode represents an integer which occupies 14619 four bytes but which doesn't really use all four. On some 14620 machines, this is the right mode to use for pointers. 14621 14622'SImode' 14623 "Single Integer" mode represents a four-byte integer. 14624 14625'PDImode' 14626 "Partial Double Integer" mode represents an integer which occupies 14627 eight bytes but which doesn't really use all eight. On some 14628 machines, this is the right mode to use for certain pointers. 14629 14630'DImode' 14631 "Double Integer" mode represents an eight-byte integer. 14632 14633'TImode' 14634 "Tetra Integer" (?) mode represents a sixteen-byte integer. 14635 14636'OImode' 14637 "Octa Integer" (?) mode represents a thirty-two-byte integer. 14638 14639'XImode' 14640 "Hexadeca Integer" (?) mode represents a sixty-four-byte integer. 14641 14642'QFmode' 14643 "Quarter-Floating" mode represents a quarter-precision (single 14644 byte) floating point number. 14645 14646'HFmode' 14647 "Half-Floating" mode represents a half-precision (two byte) 14648 floating point number. 14649 14650'TQFmode' 14651 "Three-Quarter-Floating" (?) mode represents a 14652 three-quarter-precision (three byte) floating point number. 14653 14654'SFmode' 14655 "Single Floating" mode represents a four byte floating point 14656 number. In the common case, of a processor with IEEE arithmetic 14657 and 8-bit bytes, this is a single-precision IEEE floating point 14658 number; it can also be used for double-precision (on processors 14659 with 16-bit bytes) and single-precision VAX and IBM types. 14660 14661'DFmode' 14662 "Double Floating" mode represents an eight byte floating point 14663 number. In the common case, of a processor with IEEE arithmetic 14664 and 8-bit bytes, this is a double-precision IEEE floating point 14665 number. 14666 14667'XFmode' 14668 "Extended Floating" mode represents an IEEE extended floating point 14669 number. This mode only has 80 meaningful bits (ten bytes). Some 14670 processors require such numbers to be padded to twelve bytes, 14671 others to sixteen; this mode is used for either. 14672 14673'SDmode' 14674 "Single Decimal Floating" mode represents a four byte decimal 14675 floating point number (as distinct from conventional binary 14676 floating point). 14677 14678'DDmode' 14679 "Double Decimal Floating" mode represents an eight byte decimal 14680 floating point number. 14681 14682'TDmode' 14683 "Tetra Decimal Floating" mode represents a sixteen byte decimal 14684 floating point number all 128 of whose bits are meaningful. 14685 14686'TFmode' 14687 "Tetra Floating" mode represents a sixteen byte floating point 14688 number all 128 of whose bits are meaningful. One common use is the 14689 IEEE quad-precision format. 14690 14691'QQmode' 14692 "Quarter-Fractional" mode represents a single byte treated as a 14693 signed fractional number. The default format is "s.7". 14694 14695'HQmode' 14696 "Half-Fractional" mode represents a two-byte signed fractional 14697 number. The default format is "s.15". 14698 14699'SQmode' 14700 "Single Fractional" mode represents a four-byte signed fractional 14701 number. The default format is "s.31". 14702 14703'DQmode' 14704 "Double Fractional" mode represents an eight-byte signed fractional 14705 number. The default format is "s.63". 14706 14707'TQmode' 14708 "Tetra Fractional" mode represents a sixteen-byte signed fractional 14709 number. The default format is "s.127". 14710 14711'UQQmode' 14712 "Unsigned Quarter-Fractional" mode represents a single byte treated 14713 as an unsigned fractional number. The default format is ".8". 14714 14715'UHQmode' 14716 "Unsigned Half-Fractional" mode represents a two-byte unsigned 14717 fractional number. The default format is ".16". 14718 14719'USQmode' 14720 "Unsigned Single Fractional" mode represents a four-byte unsigned 14721 fractional number. The default format is ".32". 14722 14723'UDQmode' 14724 "Unsigned Double Fractional" mode represents an eight-byte unsigned 14725 fractional number. The default format is ".64". 14726 14727'UTQmode' 14728 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 14729 fractional number. The default format is ".128". 14730 14731'HAmode' 14732 "Half-Accumulator" mode represents a two-byte signed accumulator. 14733 The default format is "s8.7". 14734 14735'SAmode' 14736 "Single Accumulator" mode represents a four-byte signed 14737 accumulator. The default format is "s16.15". 14738 14739'DAmode' 14740 "Double Accumulator" mode represents an eight-byte signed 14741 accumulator. The default format is "s32.31". 14742 14743'TAmode' 14744 "Tetra Accumulator" mode represents a sixteen-byte signed 14745 accumulator. The default format is "s64.63". 14746 14747'UHAmode' 14748 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 14749 accumulator. The default format is "8.8". 14750 14751'USAmode' 14752 "Unsigned Single Accumulator" mode represents a four-byte unsigned 14753 accumulator. The default format is "16.16". 14754 14755'UDAmode' 14756 "Unsigned Double Accumulator" mode represents an eight-byte 14757 unsigned accumulator. The default format is "32.32". 14758 14759'UTAmode' 14760 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 14761 unsigned accumulator. The default format is "64.64". 14762 14763'CCmode' 14764 "Condition Code" mode represents the value of a condition code, 14765 which is a machine-specific set of bits used to represent the 14766 result of a comparison operation. Other machine-specific modes may 14767 also be used for the condition code. These modes are not used on 14768 machines that use 'cc0' (*note Condition Code::). 14769 14770'BLKmode' 14771 "Block" mode represents values that are aggregates to which none of 14772 the other modes apply. In RTL, only memory references can have 14773 this mode, and only if they appear in string-move or vector 14774 instructions. On machines which have no such instructions, 14775 'BLKmode' will not appear in RTL. 14776 14777'VOIDmode' 14778 Void mode means the absence of a mode or an unspecified mode. For 14779 example, RTL expressions of code 'const_int' have mode 'VOIDmode' 14780 because they can be taken to have whatever mode the context 14781 requires. In debugging dumps of RTL, 'VOIDmode' is expressed by 14782 the absence of any mode. 14783 14784'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 14785 These modes stand for a complex number represented as a pair of 14786 floating point values. The floating point values are in 'QFmode', 14787 'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively. 14788 14789'CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 14790 These modes stand for a complex number represented as a pair of 14791 integer values. The integer values are in 'QImode', 'HImode', 14792 'SImode', 'DImode', 'TImode', and 'OImode', respectively. 14793 14794'BND32mode BND64mode' 14795 These modes stand for bounds for pointer of 32 and 64 bit size 14796 respectively. Mode size is double pointer mode size. 14797 14798 The machine description defines 'Pmode' as a C macro which expands into 14799the machine mode used for addresses. Normally this is the mode whose 14800size is 'BITS_PER_WORD', 'SImode' on 32-bit machines. 14801 14802 The only modes which a machine description must support are 'QImode', 14803and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and 14804'DOUBLE_TYPE_SIZE'. The compiler will attempt to use 'DImode' for 148058-byte structures and unions, but this can be prevented by overriding 14806the definition of 'MAX_FIXED_MODE_SIZE'. Alternatively, you can have 14807the compiler use 'TImode' for 16-byte structures and unions. Likewise, 14808you can arrange for the C type 'short int' to avoid using 'HImode'. 14809 14810 Very few explicit references to machine modes remain in the compiler 14811and these few references will soon be removed. Instead, the machine 14812modes are divided into mode classes. These are represented by the 14813enumeration type 'enum mode_class' defined in 'machmode.h'. The 14814possible mode classes are: 14815 14816'MODE_INT' 14817 Integer modes. By default these are 'BImode', 'QImode', 'HImode', 14818 'SImode', 'DImode', 'TImode', and 'OImode'. 14819 14820'MODE_PARTIAL_INT' 14821 The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and 14822 'PDImode'. 14823 14824'MODE_FLOAT' 14825 Floating point modes. By default these are 'QFmode', 'HFmode', 14826 'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'. 14827 14828'MODE_DECIMAL_FLOAT' 14829 Decimal floating point modes. By default these are 'SDmode', 14830 'DDmode' and 'TDmode'. 14831 14832'MODE_FRACT' 14833 Signed fractional modes. By default these are 'QQmode', 'HQmode', 14834 'SQmode', 'DQmode' and 'TQmode'. 14835 14836'MODE_UFRACT' 14837 Unsigned fractional modes. By default these are 'UQQmode', 14838 'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'. 14839 14840'MODE_ACCUM' 14841 Signed accumulator modes. By default these are 'HAmode', 'SAmode', 14842 'DAmode' and 'TAmode'. 14843 14844'MODE_UACCUM' 14845 Unsigned accumulator modes. By default these are 'UHAmode', 14846 'USAmode', 'UDAmode' and 'UTAmode'. 14847 14848'MODE_COMPLEX_INT' 14849 Complex integer modes. (These are not currently implemented). 14850 14851'MODE_COMPLEX_FLOAT' 14852 Complex floating point modes. By default these are 'QCmode', 14853 'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'. 14854 14855'MODE_FUNCTION' 14856 Algol or Pascal function variables including a static chain. 14857 (These are not currently implemented). 14858 14859'MODE_CC' 14860 Modes representing condition code values. These are 'CCmode' plus 14861 any 'CC_MODE' modes listed in the 'MACHINE-modes.def'. *Note Jump 14862 Patterns::, also see *note Condition Code::. 14863 14864'MODE_POINTER_BOUNDS' 14865 Pointer bounds modes. Used to represent values of pointer bounds 14866 type. Operations in these modes may be executed as NOPs depending 14867 on hardware features and environment setup. 14868 14869'MODE_RANDOM' 14870 This is a catchall mode class for modes which don't fit into the 14871 above classes. Currently 'VOIDmode' and 'BLKmode' are in 14872 'MODE_RANDOM'. 14873 14874 Here are some C macros that relate to machine modes: 14875 14876'GET_MODE (X)' 14877 Returns the machine mode of the RTX X. 14878 14879'PUT_MODE (X, NEWMODE)' 14880 Alters the machine mode of the RTX X to be NEWMODE. 14881 14882'NUM_MACHINE_MODES' 14883 Stands for the number of machine modes available on the target 14884 machine. This is one greater than the largest numeric value of any 14885 machine mode. 14886 14887'GET_MODE_NAME (M)' 14888 Returns the name of mode M as a string. 14889 14890'GET_MODE_CLASS (M)' 14891 Returns the mode class of mode M. 14892 14893'GET_MODE_WIDER_MODE (M)' 14894 Returns the next wider natural mode. For example, the expression 14895 'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'. 14896 14897'GET_MODE_SIZE (M)' 14898 Returns the size in bytes of a datum of mode M. 14899 14900'GET_MODE_BITSIZE (M)' 14901 Returns the size in bits of a datum of mode M. 14902 14903'GET_MODE_IBIT (M)' 14904 Returns the number of integral bits of a datum of fixed-point mode 14905 M. 14906 14907'GET_MODE_FBIT (M)' 14908 Returns the number of fractional bits of a datum of fixed-point 14909 mode M. 14910 14911'GET_MODE_MASK (M)' 14912 Returns a bitmask containing 1 for all bits in a word that fit 14913 within mode M. This macro can only be used for modes whose bitsize 14914 is less than or equal to 'HOST_BITS_PER_INT'. 14915 14916'GET_MODE_ALIGNMENT (M)' 14917 Return the required alignment, in bits, for an object of mode M. 14918 14919'GET_MODE_UNIT_SIZE (M)' 14920 Returns the size in bytes of the subunits of a datum of mode M. 14921 This is the same as 'GET_MODE_SIZE' except in the case of complex 14922 modes. For them, the unit size is the size of the real or 14923 imaginary part. 14924 14925'GET_MODE_NUNITS (M)' 14926 Returns the number of units contained in a mode, i.e., 14927 'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'. 14928 14929'GET_CLASS_NARROWEST_MODE (C)' 14930 Returns the narrowest mode in mode class C. 14931 14932 The following 3 variables are defined on every target. They can be 14933used to allocate buffers that are guaranteed to be large enough to hold 14934any value that can be represented on the target. The first two can be 14935overridden by defining them in the target's mode.def file, however, the 14936value must be a constant that can determined very early in the 14937compilation process. The third symbol cannot be overridden. 14938 14939'BITS_PER_UNIT' 14940 The number of bits in an addressable storage unit (byte). If you 14941 do not define this, the default is 8. 14942 14943'MAX_BITSIZE_MODE_ANY_INT' 14944 The maximum bitsize of any mode that is used in integer math. This 14945 should be overridden by the target if it uses large integers as 14946 containers for larger vectors but otherwise never uses the contents 14947 to compute integer values. 14948 14949'MAX_BITSIZE_MODE_ANY_MODE' 14950 The bitsize of the largest mode on the target. 14951 14952 The global variables 'byte_mode' and 'word_mode' contain modes whose 14953classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or 14954'BITS_PER_WORD', respectively. On 32-bit machines, these are 'QImode' 14955and 'SImode', respectively. 14956 14957 14958File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 14959 1496013.7 Constant Expression Types 14961============================== 14962 14963The simplest RTL expressions are those that represent constant values. 14964 14965'(const_int I)' 14966 This type of expression represents the integer value I. I is 14967 customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)', 14968 which is equivalent to 'XWINT (EXP, 0)'. 14969 14970 Constants generated for modes with fewer bits than in 14971 'HOST_WIDE_INT' must be sign extended to full width (e.g., with 14972 'gen_int_mode'). For constants for modes with more bits than in 14973 'HOST_WIDE_INT' the implied high order bits of that constant are 14974 copies of the top bit. Note however that values are neither 14975 inherently signed nor inherently unsigned; where necessary, 14976 signedness is determined by the rtl operation instead. 14977 14978 There is only one expression object for the integer value zero; it 14979 is the value of the variable 'const0_rtx'. Likewise, the only 14980 expression for integer value one is found in 'const1_rtx', the only 14981 expression for integer value two is found in 'const2_rtx', and the 14982 only expression for integer value negative one is found in 14983 'constm1_rtx'. Any attempt to create an expression of code 14984 'const_int' and value zero, one, two or negative one will return 14985 'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as 14986 appropriate. 14987 14988 Similarly, there is only one object for the integer whose value is 14989 'STORE_FLAG_VALUE'. It is found in 'const_true_rtx'. If 14990 'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will 14991 point to the same object. If 'STORE_FLAG_VALUE' is -1, 14992 'const_true_rtx' and 'constm1_rtx' will point to the same object. 14993 14994'(const_double:M I0 I1 ...)' 14995 This represents either a floating-point constant of mode M or (on 14996 older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an 14997 integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT' 14998 bits but small enough to fit within twice that number of bits. In 14999 the latter case, M will be 'VOIDmode'. For integral values 15000 constants for modes with more bits than twice the number in 15001 'HOST_WIDE_INT' the implied high order bits of that constant are 15002 copies of the top bit of 'CONST_DOUBLE_HIGH'. Note however that 15003 integral values are neither inherently signed nor inherently 15004 unsigned; where necessary, signedness is determined by the rtl 15005 operation instead. 15006 15007 On more modern ports, 'CONST_DOUBLE' only represents floating point 15008 values. New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this 15009 designation. 15010 15011 If M is 'VOIDmode', the bits of the value are stored in I0 and I1. 15012 I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1 15013 with 'CONST_DOUBLE_HIGH'. 15014 15015 If the constant is floating point (regardless of its precision), 15016 then the number of integers used to store the value depends on the 15017 size of 'REAL_VALUE_TYPE' (*note Floating Point::). The integers 15018 represent a floating point number, but not precisely in the target 15019 machine's or host machine's floating point format. To convert them 15020 to the precise bit pattern used by the target machine, use the 15021 macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 15022 Output::). 15023 15024'(const_wide_int:M NUNITS ELT0 ...)' 15025 This contains an array of 'HOST_WIDE_INT's that is large enough to 15026 hold any constant that can be represented on the target. This form 15027 of rtl is only used on targets that define 15028 'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's 15029 are only used to hold floating-point values. If the target leaves 15030 'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not 15031 used and 'CONST_DOUBLE's are as they were before. 15032 15033 The values are stored in a compressed format. The higher-order 0s 15034 or -1s are not represented if they are just the logical sign 15035 extension of the number that is represented. 15036 15037'CONST_WIDE_INT_VEC (CODE)' 15038 Returns the entire array of 'HOST_WIDE_INT's that are used to store 15039 the value. This macro should be rarely used. 15040 15041'CONST_WIDE_INT_NUNITS (CODE)' 15042 The number of 'HOST_WIDE_INT's used to represent the number. Note 15043 that this generally is smaller than the number of 'HOST_WIDE_INT's 15044 implied by the mode size. 15045 15046'CONST_WIDE_INT_NUNITS (CODE,I)' 15047 Returns the 'i'th element of the array. Element 0 is contains the 15048 low order bits of the constant. 15049 15050'(const_fixed:M ...)' 15051 Represents a fixed-point constant of mode M. The operand is a data 15052 structure of type 'struct fixed_value' and is accessed with the 15053 macro 'CONST_FIXED_VALUE'. The high part of data is accessed with 15054 'CONST_FIXED_VALUE_HIGH'; the low part is accessed with 15055 'CONST_FIXED_VALUE_LOW'. 15056 15057'(const_vector:M [X0 X1 ...])' 15058 Represents a vector constant. The square brackets stand for the 15059 vector containing the constant elements. X0, X1 and so on are the 15060 'const_int', 'const_double' or 'const_fixed' elements. 15061 15062 The number of units in a 'const_vector' is obtained with the macro 15063 'CONST_VECTOR_NUNITS' as in 'CONST_VECTOR_NUNITS (V)'. 15064 15065 Individual elements in a vector constant are accessed with the 15066 macro 'CONST_VECTOR_ELT' as in 'CONST_VECTOR_ELT (V, N)' where V is 15067 the vector constant and N is the element desired. 15068 15069'(const_string STR)' 15070 Represents a constant string with value STR. Currently this is 15071 used only for insn attributes (*note Insn Attributes::) since 15072 constant strings in C are placed in memory. 15073 15074'(symbol_ref:MODE SYMBOL)' 15075 Represents the value of an assembler label for data. SYMBOL is a 15076 string that describes the name of the assembler label. If it 15077 starts with a '*', the label is the rest of SYMBOL not including 15078 the '*'. Otherwise, the label is SYMBOL, usually prefixed with 15079 '_'. 15080 15081 The 'symbol_ref' contains a mode, which is usually 'Pmode'. 15082 Usually that is the only mode for which a symbol is directly valid. 15083 15084'(label_ref:MODE LABEL)' 15085 Represents the value of an assembler label for code. It contains 15086 one operand, an expression, which must be a 'code_label' or a 15087 'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the 15088 instruction sequence to identify the place where the label should 15089 go. 15090 15091 The reason for using a distinct expression type for code label 15092 references is so that jump optimization can distinguish them. 15093 15094 The 'label_ref' contains a mode, which is usually 'Pmode'. Usually 15095 that is the only mode for which a label is directly valid. 15096 15097'(const:M EXP)' 15098 Represents a constant that is the result of an assembly-time 15099 arithmetic computation. The operand, EXP, is an expression that 15100 contains only constants ('const_int', 'symbol_ref' and 'label_ref' 15101 expressions) combined with 'plus' and 'minus'. However, not all 15102 combinations are valid, since the assembler cannot do arbitrary 15103 arithmetic on relocatable symbols. 15104 15105 M should be 'Pmode'. 15106 15107'(high:M EXP)' 15108 Represents the high-order bits of EXP, usually a 'symbol_ref'. The 15109 number of bits is machine-dependent and is normally the number of 15110 bits specified in an instruction that initializes the high order 15111 bits of a register. It is used with 'lo_sum' to represent the 15112 typical two-instruction sequence used in RISC machines to reference 15113 a global memory location. 15114 15115 M should be 'Pmode'. 15116 15117 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in 15118mode MODE. If mode MODE is of mode class 'MODE_INT', it returns 15119'const0_rtx'. If mode MODE is of mode class 'MODE_FLOAT', it returns a 15120'CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 15121'CONST_VECTOR' expression in mode MODE. Similarly, the macro 15122'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 15123and similarly for 'CONST2_RTX'. The 'CONST1_RTX' and 'CONST2_RTX' 15124macros are undefined for vector modes. 15125 15126 15127File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 15128 1512913.8 Registers and Memory 15130========================= 15131 15132Here are the RTL expression types for describing access to machine 15133registers and to main memory. 15134 15135'(reg:M N)' 15136 For small values of the integer N (those that are less than 15137 'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 15138 register number N: a "hard register". For larger values of N, it 15139 stands for a temporary value or "pseudo register". The compiler's 15140 strategy is to generate code assuming an unlimited number of such 15141 pseudo registers, and later convert them into hard registers or 15142 into memory references. 15143 15144 M is the machine mode of the reference. It is necessary because 15145 machines can generally refer to each register in more than one 15146 mode. For example, a register may contain a full word but there 15147 may be instructions to refer to it as a half word or as a single 15148 byte, as well as instructions to refer to it as a floating point 15149 number of various precisions. 15150 15151 Even for a register that the machine can access in only one mode, 15152 the mode must always be specified. 15153 15154 The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine 15155 description, since the number of hard registers on the machine is 15156 an invariant characteristic of the machine. Note, however, that 15157 not all of the machine registers must be general registers. All 15158 the machine registers that can be used for storage of data are 15159 given hard register numbers, even those that can be used only in 15160 certain instructions or can hold only certain types of data. 15161 15162 A hard register may be accessed in various modes throughout one 15163 function, but each pseudo register is given a natural mode and is 15164 accessed only in that mode. When it is necessary to describe an 15165 access to a pseudo register using a nonnatural mode, a 'subreg' 15166 expression is used. 15167 15168 A 'reg' expression with a machine mode that specifies more than one 15169 word of data may actually stand for several consecutive registers. 15170 If in addition the register number specifies a hardware register, 15171 then it actually represents several consecutive hardware registers 15172 starting with the specified one. 15173 15174 Each pseudo register number used in a function's RTL code is 15175 represented by a unique 'reg' expression. 15176 15177 Some pseudo register numbers, those within the range of 15178 'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear 15179 during the RTL generation phase and are eliminated before the 15180 optimization phases. These represent locations in the stack frame 15181 that cannot be determined until RTL generation for the function has 15182 been completed. The following virtual register numbers are 15183 defined: 15184 15185 'VIRTUAL_INCOMING_ARGS_REGNUM' 15186 This points to the first word of the incoming arguments passed 15187 on the stack. Normally these arguments are placed there by 15188 the caller, but the callee may have pushed some arguments that 15189 were previously passed in registers. 15190 15191 When RTL generation is complete, this virtual register is 15192 replaced by the sum of the register given by 15193 'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'. 15194 15195 'VIRTUAL_STACK_VARS_REGNUM' 15196 If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 15197 points to immediately above the first variable on the stack. 15198 Otherwise, it points to the first variable on the stack. 15199 15200 'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 15201 register given by 'FRAME_POINTER_REGNUM' and the value 15202 'STARTING_FRAME_OFFSET'. 15203 15204 'VIRTUAL_STACK_DYNAMIC_REGNUM' 15205 This points to the location of dynamically allocated memory on 15206 the stack immediately after the stack pointer has been 15207 adjusted by the amount of memory desired. 15208 15209 This virtual register is replaced by the sum of the register 15210 given by 'STACK_POINTER_REGNUM' and the value 15211 'STACK_DYNAMIC_OFFSET'. 15212 15213 'VIRTUAL_OUTGOING_ARGS_REGNUM' 15214 This points to the location in the stack at which outgoing 15215 arguments should be written when the stack is pre-pushed 15216 (arguments pushed using push insns should always use 15217 'STACK_POINTER_REGNUM'). 15218 15219 This virtual register is replaced by the sum of the register 15220 given by 'STACK_POINTER_REGNUM' and the value 15221 'STACK_POINTER_OFFSET'. 15222 15223'(subreg:M1 REG:M2 BYTENUM)' 15224 15225 'subreg' expressions are used to refer to a register in a machine 15226 mode other than its natural one, or to refer to one register of a 15227 multi-part 'reg' that actually refers to several registers. 15228 15229 Each pseudo register has a natural mode. If it is necessary to 15230 operate on it in a different mode, the register must be enclosed in 15231 a 'subreg'. 15232 15233 There are currently three supported types for the first operand of 15234 a 'subreg': 15235 * pseudo registers This is the most common case. Most 'subreg's 15236 have pseudo 'reg's as their first operand. 15237 15238 * mem 'subreg's of 'mem' were common in earlier versions of GCC 15239 and are still supported. During the reload pass these are 15240 replaced by plain 'mem's. On machines that do not do 15241 instruction scheduling, use of 'subreg's of 'mem' are still 15242 used, but this is no longer recommended. Such 'subreg's are 15243 considered to be 'register_operand's rather than 15244 'memory_operand's before and during reload. Because of this, 15245 the scheduling passes cannot properly schedule instructions 15246 with 'subreg's of 'mem', so for machines that do scheduling, 15247 'subreg's of 'mem' should never be used. To support this, the 15248 combine and recog passes have explicit code to inhibit the 15249 creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is 15250 defined. 15251 15252 The use of 'subreg's of 'mem' after the reload pass is an area 15253 that is not well understood and should be avoided. There is 15254 still some code in the compiler to support this, but this code 15255 has possibly rotted. This use of 'subreg's is discouraged and 15256 will most likely not be supported in the future. 15257 15258 * hard registers It is seldom necessary to wrap hard registers 15259 in 'subreg's; such registers would normally reduce to a single 15260 'reg' rtx. This use of 'subreg's is discouraged and may not 15261 be supported in the future. 15262 15263 'subreg's of 'subreg's are not supported. Using 15264 'simplify_gen_subreg' is the recommended way to avoid this problem. 15265 15266 'subreg's come in two distinct flavors, each having its own usage 15267 and rules: 15268 15269 Paradoxical subregs 15270 When M1 is strictly wider than M2, the 'subreg' expression is 15271 called "paradoxical". The canonical test for this class of 15272 'subreg' is: 15273 15274 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2) 15275 15276 Paradoxical 'subreg's can be used as both lvalues and rvalues. 15277 When used as an lvalue, the low-order bits of the source value 15278 are stored in REG and the high-order bits are discarded. When 15279 used as an rvalue, the low-order bits of the 'subreg' are 15280 taken from REG while the high-order bits may or may not be 15281 defined. 15282 15283 The high-order bits of rvalues are in the following 15284 circumstances: 15285 15286 * 'subreg's of 'mem' When M2 is smaller than a word, the 15287 macro 'LOAD_EXTEND_OP', can control how the high-order 15288 bits are defined. 15289 15290 * 'subreg' of 'reg's The upper bits are defined when 15291 'SUBREG_PROMOTED_VAR_P' is true. 15292 'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 15293 bits hold. Such subregs usually represent local 15294 variables, register variables and parameter pseudo 15295 variables that have been promoted to a wider mode. 15296 15297 BYTENUM is always zero for a paradoxical 'subreg', even on 15298 big-endian targets. 15299 15300 For example, the paradoxical 'subreg': 15301 15302 (set (subreg:SI (reg:HI X) 0) Y) 15303 15304 stores the lower 2 bytes of Y in X and discards the upper 2 15305 bytes. A subsequent: 15306 15307 (set Z (subreg:SI (reg:HI X) 0)) 15308 15309 would set the lower two bytes of Z to Y and set the upper two 15310 bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is 15311 false. 15312 15313 Normal subregs 15314 When M1 is at least as narrow as M2 the 'subreg' expression is 15315 called "normal". 15316 15317 Normal 'subreg's restrict consideration to certain bits of 15318 REG. There are two cases. If M1 is smaller than a word, the 15319 'subreg' refers to the least-significant part (or "lowpart") 15320 of one word of REG. If M1 is word-sized or greater, the 15321 'subreg' refers to one or more complete words. 15322 15323 When used as an lvalue, 'subreg' is a word-based accessor. 15324 Storing to a 'subreg' modifies all the words of REG that 15325 overlap the 'subreg', but it leaves the other words of REG 15326 alone. 15327 15328 When storing to a normal 'subreg' that is smaller than a word, 15329 the other bits of the referenced word are usually left in an 15330 undefined state. This laxity makes it easier to generate 15331 efficient code for such instructions. To represent an 15332 instruction that preserves all the bits outside of those in 15333 the 'subreg', use 'strict_low_part' or 'zero_extract' around 15334 the 'subreg'. 15335 15336 BYTENUM must identify the offset of the first byte of the 15337 'subreg' from the start of REG, assuming that REG is laid out 15338 in memory order. The memory order of bytes is defined by two 15339 target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN': 15340 15341 * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number 15342 zero is part of the most significant word; otherwise, it 15343 is part of the least significant word. 15344 15345 * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number 15346 zero is the most significant byte within a word; 15347 otherwise, it is the least significant byte within a 15348 word. 15349 15350 On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with 15351 'WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 15352 floating point values as if they had the same endianness as 15353 integer values. This works because they handle them solely as 15354 a collection of integer values, with no particular numerical 15355 value. Only real.c and the runtime libraries care about 15356 'FLOAT_WORDS_BIG_ENDIAN'. 15357 15358 Thus, 15359 15360 (subreg:HI (reg:SI X) 2) 15361 15362 on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the 15363 same as 15364 15365 (subreg:HI (reg:SI X) 0) 15366 15367 on a little-endian, 'UNITS_PER_WORD == 4' target. Both 15368 'subreg's access the lower two bytes of register X. 15369 15370 A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the 15371 corresponding 'MODE_INT' mode, except that it has an unknown number 15372 of undefined bits. For example: 15373 15374 (subreg:PSI (reg:SI 0) 0) 15375 15376 accesses the whole of '(reg:SI 0)', but the exact relationship 15377 between the 'PSImode' value and the 'SImode' value is not defined. 15378 If we assume 'UNITS_PER_WORD <= 4', then the following two 15379 'subreg's: 15380 15381 (subreg:PSI (reg:DI 0) 0) 15382 (subreg:PSI (reg:DI 0) 4) 15383 15384 represent independent 4-byte accesses to the two halves of '(reg:DI 15385 0)'. Both 'subreg's have an unknown number of undefined bits. 15386 15387 If 'UNITS_PER_WORD <= 2' then these two 'subreg's: 15388 15389 (subreg:HI (reg:PSI 0) 0) 15390 (subreg:HI (reg:PSI 0) 2) 15391 15392 represent independent 2-byte accesses that together span the whole 15393 of '(reg:PSI 0)'. Storing to the first 'subreg' does not affect 15394 the value of the second, and vice versa. '(reg:PSI 0)' has an 15395 unknown number of undefined bits, so the assignment: 15396 15397 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 15398 15399 does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value 15400 '(reg:HI 4)'. 15401 15402 The rules above apply to both pseudo REGs and hard REGs. If the 15403 semantics are not correct for particular combinations of M1, M2 and 15404 hard REG, the target-specific code must ensure that those 15405 combinations are never used. For example: 15406 15407 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS) 15408 15409 must be true for every class CLASS that includes REG. 15410 15411 The first operand of a 'subreg' expression is customarily accessed 15412 with the 'SUBREG_REG' macro and the second operand is customarily 15413 accessed with the 'SUBREG_BYTE' macro. 15414 15415 It has been several years since a platform in which 15416 'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested. 15417 Anyone wishing to support such a platform in the future may be 15418 confronted with code rot. 15419 15420'(scratch:M)' 15421 This represents a scratch register that will be required for the 15422 execution of a single instruction and not used subsequently. It is 15423 converted into a 'reg' by either the local register allocator or 15424 the reload pass. 15425 15426 'scratch' is usually present inside a 'clobber' operation (*note 15427 Side Effects::). 15428 15429'(cc0)' 15430 This refers to the machine's condition code register. It has no 15431 operands and may not have a machine mode. There are two ways to 15432 use it: 15433 15434 * To stand for a complete set of condition code flags. This is 15435 best on most machines, where each comparison sets the entire 15436 series of flags. 15437 15438 With this technique, '(cc0)' may be validly used in only two 15439 contexts: as the destination of an assignment (in test and 15440 compare instructions) and in comparison operators comparing 15441 against zero ('const_int' with value zero; that is to say, 15442 'const0_rtx'). 15443 15444 * To stand for a single flag that is the result of a single 15445 condition. This is useful on machines that have only a single 15446 flag bit, and in which comparison instructions must specify 15447 the condition to test. 15448 15449 With this technique, '(cc0)' may be validly used in only two 15450 contexts: as the destination of an assignment (in test and 15451 compare instructions) where the source is a comparison 15452 operator, and as the first operand of 'if_then_else' (in a 15453 conditional branch). 15454 15455 There is only one expression object of code 'cc0'; it is the value 15456 of the variable 'cc0_rtx'. Any attempt to create an expression of 15457 code 'cc0' will return 'cc0_rtx'. 15458 15459 Instructions can set the condition code implicitly. On many 15460 machines, nearly all instructions set the condition code based on 15461 the value that they compute or store. It is not necessary to 15462 record these actions explicitly in the RTL because the machine 15463 description includes a prescription for recognizing the 15464 instructions that do so (by means of the macro 'NOTICE_UPDATE_CC'). 15465 *Note Condition Code::. Only instructions whose sole purpose is to 15466 set the condition code, and instructions that use the condition 15467 code, need mention '(cc0)'. 15468 15469 On some machines, the condition code register is given a register 15470 number and a 'reg' is used instead of '(cc0)'. This is usually the 15471 preferable approach if only a small subset of instructions modify 15472 the condition code. Other machines store condition codes in 15473 general registers; in such cases a pseudo register should be used. 15474 15475 Some machines, such as the SPARC and RS/6000, have two sets of 15476 arithmetic instructions, one that sets and one that does not set 15477 the condition code. This is best handled by normally generating 15478 the instruction that does not set the condition code, and making a 15479 pattern that both performs the arithmetic and sets the condition 15480 code register (which would not be '(cc0)' in this case). For 15481 examples, search for 'addcc' and 'andcc' in 'sparc.md'. 15482 15483'(pc)' 15484 This represents the machine's program counter. It has no operands 15485 and may not have a machine mode. '(pc)' may be validly used only 15486 in certain specific contexts in jump instructions. 15487 15488 There is only one expression object of code 'pc'; it is the value 15489 of the variable 'pc_rtx'. Any attempt to create an expression of 15490 code 'pc' will return 'pc_rtx'. 15491 15492 All instructions that do not jump alter the program counter 15493 implicitly by incrementing it, but there is no need to mention this 15494 in the RTL. 15495 15496'(mem:M ADDR ALIAS)' 15497 This RTX represents a reference to main memory at an address 15498 represented by the expression ADDR. M specifies how large a unit 15499 of memory is accessed. ALIAS specifies an alias set for the 15500 reference. In general two items are in different alias sets if 15501 they cannot reference the same memory address. 15502 15503 The construct '(mem:BLK (scratch))' is considered to alias all 15504 other memories. Thus it may be used as a memory barrier in 15505 epilogue stack deallocation patterns. 15506 15507'(concatM RTX RTX)' 15508 This RTX represents the concatenation of two other RTXs. This is 15509 used for complex values. It should only appear in the RTL attached 15510 to declarations and during RTL generation. It should not appear in 15511 the ordinary insn chain. 15512 15513'(concatnM [RTX ...])' 15514 This RTX represents the concatenation of all the RTX to make a 15515 single value. Like 'concat', this should only appear in 15516 declarations, and not in the insn chain. 15517 15518 15519File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 15520 1552113.9 RTL Expressions for Arithmetic 15522=================================== 15523 15524Unless otherwise specified, all the operands of arithmetic expressions 15525must be valid for mode M. An operand is valid for mode M if it has mode 15526M, or if it is a 'const_int' or 'const_double' and M is a mode of class 15527'MODE_INT'. 15528 15529 For commutative binary operations, constants should be placed in the 15530second operand. 15531 15532'(plus:M X Y)' 15533'(ss_plus:M X Y)' 15534'(us_plus:M X Y)' 15535 15536 These three expressions all represent the sum of the values 15537 represented by X and Y carried out in machine mode M. They differ 15538 in their behavior on overflow of integer modes. 'plus' wraps round 15539 modulo the width of M; 'ss_plus' saturates at the maximum signed 15540 value representable in M; 'us_plus' saturates at the maximum 15541 unsigned value. 15542 15543'(lo_sum:M X Y)' 15544 15545 This expression represents the sum of X and the low-order bits of 15546 Y. It is used with 'high' (*note Constants::) to represent the 15547 typical two-instruction sequence used in RISC machines to reference 15548 a global memory location. 15549 15550 The number of low order bits is machine-dependent but is normally 15551 the number of bits in a 'Pmode' item minus the number of bits set 15552 by 'high'. 15553 15554 M should be 'Pmode'. 15555 15556'(minus:M X Y)' 15557'(ss_minus:M X Y)' 15558'(us_minus:M X Y)' 15559 15560 These three expressions represent the result of subtracting Y from 15561 X, carried out in mode M. Behavior on overflow is the same as for 15562 the three variants of 'plus' (see above). 15563 15564'(compare:M X Y)' 15565 Represents the result of subtracting Y from X for purposes of 15566 comparison. The result is computed without overflow, as if with 15567 infinite precision. 15568 15569 Of course, machines can't really subtract with infinite precision. 15570 However, they can pretend to do so when only the sign of the result 15571 will be used, which is the case when the result is stored in the 15572 condition code. And that is the _only_ way this kind of expression 15573 may validly be used: as a value to be stored in the condition 15574 codes, either '(cc0)' or a register. *Note Comparisons::. 15575 15576 The mode M is not related to the modes of X and Y, but instead is 15577 the mode of the condition code value. If '(cc0)' is used, it is 15578 'VOIDmode'. Otherwise it is some mode in class 'MODE_CC', often 15579 'CCmode'. *Note Condition Code::. If M is 'VOIDmode' or 'CCmode', 15580 the operation returns sufficient information (in an unspecified 15581 format) so that any comparison operator can be applied to the 15582 result of the 'COMPARE' operation. For other modes in class 15583 'MODE_CC', the operation only returns a subset of this information. 15584 15585 Normally, X and Y must have the same mode. Otherwise, 'compare' is 15586 valid only if the mode of X is in class 'MODE_INT' and Y is a 15587 'const_int' or 'const_double' with mode 'VOIDmode'. The mode of X 15588 determines what mode the comparison is to be done in; thus it must 15589 not be 'VOIDmode'. 15590 15591 If one of the operands is a constant, it should be placed in the 15592 second operand and the comparison code adjusted as appropriate. 15593 15594 A 'compare' specifying two 'VOIDmode' constants is not valid since 15595 there is no way to know in what mode the comparison is to be 15596 performed; the comparison must either be folded during the 15597 compilation or the first operand must be loaded into a register 15598 while its mode is still known. 15599 15600'(neg:M X)' 15601'(ss_neg:M X)' 15602'(us_neg:M X)' 15603 These two expressions represent the negation (subtraction from 15604 zero) of the value represented by X, carried out in mode M. They 15605 differ in the behavior on overflow of integer modes. In the case 15606 of 'neg', the negation of the operand may be a number not 15607 representable in mode M, in which case it is truncated to M. 15608 'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates 15609 to the maximum or minimum signed or unsigned value. 15610 15611'(mult:M X Y)' 15612'(ss_mult:M X Y)' 15613'(us_mult:M X Y)' 15614 Represents the signed product of the values represented by X and Y 15615 carried out in machine mode M. 'ss_mult' and 'us_mult' ensure that 15616 an out-of-bounds result saturates to the maximum or minimum signed 15617 or unsigned value. 15618 15619 Some machines support a multiplication that generates a product 15620 wider than the operands. Write the pattern for this as 15621 15622 (mult:M (sign_extend:M X) (sign_extend:M Y)) 15623 15624 where M is wider than the modes of X and Y, which need not be the 15625 same. 15626 15627 For unsigned widening multiplication, use the same idiom, but with 15628 'zero_extend' instead of 'sign_extend'. 15629 15630'(fma:M X Y Z)' 15631 Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which 15632 compute 'X * Y + Z' without doing an intermediate rounding step. 15633 15634'(div:M X Y)' 15635'(ss_div:M X Y)' 15636 Represents the quotient in signed division of X by Y, carried out 15637 in machine mode M. If M is a floating point mode, it represents 15638 the exact quotient; otherwise, the integerized quotient. 'ss_div' 15639 ensures that an out-of-bounds result saturates to the maximum or 15640 minimum signed value. 15641 15642 Some machines have division instructions in which the operands and 15643 quotient widths are not all the same; you should represent such 15644 instructions using 'truncate' and 'sign_extend' as in, 15645 15646 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 15647 15648'(udiv:M X Y)' 15649'(us_div:M X Y)' 15650 Like 'div' but represents unsigned division. 'us_div' ensures that 15651 an out-of-bounds result saturates to the maximum or minimum 15652 unsigned value. 15653 15654'(mod:M X Y)' 15655'(umod:M X Y)' 15656 Like 'div' and 'udiv' but represent the remainder instead of the 15657 quotient. 15658 15659'(smin:M X Y)' 15660'(smax:M X Y)' 15661 Represents the smaller (for 'smin') or larger (for 'smax') of X and 15662 Y, interpreted as signed values in mode M. When used with floating 15663 point, if both operands are zeros, or if either operand is 'NaN', 15664 then it is unspecified which of the two operands is returned as the 15665 result. 15666 15667'(umin:M X Y)' 15668'(umax:M X Y)' 15669 Like 'smin' and 'smax', but the values are interpreted as unsigned 15670 integers. 15671 15672'(not:M X)' 15673 Represents the bitwise complement of the value represented by X, 15674 carried out in mode M, which must be a fixed-point machine mode. 15675 15676'(and:M X Y)' 15677 Represents the bitwise logical-and of the values represented by X 15678 and Y, carried out in machine mode M, which must be a fixed-point 15679 machine mode. 15680 15681'(ior:M X Y)' 15682 Represents the bitwise inclusive-or of the values represented by X 15683 and Y, carried out in machine mode M, which must be a fixed-point 15684 mode. 15685 15686'(xor:M X Y)' 15687 Represents the bitwise exclusive-or of the values represented by X 15688 and Y, carried out in machine mode M, which must be a fixed-point 15689 mode. 15690 15691'(ashift:M X C)' 15692'(ss_ashift:M X C)' 15693'(us_ashift:M X C)' 15694 These three expressions represent the result of arithmetically 15695 shifting X left by C places. They differ in their behavior on 15696 overflow of integer modes. An 'ashift' operation is a plain shift 15697 with no special behavior in case of a change in the sign bit; 15698 'ss_ashift' and 'us_ashift' saturates to the minimum or maximum 15699 representable value if any of the bits shifted out differs from the 15700 final sign bit. 15701 15702 X have mode M, a fixed-point machine mode. C be a fixed-point mode 15703 or be a constant with mode 'VOIDmode'; which mode is determined by 15704 the mode called for in the machine description entry for the 15705 left-shift instruction. For example, on the VAX, the mode of C is 15706 'QImode' regardless of M. 15707 15708'(lshiftrt:M X C)' 15709'(ashiftrt:M X C)' 15710 Like 'ashift' but for right shift. Unlike the case for left shift, 15711 these two operations are distinct. 15712 15713'(rotate:M X C)' 15714'(rotatert:M X C)' 15715 Similar but represent left and right rotate. If C is a constant, 15716 use 'rotate'. 15717 15718'(abs:M X)' 15719'(ss_abs:M X)' 15720 Represents the absolute value of X, computed in mode M. 'ss_abs' 15721 ensures that an out-of-bounds result saturates to the maximum 15722 signed value. 15723 15724'(sqrt:M X)' 15725 Represents the square root of X, computed in mode M. Most often M 15726 will be a floating point mode. 15727 15728'(ffs:M X)' 15729 Represents one plus the index of the least significant 1-bit in X, 15730 represented as an integer of mode M. (The value is zero if X is 15731 zero.) The mode of X must be M or 'VOIDmode'. 15732 15733'(clrsb:M X)' 15734 Represents the number of redundant leading sign bits in X, 15735 represented as an integer of mode M, starting at the most 15736 significant bit position. This is one less than the number of 15737 leading sign bits (either 0 or 1), with no special cases. The mode 15738 of X must be M or 'VOIDmode'. 15739 15740'(clz:M X)' 15741 Represents the number of leading 0-bits in X, represented as an 15742 integer of mode M, starting at the most significant bit position. 15743 If X is zero, the value is determined by 15744 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 15745 of the few expressions that is not invariant under widening. The 15746 mode of X must be M or 'VOIDmode'. 15747 15748'(ctz:M X)' 15749 Represents the number of trailing 0-bits in X, represented as an 15750 integer of mode M, starting at the least significant bit position. 15751 If X is zero, the value is determined by 15752 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 15753 'ctz(x)' is equivalent to 'ffs(X) - 1'. The mode of X must be M or 15754 'VOIDmode'. 15755 15756'(popcount:M X)' 15757 Represents the number of 1-bits in X, represented as an integer of 15758 mode M. The mode of X must be M or 'VOIDmode'. 15759 15760'(parity:M X)' 15761 Represents the number of 1-bits modulo 2 in X, represented as an 15762 integer of mode M. The mode of X must be M or 'VOIDmode'. 15763 15764'(bswap:M X)' 15765 Represents the value X with the order of bytes reversed, carried 15766 out in mode M, which must be a fixed-point machine mode. The mode 15767 of X must be M or 'VOIDmode'. 15768 15769 15770File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 15771 1577213.10 Comparison Operations 15773=========================== 15774 15775Comparison operators test a relation on two operands and are considered 15776to represent a machine-dependent nonzero value described by, but not 15777necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation 15778holds, or zero if it does not, for comparison operators whose results 15779have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 15780relation holds, or zero if it does not, for comparison operators that 15781return floating-point values, and a vector of either 15782'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 15783zeros if it does not, for comparison operators that return vector 15784results. The mode of the comparison operation is independent of the 15785mode of the data being compared. If the comparison operation is being 15786tested (e.g., the first operand of an 'if_then_else'), the mode must be 15787'VOIDmode'. 15788 15789 There are two ways that comparison operations may be used. The 15790comparison operators may be used to compare the condition codes '(cc0)' 15791against zero, as in '(eq (cc0) (const_int 0))'. Such a construct 15792actually refers to the result of the preceding instruction in which the 15793condition codes were set. The instruction setting the condition code 15794must be adjacent to the instruction using the condition code; only 15795'note' insns may separate them. 15796 15797 Alternatively, a comparison operation may directly compare two data 15798objects. The mode of the comparison is determined by the operands; they 15799must both be valid for a common machine mode. A comparison with both 15800operands constant would be invalid as the machine mode could not be 15801deduced from it, but such a comparison should never exist in RTL due to 15802constant folding. 15803 15804 In the example above, if '(cc0)' were last set to '(compare X Y)', the 15805comparison operation is identical to '(eq X Y)'. Usually only one style 15806of comparisons is supported on a particular machine, but the combine 15807pass will try to merge the operations to produce the 'eq' shown in case 15808it exists in the context of the particular insn involved. 15809 15810 Inequality comparisons come in two flavors, signed and unsigned. Thus, 15811there are distinct expression codes 'gt' and 'gtu' for signed and 15812unsigned greater-than. These can produce different results for the same 15813pair of integer values: for example, 1 is signed greater-than -1 but not 15814unsigned greater-than, because -1 when regarded as unsigned is actually 15815'0xffffffff' which is greater than 1. 15816 15817 The signed comparisons are also used for floating point values. 15818Floating point comparisons are distinguished by the machine modes of the 15819operands. 15820 15821'(eq:M X Y)' 15822 'STORE_FLAG_VALUE' if the values represented by X and Y are equal, 15823 otherwise 0. 15824 15825'(ne:M X Y)' 15826 'STORE_FLAG_VALUE' if the values represented by X and Y are not 15827 equal, otherwise 0. 15828 15829'(gt:M X Y)' 15830 'STORE_FLAG_VALUE' if the X is greater than Y. If they are 15831 fixed-point, the comparison is done in a signed sense. 15832 15833'(gtu:M X Y)' 15834 Like 'gt' but does unsigned comparison, on fixed-point numbers 15835 only. 15836 15837'(lt:M X Y)' 15838'(ltu:M X Y)' 15839 Like 'gt' and 'gtu' but test for "less than". 15840 15841'(ge:M X Y)' 15842'(geu:M X Y)' 15843 Like 'gt' and 'gtu' but test for "greater than or equal". 15844 15845'(le:M X Y)' 15846'(leu:M X Y)' 15847 Like 'gt' and 'gtu' but test for "less than or equal". 15848 15849'(if_then_else COND THEN ELSE)' 15850 This is not a comparison operation but is listed here because it is 15851 always used in conjunction with a comparison operation. To be 15852 precise, COND is a comparison expression. This expression 15853 represents a choice, according to COND, between the value 15854 represented by THEN and the one represented by ELSE. 15855 15856 On most machines, 'if_then_else' expressions are valid only to 15857 express conditional jumps. 15858 15859'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 15860 Similar to 'if_then_else', but more general. Each of TEST1, TEST2, 15861 ... is performed in turn. The result of this expression is the 15862 VALUE corresponding to the first nonzero test, or DEFAULT if none 15863 of the tests are nonzero expressions. 15864 15865 This is currently not valid for instruction patterns and is 15866 supported only for insn attributes. *Note Insn Attributes::. 15867 15868 15869File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 15870 1587113.11 Bit-Fields 15872================ 15873 15874Special expression codes exist to represent bit-field instructions. 15875 15876'(sign_extract:M LOC SIZE POS)' 15877 This represents a reference to a sign-extended bit-field contained 15878 or starting in LOC (a memory or register reference). The bit-field 15879 is SIZE bits wide and starts at bit POS. The compilation option 15880 'BITS_BIG_ENDIAN' says which end of the memory unit POS counts 15881 from. 15882 15883 If LOC is in memory, its mode must be a single-byte integer mode. 15884 If LOC is in a register, the mode to use is specified by the 15885 operand of the 'insv' or 'extv' pattern (*note Standard Names::) 15886 and is usually a full-word integer mode, which is the default if 15887 none is specified. 15888 15889 The mode of POS is machine-specific and is also specified in the 15890 'insv' or 'extv' pattern. 15891 15892 The mode M is the same as the mode that would be used for LOC if it 15893 were a register. 15894 15895 A 'sign_extract' can not appear as an lvalue, or part thereof, in 15896 RTL. 15897 15898'(zero_extract:M LOC SIZE POS)' 15899 Like 'sign_extract' but refers to an unsigned or zero-extended 15900 bit-field. The same sequence of bits are extracted, but they are 15901 filled to an entire word with zeros instead of by sign-extension. 15902 15903 Unlike 'sign_extract', this type of expressions can be lvalues in 15904 RTL; they may appear on the left side of an assignment, indicating 15905 insertion of a value into the specified bit-field. 15906 15907 15908File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 15909 1591013.12 Vector Operations 15911======================= 15912 15913All normal RTL expressions can be used with vector modes; they are 15914interpreted as operating on each part of the vector independently. 15915Additionally, there are a few new expressions to describe specific 15916vector operations. 15917 15918'(vec_merge:M VEC1 VEC2 ITEMS)' 15919 This describes a merge operation between two vectors. The result 15920 is a vector of mode M; its elements are selected from either VEC1 15921 or VEC2. Which elements are selected is described by ITEMS, which 15922 is a bit mask represented by a 'const_int'; a zero bit indicates 15923 the corresponding element in the result vector is taken from VEC2 15924 while a set bit indicates it is taken from VEC1. 15925 15926'(vec_select:M VEC1 SELECTION)' 15927 This describes an operation that selects parts of a vector. VEC1 15928 is the source vector, and SELECTION is a 'parallel' that contains a 15929 'const_int' for each of the subparts of the result vector, giving 15930 the number of the source subpart that should be stored into it. 15931 The result mode M is either the submode for a single element of 15932 VEC1 (if only one subpart is selected), or another vector mode with 15933 that element submode (if multiple subparts are selected). 15934 15935'(vec_concat:M X1 X2)' 15936 Describes a vector concat operation. The result is a concatenation 15937 of the vectors or scalars X1 and X2; its length is the sum of the 15938 lengths of the two inputs. 15939 15940'(vec_duplicate:M X)' 15941 This operation converts a scalar into a vector or a small vector 15942 into a larger one by duplicating the input values. The output 15943 vector mode must have the same submodes as the input vector mode or 15944 the scalar modes, and the number of output parts must be an integer 15945 multiple of the number of input parts. 15946 15947 15948File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 15949 1595013.13 Conversions 15951================= 15952 15953All conversions between machine modes must be represented by explicit 15954conversion operations. For example, an expression which is the sum of a 15955byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI 1595680))' because the 'plus' operation requires two operands of the same 15957machine mode. Therefore, the byte-sized operand is enclosed in a 15958conversion operation, as in 15959 15960 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 15961 15962 The conversion operation is not a mere placeholder, because there may 15963be more than one way of converting from a given starting mode to the 15964desired final mode. The conversion operation code says how to do it. 15965 15966 For all conversion operations, X must not be 'VOIDmode' because the 15967mode in which to do the conversion would not be known. The conversion 15968must either be done at compile-time or X must be placed into a register. 15969 15970'(sign_extend:M X)' 15971 Represents the result of sign-extending the value X to machine mode 15972 M. M must be a fixed-point mode and X a fixed-point value of a 15973 mode narrower than M. 15974 15975'(zero_extend:M X)' 15976 Represents the result of zero-extending the value X to machine mode 15977 M. M must be a fixed-point mode and X a fixed-point value of a 15978 mode narrower than M. 15979 15980'(float_extend:M X)' 15981 Represents the result of extending the value X to machine mode M. 15982 M must be a floating point mode and X a floating point value of a 15983 mode narrower than M. 15984 15985'(truncate:M X)' 15986 Represents the result of truncating the value X to machine mode M. 15987 M must be a fixed-point mode and X a fixed-point value of a mode 15988 wider than M. 15989 15990'(ss_truncate:M X)' 15991 Represents the result of truncating the value X to machine mode M, 15992 using signed saturation in the case of overflow. Both M and the 15993 mode of X must be fixed-point modes. 15994 15995'(us_truncate:M X)' 15996 Represents the result of truncating the value X to machine mode M, 15997 using unsigned saturation in the case of overflow. Both M and the 15998 mode of X must be fixed-point modes. 15999 16000'(float_truncate:M X)' 16001 Represents the result of truncating the value X to machine mode M. 16002 M must be a floating point mode and X a floating point value of a 16003 mode wider than M. 16004 16005'(float:M X)' 16006 Represents the result of converting fixed point value X, regarded 16007 as signed, to floating point mode M. 16008 16009'(unsigned_float:M X)' 16010 Represents the result of converting fixed point value X, regarded 16011 as unsigned, to floating point mode M. 16012 16013'(fix:M X)' 16014 When M is a floating-point mode, represents the result of 16015 converting floating point value X (valid for mode M) to an integer, 16016 still represented in floating point mode M, by rounding towards 16017 zero. 16018 16019 When M is a fixed-point mode, represents the result of converting 16020 floating point value X to mode M, regarded as signed. How rounding 16021 is done is not specified, so this operation may be used validly in 16022 compiling C code only for integer-valued operands. 16023 16024'(unsigned_fix:M X)' 16025 Represents the result of converting floating point value X to fixed 16026 point mode M, regarded as unsigned. How rounding is done is not 16027 specified. 16028 16029'(fract_convert:M X)' 16030 Represents the result of converting fixed-point value X to 16031 fixed-point mode M, signed integer value X to fixed-point mode M, 16032 floating-point value X to fixed-point mode M, fixed-point value X 16033 to integer mode M regarded as signed, or fixed-point value X to 16034 floating-point mode M. When overflows or underflows happen, the 16035 results are undefined. 16036 16037'(sat_fract:M X)' 16038 Represents the result of converting fixed-point value X to 16039 fixed-point mode M, signed integer value X to fixed-point mode M, 16040 or floating-point value X to fixed-point mode M. When overflows or 16041 underflows happen, the results are saturated to the maximum or the 16042 minimum. 16043 16044'(unsigned_fract_convert:M X)' 16045 Represents the result of converting fixed-point value X to integer 16046 mode M regarded as unsigned, or unsigned integer value X to 16047 fixed-point mode M. When overflows or underflows happen, the 16048 results are undefined. 16049 16050'(unsigned_sat_fract:M X)' 16051 Represents the result of converting unsigned integer value X to 16052 fixed-point mode M. When overflows or underflows happen, the 16053 results are saturated to the maximum or the minimum. 16054 16055 16056File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 16057 1605813.14 Declarations 16059================== 16060 16061Declaration expression codes do not represent arithmetic operations but 16062rather state assertions about their operands. 16063 16064'(strict_low_part (subreg:M (reg:N R) 0))' 16065 This expression code is used in only one context: as the 16066 destination operand of a 'set' expression. In addition, the 16067 operand of this expression must be a non-paradoxical 'subreg' 16068 expression. 16069 16070 The presence of 'strict_low_part' says that the part of the 16071 register which is meaningful in mode N, but is not part of mode M, 16072 is not to be altered. Normally, an assignment to such a subreg is 16073 allowed to have undefined effects on the rest of the register when 16074 M is less than a word. 16075 16076 16077File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 16078 1607913.15 Side Effect Expressions 16080============================= 16081 16082The expression codes described so far represent values, not actions. 16083But machine instructions never produce values; they are meaningful only 16084for their side effects on the state of the machine. Special expression 16085codes are used to represent side effects. 16086 16087 The body of an instruction is always one of these side effect codes; 16088the codes described above, which represent values, appear only as the 16089operands of these. 16090 16091'(set LVAL X)' 16092 Represents the action of storing the value of X into the place 16093 represented by LVAL. LVAL must be an expression representing a 16094 place that can be stored in: 'reg' (or 'subreg', 'strict_low_part' 16095 or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'. 16096 16097 If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then 16098 X must be valid for that mode. 16099 16100 If LVAL is a 'reg' whose machine mode is less than the full width 16101 of the register, then it means that the part of the register 16102 specified by the machine mode is given the specified value and the 16103 rest of the register receives an undefined value. Likewise, if 16104 LVAL is a 'subreg' whose machine mode is narrower than the mode of 16105 the register, the rest of the register can be changed in an 16106 undefined way. 16107 16108 If LVAL is a 'strict_low_part' of a subreg, then the part of the 16109 register specified by the machine mode of the 'subreg' is given the 16110 value X and the rest of the register is not changed. 16111 16112 If LVAL is a 'zero_extract', then the referenced part of the 16113 bit-field (a memory or register reference) specified by the 16114 'zero_extract' is given the value X and the rest of the bit-field 16115 is not changed. Note that 'sign_extract' can not appear in LVAL. 16116 16117 If LVAL is '(cc0)', it has no machine mode, and X may be either a 16118 'compare' expression or a value that may have any mode. The latter 16119 case represents a "test" instruction. The expression '(set (cc0) 16120 (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N) 16121 (const_int 0)))'. Use the former expression to save space during 16122 the compilation. 16123 16124 If LVAL is a 'parallel', it is used to represent the case of a 16125 function returning a structure in multiple registers. Each element 16126 of the 'parallel' is an 'expr_list' whose first operand is a 'reg' 16127 and whose second operand is a 'const_int' representing the offset 16128 (in bytes) into the structure at which the data in that register 16129 corresponds. The first element may be null to indicate that the 16130 structure is also passed partly in memory. 16131 16132 If LVAL is '(pc)', we have a jump instruction, and the 16133 possibilities for X are very limited. It may be a 'label_ref' 16134 expression (unconditional jump). It may be an 'if_then_else' 16135 (conditional jump), in which case either the second or the third 16136 operand must be '(pc)' (for the case which does not jump) and the 16137 other of the two must be a 'label_ref' (for the case which does 16138 jump). X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be 16139 a 'reg' or a 'mem'; these unusual patterns are used to represent 16140 jumps through branch tables. 16141 16142 If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be 16143 'VOIDmode' and the mode of X must be valid for the mode of LVAL. 16144 16145 LVAL is customarily accessed with the 'SET_DEST' macro and X with 16146 the 'SET_SRC' macro. 16147 16148'(return)' 16149 As the sole expression in a pattern, represents a return from the 16150 current function, on machines where this can be done with one 16151 instruction, such as VAXen. On machines where a multi-instruction 16152 "epilogue" must be executed in order to return from the function, 16153 returning is done by jumping to a label which precedes the 16154 epilogue, and the 'return' expression code is never used. 16155 16156 Inside an 'if_then_else' expression, represents the value to be 16157 placed in 'pc' to return to the caller. 16158 16159 Note that an insn pattern of '(return)' is logically equivalent to 16160 '(set (pc) (return))', but the latter form is never used. 16161 16162'(simple_return)' 16163 Like '(return)', but truly represents only a function return, while 16164 '(return)' may represent an insn that also performs other functions 16165 of the function epilogue. Like '(return)', this may also occur in 16166 conditional jumps. 16167 16168'(call FUNCTION NARGS)' 16169 Represents a function call. FUNCTION is a 'mem' expression whose 16170 address is the address of the function to be called. NARGS is an 16171 expression which can be used for two purposes: on some machines it 16172 represents the number of bytes of stack argument; on others, it 16173 represents the number of argument registers. 16174 16175 Each machine has a standard machine mode which FUNCTION must have. 16176 The machine description defines macro 'FUNCTION_MODE' to expand 16177 into the requisite mode name. The purpose of this mode is to 16178 specify what kind of addressing is allowed, on machines where the 16179 allowed kinds of addressing depend on the machine mode being 16180 addressed. 16181 16182'(clobber X)' 16183 Represents the storing or possible storing of an unpredictable, 16184 undescribed value into X, which must be a 'reg', 'scratch', 16185 'parallel' or 'mem' expression. 16186 16187 One place this is used is in string instructions that store 16188 standard values into particular hard registers. It may not be 16189 worth the trouble to describe the values that are stored, but it is 16190 essential to inform the compiler that the registers will be 16191 altered, lest it attempt to keep data in them across the string 16192 instruction. 16193 16194 If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it 16195 means that all memory locations must be presumed clobbered. If X 16196 is a 'parallel', it has the same meaning as a 'parallel' in a 'set' 16197 expression. 16198 16199 Note that the machine description classifies certain hard registers 16200 as "call-clobbered". All function call instructions are assumed by 16201 default to clobber these registers, so there is no need to use 16202 'clobber' expressions to indicate this fact. Also, each function 16203 call is assumed to have the potential to alter any memory location, 16204 unless the function is declared 'const'. 16205 16206 If the last group of expressions in a 'parallel' are each a 16207 'clobber' expression whose arguments are 'reg' or 'match_scratch' 16208 (*note RTL Template::) expressions, the combiner phase can add the 16209 appropriate 'clobber' expressions to an insn it has constructed 16210 when doing so will cause a pattern to be matched. 16211 16212 This feature can be used, for example, on a machine that whose 16213 multiply and add instructions don't use an MQ register but which 16214 has an add-accumulate instruction that does clobber the MQ 16215 register. Similarly, a combined instruction might require a 16216 temporary register while the constituent instructions might not. 16217 16218 When a 'clobber' expression for a register appears inside a 16219 'parallel' with other side effects, the register allocator 16220 guarantees that the register is unoccupied both before and after 16221 that insn if it is a hard register clobber. For pseudo-register 16222 clobber, the register allocator and the reload pass do not assign 16223 the same hard register to the clobber and the input operands if 16224 there is an insn alternative containing the '&' constraint (*note 16225 Modifiers::) for the clobber and the hard register is in register 16226 classes of the clobber in the alternative. You can clobber either 16227 a specific hard register, a pseudo register, or a 'scratch' 16228 expression; in the latter two cases, GCC will allocate a hard 16229 register that is available there for use as a temporary. 16230 16231 For instructions that require a temporary register, you should use 16232 'scratch' instead of a pseudo-register because this will allow the 16233 combiner phase to add the 'clobber' when required. You do this by 16234 coding ('clobber' ('match_scratch' ...)). If you do clobber a 16235 pseudo register, use one which appears nowhere else--generate a new 16236 one each time. Otherwise, you may confuse CSE. 16237 16238 There is one other known use for clobbering a pseudo register in a 16239 'parallel': when one of the input operands of the insn is also 16240 clobbered by the insn. In this case, using the same pseudo 16241 register in the clobber and elsewhere in the insn produces the 16242 expected results. 16243 16244'(use X)' 16245 Represents the use of the value of X. It indicates that the value 16246 in X at this point in the program is needed, even though it may not 16247 be apparent why this is so. Therefore, the compiler will not 16248 attempt to delete previous instructions whose only effect is to 16249 store a value in X. X must be a 'reg' expression. 16250 16251 In some situations, it may be tempting to add a 'use' of a register 16252 in a 'parallel' to describe a situation where the value of a 16253 special register will modify the behavior of the instruction. A 16254 hypothetical example might be a pattern for an addition that can 16255 either wrap around or use saturating addition depending on the 16256 value of a special control register: 16257 16258 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 16259 (reg:SI 4)] 0)) 16260 (use (reg:SI 1))]) 16261 16262 16263 This will not work, several of the optimizers only look at 16264 expressions locally; it is very likely that if you have multiple 16265 insns with identical inputs to the 'unspec', they will be optimized 16266 away even if register 1 changes in between. 16267 16268 This means that 'use' can _only_ be used to describe that the 16269 register is live. You should think twice before adding 'use' 16270 statements, more often you will want to use 'unspec' instead. The 16271 'use' RTX is most commonly useful to describe that a fixed register 16272 is implicitly used in an insn. It is also safe to use in patterns 16273 where the compiler knows for other reasons that the result of the 16274 whole pattern is variable, such as 'movmemM' or 'call' patterns. 16275 16276 During the reload phase, an insn that has a 'use' as pattern can 16277 carry a reg_equal note. These 'use' insns will be deleted before 16278 the reload phase exits. 16279 16280 During the delayed branch scheduling phase, X may be an insn. This 16281 indicates that X previously was located at this place in the code 16282 and its data dependencies need to be taken into account. These 16283 'use' insns will be deleted before the delayed branch scheduling 16284 phase exits. 16285 16286'(parallel [X0 X1 ...])' 16287 Represents several side effects performed in parallel. The square 16288 brackets stand for a vector; the operand of 'parallel' is a vector 16289 of expressions. X0, X1 and so on are individual side effect 16290 expressions--expressions of code 'set', 'call', 'return', 16291 'simple_return', 'clobber' or 'use'. 16292 16293 "In parallel" means that first all the values used in the 16294 individual side-effects are computed, and second all the actual 16295 side-effects are performed. For example, 16296 16297 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 16298 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 16299 16300 says unambiguously that the values of hard register 1 and the 16301 memory location addressed by it are interchanged. In both places 16302 where '(reg:SI 1)' appears as a memory address it refers to the 16303 value in register 1 _before_ the execution of the insn. 16304 16305 It follows that it is _incorrect_ to use 'parallel' and expect the 16306 result of one 'set' to be available for the next one. For example, 16307 people sometimes attempt to represent a jump-if-zero instruction 16308 this way: 16309 16310 (parallel [(set (cc0) (reg:SI 34)) 16311 (set (pc) (if_then_else 16312 (eq (cc0) (const_int 0)) 16313 (label_ref ...) 16314 (pc)))]) 16315 16316 But this is incorrect, because it says that the jump condition 16317 depends on the condition code value _before_ this instruction, not 16318 on the new value that is set by this instruction. 16319 16320 Peephole optimization, which takes place together with final 16321 assembly code output, can produce insns whose patterns consist of a 16322 'parallel' whose elements are the operands needed to output the 16323 resulting assembler code--often 'reg', 'mem' or constant 16324 expressions. This would not be well-formed RTL at any other stage 16325 in compilation, but it is OK then because no further optimization 16326 remains to be done. However, the definition of the macro 16327 'NOTICE_UPDATE_CC', if any, must deal with such insns if you define 16328 any peephole optimizations. 16329 16330'(cond_exec [COND EXPR])' 16331 Represents a conditionally executed expression. The EXPR is 16332 executed only if the COND is nonzero. The COND expression must not 16333 have side-effects, but the EXPR may very well have side-effects. 16334 16335'(sequence [INSNS ...])' 16336 Represents a sequence of insns. If a 'sequence' appears in the 16337 chain of insns, then each of the INSNS that appears in the sequence 16338 must be suitable for appearing in the chain of insns, i.e. must 16339 satisfy the 'INSN_P' predicate. 16340 16341 After delay-slot scheduling is completed, an insn and all the insns 16342 that reside in its delay slots are grouped together into a 16343 'sequence'. The insn requiring the delay slot is the first insn in 16344 the vector; subsequent insns are to be placed in the delay slot. 16345 16346 'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 16347 indicate that a branch insn should be used that will conditionally 16348 annul the effect of the insns in the delay slots. In such a case, 16349 'INSN_FROM_TARGET_P' indicates that the insn is from the target of 16350 the branch and should be executed only if the branch is taken; 16351 otherwise the insn should be executed only if the branch is not 16352 taken. *Note Delay Slots::. 16353 16354 Some back ends also use 'sequence' objects for purposes other than 16355 delay-slot groups. This is not supported in the common parts of 16356 the compiler, which treat such sequences as delay-slot groups. 16357 16358 DWARF2 Call Frame Address (CFA) adjustments are sometimes also 16359 expressed using 'sequence' objects as the value of a 16360 'RTX_FRAME_RELATED_P' note. This only happens if the CFA 16361 adjustments cannot be easily derived from the pattern of the 16362 instruction to which the note is attached. In such cases, the 16363 value of the note is used instead of best-guesing the semantics of 16364 the instruction. The back end can attach notes containing a 16365 'sequence' of 'set' patterns that express the effect of the parent 16366 instruction. 16367 16368 These expression codes appear in place of a side effect, as the body of 16369an insn, though strictly speaking they do not always describe side 16370effects as such: 16371 16372'(asm_input S)' 16373 Represents literal assembler code as described by the string S. 16374 16375'(unspec [OPERANDS ...] INDEX)' 16376'(unspec_volatile [OPERANDS ...] INDEX)' 16377 Represents a machine-specific operation on OPERANDS. INDEX selects 16378 between multiple machine-specific operations. 'unspec_volatile' is 16379 used for volatile operations and operations that may trap; 'unspec' 16380 is used for other operations. 16381 16382 These codes may appear inside a 'pattern' of an insn, inside a 16383 'parallel', or inside an expression. 16384 16385'(addr_vec:M [LR0 LR1 ...])' 16386 Represents a table of jump addresses. The vector elements LR0, 16387 etc., are 'label_ref' expressions. The mode M specifies how much 16388 space is given to each address; normally M would be 'Pmode'. 16389 16390'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 16391 Represents a table of jump addresses expressed as offsets from 16392 BASE. The vector elements LR0, etc., are 'label_ref' expressions 16393 and so is BASE. The mode M specifies how much space is given to 16394 each address-difference. MIN and MAX are set up by branch 16395 shortening and hold a label with a minimum and a maximum address, 16396 respectively. FLAGS indicates the relative position of BASE, MIN 16397 and MAX to the containing insn and of MIN and MAX to BASE. See 16398 rtl.def for details. 16399 16400'(prefetch:M ADDR RW LOCALITY)' 16401 Represents prefetch of memory at address ADDR. Operand RW is 1 if 16402 the prefetch is for data to be written, 0 otherwise; targets that 16403 do not support write prefetches should treat this as a normal 16404 prefetch. Operand LOCALITY specifies the amount of temporal 16405 locality; 0 if there is none or 1, 2, or 3 for increasing levels of 16406 temporal locality; targets that do not support locality hints 16407 should ignore this. 16408 16409 This insn is used to minimize cache-miss latency by moving data 16410 into a cache before it is accessed. It should use only 16411 non-faulting data prefetch instructions. 16412 16413 16414File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 16415 1641613.16 Embedded Side-Effects on Addresses 16417======================================== 16418 16419Six special side-effect expression codes appear as memory addresses. 16420 16421'(pre_dec:M X)' 16422 Represents the side effect of decrementing X by a standard amount 16423 and represents also the value that X has after being decremented. 16424 X must be a 'reg' or 'mem', but most machines allow only a 'reg'. 16425 M must be the machine mode for pointers on the machine in use. The 16426 amount X is decremented by is the length in bytes of the machine 16427 mode of the containing memory reference of which this expression 16428 serves as the address. Here is an example of its use: 16429 16430 (mem:DF (pre_dec:SI (reg:SI 39))) 16431 16432 This says to decrement pseudo register 39 by the length of a 16433 'DFmode' value and use the result to address a 'DFmode' value. 16434 16435'(pre_inc:M X)' 16436 Similar, but specifies incrementing X instead of decrementing it. 16437 16438'(post_dec:M X)' 16439 Represents the same side effect as 'pre_dec' but a different value. 16440 The value represented here is the value X has before being 16441 decremented. 16442 16443'(post_inc:M X)' 16444 Similar, but specifies incrementing X instead of decrementing it. 16445 16446'(post_modify:M X Y)' 16447 16448 Represents the side effect of setting X to Y and represents X 16449 before X is modified. X must be a 'reg' or 'mem', but most 16450 machines allow only a 'reg'. M must be the machine mode for 16451 pointers on the machine in use. 16452 16453 The expression Y must be one of three forms: '(plus:M X Z)', 16454 '(minus:M X Z)', or '(plus:M X I)', where Z is an index register 16455 and I is a constant. 16456 16457 Here is an example of its use: 16458 16459 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 16460 (reg:SI 48)))) 16461 16462 This says to modify pseudo register 42 by adding the contents of 16463 pseudo register 48 to it, after the use of what ever 42 points to. 16464 16465'(pre_modify:M X EXPR)' 16466 Similar except side effects happen before the use. 16467 16468 These embedded side effect expressions must be used with care. 16469Instruction patterns may not use them. Until the 'flow' pass of the 16470compiler, they may occur only to represent pushes onto the stack. The 16471'flow' pass finds cases where registers are incremented or decremented 16472in one instruction and used as an address shortly before or after; these 16473cases are then transformed to use pre- or post-increment or -decrement. 16474 16475 If a register used as the operand of these expressions is used in 16476another address in an insn, the original value of the register is used. 16477Uses of the register outside of an address are not permitted within the 16478same insn as a use in an embedded side effect expression because such 16479insns behave differently on different machines and hence must be treated 16480as ambiguous and disallowed. 16481 16482 An instruction that can be represented with an embedded side effect 16483could also be represented using 'parallel' containing an additional 16484'set' to describe how the address register is altered. This is not done 16485because machines that allow these operations at all typically allow them 16486wherever a memory address is called for. Describing them as additional 16487parallel stores would require doubling the number of entries in the 16488machine description. 16489 16490 16491File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 16492 1649313.17 Assembler Instructions as Expressions 16494=========================================== 16495 16496The RTX code 'asm_operands' represents a value produced by a 16497user-specified assembler instruction. It is used to represent an 'asm' 16498statement with arguments. An 'asm' statement with a single output 16499operand, like this: 16500 16501 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 16502 16503is represented using a single 'asm_operands' RTX which represents the 16504value that is stored in 'outputvar': 16505 16506 (set RTX-FOR-OUTPUTVAR 16507 (asm_operands "foo %1,%2,%0" "a" 0 16508 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 16509 [(asm_input:M1 "g") 16510 (asm_input:M2 "di")])) 16511 16512Here the operands of the 'asm_operands' RTX are the assembler template 16513string, the output-operand's constraint, the index-number of the output 16514operand among the output operands specified, a vector of input operand 16515RTX's, and a vector of input-operand modes and constraints. The mode M1 16516is the mode of the sum 'x+y'; M2 is that of '*z'. 16517 16518 When an 'asm' statement has multiple output values, its insn has 16519several such 'set' RTX's inside of a 'parallel'. Each 'set' contains an 16520'asm_operands'; all of these share the same assembler template and 16521vectors, but each contains the constraint for the respective output 16522operand. They are also distinguished by the output-operand index 16523number, which is 0, 1, ... for successive output operands. 16524 16525 16526File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 16527 1652813.18 Variable Location Debug Information in RTL 16529================================================ 16530 16531Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to 16532determine what user variables memory and register references refer to. 16533 16534 Variable tracking at assignments uses these notes only when they refer 16535to variables that live at fixed locations (e.g., addressable variables, 16536global non-automatic variables). For variables whose location may vary, 16537it relies on the following types of notes. 16538 16539'(var_location:MODE VAR EXP STAT)' 16540 Binds variable 'var', a tree, to value EXP, an RTL expression. It 16541 appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with 16542 slightly different meanings. MODE, if present, represents the mode 16543 of EXP, which is useful if it is a modeless expression. STAT is 16544 only meaningful in notes, indicating whether the variable is known 16545 to be initialized or uninitialized. 16546 16547'(debug_expr:MODE DECL)' 16548 Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that 16549 points back to it, within value expressions in 'VAR_LOCATION' 16550 nodes. 16551 16552 16553File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 16554 1655513.19 Insns 16556=========== 16557 16558The RTL representation of the code for a function is a doubly-linked 16559chain of objects called "insns". Insns are expressions with special 16560codes that are used for no other purpose. Some insns are actual 16561instructions; others represent dispatch tables for 'switch' statements; 16562others represent labels to jump to or various sorts of declarative 16563information. 16564 16565 In addition to its own specific data, each insn must have a unique 16566id-number that distinguishes it from all other insns in the current 16567function (after delayed branch scheduling, copies of an insn with the 16568same id-number may be present in multiple places in a function, but 16569these copies will always be identical and will only appear inside a 16570'sequence'), and chain pointers to the preceding and following insns. 16571These three fields occupy the same position in every insn, independent 16572of the expression code of the insn. They could be accessed with 'XEXP' 16573and 'XINT', but instead three special macros are always used: 16574 16575'INSN_UID (I)' 16576 Accesses the unique id of insn I. 16577 16578'PREV_INSN (I)' 16579 Accesses the chain pointer to the insn preceding I. If I is the 16580 first insn, this is a null pointer. 16581 16582'NEXT_INSN (I)' 16583 Accesses the chain pointer to the insn following I. If I is the 16584 last insn, this is a null pointer. 16585 16586 The first insn in the chain is obtained by calling 'get_insns'; the 16587last insn is the result of calling 'get_last_insn'. Within the chain 16588delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must 16589always correspond: if INSN is not the first insn, 16590 16591 NEXT_INSN (PREV_INSN (INSN)) == INSN 16592 16593is always true and if INSN is not the last insn, 16594 16595 PREV_INSN (NEXT_INSN (INSN)) == INSN 16596 16597is always true. 16598 16599 After delay slot scheduling, some of the insns in the chain might be 16600'sequence' expressions, which contain a vector of insns. The value of 16601'NEXT_INSN' in all but the last of these insns is the next insn in the 16602vector; the value of 'NEXT_INSN' of the last insn in the vector is the 16603same as the value of 'NEXT_INSN' for the 'sequence' in which it is 16604contained. Similar rules apply for 'PREV_INSN'. 16605 16606 This means that the above invariants are not necessarily true for insns 16607inside 'sequence' expressions. Specifically, if INSN is the first insn 16608in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing 16609the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN 16610(INSN))' if INSN is the last insn in the 'sequence' expression. You can 16611use these expressions to find the containing 'sequence' expression. 16612 16613 Every insn has one of the following expression codes: 16614 16615'insn' 16616 The expression code 'insn' is used for instructions that do not 16617 jump and do not do function calls. 'sequence' expressions are 16618 always contained in insns with code 'insn' even if one of those 16619 insns should jump or do function calls. 16620 16621 Insns with code 'insn' have four additional fields beyond the three 16622 mandatory ones listed above. These four are described in a table 16623 below. 16624 16625'jump_insn' 16626 The expression code 'jump_insn' is used for instructions that may 16627 jump (or, more generally, may contain 'label_ref' expressions to 16628 which 'pc' can be set in that instruction). If there is an 16629 instruction to return from the current function, it is recorded as 16630 a 'jump_insn'. 16631 16632 'jump_insn' insns have the same extra fields as 'insn' insns, 16633 accessed in the same way and in addition contain a field 16634 'JUMP_LABEL' which is defined once jump optimization has completed. 16635 16636 For simple conditional and unconditional jumps, this field contains 16637 the 'code_label' to which this insn will (possibly conditionally) 16638 branch. In a more complex jump, 'JUMP_LABEL' records one of the 16639 labels that the insn refers to; other jump target labels are 16640 recorded as 'REG_LABEL_TARGET' notes. The exception is 'addr_vec' 16641 and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only 16642 way to find the labels is to scan the entire body of the insn. 16643 16644 Return insns count as jumps, but their 'JUMP_LABEL' is 'RETURN' or 16645 'SIMPLE_RETURN'. 16646 16647'call_insn' 16648 The expression code 'call_insn' is used for instructions that may 16649 do function calls. It is important to distinguish these 16650 instructions because they imply that certain registers and memory 16651 locations may be altered unpredictably. 16652 16653 'call_insn' insns have the same extra fields as 'insn' insns, 16654 accessed in the same way and in addition contain a field 16655 'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 16656 'expr_list' expressions) containing 'use', 'clobber' and sometimes 16657 'set' expressions that denote hard registers and 'mem's used or 16658 clobbered by the called function. 16659 16660 A 'mem' generally points to a stack slot in which arguments passed 16661 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 16662 Register Arguments.) are stored. If the argument is caller-copied 16663 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 16664 will be mentioned in 'clobber' and 'use' entries; if it's 16665 callee-copied, only a 'use' will appear, and the 'mem' may point to 16666 addresses that are not stack slots. 16667 16668 Registers occurring inside a 'clobber' in this list augment 16669 registers specified in 'CALL_USED_REGISTERS' (*note Register 16670 Basics::). 16671 16672 If the list contains a 'set' involving two registers, it indicates 16673 that the function returns one of its arguments. Such a 'set' may 16674 look like a no-op if the same register holds the argument and the 16675 return value. 16676 16677'code_label' 16678 A 'code_label' insn represents a label that a jump insn can jump 16679 to. It contains two special fields of data in addition to the 16680 three standard ones. 'CODE_LABEL_NUMBER' is used to hold the 16681 "label number", a number that identifies this label uniquely among 16682 all the labels in the compilation (not just in the current 16683 function). Ultimately, the label is represented in the assembler 16684 output as an assembler label, usually of the form 'LN' where N is 16685 the label number. 16686 16687 When a 'code_label' appears in an RTL expression, it normally 16688 appears within a 'label_ref' which represents the address of the 16689 label, as a number. 16690 16691 Besides as a 'code_label', a label can also be represented as a 16692 'note' of type 'NOTE_INSN_DELETED_LABEL'. 16693 16694 The field 'LABEL_NUSES' is only defined once the jump optimization 16695 phase is completed. It contains the number of times this label is 16696 referenced in the current function. 16697 16698 The field 'LABEL_KIND' differentiates four different types of 16699 labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY', 16700 and 'LABEL_WEAK_ENTRY'. The only labels that do not have type 16701 'LABEL_NORMAL' are "alternate entry points" to the current 16702 function. These may be static (visible only in the containing 16703 translation unit), global (exposed to all translation units), or 16704 weak (global, but can be overridden by another symbol with the same 16705 name). 16706 16707 Much of the compiler treats all four kinds of label identically. 16708 Some of it needs to know whether or not a label is an alternate 16709 entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is 16710 provided. It is equivalent to testing whether 'LABEL_KIND (label) 16711 == LABEL_NORMAL'. The only place that cares about the distinction 16712 between static, global, and weak alternate entry points, besides 16713 the front-end code that creates them, is the function 16714 'output_alternate_entry_point', in 'final.c'. 16715 16716 To set the kind of a label, use the 'SET_LABEL_KIND' macro. 16717 16718'jump_table_data' 16719 A 'jump_table_data' insn is a placeholder for the jump-table data 16720 of a 'casesi' or 'tablejump' insn. They are placed after a 16721 'tablejump_p' insn. A 'jump_table_data' insn is not part o a basic 16722 blockm but it is associated with the basic block that ends with the 16723 'tablejump_p' insn. The 'PATTERN' of a 'jump_table_data' is always 16724 either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data' 16725 insn is always preceded by a 'code_label'. The 'tablejump_p' insn 16726 refers to that 'code_label' via its 'JUMP_LABEL'. 16727 16728'barrier' 16729 Barriers are placed in the instruction stream when control cannot 16730 flow past them. They are placed after unconditional jump 16731 instructions to indicate that the jumps are unconditional and after 16732 calls to 'volatile' functions, which do not return (e.g., 'exit'). 16733 They contain no information beyond the three standard fields. 16734 16735'note' 16736 'note' insns are used to represent additional debugging and 16737 declarative information. They contain two nonstandard fields, an 16738 integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a 16739 string accessed with 'NOTE_SOURCE_FILE'. 16740 16741 If 'NOTE_LINE_NUMBER' is positive, the note represents the position 16742 of a source line and 'NOTE_SOURCE_FILE' is the source file name 16743 that the line came from. These notes control generation of line 16744 number data in the assembler output. 16745 16746 Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a 16747 code with one of the following values (and 'NOTE_SOURCE_FILE' must 16748 contain a null pointer): 16749 16750 'NOTE_INSN_DELETED' 16751 Such a note is completely ignorable. Some passes of the 16752 compiler delete insns by altering them into notes of this 16753 kind. 16754 16755 'NOTE_INSN_DELETED_LABEL' 16756 This marks what used to be a 'code_label', but was not used 16757 for other purposes than taking its address and was transformed 16758 to mark that no code jumps to it. 16759 16760 'NOTE_INSN_BLOCK_BEG' 16761 'NOTE_INSN_BLOCK_END' 16762 These types of notes indicate the position of the beginning 16763 and end of a level of scoping of variable names. They control 16764 the output of debugging information. 16765 16766 'NOTE_INSN_EH_REGION_BEG' 16767 'NOTE_INSN_EH_REGION_END' 16768 These types of notes indicate the position of the beginning 16769 and end of a level of scoping for exception handling. 16770 'NOTE_EH_HANDLER' identifies which region is associated with 16771 these notes. 16772 16773 'NOTE_INSN_FUNCTION_BEG' 16774 Appears at the start of the function body, after the function 16775 prologue. 16776 16777 'NOTE_INSN_VAR_LOCATION' 16778 This note is used to generate variable location debugging 16779 information. It indicates that the user variable in its 16780 'VAR_LOCATION' operand is at the location given in the RTL 16781 expression, or holds a value that can be computed by 16782 evaluating the RTL expression from that static point in the 16783 program up to the next such note for the same user variable. 16784 16785 These codes are printed symbolically when they appear in debugging 16786 dumps. 16787 16788'debug_insn' 16789 The expression code 'debug_insn' is used for pseudo-instructions 16790 that hold debugging information for variable tracking at 16791 assignments (see '-fvar-tracking-assignments' option). They are 16792 the RTL representation of 'GIMPLE_DEBUG' statements (*note 16793 GIMPLE_DEBUG::), with a 'VAR_LOCATION' operand that binds a user 16794 variable tree to an RTL representation of the 'value' in the 16795 corresponding statement. A 'DEBUG_EXPR' in it stands for the value 16796 bound to the corresponding 'DEBUG_EXPR_DECL'. 16797 16798 Throughout optimization passes, binding information is kept in 16799 pseudo-instruction form, so that, unlike notes, it gets the same 16800 treatment and adjustments that regular instructions would. It is 16801 the variable tracking pass that turns these pseudo-instructions 16802 into var location notes, analyzing control flow, value equivalences 16803 and changes to registers and memory referenced in value 16804 expressions, propagating the values of debug temporaries and 16805 determining expressions that can be used to compute the value of 16806 each user variable at as many points (ranges, actually) in the 16807 program as possible. 16808 16809 Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an 16810 'INSN_VAR_LOCATION' denotes a value at that specific point in the 16811 program, rather than an expression that can be evaluated at any 16812 later point before an overriding 'VAR_LOCATION' is encountered. 16813 E.g., if a user variable is bound to a 'REG' and then a subsequent 16814 insn modifies the 'REG', the note location would keep mapping the 16815 user variable to the register across the insn, whereas the insn 16816 location would keep the variable bound to the value, so that the 16817 variable tracking pass would emit another location note for the 16818 variable at the point in which the register is modified. 16819 16820 The machine mode of an insn is normally 'VOIDmode', but some phases use 16821the mode for various purposes. 16822 16823 The common subexpression elimination pass sets the mode of an insn to 16824'QImode' when it is the first insn in a block that has already been 16825processed. 16826 16827 The second Haifa scheduling pass, for targets that can multiple issue, 16828sets the mode of an insn to 'TImode' when it is believed that the 16829instruction begins an issue group. That is, when the instruction cannot 16830issue simultaneously with the previous. This may be relied on by later 16831passes, in particular machine-dependent reorg. 16832 16833 Here is a table of the extra fields of 'insn', 'jump_insn' and 16834'call_insn' insns: 16835 16836'PATTERN (I)' 16837 An expression for the side effect performed by this insn. This 16838 must be one of the following codes: 'set', 'call', 'use', 16839 'clobber', 'return', 'simple_return', 'asm_input', 'asm_output', 16840 'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec', 16841 'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'. If it 16842 is a 'parallel', each element of the 'parallel' must be one these 16843 codes, except that 'parallel' expressions cannot be nested and 16844 'addr_vec' and 'addr_diff_vec' are not permitted inside a 16845 'parallel' expression. 16846 16847'INSN_CODE (I)' 16848 An integer that says which pattern in the machine description 16849 matches this insn, or -1 if the matching has not yet been 16850 attempted. 16851 16852 Such matching is never attempted and this field remains -1 on an 16853 insn whose pattern consists of a single 'use', 'clobber', 16854 'asm_input', 'addr_vec' or 'addr_diff_vec' expression. 16855 16856 Matching is also never attempted on insns that result from an 'asm' 16857 statement. These contain at least one 'asm_operands' expression. 16858 The function 'asm_noperands' returns a non-negative value for such 16859 insns. 16860 16861 In the debugging output, this field is printed as a number followed 16862 by a symbolic representation that locates the pattern in the 'md' 16863 file as some small positive or negative offset from a named 16864 pattern. 16865 16866'LOG_LINKS (I)' 16867 A list (chain of 'insn_list' expressions) giving information about 16868 dependencies between instructions within a basic block. Neither a 16869 jump nor a label may come between the related insns. These are 16870 only used by the schedulers and by combine. This is a deprecated 16871 data structure. Def-use and use-def chains are now preferred. 16872 16873'REG_NOTES (I)' 16874 A list (chain of 'expr_list', 'insn_list' and 'int_list' 16875 expressions) giving miscellaneous information about the insn. It 16876 is often information pertaining to the registers used in this insn. 16877 16878 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions. 16879Each of these has two operands: the first is an insn, and the second is 16880another 'insn_list' expression (the next one in the chain). The last 16881'insn_list' in the chain has a null pointer as second operand. The 16882significant thing about the chain is which insns appear in it (as first 16883operands of 'insn_list' expressions). Their order is not significant. 16884 16885 This list is originally set up by the flow analysis pass; it is a null 16886pointer until then. Flow only adds links for those data dependencies 16887which can be used for instruction combination. For each insn, the flow 16888analysis pass adds a link to insns which store into registers values 16889that are used for the first time in this insn. 16890 16891 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS' 16892field but it includes 'expr_list' and 'int_list' expressions in addition 16893to 'insn_list' expressions. There are several kinds of register notes, 16894which are distinguished by the machine mode, which in a register note is 16895really understood as being an 'enum reg_note'. The first operand OP of 16896the note is data whose meaning depends on the kind of note. 16897 16898 The macro 'REG_NOTE_KIND (X)' returns the kind of register note. Its 16899counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 16900register note type of X to be NEWKIND. 16901 16902 Register notes are of three classes: They may say something about an 16903input to an insn, they may say something about an output of an insn, or 16904they may create a linkage between two insns. There are also a set of 16905values that are only used in 'LOG_LINKS'. 16906 16907 These register notes annotate inputs to an insn: 16908 16909'REG_DEAD' 16910 The value in OP dies in this insn; that is to say, altering the 16911 value immediately after this insn would not affect the future 16912 behavior of the program. 16913 16914 It does not follow that the register OP has no useful value after 16915 this insn since OP is not necessarily modified by this insn. 16916 Rather, no subsequent instruction uses the contents of OP. 16917 16918'REG_UNUSED' 16919 The register OP being set by this insn will not be used in a 16920 subsequent insn. This differs from a 'REG_DEAD' note, which 16921 indicates that the value in an input will not be used subsequently. 16922 These two notes are independent; both may be present for the same 16923 register. 16924 16925'REG_INC' 16926 The register OP is incremented (or decremented; at this level there 16927 is no distinction) by an embedded side effect inside this insn. 16928 This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or 16929 'pre_dec' expression. 16930 16931'REG_NONNEG' 16932 The register OP is known to have a nonnegative value when this insn 16933 is reached. This is used so that decrement and branch until zero 16934 instructions, such as the m68k dbra, can be matched. 16935 16936 The 'REG_NONNEG' note is added to insns only if the machine 16937 description has a 'decrement_and_branch_until_zero' pattern. 16938 16939'REG_LABEL_OPERAND' 16940 This insn uses OP, a 'code_label' or a 'note' of type 16941 'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a 16942 'jump_insn' that refers to the operand as an ordinary operand. The 16943 label may still eventually be a jump target, but if so in an 16944 indirect jump in a subsequent insn. The presence of this note 16945 allows jump optimization to be aware that OP is, in fact, being 16946 used, and flow optimization to build an accurate flow graph. 16947 16948'REG_LABEL_TARGET' 16949 This insn is a 'jump_insn' but not an 'addr_vec' or 16950 'addr_diff_vec'. It uses OP, a 'code_label' as a direct or 16951 indirect jump target. Its purpose is similar to that of 16952 'REG_LABEL_OPERAND'. This note is only present if the insn has 16953 multiple targets; the last label in the insn (in the highest 16954 numbered insn-field) goes into the 'JUMP_LABEL' field and does not 16955 have a 'REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 16956 16957'REG_CROSSING_JUMP' 16958 This insn is a branching instruction (either an unconditional jump 16959 or an indirect jump) which crosses between hot and cold sections, 16960 which could potentially be very far apart in the executable. The 16961 presence of this note indicates to other optimizations that this 16962 branching instruction should not be "collapsed" into a simpler 16963 branching construct. It is used when the optimization to partition 16964 basic blocks into hot and cold sections is turned on. 16965 16966'REG_SETJMP' 16967 Appears attached to each 'CALL_INSN' to 'setjmp' or a related 16968 function. 16969 16970 The following notes describe attributes of outputs of an insn: 16971 16972'REG_EQUIV' 16973'REG_EQUAL' 16974 This note is only valid on an insn that sets only one register and 16975 indicates that that register will be equal to OP at run time; the 16976 scope of this equivalence differs between the two types of notes. 16977 The value which the insn explicitly copies into the register may 16978 look different from OP, but they will be equal at run time. If the 16979 output of the single 'set' is a 'strict_low_part' expression, the 16980 note refers to the register that is contained in 'SUBREG_REG' of 16981 the 'subreg' expression. 16982 16983 For 'REG_EQUIV', the register is equivalent to OP throughout the 16984 entire function, and could validly be replaced in all its 16985 occurrences by OP. ("Validly" here refers to the data flow of the 16986 program; simple replacement may make some insns invalid.) For 16987 example, when a constant is loaded into a register that is never 16988 assigned any other value, this kind of note is used. 16989 16990 When a parameter is copied into a pseudo-register at entry to a 16991 function, a note of this kind records that the register is 16992 equivalent to the stack slot where the parameter was passed. 16993 Although in this case the register may be set by other insns, it is 16994 still valid to replace the register by the stack slot throughout 16995 the function. 16996 16997 A 'REG_EQUIV' note is also used on an instruction which copies a 16998 register parameter into a pseudo-register at entry to a function, 16999 if there is a stack slot where that parameter could be stored. 17000 Although other insns may set the pseudo-register, it is valid for 17001 the compiler to replace the pseudo-register by stack slot 17002 throughout the function, provided the compiler ensures that the 17003 stack slot is properly initialized by making the replacement in the 17004 initial copy instruction as well. This is used on machines for 17005 which the calling convention allocates stack space for register 17006 parameters. See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::. 17007 17008 In the case of 'REG_EQUAL', the register that is set by this insn 17009 will be equal to OP at run time at the end of this insn but not 17010 necessarily elsewhere in the function. In this case, OP is 17011 typically an arithmetic expression. For example, when a sequence 17012 of insns such as a library call is used to perform an arithmetic 17013 operation, this kind of note is attached to the insn that produces 17014 or copies the final value. 17015 17016 These two notes are used in different ways by the compiler passes. 17017 'REG_EQUAL' is used by passes prior to register allocation (such as 17018 common subexpression elimination and loop optimization) to tell 17019 them how to think of that value. 'REG_EQUIV' notes are used by 17020 register allocation to indicate that there is an available 17021 substitute expression (either a constant or a 'mem' expression for 17022 the location of a parameter on the stack) that may be used in place 17023 of a register if insufficient registers are available. 17024 17025 Except for stack homes for parameters, which are indicated by a 17026 'REG_EQUIV' note and are not useful to the early optimization 17027 passes and pseudo registers that are equivalent to a memory 17028 location throughout their entire life, which is not detected until 17029 later in the compilation, all equivalences are initially indicated 17030 by an attached 'REG_EQUAL' note. In the early stages of register 17031 allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note 17032 if OP is a constant and the insn represents the only set of its 17033 destination register. 17034 17035 Thus, compiler passes prior to register allocation need only check 17036 for 'REG_EQUAL' notes and passes subsequent to register allocation 17037 need only check for 'REG_EQUIV' notes. 17038 17039 These notes describe linkages between insns. They occur in pairs: one 17040insn has one of a pair of notes that points to a second insn, which has 17041the inverse note pointing back to the first insn. 17042 17043'REG_CC_SETTER' 17044'REG_CC_USER' 17045 On machines that use 'cc0', the insns which set and use 'cc0' set 17046 and use 'cc0' are adjacent. However, when branch delay slot 17047 filling is done, this may no longer be true. In this case a 17048 'REG_CC_USER' note will be placed on the insn setting 'cc0' to 17049 point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be 17050 placed on the insn using 'cc0' to point to the insn setting 'cc0'. 17051 17052 These values are only used in the 'LOG_LINKS' field, and indicate the 17053type of dependency that each link represents. Links which indicate a 17054data dependence (a read after write dependence) do not use any code, 17055they simply have mode 'VOIDmode', and are printed without any 17056descriptive text. 17057 17058'REG_DEP_TRUE' 17059 This indicates a true dependence (a read after write dependence). 17060 17061'REG_DEP_OUTPUT' 17062 This indicates an output dependence (a write after write 17063 dependence). 17064 17065'REG_DEP_ANTI' 17066 This indicates an anti dependence (a write after read dependence). 17067 17068 These notes describe information gathered from gcov profile data. They 17069are stored in the 'REG_NOTES' field of an insn. 17070 17071'REG_BR_PROB' 17072 This is used to specify the ratio of branches to non-branches of a 17073 branch insn according to the profile data. The note is represented 17074 as an 'int_list' expression whose integer value is between 0 and 17075 REG_BR_PROB_BASE. Larger values indicate a higher probability that 17076 the branch will be taken. 17077 17078'REG_BR_PRED' 17079 These notes are found in JUMP insns after delayed branch scheduling 17080 has taken place. They indicate both the direction and the 17081 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 17082 values. 17083 17084'REG_FRAME_RELATED_EXPR' 17085 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 17086 expression is used in place of the actual insn pattern. This is 17087 done in cases where the pattern is either complex or misleading. 17088 17089 For convenience, the machine mode in an 'insn_list' or 'expr_list' is 17090printed using these symbolic codes in debugging dumps. 17091 17092 The only difference between the expression codes 'insn_list' and 17093'expr_list' is that the first operand of an 'insn_list' is assumed to be 17094an insn and is printed in debugging dumps as the insn's unique id; the 17095first operand of an 'expr_list' is printed in the ordinary way as an 17096expression. 17097 17098 17099File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 17100 1710113.20 RTL Representation of Function-Call Insns 17102=============================================== 17103 17104Insns that call subroutines have the RTL expression code 'call_insn'. 17105These insns must satisfy special rules, and their bodies must use a 17106special RTL expression code, 'call'. 17107 17108 A 'call' expression has two operands, as follows: 17109 17110 (call (mem:FM ADDR) NBYTES) 17111 17112Here NBYTES is an operand that represents the number of bytes of 17113argument data being passed to the subroutine, FM is a machine mode 17114(which must equal as the definition of the 'FUNCTION_MODE' macro in the 17115machine description) and ADDR represents the address of the subroutine. 17116 17117 For a subroutine that returns no value, the 'call' expression as shown 17118above is the entire body of the insn, except that the insn might also 17119contain 'use' or 'clobber' expressions. 17120 17121 For a subroutine that returns a value whose mode is not 'BLKmode', the 17122value is returned in a hard register. If this register's number is R, 17123then the body of the call insn looks like this: 17124 17125 (set (reg:M R) 17126 (call (mem:FM ADDR) NBYTES)) 17127 17128This RTL expression makes it clear (to the optimizer passes) that the 17129appropriate register receives a useful value in this insn. 17130 17131 When a subroutine returns a 'BLKmode' value, it is handled by passing 17132to the subroutine the address of a place to store the value. So the 17133call insn itself does not "return" any value, and it has the same RTL 17134form as a call that returns nothing. 17135 17136 On some machines, the call instruction itself clobbers some register, 17137for example to contain the return address. 'call_insn' insns on these 17138machines should have a body which is a 'parallel' that contains both the 17139'call' expression and 'clobber' expressions that indicate which 17140registers are destroyed. Similarly, if the call instruction requires 17141some register other than the stack pointer that is not explicitly 17142mentioned in its RTL, a 'use' subexpression should mention that 17143register. 17144 17145 Functions that are called are assumed to modify all registers listed in 17146the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::) 17147and, with the exception of 'const' functions and library calls, to 17148modify all of memory. 17149 17150 Insns containing just 'use' expressions directly precede the 17151'call_insn' insn to indicate which registers contain inputs to the 17152function. Similarly, if registers other than those in 17153'CALL_USED_REGISTERS' are clobbered by the called function, insns 17154containing a single 'clobber' follow immediately after the call to 17155indicate which registers. 17156 17157 17158File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 17159 1716013.21 Structure Sharing Assumptions 17161=================================== 17162 17163The compiler assumes that certain kinds of RTL expressions are unique; 17164there do not exist two distinct objects representing the same value. In 17165other cases, it makes an opposite assumption: that no RTL expression 17166object of a certain kind appears in more than one place in the 17167containing structure. 17168 17169 These assumptions refer to a single function; except for the RTL 17170objects that describe global variables and external functions, and a few 17171standard objects such as small integer constants, no RTL objects are 17172common to two functions. 17173 17174 * Each pseudo-register has only a single 'reg' object to represent 17175 it, and therefore only a single machine mode. 17176 17177 * For any symbolic label, there is only one 'symbol_ref' object 17178 referring to it. 17179 17180 * All 'const_int' expressions with equal values are shared. 17181 17182 * There is only one 'pc' expression. 17183 17184 * There is only one 'cc0' expression. 17185 17186 * There is only one 'const_double' expression with value 0 for each 17187 floating point mode. Likewise for values 1 and 2. 17188 17189 * There is only one 'const_vector' expression with value 0 for each 17190 vector mode, be it an integer or a double constant vector. 17191 17192 * No 'label_ref' or 'scratch' appears in more than one place in the 17193 RTL structure; in other words, it is safe to do a tree-walk of all 17194 the insns in the function and assume that each time a 'label_ref' 17195 or 'scratch' is seen it is distinct from all others that are seen. 17196 17197 * Only one 'mem' object is normally created for each static variable 17198 or stack slot, so these objects are frequently shared in all the 17199 places they appear. However, separate but equal objects for these 17200 variables are occasionally made. 17201 17202 * When a single 'asm' statement has multiple output operands, a 17203 distinct 'asm_operands' expression is made for each output operand. 17204 However, these all share the vector which contains the sequence of 17205 input operands. This sharing is used later on to test whether two 17206 'asm_operands' expressions come from the same statement, so all 17207 optimizations must carefully preserve the sharing if they copy the 17208 vector at all. 17209 17210 * No RTL object appears in more than one place in the RTL structure 17211 except as described above. Many passes of the compiler rely on 17212 this by assuming that they can modify RTL objects in place without 17213 unwanted side-effects on other insns. 17214 17215 * During initial RTL generation, shared structure is freely 17216 introduced. After all the RTL for a function has been generated, 17217 all shared structure is copied by 'unshare_all_rtl' in 17218 'emit-rtl.c', after which the above rules are guaranteed to be 17219 followed. 17220 17221 * During the combiner pass, shared structure within an insn can exist 17222 temporarily. However, the shared structure is copied before the 17223 combiner is finished with the insn. This is done by calling 17224 'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'. 17225 17226 17227File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 17228 1722913.22 Reading RTL 17230================= 17231 17232To read an RTL object from a file, call 'read_rtx'. It takes one 17233argument, a stdio stream, and returns a single RTL object. This routine 17234is defined in 'read-rtl.c'. It is not available in the compiler itself, 17235only the various programs that generate the compiler back end from the 17236machine description. 17237 17238 People frequently have the idea of using RTL stored as text in a file 17239as an interface between a language front end and the bulk of GCC. This 17240idea is not feasible. 17241 17242 GCC was designed to use RTL internally only. Correct RTL for a given 17243program is very dependent on the particular target machine. And the RTL 17244does not contain all the information about the program. 17245 17246 The proper way to interface GCC to a new language front end is with the 17247"tree" data structure, described in the files 'tree.h' and 'tree.def'. 17248The documentation for this structure (*note GENERIC::) is incomplete. 17249 17250 17251File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top 17252 1725314 Control Flow Graph 17254********************* 17255 17256A control flow graph (CFG) is a data structure built on top of the 17257intermediate code representation (the RTL or 'GIMPLE' instruction 17258stream) abstracting the control flow behavior of a function that is 17259being compiled. The CFG is a directed graph where the vertices 17260represent basic blocks and edges represent possible transfer of control 17261flow from one basic block to another. The data structures used to 17262represent the control flow graph are defined in 'basic-block.h'. 17263 17264 In GCC, the representation of control flow is maintained throughout the 17265compilation process, from constructing the CFG early in 'pass_build_cfg' 17266to 'pass_free_cfg' (see 'passes.def'). The CFG takes various different 17267modes and may undergo extensive manipulations, but the graph is always 17268valid between its construction and its release. This way, transfer of 17269information such as data flow, a measured profile, or the loop tree, can 17270be propagated through the passes pipeline, and even from 'GIMPLE' to 17271'RTL'. 17272 17273 Often the CFG may be better viewed as integral part of instruction 17274chain, than structure built on the top of it. Updating the compiler's 17275intermediate representation for instructions can not be easily done 17276without proper maintenance of the CFG simultaneously. 17277 17278* Menu: 17279 17280* Basic Blocks:: The definition and representation of basic blocks. 17281* Edges:: Types of edges and their representation. 17282* Profile information:: Representation of frequencies and probabilities. 17283* Maintaining the CFG:: Keeping the control flow graph and up to date. 17284* Liveness information:: Using and maintaining liveness information. 17285 17286 17287File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 17288 1728914.1 Basic Blocks 17290================= 17291 17292A basic block is a straight-line sequence of code with only one entry 17293point and only one exit. In GCC, basic blocks are represented using the 17294'basic_block' data type. 17295 17296 Special basic blocks represent possible entry and exit points of a 17297function. These blocks are called 'ENTRY_BLOCK_PTR' and 17298'EXIT_BLOCK_PTR'. These blocks do not contain any code. 17299 17300 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified 17301order. Each 'basic_block' structure has a field that holds a unique 17302integer identifier 'index' that is the index of the block in the 17303'BASIC_BLOCK' array. The total number of basic blocks in the function 17304is 'n_basic_blocks'. Both the basic block indices and the total number 17305of basic blocks may vary during the compilation process, as passes 17306reorder, create, duplicate, and destroy basic blocks. The index for any 17307block should never be greater than 'last_basic_block'. The indices 0 17308and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the 17309indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'. 17310 17311 Two pointer members of the 'basic_block' structure are the pointers 17312'next_bb' and 'prev_bb'. These are used to keep doubly linked chain of 17313basic blocks in the same order as the underlying instruction stream. 17314The chain of basic blocks is updated transparently by the provided API 17315for manipulating the CFG. The macro 'FOR_EACH_BB' can be used to visit 17316all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and 17317'EXIT_BLOCK'. The macro 'FOR_ALL_BB' also visits all basic blocks in 17318lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'. 17319 17320 The functions 'post_order_compute' and 'inverted_post_order_compute' 17321can be used to compute topological orders of the CFG. The orders are 17322stored as vectors of basic block indices. The 'BASIC_BLOCK' array can 17323be used to iterate each basic block by index. Dominator traversals are 17324also possible using 'walk_dominator_tree'. Given two basic blocks A and 17325B, block A dominates block B if A is _always_ executed before B. 17326 17327 Each 'basic_block' also contains pointers to the first instruction (the 17328"head") and the last instruction (the "tail") or "end" of the 17329instruction stream contained in a basic block. In fact, since the 17330'basic_block' data type is used to represent blocks in both major 17331intermediate representations of GCC ('GIMPLE' and RTL), there are 17332pointers to the head and end of a basic block for both representations, 17333stored in intermediate representation specific data in the 'il' field of 17334'struct basic_block_def'. 17335 17336 For RTL, these pointers are 'BB_HEAD' and 'BB_END'. 17337 17338 In the RTL representation of a function, the instruction stream 17339contains not only the "real" instructions, but also "notes" or "insn 17340notes" (to distinguish them from "reg notes"). Any function that moves 17341or duplicates the basic blocks needs to take care of updating of these 17342notes. Many of these notes expect that the instruction stream consists 17343of linear regions, so updating can sometimes be tedious. All types of 17344insn notes are defined in 'insn-notes.def'. 17345 17346 In the RTL function representation, the instructions contained in a 17347basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more 17348'CODE_LABEL' nodes can precede the block note. A basic block ends with 17349a control flow instruction or with the last instruction before the next 17350'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'. By definition, a 'CODE_LABEL' 17351cannot appear in the middle of the instruction stream of a basic block. 17352 17353 In addition to notes, the jump table vectors are also represented as 17354"pseudo-instructions" inside the insn stream. These vectors never 17355appear in the basic block and should always be placed just after the 17356table jump instructions referencing them. After removing the table-jump 17357it is often difficult to eliminate the code computing the address and 17358referencing the vector, so cleaning up these vectors is postponed until 17359after liveness analysis. Thus the jump table vectors may appear in the 17360insn stream unreferenced and without any purpose. Before any edge is 17361made "fall-thru", the existence of such construct in the way needs to be 17362checked by calling 'can_fallthru' function. 17363 17364 For the 'GIMPLE' representation, the PHI nodes and statements contained 17365in a basic block are in a 'gimple_seq' pointed to by the basic block 17366intermediate language specific pointers. Abstract containers and 17367iterators are used to access the PHI nodes and statements in a basic 17368blocks. These iterators are called "GIMPLE statement iterators" (GSIs). 17369Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files. There is 17370a 'gimple_stmt_iterator' type for iterating over all kinds of statement, 17371and a 'gphi_iterator' subclass for iterating over PHI nodes. The 17372following snippet will pretty-print all PHI nodes the statements of the 17373current function in the GIMPLE representation. 17374 17375 basic_block bb; 17376 17377 FOR_EACH_BB (bb) 17378 { 17379 gphi_iterator pi; 17380 gimple_stmt_iterator si; 17381 17382 for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi)) 17383 { 17384 gphi *phi = pi.phi (); 17385 print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); 17386 } 17387 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 17388 { 17389 gimple stmt = gsi_stmt (si); 17390 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); 17391 } 17392 } 17393 17394 17395File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 17396 1739714.2 Edges 17398========== 17399 17400Edges represent possible control flow transfers from the end of some 17401basic block A to the head of another basic block B. We say that A is a 17402predecessor of B, and B is a successor of A. Edges are represented in 17403GCC with the 'edge' data type. Each 'edge' acts as a link between two 17404basic blocks: The 'src' member of an edge points to the predecessor 17405basic block of the 'dest' basic block. The members 'preds' and 'succs' 17406of the 'basic_block' data type point to type-safe vectors of edges to 17407the predecessors and successors of the block. 17408 17409 When walking the edges in an edge vector, "edge iterators" should be 17410used. Edge iterators are constructed using the 'edge_iterator' data 17411structure and several methods are available to operate on them: 17412 17413'ei_start' 17414 This function initializes an 'edge_iterator' that points to the 17415 first edge in a vector of edges. 17416 17417'ei_last' 17418 This function initializes an 'edge_iterator' that points to the 17419 last edge in a vector of edges. 17420 17421'ei_end_p' 17422 This predicate is 'true' if an 'edge_iterator' represents the last 17423 edge in an edge vector. 17424 17425'ei_one_before_end_p' 17426 This predicate is 'true' if an 'edge_iterator' represents the 17427 second last edge in an edge vector. 17428 17429'ei_next' 17430 This function takes a pointer to an 'edge_iterator' and makes it 17431 point to the next edge in the sequence. 17432 17433'ei_prev' 17434 This function takes a pointer to an 'edge_iterator' and makes it 17435 point to the previous edge in the sequence. 17436 17437'ei_edge' 17438 This function returns the 'edge' currently pointed to by an 17439 'edge_iterator'. 17440 17441'ei_safe_safe' 17442 This function returns the 'edge' currently pointed to by an 17443 'edge_iterator', but returns 'NULL' if the iterator is pointing at 17444 the end of the sequence. This function has been provided for 17445 existing code makes the assumption that a 'NULL' edge indicates the 17446 end of the sequence. 17447 17448 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the 17449edges in a sequence of predecessor or successor edges. It must not be 17450used when an element might be removed during the traversal, otherwise 17451elements will be missed. Here is an example of how to use the macro: 17452 17453 edge e; 17454 edge_iterator ei; 17455 17456 FOR_EACH_EDGE (e, ei, bb->succs) 17457 { 17458 if (e->flags & EDGE_FALLTHRU) 17459 break; 17460 } 17461 17462 There are various reasons why control flow may transfer from one block 17463to another. One possibility is that some instruction, for example a 17464'CODE_LABEL', in a linearized instruction stream just always starts a 17465new basic block. In this case a "fall-thru" edge links the basic block 17466to the first following basic block. But there are several other reasons 17467why edges may be created. The 'flags' field of the 'edge' data type is 17468used to store information about the type of edge we are dealing with. 17469Each edge is of one of the following types: 17470 17471_jump_ 17472 No type flags are set for edges corresponding to jump instructions. 17473 These edges are used for unconditional or conditional jumps and in 17474 RTL also for table jumps. They are the easiest to manipulate as 17475 they may be freely redirected when the flow graph is not in SSA 17476 form. 17477 17478_fall-thru_ 17479 Fall-thru edges are present in case where the basic block may 17480 continue execution to the following one without branching. These 17481 edges have the 'EDGE_FALLTHRU' flag set. Unlike other types of 17482 edges, these edges must come into the basic block immediately 17483 following in the instruction stream. The function 17484 'force_nonfallthru' is available to insert an unconditional jump in 17485 the case that redirection is needed. Note that this may require 17486 creation of a new basic block. 17487 17488_exception handling_ 17489 Exception handling edges represent possible control transfers from 17490 a trapping instruction to an exception handler. The definition of 17491 "trapping" varies. In C++, only function calls can throw, but for 17492 Java and Ada, exceptions like division by zero or segmentation 17493 fault are defined and thus each instruction possibly throwing this 17494 kind of exception needs to be handled as control flow instruction. 17495 Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set. 17496 17497 When updating the instruction stream it is easy to change possibly 17498 trapping instruction to non-trapping, by simply removing the 17499 exception edge. The opposite conversion is difficult, but should 17500 not happen anyway. The edges can be eliminated via 17501 'purge_dead_edges' call. 17502 17503 In the RTL representation, the destination of an exception edge is 17504 specified by 'REG_EH_REGION' note attached to the insn. In case of 17505 a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too. In the 17506 'GIMPLE' representation, this extra flag is not set. 17507 17508 In the RTL representation, the predicate 'may_trap_p' may be used 17509 to check whether instruction still may trap or not. For the tree 17510 representation, the 'tree_could_trap_p' predicate is available, but 17511 this predicate only checks for possible memory traps, as in 17512 dereferencing an invalid pointer location. 17513 17514_sibling calls_ 17515 Sibling calls or tail calls terminate the function in a 17516 non-standard way and thus an edge to the exit must be present. 17517 'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case. These 17518 edges only exist in the RTL representation. 17519 17520_computed jumps_ 17521 Computed jumps contain edges to all labels in the function 17522 referenced from the code. All those edges have 'EDGE_ABNORMAL' 17523 flag set. The edges used to represent computed jumps often cause 17524 compile time performance problems, since functions consisting of 17525 many taken labels and many computed jumps may have _very_ dense 17526 flow graphs, so these edges need to be handled with special care. 17527 During the earlier stages of the compilation process, GCC tries to 17528 avoid such dense flow graphs by factoring computed jumps. For 17529 example, given the following series of jumps, 17530 17531 goto *x; 17532 [ ... ] 17533 17534 goto *x; 17535 [ ... ] 17536 17537 goto *x; 17538 [ ... ] 17539 17540 factoring the computed jumps results in the following code sequence 17541 which has a much simpler flow graph: 17542 17543 goto y; 17544 [ ... ] 17545 17546 goto y; 17547 [ ... ] 17548 17549 goto y; 17550 [ ... ] 17551 17552 y: 17553 goto *x; 17554 17555 However, the classic problem with this transformation is that it 17556 has a runtime cost in there resulting code: An extra jump. 17557 Therefore, the computed jumps are un-factored in the later passes 17558 of the compiler (in the pass called 17559 'pass_duplicate_computed_gotos'). Be aware of that when you work 17560 on passes in that area. There have been numerous examples already 17561 where the compile time for code with unfactored computed jumps 17562 caused some serious headaches. 17563 17564_nonlocal goto handlers_ 17565 GCC allows nested functions to return into caller using a 'goto' to 17566 a label passed to as an argument to the callee. The labels passed 17567 to nested functions contain special code to cleanup after function 17568 call. Such sections of code are referred to as "nonlocal goto 17569 receivers". If a function contains such nonlocal goto receivers, 17570 an edge from the call to the label is created with the 17571 'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set. 17572 17573_function entry points_ 17574 By definition, execution of function starts at basic block 0, so 17575 there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block 17576 0. There is no 'GIMPLE' representation for alternate entry points 17577 at this moment. In RTL, alternate entry points are specified by 17578 'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined. This feature is 17579 currently used for multiple entry point prologues and is limited to 17580 post-reload passes only. This can be used by back-ends to emit 17581 alternate prologues for functions called from different contexts. 17582 In future full support for multiple entry functions defined by 17583 Fortran 90 needs to be implemented. 17584 17585_function exits_ 17586 In the pre-reload representation a function terminates after the 17587 last instruction in the insn chain and no explicit return 17588 instructions are used. This corresponds to the fall-thru edge into 17589 exit block. After reload, optimal RTL epilogues are used that use 17590 explicit (conditional) return instructions that are represented by 17591 edges with no flags set. 17592 17593 17594File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 17595 1759614.3 Profile information 17597======================== 17598 17599In many cases a compiler must make a choice whether to trade speed in 17600one part of code for speed in another, or to trade code size for code 17601speed. In such cases it is useful to know information about how often 17602some given block will be executed. That is the purpose for maintaining 17603profile within the flow graph. GCC can handle profile information 17604obtained through "profile feedback", but it can also estimate branch 17605probabilities based on statics and heuristics. 17606 17607 The feedback based profile is produced by compiling the program with 17608instrumentation, executing it on a train run and reading the numbers of 17609executions of basic blocks and edges back to the compiler while 17610re-compiling the program to produce the final executable. This method 17611provides very accurate information about where a program spends most of 17612its time on the train run. Whether it matches the average run of course 17613depends on the choice of train data set, but several studies have shown 17614that the behavior of a program usually changes just marginally over 17615different data sets. 17616 17617 When profile feedback is not available, the compiler may be asked to 17618attempt to predict the behavior of each branch in the program using a 17619set of heuristics (see 'predict.def' for details) and compute estimated 17620frequencies of each basic block by propagating the probabilities over 17621the graph. 17622 17623 Each 'basic_block' contains two integer fields to represent profile 17624information: 'frequency' and 'count'. The 'frequency' is an estimation 17625how often is basic block executed within a function. It is represented 17626as an integer scaled in the range from 0 to 'BB_FREQ_BASE'. The most 17627frequently executed basic block in function is initially set to 17628'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 17629During optimization, the frequency of the most frequent basic block can 17630both decrease (for instance by loop unrolling) or grow (for instance by 17631cross-jumping optimization), so scaling sometimes has to be performed 17632multiple times. 17633 17634 The 'count' contains hard-counted numbers of execution measured during 17635training runs and is nonzero only when profile feedback is available. 17636This value is represented as the host's widest integer (typically a 64 17637bit integer) of the special type 'gcov_type'. 17638 17639 Most optimization passes can use only the frequency information of a 17640basic block, but a few passes may want to know hard execution counts. 17641The frequencies should always match the counts after scaling, however 17642during updating of the profile information numerical error may 17643accumulate into quite large errors. 17644 17645 Each edge also contains a branch probability field: an integer in the 17646range from 0 to 'REG_BR_PROB_BASE'. It represents probability of 17647passing control from the end of the 'src' basic block to the 'dest' 17648basic block, i.e. the probability that control will flow along this 17649edge. The 'EDGE_FREQUENCY' macro is available to compute how frequently 17650a given edge is taken. There is a 'count' field for each edge as well, 17651representing same information as for a basic block. 17652 17653 The basic block frequencies are not represented in the instruction 17654stream, but in the RTL representation the edge frequencies are 17655represented for conditional jumps (via the 'REG_BR_PROB' macro) since 17656they are used when instructions are output to the assembly file and the 17657flow graph is no longer maintained. 17658 17659 The probability that control flow arrives via a given edge to its 17660destination basic block is called "reverse probability" and is not 17661directly represented, but it may be easily computed from frequencies of 17662basic blocks. 17663 17664 Updating profile information is a delicate task that can unfortunately 17665not be easily integrated with the CFG manipulation API. Many of the 17666functions and hooks to modify the CFG, such as 17667'redirect_edge_and_branch', do not have enough information to easily 17668update the profile, so updating it is in the majority of cases left up 17669to the caller. It is difficult to uncover bugs in the profile updating 17670code, because they manifest themselves only by producing worse code, and 17671checking profile consistency is not possible because of numeric error 17672accumulation. Hence special attention needs to be given to this issue 17673in each pass that modifies the CFG. 17674 17675 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE' 17676are both set low enough to be possible to compute second power of any 17677frequency or probability in the flow graph, it is not possible to even 17678square the 'count' field, as modern CPUs are fast enough to execute 17679$2^32$ operations quickly. 17680 17681 17682File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 17683 1768414.4 Maintaining the CFG 17685======================== 17686 17687An important task of each compiler pass is to keep both the control flow 17688graph and all profile information up-to-date. Reconstruction of the 17689control flow graph after each pass is not an option, since it may be 17690very expensive and lost profile information cannot be reconstructed at 17691all. 17692 17693 GCC has two major intermediate representations, and both use the 17694'basic_block' and 'edge' data types to represent control flow. Both 17695representations share as much of the CFG maintenance code as possible. 17696For each representation, a set of "hooks" is defined so that each 17697representation can provide its own implementation of CFG manipulation 17698routines when necessary. These hooks are defined in 'cfghooks.h'. 17699There are hooks for almost all common CFG manipulations, including block 17700splitting and merging, edge redirection and creating and deleting basic 17701blocks. These hooks should provide everything you need to maintain and 17702manipulate the CFG in both the RTL and 'GIMPLE' representation. 17703 17704 At the moment, the basic block boundaries are maintained transparently 17705when modifying instructions, so there rarely is a need to move them 17706manually (such as in case someone wants to output instruction outside 17707basic block explicitly). 17708 17709 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN' 17710value that represents pointer to the basic block that contains the 17711instruction. In the 'GIMPLE' representation, the function 'gimple_bb' 17712returns a pointer to the basic block containing the queried statement. 17713 17714 When changes need to be applied to a function in its 'GIMPLE' 17715representation, "GIMPLE statement iterators" should be used. These 17716iterators provide an integrated abstraction of the flow graph and the 17717instruction stream. Block statement iterators are constructed using the 17718'gimple_stmt_iterator' data structure and several modifiers are 17719available, including the following: 17720 17721'gsi_start' 17722 This function initializes a 'gimple_stmt_iterator' that points to 17723 the first non-empty statement in a basic block. 17724 17725'gsi_last' 17726 This function initializes a 'gimple_stmt_iterator' that points to 17727 the last statement in a basic block. 17728 17729'gsi_end_p' 17730 This predicate is 'true' if a 'gimple_stmt_iterator' represents the 17731 end of a basic block. 17732 17733'gsi_next' 17734 This function takes a 'gimple_stmt_iterator' and makes it point to 17735 its successor. 17736 17737'gsi_prev' 17738 This function takes a 'gimple_stmt_iterator' and makes it point to 17739 its predecessor. 17740 17741'gsi_insert_after' 17742 This function inserts a statement after the 'gimple_stmt_iterator' 17743 passed in. The final parameter determines whether the statement 17744 iterator is updated to point to the newly inserted statement, or 17745 left pointing to the original statement. 17746 17747'gsi_insert_before' 17748 This function inserts a statement before the 'gimple_stmt_iterator' 17749 passed in. The final parameter determines whether the statement 17750 iterator is updated to point to the newly inserted statement, or 17751 left pointing to the original statement. 17752 17753'gsi_remove' 17754 This function removes the 'gimple_stmt_iterator' passed in and 17755 rechains the remaining statements in a basic block, if any. 17756 17757 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be 17758used to get the head and end 'rtx' of a basic block. No abstract 17759iterators are defined for traversing the insn chain, but you can just 17760use 'NEXT_INSN' and 'PREV_INSN' instead. *Note Insns::. 17761 17762 Usually a code manipulating pass simplifies the instruction stream and 17763the flow of control, possibly eliminating some edges. This may for 17764example happen when a conditional jump is replaced with an unconditional 17765jump, but also when simplifying possibly trapping instruction to 17766non-trapping while compiling Java. Updating of edges is not transparent 17767and each optimization pass is required to do so manually. However only 17768few cases occur in practice. The pass may call 'purge_dead_edges' on a 17769given basic block to remove superfluous edges, if any. 17770 17771 Another common scenario is redirection of branch instructions, but this 17772is best modeled as redirection of edges in the control flow graph and 17773thus use of 'redirect_edge_and_branch' is preferred over more low level 17774functions, such as 'redirect_jump' that operate on RTL chain only. The 17775CFG hooks defined in 'cfghooks.h' should provide the complete API 17776required for manipulating and maintaining the CFG. 17777 17778 It is also possible that a pass has to insert control flow instruction 17779into the middle of a basic block, thus creating an entry point in the 17780middle of the basic block, which is impossible by definition: The block 17781must be split to make sure it only has one entry point, i.e. the head of 17782the basic block. The CFG hook 'split_block' may be used when an 17783instruction in the middle of a basic block has to become the target of a 17784jump or branch instruction. 17785 17786 For a global optimizer, a common operation is to split edges in the 17787flow graph and insert instructions on them. In the RTL representation, 17788this can be easily done using the 'insert_insn_on_edge' function that 17789emits an instruction "on the edge", caching it for a later 17790'commit_edge_insertions' call that will take care of moving the inserted 17791instructions off the edge into the instruction stream contained in a 17792basic block. This includes the creation of new basic blocks where 17793needed. In the 'GIMPLE' representation, the equivalent functions are 17794'gsi_insert_on_edge' which inserts a block statement iterator on an 17795edge, and 'gsi_commit_edge_inserts' which flushes the instruction to 17796actual instruction stream. 17797 17798 While debugging the optimization pass, the 'verify_flow_info' function 17799may be useful to find bugs in the control flow graph updating code. 17800 17801 17802File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 17803 1780414.5 Liveness information 17805========================= 17806 17807Liveness information is useful to determine whether some register is 17808"live" at given point of program, i.e. that it contains a value that may 17809be used at a later point in the program. This information is used, for 17810instance, during register allocation, as the pseudo registers only need 17811to be assigned to a unique hard register or to a stack slot if they are 17812live. The hard registers and stack slots may be freely reused for other 17813values when a register is dead. 17814 17815 Liveness information is available in the back end starting with 17816'pass_df_initialize' and ending with 'pass_df_finish'. Three flavors of 17817live analysis are available: With 'LR', it is possible to determine at 17818any point 'P' in the function if the register may be used on some path 17819from 'P' to the end of the function. With 'UR', it is possible to 17820determine if there is a path from the beginning of the function to 'P' 17821that defines the variable. 'LIVE' is the intersection of the 'LR' and 17822'UR' and a variable is live at 'P' if there is both an assignment that 17823reaches it from the beginning of the function and a use that can be 17824reached on some path from 'P' to the end of the function. 17825 17826 In general 'LIVE' is the most useful of the three. The macros 17827'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 17828macros take a basic block number and return a bitmap that is indexed by 17829the register number. This information is only guaranteed to be up to 17830date after calls are made to 'df_analyze'. See the file 'df-core.c' for 17831details on using the dataflow. 17832 17833 The liveness information is stored partly in the RTL instruction stream 17834and partly in the flow graph. Local information is stored in the 17835instruction stream: Each instruction may contain 'REG_DEAD' notes 17836representing that the value of a given register is no longer needed, or 17837'REG_UNUSED' notes representing that the value computed by the 17838instruction is never used. The second is useful for instructions 17839computing multiple values at once. 17840 17841 17842File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top 17843 1784415 Analysis and Representation of Loops 17845*************************************** 17846 17847GCC provides extensive infrastructure for work with natural loops, i.e., 17848strongly connected components of CFG with only one entry block. This 17849chapter describes representation of loops in GCC, both on GIMPLE and in 17850RTL, as well as the interfaces to loop-related analyses (induction 17851variable analysis and number of iterations analysis). 17852 17853* Menu: 17854 17855* Loop representation:: Representation and analysis of loops. 17856* Loop querying:: Getting information about loops. 17857* Loop manipulation:: Loop manipulation functions. 17858* LCSSA:: Loop-closed SSA form. 17859* Scalar evolutions:: Induction variables on GIMPLE. 17860* loop-iv:: Induction variables on RTL. 17861* Number of iterations:: Number of iterations analysis. 17862* Dependency analysis:: Data dependency analysis. 17863* Omega:: A solver for linear programming problems. 17864 17865 17866File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 17867 1786815.1 Loop representation 17869======================== 17870 17871This chapter describes the representation of loops in GCC, and functions 17872that can be used to build, modify and analyze this representation. Most 17873of the interfaces and data structures are declared in 'cfgloop.h'. Loop 17874structures are analyzed and this information disposed or updated at the 17875discretion of individual passes. Still most of the generic CFG 17876manipulation routines are aware of loop structures and try to keep them 17877up-to-date. By this means an increasing part of the compilation 17878pipeline is setup to maintain loop structure across passes to allow 17879attaching meta information to individual loops for consumption by later 17880passes. 17881 17882 In general, a natural loop has one entry block (header) and possibly 17883several back edges (latches) leading to the header from the inside of 17884the loop. Loops with several latches may appear if several loops share 17885a single header, or if there is a branching in the middle of the loop. 17886The representation of loops in GCC however allows only loops with a 17887single latch. During loop analysis, headers of such loops are split and 17888forwarder blocks are created in order to disambiguate their structures. 17889Heuristic based on profile information and structure of the induction 17890variables in the loops is used to determine whether the latches 17891correspond to sub-loops or to control flow in a single loop. This means 17892that the analysis sometimes changes the CFG, and if you run it in the 17893middle of an optimization pass, you must be able to deal with the new 17894blocks. You may avoid CFG changes by passing 17895'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 17896however that most other loop manipulation functions will not work 17897correctly for loops with multiple latch edges (the functions that only 17898query membership of blocks to loops and subloop relationships, or 17899enumerate and test loop exits, can be expected to work). 17900 17901 Body of the loop is the set of blocks that are dominated by its header, 17902and reachable from its latch against the direction of edges in CFG. The 17903loops are organized in a containment hierarchy (tree) such that all the 17904loops immediately contained inside loop L are the children of L in the 17905tree. This tree is represented by the 'struct loops' structure. The 17906root of this tree is a fake loop that contains all blocks in the 17907function. Each of the loops is represented in a 'struct loop' 17908structure. Each loop is assigned an index ('num' field of the 'struct 17909loop' structure), and the pointer to the loop is stored in the 17910corresponding field of the 'larray' vector in the loops structure. The 17911indices do not have to be continuous, there may be empty ('NULL') 17912entries in the 'larray' created by deleting loops. Also, there is no 17913guarantee on the relative order of a loop and its subloops in the 17914numbering. The index of a loop never changes. 17915 17916 The entries of the 'larray' field should not be accessed directly. The 17917function 'get_loop' returns the loop description for a loop with the 17918given index. 'number_of_loops' function returns number of loops in the 17919function. To traverse all loops, use 'FOR_EACH_LOOP' macro. The 17920'flags' argument of the macro is used to determine the direction of 17921traversal and the set of loops visited. Each loop is guaranteed to be 17922visited exactly once, regardless of the changes to the loop tree, and 17923the loops may be removed during the traversal. The newly created loops 17924are never traversed, if they need to be visited, this must be done 17925separately after their creation. The 'FOR_EACH_LOOP' macro allocates 17926temporary variables. If the 'FOR_EACH_LOOP' loop were ended using break 17927or goto, they would not be released; 'FOR_EACH_LOOP_BREAK' macro must be 17928used instead. 17929 17930 Each basic block contains the reference to the innermost loop it 17931belongs to ('loop_father'). For this reason, it is only possible to 17932have one 'struct loops' structure initialized at the same time for each 17933CFG. The global variable 'current_loops' contains the 'struct loops' 17934structure. Many of the loop manipulation functions assume that 17935dominance information is up-to-date. 17936 17937 The loops are analyzed through 'loop_optimizer_init' function. The 17938argument of this function is a set of flags represented in an integer 17939bitmask. These flags specify what other properties of the loop 17940structures should be calculated/enforced and preserved later: 17941 17942 * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 17943 to CFG will be performed in the loop analysis, in particular, loops 17944 with multiple latch edges will not be disambiguated. If a loop has 17945 multiple latches, its latch block is set to NULL. Most of the loop 17946 manipulation functions will not work for loops in this shape. No 17947 other flags that require CFG changes can be passed to 17948 loop_optimizer_init. 17949 * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way 17950 that each loop has only one entry edge, and additionally, the 17951 source block of this entry edge has only one successor. This 17952 creates a natural place where the code can be moved out of the 17953 loop, and ensures that the entry edge of the loop leads from its 17954 immediate super-loop. 17955 * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 17956 the latch block of each loop to have only one successor. This 17957 ensures that the latch of the loop does not belong to any of its 17958 sub-loops, and makes manipulation with the loops significantly 17959 easier. Most of the loop manipulation functions assume that the 17960 loops are in this shape. Note that with this flag, the "normal" 17961 loop without any control flow inside and with one exit consists of 17962 two basic blocks. 17963 * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 17964 the strongly connected components that are not natural loops (have 17965 more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP' 17966 and 'EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 17967 and edges that belong to natural loops that are in such an 17968 irreducible region (but it is set for the entry and exit edges of 17969 such a loop, if they lead to/from this region). 17970 * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 17971 updated for each loop. This makes some functions (e.g., 17972 'get_loop_exit_edges') more efficient. Some functions (e.g., 17973 'single_exit') can be used only if the lists of exits are recorded. 17974 17975 These properties may also be computed/enforced later, using functions 17976'create_preheaders', 'force_single_succ_latches', 17977'mark_irreducible_loops' and 'record_loop_exits'. The properties can be 17978queried using 'loops_state_satisfies_p'. 17979 17980 The memory occupied by the loops structures should be freed with 17981'loop_optimizer_finalize' function. When loop structures are setup to 17982be preserved across passes this function reduces the information to be 17983kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' 17984set). 17985 17986 The CFG manipulation functions in general do not update loop 17987structures. Specialized versions that additionally do so are provided 17988for the most common tasks. On GIMPLE, 'cleanup_tree_cfg_loop' function 17989can be used to cleanup CFG while updating the loops structures if 17990'current_loops' is set. 17991 17992 At the moment loop structure is preserved from the start of GIMPLE loop 17993optimizations until the end of RTL loop optimizations. During this time 17994a loop can be tracked by its 'struct loop' and number. 17995 17996 17997File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 17998 1799915.2 Loop querying 18000================== 18001 18002The functions to query the information about loops are declared in 18003'cfgloop.h'. Some of the information can be taken directly from the 18004structures. 'loop_father' field of each basic block contains the 18005innermost loop to that the block belongs. The most useful fields of 18006loop structure (that are kept up-to-date at all times) are: 18007 18008 * 'header', 'latch': Header and latch basic blocks of the loop. 18009 * 'num_nodes': Number of basic blocks in the loop (including the 18010 basic blocks of the sub-loops). 18011 * 'depth': The depth of the loop in the loops tree, i.e., the number 18012 of super-loops of the loop. 18013 * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and 18014 the sibling of the loop in the loops tree. 18015 18016 There are other fields in the loop structures, many of them used only 18017by some of the passes, or not updated during CFG changes; in general, 18018they should not be accessed directly. 18019 18020 The most important functions to query loop structures are: 18021 18022 * 'flow_loops_dump': Dumps the information about loops to a file. 18023 * 'verify_loop_structure': Checks consistency of the loop structures. 18024 * 'loop_latch_edge': Returns the latch edge of a loop. 18025 * 'loop_preheader_edge': If loops have preheaders, returns the 18026 preheader edge of a loop. 18027 * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another 18028 loop. 18029 * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a 18030 loop (including its sub-loops). 18031 * 'find_common_loop': Finds the common super-loop of two loops. 18032 * 'superloop_at_depth': Returns the super-loop of a loop with the 18033 given depth. 18034 * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of 18035 insns in the loop, on GIMPLE and on RTL. 18036 * 'loop_exit_edge_p': Tests whether edge is an exit from a loop. 18037 * 'mark_loop_exit_edges': Marks all exit edges of all loops with 18038 'EDGE_LOOP_EXIT' flag. 18039 * 'get_loop_body', 'get_loop_body_in_dom_order', 18040 'get_loop_body_in_bfs_order': Enumerates the basic blocks in the 18041 loop in depth-first search order in reversed CFG, ordered by 18042 dominance relation, and breath-first search order, respectively. 18043 * 'single_exit': Returns the single exit edge of the loop, or 'NULL' 18044 if the loop has more than one exit. You can only use this function 18045 if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 18046 * 'get_loop_exit_edges': Enumerates the exit edges of a loop. 18047 * 'just_once_each_iteration_p': Returns true if the basic block is 18048 executed exactly once during each iteration of a loop (that is, it 18049 does not belong to a sub-loop, and it dominates the latch of the 18050 loop). 18051 18052 18053File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 18054 1805515.3 Loop manipulation 18056====================== 18057 18058The loops tree can be manipulated using the following functions: 18059 18060 * 'flow_loop_tree_node_add': Adds a node to the tree. 18061 * 'flow_loop_tree_node_remove': Removes a node from the tree. 18062 * 'add_bb_to_loop': Adds a basic block to a loop. 18063 * 'remove_bb_from_loops': Removes a basic block from loops. 18064 18065 Most low-level CFG functions update loops automatically. The following 18066functions handle some more complicated cases of CFG manipulations: 18067 18068 * 'remove_path': Removes an edge and all blocks it dominates. 18069 * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that 18070 PHI node arguments remain in the loop (this ensures that 18071 loop-closed SSA form is preserved). Only useful on GIMPLE. 18072 18073 Finally, there are some higher-level loop transformations implemented. 18074While some of them are written so that they should work on non-innermost 18075loops, they are mostly untested in that case, and at the moment, they 18076are only reliable for the innermost loops: 18077 18078 * 'create_iv': Creates a new induction variable. Only works on 18079 GIMPLE. 'standard_iv_increment_position' can be used to find a 18080 suitable place for the iv increment. 18081 * 'duplicate_loop_to_header_edge', 18082 'tree_duplicate_loop_to_header_edge': These functions (on RTL and 18083 on GIMPLE) duplicate the body of the loop prescribed number of 18084 times on one of the edges entering loop header, thus performing 18085 either loop unrolling or loop peeling. 'can_duplicate_loop_p' 18086 ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated 18087 loop. 18088 * 'loop_version', 'tree_ssa_loop_version': These function create a 18089 copy of a loop, and a branch before them that selects one of them 18090 depending on the prescribed condition. This is useful for 18091 optimizations that need to verify some assumptions in runtime (one 18092 of the copies of the loop is usually left unchanged, while the 18093 other one is transformed in some way). 18094 * 'tree_unroll_loop': Unrolls the loop, including peeling the extra 18095 iterations to make the number of iterations divisible by unroll 18096 factor, updating the exit condition, and removing the exits that 18097 now cannot be taken. Works only on GIMPLE. 18098 18099 18100File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 18101 1810215.4 Loop-closed SSA form 18103========================= 18104 18105Throughout the loop optimizations on tree level, one extra condition is 18106enforced on the SSA form: No SSA name is used outside of the loop in 18107that it is defined. The SSA form satisfying this condition is called 18108"loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 18109created at the exits of the loops for the SSA names that are used 18110outside of them. Only the real operands (not virtual SSA names) are 18111held in LCSSA, in order to save memory. 18112 18113 There are various benefits of LCSSA: 18114 18115 * Many optimizations (value range analysis, final value replacement) 18116 are interested in the values that are defined in the loop and used 18117 outside of it, i.e., exactly those for that we create new PHI 18118 nodes. 18119 * In induction variable analysis, it is not necessary to specify the 18120 loop in that the analysis should be performed - the scalar 18121 evolution analysis always returns the results with respect to the 18122 loop in that the SSA name is defined. 18123 * It makes updating of SSA form during loop transformations simpler. 18124 Without LCSSA, operations like loop unrolling may force creation of 18125 PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA 18126 form can be updated locally. However, since we only keep real 18127 operands in LCSSA, we cannot use this advantage (we could have 18128 local updating of real operands, but it is not much more efficient 18129 than to use generic SSA form updating for it as well; the amount of 18130 changes to SSA is the same). 18131 18132 However, it also means LCSSA must be updated. This is usually 18133straightforward, unless you create a new value in loop and use it 18134outside, or unless you manipulate loop exit edges (functions are 18135provided to make these manipulations simple). 18136'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and 18137'verify_loop_closed_ssa' to check that the invariant of LCSSA is 18138preserved. 18139 18140 18141File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 18142 1814315.5 Scalar evolutions 18144====================== 18145 18146Scalar evolutions (SCEV) are used to represent results of induction 18147variable analysis on GIMPLE. They enable us to represent variables with 18148complicated behavior in a simple and consistent way (we only use it to 18149express values of polynomial induction variables, but it is possible to 18150extend it). The interfaces to SCEV analysis are declared in 18151'tree-scalar-evolution.h'. To use scalar evolutions analysis, 18152'scev_initialize' must be used. To stop using SCEV, 'scev_finalize' 18153should be used. SCEV analysis caches results in order to save time and 18154memory. This cache however is made invalid by most of the loop 18155transformations, including removal of code. If such a transformation is 18156performed, 'scev_reset' must be called to clean the caches. 18157 18158 Given an SSA name, its behavior in loops can be analyzed using the 18159'analyze_scalar_evolution' function. The returned SCEV however does not 18160have to be fully analyzed and it may contain references to other SSA 18161names defined in the loop. To resolve these (potentially recursive) 18162references, 'instantiate_parameters' or 'resolve_mixers' functions must 18163be used. 'instantiate_parameters' is useful when you use the results of 18164SCEV only for some analysis, and when you work with whole nest of loops 18165at once. It will try replacing all SSA names by their SCEV in all 18166loops, including the super-loops of the current loop, thus providing a 18167complete information about the behavior of the variable in the loop 18168nest. 'resolve_mixers' is useful if you work with only one loop at a 18169time, and if you possibly need to create code based on the value of the 18170induction variable. It will only resolve the SSA names defined in the 18171current loop, leaving the SSA names defined outside unchanged, even if 18172their evolution in the outer loops is known. 18173 18174 The SCEV is a normal tree expression, except for the fact that it may 18175contain several special tree nodes. One of them is 'SCEV_NOT_KNOWN', 18176used for SSA names whose value cannot be expressed. The other one is 18177'POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 18178and loop (both base and step may contain further polynomial chrecs). 18179Type of the expression and of base and step must be the same. A 18180variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in 18181the specified loop) equivalent to 'x_1' in the following example 18182 18183 while (...) 18184 { 18185 x_1 = phi (base, x_2); 18186 x_2 = x_1 + step; 18187 } 18188 18189 Note that this includes the language restrictions on the operations. 18190For example, if we compile C code and 'x' has signed type, then the 18191overflow in addition would cause undefined behavior, and we may assume 18192that this does not happen. Hence, the value with this SCEV cannot 18193overflow (which restricts the number of iterations of such a loop). 18194 18195 In many cases, one wants to restrict the attention just to affine 18196induction variables. In this case, the extra expressive power of SCEV 18197is not useful, and may complicate the optimizations. In this case, 18198'simple_iv' function may be used to analyze a value - the result is a 18199loop-invariant base and step. 18200 18201 18202File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 18203 1820415.6 IV analysis on RTL 18205======================= 18206 18207The induction variable on RTL is simple and only allows analysis of 18208affine induction variables, and only in one loop at once. The interface 18209is declared in 'cfgloop.h'. Before analyzing induction variables in a 18210loop L, 'iv_analysis_loop_init' function must be called on L. After the 18211analysis (possibly calling 'iv_analysis_loop_init' for several loops) is 18212finished, 'iv_analysis_done' should be called. The following functions 18213can be used to access the results of the analysis: 18214 18215 * 'iv_analyze': Analyzes a single register used in the given insn. 18216 If no use of the register in this insn is found, the following 18217 insns are scanned, so that this function can be called on the insn 18218 returned by get_condition. 18219 * 'iv_analyze_result': Analyzes result of the assignment in the given 18220 insn. 18221 * 'iv_analyze_expr': Analyzes a more complicated expression. All its 18222 operands are analyzed by 'iv_analyze', and hence they must be used 18223 in the specified insn or one of the following insns. 18224 18225 The description of the induction variable is provided in 'struct 18226rtx_iv'. In order to handle subregs, the representation is a bit 18227complicated; if the value of the 'extend' field is not 'UNKNOWN', the 18228value of the induction variable in the i-th iteration is 18229 18230 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 18231 18232 with the following exception: if 'first_special' is true, then the 18233value in the first iteration (when 'i' is zero) is 'delta + mult * 18234base'. However, if 'extend' is equal to 'UNKNOWN', then 'first_special' 18235must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration 18236is 18237 18238 subreg_{mode} (base + i * step) 18239 18240 The function 'get_iv_value' can be used to perform these calculations. 18241 18242 18243File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 18244 1824515.7 Number of iterations analysis 18246================================== 18247 18248Both on GIMPLE and on RTL, there are functions available to determine 18249the number of iterations of a loop, with a similar interface. The 18250number of iterations of a loop in GCC is defined as the number of 18251executions of the loop latch. In many cases, it is not possible to 18252determine the number of iterations unconditionally - the determined 18253number is correct only if some assumptions are satisfied. The analysis 18254tries to verify these conditions using the information contained in the 18255program; if it fails, the conditions are returned together with the 18256result. The following information and conditions are provided by the 18257analysis: 18258 18259 * 'assumptions': If this condition is false, the rest of the 18260 information is invalid. 18261 * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this 18262 condition is true, the loop exits in the first iteration. 18263 * 'infinite': If this condition is true, the loop is infinite. This 18264 condition is only available on RTL. On GIMPLE, conditions for 18265 finiteness of the loop are included in 'assumptions'. 18266 * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives 18267 number of iterations. The number of iterations is defined as the 18268 number of executions of the loop latch. 18269 18270 Both on GIMPLE and on RTL, it necessary for the induction variable 18271analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 18272On GIMPLE, the results are stored to 'struct tree_niter_desc' structure. 18273Number of iterations before the loop is exited through a given exit can 18274be determined using 'number_of_iterations_exit' function. On RTL, the 18275results are returned in 'struct niter_desc' structure. The 18276corresponding function is named 'check_simple_exit'. There are also 18277functions that pass through all the exits of a loop and try to find one 18278with easy to determine number of iterations - 'find_loop_niter' on 18279GIMPLE and 'find_simple_exit' on RTL. Finally, there are functions that 18280provide the same information, but additionally cache it, so that 18281repeated calls to number of iterations are not so costly - 18282'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on 18283RTL. 18284 18285 Note that some of these functions may behave slightly differently than 18286others - some of them return only the expression for the number of 18287iterations, and fail if there are some assumptions. The function 18288'number_of_latch_executions' works only for single-exit loops. The 18289function 'number_of_cond_exit_executions' can be used to determine 18290number of executions of the exit condition of a single-exit loop (i.e., 18291the 'number_of_latch_executions' increased by one). 18292 18293 18294File: gccint.info, Node: Dependency analysis, Next: Omega, Prev: Number of iterations, Up: Loop Analysis and Representation 18295 1829615.8 Data Dependency Analysis 18297============================= 18298 18299The code for the data dependence analysis can be found in 18300'tree-data-ref.c' and its interface and data structures are described in 18301'tree-data-ref.h'. The function that computes the data dependences for 18302all the array and pointer references for a given loop is 18303'compute_data_dependences_for_loop'. This function is currently used by 18304the linear loop transform and the vectorization passes. Before calling 18305this function, one has to allocate two vectors: a first vector will 18306contain the set of data references that are contained in the analyzed 18307loop body, and the second vector will contain the dependence relations 18308between the data references. Thus if the vector of data references is 18309of size 'n', the vector containing the dependence relations will contain 18310'n*n' elements. However if the analyzed loop contains side effects, 18311such as calls that potentially can interfere with the data references in 18312the current analyzed loop, the analysis stops while scanning the loop 18313body for data references, and inserts a single 'chrec_dont_know' in the 18314dependence relation array. 18315 18316 The data references are discovered in a particular order during the 18317scanning of the loop body: the loop body is analyzed in execution order, 18318and the data references of each statement are pushed at the end of the 18319data reference array. Two data references syntactically occur in the 18320program in the same order as in the array of data references. This 18321syntactic order is important in some classical data dependence tests, 18322and mapping this order to the elements of this array avoids costly 18323queries to the loop body representation. 18324 18325 Three types of data references are currently handled: ARRAY_REF, 18326INDIRECT_REF and COMPONENT_REF. The data structure for the data 18327reference is 'data_reference', where 'data_reference_p' is a name of a 18328pointer to the data reference structure. The structure contains the 18329following elements: 18330 18331 * 'base_object_info': Provides information about the base object of 18332 the data reference and its access functions. These access 18333 functions represent the evolution of the data reference in the loop 18334 relative to its base, in keeping with the classical meaning of the 18335 data reference access function for the support of arrays. For 18336 example, for a reference 'a.b[i][j]', the base object is 'a.b' and 18337 the access functions, one for each array subscript, are: '{i_init, 18338 + i_step}_1, {j_init, +, j_step}_2'. 18339 18340 * 'first_location_in_loop': Provides information about the first 18341 location accessed by the data reference in the loop and about the 18342 access function used to represent evolution relative to this 18343 location. This data is used to support pointers, and is not used 18344 for arrays (for which we have base objects). Pointer accesses are 18345 represented as a one-dimensional access that starts from the first 18346 location accessed in the loop. For example: 18347 18348 for1 i 18349 for2 j 18350 *((int *)p + i + j) = a[i][j]; 18351 18352 The access function of the pointer access is '{0, + 4B}_for2' 18353 relative to 'p + i'. The access functions of the array are 18354 '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative 18355 to 'a'. 18356 18357 Usually, the object the pointer refers to is either unknown, or we 18358 can't prove that the access is confined to the boundaries of a 18359 certain object. 18360 18361 Two data references can be compared only if at least one of these 18362 two representations has all its fields filled for both data 18363 references. 18364 18365 The current strategy for data dependence tests is as follows: If 18366 both 'a' and 'b' are represented as arrays, compare 'a.base_object' 18367 and 'b.base_object'; if they are equal, apply dependence tests (use 18368 access functions based on base_objects). Else if both 'a' and 'b' 18369 are represented as pointers, compare 'a.first_location' and 18370 'b.first_location'; if they are equal, apply dependence tests (use 18371 access functions based on first location). However, if 'a' and 'b' 18372 are represented differently, only try to prove that the bases are 18373 definitely different. 18374 18375 * Aliasing information. 18376 * Alignment information. 18377 18378 The structure describing the relation between two data references is 18379'data_dependence_relation' and the shorter name for a pointer to such a 18380structure is 'ddr_p'. This structure contains: 18381 18382 * a pointer to each data reference, 18383 * a tree node 'are_dependent' that is set to 'chrec_known' if the 18384 analysis has proved that there is no dependence between these two 18385 data references, 'chrec_dont_know' if the analysis was not able to 18386 determine any useful result and potentially there could exist a 18387 dependence between these data references, and 'are_dependent' is 18388 set to 'NULL_TREE' if there exist a dependence relation between the 18389 data references, and the description of this dependence relation is 18390 given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays, 18391 * a boolean that determines whether the dependence relation can be 18392 represented by a classical distance vector, 18393 * an array 'subscripts' that contains a description of each subscript 18394 of the data references. Given two array accesses a subscript is 18395 the tuple composed of the access functions for a given dimension. 18396 For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are 18397 three subscripts: '(f1, g1), (f2, g2), (f3, g3)'. 18398 * two arrays 'dir_vects' and 'dist_vects' that contain classical 18399 representations of the data dependences under the form of direction 18400 and distance dependence vectors, 18401 * an array of loops 'loop_nest' that contains the loops to which the 18402 distance and direction vectors refer to. 18403 18404 Several functions for pretty printing the information extracted by the 18405data dependence analysis are available: 'dump_ddrs' prints with a 18406maximum verbosity the details of a data dependence relations array, 18407'dump_dist_dir_vectors' prints only the classical distance and direction 18408vectors for a data dependence relations array, and 18409'dump_data_references' prints the details of the data references 18410contained in a data reference array. 18411 18412 18413File: gccint.info, Node: Omega, Prev: Dependency analysis, Up: Loop Analysis and Representation 18414 1841515.9 Omega a solver for linear programming problems 18416=================================================== 18417 18418The data dependence analysis contains several solvers triggered 18419sequentially from the less complex ones to the more sophisticated. For 18420ensuring the consistency of the results of these solvers, a data 18421dependence check pass has been implemented based on two different 18422solvers. The second method that has been integrated to GCC is based on 18423the Omega dependence solver, written in the 1990's by William Pugh and 18424David Wonnacott. Data dependence tests can be formulated using a subset 18425of the Presburger arithmetics that can be translated to linear 18426constraint systems. These linear constraint systems can then be solved 18427using the Omega solver. 18428 18429 The Omega solver is using Fourier-Motzkin's algorithm for variable 18430elimination: a linear constraint system containing 'n' variables is 18431reduced to a linear constraint system with 'n-1' variables. The Omega 18432solver can also be used for solving other problems that can be expressed 18433under the form of a system of linear equalities and inequalities. The 18434Omega solver is known to have an exponential worst case, also known 18435under the name of "omega nightmare" in the literature, but in practice, 18436the omega test is known to be efficient for the common data dependence 18437tests. 18438 18439 The interface used by the Omega solver for describing the linear 18440programming problems is described in 'omega.h', and the solver is 18441'omega_solve_problem'. 18442 18443 18444File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 18445 1844616 Machine Descriptions 18447*********************** 18448 18449A machine description has two parts: a file of instruction patterns 18450('.md' file) and a C header file of macro definitions. 18451 18452 The '.md' file for a target machine contains a pattern for each 18453instruction that the target machine supports (or at least each 18454instruction that is worth telling the compiler about). It may also 18455contain comments. A semicolon causes the rest of the line to be a 18456comment, unless the semicolon is inside a quoted string. 18457 18458 See the next chapter for information on the C header file. 18459 18460* Menu: 18461 18462* Overview:: How the machine description is used. 18463* Patterns:: How to write instruction patterns. 18464* Example:: An explained example of a 'define_insn' pattern. 18465* RTL Template:: The RTL template defines what insns match a pattern. 18466* Output Template:: The output template says how to make assembler code 18467 from such an insn. 18468* Output Statement:: For more generality, write C code to output 18469 the assembler code. 18470* Predicates:: Controlling what kinds of operands can be used 18471 for an insn. 18472* Constraints:: Fine-tuning operand selection. 18473* Standard Names:: Names mark patterns to use for code generation. 18474* Pattern Ordering:: When the order of patterns makes a difference. 18475* Dependent Patterns:: Having one pattern may make you need another. 18476* Jump Patterns:: Special considerations for patterns for jump insns. 18477* Looping Patterns:: How to define patterns for special looping insns. 18478* Insn Canonicalizations::Canonicalization of Instructions 18479* Expander Definitions::Generating a sequence of several RTL insns 18480 for a standard operation. 18481* Insn Splitting:: Splitting Instructions into Multiple Instructions. 18482* Including Patterns:: Including Patterns in Machine Descriptions. 18483* Peephole Definitions::Defining machine-specific peephole optimizations. 18484* Insn Attributes:: Specifying the value of attributes for generated insns. 18485* Conditional Execution::Generating 'define_insn' patterns for 18486 predication. 18487* Define Subst:: Generating 'define_insn' and 'define_expand' 18488 patterns from other patterns. 18489* Constant Definitions::Defining symbolic constants that can be used in the 18490 md file. 18491* Iterators:: Using iterators to generate patterns from a template. 18492 18493 18494File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 18495 1849616.1 Overview of How the Machine Description is Used 18497==================================================== 18498 18499There are three main conversions that happen in the compiler: 18500 18501 1. The front end reads the source code and builds a parse tree. 18502 18503 2. The parse tree is used to generate an RTL insn list based on named 18504 instruction patterns. 18505 18506 3. The insn list is matched against the RTL templates to produce 18507 assembler code. 18508 18509 For the generate pass, only the names of the insns matter, from either 18510a named 'define_insn' or a 'define_expand'. The compiler will choose 18511the pattern with the right name and apply the operands according to the 18512documentation later in this chapter, without regard for the RTL template 18513or operand constraints. Note that the names the compiler looks for are 18514hard-coded in the compiler--it will ignore unnamed patterns and patterns 18515with names it doesn't know about, but if you don't provide a named 18516pattern it needs, it will abort. 18517 18518 If a 'define_insn' is used, the template given is inserted into the 18519insn list. If a 'define_expand' is used, one of three things happens, 18520based on the condition logic. The condition logic may manually create 18521new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'. 18522For certain named patterns, it may invoke 'FAIL' to tell the compiler to 18523use an alternate way of performing that task. If it invokes neither 18524'DONE' nor 'FAIL', the template given in the pattern is inserted, as if 18525the 'define_expand' were a 'define_insn'. 18526 18527 Once the insn list is generated, various optimization passes convert, 18528replace, and rearrange the insns in the insn list. This is where the 18529'define_split' and 'define_peephole' patterns get used, for example. 18530 18531 Finally, the insn list's RTL is matched up with the RTL templates in 18532the 'define_insn' patterns, and those patterns are used to emit the 18533final assembly code. For this purpose, each named 'define_insn' acts 18534like it's unnamed, since the names are ignored. 18535 18536 18537File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 18538 1853916.2 Everything about Instruction Patterns 18540========================================== 18541 18542A 'define_insn' expression is used to define instruction patterns to 18543which insns may be matched. A 'define_insn' expression contains an 18544incomplete RTL expression, with pieces to be filled in later, operand 18545constraints that restrict how the pieces can be filled in, and an output 18546template or C code to generate the assembler output. 18547 18548 A 'define_insn' is an RTL expression containing four or five operands: 18549 18550 1. An optional name. The presence of a name indicate that this 18551 instruction pattern can perform a certain standard job for the 18552 RTL-generation pass of the compiler. This pass knows certain names 18553 and will use the instruction patterns with those names, if the 18554 names are defined in the machine description. 18555 18556 The absence of a name is indicated by writing an empty string where 18557 the name should go. Nameless instruction patterns are never used 18558 for generating RTL code, but they may permit several simpler insns 18559 to be combined later on. 18560 18561 Names that are not thus known and used in RTL-generation have no 18562 effect; they are equivalent to no name at all. 18563 18564 For the purpose of debugging the compiler, you may also specify a 18565 name beginning with the '*' character. Such a name is used only 18566 for identifying the instruction in RTL dumps; it is equivalent to 18567 having a nameless pattern for all other purposes. Names beginning 18568 with the '*' character are not required to be unique. 18569 18570 2. The "RTL template": This is a vector of incomplete RTL expressions 18571 which describe the semantics of the instruction (*note RTL 18572 Template::). It is incomplete because it may contain 18573 'match_operand', 'match_operator', and 'match_dup' expressions that 18574 stand for operands of the instruction. 18575 18576 If the vector has multiple elements, the RTL template is treated as 18577 a 'parallel' expression. 18578 18579 3. The condition: This is a string which contains a C expression. 18580 When the compiler attempts to match RTL against a pattern, the 18581 condition is evaluated. If the condition evaluates to 'true', the 18582 match is permitted. The condition may be an empty string, which is 18583 treated as always 'true'. 18584 18585 For a named pattern, the condition may not depend on the data in 18586 the insn being matched, but only the target-machine-type flags. 18587 The compiler needs to test these conditions during initialization 18588 in order to learn exactly which named instructions are available in 18589 a particular run. 18590 18591 For nameless patterns, the condition is applied only when matching 18592 an individual insn, and only after the insn has matched the 18593 pattern's recognition template. The insn's operands may be found 18594 in the vector 'operands'. 18595 18596 For an insn where the condition has once matched, it cannot later 18597 be used to control register allocation by excluding certain 18598 register or value combinations. 18599 18600 4. The "output template" or "output statement": This is either a 18601 string, or a fragment of C code which returns a string. 18602 18603 When simple substitution isn't general enough, you can specify a 18604 piece of C code to compute the output. *Note Output Statement::. 18605 18606 5. The "insn attributes": This is an optional vector containing the 18607 values of attributes for insns matching this pattern (*note Insn 18608 Attributes::). 18609 18610 18611File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 18612 1861316.3 Example of 'define_insn' 18614============================= 18615 18616Here is an example of an instruction pattern, taken from the machine 18617description for the 68000/68020. 18618 18619 (define_insn "tstsi" 18620 [(set (cc0) 18621 (match_operand:SI 0 "general_operand" "rm"))] 18622 "" 18623 "* 18624 { 18625 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18626 return \"tstl %0\"; 18627 return \"cmpl #0,%0\"; 18628 }") 18629 18630This can also be written using braced strings: 18631 18632 (define_insn "tstsi" 18633 [(set (cc0) 18634 (match_operand:SI 0 "general_operand" "rm"))] 18635 "" 18636 { 18637 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18638 return "tstl %0"; 18639 return "cmpl #0,%0"; 18640 }) 18641 18642 This describes an instruction which sets the condition codes based on 18643the value of a general operand. It has no condition, so any insn with 18644an RTL description of the form shown may be matched to this pattern. 18645The name 'tstsi' means "test a 'SImode' value" and tells the RTL 18646generation pass that, when it is necessary to test such a value, an insn 18647to do so can be constructed using this pattern. 18648 18649 The output control string is a piece of C code which chooses which 18650output template to return based on the kind of operand and the specific 18651type of CPU for which code is being generated. 18652 18653 '"rm"' is an operand constraint. Its meaning is explained below. 18654 18655 18656File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 18657 1865816.4 RTL Template 18659================= 18660 18661The RTL template is used to define which insns match the particular 18662pattern and how to find their operands. For named patterns, the RTL 18663template also says how to construct an insn from specified operands. 18664 18665 Construction involves substituting specified operands into a copy of 18666the template. Matching involves determining the values that serve as 18667the operands in the insn being matched. Both of these activities are 18668controlled by special expression types that direct matching and 18669substitution of the operands. 18670 18671'(match_operand:M N PREDICATE CONSTRAINT)' 18672 This expression is a placeholder for operand number N of the insn. 18673 When constructing an insn, operand number N will be substituted at 18674 this point. When matching an insn, whatever appears at this 18675 position in the insn will be taken as operand number N; but it must 18676 satisfy PREDICATE or this instruction pattern will not match at 18677 all. 18678 18679 Operand numbers must be chosen consecutively counting from zero in 18680 each instruction pattern. There may be only one 'match_operand' 18681 expression in the pattern for each operand number. Usually 18682 operands are numbered in the order of appearance in 'match_operand' 18683 expressions. In the case of a 'define_expand', any operand numbers 18684 used only in 'match_dup' expressions have higher values than all 18685 other operand numbers. 18686 18687 PREDICATE is a string that is the name of a function that accepts 18688 two arguments, an expression and a machine mode. *Note 18689 Predicates::. During matching, the function will be called with 18690 the putative operand as the expression and M as the mode argument 18691 (if M is not specified, 'VOIDmode' will be used, which normally 18692 causes PREDICATE to accept any mode). If it returns zero, this 18693 instruction pattern fails to match. PREDICATE may be an empty 18694 string; then it means no test is to be done on the operand, so 18695 anything which occurs in this position is valid. 18696 18697 Most of the time, PREDICATE will reject modes other than M--but not 18698 always. For example, the predicate 'address_operand' uses M as the 18699 mode of memory ref that the address should be valid for. Many 18700 predicates accept 'const_int' nodes even though their mode is 18701 'VOIDmode'. 18702 18703 CONSTRAINT controls reloading and the choice of the best register 18704 class to use for a value, as explained later (*note Constraints::). 18705 If the constraint would be an empty string, it can be omitted. 18706 18707 People are often unclear on the difference between the constraint 18708 and the predicate. The predicate helps decide whether a given insn 18709 matches the pattern. The constraint plays no role in this 18710 decision; instead, it controls various decisions in the case of an 18711 insn which does match. 18712 18713'(match_scratch:M N CONSTRAINT)' 18714 This expression is also a placeholder for operand number N and 18715 indicates that operand must be a 'scratch' or 'reg' expression. 18716 18717 When matching patterns, this is equivalent to 18718 18719 (match_operand:M N "scratch_operand" CONSTRAINT) 18720 18721 but, when generating RTL, it produces a ('scratch':M) expression. 18722 18723 If the last few expressions in a 'parallel' are 'clobber' 18724 expressions whose operands are either a hard register or 18725 'match_scratch', the combiner can add or delete them when 18726 necessary. *Note Side Effects::. 18727 18728'(match_dup N)' 18729 This expression is also a placeholder for operand number N. It is 18730 used when the operand needs to appear more than once in the insn. 18731 18732 In construction, 'match_dup' acts just like 'match_operand': the 18733 operand is substituted into the insn being constructed. But in 18734 matching, 'match_dup' behaves differently. It assumes that operand 18735 number N has already been determined by a 'match_operand' appearing 18736 earlier in the recognition template, and it matches only an 18737 identical-looking expression. 18738 18739 Note that 'match_dup' should not be used to tell the compiler that 18740 a particular register is being used for two operands (example: 18741 'add' that adds one register to another; the second register is 18742 both an input operand and the output operand). Use a matching 18743 constraint (*note Simple Constraints::) for those. 'match_dup' is 18744 for the cases where one operand is used in two places in the 18745 template, such as an instruction that computes both a quotient and 18746 a remainder, where the opcode takes two input operands but the RTL 18747 template has to refer to each of those twice; once for the quotient 18748 pattern and once for the remainder pattern. 18749 18750'(match_operator:M N PREDICATE [OPERANDS...])' 18751 This pattern is a kind of placeholder for a variable RTL expression 18752 code. 18753 18754 When constructing an insn, it stands for an RTL expression whose 18755 expression code is taken from that of operand N, and whose operands 18756 are constructed from the patterns OPERANDS. 18757 18758 When matching an expression, it matches an expression if the 18759 function PREDICATE returns nonzero on that expression _and_ the 18760 patterns OPERANDS match the operands of the expression. 18761 18762 Suppose that the function 'commutative_operator' is defined as 18763 follows, to match any expression whose operator is one of the 18764 commutative arithmetic operators of RTL and whose mode is MODE: 18765 18766 int 18767 commutative_integer_operator (x, mode) 18768 rtx x; 18769 machine_mode mode; 18770 { 18771 enum rtx_code code = GET_CODE (x); 18772 if (GET_MODE (x) != mode) 18773 return 0; 18774 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 18775 || code == EQ || code == NE); 18776 } 18777 18778 Then the following pattern will match any RTL expression consisting 18779 of a commutative operator applied to two general operands: 18780 18781 (match_operator:SI 3 "commutative_operator" 18782 [(match_operand:SI 1 "general_operand" "g") 18783 (match_operand:SI 2 "general_operand" "g")]) 18784 18785 Here the vector '[OPERANDS...]' contains two patterns because the 18786 expressions to be matched all contain two operands. 18787 18788 When this pattern does match, the two operands of the commutative 18789 operator are recorded as operands 1 and 2 of the insn. (This is 18790 done by the two instances of 'match_operand'.) Operand 3 of the 18791 insn will be the entire commutative expression: use 'GET_CODE 18792 (operands[3])' to see which commutative operator was used. 18793 18794 The machine mode M of 'match_operator' works like that of 18795 'match_operand': it is passed as the second argument to the 18796 predicate function, and that function is solely responsible for 18797 deciding whether the expression to be matched "has" that mode. 18798 18799 When constructing an insn, argument 3 of the gen-function will 18800 specify the operation (i.e. the expression code) for the expression 18801 to be made. It should be an RTL expression, whose expression code 18802 is copied into a new expression whose operands are arguments 1 and 18803 2 of the gen-function. The subexpressions of argument 3 are not 18804 used; only its expression code matters. 18805 18806 When 'match_operator' is used in a pattern for matching an insn, it 18807 usually best if the operand number of the 'match_operator' is 18808 higher than that of the actual operands of the insn. This improves 18809 register allocation because the register allocator often looks at 18810 operands 1 and 2 of insns to see if it can do register tying. 18811 18812 There is no way to specify constraints in 'match_operator'. The 18813 operand of the insn which corresponds to the 'match_operator' never 18814 has any constraints because it is never reloaded as a whole. 18815 However, if parts of its OPERANDS are matched by 'match_operand' 18816 patterns, those parts may have constraints of their own. 18817 18818'(match_op_dup:M N[OPERANDS...])' 18819 Like 'match_dup', except that it applies to operators instead of 18820 operands. When constructing an insn, operand number N will be 18821 substituted at this point. But in matching, 'match_op_dup' behaves 18822 differently. It assumes that operand number N has already been 18823 determined by a 'match_operator' appearing earlier in the 18824 recognition template, and it matches only an identical-looking 18825 expression. 18826 18827'(match_parallel N PREDICATE [SUBPAT...])' 18828 This pattern is a placeholder for an insn that consists of a 18829 'parallel' expression with a variable number of elements. This 18830 expression should only appear at the top level of an insn pattern. 18831 18832 When constructing an insn, operand number N will be substituted at 18833 this point. When matching an insn, it matches if the body of the 18834 insn is a 'parallel' expression with at least as many elements as 18835 the vector of SUBPAT expressions in the 'match_parallel', if each 18836 SUBPAT matches the corresponding element of the 'parallel', _and_ 18837 the function PREDICATE returns nonzero on the 'parallel' that is 18838 the body of the insn. It is the responsibility of the predicate to 18839 validate elements of the 'parallel' beyond those listed in the 18840 'match_parallel'. 18841 18842 A typical use of 'match_parallel' is to match load and store 18843 multiple expressions, which can contain a variable number of 18844 elements in a 'parallel'. For example, 18845 18846 (define_insn "" 18847 [(match_parallel 0 "load_multiple_operation" 18848 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 18849 (match_operand:SI 2 "memory_operand" "m")) 18850 (use (reg:SI 179)) 18851 (clobber (reg:SI 179))])] 18852 "" 18853 "loadm 0,0,%1,%2") 18854 18855 This example comes from 'a29k.md'. The function 18856 'load_multiple_operation' is defined in 'a29k.c' and checks that 18857 subsequent elements in the 'parallel' are the same as the 'set' in 18858 the pattern, except that they are referencing subsequent registers 18859 and memory locations. 18860 18861 An insn that matches this pattern might look like: 18862 18863 (parallel 18864 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 18865 (use (reg:SI 179)) 18866 (clobber (reg:SI 179)) 18867 (set (reg:SI 21) 18868 (mem:SI (plus:SI (reg:SI 100) 18869 (const_int 4)))) 18870 (set (reg:SI 22) 18871 (mem:SI (plus:SI (reg:SI 100) 18872 (const_int 8))))]) 18873 18874'(match_par_dup N [SUBPAT...])' 18875 Like 'match_op_dup', but for 'match_parallel' instead of 18876 'match_operator'. 18877 18878 18879File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 18880 1888116.5 Output Templates and Operand Substitution 18882============================================== 18883 18884The "output template" is a string which specifies how to output the 18885assembler code for an instruction pattern. Most of the template is a 18886fixed string which is output literally. The character '%' is used to 18887specify where to substitute an operand; it can also be used to identify 18888places where different variants of the assembler require different 18889syntax. 18890 18891 In the simplest case, a '%' followed by a digit N says to output 18892operand N at that point in the string. 18893 18894 '%' followed by a letter and a digit says to output an operand in an 18895alternate fashion. Four letters have standard, built-in meanings 18896described below. The machine description macro 'PRINT_OPERAND' can 18897define additional letters with nonstandard meanings. 18898 18899 '%cDIGIT' can be used to substitute an operand that is a constant value 18900without the syntax that normally indicates an immediate operand. 18901 18902 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is 18903negated before printing. 18904 18905 '%aDIGIT' can be used to substitute an operand as if it were a memory 18906reference, with the actual operand treated as the address. This may be 18907useful when outputting a "load address" instruction, because often the 18908assembler syntax for such an instruction requires you to write the 18909operand as if it were a memory reference. 18910 18911 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction. 18912 18913 '%=' outputs a number which is unique to each instruction in the entire 18914compilation. This is useful for making local labels to be referred to 18915more than once in a single template that generates multiple assembler 18916instructions. 18917 18918 '%' followed by a punctuation character specifies a substitution that 18919does not use an operand. Only one case is standard: '%%' outputs a '%' 18920into the assembler code. Other nonstandard cases can be defined in the 18921'PRINT_OPERAND' macro. You must also define which punctuation 18922characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro. 18923 18924 The template may generate multiple assembler instructions. Write the 18925text for the instructions, with '\;' between them. 18926 18927 When the RTL contains two operands which are required by constraint to 18928match each other, the output template must refer only to the 18929lower-numbered operand. Matching operands are not always identical, and 18930the rest of the compiler arranges to put the proper RTL expression for 18931printing into the lower-numbered operand. 18932 18933 One use of nonstandard letters or punctuation following '%' is to 18934distinguish between different assembler languages for the same machine; 18935for example, Motorola syntax versus MIT syntax for the 68000. Motorola 18936syntax requires periods in most opcode names, while MIT syntax does not. 18937For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola 18938syntax. The same file of patterns is used for both kinds of output 18939syntax, but the character sequence '%.' is used in each place where 18940Motorola syntax wants a period. The 'PRINT_OPERAND' macro for Motorola 18941syntax defines the sequence to output a period; the macro for MIT syntax 18942defines it to do nothing. 18943 18944 As a special case, a template consisting of the single character '#' 18945instructs the compiler to first split the insn, and then output the 18946resulting instructions separately. This helps eliminate redundancy in 18947the output templates. If you have a 'define_insn' that needs to emit 18948multiple assembler instructions, and there is a matching 'define_split' 18949already defined, then you can simply use '#' as the output template 18950instead of writing an output template that emits the multiple assembler 18951instructions. 18952 18953 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of 18954the form '{option0|option1|option2}' in the templates. These describe 18955multiple variants of assembler language syntax. *Note Instruction 18956Output::. 18957 18958 18959File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 18960 1896116.6 C Statements for Assembler Output 18962====================================== 18963 18964Often a single fixed template string cannot produce correct and 18965efficient assembler code for all the cases that are recognized by a 18966single instruction pattern. For example, the opcodes may depend on the 18967kinds of operands; or some unfortunate combinations of operands may 18968require extra machine instructions. 18969 18970 If the output control string starts with a '@', then it is actually a 18971series of templates, each on a separate line. (Blank lines and leading 18972spaces and tabs are ignored.) The templates correspond to the pattern's 18973constraint alternatives (*note Multi-Alternative::). For example, if a 18974target machine has a two-address add instruction 'addr' to add into a 18975register and another 'addm' to add a register to memory, you might write 18976this pattern: 18977 18978 (define_insn "addsi3" 18979 [(set (match_operand:SI 0 "general_operand" "=r,m") 18980 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 18981 (match_operand:SI 2 "general_operand" "g,r")))] 18982 "" 18983 "@ 18984 addr %2,%0 18985 addm %2,%0") 18986 18987 If the output control string starts with a '*', then it is not an 18988output template but rather a piece of C program that should compute a 18989template. It should execute a 'return' statement to return the 18990template-string you want. Most such templates use C string literals, 18991which require doublequote characters to delimit them. To include these 18992doublequote characters in the string, prefix each one with '\'. 18993 18994 If the output control string is written as a brace block instead of a 18995double-quoted string, it is automatically assumed to be C code. In that 18996case, it is not necessary to put in a leading asterisk, or to escape the 18997doublequotes surrounding C string literals. 18998 18999 The operands may be found in the array 'operands', whose C data type is 19000'rtx []'. 19001 19002 It is very common to select different ways of generating assembler code 19003based on whether an immediate operand is within a certain range. Be 19004careful when doing this, because the result of 'INTVAL' is an integer on 19005the host machine. If the host machine has more bits in an 'int' than 19006the target machine has in the mode in which the constant will be used, 19007then some of the bits you get from 'INTVAL' will be superfluous. For 19008proper results, you must carefully disregard the values of those bits. 19009 19010 It is possible to output an assembler instruction and then go on to 19011output or compute more of them, using the subroutine 'output_asm_insn'. 19012This receives two arguments: a template-string and a vector of operands. 19013The vector may be 'operands', or it may be another array of 'rtx' that 19014you declare locally and initialize yourself. 19015 19016 When an insn pattern has multiple alternatives in its constraints, 19017often the appearance of the assembler code is determined mostly by which 19018alternative was matched. When this is so, the C code can test the 19019variable 'which_alternative', which is the ordinal number of the 19020alternative that was actually satisfied (0 for the first, 1 for the 19021second alternative, etc.). 19022 19023 For example, suppose there are two opcodes for storing zero, 'clrreg' 19024for registers and 'clrmem' for memory locations. Here is how a pattern 19025could use 'which_alternative' to choose between them: 19026 19027 (define_insn "" 19028 [(set (match_operand:SI 0 "general_operand" "=r,m") 19029 (const_int 0))] 19030 "" 19031 { 19032 return (which_alternative == 0 19033 ? "clrreg %0" : "clrmem %0"); 19034 }) 19035 19036 The example above, where the assembler code to generate was _solely_ 19037determined by the alternative, could also have been specified as 19038follows, having the output control string start with a '@': 19039 19040 (define_insn "" 19041 [(set (match_operand:SI 0 "general_operand" "=r,m") 19042 (const_int 0))] 19043 "" 19044 "@ 19045 clrreg %0 19046 clrmem %0") 19047 19048 If you just need a little bit of C code in one (or a few) alternatives, 19049you can use '*' inside of a '@' multi-alternative template: 19050 19051 (define_insn "" 19052 [(set (match_operand:SI 0 "general_operand" "=r,<,m") 19053 (const_int 0))] 19054 "" 19055 "@ 19056 clrreg %0 19057 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\"; 19058 clrmem %0") 19059 19060 19061File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 19062 1906316.7 Predicates 19064=============== 19065 19066A predicate determines whether a 'match_operand' or 'match_operator' 19067expression matches, and therefore whether the surrounding instruction 19068pattern will be used for that combination of operands. GCC has a number 19069of machine-independent predicates, and you can define machine-specific 19070predicates as needed. By convention, predicates used with 19071'match_operand' have names that end in '_operand', and those used with 19072'match_operator' have names that end in '_operator'. 19073 19074 All predicates are Boolean functions (in the mathematical sense) of two 19075arguments: the RTL expression that is being considered at that position 19076in the instruction pattern, and the machine mode that the 19077'match_operand' or 'match_operator' specifies. In this section, the 19078first argument is called OP and the second argument MODE. Predicates 19079can be called from C as ordinary two-argument functions; this can be 19080useful in output templates or other machine-specific code. 19081 19082 Operand predicates can allow operands that are not actually acceptable 19083to the hardware, as long as the constraints give reload the ability to 19084fix them up (*note Constraints::). However, GCC will usually generate 19085better code if the predicates specify the requirements of the machine 19086instructions as closely as possible. Reload cannot fix up operands that 19087must be constants ("immediate operands"); you must use a predicate that 19088allows only constants, or else enforce the requirement in the extra 19089condition. 19090 19091 Most predicates handle their MODE argument in a uniform manner. If 19092MODE is 'VOIDmode' (unspecified), then OP can have any mode. If MODE is 19093anything else, then OP must have the same mode, unless OP is a 19094'CONST_INT' or integer 'CONST_DOUBLE'. These RTL expressions always 19095have 'VOIDmode', so it would be counterproductive to check that their 19096mode matches. Instead, predicates that accept 'CONST_INT' and/or 19097integer 'CONST_DOUBLE' check that the value stored in the constant will 19098fit in the requested mode. 19099 19100 Predicates with this behavior are called "normal". 'genrecog' can 19101optimize the instruction recognizer based on knowledge of how normal 19102predicates treat modes. It can also diagnose certain kinds of common 19103errors in the use of normal predicates; for instance, it is almost 19104always an error to use a normal predicate without specifying a mode. 19105 19106 Predicates that do something different with their MODE argument are 19107called "special". The generic predicates 'address_operand' and 19108'pmode_register_operand' are special predicates. 'genrecog' does not do 19109any optimizations or diagnosis when special predicates are used. 19110 19111* Menu: 19112 19113* Machine-Independent Predicates:: Predicates available to all back ends. 19114* Defining Predicates:: How to write machine-specific predicate 19115 functions. 19116 19117 19118File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 19119 1912016.7.1 Machine-Independent Predicates 19121------------------------------------- 19122 19123These are the generic predicates available to all back ends. They are 19124defined in 'recog.c'. The first category of predicates allow only 19125constant, or "immediate", operands. 19126 19127 -- Function: immediate_operand 19128 This predicate allows any sort of constant that fits in MODE. It 19129 is an appropriate choice for instructions that take operands that 19130 must be constant. 19131 19132 -- Function: const_int_operand 19133 This predicate allows any 'CONST_INT' expression that fits in MODE. 19134 It is an appropriate choice for an immediate operand that does not 19135 allow a symbol or label. 19136 19137 -- Function: const_double_operand 19138 This predicate accepts any 'CONST_DOUBLE' expression that has 19139 exactly MODE. If MODE is 'VOIDmode', it will also accept 19140 'CONST_INT'. It is intended for immediate floating point 19141 constants. 19142 19143The second category of predicates allow only some kind of machine 19144register. 19145 19146 -- Function: register_operand 19147 This predicate allows any 'REG' or 'SUBREG' expression that is 19148 valid for MODE. It is often suitable for arithmetic instruction 19149 operands on a RISC machine. 19150 19151 -- Function: pmode_register_operand 19152 This is a slight variant on 'register_operand' which works around a 19153 limitation in the machine-description reader. 19154 19155 (match_operand N "pmode_register_operand" CONSTRAINT) 19156 19157 means exactly what 19158 19159 (match_operand:P N "register_operand" CONSTRAINT) 19160 19161 would mean, if the machine-description reader accepted ':P' mode 19162 suffixes. Unfortunately, it cannot, because 'Pmode' is an alias 19163 for some other mode, and might vary with machine-specific options. 19164 *Note Misc::. 19165 19166 -- Function: scratch_operand 19167 This predicate allows hard registers and 'SCRATCH' expressions, but 19168 not pseudo-registers. It is used internally by 'match_scratch'; it 19169 should not be used directly. 19170 19171The third category of predicates allow only some kind of memory 19172reference. 19173 19174 -- Function: memory_operand 19175 This predicate allows any valid reference to a quantity of mode 19176 MODE in memory, as determined by the weak form of 19177 'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 19178 19179 -- Function: address_operand 19180 This predicate is a little unusual; it allows any operand that is a 19181 valid expression for the _address_ of a quantity of mode MODE, 19182 again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'. 19183 To first order, if '(mem:MODE (EXP))' is acceptable to 19184 'memory_operand', then EXP is acceptable to 'address_operand'. 19185 Note that EXP does not necessarily have the mode MODE. 19186 19187 -- Function: indirect_operand 19188 This is a stricter form of 'memory_operand' which allows only 19189 memory references with a 'general_operand' as the address 19190 expression. New uses of this predicate are discouraged, because 19191 'general_operand' is very permissive, so it's hard to tell what an 19192 'indirect_operand' does or does not allow. If a target has 19193 different requirements for memory operands for different 19194 instructions, it is better to define target-specific predicates 19195 which enforce the hardware's requirements explicitly. 19196 19197 -- Function: push_operand 19198 This predicate allows a memory reference suitable for pushing a 19199 value onto the stack. This will be a 'MEM' which refers to 19200 'stack_pointer_rtx', with a side-effect in its address expression 19201 (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE' 19202 macro (*note Frame Layout::). 19203 19204 -- Function: pop_operand 19205 This predicate allows a memory reference suitable for popping a 19206 value off the stack. Again, this will be a 'MEM' referring to 19207 'stack_pointer_rtx', with a side-effect in its address expression. 19208 However, this time 'STACK_POP_CODE' is expected. 19209 19210The fourth category of predicates allow some combination of the above 19211operands. 19212 19213 -- Function: nonmemory_operand 19214 This predicate allows any immediate or register operand valid for 19215 MODE. 19216 19217 -- Function: nonimmediate_operand 19218 This predicate allows any register or memory operand valid for 19219 MODE. 19220 19221 -- Function: general_operand 19222 This predicate allows any immediate, register, or memory operand 19223 valid for MODE. 19224 19225Finally, there are two generic operator predicates. 19226 19227 -- Function: comparison_operator 19228 This predicate matches any expression which performs an arithmetic 19229 comparison in MODE; that is, 'COMPARISON_P' is true for the 19230 expression code. 19231 19232 -- Function: ordered_comparison_operator 19233 This predicate matches any expression which performs an arithmetic 19234 comparison in MODE and whose expression code is valid for integer 19235 modes; that is, the expression code will be one of 'eq', 'ne', 19236 'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'. 19237 19238 19239File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 19240 1924116.7.2 Defining Machine-Specific Predicates 19242------------------------------------------- 19243 19244Many machines have requirements for their operands that cannot be 19245expressed precisely using the generic predicates. You can define 19246additional predicates using 'define_predicate' and 19247'define_special_predicate' expressions. These expressions have three 19248operands: 19249 19250 * The name of the predicate, as it will be referred to in 19251 'match_operand' or 'match_operator' expressions. 19252 19253 * An RTL expression which evaluates to true if the predicate allows 19254 the operand OP, false if it does not. This expression can only use 19255 the following RTL codes: 19256 19257 'MATCH_OPERAND' 19258 When written inside a predicate expression, a 'MATCH_OPERAND' 19259 expression evaluates to true if the predicate it names would 19260 allow OP. The operand number and constraint are ignored. Due 19261 to limitations in 'genrecog', you can only refer to generic 19262 predicates and predicates that have already been defined. 19263 19264 'MATCH_CODE' 19265 This expression evaluates to true if OP or a specified 19266 subexpression of OP has one of a given list of RTX codes. 19267 19268 The first operand of this expression is a string constant 19269 containing a comma-separated list of RTX code names (in lower 19270 case). These are the codes for which the 'MATCH_CODE' will be 19271 true. 19272 19273 The second operand is a string constant which indicates what 19274 subexpression of OP to examine. If it is absent or the empty 19275 string, OP itself is examined. Otherwise, the string constant 19276 must be a sequence of digits and/or lowercase letters. Each 19277 character indicates a subexpression to extract from the 19278 current expression; for the first character this is OP, for 19279 the second and subsequent characters it is the result of the 19280 previous character. A digit N extracts 'XEXP (E, N)'; a 19281 letter L extracts 'XVECEXP (E, 0, N)' where N is the 19282 alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on). 19283 The 'MATCH_CODE' then examines the RTX code of the 19284 subexpression extracted by the complete string. It is not 19285 possible to extract components of an 'rtvec' that is not at 19286 position 0 within its RTX object. 19287 19288 'MATCH_TEST' 19289 This expression has one operand, a string constant containing 19290 a C expression. The predicate's arguments, OP and MODE, are 19291 available with those names in the C expression. The 19292 'MATCH_TEST' evaluates to true if the C expression evaluates 19293 to a nonzero value. 'MATCH_TEST' expressions must not have 19294 side effects. 19295 19296 'AND' 19297 'IOR' 19298 'NOT' 19299 'IF_THEN_ELSE' 19300 The basic 'MATCH_' expressions can be combined using these 19301 logical operators, which have the semantics of the C operators 19302 '&&', '||', '!', and '? :' respectively. As in Common Lisp, 19303 you may give an 'AND' or 'IOR' expression an arbitrary number 19304 of arguments; this has exactly the same effect as writing a 19305 chain of two-argument 'AND' or 'IOR' expressions. 19306 19307 * An optional block of C code, which should execute 'return true' if 19308 the predicate is found to match and 'return false' if it does not. 19309 It must not have any side effects. The predicate arguments, OP and 19310 MODE, are available with those names. 19311 19312 If a code block is present in a predicate definition, then the RTL 19313 expression must evaluate to true _and_ the code block must execute 19314 'return true' for the predicate to allow the operand. The RTL 19315 expression is evaluated first; do not re-check anything in the code 19316 block that was checked in the RTL expression. 19317 19318 The program 'genrecog' scans 'define_predicate' and 19319'define_special_predicate' expressions to determine which RTX codes are 19320possibly allowed. You should always make this explicit in the RTL 19321predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'. 19322 19323 Here is an example of a simple predicate definition, from the IA64 19324machine description: 19325 19326 ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section. 19327 (define_predicate "small_addr_symbolic_operand" 19328 (and (match_code "symbol_ref") 19329 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 19330 19331And here is another, showing the use of the C block. 19332 19333 ;; True if OP is a register operand that is (or could be) a GR reg. 19334 (define_predicate "gr_register_operand" 19335 (match_operand 0 "register_operand") 19336 { 19337 unsigned int regno; 19338 if (GET_CODE (op) == SUBREG) 19339 op = SUBREG_REG (op); 19340 19341 regno = REGNO (op); 19342 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 19343 }) 19344 19345 Predicates written with 'define_predicate' automatically include a test 19346that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a 19347'CONST_INT' or 'CONST_DOUBLE'. They do _not_ check specifically for 19348integer 'CONST_DOUBLE', nor do they test that the value of either kind 19349of constant fits in the requested mode. This is because target-specific 19350predicates that take constants usually have to do more stringent value 19351checks anyway. If you need the exact same treatment of 'CONST_INT' or 19352'CONST_DOUBLE' that the generic predicates provide, use a 19353'MATCH_OPERAND' subexpression to call 'const_int_operand', 19354'const_double_operand', or 'immediate_operand'. 19355 19356 Predicates written with 'define_special_predicate' do not get any 19357automatic mode checks, and are treated as having special mode handling 19358by 'genrecog'. 19359 19360 The program 'genpreds' is responsible for generating code to test 19361predicates. It also writes a header file containing function 19362declarations for all machine-specific predicates. It is not necessary 19363to declare these predicates in 'CPU-protos.h'. 19364 19365 19366File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 19367 1936816.8 Operand Constraints 19369======================== 19370 19371Each 'match_operand' in an instruction pattern can specify constraints 19372for the operands allowed. The constraints allow you to fine-tune 19373matching within the set of operands allowed by the predicate. 19374 19375 Constraints can say whether an operand may be in a register, and which 19376kinds of register; whether the operand can be a memory reference, and 19377which kinds of address; whether the operand may be an immediate 19378constant, and which possible values it may have. Constraints can also 19379require two operands to match. Side-effects aren't allowed in operands 19380of inline 'asm', unless '<' or '>' constraints are used, because there 19381is no guarantee that the side-effects will happen exactly once in an 19382instruction that can update the addressing register. 19383 19384* Menu: 19385 19386* Simple Constraints:: Basic use of constraints. 19387* Multi-Alternative:: When an insn has two alternative constraint-patterns. 19388* Class Preferences:: Constraints guide which hard register to put things in. 19389* Modifiers:: More precise control over effects of constraints. 19390* Machine Constraints:: Existing constraints for some particular machines. 19391* Disable Insn Alternatives:: Disable insn alternatives using attributes. 19392* Define Constraints:: How to define machine-specific constraints. 19393* C Constraint Interface:: How to test constraints from C code. 19394 19395 19396File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 19397 1939816.8.1 Simple Constraints 19399------------------------- 19400 19401The simplest kind of constraint is a string full of letters, each of 19402which describes one kind of operand that is permitted. Here are the 19403letters that are allowed: 19404 19405whitespace 19406 Whitespace characters are ignored and can be inserted at any 19407 position except the first. This enables each alternative for 19408 different operands to be visually aligned in the machine 19409 description even if they have different number of constraints and 19410 modifiers. 19411 19412'm' 19413 A memory operand is allowed, with any kind of address that the 19414 machine supports in general. Note that the letter used for the 19415 general memory constraint can be re-defined by a back end using the 19416 'TARGET_MEM_CONSTRAINT' macro. 19417 19418'o' 19419 A memory operand is allowed, but only if the address is 19420 "offsettable". This means that adding a small integer (actually, 19421 the width in bytes of the operand, as determined by its machine 19422 mode) may be added to the address and the result is also a valid 19423 memory address. 19424 19425 For example, an address which is constant is offsettable; so is an 19426 address that is the sum of a register and a constant (as long as a 19427 slightly larger constant is also within the range of 19428 address-offsets supported by the machine); but an autoincrement or 19429 autodecrement address is not offsettable. More complicated 19430 indirect/indexed addresses may or may not be offsettable depending 19431 on the other addressing modes that the machine supports. 19432 19433 Note that in an output operand which can be matched by another 19434 operand, the constraint letter 'o' is valid only when accompanied 19435 by both '<' (if the target machine has predecrement addressing) and 19436 '>' (if the target machine has preincrement addressing). 19437 19438'V' 19439 A memory operand that is not offsettable. In other words, anything 19440 that would fit the 'm' constraint but not the 'o' constraint. 19441 19442'<' 19443 A memory operand with autodecrement addressing (either predecrement 19444 or postdecrement) is allowed. In inline 'asm' this constraint is 19445 only allowed if the operand is used exactly once in an instruction 19446 that can handle the side-effects. Not using an operand with '<' in 19447 constraint string in the inline 'asm' pattern at all or using it in 19448 multiple instructions isn't valid, because the side-effects 19449 wouldn't be performed or would be performed more than once. 19450 Furthermore, on some targets the operand with '<' in constraint 19451 string must be accompanied by special instruction suffixes like 19452 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 19453 19454'>' 19455 A memory operand with autoincrement addressing (either preincrement 19456 or postincrement) is allowed. In inline 'asm' the same 19457 restrictions as for '<' apply. 19458 19459'r' 19460 A register operand is allowed provided that it is in a general 19461 register. 19462 19463'i' 19464 An immediate integer operand (one with constant value) is allowed. 19465 This includes symbolic constants whose values will be known only at 19466 assembly time or later. 19467 19468'n' 19469 An immediate integer operand with a known numeric value is allowed. 19470 Many systems cannot support assembly-time constants for operands 19471 less than a word wide. Constraints for these operands should use 19472 'n' rather than 'i'. 19473 19474'I', 'J', 'K', ... 'P' 19475 Other letters in the range 'I' through 'P' may be defined in a 19476 machine-dependent fashion to permit immediate integer operands with 19477 explicit integer values in specified ranges. For example, on the 19478 68000, 'I' is defined to stand for the range of values 1 to 8. 19479 This is the range permitted as a shift count in the shift 19480 instructions. 19481 19482'E' 19483 An immediate floating operand (expression code 'const_double') is 19484 allowed, but only if the target floating point format is the same 19485 as that of the host machine (on which the compiler is running). 19486 19487'F' 19488 An immediate floating operand (expression code 'const_double' or 19489 'const_vector') is allowed. 19490 19491'G', 'H' 19492 'G' and 'H' may be defined in a machine-dependent fashion to permit 19493 immediate floating operands in particular ranges of values. 19494 19495's' 19496 An immediate integer operand whose value is not an explicit integer 19497 is allowed. 19498 19499 This might appear strange; if an insn allows a constant operand 19500 with a value not known at compile time, it certainly must allow any 19501 known value. So why use 's' instead of 'i'? Sometimes it allows 19502 better code to be generated. 19503 19504 For example, on the 68000 in a fullword instruction it is possible 19505 to use an immediate operand; but if the immediate value is between 19506 -128 and 127, better code results from loading the value into a 19507 register and using the register. This is because the load into the 19508 register can be done with a 'moveq' instruction. We arrange for 19509 this to happen by defining the letter 'K' to mean "any integer 19510 outside the range -128 to 127", and then specifying 'Ks' in the 19511 operand constraints. 19512 19513'g' 19514 Any register, memory or immediate integer operand is allowed, 19515 except for registers that are not general registers. 19516 19517'X' 19518 Any operand whatsoever is allowed, even if it does not satisfy 19519 'general_operand'. This is normally used in the constraint of a 19520 'match_scratch' when certain alternatives will not actually require 19521 a scratch register. 19522 19523'0', '1', '2', ... '9' 19524 An operand that matches the specified operand number is allowed. 19525 If a digit is used together with letters within the same 19526 alternative, the digit should come last. 19527 19528 This number is allowed to be more than a single digit. If multiple 19529 digits are encountered consecutively, they are interpreted as a 19530 single decimal integer. There is scant chance for ambiguity, since 19531 to-date it has never been desirable that '10' be interpreted as 19532 matching either operand 1 _or_ operand 0. Should this be desired, 19533 one can use multiple alternatives instead. 19534 19535 This is called a "matching constraint" and what it really means is 19536 that the assembler has only a single operand that fills two roles 19537 considered separate in the RTL insn. For example, an add insn has 19538 two input operands and one output operand in the RTL, but on most 19539 CISC machines an add instruction really has only two operands, one 19540 of them an input-output operand: 19541 19542 addl #35,r12 19543 19544 Matching constraints are used in these circumstances. More 19545 precisely, the two operands that match must include one input-only 19546 operand and one output-only operand. Moreover, the digit must be a 19547 smaller number than the number of the operand that uses it in the 19548 constraint. 19549 19550 For operands to match in a particular case usually means that they 19551 are identical-looking RTL expressions. But in a few special cases 19552 specific kinds of dissimilarity are allowed. For example, '*x' as 19553 an input operand will match '*x++' as an output operand. For 19554 proper results in such cases, the output template should always use 19555 the output-operand's number when printing the operand. 19556 19557'p' 19558 An operand that is a valid memory address is allowed. This is for 19559 "load address" and "push address" instructions. 19560 19561 'p' in the constraint must be accompanied by 'address_operand' as 19562 the predicate in the 'match_operand'. This predicate interprets 19563 the mode specified in the 'match_operand' as the mode of the memory 19564 reference for which the address would be valid. 19565 19566OTHER-LETTERS 19567 Other letters can be defined in machine-dependent fashion to stand 19568 for particular classes of registers or other arbitrary operand 19569 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 19570 for data, address and floating point registers. 19571 19572 In order to have valid assembler code, each operand must satisfy its 19573constraint. But a failure to do so does not prevent the pattern from 19574applying to an insn. Instead, it directs the compiler to modify the 19575code so that the constraint will be satisfied. Usually this is done by 19576copying an operand into a register. 19577 19578 Contrast, therefore, the two instruction patterns that follow: 19579 19580 (define_insn "" 19581 [(set (match_operand:SI 0 "general_operand" "=r") 19582 (plus:SI (match_dup 0) 19583 (match_operand:SI 1 "general_operand" "r")))] 19584 "" 19585 "...") 19586 19587which has two operands, one of which must appear in two places, and 19588 19589 (define_insn "" 19590 [(set (match_operand:SI 0 "general_operand" "=r") 19591 (plus:SI (match_operand:SI 1 "general_operand" "0") 19592 (match_operand:SI 2 "general_operand" "r")))] 19593 "" 19594 "...") 19595 19596which has three operands, two of which are required by a constraint to 19597be identical. If we are considering an insn of the form 19598 19599 (insn N PREV NEXT 19600 (set (reg:SI 3) 19601 (plus:SI (reg:SI 6) (reg:SI 109))) 19602 ...) 19603 19604the first pattern would not apply at all, because this insn does not 19605contain two identical subexpressions in the right place. The pattern 19606would say, "That does not look like an add instruction; try other 19607patterns". The second pattern would say, "Yes, that's an add 19608instruction, but there is something wrong with it". It would direct the 19609reload pass of the compiler to generate additional insns to make the 19610constraint true. The results might look like this: 19611 19612 (insn N2 PREV N 19613 (set (reg:SI 3) (reg:SI 6)) 19614 ...) 19615 19616 (insn N N2 NEXT 19617 (set (reg:SI 3) 19618 (plus:SI (reg:SI 3) (reg:SI 109))) 19619 ...) 19620 19621 It is up to you to make sure that each operand, in each pattern, has 19622constraints that can handle any RTL expression that could be present for 19623that operand. (When multiple alternatives are in use, each pattern 19624must, for each possible combination of operand expressions, have at 19625least one alternative which can handle that combination of operands.) 19626The constraints don't need to _allow_ any possible operand--when this is 19627the case, they do not constrain--but they must at least point the way to 19628reloading any possible operand so that it will fit. 19629 19630 * If the constraint accepts whatever operands the predicate permits, 19631 there is no problem: reloading is never necessary for this operand. 19632 19633 For example, an operand whose constraints permit everything except 19634 registers is safe provided its predicate rejects registers. 19635 19636 An operand whose predicate accepts only constant values is safe 19637 provided its constraints include the letter 'i'. If any possible 19638 constant value is accepted, then nothing less than 'i' will do; if 19639 the predicate is more selective, then the constraints may also be 19640 more selective. 19641 19642 * Any operand expression can be reloaded by copying it into a 19643 register. So if an operand's constraints allow some kind of 19644 register, it is certain to be safe. It need not permit all classes 19645 of registers; the compiler knows how to copy a register into 19646 another register of the proper class in order to make an 19647 instruction valid. 19648 19649 * A nonoffsettable memory reference can be reloaded by copying the 19650 address into a register. So if the constraint uses the letter 'o', 19651 all memory references are taken care of. 19652 19653 * A constant operand can be reloaded by allocating space in memory to 19654 hold it as preinitialized data. Then the memory reference can be 19655 used in place of the constant. So if the constraint uses the 19656 letters 'o' or 'm', constant operands are not a problem. 19657 19658 * If the constraint permits a constant and a pseudo register used in 19659 an insn was not allocated to a hard register and is equivalent to a 19660 constant, the register will be replaced with the constant. If the 19661 predicate does not permit a constant and the insn is re-recognized 19662 for some reason, the compiler will crash. Thus the predicate must 19663 always recognize any objects allowed by the constraint. 19664 19665 If the operand's predicate can recognize registers, but the constraint 19666does not permit them, it can make the compiler crash. When this operand 19667happens to be a register, the reload pass will be stymied, because it 19668does not know how to copy a register temporarily into memory. 19669 19670 If the predicate accepts a unary operator, the constraint applies to 19671the operand. For example, the MIPS processor at ISA level 3 supports an 19672instruction which adds two registers in 'SImode' to produce a 'DImode' 19673result, but only if the registers are correctly sign extended. This 19674predicate for the input operands accepts a 'sign_extend' of an 'SImode' 19675register. Write the constraint to indicate the type of register that is 19676required for the operand of the 'sign_extend'. 19677 19678 19679File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 19680 1968116.8.2 Multiple Alternative Constraints 19682--------------------------------------- 19683 19684Sometimes a single instruction has multiple alternative sets of possible 19685operands. For example, on the 68000, a logical-or instruction can 19686combine register or an immediate value into memory, or it can combine 19687any kind of operand into a register; but it cannot combine one memory 19688location into another. 19689 19690 These constraints are represented as multiple alternatives. An 19691alternative can be described by a series of letters for each operand. 19692The overall constraint for an operand is made from the letters for this 19693operand from the first alternative, a comma, the letters for this 19694operand from the second alternative, a comma, and so on until the last 19695alternative. Here is how it is done for fullword logical-or on the 1969668000: 19697 19698 (define_insn "iorsi3" 19699 [(set (match_operand:SI 0 "general_operand" "=m,d") 19700 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 19701 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 19702 ...) 19703 19704 The first alternative has 'm' (memory) for operand 0, '0' for operand 1 19705(meaning it must match operand 0), and 'dKs' for operand 2. The second 19706alternative has 'd' (data register) for operand 0, '0' for operand 1, 19707and 'dmKs' for operand 2. The '=' and '%' in the constraints apply to 19708all the alternatives; their meaning is explained in the next section 19709(*note Class Preferences::). 19710 19711 If all the operands fit any one alternative, the instruction is valid. 19712Otherwise, for each alternative, the compiler counts how many 19713instructions must be added to copy the operands so that that alternative 19714applies. The alternative requiring the least copying is chosen. If two 19715alternatives need the same amount of copying, the one that comes first 19716is chosen. These choices can be altered with the '?' and '!' 19717characters: 19718 19719'?' 19720 Disparage slightly the alternative that the '?' appears in, as a 19721 choice when no alternative applies exactly. The compiler regards 19722 this alternative as one unit more costly for each '?' that appears 19723 in it. 19724 19725'!' 19726 Disparage severely the alternative that the '!' appears in. This 19727 alternative can still be used if it fits without reloading, but if 19728 reloading is needed, some other alternative will be used. 19729 19730'^' 19731 This constraint is analogous to '?' but it disparages slightly the 19732 alternative only if the operand with the '^' needs a reload. 19733 19734'$' 19735 This constraint is analogous to '!' but it disparages severely the 19736 alternative only if the operand with the '$' needs a reload. 19737 19738 When an insn pattern has multiple alternatives in its constraints, 19739often the appearance of the assembler code is determined mostly by which 19740alternative was matched. When this is so, the C code for writing the 19741assembler code can use the variable 'which_alternative', which is the 19742ordinal number of the alternative that was actually satisfied (0 for the 19743first, 1 for the second alternative, etc.). *Note Output Statement::. 19744 19745 19746File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 19747 1974816.8.3 Register Class Preferences 19749--------------------------------- 19750 19751The operand constraints have another function: they enable the compiler 19752to decide which kind of hardware register a pseudo register is best 19753allocated to. The compiler examines the constraints that apply to the 19754insns that use the pseudo register, looking for the machine-dependent 19755letters such as 'd' and 'a' that specify classes of registers. The 19756pseudo register is put in whichever class gets the most "votes". The 19757constraint letters 'g' and 'r' also vote: they vote in favor of a 19758general register. The machine description says which registers are 19759considered general. 19760 19761 Of course, on some machines all registers are equivalent, and no 19762register classes are defined. Then none of this complexity is relevant. 19763 19764 19765File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 19766 1976716.8.4 Constraint Modifier Characters 19768------------------------------------- 19769 19770Here are constraint modifier characters. 19771 19772'=' 19773 Means that this operand is written to by this instruction: the 19774 previous value is discarded and replaced by new data. 19775 19776'+' 19777 Means that this operand is both read and written by the 19778 instruction. 19779 19780 When the compiler fixes up the operands to satisfy the constraints, 19781 it needs to know which operands are read by the instruction and 19782 which are written by it. '=' identifies an operand which is only 19783 written; '+' identifies an operand that is both read and written; 19784 all other operands are assumed to only be read. 19785 19786 If you specify '=' or '+' in a constraint, you put it in the first 19787 character of the constraint string. 19788 19789'&' 19790 Means (in a particular alternative) that this operand is an 19791 "earlyclobber" operand, which is written before the instruction is 19792 finished using the input operands. Therefore, this operand may not 19793 lie in a register that is read by the instruction or as part of any 19794 memory address. 19795 19796 '&' applies only to the alternative in which it is written. In 19797 constraints with multiple alternatives, sometimes one alternative 19798 requires '&' while others do not. See, for example, the 'movdf' 19799 insn of the 68000. 19800 19801 A operand which is read by the instruction can be tied to an 19802 earlyclobber operand if its only use as an input occurs before the 19803 early result is written. Adding alternatives of this form often 19804 allows GCC to produce better code when only some of the read 19805 operands can be affected by the earlyclobber. See, for example, 19806 the 'mulsi3' insn of the ARM. 19807 19808 Furthermore, if the "earlyclobber" operand is also a read/write 19809 operand, then that operand is written only after it's used. 19810 19811 '&' does not obviate the need to write '=' or '+'. As 19812 "earlyclobber" operands are always written, a read-only 19813 "earlyclobber" operand is ill-formed and will be rejected by the 19814 compiler. 19815 19816'%' 19817 Declares the instruction to be commutative for this operand and the 19818 following operand. This means that the compiler may interchange 19819 the two operands if that is the cheapest way to make all operands 19820 fit the constraints. '%' applies to all alternatives and must 19821 appear as the first character in the constraint. Only read-only 19822 operands can use '%'. 19823 19824 This is often used in patterns for addition instructions that 19825 really have only two operands: the result must go in one of the 19826 arguments. Here for example, is how the 68000 halfword-add 19827 instruction is defined: 19828 19829 (define_insn "addhi3" 19830 [(set (match_operand:HI 0 "general_operand" "=m,r") 19831 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 19832 (match_operand:HI 2 "general_operand" "di,g")))] 19833 ...) 19834 GCC can only handle one commutative pair in an asm; if you use 19835 more, the compiler may fail. Note that you need not use the 19836 modifier if the two alternatives are strictly identical; this would 19837 only waste time in the reload pass. The modifier is not 19838 operational after register allocation, so the result of 19839 'define_peephole2' and 'define_split's performed after reload 19840 cannot rely on '%' to make the intended insn match. 19841 19842'#' 19843 Says that all following characters, up to the next comma, are to be 19844 ignored as a constraint. They are significant only for choosing 19845 register preferences. 19846 19847'*' 19848 Says that the following character should be ignored when choosing 19849 register preferences. '*' has no effect on the meaning of the 19850 constraint as a constraint, and no effect on reloading. For LRA 19851 '*' additionally disparages slightly the alternative if the 19852 following character matches the operand. 19853 19854 Here is an example: the 68000 has an instruction to sign-extend a 19855 halfword in a data register, and can also sign-extend a value by 19856 copying it into an address register. While either kind of register 19857 is acceptable, the constraints on an address-register destination 19858 are less strict, so it is best if register allocation makes an 19859 address register its goal. Therefore, '*' is used so that the 'd' 19860 constraint letter (for data register) is ignored when computing 19861 register preferences. 19862 19863 (define_insn "extendhisi2" 19864 [(set (match_operand:SI 0 "general_operand" "=*d,a") 19865 (sign_extend:SI 19866 (match_operand:HI 1 "general_operand" "0,g")))] 19867 ...) 19868 19869 19870File: gccint.info, Node: Machine Constraints, Next: Disable Insn Alternatives, Prev: Modifiers, Up: Constraints 19871 1987216.8.5 Constraints for Particular Machines 19873------------------------------------------ 19874 19875Whenever possible, you should use the general-purpose constraint letters 19876in 'asm' arguments, since they will convey meaning more readily to 19877people reading your code. Failing that, use the constraint letters that 19878usually have very similar meanings across architectures. The most 19879commonly used constraints are 'm' and 'r' (for memory and 19880general-purpose registers respectively; *note Simple Constraints::), and 19881'I', usually the letter indicating the most common immediate-constant 19882format. 19883 19884 Each architecture defines additional constraints. These constraints 19885are used by the compiler itself for instruction generation, as well as 19886for 'asm' statements; therefore, some of the constraints are not 19887particularly useful for 'asm'. Here is a summary of some of the 19888machine-dependent constraints available on some particular machines; it 19889includes both constraints that are useful for 'asm' and constraints that 19890aren't. The compiler source file mentioned in the table heading for 19891each architecture is the definitive reference for the meanings of that 19892architecture's constraints. 19893 19894_AArch64 family--'config/aarch64/constraints.md'_ 19895 'k' 19896 The stack pointer register ('SP') 19897 19898 'w' 19899 Floating point or SIMD vector register 19900 19901 'I' 19902 Integer constant that is valid as an immediate operand in an 19903 'ADD' instruction 19904 19905 'J' 19906 Integer constant that is valid as an immediate operand in a 19907 'SUB' instruction (once negated) 19908 19909 'K' 19910 Integer constant that can be used with a 32-bit logical 19911 instruction 19912 19913 'L' 19914 Integer constant that can be used with a 64-bit logical 19915 instruction 19916 19917 'M' 19918 Integer constant that is valid as an immediate operand in a 19919 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 19920 to one of several different machine instructions depending on 19921 the value 19922 19923 'N' 19924 Integer constant that is valid as an immediate operand in a 19925 64-bit 'MOV' pseudo instruction 19926 19927 'S' 19928 An absolute symbolic address or a label reference 19929 19930 'Y' 19931 Floating point constant zero 19932 19933 'Z' 19934 Integer constant zero 19935 19936 'Ush' 19937 The high part (bits 12 and upwards) of the pc-relative address 19938 of a symbol within 4GB of the instruction 19939 19940 'Q' 19941 A memory address which uses a single base register with no 19942 offset 19943 19944 'Ump' 19945 A memory address suitable for a load/store pair instruction in 19946 SI, DI, SF and DF modes 19947 19948_ARC --'config/arc/constraints.md'_ 19949 'q' 19950 Registers usable in ARCompact 16-bit instructions: 'r0'-'r3', 19951 'r12'-'r15'. This constraint can only match when the '-mq' 19952 option is in effect. 19953 19954 'e' 19955 Registers usable as base-regs of memory addresses in ARCompact 19956 16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'. 19957 This constraint can only match when the '-mq' option is in 19958 effect. 19959 'D' 19960 ARC FPX (dpfp) 64-bit registers. 'D0', 'D1'. 19961 19962 'I' 19963 A signed 12-bit integer constant. 19964 19965 'Cal' 19966 constant for arithmetic/logical operations. This might be any 19967 constant that can be put into a long immediate by the assmbler 19968 or linker without involving a PIC relocation. 19969 19970 'K' 19971 A 3-bit unsigned integer constant. 19972 19973 'L' 19974 A 6-bit unsigned integer constant. 19975 19976 'CnL' 19977 One's complement of a 6-bit unsigned integer constant. 19978 19979 'CmL' 19980 Two's complement of a 6-bit unsigned integer constant. 19981 19982 'M' 19983 A 5-bit unsigned integer constant. 19984 19985 'O' 19986 A 7-bit unsigned integer constant. 19987 19988 'P' 19989 A 8-bit unsigned integer constant. 19990 19991 'H' 19992 Any const_double value. 19993 19994_ARM family--'config/arm/constraints.md'_ 19995 19996 'h' 19997 In Thumb state, the core registers 'r8'-'r15'. 19998 19999 'k' 20000 The stack pointer register. 20001 20002 'l' 20003 In Thumb State the core registers 'r0'-'r7'. In ARM state 20004 this is an alias for the 'r' constraint. 20005 20006 't' 20007 VFP floating-point registers 's0'-'s31'. Used for 32 bit 20008 values. 20009 20010 'w' 20011 VFP floating-point registers 'd0'-'d31' and the appropriate 20012 subset 'd0'-'d15' based on command line options. Used for 64 20013 bit values only. Not valid for Thumb1. 20014 20015 'y' 20016 The iWMMX co-processor registers. 20017 20018 'z' 20019 The iWMMX GR registers. 20020 20021 'G' 20022 The floating-point constant 0.0 20023 20024 'I' 20025 Integer that is valid as an immediate operand in a data 20026 processing instruction. That is, an integer in the range 0 to 20027 255 rotated by a multiple of 2 20028 20029 'J' 20030 Integer in the range -4095 to 4095 20031 20032 'K' 20033 Integer that satisfies constraint 'I' when inverted (ones 20034 complement) 20035 20036 'L' 20037 Integer that satisfies constraint 'I' when negated (twos 20038 complement) 20039 20040 'M' 20041 Integer in the range 0 to 32 20042 20043 'Q' 20044 A memory reference where the exact address is in a single 20045 register (''m'' is preferable for 'asm' statements) 20046 20047 'R' 20048 An item in the constant pool 20049 20050 'S' 20051 A symbol in the text segment of the current file 20052 20053 'Uv' 20054 A memory reference suitable for VFP load/store insns 20055 (reg+constant offset) 20056 20057 'Uy' 20058 A memory reference suitable for iWMMXt load/store 20059 instructions. 20060 20061 'Uq' 20062 A memory reference suitable for the ARMv4 ldrsb instruction. 20063 20064_AVR family--'config/avr/constraints.md'_ 20065 'l' 20066 Registers from r0 to r15 20067 20068 'a' 20069 Registers from r16 to r23 20070 20071 'd' 20072 Registers from r16 to r31 20073 20074 'w' 20075 Registers from r24 to r31. These registers can be used in 20076 'adiw' command 20077 20078 'e' 20079 Pointer register (r26-r31) 20080 20081 'b' 20082 Base pointer register (r28-r31) 20083 20084 'q' 20085 Stack pointer register (SPH:SPL) 20086 20087 't' 20088 Temporary register r0 20089 20090 'x' 20091 Register pair X (r27:r26) 20092 20093 'y' 20094 Register pair Y (r29:r28) 20095 20096 'z' 20097 Register pair Z (r31:r30) 20098 20099 'I' 20100 Constant greater than -1, less than 64 20101 20102 'J' 20103 Constant greater than -64, less than 1 20104 20105 'K' 20106 Constant integer 2 20107 20108 'L' 20109 Constant integer 0 20110 20111 'M' 20112 Constant that fits in 8 bits 20113 20114 'N' 20115 Constant integer -1 20116 20117 'O' 20118 Constant integer 8, 16, or 24 20119 20120 'P' 20121 Constant integer 1 20122 20123 'G' 20124 A floating point constant 0.0 20125 20126 'Q' 20127 A memory address based on Y or Z pointer with displacement. 20128 20129_Blackfin family--'config/bfin/constraints.md'_ 20130 'a' 20131 P register 20132 20133 'd' 20134 D register 20135 20136 'z' 20137 A call clobbered P register. 20138 20139 'qN' 20140 A single register. If N is in the range 0 to 7, the 20141 corresponding D register. If it is 'A', then the register P0. 20142 20143 'D' 20144 Even-numbered D register 20145 20146 'W' 20147 Odd-numbered D register 20148 20149 'e' 20150 Accumulator register. 20151 20152 'A' 20153 Even-numbered accumulator register. 20154 20155 'B' 20156 Odd-numbered accumulator register. 20157 20158 'b' 20159 I register 20160 20161 'v' 20162 B register 20163 20164 'f' 20165 M register 20166 20167 'c' 20168 Registers used for circular buffering, i.e. I, B, or L 20169 registers. 20170 20171 'C' 20172 The CC register. 20173 20174 't' 20175 LT0 or LT1. 20176 20177 'k' 20178 LC0 or LC1. 20179 20180 'u' 20181 LB0 or LB1. 20182 20183 'x' 20184 Any D, P, B, M, I or L register. 20185 20186 'y' 20187 Additional registers typically used only in prologues and 20188 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 20189 USP. 20190 20191 'w' 20192 Any register except accumulators or CC. 20193 20194 'Ksh' 20195 Signed 16 bit integer (in the range -32768 to 32767) 20196 20197 'Kuh' 20198 Unsigned 16 bit integer (in the range 0 to 65535) 20199 20200 'Ks7' 20201 Signed 7 bit integer (in the range -64 to 63) 20202 20203 'Ku7' 20204 Unsigned 7 bit integer (in the range 0 to 127) 20205 20206 'Ku5' 20207 Unsigned 5 bit integer (in the range 0 to 31) 20208 20209 'Ks4' 20210 Signed 4 bit integer (in the range -8 to 7) 20211 20212 'Ks3' 20213 Signed 3 bit integer (in the range -3 to 4) 20214 20215 'Ku3' 20216 Unsigned 3 bit integer (in the range 0 to 7) 20217 20218 'PN' 20219 Constant N, where N is a single-digit constant in the range 0 20220 to 4. 20221 20222 'PA' 20223 An integer equal to one of the MACFLAG_XXX constants that is 20224 suitable for use with either accumulator. 20225 20226 'PB' 20227 An integer equal to one of the MACFLAG_XXX constants that is 20228 suitable for use only with accumulator A1. 20229 20230 'M1' 20231 Constant 255. 20232 20233 'M2' 20234 Constant 65535. 20235 20236 'J' 20237 An integer constant with exactly a single bit set. 20238 20239 'L' 20240 An integer constant with all bits set except exactly one. 20241 20242 'H' 20243 20244 'Q' 20245 Any SYMBOL_REF. 20246 20247_CR16 Architecture--'config/cr16/cr16.h'_ 20248 20249 'b' 20250 Registers from r0 to r14 (registers without stack pointer) 20251 20252 't' 20253 Register from r0 to r11 (all 16-bit registers) 20254 20255 'p' 20256 Register from r12 to r15 (all 32-bit registers) 20257 20258 'I' 20259 Signed constant that fits in 4 bits 20260 20261 'J' 20262 Signed constant that fits in 5 bits 20263 20264 'K' 20265 Signed constant that fits in 6 bits 20266 20267 'L' 20268 Unsigned constant that fits in 4 bits 20269 20270 'M' 20271 Signed constant that fits in 32 bits 20272 20273 'N' 20274 Check for 64 bits wide constants for add/sub instructions 20275 20276 'G' 20277 Floating point constant that is legal for store immediate 20278 20279_Epiphany--'config/epiphany/constraints.md'_ 20280 'U16' 20281 An unsigned 16-bit constant. 20282 20283 'K' 20284 An unsigned 5-bit constant. 20285 20286 'L' 20287 A signed 11-bit constant. 20288 20289 'Cm1' 20290 A signed 11-bit constant added to -1. Can only match when the 20291 '-m1reg-REG' option is active. 20292 20293 'Cl1' 20294 Left-shift of -1, i.e., a bit mask with a block of leading 20295 ones, the rest being a block of trailing zeroes. Can only 20296 match when the '-m1reg-REG' option is active. 20297 20298 'Cr1' 20299 Right-shift of -1, i.e., a bit mask with a trailing block of 20300 ones, the rest being zeroes. Or to put it another way, one 20301 less than a power of two. Can only match when the 20302 '-m1reg-REG' option is active. 20303 20304 'Cal' 20305 Constant for arithmetic/logical operations. This is like 'i', 20306 except that for position independent code, no symbols / 20307 expressions needing relocations are allowed. 20308 20309 'Csy' 20310 Symbolic constant for call/jump instruction. 20311 20312 'Rcs' 20313 The register class usable in short insns. This is a register 20314 class constraint, and can thus drive register allocation. 20315 This constraint won't match unless '-mprefer-short-insn-regs' 20316 is in effect. 20317 20318 'Rsc' 20319 The the register class of registers that can be used to hold a 20320 sibcall call address. I.e., a caller-saved register. 20321 20322 'Rct' 20323 Core control register class. 20324 20325 'Rgs' 20326 The register group usable in short insns. This constraint 20327 does not use a register class, so that it only passively 20328 matches suitable registers, and doesn't drive register 20329 allocation. 20330 20331 'Car' 20332 Constant suitable for the addsi3_r pattern. This is a valid 20333 offset For byte, halfword, or word addressing. 20334 20335 'Rra' 20336 Matches the return address if it can be replaced with the link 20337 register. 20338 20339 'Rcc' 20340 Matches the integer condition code register. 20341 20342 'Sra' 20343 Matches the return address if it is in a stack slot. 20344 20345 'Cfm' 20346 Matches control register values to switch fp mode, which are 20347 encapsulated in 'UNSPEC_FP_MODE'. 20348 20349_FRV--'config/frv/frv.h'_ 20350 'a' 20351 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 20352 20353 'b' 20354 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 20355 20356 'c' 20357 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 20358 to 'icc3'). 20359 20360 'd' 20361 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 20362 20363 'e' 20364 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 20365 registers are excluded not in the class but through the use of 20366 a machine mode larger than 4 bytes. 20367 20368 'f' 20369 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 20370 20371 'h' 20372 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 20373 registers are excluded not in the class but through the use of 20374 a machine mode larger than 4 bytes. 20375 20376 'l' 20377 Register in the class 'LR_REG' (the 'lr' register). 20378 20379 'q' 20380 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 20381 numbers not divisible by 4 are excluded not in the class but 20382 through the use of a machine mode larger than 8 bytes. 20383 20384 't' 20385 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 20386 20387 'u' 20388 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 20389 20390 'v' 20391 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 20392 20393 'w' 20394 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 20395 20396 'x' 20397 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 20398 Register numbers not divisible by 4 are excluded not in the 20399 class but through the use of a machine mode larger than 8 20400 bytes. 20401 20402 'z' 20403 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 20404 20405 'A' 20406 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 20407 20408 'B' 20409 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 20410 20411 'C' 20412 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 20413 20414 'G' 20415 Floating point constant zero 20416 20417 'I' 20418 6-bit signed integer constant 20419 20420 'J' 20421 10-bit signed integer constant 20422 20423 'L' 20424 16-bit signed integer constant 20425 20426 'M' 20427 16-bit unsigned integer constant 20428 20429 'N' 20430 12-bit signed integer constant that is negative--i.e. in the 20431 range of -2048 to -1 20432 20433 'O' 20434 Constant zero 20435 20436 'P' 20437 12-bit signed integer constant that is greater than zero--i.e. 20438 in the range of 1 to 2047. 20439 20440_Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 20441 'a' 20442 General register 1 20443 20444 'f' 20445 Floating point register 20446 20447 'q' 20448 Shift amount register 20449 20450 'x' 20451 Floating point register (deprecated) 20452 20453 'y' 20454 Upper floating point register (32-bit), floating point 20455 register (64-bit) 20456 20457 'Z' 20458 Any register 20459 20460 'I' 20461 Signed 11-bit integer constant 20462 20463 'J' 20464 Signed 14-bit integer constant 20465 20466 'K' 20467 Integer constant that can be deposited with a 'zdepi' 20468 instruction 20469 20470 'L' 20471 Signed 5-bit integer constant 20472 20473 'M' 20474 Integer constant 0 20475 20476 'N' 20477 Integer constant that can be loaded with a 'ldil' instruction 20478 20479 'O' 20480 Integer constant whose value plus one is a power of 2 20481 20482 'P' 20483 Integer constant that can be used for 'and' operations in 20484 'depi' and 'extru' instructions 20485 20486 'S' 20487 Integer constant 31 20488 20489 'U' 20490 Integer constant 63 20491 20492 'G' 20493 Floating-point constant 0.0 20494 20495 'A' 20496 A 'lo_sum' data-linkage-table memory operand 20497 20498 'Q' 20499 A memory operand that can be used as the destination operand 20500 of an integer store instruction 20501 20502 'R' 20503 A scaled or unscaled indexed memory operand 20504 20505 'T' 20506 A memory operand for floating-point loads and stores 20507 20508 'W' 20509 A register indirect memory operand 20510 20511_Intel IA-64--'config/ia64/ia64.h'_ 20512 'a' 20513 General register 'r0' to 'r3' for 'addl' instruction 20514 20515 'b' 20516 Branch register 20517 20518 'c' 20519 Predicate register ('c' as in "conditional") 20520 20521 'd' 20522 Application register residing in M-unit 20523 20524 'e' 20525 Application register residing in I-unit 20526 20527 'f' 20528 Floating-point register 20529 20530 'm' 20531 Memory operand. If used together with '<' or '>', the operand 20532 can have postincrement and postdecrement which require 20533 printing with '%Pn' on IA-64. 20534 20535 'G' 20536 Floating-point constant 0.0 or 1.0 20537 20538 'I' 20539 14-bit signed integer constant 20540 20541 'J' 20542 22-bit signed integer constant 20543 20544 'K' 20545 8-bit signed integer constant for logical instructions 20546 20547 'L' 20548 8-bit adjusted signed integer constant for compare pseudo-ops 20549 20550 'M' 20551 6-bit unsigned integer constant for shift counts 20552 20553 'N' 20554 9-bit signed integer constant for load and store 20555 postincrements 20556 20557 'O' 20558 The constant zero 20559 20560 'P' 20561 0 or -1 for 'dep' instruction 20562 20563 'Q' 20564 Non-volatile memory for floating-point loads and stores 20565 20566 'R' 20567 Integer constant in the range 1 to 4 for 'shladd' instruction 20568 20569 'S' 20570 Memory operand except postincrement and postdecrement. This 20571 is now roughly the same as 'm' when not used together with '<' 20572 or '>'. 20573 20574_M32C--'config/m32c/m32c.c'_ 20575 'Rsp' 20576 'Rfb' 20577 'Rsb' 20578 '$sp', '$fb', '$sb'. 20579 20580 'Rcr' 20581 Any control register, when they're 16 bits wide (nothing if 20582 control registers are 24 bits wide) 20583 20584 'Rcl' 20585 Any control register, when they're 24 bits wide. 20586 20587 'R0w' 20588 'R1w' 20589 'R2w' 20590 'R3w' 20591 $r0, $r1, $r2, $r3. 20592 20593 'R02' 20594 $r0 or $r2, or $r2r0 for 32 bit values. 20595 20596 'R13' 20597 $r1 or $r3, or $r3r1 for 32 bit values. 20598 20599 'Rdi' 20600 A register that can hold a 64 bit value. 20601 20602 'Rhl' 20603 $r0 or $r1 (registers with addressable high/low bytes) 20604 20605 'R23' 20606 $r2 or $r3 20607 20608 'Raa' 20609 Address registers 20610 20611 'Raw' 20612 Address registers when they're 16 bits wide. 20613 20614 'Ral' 20615 Address registers when they're 24 bits wide. 20616 20617 'Rqi' 20618 Registers that can hold QI values. 20619 20620 'Rad' 20621 Registers that can be used with displacements ($a0, $a1, $sb). 20622 20623 'Rsi' 20624 Registers that can hold 32 bit values. 20625 20626 'Rhi' 20627 Registers that can hold 16 bit values. 20628 20629 'Rhc' 20630 Registers chat can hold 16 bit values, including all control 20631 registers. 20632 20633 'Rra' 20634 $r0 through R1, plus $a0 and $a1. 20635 20636 'Rfl' 20637 The flags register. 20638 20639 'Rmm' 20640 The memory-based pseudo-registers $mem0 through $mem15. 20641 20642 'Rpi' 20643 Registers that can hold pointers (16 bit registers for r8c, 20644 m16c; 24 bit registers for m32cm, m32c). 20645 20646 'Rpa' 20647 Matches multiple registers in a PARALLEL to form a larger 20648 register. Used to match function return values. 20649 20650 'Is3' 20651 -8 ... 7 20652 20653 'IS1' 20654 -128 ... 127 20655 20656 'IS2' 20657 -32768 ... 32767 20658 20659 'IU2' 20660 0 ... 65535 20661 20662 'In4' 20663 -8 ... -1 or 1 ... 8 20664 20665 'In5' 20666 -16 ... -1 or 1 ... 16 20667 20668 'In6' 20669 -32 ... -1 or 1 ... 32 20670 20671 'IM2' 20672 -65536 ... -1 20673 20674 'Ilb' 20675 An 8 bit value with exactly one bit set. 20676 20677 'Ilw' 20678 A 16 bit value with exactly one bit set. 20679 20680 'Sd' 20681 The common src/dest memory addressing modes. 20682 20683 'Sa' 20684 Memory addressed using $a0 or $a1. 20685 20686 'Si' 20687 Memory addressed with immediate addresses. 20688 20689 'Ss' 20690 Memory addressed using the stack pointer ($sp). 20691 20692 'Sf' 20693 Memory addressed using the frame base register ($fb). 20694 20695 'Ss' 20696 Memory addressed using the small base register ($sb). 20697 20698 'S1' 20699 $r1h 20700 20701_MeP--'config/mep/constraints.md'_ 20702 20703 'a' 20704 The $sp register. 20705 20706 'b' 20707 The $tp register. 20708 20709 'c' 20710 Any control register. 20711 20712 'd' 20713 Either the $hi or the $lo register. 20714 20715 'em' 20716 Coprocessor registers that can be directly loaded ($c0-$c15). 20717 20718 'ex' 20719 Coprocessor registers that can be moved to each other. 20720 20721 'er' 20722 Coprocessor registers that can be moved to core registers. 20723 20724 'h' 20725 The $hi register. 20726 20727 'j' 20728 The $rpc register. 20729 20730 'l' 20731 The $lo register. 20732 20733 't' 20734 Registers which can be used in $tp-relative addressing. 20735 20736 'v' 20737 The $gp register. 20738 20739 'x' 20740 The coprocessor registers. 20741 20742 'y' 20743 The coprocessor control registers. 20744 20745 'z' 20746 The $0 register. 20747 20748 'A' 20749 User-defined register set A. 20750 20751 'B' 20752 User-defined register set B. 20753 20754 'C' 20755 User-defined register set C. 20756 20757 'D' 20758 User-defined register set D. 20759 20760 'I' 20761 Offsets for $gp-rel addressing. 20762 20763 'J' 20764 Constants that can be used directly with boolean insns. 20765 20766 'K' 20767 Constants that can be moved directly to registers. 20768 20769 'L' 20770 Small constants that can be added to registers. 20771 20772 'M' 20773 Long shift counts. 20774 20775 'N' 20776 Small constants that can be compared to registers. 20777 20778 'O' 20779 Constants that can be loaded into the top half of registers. 20780 20781 'S' 20782 Signed 8-bit immediates. 20783 20784 'T' 20785 Symbols encoded for $tp-rel or $gp-rel addressing. 20786 20787 'U' 20788 Non-constant addresses for loading/saving coprocessor 20789 registers. 20790 20791 'W' 20792 The top half of a symbol's value. 20793 20794 'Y' 20795 A register indirect address without offset. 20796 20797 'Z' 20798 Symbolic references to the control bus. 20799 20800_MicroBlaze--'config/microblaze/constraints.md'_ 20801 'd' 20802 A general register ('r0' to 'r31'). 20803 20804 'z' 20805 A status register ('rmsr', '$fcc1' to '$fcc7'). 20806 20807_MIPS--'config/mips/constraints.md'_ 20808 'd' 20809 An address register. This is equivalent to 'r' unless 20810 generating MIPS16 code. 20811 20812 'f' 20813 A floating-point register (if available). 20814 20815 'h' 20816 Formerly the 'hi' register. This constraint is no longer 20817 supported. 20818 20819 'l' 20820 The 'lo' register. Use this register to store values that are 20821 no bigger than a word. 20822 20823 'x' 20824 The concatenated 'hi' and 'lo' registers. Use this register 20825 to store doubleword values. 20826 20827 'c' 20828 A register suitable for use in an indirect jump. This will 20829 always be '$25' for '-mabicalls'. 20830 20831 'v' 20832 Register '$3'. Do not use this constraint in new code; it is 20833 retained only for compatibility with glibc. 20834 20835 'y' 20836 Equivalent to 'r'; retained for backwards compatibility. 20837 20838 'z' 20839 A floating-point condition code register. 20840 20841 'I' 20842 A signed 16-bit constant (for arithmetic instructions). 20843 20844 'J' 20845 Integer zero. 20846 20847 'K' 20848 An unsigned 16-bit constant (for logic instructions). 20849 20850 'L' 20851 A signed 32-bit constant in which the lower 16 bits are zero. 20852 Such constants can be loaded using 'lui'. 20853 20854 'M' 20855 A constant that cannot be loaded using 'lui', 'addiu' or 20856 'ori'. 20857 20858 'N' 20859 A constant in the range -65535 to -1 (inclusive). 20860 20861 'O' 20862 A signed 15-bit constant. 20863 20864 'P' 20865 A constant in the range 1 to 65535 (inclusive). 20866 20867 'G' 20868 Floating-point zero. 20869 20870 'R' 20871 An address that can be used in a non-macro load or store. 20872 20873 'ZC' 20874 A memory operand whose address is formed by a base register 20875 and offset that is suitable for use in instructions with the 20876 same addressing mode as 'll' and 'sc'. 20877 20878 'ZD' 20879 An address suitable for a 'prefetch' instruction, or for any 20880 other instruction with the same addressing mode as 'prefetch'. 20881 20882_Motorola 680x0--'config/m68k/constraints.md'_ 20883 'a' 20884 Address register 20885 20886 'd' 20887 Data register 20888 20889 'f' 20890 68881 floating-point register, if available 20891 20892 'I' 20893 Integer in the range 1 to 8 20894 20895 'J' 20896 16-bit signed number 20897 20898 'K' 20899 Signed number whose magnitude is greater than 0x80 20900 20901 'L' 20902 Integer in the range -8 to -1 20903 20904 'M' 20905 Signed number whose magnitude is greater than 0x100 20906 20907 'N' 20908 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20909 20910 'O' 20911 16 (for rotate using swap) 20912 20913 'P' 20914 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20915 20916 'R' 20917 Numbers that mov3q can handle 20918 20919 'G' 20920 Floating point constant that is not a 68881 constant 20921 20922 'S' 20923 Operands that satisfy 'm' when -mpcrel is in effect 20924 20925 'T' 20926 Operands that satisfy 's' when -mpcrel is not in effect 20927 20928 'Q' 20929 Address register indirect addressing mode 20930 20931 'U' 20932 Register offset addressing 20933 20934 'W' 20935 const_call_operand 20936 20937 'Cs' 20938 symbol_ref or const 20939 20940 'Ci' 20941 const_int 20942 20943 'C0' 20944 const_int 0 20945 20946 'Cj' 20947 Range of signed numbers that don't fit in 16 bits 20948 20949 'Cmvq' 20950 Integers valid for mvq 20951 20952 'Capsw' 20953 Integers valid for a moveq followed by a swap 20954 20955 'Cmvz' 20956 Integers valid for mvz 20957 20958 'Cmvs' 20959 Integers valid for mvs 20960 20961 'Ap' 20962 push_operand 20963 20964 'Ac' 20965 Non-register operands allowed in clr 20966 20967_Moxie--'config/moxie/constraints.md'_ 20968 'A' 20969 An absolute address 20970 20971 'B' 20972 An offset address 20973 20974 'W' 20975 A register indirect memory operand 20976 20977 'I' 20978 A constant in the range of 0 to 255. 20979 20980 'N' 20981 A constant in the range of 0 to -255. 20982 20983_MSP430-'config/msp430/constraints.md'_ 20984 20985 'R12' 20986 Register R12. 20987 20988 'R13' 20989 Register R13. 20990 20991 'K' 20992 Integer constant 1. 20993 20994 'L' 20995 Integer constant -1^20..1^19. 20996 20997 'M' 20998 Integer constant 1-4. 20999 21000 'Ya' 21001 Memory references which do not require an extended MOVX 21002 instruction. 21003 21004 'Yl' 21005 Memory reference, labels only. 21006 21007 'Ys' 21008 Memory reference, stack only. 21009 21010_NDS32--'config/nds32/constraints.md'_ 21011 'w' 21012 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 21013 'l' 21014 LOW register class $r0 to $r7. 21015 'd' 21016 MIDDLE register class $r0 to $r11, $r16 to $r19. 21017 'h' 21018 HIGH register class $r12 to $r14, $r20 to $r31. 21019 't' 21020 Temporary assist register $ta (i.e. $r15). 21021 'k' 21022 Stack register $sp. 21023 'Iu03' 21024 Unsigned immediate 3-bit value. 21025 'In03' 21026 Negative immediate 3-bit value in the range of -7-0. 21027 'Iu04' 21028 Unsigned immediate 4-bit value. 21029 'Is05' 21030 Signed immediate 5-bit value. 21031 'Iu05' 21032 Unsigned immediate 5-bit value. 21033 'In05' 21034 Negative immediate 5-bit value in the range of -31-0. 21035 'Ip05' 21036 Unsigned immediate 5-bit value for movpi45 instruction with 21037 range 16-47. 21038 'Iu06' 21039 Unsigned immediate 6-bit value constraint for addri36.sp 21040 instruction. 21041 'Iu08' 21042 Unsigned immediate 8-bit value. 21043 'Iu09' 21044 Unsigned immediate 9-bit value. 21045 'Is10' 21046 Signed immediate 10-bit value. 21047 'Is11' 21048 Signed immediate 11-bit value. 21049 'Is15' 21050 Signed immediate 15-bit value. 21051 'Iu15' 21052 Unsigned immediate 15-bit value. 21053 'Ic15' 21054 A constant which is not in the range of imm15u but ok for bclr 21055 instruction. 21056 'Ie15' 21057 A constant which is not in the range of imm15u but ok for bset 21058 instruction. 21059 'It15' 21060 A constant which is not in the range of imm15u but ok for btgl 21061 instruction. 21062 'Ii15' 21063 A constant whose compliment value is in the range of imm15u 21064 and ok for bitci instruction. 21065 'Is16' 21066 Signed immediate 16-bit value. 21067 'Is17' 21068 Signed immediate 17-bit value. 21069 'Is19' 21070 Signed immediate 19-bit value. 21071 'Is20' 21072 Signed immediate 20-bit value. 21073 'Ihig' 21074 The immediate value that can be simply set high 20-bit. 21075 'Izeb' 21076 The immediate value 0xff. 21077 'Izeh' 21078 The immediate value 0xffff. 21079 'Ixls' 21080 The immediate value 0x01. 21081 'Ix11' 21082 The immediate value 0x7ff. 21083 'Ibms' 21084 The immediate value with power of 2. 21085 'Ifex' 21086 The immediate value with power of 2 minus 1. 21087 'U33' 21088 Memory constraint for 333 format. 21089 'U45' 21090 Memory constraint for 45 format. 21091 'U37' 21092 Memory constraint for 37 format. 21093 21094_Nios II family--'config/nios2/constraints.md'_ 21095 21096 'I' 21097 Integer that is valid as an immediate operand in an 21098 instruction taking a signed 16-bit number. Range -32768 to 21099 32767. 21100 21101 'J' 21102 Integer that is valid as an immediate operand in an 21103 instruction taking an unsigned 16-bit number. Range 0 to 21104 65535. 21105 21106 'K' 21107 Integer that is valid as an immediate operand in an 21108 instruction taking only the upper 16-bits of a 32-bit number. 21109 Range 32-bit numbers with the lower 16-bits being 0. 21110 21111 'L' 21112 Integer that is valid as an immediate operand for a shift 21113 instruction. Range 0 to 31. 21114 21115 'M' 21116 Integer that is valid as an immediate operand for only the 21117 value 0. Can be used in conjunction with the format modifier 21118 'z' to use 'r0' instead of '0' in the assembly output. 21119 21120 'N' 21121 Integer that is valid as an immediate operand for a custom 21122 instruction opcode. Range 0 to 255. 21123 21124 'S' 21125 Matches immediates which are addresses in the small data 21126 section and therefore can be added to 'gp' as a 16-bit 21127 immediate to re-create their 32-bit value. 21128 21129 'T' 21130 A 'const' wrapped 'UNSPEC' expression, representing a 21131 supported PIC or TLS relocation. 21132 21133_PDP-11--'config/pdp11/constraints.md'_ 21134 'a' 21135 Floating point registers AC0 through AC3. These can be loaded 21136 from/to memory with a single instruction. 21137 21138 'd' 21139 Odd numbered general registers (R1, R3, R5). These are used 21140 for 16-bit multiply operations. 21141 21142 'f' 21143 Any of the floating point registers (AC0 through AC5). 21144 21145 'G' 21146 Floating point constant 0. 21147 21148 'I' 21149 An integer constant that fits in 16 bits. 21150 21151 'J' 21152 An integer constant whose low order 16 bits are zero. 21153 21154 'K' 21155 An integer constant that does not meet the constraints for 21156 codes 'I' or 'J'. 21157 21158 'L' 21159 The integer constant 1. 21160 21161 'M' 21162 The integer constant -1. 21163 21164 'N' 21165 The integer constant 0. 21166 21167 'O' 21168 Integer constants -4 through -1 and 1 through 4; shifts by 21169 these amounts are handled as multiple single-bit shifts rather 21170 than a single variable-length shift. 21171 21172 'Q' 21173 A memory reference which requires an additional word (address 21174 or offset) after the opcode. 21175 21176 'R' 21177 A memory reference that is encoded within the opcode. 21178 21179_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 21180 'b' 21181 Address base register 21182 21183 'd' 21184 Floating point register (containing 64-bit value) 21185 21186 'f' 21187 Floating point register (containing 32-bit value) 21188 21189 'v' 21190 Altivec vector register 21191 21192 'wa' 21193 Any VSX register if the -mvsx option was used or NO_REGS. 21194 21195 When using any of the register constraints ('wa', 'wd', 'wf', 21196 'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'ws', 'wt', 'wu', 21197 'wv', 'ww', or 'wy') that take VSX registers, you must use 21198 '%x<n>' in the template so that the correct register is used. 21199 Otherwise the register number output in the assembly file will 21200 be incorrect if an Altivec register is an operand of a VSX 21201 instruction that expects VSX register numbering. 21202 21203 asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 21204 21205 is correct, but: 21206 21207 asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 21208 21209 is not correct. 21210 21211 'wd' 21212 VSX vector register to hold vector double data or NO_REGS. 21213 21214 'wf' 21215 VSX vector register to hold vector float data or NO_REGS. 21216 21217 'wg' 21218 If '-mmfpgpr' was used, a floating point register or NO_REGS. 21219 21220 'wh' 21221 Floating point register if direct moves are available, or 21222 NO_REGS. 21223 21224 'wi' 21225 FP or VSX register to hold 64-bit integers for VSX insns or 21226 NO_REGS. 21227 21228 'wj' 21229 FP or VSX register to hold 64-bit integers for direct moves or 21230 NO_REGS. 21231 21232 'wk' 21233 FP or VSX register to hold 64-bit doubles for direct moves or 21234 NO_REGS. 21235 21236 'wl' 21237 Floating point register if the LFIWAX instruction is enabled 21238 or NO_REGS. 21239 21240 'wm' 21241 VSX register if direct move instructions are enabled, or 21242 NO_REGS. 21243 21244 'wn' 21245 No register (NO_REGS). 21246 21247 'wr' 21248 General purpose register if 64-bit instructions are enabled or 21249 NO_REGS. 21250 21251 'ws' 21252 VSX vector register to hold scalar double values or NO_REGS. 21253 21254 'wt' 21255 VSX vector register to hold 128 bit integer or NO_REGS. 21256 21257 'wu' 21258 Altivec register to use for float/32-bit int loads/stores or 21259 NO_REGS. 21260 21261 'wv' 21262 Altivec register to use for double loads/stores or NO_REGS. 21263 21264 'ww' 21265 FP or VSX register to perform float operations under '-mvsx' 21266 or NO_REGS. 21267 21268 'wx' 21269 Floating point register if the STFIWX instruction is enabled 21270 or NO_REGS. 21271 21272 'wy' 21273 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 21274 21275 'wz' 21276 Floating point register if the LFIWZX instruction is enabled 21277 or NO_REGS. 21278 21279 'wD' 21280 Int constant that is the element number of the 64-bit scalar 21281 in a vector. 21282 21283 'wQ' 21284 A memory address that will work with the 'lq' and 'stq' 21285 instructions. 21286 21287 'h' 21288 'MQ', 'CTR', or 'LINK' register 21289 21290 'q' 21291 'MQ' register 21292 21293 'c' 21294 'CTR' register 21295 21296 'l' 21297 'LINK' register 21298 21299 'x' 21300 'CR' register (condition register) number 0 21301 21302 'y' 21303 'CR' register (condition register) 21304 21305 'z' 21306 'XER[CA]' carry bit (part of the XER register) 21307 21308 'I' 21309 Signed 16-bit constant 21310 21311 'J' 21312 Unsigned 16-bit constant shifted left 16 bits (use 'L' instead 21313 for 'SImode' constants) 21314 21315 'K' 21316 Unsigned 16-bit constant 21317 21318 'L' 21319 Signed 16-bit constant shifted left 16 bits 21320 21321 'M' 21322 Constant larger than 31 21323 21324 'N' 21325 Exact power of 2 21326 21327 'O' 21328 Zero 21329 21330 'P' 21331 Constant whose negation is a signed 16-bit constant 21332 21333 'G' 21334 Floating point constant that can be loaded into a register 21335 with one instruction per word 21336 21337 'H' 21338 Integer/Floating point constant that can be loaded into a 21339 register using three instructions 21340 21341 'm' 21342 Memory operand. Normally, 'm' does not allow addresses that 21343 update the base register. If '<' or '>' constraint is also 21344 used, they are allowed and therefore on PowerPC targets in 21345 that case it is only safe to use 'm<>' in an 'asm' statement 21346 if that 'asm' statement accesses the operand exactly once. 21347 The 'asm' statement must also use '%U<OPNO>' as a placeholder 21348 for the "update" flag in the corresponding load or store 21349 instruction. For example: 21350 21351 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 21352 21353 is correct but: 21354 21355 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 21356 21357 is not. 21358 21359 'es' 21360 A "stable" memory operand; that is, one which does not include 21361 any automodification of the base register. This used to be 21362 useful when 'm' allowed automodification of the base register, 21363 but as those are now only allowed when '<' or '>' is used, 21364 'es' is basically the same as 'm' without '<' and '>'. 21365 21366 'Q' 21367 Memory operand that is an offset from a register (it is 21368 usually better to use 'm' or 'es' in 'asm' statements) 21369 21370 'Z' 21371 Memory operand that is an indexed or indirect from a register 21372 (it is usually better to use 'm' or 'es' in 'asm' statements) 21373 21374 'R' 21375 AIX TOC entry 21376 21377 'a' 21378 Address operand that is an indexed or indirect from a register 21379 ('p' is preferable for 'asm' statements) 21380 21381 'S' 21382 Constant suitable as a 64-bit mask operand 21383 21384 'T' 21385 Constant suitable as a 32-bit mask operand 21386 21387 'U' 21388 System V Release 4 small data area reference 21389 21390 't' 21391 AND masks that can be performed by two rldic{l, r} 21392 instructions 21393 21394 'W' 21395 Vector constant that does not require memory 21396 21397 'j' 21398 Vector constant that is all zeros. 21399 21400_RL78--'config/rl78/constraints.md'_ 21401 21402 'Int3' 21403 An integer constant in the range 1 ... 7. 21404 'Int8' 21405 An integer constant in the range 0 ... 255. 21406 'J' 21407 An integer constant in the range -255 ... 0 21408 'K' 21409 The integer constant 1. 21410 'L' 21411 The integer constant -1. 21412 'M' 21413 The integer constant 0. 21414 'N' 21415 The integer constant 2. 21416 'O' 21417 The integer constant -2. 21418 'P' 21419 An integer constant in the range 1 ... 15. 21420 'Qbi' 21421 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 21422 'Qsc' 21423 The synthetic compare types-gt, lt, ge, and le. 21424 'Wab' 21425 A memory reference with an absolute address. 21426 'Wbc' 21427 A memory reference using 'BC' as a base register, with an 21428 optional offset. 21429 'Wca' 21430 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 21431 address, for calls. 21432 'Wcv' 21433 A memory reference using any 16-bit register pair for the 21434 address, for calls. 21435 'Wd2' 21436 A memory reference using 'DE' as a base register, with an 21437 optional offset. 21438 'Wde' 21439 A memory reference using 'DE' as a base register, without any 21440 offset. 21441 'Wfr' 21442 Any memory reference to an address in the far address space. 21443 'Wh1' 21444 A memory reference using 'HL' as a base register, with an 21445 optional one-byte offset. 21446 'Whb' 21447 A memory reference using 'HL' as a base register, with 'B' or 21448 'C' as the index register. 21449 'Whl' 21450 A memory reference using 'HL' as a base register, without any 21451 offset. 21452 'Ws1' 21453 A memory reference using 'SP' as a base register, with an 21454 optional one-byte offset. 21455 'Y' 21456 Any memory reference to an address in the near address space. 21457 'A' 21458 The 'AX' register. 21459 'B' 21460 The 'BC' register. 21461 'D' 21462 The 'DE' register. 21463 'R' 21464 'A' through 'L' registers. 21465 'S' 21466 The 'SP' register. 21467 'T' 21468 The 'HL' register. 21469 'Z08W' 21470 The 16-bit 'R8' register. 21471 'Z10W' 21472 The 16-bit 'R10' register. 21473 'Zint' 21474 The registers reserved for interrupts ('R24' to 'R31'). 21475 'a' 21476 The 'A' register. 21477 'b' 21478 The 'B' register. 21479 'c' 21480 The 'C' register. 21481 'd' 21482 The 'D' register. 21483 'e' 21484 The 'E' register. 21485 'h' 21486 The 'H' register. 21487 'l' 21488 The 'L' register. 21489 'v' 21490 The virtual registers. 21491 'w' 21492 The 'PSW' register. 21493 'x' 21494 The 'X' register. 21495 21496_RX--'config/rx/constraints.md'_ 21497 'Q' 21498 An address which does not involve register indirect addressing 21499 or pre/post increment/decrement addressing. 21500 21501 'Symbol' 21502 A symbol reference. 21503 21504 'Int08' 21505 A constant in the range -256 to 255, inclusive. 21506 21507 'Sint08' 21508 A constant in the range -128 to 127, inclusive. 21509 21510 'Sint16' 21511 A constant in the range -32768 to 32767, inclusive. 21512 21513 'Sint24' 21514 A constant in the range -8388608 to 8388607, inclusive. 21515 21516 'Uint04' 21517 A constant in the range 0 to 15, inclusive. 21518 21519_S/390 and zSeries--'config/s390/s390.h'_ 21520 'a' 21521 Address register (general purpose register except r0) 21522 21523 'c' 21524 Condition code register 21525 21526 'd' 21527 Data register (arbitrary general purpose register) 21528 21529 'f' 21530 Floating-point register 21531 21532 'I' 21533 Unsigned 8-bit constant (0-255) 21534 21535 'J' 21536 Unsigned 12-bit constant (0-4095) 21537 21538 'K' 21539 Signed 16-bit constant (-32768-32767) 21540 21541 'L' 21542 Value appropriate as displacement. 21543 '(0..4095)' 21544 for short displacement 21545 '(-524288..524287)' 21546 for long displacement 21547 21548 'M' 21549 Constant integer with a value of 0x7fffffff. 21550 21551 'N' 21552 Multiple letter constraint followed by 4 parameter letters. 21553 '0..9:' 21554 number of the part counting from most to least 21555 significant 21556 'H,Q:' 21557 mode of the part 21558 'D,S,H:' 21559 mode of the containing operand 21560 '0,F:' 21561 value of the other parts (F--all bits set) 21562 The constraint matches if the specified part of a constant has 21563 a value different from its other parts. 21564 21565 'Q' 21566 Memory reference without index register and with short 21567 displacement. 21568 21569 'R' 21570 Memory reference with index register and short displacement. 21571 21572 'S' 21573 Memory reference without index register but with long 21574 displacement. 21575 21576 'T' 21577 Memory reference with index register and long displacement. 21578 21579 'U' 21580 Pointer with short displacement. 21581 21582 'W' 21583 Pointer with long displacement. 21584 21585 'Y' 21586 Shift count operand. 21587 21588_SPARC--'config/sparc/sparc.h'_ 21589 'f' 21590 Floating-point register on the SPARC-V8 architecture and lower 21591 floating-point register on the SPARC-V9 architecture. 21592 21593 'e' 21594 Floating-point register. It is equivalent to 'f' on the 21595 SPARC-V8 architecture and contains both lower and upper 21596 floating-point registers on the SPARC-V9 architecture. 21597 21598 'c' 21599 Floating-point condition code register. 21600 21601 'd' 21602 Lower floating-point register. It is only valid on the 21603 SPARC-V9 architecture when the Visual Instruction Set is 21604 available. 21605 21606 'b' 21607 Floating-point register. It is only valid on the SPARC-V9 21608 architecture when the Visual Instruction Set is available. 21609 21610 'h' 21611 64-bit global or out register for the SPARC-V8+ architecture. 21612 21613 'C' 21614 The constant all-ones, for floating-point. 21615 21616 'A' 21617 Signed 5-bit constant 21618 21619 'D' 21620 A vector constant 21621 21622 'I' 21623 Signed 13-bit constant 21624 21625 'J' 21626 Zero 21627 21628 'K' 21629 32-bit constant with the low 12 bits clear (a constant that 21630 can be loaded with the 'sethi' instruction) 21631 21632 'L' 21633 A constant in the range supported by 'movcc' instructions 21634 (11-bit signed immediate) 21635 21636 'M' 21637 A constant in the range supported by 'movrcc' instructions 21638 (10-bit signed immediate) 21639 21640 'N' 21641 Same as 'K', except that it verifies that bits that are not in 21642 the lower 32-bit range are all zero. Must be used instead of 21643 'K' for modes wider than 'SImode' 21644 21645 'O' 21646 The constant 4096 21647 21648 'G' 21649 Floating-point zero 21650 21651 'H' 21652 Signed 13-bit constant, sign-extended to 32 or 64 bits 21653 21654 'P' 21655 The constant -1 21656 21657 'Q' 21658 Floating-point constant whose integral representation can be 21659 moved into an integer register using a single sethi 21660 instruction 21661 21662 'R' 21663 Floating-point constant whose integral representation can be 21664 moved into an integer register using a single mov instruction 21665 21666 'S' 21667 Floating-point constant whose integral representation can be 21668 moved into an integer register using a high/lo_sum instruction 21669 sequence 21670 21671 'T' 21672 Memory address aligned to an 8-byte boundary 21673 21674 'U' 21675 Even register 21676 21677 'W' 21678 Memory address for 'e' constraint registers 21679 21680 'w' 21681 Memory address with only a base register 21682 21683 'Y' 21684 Vector zero 21685 21686_SPU--'config/spu/spu.h'_ 21687 'a' 21688 An immediate which can be loaded with the il/ila/ilh/ilhu 21689 instructions. const_int is treated as a 64 bit value. 21690 21691 'c' 21692 An immediate for and/xor/or instructions. const_int is 21693 treated as a 64 bit value. 21694 21695 'd' 21696 An immediate for the 'iohl' instruction. const_int is treated 21697 as a 64 bit value. 21698 21699 'f' 21700 An immediate which can be loaded with 'fsmbi'. 21701 21702 'A' 21703 An immediate which can be loaded with the il/ila/ilh/ilhu 21704 instructions. const_int is treated as a 32 bit value. 21705 21706 'B' 21707 An immediate for most arithmetic instructions. const_int is 21708 treated as a 32 bit value. 21709 21710 'C' 21711 An immediate for and/xor/or instructions. const_int is 21712 treated as a 32 bit value. 21713 21714 'D' 21715 An immediate for the 'iohl' instruction. const_int is treated 21716 as a 32 bit value. 21717 21718 'I' 21719 A constant in the range [-64, 63] for shift/rotate 21720 instructions. 21721 21722 'J' 21723 An unsigned 7-bit constant for conversion/nop/channel 21724 instructions. 21725 21726 'K' 21727 A signed 10-bit constant for most arithmetic instructions. 21728 21729 'M' 21730 A signed 16 bit immediate for 'stop'. 21731 21732 'N' 21733 An unsigned 16-bit constant for 'iohl' and 'fsmbi'. 21734 21735 'O' 21736 An unsigned 7-bit constant whose 3 least significant bits are 21737 0. 21738 21739 'P' 21740 An unsigned 3-bit constant for 16-byte rotates and shifts 21741 21742 'R' 21743 Call operand, reg, for indirect calls 21744 21745 'S' 21746 Call operand, symbol, for relative calls. 21747 21748 'T' 21749 Call operand, const_int, for absolute calls. 21750 21751 'U' 21752 An immediate which can be loaded with the il/ila/ilh/ilhu 21753 instructions. const_int is sign extended to 128 bit. 21754 21755 'W' 21756 An immediate for shift and rotate instructions. const_int is 21757 treated as a 32 bit value. 21758 21759 'Y' 21760 An immediate for and/xor/or instructions. const_int is sign 21761 extended as a 128 bit. 21762 21763 'Z' 21764 An immediate for the 'iohl' instruction. const_int is sign 21765 extended to 128 bit. 21766 21767_TI C6X family--'config/c6x/constraints.md'_ 21768 'a' 21769 Register file A (A0-A31). 21770 21771 'b' 21772 Register file B (B0-B31). 21773 21774 'A' 21775 Predicate registers in register file A (A0-A2 on C64X and 21776 higher, A1 and A2 otherwise). 21777 21778 'B' 21779 Predicate registers in register file B (B0-B2). 21780 21781 'C' 21782 A call-used register in register file B (B0-B9, B16-B31). 21783 21784 'Da' 21785 Register file A, excluding predicate registers (A3-A31, plus 21786 A0 if not C64X or higher). 21787 21788 'Db' 21789 Register file B, excluding predicate registers (B3-B31). 21790 21791 'Iu4' 21792 Integer constant in the range 0 ... 15. 21793 21794 'Iu5' 21795 Integer constant in the range 0 ... 31. 21796 21797 'In5' 21798 Integer constant in the range -31 ... 0. 21799 21800 'Is5' 21801 Integer constant in the range -16 ... 15. 21802 21803 'I5x' 21804 Integer constant that can be the operand of an ADDA or a SUBA 21805 insn. 21806 21807 'IuB' 21808 Integer constant in the range 0 ... 65535. 21809 21810 'IsB' 21811 Integer constant in the range -32768 ... 32767. 21812 21813 'IsC' 21814 Integer constant in the range -2^{20} ... 2^{20} - 1. 21815 21816 'Jc' 21817 Integer constant that is a valid mask for the clr instruction. 21818 21819 'Js' 21820 Integer constant that is a valid mask for the set instruction. 21821 21822 'Q' 21823 Memory location with A base register. 21824 21825 'R' 21826 Memory location with B base register. 21827 21828 'S0' 21829 On C64x+ targets, a GP-relative small data reference. 21830 21831 'S1' 21832 Any kind of 'SYMBOL_REF', for use in a call address. 21833 21834 'Si' 21835 Any kind of immediate operand, unless it matches the S0 21836 constraint. 21837 21838 'T' 21839 Memory location with B base register, but not using a long 21840 offset. 21841 21842 'W' 21843 A memory operand with an address that can't be used in an 21844 unaligned access. 21845 21846 'Z' 21847 Register B14 (aka DP). 21848 21849_TILE-Gx--'config/tilegx/constraints.md'_ 21850 'R00' 21851 'R01' 21852 'R02' 21853 'R03' 21854 'R04' 21855 'R05' 21856 'R06' 21857 'R07' 21858 'R08' 21859 'R09' 21860 'R10' 21861 Each of these represents a register constraint for an 21862 individual register, from r0 to r10. 21863 21864 'I' 21865 Signed 8-bit integer constant. 21866 21867 'J' 21868 Signed 16-bit integer constant. 21869 21870 'K' 21871 Unsigned 16-bit integer constant. 21872 21873 'L' 21874 Integer constant that fits in one signed byte when incremented 21875 by one (-129 ... 126). 21876 21877 'm' 21878 Memory operand. If used together with '<' or '>', the operand 21879 can have postincrement which requires printing with '%In' and 21880 '%in' on TILE-Gx. For example: 21881 21882 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 21883 21884 'M' 21885 A bit mask suitable for the BFINS instruction. 21886 21887 'N' 21888 Integer constant that is a byte tiled out eight times. 21889 21890 'O' 21891 The integer zero constant. 21892 21893 'P' 21894 Integer constant that is a sign-extended byte tiled out as 21895 four shorts. 21896 21897 'Q' 21898 Integer constant that fits in one signed byte when incremented 21899 (-129 ... 126), but excluding -1. 21900 21901 'S' 21902 Integer constant that has all 1 bits consecutive and starting 21903 at bit 0. 21904 21905 'T' 21906 A 16-bit fragment of a got, tls, or pc-relative reference. 21907 21908 'U' 21909 Memory operand except postincrement. This is roughly the same 21910 as 'm' when not used together with '<' or '>'. 21911 21912 'W' 21913 An 8-element vector constant with identical elements. 21914 21915 'Y' 21916 A 4-element vector constant with identical elements. 21917 21918 'Z0' 21919 The integer constant 0xffffffff. 21920 21921 'Z1' 21922 The integer constant 0xffffffff00000000. 21923 21924_TILEPro--'config/tilepro/constraints.md'_ 21925 'R00' 21926 'R01' 21927 'R02' 21928 'R03' 21929 'R04' 21930 'R05' 21931 'R06' 21932 'R07' 21933 'R08' 21934 'R09' 21935 'R10' 21936 Each of these represents a register constraint for an 21937 individual register, from r0 to r10. 21938 21939 'I' 21940 Signed 8-bit integer constant. 21941 21942 'J' 21943 Signed 16-bit integer constant. 21944 21945 'K' 21946 Nonzero integer constant with low 16 bits zero. 21947 21948 'L' 21949 Integer constant that fits in one signed byte when incremented 21950 by one (-129 ... 126). 21951 21952 'm' 21953 Memory operand. If used together with '<' or '>', the operand 21954 can have postincrement which requires printing with '%In' and 21955 '%in' on TILEPro. For example: 21956 21957 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 21958 21959 'M' 21960 A bit mask suitable for the MM instruction. 21961 21962 'N' 21963 Integer constant that is a byte tiled out four times. 21964 21965 'O' 21966 The integer zero constant. 21967 21968 'P' 21969 Integer constant that is a sign-extended byte tiled out as two 21970 shorts. 21971 21972 'Q' 21973 Integer constant that fits in one signed byte when incremented 21974 (-129 ... 126), but excluding -1. 21975 21976 'T' 21977 A symbolic operand, or a 16-bit fragment of a got, tls, or 21978 pc-relative reference. 21979 21980 'U' 21981 Memory operand except postincrement. This is roughly the same 21982 as 'm' when not used together with '<' or '>'. 21983 21984 'W' 21985 A 4-element vector constant with identical elements. 21986 21987 'Y' 21988 A 2-element vector constant with identical elements. 21989 21990_Visium--'config/visium/constraints.md'_ 21991 'b' 21992 EAM register 'mdb' 21993 21994 'c' 21995 EAM register 'mdc' 21996 21997 'f' 21998 Floating point register 21999 22000 'k' 22001 Register for sibcall optimization 22002 22003 'l' 22004 General register, but not 'r29', 'r30' and 'r31' 22005 22006 't' 22007 Register 'r1' 22008 22009 'u' 22010 Register 'r2' 22011 22012 'v' 22013 Register 'r3' 22014 22015 'G' 22016 Floating-point constant 0.0 22017 22018 'J' 22019 Integer constant in the range 0 .. 65535 (16-bit immediate) 22020 22021 'K' 22022 Integer constant in the range 1 .. 31 (5-bit immediate) 22023 22024 'L' 22025 Integer constant in the range -65535 .. -1 (16-bit negative 22026 immediate) 22027 22028 'M' 22029 Integer constant -1 22030 22031 'O' 22032 Integer constant 0 22033 22034 'P' 22035 Integer constant 32 22036 22037_x86 family--'config/i386/constraints.md'_ 22038 'R' 22039 Legacy register--the eight integer registers available on all 22040 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 22041 22042 'q' 22043 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 22044 'c', and 'd'; in 64-bit mode, any integer register. 22045 22046 'Q' 22047 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 22048 22049 'l' 22050 Any register that can be used as the index in a base+index 22051 memory access: that is, any general register except the stack 22052 pointer. 22053 22054 'a' 22055 The 'a' register. 22056 22057 'b' 22058 The 'b' register. 22059 22060 'c' 22061 The 'c' register. 22062 22063 'd' 22064 The 'd' register. 22065 22066 'S' 22067 The 'si' register. 22068 22069 'D' 22070 The 'di' register. 22071 22072 'A' 22073 The 'a' and 'd' registers. This class is used for 22074 instructions that return double word results in the 'ax:dx' 22075 register pair. Single word values will be allocated either in 22076 'ax' or 'dx'. For example on i386 the following implements 22077 'rdtsc': 22078 22079 unsigned long long rdtsc (void) 22080 { 22081 unsigned long long tick; 22082 __asm__ __volatile__("rdtsc":"=A"(tick)); 22083 return tick; 22084 } 22085 22086 This is not correct on x86-64 as it would allocate tick in 22087 either 'ax' or 'dx'. You have to use the following variant 22088 instead: 22089 22090 unsigned long long rdtsc (void) 22091 { 22092 unsigned int tickl, tickh; 22093 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 22094 return ((unsigned long long)tickh << 32)|tickl; 22095 } 22096 22097 'f' 22098 Any 80387 floating-point (stack) register. 22099 22100 't' 22101 Top of 80387 floating-point stack ('%st(0)'). 22102 22103 'u' 22104 Second from top of 80387 floating-point stack ('%st(1)'). 22105 22106 'y' 22107 Any MMX register. 22108 22109 'x' 22110 Any SSE register. 22111 22112 'Yz' 22113 First SSE register ('%xmm0'). 22114 22115 'Y2' 22116 Any SSE register, when SSE2 is enabled. 22117 22118 'Yi' 22119 Any SSE register, when SSE2 and inter-unit moves are enabled. 22120 22121 'Ym' 22122 Any MMX register, when inter-unit moves are enabled. 22123 22124 'I' 22125 Integer constant in the range 0 ... 31, for 32-bit shifts. 22126 22127 'J' 22128 Integer constant in the range 0 ... 63, for 64-bit shifts. 22129 22130 'K' 22131 Signed 8-bit integer constant. 22132 22133 'L' 22134 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 22135 22136 'M' 22137 0, 1, 2, or 3 (shifts for the 'lea' instruction). 22138 22139 'N' 22140 Unsigned 8-bit integer constant (for 'in' and 'out' 22141 instructions). 22142 22143 'O' 22144 Integer constant in the range 0 ... 127, for 128-bit shifts. 22145 22146 'G' 22147 Standard 80387 floating point constant. 22148 22149 'C' 22150 SSE constant zero operand. 22151 22152 'e' 22153 32-bit signed integer constant, or a symbolic reference known 22154 to fit that range (for immediate operands in sign-extending 22155 x86-64 instructions). 22156 22157 'Z' 22158 32-bit unsigned integer constant, or a symbolic reference 22159 known to fit that range (for immediate operands in 22160 zero-extending x86-64 instructions). 22161 22162_Xstormy16--'config/stormy16/stormy16.h'_ 22163 'a' 22164 Register r0. 22165 22166 'b' 22167 Register r1. 22168 22169 'c' 22170 Register r2. 22171 22172 'd' 22173 Register r8. 22174 22175 'e' 22176 Registers r0 through r7. 22177 22178 't' 22179 Registers r0 and r1. 22180 22181 'y' 22182 The carry register. 22183 22184 'z' 22185 Registers r8 and r9. 22186 22187 'I' 22188 A constant between 0 and 3 inclusive. 22189 22190 'J' 22191 A constant that has exactly one bit set. 22192 22193 'K' 22194 A constant that has exactly one bit clear. 22195 22196 'L' 22197 A constant between 0 and 255 inclusive. 22198 22199 'M' 22200 A constant between -255 and 0 inclusive. 22201 22202 'N' 22203 A constant between -3 and 0 inclusive. 22204 22205 'O' 22206 A constant between 1 and 4 inclusive. 22207 22208 'P' 22209 A constant between -4 and -1 inclusive. 22210 22211 'Q' 22212 A memory reference that is a stack push. 22213 22214 'R' 22215 A memory reference that is a stack pop. 22216 22217 'S' 22218 A memory reference that refers to a constant address of known 22219 value. 22220 22221 'T' 22222 The register indicated by Rx (not implemented yet). 22223 22224 'U' 22225 A constant that is not between 2 and 15 inclusive. 22226 22227 'Z' 22228 The constant 0. 22229 22230_Xtensa--'config/xtensa/constraints.md'_ 22231 'a' 22232 General-purpose 32-bit register 22233 22234 'b' 22235 One-bit boolean register 22236 22237 'A' 22238 MAC16 40-bit accumulator register 22239 22240 'I' 22241 Signed 12-bit integer constant, for use in MOVI instructions 22242 22243 'J' 22244 Signed 8-bit integer constant, for use in ADDI instructions 22245 22246 'K' 22247 Integer constant valid for BccI instructions 22248 22249 'L' 22250 Unsigned constant valid for BccUI instructions 22251 22252 22253File: gccint.info, Node: Disable Insn Alternatives, Next: Define Constraints, Prev: Machine Constraints, Up: Constraints 22254 2225516.8.6 Disable insn alternatives using the 'enabled' attribute 22256-------------------------------------------------------------- 22257 22258There are three insn attributes that may be used to selectively disable 22259instruction alternatives: 22260 22261'enabled' 22262 Says whether an alternative is available on the current subtarget. 22263 22264'preferred_for_size' 22265 Says whether an enabled alternative should be used in code that is 22266 optimized for size. 22267 22268'preferred_for_speed' 22269 Says whether an enabled alternative should be used in code that is 22270 optimized for speed. 22271 22272 All these attributes should use '(const_int 1)' to allow an alternative 22273or '(const_int 0)' to disallow it. The attributes must be a static 22274property of the subtarget; they cannot for example depend on the current 22275operands, on the current optimization level, on the location of the insn 22276within the body of a loop, on whether register allocation has finished, 22277or on the current compiler pass. 22278 22279 The 'enabled' attribute is a correctness property. It tells GCC to act 22280as though the disabled alternatives were never defined in the first 22281place. This is useful when adding new instructions to an existing 22282pattern in cases where the new instructions are only available for 22283certain cpu architecture levels (typically mapped to the '-march=' 22284command-line option). 22285 22286 In contrast, the 'preferred_for_size' and 'preferred_for_speed' 22287attributes are strong optimization hints rather than correctness 22288properties. 'preferred_for_size' tells GCC which alternatives to 22289consider when adding or modifying an instruction that GCC wants to 22290optimize for size. 'preferred_for_speed' does the same thing for speed. 22291Note that things like code motion can lead to cases where code optimized 22292for size uses alternatives that are not preferred for size, and 22293similarly for speed. 22294 22295 Although 'define_insn's can in principle specify the 'enabled' 22296attribute directly, it is often clearer to have subsiduary attributes 22297for each architectural feature of interest. The 'define_insn's can then 22298use these subsiduary attributes to say which alternatives require which 22299features. The example below does this for 'cpu_facility'. 22300 22301 E.g. the following two patterns could easily be merged using the 22302'enabled' attribute: 22303 22304 22305 (define_insn "*movdi_old" 22306 [(set (match_operand:DI 0 "register_operand" "=d") 22307 (match_operand:DI 1 "register_operand" " d"))] 22308 "!TARGET_NEW" 22309 "lgr %0,%1") 22310 22311 (define_insn "*movdi_new" 22312 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 22313 (match_operand:DI 1 "register_operand" " d,d,f"))] 22314 "TARGET_NEW" 22315 "@ 22316 lgr %0,%1 22317 ldgr %0,%1 22318 lgdr %0,%1") 22319 22320 22321 to: 22322 22323 22324 (define_insn "*movdi_combined" 22325 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 22326 (match_operand:DI 1 "register_operand" " d,d,f"))] 22327 "" 22328 "@ 22329 lgr %0,%1 22330 ldgr %0,%1 22331 lgdr %0,%1" 22332 [(set_attr "cpu_facility" "*,new,new")]) 22333 22334 22335 with the 'enabled' attribute defined like this: 22336 22337 22338 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 22339 22340 (define_attr "enabled" "" 22341 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 22342 (and (eq_attr "cpu_facility" "new") 22343 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 22344 (const_int 1)] 22345 (const_int 0))) 22346 22347 22348 22349File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Disable Insn Alternatives, Up: Constraints 22350 2235116.8.7 Defining Machine-Specific Constraints 22352-------------------------------------------- 22353 22354Machine-specific constraints fall into two categories: register and 22355non-register constraints. Within the latter category, constraints which 22356allow subsets of all possible memory or address operands should be 22357specially marked, to give 'reload' more information. 22358 22359 Machine-specific constraints can be given names of arbitrary length, 22360but they must be entirely composed of letters, digits, underscores 22361('_'), and angle brackets ('< >'). Like C identifiers, they must begin 22362with a letter or underscore. 22363 22364 In order to avoid ambiguity in operand constraint strings, no 22365constraint can have a name that begins with any other constraint's name. 22366For example, if 'x' is defined as a constraint name, 'xy' may not be, 22367and vice versa. As a consequence of this rule, no constraint may begin 22368with one of the generic constraint letters: 'E F V X g i m n o p r s'. 22369 22370 Register constraints correspond directly to register classes. *Note 22371Register Classes::. There is thus not much flexibility in their 22372definitions. 22373 22374 -- MD Expression: define_register_constraint name regclass docstring 22375 All three arguments are string constants. NAME is the name of the 22376 constraint, as it will appear in 'match_operand' expressions. If 22377 NAME is a multi-letter constraint its length shall be the same for 22378 all constraints starting with the same letter. REGCLASS can be 22379 either the name of the corresponding register class (*note Register 22380 Classes::), or a C expression which evaluates to the appropriate 22381 register class. If it is an expression, it must have no side 22382 effects, and it cannot look at the operand. The usual use of 22383 expressions is to map some register constraints to 'NO_REGS' when 22384 the register class is not available on a given subarchitecture. 22385 22386 DOCSTRING is a sentence documenting the meaning of the constraint. 22387 Docstrings are explained further below. 22388 22389 Non-register constraints are more like predicates: the constraint 22390definition gives a Boolean expression which indicates whether the 22391constraint matches. 22392 22393 -- MD Expression: define_constraint name docstring exp 22394 The NAME and DOCSTRING arguments are the same as for 22395 'define_register_constraint', but note that the docstring comes 22396 immediately after the name for these expressions. EXP is an RTL 22397 expression, obeying the same rules as the RTL expressions in 22398 predicate definitions. *Note Defining Predicates::, for details. 22399 If it evaluates true, the constraint matches; if it evaluates 22400 false, it doesn't. Constraint expressions should indicate which 22401 RTL codes they might match, just like predicate expressions. 22402 22403 'match_test' C expressions have access to the following variables: 22404 22405 OP 22406 The RTL object defining the operand. 22407 MODE 22408 The machine mode of OP. 22409 IVAL 22410 'INTVAL (OP)', if OP is a 'const_int'. 22411 HVAL 22412 'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'. 22413 LVAL 22414 'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'. 22415 RVAL 22416 'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 22417 'const_double'. 22418 22419 The *VAL variables should only be used once another piece of the 22420 expression has verified that OP is the appropriate kind of RTL 22421 object. 22422 22423 Most non-register constraints should be defined with 22424'define_constraint'. The remaining two definition expressions are only 22425appropriate for constraints that should be handled specially by 'reload' 22426if they fail to match. 22427 22428 -- MD Expression: define_memory_constraint name docstring exp 22429 Use this expression for constraints that match a subset of all 22430 memory operands: that is, 'reload' can make them match by 22431 converting the operand to the form '(mem (reg X))', where X is a 22432 base register (from the register class specified by 22433 'BASE_REG_CLASS', *note Register Classes::). 22434 22435 For example, on the S/390, some instructions do not accept 22436 arbitrary memory references, but only those that do not make use of 22437 an index register. The constraint letter 'Q' is defined to 22438 represent a memory address of this type. If 'Q' is defined with 22439 'define_memory_constraint', a 'Q' constraint can handle any memory 22440 operand, because 'reload' knows it can simply copy the memory 22441 address into a base register if required. This is analogous to the 22442 way an 'o' constraint can handle any memory operand. 22443 22444 The syntax and semantics are otherwise identical to 22445 'define_constraint'. 22446 22447 -- MD Expression: define_address_constraint name docstring exp 22448 Use this expression for constraints that match a subset of all 22449 address operands: that is, 'reload' can make the constraint match 22450 by converting the operand to the form '(reg X)', again with X a 22451 base register. 22452 22453 Constraints defined with 'define_address_constraint' can only be 22454 used with the 'address_operand' predicate, or machine-specific 22455 predicates that work the same way. They are treated analogously to 22456 the generic 'p' constraint. 22457 22458 The syntax and semantics are otherwise identical to 22459 'define_constraint'. 22460 22461 For historical reasons, names beginning with the letters 'G H' are 22462reserved for constraints that match only 'const_double's, and names 22463beginning with the letters 'I J K L M N O P' are reserved for 22464constraints that match only 'const_int's. This may change in the 22465future. For the time being, constraints with these names must be 22466written in a stylized form, so that 'genpreds' can tell you did it 22467correctly: 22468 22469 (define_constraint "[GHIJKLMNOP]..." 22470 "DOC..." 22471 (and (match_code "const_int") ; 'const_double' for G/H 22472 CONDITION...)) ; usually a 'match_test' 22473 22474 It is fine to use names beginning with other letters for constraints 22475that match 'const_double's or 'const_int's. 22476 22477 Each docstring in a constraint definition should be one or more 22478complete sentences, marked up in Texinfo format. _They are currently 22479unused._ In the future they will be copied into the GCC manual, in 22480*note Machine Constraints::, replacing the hand-maintained tables 22481currently found in that section. Also, in the future the compiler may 22482use this to give more helpful diagnostics when poor choice of 'asm' 22483constraints causes a reload failure. 22484 22485 If you put the pseudo-Texinfo directive '@internal' at the beginning of 22486a docstring, then (in the future) it will appear only in the internals 22487manual's version of the machine-specific constraint tables. Use this 22488for constraints that should not appear in 'asm' statements. 22489 22490 22491File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 22492 2249316.8.8 Testing constraints from C 22494--------------------------------- 22495 22496It is occasionally useful to test a constraint from C code rather than 22497implicitly via the constraint string in a 'match_operand'. The 22498generated file 'tm_p.h' declares a few interfaces for working with 22499constraints. At present these are defined for all constraints except 22500'g' (which is equivalent to 'general_operand'). 22501 22502 Some valid constraint names are not valid C identifiers, so there is a 22503mangling scheme for referring to them from C. Constraint names that do 22504not contain angle brackets or underscores are left unchanged. 22505Underscores are doubled, each '<' is replaced with '_l', and each '>' 22506with '_g'. Here are some examples: 22507 22508 *Original* *Mangled* 22509 x x 22510 P42x P42x 22511 P4_x P4__x 22512 P4>x P4_gx 22513 P4>> P4_g_g 22514 P4_g> P4__g_g 22515 22516 Throughout this section, the variable C is either a constraint in the 22517abstract sense, or a constant from 'enum constraint_num'; the variable M 22518is a mangled constraint name (usually as part of a larger identifier). 22519 22520 -- Enum: constraint_num 22521 For each constraint except 'g', there is a corresponding 22522 enumeration constant: 'CONSTRAINT_' plus the mangled name of the 22523 constraint. Functions that take an 'enum constraint_num' as an 22524 argument expect one of these constants. 22525 22526 -- Function: inline bool satisfies_constraint_M (rtx EXP) 22527 For each non-register constraint M except 'g', there is one of 22528 these functions; it returns 'true' if EXP satisfies the constraint. 22529 These functions are only visible if 'rtl.h' was included before 22530 'tm_p.h'. 22531 22532 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 22533 C) 22534 Like the 'satisfies_constraint_M' functions, but the constraint to 22535 test is given as an argument, C. If C specifies a register 22536 constraint, this function will always return 'false'. 22537 22538 -- Function: enum reg_class reg_class_for_constraint (enum 22539 constraint_num C) 22540 Returns the register class associated with C. If C is not a 22541 register constraint, or those registers are not available for the 22542 currently selected subtarget, returns 'NO_REGS'. 22543 22544 Here is an example use of 'satisfies_constraint_M'. In peephole 22545optimizations (*note Peephole Definitions::), operand constraint strings 22546are ignored, so if there are relevant constraints, they must be tested 22547in the C condition. In the example, the optimization is applied if 22548operand 2 does _not_ satisfy the 'K' constraint. (This is a simplified 22549version of a peephole definition from the i386 machine description.) 22550 22551 (define_peephole2 22552 [(match_scratch:SI 3 "r") 22553 (set (match_operand:SI 0 "register_operand" "") 22554 (mult:SI (match_operand:SI 1 "memory_operand" "") 22555 (match_operand:SI 2 "immediate_operand" "")))] 22556 22557 "!satisfies_constraint_K (operands[2])" 22558 22559 [(set (match_dup 3) (match_dup 1)) 22560 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 22561 22562 "") 22563 22564 22565File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 22566 2256716.9 Standard Pattern Names For Generation 22568========================================== 22569 22570Here is a table of the instruction names that are meaningful in the RTL 22571generation pass of the compiler. Giving one of these names to an 22572instruction pattern tells the RTL generation pass that it can use the 22573pattern to accomplish a certain task. 22574 22575'movM' 22576 Here M stands for a two-letter machine mode name, in lowercase. 22577 This instruction pattern moves data with that machine mode from 22578 operand 1 to operand 0. For example, 'movsi' moves full-word data. 22579 22580 If operand 0 is a 'subreg' with mode M of a register whose own mode 22581 is wider than M, the effect of this instruction is to store the 22582 specified value in the part of the register that corresponds to 22583 mode M. Bits outside of M, but which are within the same target 22584 word as the 'subreg' are undefined. Bits which are outside the 22585 target word are left unchanged. 22586 22587 This class of patterns is special in several ways. First of all, 22588 each of these names up to and including full word size _must_ be 22589 defined, because there is no other way to copy a datum from one 22590 place to another. If there are patterns accepting operands in 22591 larger modes, 'movM' must be defined for integer modes of those 22592 sizes. 22593 22594 Second, these patterns are not used solely in the RTL generation 22595 pass. Even the reload pass can generate move insns to copy values 22596 from stack slots into temporary registers. When it does so, one of 22597 the operands is a hard register and the other is an operand that 22598 can need to be reloaded into a register. 22599 22600 Therefore, when given such a pair of operands, the pattern must 22601 generate RTL which needs no reloading and needs no temporary 22602 registers--no registers other than the operands. For example, if 22603 you support the pattern with a 'define_expand', then in such a case 22604 the 'define_expand' mustn't call 'force_reg' or any other such 22605 function which might generate new pseudo registers. 22606 22607 This requirement exists even for subword modes on a RISC machine 22608 where fetching those modes from memory normally requires several 22609 insns and some temporary registers. 22610 22611 During reload a memory reference with an invalid address may be 22612 passed as an operand. Such an address will be replaced with a 22613 valid address later in the reload pass. In this case, nothing may 22614 be done with the address except to use it as it stands. If it is 22615 copied, it will not be replaced with a valid address. No attempt 22616 should be made to make such an address into a valid address and no 22617 routine (such as 'change_address') that will do so may be called. 22618 Note that 'general_operand' will fail when applied to such an 22619 address. 22620 22621 The global variable 'reload_in_progress' (which must be explicitly 22622 declared if required) can be used to determine whether such special 22623 handling is required. 22624 22625 The variety of operands that have reloads depends on the rest of 22626 the machine description, but typically on a RISC machine these can 22627 only be pseudo registers that did not get hard registers, while on 22628 other machines explicit memory references will get optional 22629 reloads. 22630 22631 If a scratch register is required to move an object to or from 22632 memory, it can be allocated using 'gen_reg_rtx' prior to life 22633 analysis. 22634 22635 If there are cases which need scratch registers during or after 22636 reload, you must provide an appropriate secondary_reload target 22637 hook. 22638 22639 The macro 'can_create_pseudo_p' can be used to determine if it is 22640 unsafe to create new pseudo registers. If this variable is 22641 nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new 22642 pseudo. 22643 22644 The constraints on a 'movM' must permit moving any hard register to 22645 any other hard register provided that 'HARD_REGNO_MODE_OK' permits 22646 mode M in both registers and 'TARGET_REGISTER_MOVE_COST' applied to 22647 their classes returns a value of 2. 22648 22649 It is obligatory to support floating point 'movM' instructions into 22650 and out of any registers that can hold fixed point values, because 22651 unions and structures (which have modes 'SImode' or 'DImode') can 22652 be in those registers and they may have floating point members. 22653 22654 There may also be a need to support fixed point 'movM' instructions 22655 in and out of floating point registers. Unfortunately, I have 22656 forgotten why this was so, and I don't know whether it is still 22657 true. If 'HARD_REGNO_MODE_OK' rejects fixed point values in 22658 floating point registers, then the constraints of the fixed point 22659 'movM' instructions must be designed to avoid ever trying to reload 22660 into a floating point register. 22661 22662'reload_inM' 22663'reload_outM' 22664 These named patterns have been obsoleted by the target hook 22665 'secondary_reload'. 22666 22667 Like 'movM', but used when a scratch register is required to move 22668 between operand 0 and operand 1. Operand 2 describes the scratch 22669 register. See the discussion of the 'SECONDARY_RELOAD_CLASS' macro 22670 in *note Register Classes::. 22671 22672 There are special restrictions on the form of the 'match_operand's 22673 used in these patterns. First, only the predicate for the reload 22674 operand is examined, i.e., 'reload_in' examines operand 1, but not 22675 the predicates for operand 0 or 2. Second, there may be only one 22676 alternative in the constraints. Third, only a single register 22677 class letter may be used for the constraint; subsequent constraint 22678 letters are ignored. As a special exception, an empty constraint 22679 string matches the 'ALL_REGS' register class. This may relieve 22680 ports of the burden of defining an 'ALL_REGS' constraint letter 22681 just for these patterns. 22682 22683'movstrictM' 22684 Like 'movM' except that if operand 0 is a 'subreg' with mode M of a 22685 register whose natural mode is wider, the 'movstrictM' instruction 22686 is guaranteed not to alter any of the register except the part 22687 which belongs to mode M. 22688 22689'movmisalignM' 22690 This variant of a move pattern is designed to load or store a value 22691 from a memory address that is not naturally aligned for its mode. 22692 For a store, the memory will be in operand 0; for a load, the 22693 memory will be in operand 1. The other operand is guaranteed not 22694 to be a memory, so that it's easy to tell whether this is a load or 22695 store. 22696 22697 This pattern is used by the autovectorizer, and when expanding a 22698 'MISALIGNED_INDIRECT_REF' expression. 22699 22700'load_multiple' 22701 Load several consecutive memory locations into consecutive 22702 registers. Operand 0 is the first of the consecutive registers, 22703 operand 1 is the first memory location, and operand 2 is a 22704 constant: the number of consecutive registers. 22705 22706 Define this only if the target machine really has such an 22707 instruction; do not define this if the most efficient way of 22708 loading consecutive registers from memory is to do them one at a 22709 time. 22710 22711 On some machines, there are restrictions as to which consecutive 22712 registers can be stored into memory, such as particular starting or 22713 ending register numbers or only a range of valid counts. For those 22714 machines, use a 'define_expand' (*note Expander Definitions::) and 22715 make the pattern fail if the restrictions are not met. 22716 22717 Write the generated insn as a 'parallel' with elements being a 22718 'set' of one register from the appropriate memory location (you may 22719 also need 'use' or 'clobber' elements). Use a 'match_parallel' 22720 (*note RTL Template::) to recognize the insn. See 'rs6000.md' for 22721 examples of the use of this insn pattern. 22722 22723'store_multiple' 22724 Similar to 'load_multiple', but store several consecutive registers 22725 into consecutive memory locations. Operand 0 is the first of the 22726 consecutive memory locations, operand 1 is the first register, and 22727 operand 2 is a constant: the number of consecutive registers. 22728 22729'vec_load_lanesMN' 22730 Perform an interleaved load of several vectors from memory operand 22731 1 into register operand 0. Both operands have mode M. The 22732 register operand is viewed as holding consecutive vectors of mode 22733 N, while the memory operand is a flat array that contains the same 22734 number of elements. The operation is equivalent to: 22735 22736 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22737 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22738 for (i = 0; i < c; i++) 22739 operand0[i][j] = operand1[j * c + i]; 22740 22741 For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from 22742 memory into a register of mode 'TI'. The register contains two 22743 consecutive vectors of mode 'V4HI'. 22744 22745 This pattern can only be used if: 22746 TARGET_ARRAY_MODE_SUPPORTED_P (N, C) 22747 is true. GCC assumes that, if a target supports this kind of 22748 instruction for some mode N, it also supports unaligned loads for 22749 vectors of mode N. 22750 22751'vec_store_lanesMN' 22752 Equivalent to 'vec_load_lanesMN', with the memory and register 22753 operands reversed. That is, the instruction is equivalent to: 22754 22755 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22756 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22757 for (i = 0; i < c; i++) 22758 operand0[j * c + i] = operand1[i][j]; 22759 22760 for a memory operand 0 and register operand 1. 22761 22762'vec_setM' 22763 Set given field in the vector value. Operand 0 is the vector to 22764 modify, operand 1 is new value of field and operand 2 specify the 22765 field index. 22766 22767'vec_extractM' 22768 Extract given field from the vector value. Operand 1 is the 22769 vector, operand 2 specify field index and operand 0 place to store 22770 value into. 22771 22772'vec_initM' 22773 Initialize the vector to given values. Operand 0 is the vector to 22774 initialize and operand 1 is parallel containing values for 22775 individual fields. 22776 22777'vcondMN' 22778 Output a conditional vector move. Operand 0 is the destination to 22779 receive a combination of operand 1 and operand 2, which are of mode 22780 M, dependent on the outcome of the predicate in operand 3 which is 22781 a vector comparison with operands of mode N in operands 4 and 5. 22782 The modes M and N should have the same size. Operand 0 will be set 22783 to the value OP1 & MSK | OP2 & ~MSK where MSK is computed by 22784 element-wise evaluation of the vector comparison with a truth value 22785 of all-ones and a false value of all-zeros. 22786 22787'vec_permM' 22788 Output a (variable) vector permutation. Operand 0 is the 22789 destination to receive elements from operand 1 and operand 2, which 22790 are of mode M. Operand 3 is the "selector". It is an integral 22791 mode vector of the same width and number of elements as mode M. 22792 22793 The input elements are numbered from 0 in operand 1 through 2*N-1 22794 in operand 2. The elements of the selector must be computed modulo 22795 2*N. Note that if 'rtx_equal_p(operand1, operand2)', this can be 22796 implemented with just operand 1 and selector elements modulo N. 22797 22798 In order to make things easy for a number of targets, if there is 22799 no 'vec_perm' pattern for mode M, but there is for mode Q where Q 22800 is a vector of 'QImode' of the same width as M, the middle-end will 22801 lower the mode M 'VEC_PERM_EXPR' to mode Q. 22802 22803'vec_perm_constM' 22804 Like 'vec_perm' except that the permutation is a compile-time 22805 constant. That is, operand 3, the "selector", is a 'CONST_VECTOR'. 22806 22807 Some targets cannot perform a permutation with a variable selector, 22808 but can efficiently perform a constant permutation. Further, the 22809 target hook 'vec_perm_ok' is queried to determine if the specific 22810 constant permutation is available efficiently; the named pattern is 22811 never expanded without 'vec_perm_ok' returning true. 22812 22813 There is no need for a target to supply both 'vec_permM' and 22814 'vec_perm_constM' if the former can trivially implement the 22815 operation with, say, the vector constant loaded into a register. 22816 22817'pushM1' 22818 Output a push instruction. Operand 0 is value to push. Used only 22819 when 'PUSH_ROUNDING' is defined. For historical reason, this 22820 pattern may be missing and in such case an 'mov' expander is used 22821 instead, with a 'MEM' expression forming the push operation. The 22822 'mov' expander method is deprecated. 22823 22824'addM3' 22825 Add operand 2 and operand 1, storing the result in operand 0. All 22826 operands must have mode M. This can be used even on two-address 22827 machines, by means of constraints requiring operands 1 and 0 to be 22828 the same location. 22829 22830'ssaddM3', 'usaddM3' 22831'subM3', 'sssubM3', 'ussubM3' 22832'mulM3', 'ssmulM3', 'usmulM3' 22833'divM3', 'ssdivM3' 22834'udivM3', 'usdivM3' 22835'modM3', 'umodM3' 22836'uminM3', 'umaxM3' 22837'andM3', 'iorM3', 'xorM3' 22838 Similar, for other arithmetic operations. 22839 22840'addvM4' 22841 Like 'addM3' but takes a 'code_label' as operand 3 and emits code 22842 to jump to it if signed overflow occurs during the addition. This 22843 pattern is used to implement the built-in functions performing 22844 signed integer addition with overflow checking. 22845 22846'subvM4', 'mulvM4' 22847 Similar, for other signed arithmetic operations. 22848 22849'umulvM4' 22850 Like 'mulvM4' but for unsigned multiplication. That is to say, the 22851 operation is the same as signed multiplication but the jump is 22852 taken only on unsigned overflow. 22853 22854'addptrM3' 22855 Like 'addM3' but is guaranteed to only be used for address 22856 calculations. The expanded code is not allowed to clobber the 22857 condition code. It only needs to be defined if 'addM3' sets the 22858 condition code. If adds used for address calculations and normal 22859 adds are not compatible it is required to expand a distinct pattern 22860 (e.g. using an unspec). The pattern is used by LRA to emit 22861 address calculations. 'addM3' is used if 'addptrM3' is not 22862 defined. 22863 22864'fmaM4' 22865 Multiply operand 2 and operand 1, then add operand 3, storing the 22866 result in operand 0 without doing an intermediate rounding step. 22867 All operands must have mode M. This pattern is used to implement 22868 the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99 22869 standard. 22870 22871'fmsM4' 22872 Like 'fmaM4', except operand 3 subtracted from the product instead 22873 of added to the product. This is represented in the rtl as 22874 22875 (fma:M OP1 OP2 (neg:M OP3)) 22876 22877'fnmaM4' 22878 Like 'fmaM4' except that the intermediate product is negated before 22879 being added to operand 3. This is represented in the rtl as 22880 22881 (fma:M (neg:M OP1) OP2 OP3) 22882 22883'fnmsM4' 22884 Like 'fmsM4' except that the intermediate product is negated before 22885 subtracting operand 3. This is represented in the rtl as 22886 22887 (fma:M (neg:M OP1) OP2 (neg:M OP3)) 22888 22889'sminM3', 'smaxM3' 22890 Signed minimum and maximum operations. When used with floating 22891 point, if both operands are zeros, or if either operand is 'NaN', 22892 then it is unspecified which of the two operands is returned as the 22893 result. 22894 22895'reduc_smin_M', 'reduc_smax_M' 22896 Find the signed minimum/maximum of the elements of a vector. The 22897 vector is operand 1, and the result is stored in the least 22898 significant bits of operand 0 (also a vector). The output and 22899 input vector should have the same modes. These are legacy optabs, 22900 and platforms should prefer to implement 'reduc_smin_scal_M' and 22901 'reduc_smax_scal_M'. 22902 22903'reduc_umin_M', 'reduc_umax_M' 22904 Find the unsigned minimum/maximum of the elements of a vector. The 22905 vector is operand 1, and the result is stored in the least 22906 significant bits of operand 0 (also a vector). The output and 22907 input vector should have the same modes. These are legacy optabs, 22908 and platforms should prefer to implement 'reduc_umin_scal_M' and 22909 'reduc_umax_scal_M'. 22910 22911'reduc_splus_M', 'reduc_uplus_M' 22912 Compute the sum of the signed/unsigned elements of a vector. The 22913 vector is operand 1, and the result is stored in the least 22914 significant bits of operand 0 (also a vector). The output and 22915 input vector should have the same modes. These are legacy optabs, 22916 and platforms should prefer to implement 'reduc_plus_scal_M'. 22917 22918'reduc_smin_scal_M', 'reduc_smax_scal_M' 22919 Find the signed minimum/maximum of the elements of a vector. The 22920 vector is operand 1, and operand 0 is the scalar result, with mode 22921 equal to the mode of the elements of the input vector. 22922 22923'reduc_umin_scal_M', 'reduc_umax_scal_M' 22924 Find the unsigned minimum/maximum of the elements of a vector. The 22925 vector is operand 1, and operand 0 is the scalar result, with mode 22926 equal to the mode of the elements of the input vector. 22927 22928'reduc_plus_scal_M' 22929 Compute the sum of the elements of a vector. The vector is operand 22930 1, and operand 0 is the scalar result, with mode equal to the mode 22931 of the elements of the input vector. 22932 22933'sdot_prodM' 22934'udot_prodM' 22935 Compute the sum of the products of two signed/unsigned elements. 22936 Operand 1 and operand 2 are of the same mode. Their product, which 22937 is of a wider mode, is computed and added to operand 3. Operand 3 22938 is of a mode equal or wider than the mode of the product. The 22939 result is placed in operand 0, which is of the same mode as operand 22940 3. 22941 22942'ssadM' 22943'usadM' 22944 Compute the sum of absolute differences of two signed/unsigned 22945 elements. Operand 1 and operand 2 are of the same mode. Their 22946 absolute difference, which is of a wider mode, is computed and 22947 added to operand 3. Operand 3 is of a mode equal or wider than the 22948 mode of the absolute difference. The result is placed in operand 22949 0, which is of the same mode as operand 3. 22950 22951'ssum_widenM3' 22952'usum_widenM3' 22953 Operands 0 and 2 are of the same mode, which is wider than the mode 22954 of operand 1. Add operand 1 to operand 2 and place the widened 22955 result in operand 0. (This is used express accumulation of 22956 elements into an accumulator of a wider mode.) 22957 22958'vec_shr_M' 22959 Whole vector right shift in bits, i.e. towards element 0. Operand 22960 1 is a vector to be shifted. Operand 2 is an integer shift amount 22961 in bits. Operand 0 is where the resulting shifted vector is 22962 stored. The output and input vectors should have the same modes. 22963 22964'vec_pack_trunc_M' 22965 Narrow (demote) and merge the elements of two vectors. Operands 1 22966 and 2 are vectors of the same mode having N integral or floating 22967 point elements of size S. Operand 0 is the resulting vector in 22968 which 2*N elements of size N/2 are concatenated after narrowing 22969 them down using truncation. 22970 22971'vec_pack_ssat_M', 'vec_pack_usat_M' 22972 Narrow (demote) and merge the elements of two vectors. Operands 1 22973 and 2 are vectors of the same mode having N integral elements of 22974 size S. Operand 0 is the resulting vector in which the elements of 22975 the two input vectors are concatenated after narrowing them down 22976 using signed/unsigned saturating arithmetic. 22977 22978'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M' 22979 Narrow, convert to signed/unsigned integral type and merge the 22980 elements of two vectors. Operands 1 and 2 are vectors of the same 22981 mode having N floating point elements of size S. Operand 0 is the 22982 resulting vector in which 2*N elements of size N/2 are 22983 concatenated. 22984 22985'vec_unpacks_hi_M', 'vec_unpacks_lo_M' 22986 Extract and widen (promote) the high/low part of a vector of signed 22987 integral or floating point elements. The input vector (operand 1) 22988 has N elements of size S. Widen (promote) the high/low elements of 22989 the vector using signed or floating point extension and place the 22990 resulting N/2 values of size 2*S in the output vector (operand 0). 22991 22992'vec_unpacku_hi_M', 'vec_unpacku_lo_M' 22993 Extract and widen (promote) the high/low part of a vector of 22994 unsigned integral elements. The input vector (operand 1) has N 22995 elements of size S. Widen (promote) the high/low elements of the 22996 vector using zero extension and place the resulting N/2 values of 22997 size 2*S in the output vector (operand 0). 22998 22999'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M' 23000'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M' 23001 Extract, convert to floating point type and widen the high/low part 23002 of a vector of signed/unsigned integral elements. The input vector 23003 (operand 1) has N elements of size S. Convert the high/low 23004 elements of the vector using floating point conversion and place 23005 the resulting N/2 values of size 2*S in the output vector (operand 23006 0). 23007 23008'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M' 23009'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M' 23010'vec_widen_umult_even_M', 'vec_widen_umult_odd_M' 23011'vec_widen_smult_even_M', 'vec_widen_smult_odd_M' 23012 Signed/Unsigned widening multiplication. The two inputs (operands 23013 1 and 2) are vectors with N signed/unsigned elements of size S. 23014 Multiply the high/low or even/odd elements of the two vectors, and 23015 put the N/2 products of size 2*S in the output vector (operand 0). 23016 A target shouldn't implement even/odd pattern pair if it is less 23017 efficient than lo/hi one. 23018 23019'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M' 23020'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M' 23021 Signed/Unsigned widening shift left. The first input (operand 1) 23022 is a vector with N signed/unsigned elements of size S. Operand 2 23023 is a constant. Shift the high/low elements of operand 1, and put 23024 the N/2 results of size 2*S in the output vector (operand 0). 23025 23026'mulhisi3' 23027 Multiply operands 1 and 2, which have mode 'HImode', and store a 23028 'SImode' product in operand 0. 23029 23030'mulqihi3', 'mulsidi3' 23031 Similar widening-multiplication instructions of other widths. 23032 23033'umulqihi3', 'umulhisi3', 'umulsidi3' 23034 Similar widening-multiplication instructions that do unsigned 23035 multiplication. 23036 23037'usmulqihi3', 'usmulhisi3', 'usmulsidi3' 23038 Similar widening-multiplication instructions that interpret the 23039 first operand as unsigned and the second operand as signed, then do 23040 a signed multiplication. 23041 23042'smulM3_highpart' 23043 Perform a signed multiplication of operands 1 and 2, which have 23044 mode M, and store the most significant half of the product in 23045 operand 0. The least significant half of the product is discarded. 23046 23047'umulM3_highpart' 23048 Similar, but the multiplication is unsigned. 23049 23050'maddMN4' 23051 Multiply operands 1 and 2, sign-extend them to mode N, add operand 23052 3, and store the result in operand 0. Operands 1 and 2 have mode M 23053 and operands 0 and 3 have mode N. Both modes must be integer or 23054 fixed-point modes and N must be twice the size of M. 23055 23056 In other words, 'maddMN4' is like 'mulMN3' except that it also adds 23057 operand 3. 23058 23059 These instructions are not allowed to 'FAIL'. 23060 23061'umaddMN4' 23062 Like 'maddMN4', but zero-extend the multiplication operands instead 23063 of sign-extending them. 23064 23065'ssmaddMN4' 23066 Like 'maddMN4', but all involved operations must be 23067 signed-saturating. 23068 23069'usmaddMN4' 23070 Like 'umaddMN4', but all involved operations must be 23071 unsigned-saturating. 23072 23073'msubMN4' 23074 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 23075 result from operand 3, and store the result in operand 0. Operands 23076 1 and 2 have mode M and operands 0 and 3 have mode N. Both modes 23077 must be integer or fixed-point modes and N must be twice the size 23078 of M. 23079 23080 In other words, 'msubMN4' is like 'mulMN3' except that it also 23081 subtracts the result from operand 3. 23082 23083 These instructions are not allowed to 'FAIL'. 23084 23085'umsubMN4' 23086 Like 'msubMN4', but zero-extend the multiplication operands instead 23087 of sign-extending them. 23088 23089'ssmsubMN4' 23090 Like 'msubMN4', but all involved operations must be 23091 signed-saturating. 23092 23093'usmsubMN4' 23094 Like 'umsubMN4', but all involved operations must be 23095 unsigned-saturating. 23096 23097'divmodM4' 23098 Signed division that produces both a quotient and a remainder. 23099 Operand 1 is divided by operand 2 to produce a quotient stored in 23100 operand 0 and a remainder stored in operand 3. 23101 23102 For machines with an instruction that produces both a quotient and 23103 a remainder, provide a pattern for 'divmodM4' but do not provide 23104 patterns for 'divM3' and 'modM3'. This allows optimization in the 23105 relatively common case when both the quotient and remainder are 23106 computed. 23107 23108 If an instruction that just produces a quotient or just a remainder 23109 exists and is more efficient than the instruction that produces 23110 both, write the output routine of 'divmodM4' to call 23111 'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or 23112 remainder and generate the appropriate instruction. 23113 23114'udivmodM4' 23115 Similar, but does unsigned division. 23116 23117'ashlM3', 'ssashlM3', 'usashlM3' 23118 Arithmetic-shift operand 1 left by a number of bits specified by 23119 operand 2, and store the result in operand 0. Here M is the mode 23120 of operand 0 and operand 1; operand 2's mode is specified by the 23121 instruction pattern, and the compiler will convert the operand to 23122 that mode before generating the instruction. The meaning of 23123 out-of-range shift counts can optionally be specified by 23124 'TARGET_SHIFT_TRUNCATION_MASK'. *Note 23125 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 23126 23127'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3' 23128 Other shift and rotate instructions, analogous to the 'ashlM3' 23129 instructions. Operand 2 is always a scalar type. 23130 23131'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3' 23132 Vector shift and rotate instructions that take vectors as operand 2 23133 instead of a scalar type. 23134 23135'bswapM2' 23136 Reverse the order of bytes of operand 1 and store the result in 23137 operand 0. 23138 23139'negM2', 'ssnegM2', 'usnegM2' 23140 Negate operand 1 and store the result in operand 0. 23141 23142'negvM3' 23143 Like 'negM2' but takes a 'code_label' as operand 2 and emits code 23144 to jump to it if signed overflow occurs during the negation. 23145 23146'absM2' 23147 Store the absolute value of operand 1 into operand 0. 23148 23149'sqrtM2' 23150 Store the square root of operand 1 into operand 0. 23151 23152 The 'sqrt' built-in function of C always uses the mode which 23153 corresponds to the C data type 'double' and the 'sqrtf' built-in 23154 function uses the mode which corresponds to the C data type 23155 'float'. 23156 23157'fmodM3' 23158 Store the remainder of dividing operand 1 by operand 2 into operand 23159 0, rounded towards zero to an integer. 23160 23161 The 'fmod' built-in function of C always uses the mode which 23162 corresponds to the C data type 'double' and the 'fmodf' built-in 23163 function uses the mode which corresponds to the C data type 23164 'float'. 23165 23166'remainderM3' 23167 Store the remainder of dividing operand 1 by operand 2 into operand 23168 0, rounded to the nearest integer. 23169 23170 The 'remainder' built-in function of C always uses the mode which 23171 corresponds to the C data type 'double' and the 'remainderf' 23172 built-in function uses the mode which corresponds to the C data 23173 type 'float'. 23174 23175'cosM2' 23176 Store the cosine of operand 1 into operand 0. 23177 23178 The 'cos' built-in function of C always uses the mode which 23179 corresponds to the C data type 'double' and the 'cosf' built-in 23180 function uses the mode which corresponds to the C data type 23181 'float'. 23182 23183'sinM2' 23184 Store the sine of operand 1 into operand 0. 23185 23186 The 'sin' built-in function of C always uses the mode which 23187 corresponds to the C data type 'double' and the 'sinf' built-in 23188 function uses the mode which corresponds to the C data type 23189 'float'. 23190 23191'sincosM3' 23192 Store the cosine of operand 2 into operand 0 and the sine of 23193 operand 2 into operand 1. 23194 23195 The 'sin' and 'cos' built-in functions of C always use the mode 23196 which corresponds to the C data type 'double' and the 'sinf' and 23197 'cosf' built-in function use the mode which corresponds to the C 23198 data type 'float'. Targets that can calculate the sine and cosine 23199 simultaneously can implement this pattern as opposed to 23200 implementing individual 'sinM2' and 'cosM2' patterns. The 'sin' 23201 and 'cos' built-in functions will then be expanded to the 23202 'sincosM3' pattern, with one of the output values left unused. 23203 23204'expM2' 23205 Store the exponential of operand 1 into operand 0. 23206 23207 The 'exp' built-in function of C always uses the mode which 23208 corresponds to the C data type 'double' and the 'expf' built-in 23209 function uses the mode which corresponds to the C data type 23210 'float'. 23211 23212'logM2' 23213 Store the natural logarithm of operand 1 into operand 0. 23214 23215 The 'log' built-in function of C always uses the mode which 23216 corresponds to the C data type 'double' and the 'logf' built-in 23217 function uses the mode which corresponds to the C data type 23218 'float'. 23219 23220'powM3' 23221 Store the value of operand 1 raised to the exponent operand 2 into 23222 operand 0. 23223 23224 The 'pow' built-in function of C always uses the mode which 23225 corresponds to the C data type 'double' and the 'powf' built-in 23226 function uses the mode which corresponds to the C data type 23227 'float'. 23228 23229'atan2M3' 23230 Store the arc tangent (inverse tangent) of operand 1 divided by 23231 operand 2 into operand 0, using the signs of both arguments to 23232 determine the quadrant of the result. 23233 23234 The 'atan2' built-in function of C always uses the mode which 23235 corresponds to the C data type 'double' and the 'atan2f' built-in 23236 function uses the mode which corresponds to the C data type 23237 'float'. 23238 23239'floorM2' 23240 Store the largest integral value not greater than argument. 23241 23242 The 'floor' built-in function of C always uses the mode which 23243 corresponds to the C data type 'double' and the 'floorf' built-in 23244 function uses the mode which corresponds to the C data type 23245 'float'. 23246 23247'btruncM2' 23248 Store the argument rounded to integer towards zero. 23249 23250 The 'trunc' built-in function of C always uses the mode which 23251 corresponds to the C data type 'double' and the 'truncf' built-in 23252 function uses the mode which corresponds to the C data type 23253 'float'. 23254 23255'roundM2' 23256 Store the argument rounded to integer away from zero. 23257 23258 The 'round' built-in function of C always uses the mode which 23259 corresponds to the C data type 'double' and the 'roundf' built-in 23260 function uses the mode which corresponds to the C data type 23261 'float'. 23262 23263'ceilM2' 23264 Store the argument rounded to integer away from zero. 23265 23266 The 'ceil' built-in function of C always uses the mode which 23267 corresponds to the C data type 'double' and the 'ceilf' built-in 23268 function uses the mode which corresponds to the C data type 23269 'float'. 23270 23271'nearbyintM2' 23272 Store the argument rounded according to the default rounding mode 23273 23274 The 'nearbyint' built-in function of C always uses the mode which 23275 corresponds to the C data type 'double' and the 'nearbyintf' 23276 built-in function uses the mode which corresponds to the C data 23277 type 'float'. 23278 23279'rintM2' 23280 Store the argument rounded according to the default rounding mode 23281 and raise the inexact exception when the result differs in value 23282 from the argument 23283 23284 The 'rint' built-in function of C always uses the mode which 23285 corresponds to the C data type 'double' and the 'rintf' built-in 23286 function uses the mode which corresponds to the C data type 23287 'float'. 23288 23289'lrintMN2' 23290 Convert operand 1 (valid for floating point mode M) to fixed point 23291 mode N as a signed number according to the current rounding mode 23292 and store in operand 0 (which has mode N). 23293 23294'lroundMN2' 23295 Convert operand 1 (valid for floating point mode M) to fixed point 23296 mode N as a signed number rounding to nearest and away from zero 23297 and store in operand 0 (which has mode N). 23298 23299'lfloorMN2' 23300 Convert operand 1 (valid for floating point mode M) to fixed point 23301 mode N as a signed number rounding down and store in operand 0 23302 (which has mode N). 23303 23304'lceilMN2' 23305 Convert operand 1 (valid for floating point mode M) to fixed point 23306 mode N as a signed number rounding up and store in operand 0 (which 23307 has mode N). 23308 23309'copysignM3' 23310 Store a value with the magnitude of operand 1 and the sign of 23311 operand 2 into operand 0. 23312 23313 The 'copysign' built-in function of C always uses the mode which 23314 corresponds to the C data type 'double' and the 'copysignf' 23315 built-in function uses the mode which corresponds to the C data 23316 type 'float'. 23317 23318'ffsM2' 23319 Store into operand 0 one plus the index of the least significant 23320 1-bit of operand 1. If operand 1 is zero, store zero. M is the 23321 mode of operand 0; operand 1's mode is specified by the instruction 23322 pattern, and the compiler will convert the operand to that mode 23323 before generating the instruction. 23324 23325 The 'ffs' built-in function of C always uses the mode which 23326 corresponds to the C data type 'int'. 23327 23328'clrsbM2' 23329 Count leading redundant sign bits. Store into operand 0 the number 23330 of redundant sign bits in operand 1, starting at the most 23331 significant bit position. A redundant sign bit is defined as any 23332 sign bit after the first. As such, this count will be one less 23333 than the count of leading sign bits. 23334 23335'clzM2' 23336 Store into operand 0 the number of leading 0-bits in operand 1, 23337 starting at the most significant bit position. If operand 1 is 0, 23338 the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 23339 result is undefined or has a useful value. M is the mode of 23340 operand 0; operand 1's mode is specified by the instruction 23341 pattern, and the compiler will convert the operand to that mode 23342 before generating the instruction. 23343 23344'ctzM2' 23345 Store into operand 0 the number of trailing 0-bits in operand 1, 23346 starting at the least significant bit position. If operand 1 is 0, 23347 the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 23348 result is undefined or has a useful value. M is the mode of 23349 operand 0; operand 1's mode is specified by the instruction 23350 pattern, and the compiler will convert the operand to that mode 23351 before generating the instruction. 23352 23353'popcountM2' 23354 Store into operand 0 the number of 1-bits in operand 1. M is the 23355 mode of operand 0; operand 1's mode is specified by the instruction 23356 pattern, and the compiler will convert the operand to that mode 23357 before generating the instruction. 23358 23359'parityM2' 23360 Store into operand 0 the parity of operand 1, i.e. the number of 23361 1-bits in operand 1 modulo 2. M is the mode of operand 0; operand 23362 1's mode is specified by the instruction pattern, and the compiler 23363 will convert the operand to that mode before generating the 23364 instruction. 23365 23366'one_cmplM2' 23367 Store the bitwise-complement of operand 1 into operand 0. 23368 23369'movmemM' 23370 Block move instruction. The destination and source blocks of 23371 memory are the first two operands, and both are 'mem:BLK's with an 23372 address in mode 'Pmode'. 23373 23374 The number of bytes to move is the third operand, in mode M. 23375 Usually, you specify 'Pmode' for M. However, if you can generate 23376 better code knowing the range of valid lengths is smaller than 23377 those representable in a full Pmode pointer, you should provide a 23378 pattern with a mode corresponding to the range of values you can 23379 handle efficiently (e.g., 'QImode' for values in the range 0-127; 23380 note we avoid numbers that appear negative) and also a pattern with 23381 'Pmode'. 23382 23383 The fourth operand is the known shared alignment of the source and 23384 destination, in the form of a 'const_int' rtx. Thus, if the 23385 compiler knows that both source and destination are word-aligned, 23386 it may provide the value 4 for this operand. 23387 23388 Optional operands 5 and 6 specify expected alignment and size of 23389 block respectively. The expected alignment differs from alignment 23390 in operand 4 in a way that the blocks are not required to be 23391 aligned according to it in all cases. This expected alignment is 23392 also in bytes, just like operand 4. Expected size, when unknown, 23393 is set to '(const_int -1)'. 23394 23395 Descriptions of multiple 'movmemM' patterns can only be beneficial 23396 if the patterns for smaller modes have fewer restrictions on their 23397 first, second and fourth operands. Note that the mode M in 23398 'movmemM' does not impose any restriction on the mode of 23399 individually moved data units in the block. 23400 23401 These patterns need not give special consideration to the 23402 possibility that the source and destination strings might overlap. 23403 23404'movstr' 23405 String copy instruction, with 'stpcpy' semantics. Operand 0 is an 23406 output operand in mode 'Pmode'. The addresses of the destination 23407 and source strings are operands 1 and 2, and both are 'mem:BLK's 23408 with addresses in mode 'Pmode'. The execution of the expansion of 23409 this pattern should store in operand 0 the address in which the 23410 'NUL' terminator was stored in the destination string. 23411 23412 This patern has also several optional operands that are same as in 23413 'setmem'. 23414 23415'setmemM' 23416 Block set instruction. The destination string is the first 23417 operand, given as a 'mem:BLK' whose address is in mode 'Pmode'. 23418 The number of bytes to set is the second operand, in mode M. The 23419 value to initialize the memory with is the third operand. Targets 23420 that only support the clearing of memory should reject any value 23421 that is not the constant 0. See 'movmemM' for a discussion of the 23422 choice of mode. 23423 23424 The fourth operand is the known alignment of the destination, in 23425 the form of a 'const_int' rtx. Thus, if the compiler knows that 23426 the destination is word-aligned, it may provide the value 4 for 23427 this operand. 23428 23429 Optional operands 5 and 6 specify expected alignment and size of 23430 block respectively. The expected alignment differs from alignment 23431 in operand 4 in a way that the blocks are not required to be 23432 aligned according to it in all cases. This expected alignment is 23433 also in bytes, just like operand 4. Expected size, when unknown, 23434 is set to '(const_int -1)'. Operand 7 is the minimal size of the 23435 block and operand 8 is the maximal size of the block (NULL if it 23436 can not be represented as CONST_INT). Operand 9 is the probable 23437 maximal size (i.e. we can not rely on it for correctness, but it 23438 can be used for choosing proper code sequence for a given size). 23439 23440 The use for multiple 'setmemM' is as for 'movmemM'. 23441 23442'cmpstrnM' 23443 String compare instruction, with five operands. Operand 0 is the 23444 output; it has mode M. The remaining four operands are like the 23445 operands of 'movmemM'. The two memory blocks specified are 23446 compared byte by byte in lexicographic order starting at the 23447 beginning of each string. The instruction is not allowed to 23448 prefetch more than one byte at a time since either string may end 23449 in the first byte and reading past that may access an invalid page 23450 or segment and cause a fault. The comparison terminates early if 23451 the fetched bytes are different or if they are equal to zero. The 23452 effect of the instruction is to store a value in operand 0 whose 23453 sign indicates the result of the comparison. 23454 23455'cmpstrM' 23456 String compare instruction, without known maximum length. Operand 23457 0 is the output; it has mode M. The second and third operand are 23458 the blocks of memory to be compared; both are 'mem:BLK' with an 23459 address in mode 'Pmode'. 23460 23461 The fourth operand is the known shared alignment of the source and 23462 destination, in the form of a 'const_int' rtx. Thus, if the 23463 compiler knows that both source and destination are word-aligned, 23464 it may provide the value 4 for this operand. 23465 23466 The two memory blocks specified are compared byte by byte in 23467 lexicographic order starting at the beginning of each string. The 23468 instruction is not allowed to prefetch more than one byte at a time 23469 since either string may end in the first byte and reading past that 23470 may access an invalid page or segment and cause a fault. The 23471 comparison will terminate when the fetched bytes are different or 23472 if they are equal to zero. The effect of the instruction is to 23473 store a value in operand 0 whose sign indicates the result of the 23474 comparison. 23475 23476'cmpmemM' 23477 Block compare instruction, with five operands like the operands of 23478 'cmpstrM'. The two memory blocks specified are compared byte by 23479 byte in lexicographic order starting at the beginning of each 23480 block. Unlike 'cmpstrM' the instruction can prefetch any bytes in 23481 the two memory blocks. Also unlike 'cmpstrM' the comparison will 23482 not stop if both bytes are zero. The effect of the instruction is 23483 to store a value in operand 0 whose sign indicates the result of 23484 the comparison. 23485 23486'strlenM' 23487 Compute the length of a string, with three operands. Operand 0 is 23488 the result (of mode M), operand 1 is a 'mem' referring to the first 23489 character of the string, operand 2 is the character to search for 23490 (normally zero), and operand 3 is a constant describing the known 23491 alignment of the beginning of the string. 23492 23493'floatMN2' 23494 Convert signed integer operand 1 (valid for fixed point mode M) to 23495 floating point mode N and store in operand 0 (which has mode N). 23496 23497'floatunsMN2' 23498 Convert unsigned integer operand 1 (valid for fixed point mode M) 23499 to floating point mode N and store in operand 0 (which has mode N). 23500 23501'fixMN2' 23502 Convert operand 1 (valid for floating point mode M) to fixed point 23503 mode N as a signed number and store in operand 0 (which has mode 23504 N). This instruction's result is defined only when the value of 23505 operand 1 is an integer. 23506 23507 If the machine description defines this pattern, it also needs to 23508 define the 'ftrunc' pattern. 23509 23510'fixunsMN2' 23511 Convert operand 1 (valid for floating point mode M) to fixed point 23512 mode N as an unsigned number and store in operand 0 (which has mode 23513 N). This instruction's result is defined only when the value of 23514 operand 1 is an integer. 23515 23516'ftruncM2' 23517 Convert operand 1 (valid for floating point mode M) to an integer 23518 value, still represented in floating point mode M, and store it in 23519 operand 0 (valid for floating point mode M). 23520 23521'fix_truncMN2' 23522 Like 'fixMN2' but works for any floating point value of mode M by 23523 converting the value to an integer. 23524 23525'fixuns_truncMN2' 23526 Like 'fixunsMN2' but works for any floating point value of mode M 23527 by converting the value to an integer. 23528 23529'truncMN2' 23530 Truncate operand 1 (valid for mode M) to mode N and store in 23531 operand 0 (which has mode N). Both modes must be fixed point or 23532 both floating point. 23533 23534'extendMN2' 23535 Sign-extend operand 1 (valid for mode M) to mode N and store in 23536 operand 0 (which has mode N). Both modes must be fixed point or 23537 both floating point. 23538 23539'zero_extendMN2' 23540 Zero-extend operand 1 (valid for mode M) to mode N and store in 23541 operand 0 (which has mode N). Both modes must be fixed point. 23542 23543'fractMN2' 23544 Convert operand 1 of mode M to mode N and store in operand 0 (which 23545 has mode N). Mode M and mode N could be fixed-point to 23546 fixed-point, signed integer to fixed-point, fixed-point to signed 23547 integer, floating-point to fixed-point, or fixed-point to 23548 floating-point. When overflows or underflows happen, the results 23549 are undefined. 23550 23551'satfractMN2' 23552 Convert operand 1 of mode M to mode N and store in operand 0 (which 23553 has mode N). Mode M and mode N could be fixed-point to 23554 fixed-point, signed integer to fixed-point, or floating-point to 23555 fixed-point. When overflows or underflows happen, the instruction 23556 saturates the results to the maximum or the minimum. 23557 23558'fractunsMN2' 23559 Convert operand 1 of mode M to mode N and store in operand 0 (which 23560 has mode N). Mode M and mode N could be unsigned integer to 23561 fixed-point, or fixed-point to unsigned integer. When overflows or 23562 underflows happen, the results are undefined. 23563 23564'satfractunsMN2' 23565 Convert unsigned integer operand 1 of mode M to fixed-point mode N 23566 and store in operand 0 (which has mode N). When overflows or 23567 underflows happen, the instruction saturates the results to the 23568 maximum or the minimum. 23569 23570'extvM' 23571 Extract a bit-field from register operand 1, sign-extend it, and 23572 store it in operand 0. Operand 2 specifies the width of the field 23573 in bits and operand 3 the starting bit, which counts from the most 23574 significant bit if 'BITS_BIG_ENDIAN' is true and from the least 23575 significant bit otherwise. 23576 23577 Operands 0 and 1 both have mode M. Operands 2 and 3 have a 23578 target-specific mode. 23579 23580'extvmisalignM' 23581 Extract a bit-field from memory operand 1, sign extend it, and 23582 store it in operand 0. Operand 2 specifies the width in bits and 23583 operand 3 the starting bit. The starting bit is always somewhere 23584 in the first byte of operand 1; it counts from the most significant 23585 bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit 23586 otherwise. 23587 23588 Operand 0 has mode M while operand 1 has 'BLK' mode. Operands 2 23589 and 3 have a target-specific mode. 23590 23591 The instruction must not read beyond the last byte of the 23592 bit-field. 23593 23594'extzvM' 23595 Like 'extvM' except that the bit-field value is zero-extended. 23596 23597'extzvmisalignM' 23598 Like 'extvmisalignM' except that the bit-field value is 23599 zero-extended. 23600 23601'insvM' 23602 Insert operand 3 into a bit-field of register operand 0. Operand 1 23603 specifies the width of the field in bits and operand 2 the starting 23604 bit, which counts from the most significant bit if 23605 'BITS_BIG_ENDIAN' is true and from the least significant bit 23606 otherwise. 23607 23608 Operands 0 and 3 both have mode M. Operands 1 and 2 have a 23609 target-specific mode. 23610 23611'insvmisalignM' 23612 Insert operand 3 into a bit-field of memory operand 0. Operand 1 23613 specifies the width of the field in bits and operand 2 the starting 23614 bit. The starting bit is always somewhere in the first byte of 23615 operand 0; it counts from the most significant bit if 23616 'BITS_BIG_ENDIAN' is true and from the least significant bit 23617 otherwise. 23618 23619 Operand 3 has mode M while operand 0 has 'BLK' mode. Operands 1 23620 and 2 have a target-specific mode. 23621 23622 The instruction must not read or write beyond the last byte of the 23623 bit-field. 23624 23625'extv' 23626 Extract a bit-field from operand 1 (a register or memory operand), 23627 where operand 2 specifies the width in bits and operand 3 the 23628 starting bit, and store it in operand 0. Operand 0 must have mode 23629 'word_mode'. Operand 1 may have mode 'byte_mode' or 'word_mode'; 23630 often 'word_mode' is allowed only for registers. Operands 2 and 3 23631 must be valid for 'word_mode'. 23632 23633 The RTL generation pass generates this instruction only with 23634 constants for operands 2 and 3 and the constant is never zero for 23635 operand 2. 23636 23637 The bit-field value is sign-extended to a full word integer before 23638 it is stored in operand 0. 23639 23640 This pattern is deprecated; please use 'extvM' and 'extvmisalignM' 23641 instead. 23642 23643'extzv' 23644 Like 'extv' except that the bit-field value is zero-extended. 23645 23646 This pattern is deprecated; please use 'extzvM' and 23647 'extzvmisalignM' instead. 23648 23649'insv' 23650 Store operand 3 (which must be valid for 'word_mode') into a 23651 bit-field in operand 0, where operand 1 specifies the width in bits 23652 and operand 2 the starting bit. Operand 0 may have mode 23653 'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for 23654 registers. Operands 1 and 2 must be valid for 'word_mode'. 23655 23656 The RTL generation pass generates this instruction only with 23657 constants for operands 1 and 2 and the constant is never zero for 23658 operand 1. 23659 23660 This pattern is deprecated; please use 'insvM' and 'insvmisalignM' 23661 instead. 23662 23663'movMODEcc' 23664 Conditionally move operand 2 or operand 3 into operand 0 according 23665 to the comparison in operand 1. If the comparison is true, operand 23666 2 is moved into operand 0, otherwise operand 3 is moved. 23667 23668 The mode of the operands being compared need not be the same as the 23669 operands being moved. Some machines, sparc64 for example, have 23670 instructions that conditionally move an integer value based on the 23671 floating point condition codes and vice versa. 23672 23673 If the machine does not have conditional move instructions, do not 23674 define these patterns. 23675 23676'addMODEcc' 23677 Similar to 'movMODEcc' but for conditional addition. Conditionally 23678 move operand 2 or (operands 2 + operand 3) into operand 0 according 23679 to the comparison in operand 1. If the comparison is false, 23680 operand 2 is moved into operand 0, otherwise (operand 2 + operand 23681 3) is moved. 23682 23683'cstoreMODE4' 23684 Store zero or nonzero in operand 0 according to whether a 23685 comparison is true. Operand 1 is a comparison operator. Operand 2 23686 and operand 3 are the first and second operand of the comparison, 23687 respectively. You specify the mode that operand 0 must have when 23688 you write the 'match_operand' expression. The compiler 23689 automatically sees which mode you have used and supplies an operand 23690 of that mode. 23691 23692 The value stored for a true condition must have 1 as its low bit, 23693 or else must be negative. Otherwise the instruction is not 23694 suitable and you should omit it from the machine description. You 23695 describe to the compiler exactly which value is stored by defining 23696 the macro 'STORE_FLAG_VALUE' (*note Misc::). If a description 23697 cannot be found that can be used for all the possible comparison 23698 operators, you should pick one and use a 'define_expand' to map all 23699 results onto the one you chose. 23700 23701 These operations may 'FAIL', but should do so only in relatively 23702 uncommon cases; if they would 'FAIL' for common cases involving 23703 integer comparisons, it is best to restrict the predicates to not 23704 allow these operands. Likewise if a given comparison operator will 23705 always fail, independent of the operands (for floating-point modes, 23706 the 'ordered_comparison_operator' predicate is often useful in this 23707 case). 23708 23709 If this pattern is omitted, the compiler will generate a 23710 conditional branch--for example, it may copy a constant one to the 23711 target and branching around an assignment of zero to the target--or 23712 a libcall. If the predicate for operand 1 only rejects some 23713 operators, it will also try reordering the operands and/or 23714 inverting the result value (e.g. by an exclusive OR). These 23715 possibilities could be cheaper or equivalent to the instructions 23716 used for the 'cstoreMODE4' pattern followed by those required to 23717 convert a positive result from 'STORE_FLAG_VALUE' to 1; in this 23718 case, you can and should make operand 1's predicate reject some 23719 operators in the 'cstoreMODE4' pattern, or remove the pattern 23720 altogether from the machine description. 23721 23722'cbranchMODE4' 23723 Conditional branch instruction combined with a compare instruction. 23724 Operand 0 is a comparison operator. Operand 1 and operand 2 are 23725 the first and second operands of the comparison, respectively. 23726 Operand 3 is the 'code_label' to jump to. 23727 23728'jump' 23729 A jump inside a function; an unconditional branch. Operand 0 is 23730 the 'code_label' to jump to. This pattern name is mandatory on all 23731 machines. 23732 23733'call' 23734 Subroutine call instruction returning no value. Operand 0 is the 23735 function to call; operand 1 is the number of bytes of arguments 23736 pushed as a 'const_int'; operand 2 is the number of registers used 23737 as operands. 23738 23739 On most machines, operand 2 is not actually stored into the RTL 23740 pattern. It is supplied for the sake of some RISC machines which 23741 need to put this information into the assembler code; they can put 23742 it in the RTL instead of operand 1. 23743 23744 Operand 0 should be a 'mem' RTX whose address is the address of the 23745 function. Note, however, that this address can be a 'symbol_ref' 23746 expression even if it would not be a legitimate memory address on 23747 the target machine. If it is also not a valid argument for a call 23748 instruction, the pattern for this operation should be a 23749 'define_expand' (*note Expander Definitions::) that places the 23750 address into a register and uses that register in the call 23751 instruction. 23752 23753'call_value' 23754 Subroutine call instruction returning a value. Operand 0 is the 23755 hard register in which the value is returned. There are three more 23756 operands, the same as the three operands of the 'call' instruction 23757 (but with numbers increased by one). 23758 23759 Subroutines that return 'BLKmode' objects use the 'call' insn. 23760 23761'call_pop', 'call_value_pop' 23762 Similar to 'call' and 'call_value', except used if defined and if 23763 'RETURN_POPS_ARGS' is nonzero. They should emit a 'parallel' that 23764 contains both the function call and a 'set' to indicate the 23765 adjustment made to the frame pointer. 23766 23767 For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of 23768 these patterns increases the number of functions for which the 23769 frame pointer can be eliminated, if desired. 23770 23771'untyped_call' 23772 Subroutine call instruction returning a value of any type. Operand 23773 0 is the function to call; operand 1 is a memory location where the 23774 result of calling the function is to be stored; operand 2 is a 23775 'parallel' expression where each element is a 'set' expression that 23776 indicates the saving of a function return value into the result 23777 block. 23778 23779 This instruction pattern should be defined to support 23780 '__builtin_apply' on machines where special instructions are needed 23781 to call a subroutine with arbitrary arguments or to save the value 23782 returned. This instruction pattern is required on machines that 23783 have multiple registers that can hold a return value (i.e. 23784 'FUNCTION_VALUE_REGNO_P' is true for more than one register). 23785 23786'return' 23787 Subroutine return instruction. This instruction pattern name 23788 should be defined only if a single instruction can do all the work 23789 of returning from a function. 23790 23791 Like the 'movM' patterns, this pattern is also used after the RTL 23792 generation phase. In this case it is to support machines where 23793 multiple instructions are usually needed to return from a function, 23794 but some class of functions only requires one instruction to 23795 implement a return. Normally, the applicable functions are those 23796 which do not need to save any registers or allocate stack space. 23797 23798 It is valid for this pattern to expand to an instruction using 23799 'simple_return' if no epilogue is required. 23800 23801'simple_return' 23802 Subroutine return instruction. This instruction pattern name 23803 should be defined only if a single instruction can do all the work 23804 of returning from a function on a path where no epilogue is 23805 required. This pattern is very similar to the 'return' instruction 23806 pattern, but it is emitted only by the shrink-wrapping optimization 23807 on paths where the function prologue has not been executed, and a 23808 function return should occur without any of the effects of the 23809 epilogue. Additional uses may be introduced on paths where both 23810 the prologue and the epilogue have executed. 23811 23812 For such machines, the condition specified in this pattern should 23813 only be true when 'reload_completed' is nonzero and the function's 23814 epilogue would only be a single instruction. For machines with 23815 register windows, the routine 'leaf_function_p' may be used to 23816 determine if a register window push is required. 23817 23818 Machines that have conditional return instructions should define 23819 patterns such as 23820 23821 (define_insn "" 23822 [(set (pc) 23823 (if_then_else (match_operator 23824 0 "comparison_operator" 23825 [(cc0) (const_int 0)]) 23826 (return) 23827 (pc)))] 23828 "CONDITION" 23829 "...") 23830 23831 where CONDITION would normally be the same condition specified on 23832 the named 'return' pattern. 23833 23834'untyped_return' 23835 Untyped subroutine return instruction. This instruction pattern 23836 should be defined to support '__builtin_return' on machines where 23837 special instructions are needed to return a value of any type. 23838 23839 Operand 0 is a memory location where the result of calling a 23840 function with '__builtin_apply' is stored; operand 1 is a 23841 'parallel' expression where each element is a 'set' expression that 23842 indicates the restoring of a function return value from the result 23843 block. 23844 23845'nop' 23846 No-op instruction. This instruction pattern name should always be 23847 defined to output a no-op in assembler code. '(const_int 0)' will 23848 do as an RTL pattern. 23849 23850'indirect_jump' 23851 An instruction to jump to an address which is operand zero. This 23852 pattern name is mandatory on all machines. 23853 23854'casesi' 23855 Instruction to jump through a dispatch table, including bounds 23856 checking. This instruction takes five operands: 23857 23858 1. The index to dispatch on, which has mode 'SImode'. 23859 23860 2. The lower bound for indices in the table, an integer constant. 23861 23862 3. The total range of indices in the table--the largest index 23863 minus the smallest one (both inclusive). 23864 23865 4. A label that precedes the table itself. 23866 23867 5. A label to jump to if the index has a value outside the 23868 bounds. 23869 23870 The table is an 'addr_vec' or 'addr_diff_vec' inside of a 23871 'jump_table_data'. The number of elements in the table is one plus 23872 the difference between the upper bound and the lower bound. 23873 23874'tablejump' 23875 Instruction to jump to a variable address. This is a low-level 23876 capability which can be used to implement a dispatch table when 23877 there is no 'casesi' pattern. 23878 23879 This pattern requires two operands: the address or offset, and a 23880 label which should immediately precede the jump table. If the 23881 macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 23882 the first operand is an offset which counts from the address of the 23883 table; otherwise, it is an absolute address to jump to. In either 23884 case, the first operand has mode 'Pmode'. 23885 23886 The 'tablejump' insn is always the last insn before the jump table 23887 it uses. Its assembler code normally has no need to use the second 23888 operand, but you should incorporate it in the RTL pattern so that 23889 the jump optimizer will not delete the table as unreachable code. 23890 23891'decrement_and_branch_until_zero' 23892 Conditional branch instruction that decrements a register and jumps 23893 if the register is nonzero. Operand 0 is the register to decrement 23894 and test; operand 1 is the label to jump to if the register is 23895 nonzero. *Note Looping Patterns::. 23896 23897 This optional instruction pattern is only used by the combiner, 23898 typically for loops reversed by the loop optimizer when strength 23899 reduction is enabled. 23900 23901'doloop_end' 23902 Conditional branch instruction that decrements a register and jumps 23903 if the register is nonzero. Operand 0 is the register to decrement 23904 and test; operand 1 is the label to jump to if the register is 23905 nonzero. *Note Looping Patterns::. 23906 23907 This optional instruction pattern should be defined for machines 23908 with low-overhead looping instructions as the loop optimizer will 23909 try to modify suitable loops to utilize it. The target hook 23910 'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which 23911 low-overhead loops can be used. 23912 23913'doloop_begin' 23914 Companion instruction to 'doloop_end' required for machines that 23915 need to perform some initialization, such as loading a special 23916 counter register. Operand 1 is the associated 'doloop_end' pattern 23917 and operand 0 is the register that it decrements. 23918 23919 If initialization insns do not always need to be emitted, use a 23920 'define_expand' (*note Expander Definitions::) and make it fail. 23921 23922'canonicalize_funcptr_for_compare' 23923 Canonicalize the function pointer in operand 1 and store the result 23924 into operand 0. 23925 23926 Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be 23927 a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode 23928 'Pmode'. 23929 23930 Canonicalization of a function pointer usually involves computing 23931 the address of the function which would be called if the function 23932 pointer were used in an indirect call. 23933 23934 Only define this pattern if function pointers on the target machine 23935 can have different values but still call the same function when 23936 used in an indirect call. 23937 23938'save_stack_block' 23939'save_stack_function' 23940'save_stack_nonlocal' 23941'restore_stack_block' 23942'restore_stack_function' 23943'restore_stack_nonlocal' 23944 Most machines save and restore the stack pointer by copying it to 23945 or from an object of mode 'Pmode'. Do not define these patterns on 23946 such machines. 23947 23948 Some machines require special handling for stack pointer saves and 23949 restores. On those machines, define the patterns corresponding to 23950 the non-standard cases by using a 'define_expand' (*note Expander 23951 Definitions::) that produces the required insns. The three types 23952 of saves and restores are: 23953 23954 1. 'save_stack_block' saves the stack pointer at the start of a 23955 block that allocates a variable-sized object, and 23956 'restore_stack_block' restores the stack pointer when the 23957 block is exited. 23958 23959 2. 'save_stack_function' and 'restore_stack_function' do a 23960 similar job for the outermost block of a function and are used 23961 when the function allocates variable-sized objects or calls 23962 'alloca'. Only the epilogue uses the restored stack pointer, 23963 allowing a simpler save or restore sequence on some machines. 23964 23965 3. 'save_stack_nonlocal' is used in functions that contain labels 23966 branched to by nested functions. It saves the stack pointer 23967 in such a way that the inner function can use 23968 'restore_stack_nonlocal' to restore the stack pointer. The 23969 compiler generates code to restore the frame and argument 23970 pointer registers, but some machines require saving and 23971 restoring additional data such as register window information 23972 or stack backchains. Place insns in these patterns to save 23973 and restore any such required data. 23974 23975 When saving the stack pointer, operand 0 is the save area and 23976 operand 1 is the stack pointer. The mode used to allocate the save 23977 area defaults to 'Pmode' but you can override that choice by 23978 defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 23979 You must specify an integral mode, or 'VOIDmode' if no save area is 23980 needed for a particular type of save (either because no save is 23981 needed or because a machine-specific save area can be used). 23982 Operand 0 is the stack pointer and operand 1 is the save area for 23983 restore operations. If 'save_stack_block' is defined, operand 0 23984 must not be 'VOIDmode' since these saves can be arbitrarily nested. 23985 23986 A save area is a 'mem' that is at a constant offset from 23987 'virtual_stack_vars_rtx' when the stack pointer is saved for use by 23988 nonlocal gotos and a 'reg' in the other two cases. 23989 23990'allocate_stack' 23991 Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1 23992 from the stack pointer to create space for dynamically allocated 23993 data. 23994 23995 Store the resultant pointer to this space into operand 0. If you 23996 are allocating space from the main stack, do this by emitting a 23997 move insn to copy 'virtual_stack_dynamic_rtx' to operand 0. If you 23998 are allocating the space elsewhere, generate code to copy the 23999 location of the space to operand 0. In the latter case, you must 24000 ensure this space gets freed when the corresponding space on the 24001 main stack is free. 24002 24003 Do not define this pattern if all that must be done is the 24004 subtraction. Some machines require other operations such as stack 24005 probes or maintaining the back chain. Define this pattern to emit 24006 those operations in addition to updating the stack pointer. 24007 24008'check_stack' 24009 If stack checking (*note Stack Checking::) cannot be done on your 24010 system by probing the stack, define this pattern to perform the 24011 needed check and signal an error if the stack has overflowed. The 24012 single operand is the address in the stack farthest from the 24013 current stack pointer that you need to validate. Normally, on 24014 platforms where this pattern is needed, you would obtain the stack 24015 limit from a global or thread-specific variable or register. 24016 24017'probe_stack_address' 24018 If stack checking (*note Stack Checking::) can be done on your 24019 system by probing the stack but without the need to actually access 24020 it, define this pattern and signal an error if the stack has 24021 overflowed. The single operand is the memory address in the stack 24022 that needs to be probed. 24023 24024'probe_stack' 24025 If stack checking (*note Stack Checking::) can be done on your 24026 system by probing the stack but doing it with a "store zero" 24027 instruction is not valid or optimal, define this pattern to do the 24028 probing differently and signal an error if the stack has 24029 overflowed. The single operand is the memory reference in the 24030 stack that needs to be probed. 24031 24032'nonlocal_goto' 24033 Emit code to generate a non-local goto, e.g., a jump from one 24034 function to a label in an outer function. This pattern has four 24035 arguments, each representing a value to be used in the jump. The 24036 first argument is to be loaded into the frame pointer, the second 24037 is the address to branch to (code to dispatch to the actual label), 24038 the third is the address of a location where the stack is saved, 24039 and the last is the address of the label, to be placed in the 24040 location for the incoming static chain. 24041 24042 On most machines you need not define this pattern, since GCC will 24043 already generate the correct code, which is to load the frame 24044 pointer and static chain, restore the stack (using the 24045 'restore_stack_nonlocal' pattern, if defined), and jump indirectly 24046 to the dispatcher. You need only define this pattern if this code 24047 will not work on your machine. 24048 24049'nonlocal_goto_receiver' 24050 This pattern, if defined, contains code needed at the target of a 24051 nonlocal goto after the code already generated by GCC. You will 24052 not normally need to define this pattern. A typical reason why you 24053 might need this pattern is if some value, such as a pointer to a 24054 global table, must be restored when the frame pointer is restored. 24055 Note that a nonlocal goto only occurs within a unit-of-translation, 24056 so a global table pointer that is shared by all functions of a 24057 given module need not be restored. There are no arguments. 24058 24059'exception_receiver' 24060 This pattern, if defined, contains code needed at the site of an 24061 exception handler that isn't needed at the site of a nonlocal goto. 24062 You will not normally need to define this pattern. A typical 24063 reason why you might need this pattern is if some value, such as a 24064 pointer to a global table, must be restored after control flow is 24065 branched to the handler of an exception. There are no arguments. 24066 24067'builtin_setjmp_setup' 24068 This pattern, if defined, contains additional code needed to 24069 initialize the 'jmp_buf'. You will not normally need to define 24070 this pattern. A typical reason why you might need this pattern is 24071 if some value, such as a pointer to a global table, must be 24072 restored. Though it is preferred that the pointer value be 24073 recalculated if possible (given the address of a label for 24074 instance). The single argument is a pointer to the 'jmp_buf'. 24075 Note that the buffer is five words long and that the first three 24076 are normally used by the generic mechanism. 24077 24078'builtin_setjmp_receiver' 24079 This pattern, if defined, contains code needed at the site of a 24080 built-in setjmp that isn't needed at the site of a nonlocal goto. 24081 You will not normally need to define this pattern. A typical 24082 reason why you might need this pattern is if some value, such as a 24083 pointer to a global table, must be restored. It takes one 24084 argument, which is the label to which builtin_longjmp transferred 24085 control; this pattern may be emitted at a small offset from that 24086 label. 24087 24088'builtin_longjmp' 24089 This pattern, if defined, performs the entire action of the 24090 longjmp. You will not normally need to define this pattern unless 24091 you also define 'builtin_setjmp_setup'. The single argument is a 24092 pointer to the 'jmp_buf'. 24093 24094'eh_return' 24095 This pattern, if defined, affects the way '__builtin_eh_return', 24096 and thence the call frame exception handling library routines, are 24097 built. It is intended to handle non-trivial actions needed along 24098 the abnormal return path. 24099 24100 The address of the exception handler to which the function should 24101 return is passed as operand to this pattern. It will normally need 24102 to copied by the pattern to some special register or memory 24103 location. If the pattern needs to determine the location of the 24104 target call frame in order to do so, it may use 24105 'EH_RETURN_STACKADJ_RTX', if defined; it will have already been 24106 assigned. 24107 24108 If this pattern is not defined, the default action will be to 24109 simply copy the return address to 'EH_RETURN_HANDLER_RTX'. Either 24110 that macro or this pattern needs to be defined if call frame 24111 exception handling is to be used. 24112 24113'prologue' 24114 This pattern, if defined, emits RTL for entry to a function. The 24115 function entry is responsible for setting up the stack frame, 24116 initializing the frame pointer register, saving callee saved 24117 registers, etc. 24118 24119 Using a prologue pattern is generally preferred over defining 24120 'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 24121 prologue. 24122 24123 The 'prologue' pattern is particularly useful for targets which 24124 perform instruction scheduling. 24125 24126'window_save' 24127 This pattern, if defined, emits RTL for a register window save. It 24128 should be defined if the target machine has register windows but 24129 the window events are decoupled from calls to subroutines. The 24130 canonical example is the SPARC architecture. 24131 24132'epilogue' 24133 This pattern emits RTL for exit from a function. The function exit 24134 is responsible for deallocating the stack frame, restoring callee 24135 saved registers and emitting the return instruction. 24136 24137 Using an epilogue pattern is generally preferred over defining 24138 'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 24139 epilogue. 24140 24141 The 'epilogue' pattern is particularly useful for targets which 24142 perform instruction scheduling or which have delay slots for their 24143 return instruction. 24144 24145'sibcall_epilogue' 24146 This pattern, if defined, emits RTL for exit from a function 24147 without the final branch back to the calling function. This 24148 pattern will be emitted before any sibling call (aka tail call) 24149 sites. 24150 24151 The 'sibcall_epilogue' pattern must not clobber any arguments used 24152 for parameter passing or any stack slots for arguments passed to 24153 the current function. 24154 24155'trap' 24156 This pattern, if defined, signals an error, typically by causing 24157 some kind of signal to be raised. Among other places, it is used 24158 by the Java front end to signal 'invalid array index' exceptions. 24159 24160'ctrapMM4' 24161 Conditional trap instruction. Operand 0 is a piece of RTL which 24162 performs a comparison, and operands 1 and 2 are the arms of the 24163 comparison. Operand 3 is the trap code, an integer. 24164 24165 A typical 'ctrap' pattern looks like 24166 24167 (define_insn "ctrapsi4" 24168 [(trap_if (match_operator 0 "trap_operator" 24169 [(match_operand 1 "register_operand") 24170 (match_operand 2 "immediate_operand")]) 24171 (match_operand 3 "const_int_operand" "i"))] 24172 "" 24173 "...") 24174 24175'prefetch' 24176 This pattern, if defined, emits code for a non-faulting data 24177 prefetch instruction. Operand 0 is the address of the memory to 24178 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 24179 for a write to the memory address, or a constant 0 otherwise. 24180 Operand 2 is the expected degree of temporal locality of the data 24181 and is a value between 0 and 3, inclusive; 0 means that the data 24182 has no temporal locality, so it need not be left in the cache after 24183 the access; 3 means that the data has a high degree of temporal 24184 locality and should be left in all levels of cache possible; 1 and 24185 2 mean, respectively, a low or moderate degree of temporal 24186 locality. 24187 24188 Targets that do not support write prefetches or locality hints can 24189 ignore the values of operands 1 and 2. 24190 24191'blockage' 24192 This pattern defines a pseudo insn that prevents the instruction 24193 scheduler and other passes from moving instructions and using 24194 register equivalences across the boundary defined by the blockage 24195 insn. This needs to be an UNSPEC_VOLATILE pattern or a volatile 24196 ASM. 24197 24198'memory_barrier' 24199 If the target memory model is not fully synchronous, then this 24200 pattern should be defined to an instruction that orders both loads 24201 and stores before the instruction with respect to loads and stores 24202 after the instruction. This pattern has no operands. 24203 24204'sync_compare_and_swapMODE' 24205 This pattern, if defined, emits code for an atomic compare-and-swap 24206 operation. Operand 1 is the memory on which the atomic operation 24207 is performed. Operand 2 is the "old" value to be compared against 24208 the current contents of the memory location. Operand 3 is the 24209 "new" value to store in the memory if the compare succeeds. 24210 Operand 0 is the result of the operation; it should contain the 24211 contents of the memory before the operation. If the compare 24212 succeeds, this should obviously be a copy of operand 2. 24213 24214 This pattern must show that both operand 0 and operand 1 are 24215 modified. 24216 24217 This pattern must issue any memory barrier instructions such that 24218 all memory operations before the atomic operation occur before the 24219 atomic operation and all memory operations after the atomic 24220 operation occur after the atomic operation. 24221 24222 For targets where the success or failure of the compare-and-swap 24223 operation is available via the status flags, it is possible to 24224 avoid a separate compare operation and issue the subsequent branch 24225 or store-flag operation immediately after the compare-and-swap. To 24226 this end, GCC will look for a 'MODE_CC' set in the output of 24227 'sync_compare_and_swapMODE'; if the machine description includes 24228 such a set, the target should also define special 'cbranchcc4' 24229 and/or 'cstorecc4' instructions. GCC will then be able to take the 24230 destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or 24231 'cstorecc4' pattern as the first operand of the comparison (the 24232 second will be '(const_int 0)'). 24233 24234 For targets where the operating system may provide support for this 24235 operation via library calls, the 'sync_compare_and_swap_optab' may 24236 be initialized to a function with the same interface as the 24237 '__sync_val_compare_and_swap_N' built-in. If the entire set of 24238 __SYNC builtins are supported via library calls, the target can 24239 initialize all of the optabs at once with 'init_sync_libfuncs'. 24240 For the purposes of C++11 'std::atomic::is_lock_free', it is 24241 assumed that these library calls do _not_ use any kind of 24242 interruptable locking. 24243 24244'sync_addMODE', 'sync_subMODE' 24245'sync_iorMODE', 'sync_andMODE' 24246'sync_xorMODE', 'sync_nandMODE' 24247 These patterns emit code for an atomic operation on memory. 24248 Operand 0 is the memory on which the atomic operation is performed. 24249 Operand 1 is the second operand to the binary operator. 24250 24251 This pattern must issue any memory barrier instructions such that 24252 all memory operations before the atomic operation occur before the 24253 atomic operation and all memory operations after the atomic 24254 operation occur after the atomic operation. 24255 24256 If these patterns are not defined, the operation will be 24257 constructed from a compare-and-swap operation, if defined. 24258 24259'sync_old_addMODE', 'sync_old_subMODE' 24260'sync_old_iorMODE', 'sync_old_andMODE' 24261'sync_old_xorMODE', 'sync_old_nandMODE' 24262 These patterns emit code for an atomic operation on memory, and 24263 return the value that the memory contained before the operation. 24264 Operand 0 is the result value, operand 1 is the memory on which the 24265 atomic operation is performed, and operand 2 is the second operand 24266 to the binary operator. 24267 24268 This pattern must issue any memory barrier instructions such that 24269 all memory operations before the atomic operation occur before the 24270 atomic operation and all memory operations after the atomic 24271 operation occur after the atomic operation. 24272 24273 If these patterns are not defined, the operation will be 24274 constructed from a compare-and-swap operation, if defined. 24275 24276'sync_new_addMODE', 'sync_new_subMODE' 24277'sync_new_iorMODE', 'sync_new_andMODE' 24278'sync_new_xorMODE', 'sync_new_nandMODE' 24279 These patterns are like their 'sync_old_OP' counterparts, except 24280 that they return the value that exists in the memory location after 24281 the operation, rather than before the operation. 24282 24283'sync_lock_test_and_setMODE' 24284 This pattern takes two forms, based on the capabilities of the 24285 target. In either case, operand 0 is the result of the operand, 24286 operand 1 is the memory on which the atomic operation is performed, 24287 and operand 2 is the value to set in the lock. 24288 24289 In the ideal case, this operation is an atomic exchange operation, 24290 in which the previous value in memory operand is copied into the 24291 result operand, and the value operand is stored in the memory 24292 operand. 24293 24294 For less capable targets, any value operand that is not the 24295 constant 1 should be rejected with 'FAIL'. In this case the target 24296 may use an atomic test-and-set bit operation. The result operand 24297 should contain 1 if the bit was previously set and 0 if the bit was 24298 previously clear. The true contents of the memory operand are 24299 implementation defined. 24300 24301 This pattern must issue any memory barrier instructions such that 24302 the pattern as a whole acts as an acquire barrier, that is all 24303 memory operations after the pattern do not occur until the lock is 24304 acquired. 24305 24306 If this pattern is not defined, the operation will be constructed 24307 from a compare-and-swap operation, if defined. 24308 24309'sync_lock_releaseMODE' 24310 This pattern, if defined, releases a lock set by 24311 'sync_lock_test_and_setMODE'. Operand 0 is the memory that 24312 contains the lock; operand 1 is the value to store in the lock. 24313 24314 If the target doesn't implement full semantics for 24315 'sync_lock_test_and_setMODE', any value operand which is not the 24316 constant 0 should be rejected with 'FAIL', and the true contents of 24317 the memory operand are implementation defined. 24318 24319 This pattern must issue any memory barrier instructions such that 24320 the pattern as a whole acts as a release barrier, that is the lock 24321 is released only after all previous memory operations have 24322 completed. 24323 24324 If this pattern is not defined, then a 'memory_barrier' pattern 24325 will be emitted, followed by a store of the value to the memory 24326 operand. 24327 24328'atomic_compare_and_swapMODE' 24329 This pattern, if defined, emits code for an atomic compare-and-swap 24330 operation with memory model semantics. Operand 2 is the memory on 24331 which the atomic operation is performed. Operand 0 is an output 24332 operand which is set to true or false based on whether the 24333 operation succeeded. Operand 1 is an output operand which is set 24334 to the contents of the memory before the operation was attempted. 24335 Operand 3 is the value that is expected to be in memory. Operand 4 24336 is the value to put in memory if the expected value is found there. 24337 Operand 5 is set to 1 if this compare and swap is to be treated as 24338 a weak operation. Operand 6 is the memory model to be used if the 24339 operation is a success. Operand 7 is the memory model to be used 24340 if the operation fails. 24341 24342 If memory referred to in operand 2 contains the value in operand 3, 24343 then operand 4 is stored in memory pointed to by operand 2 and 24344 fencing based on the memory model in operand 6 is issued. 24345 24346 If memory referred to in operand 2 does not contain the value in 24347 operand 3, then fencing based on the memory model in operand 7 is 24348 issued. 24349 24350 If a target does not support weak compare-and-swap operations, or 24351 the port elects not to implement weak operations, the argument in 24352 operand 5 can be ignored. Note a strong implementation must be 24353 provided. 24354 24355 If this pattern is not provided, the '__atomic_compare_exchange' 24356 built-in functions will utilize the legacy 'sync_compare_and_swap' 24357 pattern with an '__ATOMIC_SEQ_CST' memory model. 24358 24359'atomic_loadMODE' 24360 This pattern implements an atomic load operation with memory model 24361 semantics. Operand 1 is the memory address being loaded from. 24362 Operand 0 is the result of the load. Operand 2 is the memory model 24363 to be used for the load operation. 24364 24365 If not present, the '__atomic_load' built-in function will either 24366 resort to a normal load with memory barriers, or a compare-and-swap 24367 operation if a normal load would not be atomic. 24368 24369'atomic_storeMODE' 24370 This pattern implements an atomic store operation with memory model 24371 semantics. Operand 0 is the memory address being stored to. 24372 Operand 1 is the value to be written. Operand 2 is the memory 24373 model to be used for the operation. 24374 24375 If not present, the '__atomic_store' built-in function will attempt 24376 to perform a normal store and surround it with any required memory 24377 fences. If the store would not be atomic, then an 24378 '__atomic_exchange' is attempted with the result being ignored. 24379 24380'atomic_exchangeMODE' 24381 This pattern implements an atomic exchange operation with memory 24382 model semantics. Operand 1 is the memory location the operation is 24383 performed on. Operand 0 is an output operand which is set to the 24384 original value contained in the memory pointed to by operand 1. 24385 Operand 2 is the value to be stored. Operand 3 is the memory model 24386 to be used. 24387 24388 If this pattern is not present, the built-in function 24389 '__atomic_exchange' will attempt to preform the operation with a 24390 compare and swap loop. 24391 24392'atomic_addMODE', 'atomic_subMODE' 24393'atomic_orMODE', 'atomic_andMODE' 24394'atomic_xorMODE', 'atomic_nandMODE' 24395 These patterns emit code for an atomic operation on memory with 24396 memory model semantics. Operand 0 is the memory on which the 24397 atomic operation is performed. Operand 1 is the second operand to 24398 the binary operator. Operand 2 is the memory model to be used by 24399 the operation. 24400 24401 If these patterns are not defined, attempts will be made to use 24402 legacy 'sync' patterns, or equivalent patterns which return a 24403 result. If none of these are available a compare-and-swap loop 24404 will be used. 24405 24406'atomic_fetch_addMODE', 'atomic_fetch_subMODE' 24407'atomic_fetch_orMODE', 'atomic_fetch_andMODE' 24408'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE' 24409 These patterns emit code for an atomic operation on memory with 24410 memory model semantics, and return the original value. Operand 0 24411 is an output operand which contains the value of the memory 24412 location before the operation was performed. Operand 1 is the 24413 memory on which the atomic operation is performed. Operand 2 is 24414 the second operand to the binary operator. Operand 3 is the memory 24415 model to be used by the operation. 24416 24417 If these patterns are not defined, attempts will be made to use 24418 legacy 'sync' patterns. If none of these are available a 24419 compare-and-swap loop will be used. 24420 24421'atomic_add_fetchMODE', 'atomic_sub_fetchMODE' 24422'atomic_or_fetchMODE', 'atomic_and_fetchMODE' 24423'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE' 24424 These patterns emit code for an atomic operation on memory with 24425 memory model semantics and return the result after the operation is 24426 performed. Operand 0 is an output operand which contains the value 24427 after the operation. Operand 1 is the memory on which the atomic 24428 operation is performed. Operand 2 is the second operand to the 24429 binary operator. Operand 3 is the memory model to be used by the 24430 operation. 24431 24432 If these patterns are not defined, attempts will be made to use 24433 legacy 'sync' patterns, or equivalent patterns which return the 24434 result before the operation followed by the arithmetic operation 24435 required to produce the result. If none of these are available a 24436 compare-and-swap loop will be used. 24437 24438'atomic_test_and_set' 24439 This pattern emits code for '__builtin_atomic_test_and_set'. 24440 Operand 0 is an output operand which is set to true if the previous 24441 previous contents of the byte was "set", and false otherwise. 24442 Operand 1 is the 'QImode' memory to be modified. Operand 2 is the 24443 memory model to be used. 24444 24445 The specific value that defines "set" is implementation defined, 24446 and is normally based on what is performed by the native atomic 24447 test and set instruction. 24448 24449'mem_thread_fenceMODE' 24450 This pattern emits code required to implement a thread fence with 24451 memory model semantics. Operand 0 is the memory model to be used. 24452 24453 If this pattern is not specified, all memory models except 24454 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 24455 barrier pattern. 24456 24457'mem_signal_fenceMODE' 24458 This pattern emits code required to implement a signal fence with 24459 memory model semantics. Operand 0 is the memory model to be used. 24460 24461 This pattern should impact the compiler optimizers the same way 24462 that mem_signal_fence does, but it does not need to issue any 24463 barrier instructions. 24464 24465 If this pattern is not specified, all memory models except 24466 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 24467 barrier pattern. 24468 24469'get_thread_pointerMODE' 24470'set_thread_pointerMODE' 24471 These patterns emit code that reads/sets the TLS thread pointer. 24472 Currently, these are only needed if the target needs to support the 24473 '__builtin_thread_pointer' and '__builtin_set_thread_pointer' 24474 builtins. 24475 24476 The get/set patterns have a single output/input operand 24477 respectively, with MODE intended to be 'Pmode'. 24478 24479'stack_protect_set' 24480 This pattern, if defined, moves a 'ptr_mode' value from the memory 24481 in operand 1 to the memory in operand 0 without leaving the value 24482 in a register afterward. This is to avoid leaking the value some 24483 place that an attacker might use to rewrite the stack guard slot 24484 after having clobbered it. 24485 24486 If this pattern is not defined, then a plain move pattern is 24487 generated. 24488 24489'stack_protect_test' 24490 This pattern, if defined, compares a 'ptr_mode' value from the 24491 memory in operand 1 with the memory in operand 0 without leaving 24492 the value in a register afterward and branches to operand 2 if the 24493 values were equal. 24494 24495 If this pattern is not defined, then a plain compare pattern and 24496 conditional branch pattern is used. 24497 24498'clear_cache' 24499 This pattern, if defined, flushes the instruction cache for a 24500 region of memory. The region is bounded to by the Pmode pointers 24501 in operand 0 inclusive and operand 1 exclusive. 24502 24503 If this pattern is not defined, a call to the library function 24504 '__clear_cache' is used. 24505 24506 24507File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 24508 2450916.10 When the Order of Patterns Matters 24510======================================== 24511 24512Sometimes an insn can match more than one instruction pattern. Then the 24513pattern that appears first in the machine description is the one used. 24514Therefore, more specific patterns (patterns that will match fewer 24515things) and faster instructions (those that will produce better code 24516when they do match) should usually go first in the description. 24517 24518 In some cases the effect of ordering the patterns can be used to hide a 24519pattern when it is not valid. For example, the 68000 has an instruction 24520for converting a fullword to floating point and another for converting a 24521byte to floating point. An instruction converting an integer to 24522floating point could match either one. We put the pattern to convert 24523the fullword first to make sure that one will be used rather than the 24524other. (Otherwise a large integer might be generated as a single-byte 24525immediate quantity, which would not work.) Instead of using this 24526pattern ordering it would be possible to make the pattern for 24527convert-a-byte smart enough to deal properly with any constant value. 24528 24529 24530File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 24531 2453216.11 Interdependence of Patterns 24533================================= 24534 24535In some cases machines support instructions identical except for the 24536machine mode of one or more operands. For example, there may be 24537"sign-extend halfword" and "sign-extend byte" instructions whose 24538patterns are 24539 24540 (set (match_operand:SI 0 ...) 24541 (extend:SI (match_operand:HI 1 ...))) 24542 24543 (set (match_operand:SI 0 ...) 24544 (extend:SI (match_operand:QI 1 ...))) 24545 24546Constant integers do not specify a machine mode, so an instruction to 24547extend a constant value could match either pattern. The pattern it 24548actually will match is the one that appears first in the file. For 24549correct results, this must be the one for the widest possible mode 24550('HImode', here). If the pattern matches the 'QImode' instruction, the 24551results will be incorrect if the constant value does not actually fit 24552that mode. 24553 24554 Such instructions to extend constants are rarely generated because they 24555are optimized away, but they do occasionally happen in nonoptimized 24556compilations. 24557 24558 If a constraint in a pattern allows a constant, the reload pass may 24559replace a register with a constant permitted by the constraint in some 24560cases. Similarly for memory references. Because of this substitution, 24561you should not provide separate patterns for increment and decrement 24562instructions. Instead, they should be generated from the same pattern 24563that supports register-register add insns by examining the operands and 24564generating the appropriate machine instruction. 24565 24566 24567File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 24568 2456916.12 Defining Jump Instruction Patterns 24570======================================== 24571 24572GCC does not assume anything about how the machine realizes jumps. The 24573machine description should define a single pattern, usually a 24574'define_expand', which expands to all the required insns. 24575 24576 Usually, this would be a comparison insn to set the condition code and 24577a separate branch insn testing the condition code and branching or not 24578according to its value. For many machines, however, separating compares 24579and branches is limiting, which is why the more flexible approach with 24580one 'define_expand' is used in GCC. The machine description becomes 24581clearer for architectures that have compare-and-branch instructions but 24582no condition code. It also works better when different sets of 24583comparison operators are supported by different kinds of conditional 24584branches (e.g. integer vs. floating-point), or by conditional branches 24585with respect to conditional stores. 24586 24587 Two separate insns are always used if the machine description 24588represents a condition code register using the legacy RTL expression 24589'(cc0)', and on most machines that use a separate condition code 24590register (*note Condition Code::). For machines that use '(cc0)', in 24591fact, the set and use of the condition code must be separate and 24592adjacent(1), thus allowing flags in 'cc_status' to be used (*note 24593Condition Code::) and so that the comparison and branch insns could be 24594located from each other by using the functions 'prev_cc0_setter' and 24595'next_cc0_user'. 24596 24597 Even in this case having a single entry point for conditional branches 24598is advantageous, because it handles equally well the case where a single 24599comparison instruction records the results of both signed and unsigned 24600comparison of the given operands (with the branch insns coming in 24601distinct signed and unsigned flavors) as in the x86 or SPARC, and the 24602case where there are distinct signed and unsigned compare instructions 24603and only one set of conditional branch instructions as in the PowerPC. 24604 24605 ---------- Footnotes ---------- 24606 24607 (1) 'note' insns can separate them, though. 24608 24609 24610File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 24611 2461216.13 Defining Looping Instruction Patterns 24613=========================================== 24614 24615Some machines have special jump instructions that can be utilized to 24616make loops more efficient. A common example is the 68000 'dbra' 24617instruction which performs a decrement of a register and a branch if the 24618result was greater than zero. Other machines, in particular digital 24619signal processors (DSPs), have special block repeat instructions to 24620provide low-overhead loop support. For example, the TI TMS320C3x/C4x 24621DSPs have a block repeat instruction that loads special registers to 24622mark the top and end of a loop and to count the number of loop 24623iterations. This avoids the need for fetching and executing a 24624'dbra'-like instruction and avoids pipeline stalls associated with the 24625jump. 24626 24627 GCC has three special named patterns to support low overhead looping. 24628They are 'decrement_and_branch_until_zero', 'doloop_begin', and 24629'doloop_end'. The first pattern, 'decrement_and_branch_until_zero', is 24630not emitted during RTL generation but may be emitted during the 24631instruction combination phase. This requires the assistance of the loop 24632optimizer, using information collected during strength reduction, to 24633reverse a loop to count down to zero. Some targets also require the 24634loop optimizer to add a 'REG_NONNEG' note to indicate that the iteration 24635count is always positive. This is needed if the target performs a 24636signed loop termination test. For example, the 68000 uses a pattern 24637similar to the following for its 'dbra' instruction: 24638 24639 (define_insn "decrement_and_branch_until_zero" 24640 [(set (pc) 24641 (if_then_else 24642 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 24643 (const_int -1)) 24644 (const_int 0)) 24645 (label_ref (match_operand 1 "" "")) 24646 (pc))) 24647 (set (match_dup 0) 24648 (plus:SI (match_dup 0) 24649 (const_int -1)))] 24650 "find_reg_note (insn, REG_NONNEG, 0)" 24651 "...") 24652 24653 Note that since the insn is both a jump insn and has an output, it must 24654deal with its own reloads, hence the 'm' constraints. Also note that 24655since this insn is generated by the instruction combination phase 24656combining two sequential insns together into an implicit parallel insn, 24657the iteration counter needs to be biased by the same amount as the 24658decrement operation, in this case -1. Note that the following similar 24659pattern will not be matched by the combiner. 24660 24661 (define_insn "decrement_and_branch_until_zero" 24662 [(set (pc) 24663 (if_then_else 24664 (ge (match_operand:SI 0 "general_operand" "+d*am") 24665 (const_int 1)) 24666 (label_ref (match_operand 1 "" "")) 24667 (pc))) 24668 (set (match_dup 0) 24669 (plus:SI (match_dup 0) 24670 (const_int -1)))] 24671 "find_reg_note (insn, REG_NONNEG, 0)" 24672 "...") 24673 24674 The other two special looping patterns, 'doloop_begin' and 24675'doloop_end', are emitted by the loop optimizer for certain well-behaved 24676loops with a finite number of loop iterations using information 24677collected during strength reduction. 24678 24679 The 'doloop_end' pattern describes the actual looping instruction (or 24680the implicit looping operation) and the 'doloop_begin' pattern is an 24681optional companion pattern that can be used for initialization needed 24682for some low-overhead looping instructions. 24683 24684 Note that some machines require the actual looping instruction to be 24685emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 24686the true RTL for a looping instruction at the top of the loop can cause 24687problems with flow analysis. So instead, a dummy 'doloop' insn is 24688emitted at the end of the loop. The machine dependent reorg pass checks 24689for the presence of this 'doloop' insn and then searches back to the top 24690of the loop, where it inserts the true looping insn (provided there are 24691no instructions in the loop which would cause problems). Any additional 24692labels can be emitted at this point. In addition, if the desired 24693special iteration counter register was not allocated, this machine 24694dependent reorg pass could emit a traditional compare and jump 24695instruction pair. 24696 24697 The essential difference between the 'decrement_and_branch_until_zero' 24698and the 'doloop_end' patterns is that the loop optimizer allocates an 24699additional pseudo register for the latter as an iteration counter. This 24700pseudo register cannot be used within the loop (i.e., general induction 24701variables cannot be derived from it), however, in many cases the loop 24702induction variable may become redundant and removed by the flow pass. 24703 24704 24705File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 24706 2470716.14 Canonicalization of Instructions 24708====================================== 24709 24710There are often cases where multiple RTL expressions could represent an 24711operation performed by a single machine instruction. This situation is 24712most commonly encountered with logical, branch, and multiply-accumulate 24713instructions. In such cases, the compiler attempts to convert these 24714multiple RTL expressions into a single canonical form to reduce the 24715number of insn patterns required. 24716 24717 In addition to algebraic simplifications, following canonicalizations 24718are performed: 24719 24720 * For commutative and comparison operators, a constant is always made 24721 the second operand. If a machine only supports a constant as the 24722 second operand, only patterns that match a constant in the second 24723 operand need be supplied. 24724 24725 * For associative operators, a sequence of operators will always 24726 chain to the left; for instance, only the left operand of an 24727 integer 'plus' can itself be a 'plus'. 'and', 'ior', 'xor', 24728 'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative 24729 when applied to integers, and sometimes to floating-point. 24730 24731 * For these operators, if only one operand is a 'neg', 'not', 'mult', 24732 'plus', or 'minus' expression, it will be the first operand. 24733 24734 * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg' 24735 operations (if any) will be moved inside the operations as far as 24736 possible. For instance, '(neg (mult A B))' is canonicalized as 24737 '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is 24738 canonicalized as '(minus A (mult B C))'. 24739 24740 * For the 'compare' operator, a constant is always the second operand 24741 if the first argument is a condition code register or '(cc0)'. 24742 24743 * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the 24744 first operand under the same conditions as above. 24745 24746 * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'. 24747 Likewise with 'geu' instead of 'ltu'. 24748 24749 * '(minus X (const_int N))' is converted to '(plus X (const_int 24750 -N))'. 24751 24752 * Within address computations (i.e., inside 'mem'), a left shift is 24753 converted into the appropriate multiplication by a power of two. 24754 24755 * De Morgan's Law is used to move bitwise negation inside a bitwise 24756 logical-and or logical-or operation. If this results in only one 24757 operand being a 'not' expression, it will be the first one. 24758 24759 A machine that has an instruction that performs a bitwise 24760 logical-and of one operand with the bitwise negation of the other 24761 should specify the pattern for that instruction as 24762 24763 (define_insn "" 24764 [(set (match_operand:M 0 ...) 24765 (and:M (not:M (match_operand:M 1 ...)) 24766 (match_operand:M 2 ...)))] 24767 "..." 24768 "...") 24769 24770 Similarly, a pattern for a "NAND" instruction should be written 24771 24772 (define_insn "" 24773 [(set (match_operand:M 0 ...) 24774 (ior:M (not:M (match_operand:M 1 ...)) 24775 (not:M (match_operand:M 2 ...))))] 24776 "..." 24777 "...") 24778 24779 In both cases, it is not necessary to include patterns for the many 24780 logically equivalent RTL expressions. 24781 24782 * The only possible RTL expressions involving both bitwise 24783 exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M 24784 (xor:M X Y))'. 24785 24786 * The sum of three items, one of which is a constant, will only 24787 appear in the form 24788 24789 (plus:M (plus:M X Y) CONSTANT) 24790 24791 * Equality comparisons of a group of bits (usually a single bit) with 24792 zero will be written using 'zero_extract' rather than the 24793 equivalent 'and' or 'sign_extract' operations. 24794 24795 * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))' 24796 is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))', 24797 and likewise for 'zero_extend'. 24798 24799 * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))' 24800 is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S)) 24801 (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend' 24802 and 'lshiftrt'. If the second operand of 'mult' is also a shift, 24803 then that is extended also. This transformation is only applied 24804 when it can be proven that the original operation had sufficient 24805 precision to prevent overflow. 24806 24807 Further canonicalization rules are defined in the function 24808'commutative_operand_precedence' in 'gcc/rtlanal.c'. 24809 24810 24811File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 24812 2481316.15 Defining RTL Sequences for Code Generation 24814================================================ 24815 24816On some target machines, some standard pattern names for RTL generation 24817cannot be handled with single insn, but a sequence of RTL insns can 24818represent them. For these target machines, you can write a 24819'define_expand' to specify how to generate the sequence of RTL. 24820 24821 A 'define_expand' is an RTL expression that looks almost like a 24822'define_insn'; but, unlike the latter, a 'define_expand' is used only 24823for RTL generation and it can produce more than one RTL insn. 24824 24825 A 'define_expand' RTX has four operands: 24826 24827 * The name. Each 'define_expand' must have a name, since the only 24828 use for it is to refer to it by name. 24829 24830 * The RTL template. This is a vector of RTL expressions representing 24831 a sequence of separate instructions. Unlike 'define_insn', there 24832 is no implicit surrounding 'PARALLEL'. 24833 24834 * The condition, a string containing a C expression. This expression 24835 is used to express how the availability of this pattern depends on 24836 subclasses of target machine, selected by command-line options when 24837 GCC is run. This is just like the condition of a 'define_insn' 24838 that has a standard name. Therefore, the condition (if present) 24839 may not depend on the data in the insn being matched, but only the 24840 target-machine-type flags. The compiler needs to test these 24841 conditions during initialization in order to learn exactly which 24842 named instructions are available in a particular run. 24843 24844 * The preparation statements, a string containing zero or more C 24845 statements which are to be executed before RTL code is generated 24846 from the RTL template. 24847 24848 Usually these statements prepare temporary registers for use as 24849 internal operands in the RTL template, but they can also generate 24850 RTL insns directly by calling routines such as 'emit_insn', etc. 24851 Any such insns precede the ones that come from the RTL template. 24852 24853 * Optionally, a vector containing the values of attributes. *Note 24854 Insn Attributes::. 24855 24856 Every RTL insn emitted by a 'define_expand' must match some 24857'define_insn' in the machine description. Otherwise, the compiler will 24858crash when trying to generate code for the insn or trying to optimize 24859it. 24860 24861 The RTL template, in addition to controlling generation of RTL insns, 24862also describes the operands that need to be specified when this pattern 24863is used. In particular, it gives a predicate for each operand. 24864 24865 A true operand, which needs to be specified in order to generate RTL 24866from the pattern, should be described with a 'match_operand' in its 24867first occurrence in the RTL template. This enters information on the 24868operand's predicate into the tables that record such things. GCC uses 24869the information to preload the operand into a register if that is 24870required for valid RTL code. If the operand is referred to more than 24871once, subsequent references should use 'match_dup'. 24872 24873 The RTL template may also refer to internal "operands" which are 24874temporary registers or labels used only within the sequence made by the 24875'define_expand'. Internal operands are substituted into the RTL 24876template with 'match_dup', never with 'match_operand'. The values of 24877the internal operands are not passed in as arguments by the compiler 24878when it requests use of this pattern. Instead, they are computed within 24879the pattern, in the preparation statements. These statements compute 24880the values and store them into the appropriate elements of 'operands' so 24881that 'match_dup' can find them. 24882 24883 There are two special macros defined for use in the preparation 24884statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 24885a statement. 24886 24887'DONE' 24888 Use the 'DONE' macro to end RTL generation for the pattern. The 24889 only RTL insns resulting from the pattern on this occasion will be 24890 those already emitted by explicit calls to 'emit_insn' within the 24891 preparation statements; the RTL template will not be generated. 24892 24893'FAIL' 24894 Make the pattern fail on this occasion. When a pattern fails, it 24895 means that the pattern was not truly available. The calling 24896 routines in the compiler will try other strategies for code 24897 generation using other patterns. 24898 24899 Failure is currently supported only for binary (addition, 24900 multiplication, shifting, etc.) and bit-field ('extv', 'extzv', 24901 and 'insv') operations. 24902 24903 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 24904then the 'define_expand' acts like a 'define_insn' in that the RTL 24905template is used to generate the insn. 24906 24907 The RTL template is not used for matching, only for generating the 24908initial insn list. If the preparation statement always invokes 'DONE' 24909or 'FAIL', the RTL template may be reduced to a simple list of operands, 24910such as this example: 24911 24912 (define_expand "addsi3" 24913 [(match_operand:SI 0 "register_operand" "") 24914 (match_operand:SI 1 "register_operand" "") 24915 (match_operand:SI 2 "register_operand" "")] 24916 "" 24917 " 24918 { 24919 handle_add (operands[0], operands[1], operands[2]); 24920 DONE; 24921 }") 24922 24923 Here is an example, the definition of left-shift for the SPUR chip: 24924 24925 (define_expand "ashlsi3" 24926 [(set (match_operand:SI 0 "register_operand" "") 24927 (ashift:SI 24928 (match_operand:SI 1 "register_operand" "") 24929 (match_operand:SI 2 "nonmemory_operand" "")))] 24930 "" 24931 " 24932 24933 { 24934 if (GET_CODE (operands[2]) != CONST_INT 24935 || (unsigned) INTVAL (operands[2]) > 3) 24936 FAIL; 24937 }") 24938 24939This example uses 'define_expand' so that it can generate an RTL insn 24940for shifting when the shift-count is in the supported range of 0 to 3 24941but fail in other cases where machine insns aren't available. When it 24942fails, the compiler tries another strategy using different patterns 24943(such as, a library call). 24944 24945 If the compiler were able to handle nontrivial condition-strings in 24946patterns with names, then it would be possible to use a 'define_insn' in 24947that case. Here is another case (zero-extension on the 68000) which 24948makes more use of the power of 'define_expand': 24949 24950 (define_expand "zero_extendhisi2" 24951 [(set (match_operand:SI 0 "general_operand" "") 24952 (const_int 0)) 24953 (set (strict_low_part 24954 (subreg:HI 24955 (match_dup 0) 24956 0)) 24957 (match_operand:HI 1 "general_operand" ""))] 24958 "" 24959 "operands[1] = make_safe_from (operands[1], operands[0]);") 24960 24961Here two RTL insns are generated, one to clear the entire output operand 24962and the other to copy the input operand into its low half. This 24963sequence is incorrect if the input operand refers to [the old value of] 24964the output operand, so the preparation statement makes sure this isn't 24965so. The function 'make_safe_from' copies the 'operands[1]' into a 24966temporary register if it refers to 'operands[0]'. It does this by 24967emitting another RTL insn. 24968 24969 Finally, a third example shows the use of an internal operand. 24970Zero-extension on the SPUR chip is done by 'and'-ing the result against 24971a halfword mask. But this mask cannot be represented by a 'const_int' 24972because the constant value is too large to be legitimate on this 24973machine. So it must be copied into a register with 'force_reg' and then 24974the register used in the 'and'. 24975 24976 (define_expand "zero_extendhisi2" 24977 [(set (match_operand:SI 0 "register_operand" "") 24978 (and:SI (subreg:SI 24979 (match_operand:HI 1 "register_operand" "") 24980 0) 24981 (match_dup 2)))] 24982 "" 24983 "operands[2] 24984 = force_reg (SImode, GEN_INT (65535)); ") 24985 24986 _Note:_ If the 'define_expand' is used to serve a standard binary or 24987unary arithmetic operation or a bit-field operation, then the last insn 24988it generates must not be a 'code_label', 'barrier' or 'note'. It must 24989be an 'insn', 'jump_insn' or 'call_insn'. If you don't need a real insn 24990at the end, emit an insn to copy the result of the operation into 24991itself. Such an insn will generate no code, but it can avoid problems 24992in the compiler. 24993 24994 24995File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 24996 2499716.16 Defining How to Split Instructions 24998======================================== 24999 25000There are two cases where you should specify how to split a pattern into 25001multiple insns. On machines that have instructions requiring delay 25002slots (*note Delay Slots::) or that have instructions whose output is 25003not available for multiple cycles (*note Processor pipeline 25004description::), the compiler phases that optimize these cases need to be 25005able to move insns into one-instruction delay slots. However, some 25006insns may generate more than one machine instruction. These insns 25007cannot be placed into a delay slot. 25008 25009 Often you can rewrite the single insn as a list of individual insns, 25010each corresponding to one machine instruction. The disadvantage of 25011doing so is that it will cause the compilation to be slower and require 25012more space. If the resulting insns are too complex, it may also 25013suppress some optimizations. The compiler splits the insn if there is a 25014reason to believe that it might improve instruction or delay slot 25015scheduling. 25016 25017 The insn combiner phase also splits putative insns. If three insns are 25018merged into one insn with a complex expression that cannot be matched by 25019some 'define_insn' pattern, the combiner phase attempts to split the 25020complex pattern into two insns that are recognized. Usually it can 25021break the complex pattern into two patterns by splitting out some 25022subexpression. However, in some other cases, such as performing an 25023addition of a large constant in two insns on a RISC machine, the way to 25024split the addition into two insns is machine-dependent. 25025 25026 The 'define_split' definition tells the compiler how to split a complex 25027insn into several simpler insns. It looks like this: 25028 25029 (define_split 25030 [INSN-PATTERN] 25031 "CONDITION" 25032 [NEW-INSN-PATTERN-1 25033 NEW-INSN-PATTERN-2 25034 ...] 25035 "PREPARATION-STATEMENTS") 25036 25037 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 25038final condition to be tested, as in a 'define_insn'. When an insn 25039matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 25040in the insn list with the insns given by NEW-INSN-PATTERN-1, 25041NEW-INSN-PATTERN-2, etc. 25042 25043 The PREPARATION-STATEMENTS are similar to those statements that are 25044specified for 'define_expand' (*note Expander Definitions::) and are 25045executed before the new RTL is generated to prepare for the generated 25046code or emit some insns whose pattern is not fixed. Unlike those in 25047'define_expand', however, these statements must not generate any new 25048pseudo-registers. Once reload has completed, they also must not 25049allocate any space in the stack frame. 25050 25051 Patterns are matched against INSN-PATTERN in two different 25052circumstances. If an insn needs to be split for delay slot scheduling 25053or insn scheduling, the insn is already known to be valid, which means 25054that it must have been matched by some 'define_insn' and, if 25055'reload_completed' is nonzero, is known to satisfy the constraints of 25056that 'define_insn'. In that case, the new insn patterns must also be 25057insns that are matched by some 'define_insn' and, if 'reload_completed' 25058is nonzero, must also satisfy the constraints of those definitions. 25059 25060 As an example of this usage of 'define_split', consider the following 25061example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to 25062'SImode' into a pair of shift insns: 25063 25064 (define_split 25065 [(set (match_operand:SI 0 "gen_reg_operand" "") 25066 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 25067 "" 25068 [(set (match_dup 0) 25069 (ashift:SI (match_dup 1) 25070 (const_int 16))) 25071 (set (match_dup 0) 25072 (ashiftrt:SI (match_dup 0) 25073 (const_int 16)))] 25074 " 25075 { operands[1] = gen_lowpart (SImode, operands[1]); }") 25076 25077 When the combiner phase tries to split an insn pattern, it is always 25078the case that the pattern is _not_ matched by any 'define_insn'. The 25079combiner pass first tries to split a single 'set' expression and then 25080the same 'set' expression inside a 'parallel', but followed by a 25081'clobber' of a pseudo-reg to use as a scratch register. In these cases, 25082the combiner expects exactly two new insn patterns to be generated. It 25083will verify that these patterns match some 'define_insn' definitions, so 25084you need not do this test in the 'define_split' (of course, there is no 25085point in writing a 'define_split' that will never produce insns that 25086match). 25087 25088 Here is an example of this use of 'define_split', taken from 25089'rs6000.md': 25090 25091 (define_split 25092 [(set (match_operand:SI 0 "gen_reg_operand" "") 25093 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 25094 (match_operand:SI 2 "non_add_cint_operand" "")))] 25095 "" 25096 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 25097 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 25098 " 25099 { 25100 int low = INTVAL (operands[2]) & 0xffff; 25101 int high = (unsigned) INTVAL (operands[2]) >> 16; 25102 25103 if (low & 0x8000) 25104 high++, low |= 0xffff0000; 25105 25106 operands[3] = GEN_INT (high << 16); 25107 operands[4] = GEN_INT (low); 25108 }") 25109 25110 Here the predicate 'non_add_cint_operand' matches any 'const_int' that 25111is _not_ a valid operand of a single add insn. The add with the smaller 25112displacement is written so that it can be substituted into the address 25113of a subsequent operation. 25114 25115 An example that uses a scratch register, from the same file, generates 25116an equality comparison of a register and a large constant: 25117 25118 (define_split 25119 [(set (match_operand:CC 0 "cc_reg_operand" "") 25120 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 25121 (match_operand:SI 2 "non_short_cint_operand" ""))) 25122 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 25123 "find_single_use (operands[0], insn, 0) 25124 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 25125 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 25126 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 25127 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 25128 " 25129 { 25130 /* Get the constant we are comparing against, C, and see what it 25131 looks like sign-extended to 16 bits. Then see what constant 25132 could be XOR'ed with C to get the sign-extended value. */ 25133 25134 int c = INTVAL (operands[2]); 25135 int sextc = (c << 16) >> 16; 25136 int xorv = c ^ sextc; 25137 25138 operands[4] = GEN_INT (xorv); 25139 operands[5] = GEN_INT (sextc); 25140 }") 25141 25142 To avoid confusion, don't write a single 'define_split' that accepts 25143some insns that match some 'define_insn' as well as some insns that 25144don't. Instead, write two separate 'define_split' definitions, one for 25145the insns that are valid and one for the insns that are not valid. 25146 25147 The splitter is allowed to split jump instructions into sequence of 25148jumps or create new jumps in while splitting non-jump instructions. As 25149the central flowgraph and branch prediction information needs to be 25150updated, several restriction apply. 25151 25152 Splitting of jump instruction into sequence that over by another jump 25153instruction is always valid, as compiler expect identical behavior of 25154new jump. When new sequence contains multiple jump instructions or new 25155labels, more assistance is needed. Splitter is required to create only 25156unconditional jumps, or simple conditional jump instructions. 25157Additionally it must attach a 'REG_BR_PROB' note to each conditional 25158jump. A global variable 'split_branch_probability' holds the 25159probability of the original branch in case it was a simple conditional 25160jump, -1 otherwise. To simplify recomputing of edge frequencies, the 25161new sequence is required to have only forward jumps to the newly created 25162labels. 25163 25164 For the common case where the pattern of a define_split exactly matches 25165the pattern of a define_insn, use 'define_insn_and_split'. It looks 25166like this: 25167 25168 (define_insn_and_split 25169 [INSN-PATTERN] 25170 "CONDITION" 25171 "OUTPUT-TEMPLATE" 25172 "SPLIT-CONDITION" 25173 [NEW-INSN-PATTERN-1 25174 NEW-INSN-PATTERN-2 25175 ...] 25176 "PREPARATION-STATEMENTS" 25177 [INSN-ATTRIBUTES]) 25178 25179 25180 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 25181as in 'define_insn'. The NEW-INSN-PATTERN vector and the 25182PREPARATION-STATEMENTS are used as in a 'define_split'. The 25183SPLIT-CONDITION is also used as in 'define_split', with the additional 25184behavior that if the condition starts with '&&', the condition used for 25185the split will be the constructed as a logical "and" of the split 25186condition with the insn condition. For example, from i386.md: 25187 25188 (define_insn_and_split "zero_extendhisi2_and" 25189 [(set (match_operand:SI 0 "register_operand" "=r") 25190 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 25191 (clobber (reg:CC 17))] 25192 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 25193 "#" 25194 "&& reload_completed" 25195 [(parallel [(set (match_dup 0) 25196 (and:SI (match_dup 0) (const_int 65535))) 25197 (clobber (reg:CC 17))])] 25198 "" 25199 [(set_attr "type" "alu1")]) 25200 25201 25202 In this case, the actual split condition will be 25203'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 25204 25205 The 'define_insn_and_split' construction provides exactly the same 25206functionality as two separate 'define_insn' and 'define_split' patterns. 25207It exists for compactness, and as a maintenance tool to prevent having 25208to ensure the two patterns' templates match. 25209 25210 25211File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 25212 2521316.17 Including Patterns in Machine Descriptions. 25214================================================= 25215 25216The 'include' pattern tells the compiler tools where to look for 25217patterns that are in files other than in the file '.md'. This is used 25218only at build time and there is no preprocessing allowed. 25219 25220 It looks like: 25221 25222 25223 (include 25224 PATHNAME) 25225 25226 For example: 25227 25228 25229 (include "filestuff") 25230 25231 25232 Where PATHNAME is a string that specifies the location of the file, 25233specifies the include file to be in 'gcc/config/target/filestuff'. The 25234directory 'gcc/config/target' is regarded as the default directory. 25235 25236 Machine descriptions may be split up into smaller more manageable 25237subsections and placed into subdirectories. 25238 25239 By specifying: 25240 25241 25242 (include "BOGUS/filestuff") 25243 25244 25245 the include file is specified to be in 25246'gcc/config/TARGET/BOGUS/filestuff'. 25247 25248 Specifying an absolute path for the include file such as; 25249 25250 (include "/u2/BOGUS/filestuff") 25251 25252 is permitted but is not encouraged. 25253 2525416.17.1 RTL Generation Tool Options for Directory Search 25255-------------------------------------------------------- 25256 25257The '-IDIR' option specifies directories to search for machine 25258descriptions. For example: 25259 25260 25261 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 25262 25263 25264 Add the directory DIR to the head of the list of directories to be 25265searched for header files. This can be used to override a system 25266machine definition file, substituting your own version, since these 25267directories are searched before the default machine description file 25268directories. If you use more than one '-I' option, the directories are 25269scanned in left-to-right order; the standard default directory come 25270after. 25271 25272 25273File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 25274 2527516.18 Machine-Specific Peephole Optimizers 25276========================================== 25277 25278In addition to instruction patterns the 'md' file may contain 25279definitions of machine-specific peephole optimizations. 25280 25281 The combiner does not notice certain peephole optimizations when the 25282data flow in the program does not suggest that it should try them. For 25283example, sometimes two consecutive insns related in purpose can be 25284combined even though the second one does not appear to use a register 25285computed in the first one. A machine-specific peephole optimizer can 25286detect such opportunities. 25287 25288 There are two forms of peephole definitions that may be used. The 25289original 'define_peephole' is run at assembly output time to match insns 25290and substitute assembly text. Use of 'define_peephole' is deprecated. 25291 25292 A newer 'define_peephole2' matches insns and substitutes new insns. 25293The 'peephole2' pass is run after register allocation but before 25294scheduling, which may result in much better code for targets that do 25295scheduling. 25296 25297* Menu: 25298 25299* define_peephole:: RTL to Text Peephole Optimizers 25300* define_peephole2:: RTL to RTL Peephole Optimizers 25301 25302 25303File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 25304 2530516.18.1 RTL to Text Peephole Optimizers 25306--------------------------------------- 25307 25308A definition looks like this: 25309 25310 (define_peephole 25311 [INSN-PATTERN-1 25312 INSN-PATTERN-2 25313 ...] 25314 "CONDITION" 25315 "TEMPLATE" 25316 "OPTIONAL-INSN-ATTRIBUTES") 25317 25318The last string operand may be omitted if you are not using any 25319machine-specific information in this machine description. If present, 25320it must obey the same rules as in a 'define_insn'. 25321 25322 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 25323consecutive insns. The optimization applies to a sequence of insns when 25324INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 25325and so on. 25326 25327 Each of the insns matched by a peephole must also match a 25328'define_insn'. Peepholes are checked only at the last stage just before 25329code generation, and only optionally. Therefore, any insn which would 25330match a peephole but no 'define_insn' will cause a crash in code 25331generation in an unoptimized compilation, or at various optimization 25332stages. 25333 25334 The operands of the insns are matched with 'match_operands', 25335'match_operator', and 'match_dup', as usual. What is not usual is that 25336the operand numbers apply to all the insn patterns in the definition. 25337So, you can check for identical operands in two insns by using 25338'match_operand' in one insn and 'match_dup' in the other. 25339 25340 The operand constraints used in 'match_operand' patterns do not have 25341any direct effect on the applicability of the peephole, but they will be 25342validated afterward, so make sure your constraints are general enough to 25343apply whenever the peephole matches. If the peephole matches but the 25344constraints are not satisfied, the compiler will crash. 25345 25346 It is safe to omit constraints in all the operands of the peephole; or 25347you can write constraints which serve as a double-check on the criteria 25348previously tested. 25349 25350 Once a sequence of insns matches the patterns, the CONDITION is 25351checked. This is a C expression which makes the final decision whether 25352to perform the optimization (we do so if the expression is nonzero). If 25353CONDITION is omitted (in other words, the string is empty) then the 25354optimization is applied to every sequence of insns that matches the 25355patterns. 25356 25357 The defined peephole optimizations are applied after register 25358allocation is complete. Therefore, the peephole definition can check 25359which operands have ended up in which kinds of registers, just by 25360looking at the operands. 25361 25362 The way to refer to the operands in CONDITION is to write 'operands[I]' 25363for operand number I (as matched by '(match_operand I ...)'). Use the 25364variable 'insn' to refer to the last of the insns being matched; use 25365'prev_active_insn' to find the preceding insns. 25366 25367 When optimizing computations with intermediate results, you can use 25368CONDITION to match only when the intermediate results are not used 25369elsewhere. Use the C expression 'dead_or_set_p (INSN, OP)', where INSN 25370is the insn in which you expect the value to be used for the last time 25371(from the value of 'insn', together with use of 'prev_nonnote_insn'), 25372and OP is the intermediate value (from 'operands[I]'). 25373 25374 Applying the optimization means replacing the sequence of insns with 25375one new insn. The TEMPLATE controls ultimate output of assembler code 25376for this combined insn. It works exactly like the template of a 25377'define_insn'. Operand numbers in this template are the same ones used 25378in matching the original sequence of insns. 25379 25380 The result of a defined peephole optimizer does not need to match any 25381of the insn patterns in the machine description; it does not even have 25382an opportunity to match them. The peephole optimizer definition itself 25383serves as the insn pattern to control how the insn is output. 25384 25385 Defined peephole optimizers are run as assembler code is being output, 25386so the insns they produce are never combined or rearranged in any way. 25387 25388 Here is an example, taken from the 68000 machine description: 25389 25390 (define_peephole 25391 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 25392 (set (match_operand:DF 0 "register_operand" "=f") 25393 (match_operand:DF 1 "register_operand" "ad"))] 25394 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 25395 { 25396 rtx xoperands[2]; 25397 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 25398 #ifdef MOTOROLA 25399 output_asm_insn ("move.l %1,(sp)", xoperands); 25400 output_asm_insn ("move.l %1,-(sp)", operands); 25401 return "fmove.d (sp)+,%0"; 25402 #else 25403 output_asm_insn ("movel %1,sp@", xoperands); 25404 output_asm_insn ("movel %1,sp@-", operands); 25405 return "fmoved sp@+,%0"; 25406 #endif 25407 }) 25408 25409 The effect of this optimization is to change 25410 25411 jbsr _foobar 25412 addql #4,sp 25413 movel d1,sp@- 25414 movel d0,sp@- 25415 fmoved sp@+,fp0 25416 25417into 25418 25419 jbsr _foobar 25420 movel d1,sp@ 25421 movel d0,sp@- 25422 fmoved sp@+,fp0 25423 25424 INSN-PATTERN-1 and so on look _almost_ like the second operand of 25425'define_insn'. There is one important difference: the second operand of 25426'define_insn' consists of one or more RTX's enclosed in square brackets. 25427Usually, there is only one: then the same action can be written as an 25428element of a 'define_peephole'. But when there are multiple actions in 25429a 'define_insn', they are implicitly enclosed in a 'parallel'. Then you 25430must explicitly write the 'parallel', and the square brackets within it, 25431in the 'define_peephole'. Thus, if an insn pattern looks like this, 25432 25433 (define_insn "divmodsi4" 25434 [(set (match_operand:SI 0 "general_operand" "=d") 25435 (div:SI (match_operand:SI 1 "general_operand" "0") 25436 (match_operand:SI 2 "general_operand" "dmsK"))) 25437 (set (match_operand:SI 3 "general_operand" "=d") 25438 (mod:SI (match_dup 1) (match_dup 2)))] 25439 "TARGET_68020" 25440 "divsl%.l %2,%3:%0") 25441 25442then the way to mention this insn in a peephole is as follows: 25443 25444 (define_peephole 25445 [... 25446 (parallel 25447 [(set (match_operand:SI 0 "general_operand" "=d") 25448 (div:SI (match_operand:SI 1 "general_operand" "0") 25449 (match_operand:SI 2 "general_operand" "dmsK"))) 25450 (set (match_operand:SI 3 "general_operand" "=d") 25451 (mod:SI (match_dup 1) (match_dup 2)))]) 25452 ...] 25453 ...) 25454 25455 25456File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 25457 2545816.18.2 RTL to RTL Peephole Optimizers 25459-------------------------------------- 25460 25461The 'define_peephole2' definition tells the compiler how to substitute 25462one sequence of instructions for another sequence, what additional 25463scratch registers may be needed and what their lifetimes must be. 25464 25465 (define_peephole2 25466 [INSN-PATTERN-1 25467 INSN-PATTERN-2 25468 ...] 25469 "CONDITION" 25470 [NEW-INSN-PATTERN-1 25471 NEW-INSN-PATTERN-2 25472 ...] 25473 "PREPARATION-STATEMENTS") 25474 25475 The definition is almost identical to 'define_split' (*note Insn 25476Splitting::) except that the pattern to match is not a single 25477instruction, but a sequence of instructions. 25478 25479 It is possible to request additional scratch registers for use in the 25480output template. If appropriate registers are not free, the pattern 25481will simply not match. 25482 25483 Scratch registers are requested with a 'match_scratch' pattern at the 25484top level of the input pattern. The allocated register (initially) will 25485be dead at the point requested within the original sequence. If the 25486scratch is used at more than a single point, a 'match_dup' pattern at 25487the top level of the input pattern marks the last position in the input 25488sequence at which the register must be available. 25489 25490 Here is an example from the IA-32 machine description: 25491 25492 (define_peephole2 25493 [(match_scratch:SI 2 "r") 25494 (parallel [(set (match_operand:SI 0 "register_operand" "") 25495 (match_operator:SI 3 "arith_or_logical_operator" 25496 [(match_dup 0) 25497 (match_operand:SI 1 "memory_operand" "")])) 25498 (clobber (reg:CC 17))])] 25499 "! optimize_size && ! TARGET_READ_MODIFY" 25500 [(set (match_dup 2) (match_dup 1)) 25501 (parallel [(set (match_dup 0) 25502 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 25503 (clobber (reg:CC 17))])] 25504 "") 25505 25506This pattern tries to split a load from its use in the hopes that we'll 25507be able to schedule around the memory load latency. It allocates a 25508single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to 25509be live only at the point just before the arithmetic. 25510 25511 A real example requiring extended scratch lifetimes is harder to come 25512by, so here's a silly made-up example: 25513 25514 (define_peephole2 25515 [(match_scratch:SI 4 "r") 25516 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 25517 (set (match_operand:SI 2 "" "") (match_dup 1)) 25518 (match_dup 4) 25519 (set (match_operand:SI 3 "" "") (match_dup 1))] 25520 "/* determine 1 does not overlap 0 and 2 */" 25521 [(set (match_dup 4) (match_dup 1)) 25522 (set (match_dup 0) (match_dup 4)) 25523 (set (match_dup 2) (match_dup 4)) 25524 (set (match_dup 3) (match_dup 4))] 25525 "") 25526 25527If we had not added the '(match_dup 4)' in the middle of the input 25528sequence, it might have been the case that the register we chose at the 25529beginning of the sequence is killed by the first or second 'set'. 25530 25531 25532File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 25533 2553416.19 Instruction Attributes 25535============================ 25536 25537In addition to describing the instruction supported by the target 25538machine, the 'md' file also defines a group of "attributes" and a set of 25539values for each. Every generated insn is assigned a value for each 25540attribute. One possible attribute would be the effect that the insn has 25541on the machine's condition code. This attribute can then be used by 25542'NOTICE_UPDATE_CC' to track the condition codes. 25543 25544* Menu: 25545 25546* Defining Attributes:: Specifying attributes and their values. 25547* Expressions:: Valid expressions for attribute values. 25548* Tagging Insns:: Assigning attribute values to insns. 25549* Attr Example:: An example of assigning attributes. 25550* Insn Lengths:: Computing the length of insns. 25551* Constant Attributes:: Defining attributes that are constant. 25552* Mnemonic Attribute:: Obtain the instruction mnemonic as attribute value. 25553* Delay Slots:: Defining delay slots required for a machine. 25554* Processor pipeline description:: Specifying information for insn scheduling. 25555 25556 25557File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 25558 2555916.19.1 Defining Attributes and their Values 25560-------------------------------------------- 25561 25562The 'define_attr' expression is used to define each attribute required 25563by the target machine. It looks like: 25564 25565 (define_attr NAME LIST-OF-VALUES DEFAULT) 25566 25567 NAME is a string specifying the name of the attribute being defined. 25568Some attributes are used in a special way by the rest of the compiler. 25569The 'enabled' attribute can be used to conditionally enable or disable 25570insn alternatives (*note Disable Insn Alternatives::). The 'predicable' 25571attribute, together with a suitable 'define_cond_exec' (*note 25572Conditional Execution::), can be used to automatically generate 25573conditional variants of instruction patterns. The 'mnemonic' attribute 25574can be used to check for the instruction mnemonic (*note Mnemonic 25575Attribute::). The compiler internally uses the names 'ce_enabled' and 25576'nonce_enabled', so they should not be used elsewhere as alternative 25577names. 25578 25579 LIST-OF-VALUES is either a string that specifies a comma-separated list 25580of values that can be assigned to the attribute, or a null string to 25581indicate that the attribute takes numeric values. 25582 25583 DEFAULT is an attribute expression that gives the value of this 25584attribute for insns that match patterns whose definition does not 25585include an explicit value for this attribute. *Note Attr Example::, for 25586more information on the handling of defaults. *Note Constant 25587Attributes::, for information on attributes that do not depend on any 25588particular insn. 25589 25590 For each defined attribute, a number of definitions are written to the 25591'insn-attr.h' file. For cases where an explicit set of values is 25592specified for an attribute, the following are defined: 25593 25594 * A '#define' is written for the symbol 'HAVE_ATTR_NAME'. 25595 25596 * An enumerated class is defined for 'attr_NAME' with elements of the 25597 form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value 25598 are first converted to uppercase. 25599 25600 * A function 'get_attr_NAME' is defined that is passed an insn and 25601 returns the attribute value for that insn. 25602 25603 For example, if the following is present in the 'md' file: 25604 25605 (define_attr "type" "branch,fp,load,store,arith" ...) 25606 25607the following lines will be written to the file 'insn-attr.h'. 25608 25609 #define HAVE_ATTR_type 1 25610 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 25611 TYPE_STORE, TYPE_ARITH}; 25612 extern enum attr_type get_attr_type (); 25613 25614 If the attribute takes numeric values, no 'enum' type will be defined 25615and the function to obtain the attribute's value will return 'int'. 25616 25617 There are attributes which are tied to a specific meaning. These 25618attributes are not free to use for other purposes: 25619 25620'length' 25621 The 'length' attribute is used to calculate the length of emitted 25622 code chunks. This is especially important when verifying branch 25623 distances. *Note Insn Lengths::. 25624 25625'enabled' 25626 The 'enabled' attribute can be defined to prevent certain 25627 alternatives of an insn definition from being used during code 25628 generation. *Note Disable Insn Alternatives::. 25629 25630'mnemonic' 25631 The 'mnemonic' attribute can be defined to implement instruction 25632 specific checks in e.g. the pipeline description. *Note Mnemonic 25633 Attribute::. 25634 25635 For each of these special attributes, the corresponding 25636'HAVE_ATTR_NAME' '#define' is also written when the attribute is not 25637defined; in that case, it is defined as '0'. 25638 25639 Another way of defining an attribute is to use: 25640 25641 (define_enum_attr "ATTR" "ENUM" DEFAULT) 25642 25643 This works in just the same way as 'define_attr', except that the list 25644of values is taken from a separate enumeration called ENUM (*note 25645define_enum::). This form allows you to use the same list of values for 25646several attributes without having to repeat the list each time. For 25647example: 25648 25649 (define_enum "processor" [ 25650 model_a 25651 model_b 25652 ... 25653 ]) 25654 (define_enum_attr "arch" "processor" 25655 (const (symbol_ref "target_arch"))) 25656 (define_enum_attr "tune" "processor" 25657 (const (symbol_ref "target_tune"))) 25658 25659 defines the same attributes as: 25660 25661 (define_attr "arch" "model_a,model_b,..." 25662 (const (symbol_ref "target_arch"))) 25663 (define_attr "tune" "model_a,model_b,..." 25664 (const (symbol_ref "target_tune"))) 25665 25666 but without duplicating the processor list. The second example defines 25667two separate C enums ('attr_arch' and 'attr_tune') whereas the first 25668defines a single C enum ('processor'). 25669 25670 25671File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 25672 2567316.19.2 Attribute Expressions 25674----------------------------- 25675 25676RTL expressions used to define attributes use the codes described above 25677plus a few specific to attribute definitions, to be discussed below. 25678Attribute value expressions must have one of the following forms: 25679 25680'(const_int I)' 25681 The integer I specifies the value of a numeric attribute. I must 25682 be non-negative. 25683 25684 The value of a numeric attribute can be specified either with a 25685 'const_int', or as an integer represented as a string in 25686 'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple 25687 arithmetic expressions, and 'set_attr' overrides on specific 25688 instructions (*note Tagging Insns::). 25689 25690'(const_string VALUE)' 25691 The string VALUE specifies a constant attribute value. If VALUE is 25692 specified as '"*"', it means that the default value of the 25693 attribute is to be used for the insn containing this expression. 25694 '"*"' obviously cannot be used in the DEFAULT expression of a 25695 'define_attr'. 25696 25697 If the attribute whose value is being specified is numeric, VALUE 25698 must be a string containing a non-negative integer (normally 25699 'const_int' would be used in this case). Otherwise, it must 25700 contain one of the valid values for the attribute. 25701 25702'(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 25703 TEST specifies an attribute test, whose format is defined below. 25704 The value of this expression is TRUE-VALUE if TEST is true, 25705 otherwise it is FALSE-VALUE. 25706 25707'(cond [TEST1 VALUE1 ...] DEFAULT)' 25708 The first operand of this expression is a vector containing an even 25709 number of expressions and consisting of pairs of TEST and VALUE 25710 expressions. The value of the 'cond' expression is that of the 25711 VALUE corresponding to the first true TEST expression. If none of 25712 the TEST expressions are true, the value of the 'cond' expression 25713 is that of the DEFAULT expression. 25714 25715 TEST expressions can have one of the following forms: 25716 25717'(const_int I)' 25718 This test is true if I is nonzero and false otherwise. 25719 25720'(not TEST)' 25721'(ior TEST1 TEST2)' 25722'(and TEST1 TEST2)' 25723 These tests are true if the indicated logical function is true. 25724 25725'(match_operand:M N PRED CONSTRAINTS)' 25726 This test is true if operand N of the insn whose attribute value is 25727 being determined has mode M (this part of the test is ignored if M 25728 is 'VOIDmode') and the function specified by the string PRED 25729 returns a nonzero value when passed operand N and mode M (this part 25730 of the test is ignored if PRED is the null string). 25731 25732 The CONSTRAINTS operand is ignored and should be the null string. 25733 25734'(match_test C-EXPR)' 25735 The test is true if C expression C-EXPR is true. In non-constant 25736 attributes, C-EXPR has access to the following variables: 25737 25738 INSN 25739 The rtl instruction under test. 25740 WHICH_ALTERNATIVE 25741 The 'define_insn' alternative that INSN matches. *Note Output 25742 Statement::. 25743 OPERANDS 25744 An array of INSN's rtl operands. 25745 25746 C-EXPR behaves like the condition in a C 'if' statement, so there 25747 is no need to explicitly convert the expression into a boolean 0 or 25748 1 value. For example, the following two tests are equivalent: 25749 25750 (match_test "x & 2") 25751 (match_test "(x & 2) != 0") 25752 25753'(le ARITH1 ARITH2)' 25754'(leu ARITH1 ARITH2)' 25755'(lt ARITH1 ARITH2)' 25756'(ltu ARITH1 ARITH2)' 25757'(gt ARITH1 ARITH2)' 25758'(gtu ARITH1 ARITH2)' 25759'(ge ARITH1 ARITH2)' 25760'(geu ARITH1 ARITH2)' 25761'(ne ARITH1 ARITH2)' 25762'(eq ARITH1 ARITH2)' 25763 These tests are true if the indicated comparison of the two 25764 arithmetic expressions is true. Arithmetic expressions are formed 25765 with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and', 25766 'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt' 25767 expressions. 25768 25769 'const_int' and 'symbol_ref' are always valid terms (*note Insn 25770 Lengths::,for additional forms). 'symbol_ref' is a string denoting 25771 a C expression that yields an 'int' when evaluated by the 25772 'get_attr_...' routine. It should normally be a global variable. 25773 25774'(eq_attr NAME VALUE)' 25775 NAME is a string specifying the name of an attribute. 25776 25777 VALUE is a string that is either a valid value for attribute NAME, 25778 a comma-separated list of values, or '!' followed by a value or 25779 list. If VALUE does not begin with a '!', this test is true if the 25780 value of the NAME attribute of the current insn is in the list 25781 specified by VALUE. If VALUE begins with a '!', this test is true 25782 if the attribute's value is _not_ in the specified list. 25783 25784 For example, 25785 25786 (eq_attr "type" "load,store") 25787 25788 is equivalent to 25789 25790 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 25791 25792 If NAME specifies an attribute of 'alternative', it refers to the 25793 value of the compiler variable 'which_alternative' (*note Output 25794 Statement::) and the values must be small integers. For example, 25795 25796 (eq_attr "alternative" "2,3") 25797 25798 is equivalent to 25799 25800 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 25801 (eq (symbol_ref "which_alternative") (const_int 3))) 25802 25803 Note that, for most attributes, an 'eq_attr' test is simplified in 25804 cases where the value of the attribute being tested is known for 25805 all insns matching a particular pattern. This is by far the most 25806 common case. 25807 25808'(attr_flag NAME)' 25809 The value of an 'attr_flag' expression is true if the flag 25810 specified by NAME is true for the 'insn' currently being scheduled. 25811 25812 NAME is a string specifying one of a fixed set of flags to test. 25813 Test the flags 'forward' and 'backward' to determine the direction 25814 of a conditional branch. 25815 25816 This example describes a conditional branch delay slot which can be 25817 nullified for forward branches that are taken (annul-true) or for 25818 backward branches which are not taken (annul-false). 25819 25820 (define_delay (eq_attr "type" "cbranch") 25821 [(eq_attr "in_branch_delay" "true") 25822 (and (eq_attr "in_branch_delay" "true") 25823 (attr_flag "forward")) 25824 (and (eq_attr "in_branch_delay" "true") 25825 (attr_flag "backward"))]) 25826 25827 The 'forward' and 'backward' flags are false if the current 'insn' 25828 being scheduled is not a conditional branch. 25829 25830 'attr_flag' is only used during delay slot scheduling and has no 25831 meaning to other passes of the compiler. 25832 25833'(attr NAME)' 25834 The value of another attribute is returned. This is most useful 25835 for numeric attributes, as 'eq_attr' and 'attr_flag' produce more 25836 efficient code for non-numeric attributes. 25837 25838 25839File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 25840 2584116.19.3 Assigning Attribute Values to Insns 25842------------------------------------------- 25843 25844The value assigned to an attribute of an insn is primarily determined by 25845which pattern is matched by that insn (or which 'define_peephole' 25846generated it). Every 'define_insn' and 'define_peephole' can have an 25847optional last argument to specify the values of attributes for matching 25848insns. The value of any attribute not specified in a particular insn is 25849set to the default value for that attribute, as specified in its 25850'define_attr'. Extensive use of default values for attributes permits 25851the specification of the values for only one or two attributes in the 25852definition of most insn patterns, as seen in the example in the next 25853section. 25854 25855 The optional last argument of 'define_insn' and 'define_peephole' is a 25856vector of expressions, each of which defines the value for a single 25857attribute. The most general way of assigning an attribute's value is to 25858use a 'set' expression whose first operand is an 'attr' expression 25859giving the name of the attribute being set. The second operand of the 25860'set' is an attribute expression (*note Expressions::) giving the value 25861of the attribute. 25862 25863 When the attribute value depends on the 'alternative' attribute (i.e., 25864which is the applicable alternative in the constraint of the insn), the 25865'set_attr_alternative' expression can be used. It allows the 25866specification of a vector of attribute expressions, one for each 25867alternative. 25868 25869 When the generality of arbitrary attribute expressions is not required, 25870the simpler 'set_attr' expression can be used, which allows specifying a 25871string giving either a single attribute value or a list of attribute 25872values, one for each alternative. 25873 25874 The form of each of the above specifications is shown below. In each 25875case, NAME is a string specifying the attribute to be set. 25876 25877'(set_attr NAME VALUE-STRING)' 25878 VALUE-STRING is either a string giving the desired attribute value, 25879 or a string containing a comma-separated list giving the values for 25880 succeeding alternatives. The number of elements must match the 25881 number of alternatives in the constraint of the insn pattern. 25882 25883 Note that it may be useful to specify '*' for some alternative, in 25884 which case the attribute will assume its default value for insns 25885 matching that alternative. 25886 25887'(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 25888 Depending on the alternative of the insn, the value will be one of 25889 the specified values. This is a shorthand for using a 'cond' with 25890 tests on the 'alternative' attribute. 25891 25892'(set (attr NAME) VALUE)' 25893 The first operand of this 'set' must be the special RTL expression 25894 'attr', whose sole operand is a string giving the name of the 25895 attribute being set. VALUE is the value of the attribute. 25896 25897 The following shows three different ways of representing the same 25898attribute value specification: 25899 25900 (set_attr "type" "load,store,arith") 25901 25902 (set_attr_alternative "type" 25903 [(const_string "load") (const_string "store") 25904 (const_string "arith")]) 25905 25906 (set (attr "type") 25907 (cond [(eq_attr "alternative" "1") (const_string "load") 25908 (eq_attr "alternative" "2") (const_string "store")] 25909 (const_string "arith"))) 25910 25911 The 'define_asm_attributes' expression provides a mechanism to specify 25912the attributes assigned to insns produced from an 'asm' statement. It 25913has the form: 25914 25915 (define_asm_attributes [ATTR-SETS]) 25916 25917where ATTR-SETS is specified the same as for both the 'define_insn' and 25918the 'define_peephole' expressions. 25919 25920 These values will typically be the "worst case" attribute values. For 25921example, they might indicate that the condition code will be clobbered. 25922 25923 A specification for a 'length' attribute is handled specially. The way 25924to compute the length of an 'asm' insn is to multiply the length 25925specified in the expression 'define_asm_attributes' by the number of 25926machine instructions specified in the 'asm' statement, determined by 25927counting the number of semicolons and newlines in the string. 25928Therefore, the value of the 'length' attribute specified in a 25929'define_asm_attributes' should be the maximum possible length of a 25930single machine instruction. 25931 25932 25933File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 25934 2593516.19.4 Example of Attribute Specifications 25936------------------------------------------- 25937 25938The judicious use of defaulting is important in the efficient use of 25939insn attributes. Typically, insns are divided into "types" and an 25940attribute, customarily called 'type', is used to represent this value. 25941This attribute is normally used only to define the default value for 25942other attributes. An example will clarify this usage. 25943 25944 Assume we have a RISC machine with a condition code and in which only 25945full-word operations are performed in registers. Let us assume that we 25946can divide all insns into loads, stores, (integer) arithmetic 25947operations, floating point operations, and branches. 25948 25949 Here we will concern ourselves with determining the effect of an insn 25950on the condition code and will limit ourselves to the following possible 25951effects: The condition code can be set unpredictably (clobbered), not be 25952changed, be set to agree with the results of the operation, or only 25953changed if the item previously set into the condition code has been 25954modified. 25955 25956 Here is part of a sample 'md' file for such a machine: 25957 25958 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 25959 25960 (define_attr "cc" "clobber,unchanged,set,change0" 25961 (cond [(eq_attr "type" "load") 25962 (const_string "change0") 25963 (eq_attr "type" "store,branch") 25964 (const_string "unchanged") 25965 (eq_attr "type" "arith") 25966 (if_then_else (match_operand:SI 0 "" "") 25967 (const_string "set") 25968 (const_string "clobber"))] 25969 (const_string "clobber"))) 25970 25971 (define_insn "" 25972 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 25973 (match_operand:SI 1 "general_operand" "r,m,r"))] 25974 "" 25975 "@ 25976 move %0,%1 25977 load %0,%1 25978 store %0,%1" 25979 [(set_attr "type" "arith,load,store")]) 25980 25981 Note that we assume in the above example that arithmetic operations 25982performed on quantities smaller than a machine word clobber the 25983condition code since they will set the condition code to a value 25984corresponding to the full-word result. 25985 25986 25987File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 25988 2598916.19.5 Computing the Length of an Insn 25990--------------------------------------- 25991 25992For many machines, multiple types of branch instructions are provided, 25993each for different length branch displacements. In most cases, the 25994assembler will choose the correct instruction to use. However, when the 25995assembler cannot do so, GCC can when a special attribute, the 'length' 25996attribute, is defined. This attribute must be defined to have numeric 25997values by specifying a null string in its 'define_attr'. 25998 25999 In the case of the 'length' attribute, two additional forms of 26000arithmetic terms are allowed in test expressions: 26001 26002'(match_dup N)' 26003 This refers to the address of operand N of the current insn, which 26004 must be a 'label_ref'. 26005 26006'(pc)' 26007 For non-branch instructions and backward branch instructions, this 26008 refers to the address of the current insn. But for forward branch 26009 instructions, this refers to the address of the next insn, because 26010 the length of the current insn is to be computed. 26011 26012 For normal insns, the length will be determined by value of the 26013'length' attribute. In the case of 'addr_vec' and 'addr_diff_vec' insn 26014patterns, the length is computed as the number of vectors multiplied by 26015the size of each vector. 26016 26017 Lengths are measured in addressable storage units (bytes). 26018 26019 Note that it is possible to call functions via the 'symbol_ref' 26020mechanism to compute the length of an insn. However, if you use this 26021mechanism you must provide dummy clauses to express the maximum length 26022without using the function call. You can an example of this in the 'pa' 26023machine description for the 'call_symref' pattern. 26024 26025 The following macros can be used to refine the length computation: 26026 26027'ADJUST_INSN_LENGTH (INSN, LENGTH)' 26028 If defined, modifies the length assigned to instruction INSN as a 26029 function of the context in which it is used. LENGTH is an lvalue 26030 that contains the initially computed length of the insn and should 26031 be updated with the correct length of the insn. 26032 26033 This macro will normally not be required. A case in which it is 26034 required is the ROMP. On this machine, the size of an 'addr_vec' 26035 insn must be increased by two to compensate for the fact that 26036 alignment may be required. 26037 26038 The routine that returns 'get_attr_length' (the value of the 'length' 26039attribute) can be used by the output routine to determine the form of 26040the branch instruction to be written, as the example below illustrates. 26041 26042 As an example of the specification of variable-length branches, 26043consider the IBM 360. If we adopt the convention that a register will 26044be set to the starting address of a function, we can jump to labels 26045within 4k of the start using a four-byte instruction. Otherwise, we 26046need a six-byte sequence to load the address from memory and then branch 26047to it. 26048 26049 On such a machine, a pattern for a branch instruction might be 26050specified as follows: 26051 26052 (define_insn "jump" 26053 [(set (pc) 26054 (label_ref (match_operand 0 "" "")))] 26055 "" 26056 { 26057 return (get_attr_length (insn) == 4 26058 ? "b %l0" : "l r15,=a(%l0); br r15"); 26059 } 26060 [(set (attr "length") 26061 (if_then_else (lt (match_dup 0) (const_int 4096)) 26062 (const_int 4) 26063 (const_int 6)))]) 26064 26065 26066File: gccint.info, Node: Constant Attributes, Next: Mnemonic Attribute, Prev: Insn Lengths, Up: Insn Attributes 26067 2606816.19.6 Constant Attributes 26069--------------------------- 26070 26071A special form of 'define_attr', where the expression for the default 26072value is a 'const' expression, indicates an attribute that is constant 26073for a given run of the compiler. Constant attributes may be used to 26074specify which variety of processor is used. For example, 26075 26076 (define_attr "cpu" "m88100,m88110,m88000" 26077 (const 26078 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 26079 (symbol_ref "TARGET_88110") (const_string "m88110")] 26080 (const_string "m88000")))) 26081 26082 (define_attr "memory" "fast,slow" 26083 (const 26084 (if_then_else (symbol_ref "TARGET_FAST_MEM") 26085 (const_string "fast") 26086 (const_string "slow")))) 26087 26088 The routine generated for constant attributes has no parameters as it 26089does not depend on any particular insn. RTL expressions used to define 26090the value of a constant attribute may use the 'symbol_ref' form, but may 26091not use either the 'match_operand' form or 'eq_attr' forms involving 26092insn attributes. 26093 26094 26095File: gccint.info, Node: Mnemonic Attribute, Next: Delay Slots, Prev: Constant Attributes, Up: Insn Attributes 26096 2609716.19.7 Mnemonic Attribute 26098-------------------------- 26099 26100The 'mnemonic' attribute is a string type attribute holding the 26101instruction mnemonic for an insn alternative. The attribute values will 26102automatically be generated by the machine description parser if there is 26103an attribute definition in the md file: 26104 26105 (define_attr "mnemonic" "unknown" (const_string "unknown")) 26106 26107 The default value can be freely chosen as long as it does not collide 26108with any of the instruction mnemonics. This value will be used whenever 26109the machine description parser is not able to determine the mnemonic 26110string. This might be the case for output templates containing more 26111than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'. 26112 26113 The 'mnemonic' attribute set is not generated automatically if the 26114instruction string is generated via C code. 26115 26116 An existing 'mnemonic' attribute set in an insn definition will not be 26117overriden by the md file parser. That way it is possible to manually 26118set the instruction mnemonics for the cases where the md file parser 26119fails to determine it automatically. 26120 26121 The 'mnemonic' attribute is useful for dealing with instruction 26122specific properties in the pipeline description without defining 26123additional insn attributes. 26124 26125 (define_attr "ooo_expanded" "" 26126 (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr") 26127 (const_int 1)] 26128 (const_int 0))) 26129 26130 26131File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Mnemonic Attribute, Up: Insn Attributes 26132 2613316.19.8 Delay Slot Scheduling 26134----------------------------- 26135 26136The insn attribute mechanism can be used to specify the requirements for 26137delay slots, if any, on a target machine. An instruction is said to 26138require a "delay slot" if some instructions that are physically after 26139the instruction are executed as if they were located before it. Classic 26140examples are branch and call instructions, which often execute the 26141following instruction before the branch or call is performed. 26142 26143 On some machines, conditional branch instructions can optionally 26144"annul" instructions in the delay slot. This means that the instruction 26145will not be executed for certain branch outcomes. Both instructions 26146that annul if the branch is true and instructions that annul if the 26147branch is false are supported. 26148 26149 Delay slot scheduling differs from instruction scheduling in that 26150determining whether an instruction needs a delay slot is dependent only 26151on the type of instruction being generated, not on data flow between the 26152instructions. See the next section for a discussion of data-dependent 26153instruction scheduling. 26154 26155 The requirement of an insn needing one or more delay slots is indicated 26156via the 'define_delay' expression. It has the following form: 26157 26158 (define_delay TEST 26159 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 26160 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 26161 ...]) 26162 26163 TEST is an attribute test that indicates whether this 'define_delay' 26164applies to a particular insn. If so, the number of required delay slots 26165is determined by the length of the vector specified as the second 26166argument. An insn placed in delay slot N must satisfy attribute test 26167DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 26168may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 26169specifies which insns in the delay slot may be annulled if the branch is 26170false. If annulling is not supported for that delay slot, '(nil)' 26171should be coded. 26172 26173 For example, in the common case where branch and call insns require a 26174single delay slot, which may contain any insn other than a branch or 26175call, the following would be placed in the 'md' file: 26176 26177 (define_delay (eq_attr "type" "branch,call") 26178 [(eq_attr "type" "!branch,call") (nil) (nil)]) 26179 26180 Multiple 'define_delay' expressions may be specified. In this case, 26181each such expression specifies different delay slot requirements and 26182there must be no insn for which tests in two 'define_delay' expressions 26183are both true. 26184 26185 For example, if we have a machine that requires one delay slot for 26186branches but two for calls, no delay slot can contain a branch or call 26187insn, and any valid insn in the delay slot for the branch can be 26188annulled if the branch is true, we might represent this as follows: 26189 26190 (define_delay (eq_attr "type" "branch") 26191 [(eq_attr "type" "!branch,call") 26192 (eq_attr "type" "!branch,call") 26193 (nil)]) 26194 26195 (define_delay (eq_attr "type" "call") 26196 [(eq_attr "type" "!branch,call") (nil) (nil) 26197 (eq_attr "type" "!branch,call") (nil) (nil)]) 26198 26199 26200File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 26201 2620216.19.9 Specifying processor pipeline description 26203------------------------------------------------- 26204 26205To achieve better performance, most modern processors (super-pipelined, 26206superscalar RISC, and VLIW processors) have many "functional units" on 26207which several instructions can be executed simultaneously. An 26208instruction starts execution if its issue conditions are satisfied. If 26209not, the instruction is stalled until its conditions are satisfied. 26210Such "interlock (pipeline) delay" causes interruption of the fetching of 26211successor instructions (or demands nop instructions, e.g. for some MIPS 26212processors). 26213 26214 There are two major kinds of interlock delays in modern processors. 26215The first one is a data dependence delay determining "instruction 26216latency time". The instruction execution is not started until all 26217source data have been evaluated by prior instructions (there are more 26218complex cases when the instruction execution starts even when the data 26219are not available but will be ready in given time after the instruction 26220execution start). Taking the data dependence delays into account is 26221simple. The data dependence (true, output, and anti-dependence) delay 26222between two instructions is given by a constant. In most cases this 26223approach is adequate. The second kind of interlock delays is a 26224reservation delay. The reservation delay means that two instructions 26225under execution will be in need of shared processors resources, i.e. 26226buses, internal registers, and/or functional units, which are reserved 26227for some time. Taking this kind of delay into account is complex 26228especially for modern RISC processors. 26229 26230 The task of exploiting more processor parallelism is solved by an 26231instruction scheduler. For a better solution to this problem, the 26232instruction scheduler has to have an adequate description of the 26233processor parallelism (or "pipeline description"). GCC machine 26234descriptions describe processor parallelism and functional unit 26235reservations for groups of instructions with the aid of "regular 26236expressions". 26237 26238 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 26239figure out the possibility of the instruction issue by the processor on 26240a given simulated processor cycle. The pipeline hazard recognizer is 26241automatically generated from the processor pipeline description. The 26242pipeline hazard recognizer generated from the machine description is 26243based on a deterministic finite state automaton (DFA): the instruction 26244issue is possible if there is a transition from one automaton state to 26245another one. This algorithm is very fast, and furthermore, its speed is 26246not dependent on processor complexity(1). 26247 26248 The rest of this section describes the directives that constitute an 26249automaton-based processor pipeline description. The order of these 26250constructions within the machine description file is not important. 26251 26252 The following optional construction describes names of automata 26253generated and used for the pipeline hazards recognition. Sometimes the 26254generated finite state automaton used by the pipeline hazard recognizer 26255is large. If we use more than one automaton and bind functional units 26256to the automata, the total size of the automata is usually less than the 26257size of the single automaton. If there is no one such construction, 26258only one finite state automaton is generated. 26259 26260 (define_automaton AUTOMATA-NAMES) 26261 26262 AUTOMATA-NAMES is a string giving names of the automata. The names are 26263separated by commas. All the automata should have unique names. The 26264automaton name is used in the constructions 'define_cpu_unit' and 26265'define_query_cpu_unit'. 26266 26267 Each processor functional unit used in the description of instruction 26268reservations should be described by the following construction. 26269 26270 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 26271 26272 UNIT-NAMES is a string giving the names of the functional units 26273separated by commas. Don't use name 'nothing', it is reserved for other 26274goals. 26275 26276 AUTOMATON-NAME is a string giving the name of the automaton with which 26277the unit is bound. The automaton should be described in construction 26278'define_automaton'. You should give "automaton-name", if there is a 26279defined automaton. 26280 26281 The assignment of units to automata are constrained by the uses of the 26282units in insn reservations. The most important constraint is: if a unit 26283reservation is present on a particular cycle of an alternative for an 26284insn reservation, then some unit from the same automaton must be present 26285on the same cycle for the other alternatives of the insn reservation. 26286The rest of the constraints are mentioned in the description of the 26287subsequent constructions. 26288 26289 The following construction describes CPU functional units analogously 26290to 'define_cpu_unit'. The reservation of such units can be queried for 26291an automaton state. The instruction scheduler never queries reservation 26292of functional units for given automaton state. So as a rule, you don't 26293need this construction. This construction could be used for future code 26294generation goals (e.g. to generate VLIW insn templates). 26295 26296 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 26297 26298 UNIT-NAMES is a string giving names of the functional units separated 26299by commas. 26300 26301 AUTOMATON-NAME is a string giving the name of the automaton with which 26302the unit is bound. 26303 26304 The following construction is the major one to describe pipeline 26305characteristics of an instruction. 26306 26307 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 26308 CONDITION REGEXP) 26309 26310 DEFAULT_LATENCY is a number giving latency time of the instruction. 26311There is an important difference between the old description and the 26312automaton based pipeline description. The latency time is used for all 26313dependencies when we use the old description. In the automaton based 26314pipeline description, the given latency time is only used for true 26315dependencies. The cost of anti-dependencies is always zero and the cost 26316of output dependencies is the difference between latency times of the 26317producing and consuming insns (if the difference is negative, the cost 26318is considered to be zero). You can always change the default costs for 26319any description by using the target hook 'TARGET_SCHED_ADJUST_COST' 26320(*note Scheduling::). 26321 26322 INSN-NAME is a string giving the internal name of the insn. The 26323internal names are used in constructions 'define_bypass' and in the 26324automaton description file generated for debugging. The internal name 26325has nothing in common with the names in 'define_insn'. It is a good 26326practice to use insn classes described in the processor manual. 26327 26328 CONDITION defines what RTL insns are described by this construction. 26329You should remember that you will be in trouble if CONDITION for two or 26330more different 'define_insn_reservation' constructions is TRUE for an 26331insn. In this case what reservation will be used for the insn is not 26332defined. Such cases are not checked during generation of the pipeline 26333hazards recognizer because in general recognizing that two conditions 26334may have the same value is quite difficult (especially if the conditions 26335contain 'symbol_ref'). It is also not checked during the pipeline 26336hazard recognizer work because it would slow down the recognizer 26337considerably. 26338 26339 REGEXP is a string describing the reservation of the cpu's functional 26340units by the instruction. The reservations are described by a regular 26341expression according to the following syntax: 26342 26343 regexp = regexp "," oneof 26344 | oneof 26345 26346 oneof = oneof "|" allof 26347 | allof 26348 26349 allof = allof "+" repeat 26350 | repeat 26351 26352 repeat = element "*" number 26353 | element 26354 26355 element = cpu_function_unit_name 26356 | reservation_name 26357 | result_name 26358 | "nothing" 26359 | "(" regexp ")" 26360 26361 * ',' is used for describing the start of the next cycle in the 26362 reservation. 26363 26364 * '|' is used for describing a reservation described by the first 26365 regular expression *or* a reservation described by the second 26366 regular expression *or* etc. 26367 26368 * '+' is used for describing a reservation described by the first 26369 regular expression *and* a reservation described by the second 26370 regular expression *and* etc. 26371 26372 * '*' is used for convenience and simply means a sequence in which 26373 the regular expression are repeated NUMBER times with cycle 26374 advancing (see ','). 26375 26376 * 'cpu_function_unit_name' denotes reservation of the named 26377 functional unit. 26378 26379 * 'reservation_name' -- see description of construction 26380 'define_reservation'. 26381 26382 * 'nothing' denotes no unit reservations. 26383 26384 Sometimes unit reservations for different insns contain common parts. 26385In such case, you can simplify the pipeline description by describing 26386the common part by the following construction 26387 26388 (define_reservation RESERVATION-NAME REGEXP) 26389 26390 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 26391names and reservation names are in the same name space. So the 26392reservation names should be different from the functional unit names and 26393can not be the reserved name 'nothing'. 26394 26395 The following construction is used to describe exceptions in the 26396latency time for given instruction pair. This is so called bypasses. 26397 26398 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 26399 [GUARD]) 26400 26401 NUMBER defines when the result generated by the instructions given in 26402string OUT_INSN_NAMES will be ready for the instructions given in string 26403IN_INSN_NAMES. Each of these strings is a comma-separated list of 26404filename-style globs and they refer to the names of 26405'define_insn_reservation's. For example: 26406 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*") 26407 defines a bypass between instructions that start with 'cpu1_load_' or 26408'cpu1_store_' and those that start with 'cpu1_load_'. 26409 26410 GUARD is an optional string giving the name of a C function which 26411defines an additional guard for the bypass. The function will get the 26412two insns as parameters. If the function returns zero the bypass will 26413be ignored for this case. The additional guard is necessary to 26414recognize complicated bypasses, e.g. when the consumer is only an 26415address of insn 'store' (not a stored value). 26416 26417 If there are more one bypass with the same output and input insns, the 26418chosen bypass is the first bypass with a guard in description whose 26419guard function returns nonzero. If there is no such bypass, then bypass 26420without the guard function is chosen. 26421 26422 The following five constructions are usually used to describe VLIW 26423processors, or more precisely, to describe a placement of small 26424instructions into VLIW instruction slots. They can be used for RISC 26425processors, too. 26426 26427 (exclusion_set UNIT-NAMES UNIT-NAMES) 26428 (presence_set UNIT-NAMES PATTERNS) 26429 (final_presence_set UNIT-NAMES PATTERNS) 26430 (absence_set UNIT-NAMES PATTERNS) 26431 (final_absence_set UNIT-NAMES PATTERNS) 26432 26433 UNIT-NAMES is a string giving names of functional units separated by 26434commas. 26435 26436 PATTERNS is a string giving patterns of functional units separated by 26437comma. Currently pattern is one unit or units separated by 26438white-spaces. 26439 26440 The first construction ('exclusion_set') means that each functional 26441unit in the first string can not be reserved simultaneously with a unit 26442whose name is in the second string and vice versa. For example, the 26443construction is useful for describing processors (e.g. some SPARC 26444processors) with a fully pipelined floating point functional unit which 26445can execute simultaneously only single floating point insns or only 26446double floating point insns. 26447 26448 The second construction ('presence_set') means that each functional 26449unit in the first string can not be reserved unless at least one of 26450pattern of units whose names are in the second string is reserved. This 26451is an asymmetric relation. For example, it is useful for description 26452that VLIW 'slot1' is reserved after 'slot0' reservation. We could 26453describe it by the following construction 26454 26455 (presence_set "slot1" "slot0") 26456 26457 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation. 26458In this case we could write 26459 26460 (presence_set "slot1" "slot0 b0") 26461 26462 The third construction ('final_presence_set') is analogous to 26463'presence_set'. The difference between them is when checking is done. 26464When an instruction is issued in given automaton state reflecting all 26465current and planned unit reservations, the automaton state is changed. 26466The first state is a source state, the second one is a result state. 26467Checking for 'presence_set' is done on the source state reservation, 26468checking for 'final_presence_set' is done on the result reservation. 26469This construction is useful to describe a reservation which is actually 26470two subsequent reservations. For example, if we use 26471 26472 (presence_set "slot1" "slot0") 26473 26474 the following insn will be never issued (because 'slot1' requires 26475'slot0' which is absent in the source state). 26476 26477 (define_reservation "insn_and_nop" "slot0 + slot1") 26478 26479 but it can be issued if we use analogous 'final_presence_set'. 26480 26481 The forth construction ('absence_set') means that each functional unit 26482in the first string can be reserved only if each pattern of units whose 26483names are in the second string is not reserved. This is an asymmetric 26484relation (actually 'exclusion_set' is analogous to this one but it is 26485symmetric). For example it might be useful in a VLIW description to say 26486that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have 26487been reserved. This can be described as: 26488 26489 (absence_set "slot0" "slot1, slot2") 26490 26491 Or 'slot2' can not be reserved if 'slot0' and unit 'b0' are reserved or 26492'slot1' and unit 'b1' are reserved. In this case we could write 26493 26494 (absence_set "slot2" "slot0 b0, slot1 b1") 26495 26496 All functional units mentioned in a set should belong to the same 26497automaton. 26498 26499 The last construction ('final_absence_set') is analogous to 26500'absence_set' but checking is done on the result (state) reservation. 26501See comments for 'final_presence_set'. 26502 26503 You can control the generator of the pipeline hazard recognizer with 26504the following construction. 26505 26506 (automata_option OPTIONS) 26507 26508 OPTIONS is a string giving options which affect the generated code. 26509Currently there are the following options: 26510 26511 * "no-minimization" makes no minimization of the automaton. This is 26512 only worth to do when we are debugging the description and need to 26513 look more accurately at reservations of states. 26514 26515 * "time" means printing time statistics about the generation of 26516 automata. 26517 26518 * "stats" means printing statistics about the generated automata such 26519 as the number of DFA states, NDFA states and arcs. 26520 26521 * "v" means a generation of the file describing the result automata. 26522 The file has suffix '.dfa' and can be used for the description 26523 verification and debugging. 26524 26525 * "w" means a generation of warning instead of error for non-critical 26526 errors. 26527 26528 * "no-comb-vect" prevents the automaton generator from generating two 26529 data structures and comparing them for space efficiency. Using a 26530 comb vector to represent transitions may be better, but it can be 26531 very expensive to construct. This option is useful if the build 26532 process spends an unacceptably long time in genautomata. 26533 26534 * "ndfa" makes nondeterministic finite state automata. This affects 26535 the treatment of operator '|' in the regular expressions. The 26536 usual treatment of the operator is to try the first alternative 26537 and, if the reservation is not possible, the second alternative. 26538 The nondeterministic treatment means trying all alternatives, some 26539 of them may be rejected by reservations in the subsequent insns. 26540 26541 * "collapse-ndfa" modifies the behaviour of the generator when 26542 producing an automaton. An additional state transition to collapse 26543 a nondeterministic NDFA state to a deterministic DFA state is 26544 generated. It can be triggered by passing 'const0_rtx' to 26545 state_transition. In such an automaton, cycle advance transitions 26546 are available only for these collapsed states. This option is 26547 useful for ports that want to use the 'ndfa' option, but also want 26548 to use 'define_query_cpu_unit' to assign units to insns issued in a 26549 cycle. 26550 26551 * "progress" means output of a progress bar showing how many states 26552 were generated so far for automaton being processed. This is 26553 useful during debugging a DFA description. If you see too many 26554 generated states, you could interrupt the generator of the pipeline 26555 hazard recognizer and try to figure out a reason for generation of 26556 the huge automaton. 26557 26558 As an example, consider a superscalar RISC machine which can issue 26559three insns (two integer insns and one floating point insn) on the cycle 26560but can finish only two insns. To describe this, we define the 26561following functional units. 26562 26563 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 26564 (define_cpu_unit "port0, port1") 26565 26566 All simple integer insns can be executed in any integer pipeline and 26567their result is ready in two cycles. The simple integer insns are 26568issued into the first pipeline unless it is reserved, otherwise they are 26569issued into the second pipeline. Integer division and multiplication 26570insns can be executed only in the second integer pipeline and their 26571results are ready correspondingly in 8 and 4 cycles. The integer 26572division is not pipelined, i.e. the subsequent integer division insn can 26573not be issued until the current division insn finished. Floating point 26574insns are fully pipelined and their results are ready in 3 cycles. 26575Where the result of a floating point insn is used by an integer insn, an 26576additional delay of one cycle is incurred. To describe all of this we 26577could specify 26578 26579 (define_cpu_unit "div") 26580 26581 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26582 "(i0_pipeline | i1_pipeline), (port0 | port1)") 26583 26584 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 26585 "i1_pipeline, nothing*2, (port0 | port1)") 26586 26587 (define_insn_reservation "div" 8 (eq_attr "type" "div") 26588 "i1_pipeline, div*7, div + (port0 | port1)") 26589 26590 (define_insn_reservation "float" 3 (eq_attr "type" "float") 26591 "f_pipeline, nothing, (port0 | port1)) 26592 26593 (define_bypass 4 "float" "simple,mult,div") 26594 26595 To simplify the description we could describe the following reservation 26596 26597 (define_reservation "finish" "port0|port1") 26598 26599 and use it in all 'define_insn_reservation' as in the following 26600construction 26601 26602 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26603 "(i0_pipeline | i1_pipeline), finish") 26604 26605 ---------- Footnotes ---------- 26606 26607 (1) However, the size of the automaton depends on processor 26608complexity. To limit this effect, machine descriptions can split 26609orthogonal parts of the machine description among several automata: but 26610then, since each of these must be stepped independently, this does cause 26611a small decrease in the algorithm's performance. 26612 26613 26614File: gccint.info, Node: Conditional Execution, Next: Define Subst, Prev: Insn Attributes, Up: Machine Desc 26615 2661616.20 Conditional Execution 26617=========================== 26618 26619A number of architectures provide for some form of conditional 26620execution, or predication. The hallmark of this feature is the ability 26621to nullify most of the instructions in the instruction set. When the 26622instruction set is large and not entirely symmetric, it can be quite 26623tedious to describe these forms directly in the '.md' file. An 26624alternative is the 'define_cond_exec' template. 26625 26626 (define_cond_exec 26627 [PREDICATE-PATTERN] 26628 "CONDITION" 26629 "OUTPUT-TEMPLATE" 26630 "OPTIONAL-INSN-ATTRIBUES") 26631 26632 PREDICATE-PATTERN is the condition that must be true for the insn to be 26633executed at runtime and should match a relational operator. One can use 26634'match_operator' to match several relational operators at once. Any 26635'match_operand' operands must have no more than one alternative. 26636 26637 CONDITION is a C expression that must be true for the generated pattern 26638to match. 26639 26640 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output 26641template (*note Output Template::), except that the '*' and '@' special 26642cases do not apply. This is only useful if the assembly text for the 26643predicate is a simple prefix to the main insn. In order to handle the 26644general case, there is a global variable 'current_insn_predicate' that 26645will contain the entire predicate if the current insn is predicated, and 26646will otherwise be 'NULL'. 26647 26648 OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets 26649appended to the insn attributes of the produced cond_exec rtx. It can 26650be used to add some distinguishing attribute to cond_exec rtxs produced 26651that way. An example usage would be to use this attribute in 26652conjunction with attributes on the main pattern to disable particular 26653alternatives under certain conditions. 26654 26655 When 'define_cond_exec' is used, an implicit reference to the 26656'predicable' instruction attribute is made. *Note Insn Attributes::. 26657This attribute must be a boolean (i.e. have exactly two elements in its 26658LIST-OF-VALUES), with the possible values being 'no' and 'yes'. The 26659default and all uses in the insns must be a simple constant, not a 26660complex expressions. It may, however, depend on the alternative, by 26661using a comma-separated list of values. If that is the case, the port 26662should also define an 'enabled' attribute (*note Disable Insn 26663Alternatives::), which should also allow only 'no' and 'yes' as its 26664values. 26665 26666 For each 'define_insn' for which the 'predicable' attribute is true, a 26667new 'define_insn' pattern will be generated that matches a predicated 26668version of the instruction. For example, 26669 26670 (define_insn "addsi" 26671 [(set (match_operand:SI 0 "register_operand" "r") 26672 (plus:SI (match_operand:SI 1 "register_operand" "r") 26673 (match_operand:SI 2 "register_operand" "r")))] 26674 "TEST1" 26675 "add %2,%1,%0") 26676 26677 (define_cond_exec 26678 [(ne (match_operand:CC 0 "register_operand" "c") 26679 (const_int 0))] 26680 "TEST2" 26681 "(%0)") 26682 26683generates a new pattern 26684 26685 (define_insn "" 26686 [(cond_exec 26687 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 26688 (set (match_operand:SI 0 "register_operand" "r") 26689 (plus:SI (match_operand:SI 1 "register_operand" "r") 26690 (match_operand:SI 2 "register_operand" "r"))))] 26691 "(TEST2) && (TEST1)" 26692 "(%3) add %2,%1,%0") 26693 26694 26695File: gccint.info, Node: Define Subst, Next: Constant Definitions, Prev: Conditional Execution, Up: Machine Desc 26696 2669716.21 RTL Templates Transformations 26698=================================== 26699 26700For some hardware architectures there are common cases when the RTL 26701templates for the instructions can be derived from the other RTL 26702templates using simple transformations. E.g., 'i386.md' contains an RTL 26703template for the ordinary 'sub' instruction-- '*subsi_1', and for the 26704'sub' instruction with subsequent zero-extension--'*subsi_1_zext'. Such 26705cases can be easily implemented by a single meta-template capable of 26706generating a modified case based on the initial one: 26707 26708 (define_subst "NAME" 26709 [INPUT-TEMPLATE] 26710 "CONDITION" 26711 [OUTPUT-TEMPLATE]) 26712 INPUT-TEMPLATE is a pattern describing the source RTL template, which 26713will be transformed. 26714 26715 CONDITION is a C expression that is conjunct with the condition from 26716the input-template to generate a condition to be used in the 26717output-template. 26718 26719 OUTPUT-TEMPLATE is a pattern that will be used in the resulting 26720template. 26721 26722 'define_subst' mechanism is tightly coupled with the notion of the 26723subst attribute (*note Subst Iterators::). The use of 'define_subst' is 26724triggered by a reference to a subst attribute in the transforming RTL 26725template. This reference initiates duplication of the source RTL 26726template and substitution of the attributes with their values. The 26727source RTL template is left unchanged, while the copy is transformed by 26728'define_subst'. This transformation can fail in the case when the 26729source RTL template is not matched against the input-template of the 26730'define_subst'. In such case the copy is deleted. 26731 26732 'define_subst' can be used only in 'define_insn' and 'define_expand', 26733it cannot be used in other expressions (e.g. in 26734'define_insn_and_split'). 26735 26736* Menu: 26737 26738* Define Subst Example:: Example of 'define_subst' work. 26739* Define Subst Pattern Matching:: Process of template comparison. 26740* Define Subst Output Template:: Generation of output template. 26741 26742 26743File: gccint.info, Node: Define Subst Example, Next: Define Subst Pattern Matching, Up: Define Subst 26744 2674516.21.1 'define_subst' Example 26746------------------------------ 26747 26748To illustrate how 'define_subst' works, let us examine a simple template 26749transformation. 26750 26751 Suppose there are two kinds of instructions: one that touches flags and 26752the other that does not. The instructions of the second type could be 26753generated with the following 'define_subst': 26754 26755 (define_subst "add_clobber_subst" 26756 [(set (match_operand:SI 0 "" "") 26757 (match_operand:SI 1 "" ""))] 26758 "" 26759 [(set (match_dup 0) 26760 (match_dup 1)) 26761 (clobber (reg:CC FLAGS_REG))] 26762 26763 This 'define_subst' can be applied to any RTL pattern containing 'set' 26764of mode SI and generates a copy with clobber when it is applied. 26765 26766 Assume there is an RTL template for a 'max' instruction to be used in 26767'define_subst' mentioned above: 26768 26769 (define_insn "maxsi" 26770 [(set (match_operand:SI 0 "register_operand" "=r") 26771 (max:SI 26772 (match_operand:SI 1 "register_operand" "r") 26773 (match_operand:SI 2 "register_operand" "r")))] 26774 "" 26775 "max\t{%2, %1, %0|%0, %1, %2}" 26776 [...]) 26777 26778 To mark the RTL template for 'define_subst' application, 26779subst-attributes are used. They should be declared in advance: 26780 26781 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber") 26782 26783 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is 26784the name of the corresponding 'define_subst', the third argument 26785('_noclobber') is the attribute value that would be substituted into the 26786unchanged version of the source RTL template, and the last argument 26787('_clobber') is the value that would be substituted into the second, 26788transformed, version of the RTL template. 26789 26790 Once the subst-attribute has been defined, it should be used in RTL 26791templates which need to be processed by the 'define_subst'. So, the 26792original RTL template should be changed: 26793 26794 (define_insn "maxsi<add_clobber_name>" 26795 [(set (match_operand:SI 0 "register_operand" "=r") 26796 (max:SI 26797 (match_operand:SI 1 "register_operand" "r") 26798 (match_operand:SI 2 "register_operand" "r")))] 26799 "" 26800 "max\t{%2, %1, %0|%0, %1, %2}" 26801 [...]) 26802 26803 The result of the 'define_subst' usage would look like the following: 26804 26805 (define_insn "maxsi_noclobber" 26806 [(set (match_operand:SI 0 "register_operand" "=r") 26807 (max:SI 26808 (match_operand:SI 1 "register_operand" "r") 26809 (match_operand:SI 2 "register_operand" "r")))] 26810 "" 26811 "max\t{%2, %1, %0|%0, %1, %2}" 26812 [...]) 26813 (define_insn "maxsi_clobber" 26814 [(set (match_operand:SI 0 "register_operand" "=r") 26815 (max:SI 26816 (match_operand:SI 1 "register_operand" "r") 26817 (match_operand:SI 2 "register_operand" "r"))) 26818 (clobber (reg:CC FLAGS_REG))] 26819 "" 26820 "max\t{%2, %1, %0|%0, %1, %2}" 26821 [...]) 26822 26823 26824File: gccint.info, Node: Define Subst Pattern Matching, Next: Define Subst Output Template, Prev: Define Subst Example, Up: Define Subst 26825 2682616.21.2 Pattern Matching in 'define_subst' 26827------------------------------------------ 26828 26829All expressions, allowed in 'define_insn' or 'define_expand', are 26830allowed in the input-template of 'define_subst', except 'match_par_dup', 26831'match_scratch', 'match_parallel'. The meanings of expressions in the 26832input-template were changed: 26833 26834 'match_operand' matches any expression (possibly, a subtree in 26835RTL-template), if modes of the 'match_operand' and this expression are 26836the same, or mode of the 'match_operand' is 'VOIDmode', or this 26837expression is 'match_dup', 'match_op_dup'. If the expression is 26838'match_operand' too, and predicate of 'match_operand' from the input 26839pattern is not empty, then the predicates are compared. That can be 26840used for more accurate filtering of accepted RTL-templates. 26841 26842 'match_operator' matches common operators (like 'plus', 'minus'), 26843'unspec', 'unspec_volatile' operators and 'match_operator's from the 26844original pattern if the modes match and 'match_operator' from the input 26845pattern has the same number of operands as the operator from the 26846original pattern. 26847 26848 26849File: gccint.info, Node: Define Subst Output Template, Prev: Define Subst Pattern Matching, Up: Define Subst 26850 2685116.21.3 Generation of output template in 'define_subst' 26852------------------------------------------------------- 26853 26854If all necessary checks for 'define_subst' application pass, a new 26855RTL-pattern, based on the output-template, is created to replace the old 26856template. Like in input-patterns, meanings of some RTL expressions are 26857changed when they are used in output-patterns of a 'define_subst'. 26858Thus, 'match_dup' is used for copying the whole expression from the 26859original pattern, which matched corresponding 'match_operand' from the 26860input pattern. 26861 26862 'match_dup N' is used in the output template to be replaced with the 26863expression from the original pattern, which matched 'match_operand N' 26864from the input pattern. As a consequence, 'match_dup' cannot be used to 26865point to 'match_operand's from the output pattern, it should always 26866refer to a 'match_operand' from the input pattern. 26867 26868 In the output template one can refer to the expressions from the 26869original pattern and create new ones. For instance, some operands could 26870be added by means of standard 'match_operand'. 26871 26872 After replacing 'match_dup' with some RTL-subtree from the original 26873pattern, it could happen that several 'match_operand's in the output 26874pattern have the same indexes. It is unknown, how many and what indexes 26875would be used in the expression which would replace 'match_dup', so such 26876conflicts in indexes are inevitable. To overcome this issue, 26877'match_operands' and 'match_operators', which were introduced into the 26878output pattern, are renumerated when all 'match_dup's are replaced. 26879 26880 Number of alternatives in 'match_operand's introduced into the output 26881template 'M' could differ from the number of alternatives in the 26882original pattern 'N', so in the resultant pattern there would be 'N*M' 26883alternatives. Thus, constraints from the original pattern would be 26884duplicated 'N' times, constraints from the output pattern would be 26885duplicated 'M' times, producing all possible combinations. 26886 26887 26888File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Define Subst, Up: Machine Desc 26889 2689016.22 Constant Definitions 26891========================== 26892 26893Using literal constants inside instruction patterns reduces legibility 26894and can be a maintenance problem. 26895 26896 To overcome this problem, you may use the 'define_constants' 26897expression. It contains a vector of name-value pairs. From that point 26898on, wherever any of the names appears in the MD file, it is as if the 26899corresponding value had been written instead. You may use 26900'define_constants' multiple times; each appearance adds more constants 26901to the table. It is an error to redefine a constant with a different 26902value. 26903 26904 To come back to the a29k load multiple example, instead of 26905 26906 (define_insn "" 26907 [(match_parallel 0 "load_multiple_operation" 26908 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26909 (match_operand:SI 2 "memory_operand" "m")) 26910 (use (reg:SI 179)) 26911 (clobber (reg:SI 179))])] 26912 "" 26913 "loadm 0,0,%1,%2") 26914 26915 You could write: 26916 26917 (define_constants [ 26918 (R_BP 177) 26919 (R_FC 178) 26920 (R_CR 179) 26921 (R_Q 180) 26922 ]) 26923 26924 (define_insn "" 26925 [(match_parallel 0 "load_multiple_operation" 26926 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 26927 (match_operand:SI 2 "memory_operand" "m")) 26928 (use (reg:SI R_CR)) 26929 (clobber (reg:SI R_CR))])] 26930 "" 26931 "loadm 0,0,%1,%2") 26932 26933 The constants that are defined with a define_constant are also output 26934in the insn-codes.h header file as #defines. 26935 26936 You can also use the machine description file to define enumerations. 26937Like the constants defined by 'define_constant', these enumerations are 26938visible to both the machine description file and the main C code. 26939 26940 The syntax is as follows: 26941 26942 (define_c_enum "NAME" [ 26943 VALUE0 26944 VALUE1 26945 ... 26946 VALUEN 26947 ]) 26948 26949 This definition causes the equivalent of the following C code to appear 26950in 'insn-constants.h': 26951 26952 enum NAME { 26953 VALUE0 = 0, 26954 VALUE1 = 1, 26955 ... 26956 VALUEN = N 26957 }; 26958 #define NUM_CNAME_VALUES (N + 1) 26959 26960 where CNAME is the capitalized form of NAME. It also makes each VALUEI 26961available in the machine description file, just as if it had been 26962declared with: 26963 26964 (define_constants [(VALUEI I)]) 26965 26966 Each VALUEI is usually an upper-case identifier and usually begins with 26967CNAME. 26968 26969 You can split the enumeration definition into as many statements as you 26970like. The above example is directly equivalent to: 26971 26972 (define_c_enum "NAME" [VALUE0]) 26973 (define_c_enum "NAME" [VALUE1]) 26974 ... 26975 (define_c_enum "NAME" [VALUEN]) 26976 26977 Splitting the enumeration helps to improve the modularity of each 26978individual '.md' file. For example, if a port defines its 26979synchronization instructions in a separate 'sync.md' file, it is 26980convenient to define all synchronization-specific enumeration values in 26981'sync.md' rather than in the main '.md' file. 26982 26983 Some enumeration names have special significance to GCC: 26984 26985'unspecv' 26986 If an enumeration called 'unspecv' is defined, GCC will use it when 26987 printing out 'unspec_volatile' expressions. For example: 26988 26989 (define_c_enum "unspecv" [ 26990 UNSPECV_BLOCKAGE 26991 ]) 26992 26993 causes GCC to print '(unspec_volatile ... 0)' as: 26994 26995 (unspec_volatile ... UNSPECV_BLOCKAGE) 26996 26997'unspec' 26998 If an enumeration called 'unspec' is defined, GCC will use it when 26999 printing out 'unspec' expressions. GCC will also use it when 27000 printing out 'unspec_volatile' expressions unless an 'unspecv' 27001 enumeration is also defined. You can therefore decide whether to 27002 keep separate enumerations for volatile and non-volatile 27003 expressions or whether to use the same enumeration for both. 27004 27005 Another way of defining an enumeration is to use 'define_enum': 27006 27007 (define_enum "NAME" [ 27008 VALUE0 27009 VALUE1 27010 ... 27011 VALUEN 27012 ]) 27013 27014 This directive implies: 27015 27016 (define_c_enum "NAME" [ 27017 CNAME_CVALUE0 27018 CNAME_CVALUE1 27019 ... 27020 CNAME_CVALUEN 27021 ]) 27022 27023 where CVALUEI is the capitalized form of VALUEI. However, unlike 27024'define_c_enum', the enumerations defined by 'define_enum' can be used 27025in attribute specifications (*note define_enum_attr::). 27026 27027 27028File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 27029 2703016.23 Iterators 27031=============== 27032 27033Ports often need to define similar patterns for more than one machine 27034mode or for more than one rtx code. GCC provides some simple iterator 27035facilities to make this process easier. 27036 27037* Menu: 27038 27039* Mode Iterators:: Generating variations of patterns for different modes. 27040* Code Iterators:: Doing the same for codes. 27041* Int Iterators:: Doing the same for integers. 27042* Subst Iterators:: Generating variations of patterns for define_subst. 27043 27044 27045File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 27046 2704716.23.1 Mode Iterators 27048---------------------- 27049 27050Ports often need to define similar patterns for two or more different 27051modes. For example: 27052 27053 * If a processor has hardware support for both single and double 27054 floating-point arithmetic, the 'SFmode' patterns tend to be very 27055 similar to the 'DFmode' ones. 27056 27057 * If a port uses 'SImode' pointers in one configuration and 'DImode' 27058 pointers in another, it will usually have very similar 'SImode' and 27059 'DImode' patterns for manipulating pointers. 27060 27061 Mode iterators allow several patterns to be instantiated from one '.md' 27062file template. They can be used with any type of rtx-based construct, 27063such as a 'define_insn', 'define_split', or 'define_peephole2'. 27064 27065* Menu: 27066 27067* Defining Mode Iterators:: Defining a new mode iterator. 27068* Substitutions:: Combining mode iterators with substitutions 27069* Examples:: Examples 27070 27071 27072File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 27073 2707416.23.1.1 Defining Mode Iterators 27075................................. 27076 27077The syntax for defining a mode iterator is: 27078 27079 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 27080 27081 This allows subsequent '.md' file constructs to use the mode suffix 27082':NAME'. Every construct that does so will be expanded N times, once 27083with every use of ':NAME' replaced by ':MODE1', once with every use 27084replaced by ':MODE2', and so on. In the expansion for a particular 27085MODEI, every C condition will also require that CONDI be true. 27086 27087 For example: 27088 27089 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 27090 27091 defines a new mode suffix ':P'. Every construct that uses ':P' will be 27092expanded twice, once with every ':P' replaced by ':SI' and once with 27093every ':P' replaced by ':DI'. The ':SI' version will only apply if 27094'Pmode == SImode' and the ':DI' version will only apply if 'Pmode == 27095DImode'. 27096 27097 As with other '.md' conditions, an empty string is treated as "always 27098true". '(MODE "")' can also be abbreviated to 'MODE'. For example: 27099 27100 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 27101 27102 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that 27103the ':SI' expansion has no such constraint. 27104 27105 Iterators are applied in the order they are defined. This can be 27106significant if two iterators are used in a construct that requires 27107substitutions. *Note Substitutions::. 27108 27109 27110File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 27111 2711216.23.1.2 Substitution in Mode Iterators 27113........................................ 27114 27115If an '.md' file construct uses mode iterators, each version of the 27116construct will often need slightly different strings or modes. For 27117example: 27118 27119 * When a 'define_expand' defines several 'addM3' patterns (*note 27120 Standard Names::), each expander will need to use the appropriate 27121 mode name for M. 27122 27123 * When a 'define_insn' defines several instruction patterns, each 27124 instruction will often use a different assembler mnemonic. 27125 27126 * When a 'define_insn' requires operands with different modes, using 27127 an iterator for one of the operand modes usually requires a 27128 specific mode for the other operand(s). 27129 27130 GCC supports such variations through a system of "mode attributes". 27131There are two standard attributes: 'mode', which is the name of the mode 27132in lower case, and 'MODE', which is the same thing in upper case. You 27133can define other attributes using: 27134 27135 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 27136 27137 where NAME is the name of the attribute and VALUEI is the value 27138associated with MODEI. 27139 27140 When GCC replaces some :ITERATOR with :MODE, it will scan each string 27141and mode in the pattern for sequences of the form '<ITERATOR:ATTR>', 27142where ATTR is the name of a mode attribute. If the attribute is defined 27143for MODE, the whole '<...>' sequence will be replaced by the appropriate 27144attribute value. 27145 27146 For example, suppose an '.md' file has: 27147 27148 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 27149 (define_mode_attr load [(SI "lw") (DI "ld")]) 27150 27151 If one of the patterns that uses ':P' contains the string 27152'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use 27153'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'. 27154 27155 Here is an example of using an attribute for a mode: 27156 27157 (define_mode_iterator LONG [SI DI]) 27158 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 27159 (define_insn ... 27160 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 27161 27162 The 'ITERATOR:' prefix may be omitted, in which case the substitution 27163will be attempted for every iterator expansion. 27164 27165 27166File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 27167 2716816.23.1.3 Mode Iterator Examples 27169................................ 27170 27171Here is an example from the MIPS port. It defines the following modes 27172and attributes (among others): 27173 27174 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 27175 (define_mode_attr d [(SI "") (DI "d")]) 27176 27177 and uses the following template to define both 'subsi3' and 'subdi3': 27178 27179 (define_insn "sub<mode>3" 27180 [(set (match_operand:GPR 0 "register_operand" "=d") 27181 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 27182 (match_operand:GPR 2 "register_operand" "d")))] 27183 "" 27184 "<d>subu\t%0,%1,%2" 27185 [(set_attr "type" "arith") 27186 (set_attr "mode" "<MODE>")]) 27187 27188 This is exactly equivalent to: 27189 27190 (define_insn "subsi3" 27191 [(set (match_operand:SI 0 "register_operand" "=d") 27192 (minus:SI (match_operand:SI 1 "register_operand" "d") 27193 (match_operand:SI 2 "register_operand" "d")))] 27194 "" 27195 "subu\t%0,%1,%2" 27196 [(set_attr "type" "arith") 27197 (set_attr "mode" "SI")]) 27198 27199 (define_insn "subdi3" 27200 [(set (match_operand:DI 0 "register_operand" "=d") 27201 (minus:DI (match_operand:DI 1 "register_operand" "d") 27202 (match_operand:DI 2 "register_operand" "d")))] 27203 "" 27204 "dsubu\t%0,%1,%2" 27205 [(set_attr "type" "arith") 27206 (set_attr "mode" "DI")]) 27207 27208 27209File: gccint.info, Node: Code Iterators, Next: Int Iterators, Prev: Mode Iterators, Up: Iterators 27210 2721116.23.2 Code Iterators 27212---------------------- 27213 27214Code iterators operate in a similar way to mode iterators. *Note Mode 27215Iterators::. 27216 27217 The construct: 27218 27219 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 27220 27221 defines a pseudo rtx code NAME that can be instantiated as CODEI if 27222condition CONDI is true. Each CODEI must have the same rtx format. 27223*Note RTL Classes::. 27224 27225 As with mode iterators, each pattern that uses NAME will be expanded N 27226times, once with all uses of NAME replaced by CODE1, once with all uses 27227replaced by CODE2, and so on. *Note Defining Mode Iterators::. 27228 27229 It is possible to define attributes for codes as well as for modes. 27230There are two standard code attributes: 'code', the name of the code in 27231lower case, and 'CODE', the name of the code in upper case. Other 27232attributes are defined using: 27233 27234 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 27235 27236 Here's an example of code iterators in action, taken from the MIPS 27237port: 27238 27239 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 27240 eq ne gt ge lt le gtu geu ltu leu]) 27241 27242 (define_expand "b<code>" 27243 [(set (pc) 27244 (if_then_else (any_cond:CC (cc0) 27245 (const_int 0)) 27246 (label_ref (match_operand 0 "")) 27247 (pc)))] 27248 "" 27249 { 27250 gen_conditional_branch (operands, <CODE>); 27251 DONE; 27252 }) 27253 27254 This is equivalent to: 27255 27256 (define_expand "bunordered" 27257 [(set (pc) 27258 (if_then_else (unordered:CC (cc0) 27259 (const_int 0)) 27260 (label_ref (match_operand 0 "")) 27261 (pc)))] 27262 "" 27263 { 27264 gen_conditional_branch (operands, UNORDERED); 27265 DONE; 27266 }) 27267 27268 (define_expand "bordered" 27269 [(set (pc) 27270 (if_then_else (ordered:CC (cc0) 27271 (const_int 0)) 27272 (label_ref (match_operand 0 "")) 27273 (pc)))] 27274 "" 27275 { 27276 gen_conditional_branch (operands, ORDERED); 27277 DONE; 27278 }) 27279 27280 ... 27281 27282 27283File: gccint.info, Node: Int Iterators, Next: Subst Iterators, Prev: Code Iterators, Up: Iterators 27284 2728516.23.3 Int Iterators 27286--------------------- 27287 27288Int iterators operate in a similar way to code iterators. *Note Code 27289Iterators::. 27290 27291 The construct: 27292 27293 (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")]) 27294 27295 defines a pseudo integer constant NAME that can be instantiated as INTI 27296if condition CONDI is true. Each INT must have the same rtx format. 27297*Note RTL Classes::. Int iterators can appear in only those rtx fields 27298that have 'i' as the specifier. This means that each INT has to be a 27299constant defined using define_constant or define_c_enum. 27300 27301 As with mode and code iterators, each pattern that uses NAME will be 27302expanded N times, once with all uses of NAME replaced by INT1, once with 27303all uses replaced by INT2, and so on. *Note Defining Mode Iterators::. 27304 27305 It is possible to define attributes for ints as well as for codes and 27306modes. Attributes are defined using: 27307 27308 (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")]) 27309 27310 Here's an example of int iterators in action, taken from the ARM port: 27311 27312 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 27313 27314 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 27315 27316 (define_insn "neon_vq<absneg><mode>" 27317 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27318 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27319 (match_operand:SI 2 "immediate_operand" "i")] 27320 QABSNEG))] 27321 "TARGET_NEON" 27322 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27323 [(set_attr "type" "neon_vqneg_vqabs")] 27324 ) 27325 27326 27327 This is equivalent to: 27328 27329 (define_insn "neon_vqabs<mode>" 27330 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27331 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27332 (match_operand:SI 2 "immediate_operand" "i")] 27333 UNSPEC_VQABS))] 27334 "TARGET_NEON" 27335 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27336 [(set_attr "type" "neon_vqneg_vqabs")] 27337 ) 27338 27339 (define_insn "neon_vqneg<mode>" 27340 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27341 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27342 (match_operand:SI 2 "immediate_operand" "i")] 27343 UNSPEC_VQNEG))] 27344 "TARGET_NEON" 27345 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27346 [(set_attr "type" "neon_vqneg_vqabs")] 27347 ) 27348 27349 27350 27351File: gccint.info, Node: Subst Iterators, Prev: Int Iterators, Up: Iterators 27352 2735316.23.4 Subst Iterators 27354----------------------- 27355 27356Subst iterators are special type of iterators with the following 27357restrictions: they could not be declared explicitly, they always have 27358only two values, and they do not have explicit dedicated name. 27359Subst-iterators are triggered only when corresponding subst-attribute is 27360used in RTL-pattern. 27361 27362 Subst iterators transform templates in the following way: the templates 27363are duplicated, the subst-attributes in these templates are replaced 27364with the corresponding values, and a new attribute is implicitly added 27365to the given 'define_insn'/'define_expand'. The name of the added 27366attribute matches the name of 'define_subst'. Such attributes are 27367declared implicitly, and it is not allowed to have a 'define_attr' named 27368as a 'define_subst'. 27369 27370 Each subst iterator is linked to a 'define_subst'. It is declared 27371implicitly by the first appearance of the corresponding 27372'define_subst_attr', and it is not allowed to define it explicitly. 27373 27374 Declarations of subst-attributes have the following syntax: 27375 27376 (define_subst_attr "NAME" 27377 "SUBST-NAME" 27378 "NO-SUBST-VALUE" 27379 "SUBST-APPLIED-VALUE") 27380 27381 NAME is a string with which the given subst-attribute could be referred 27382to. 27383 27384 SUBST-NAME shows which 'define_subst' should be applied to an 27385RTL-template if the given subst-attribute is present in the 27386RTL-template. 27387 27388 NO-SUBST-VALUE is a value with which subst-attribute would be replaced 27389in the first copy of the original RTL-template. 27390 27391 SUBST-APPLIED-VALUE is a value with which subst-attribute would be 27392replaced in the second copy of the original RTL-template. 27393 27394 27395File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 27396 2739717 Target Description Macros and Functions 27398****************************************** 27399 27400In addition to the file 'MACHINE.md', a machine description includes a C 27401header file conventionally given the name 'MACHINE.h' and a C source 27402file named 'MACHINE.c'. The header file defines numerous macros that 27403convey the information about the target machine that does not fit into 27404the scheme of the '.md' file. The file 'tm.h' should be a link to 27405'MACHINE.h'. The header file 'config.h' includes 'tm.h' and most 27406compiler source files include 'config.h'. The source file defines a 27407variable 'targetm', which is a structure containing pointers to 27408functions and data relating to the target machine. 'MACHINE.c' should 27409also contain their definitions, if they are not defined elsewhere in 27410GCC, and other functions called through the macros defined in the '.h' 27411file. 27412 27413* Menu: 27414 27415* Target Structure:: The 'targetm' variable. 27416* Driver:: Controlling how the driver runs the compilation passes. 27417* Run-time Target:: Defining '-m' options like '-m68000' and '-m68020'. 27418* Per-Function Data:: Defining data structures for per-function information. 27419* Storage Layout:: Defining sizes and alignments of data. 27420* Type Layout:: Defining sizes and properties of basic user data types. 27421* Registers:: Naming and describing the hardware registers. 27422* Register Classes:: Defining the classes of hardware registers. 27423* Stack and Calling:: Defining which way the stack grows and by how much. 27424* Varargs:: Defining the varargs macros. 27425* Trampolines:: Code set up at run time to enter a nested function. 27426* Library Calls:: Controlling how library routines are implicitly called. 27427* Addressing Modes:: Defining addressing modes valid for memory operands. 27428* Anchored Addresses:: Defining how '-fsection-anchors' should work. 27429* Condition Code:: Defining how insns update the condition code. 27430* Costs:: Defining relative costs of different operations. 27431* Scheduling:: Adjusting the behavior of the instruction scheduler. 27432* Sections:: Dividing storage into text, data, and other sections. 27433* PIC:: Macros for position independent code. 27434* Assembler Format:: Defining how to write insns and pseudo-ops to output. 27435* Debugging Info:: Defining the format of debugging output. 27436* Floating Point:: Handling floating point for cross-compilers. 27437* Mode Switching:: Insertion of mode-switching instructions. 27438* Target Attributes:: Defining target-specific uses of '__attribute__'. 27439* Emulated TLS:: Emulated TLS support. 27440* MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 27441* PCH Target:: Validity checking for precompiled headers. 27442* C++ ABI:: Controlling C++ ABI changes. 27443* Named Address Spaces:: Adding support for named address spaces 27444* Misc:: Everything else. 27445 27446 27447File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 27448 2744917.1 The Global 'targetm' Variable 27450================================== 27451 27452 -- Variable: struct gcc_target targetm 27453 The target '.c' file must define the global 'targetm' variable 27454 which contains pointers to functions and data relating to the 27455 target machine. The variable is declared in 'target.h'; 27456 'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used 27457 to initialize the variable, and macros for the default initializers 27458 for elements of the structure. The '.c' file should override those 27459 macros for which the default definition is inappropriate. For 27460 example: 27461 #include "target.h" 27462 #include "target-def.h" 27463 27464 /* Initialize the GCC target structure. */ 27465 27466 #undef TARGET_COMP_TYPE_ATTRIBUTES 27467 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 27468 27469 struct gcc_target targetm = TARGET_INITIALIZER; 27470 27471 Where a macro should be defined in the '.c' file in this manner to form 27472part of the 'targetm' structure, it is documented below as a "Target 27473Hook" with a prototype. Many macros will change in future from being 27474defined in the '.h' file to being part of the 'targetm' structure. 27475 27476 Similarly, there is a 'targetcm' variable for hooks that are specific 27477to front ends for C-family languages, documented as "C Target Hook". 27478This is declared in 'c-family/c-target.h', the initializer 27479'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'. If targets 27480initialize 'targetcm' themselves, they should set 27481'target_has_targetcm=yes' in 'config.gcc'; otherwise a default 27482definition is used. 27483 27484 Similarly, there is a 'targetm_common' variable for hooks that are 27485shared between the compiler driver and the compilers proper, documented 27486as "Common Target Hook". This is declared in 'common/common-target.h', 27487the initializer 'TARGETM_COMMON_INITIALIZER' in 27488'common/common-target-def.h'. If targets initialize 'targetm_common' 27489themselves, they should set 'target_has_targetm_common=yes' in 27490'config.gcc'; otherwise a default definition is used. 27491 27492 27493File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 27494 2749517.2 Controlling the Compilation Driver, 'gcc' 27496============================================== 27497 27498You can control the compilation driver. 27499 27500 -- Macro: DRIVER_SELF_SPECS 27501 A list of specs for the driver itself. It should be a suitable 27502 initializer for an array of strings, with no surrounding braces. 27503 27504 The driver applies these specs to its own command line between 27505 loading default 'specs' files (but not command-line specified ones) 27506 and choosing the multilib directory or running any subcommands. It 27507 applies them in the order given, so each spec can depend on the 27508 options added by earlier ones. It is also possible to remove 27509 options using '%<OPTION' in the usual way. 27510 27511 This macro can be useful when a port has several interdependent 27512 target options. It provides a way of standardizing the command 27513 line so that the other specs are easier to write. 27514 27515 Do not define this macro if it does not need to do anything. 27516 27517 -- Macro: OPTION_DEFAULT_SPECS 27518 A list of specs used to support configure-time default options 27519 (i.e. '--with' options) in the driver. It should be a suitable 27520 initializer for an array of structures, each containing two 27521 strings, without the outermost pair of surrounding braces. 27522 27523 The first item in the pair is the name of the default. This must 27524 match the code in 'config.gcc' for the target. The second item is 27525 a spec to apply if a default with this name was specified. The 27526 string '%(VALUE)' in the spec will be replaced by the value of the 27527 default everywhere it occurs. 27528 27529 The driver will apply these specs to its own command line between 27530 loading default 'specs' files and processing 'DRIVER_SELF_SPECS', 27531 using the same mechanism as 'DRIVER_SELF_SPECS'. 27532 27533 Do not define this macro if it does not need to do anything. 27534 27535 -- Macro: CPP_SPEC 27536 A C string constant that tells the GCC driver program options to 27537 pass to CPP. It can also specify how to translate options you give 27538 to GCC into options for GCC to pass to the CPP. 27539 27540 Do not define this macro if it does not need to do anything. 27541 27542 -- Macro: CPLUSPLUS_CPP_SPEC 27543 This macro is just like 'CPP_SPEC', but is used for C++, rather 27544 than C. If you do not define this macro, then the value of 27545 'CPP_SPEC' (if any) will be used instead. 27546 27547 -- Macro: CC1_SPEC 27548 A C string constant that tells the GCC driver program options to 27549 pass to 'cc1', 'cc1plus', 'f771', and the other language front 27550 ends. It can also specify how to translate options you give to GCC 27551 into options for GCC to pass to front ends. 27552 27553 Do not define this macro if it does not need to do anything. 27554 27555 -- Macro: CC1PLUS_SPEC 27556 A C string constant that tells the GCC driver program options to 27557 pass to 'cc1plus'. It can also specify how to translate options 27558 you give to GCC into options for GCC to pass to the 'cc1plus'. 27559 27560 Do not define this macro if it does not need to do anything. Note 27561 that everything defined in CC1_SPEC is already passed to 'cc1plus' 27562 so there is no need to duplicate the contents of CC1_SPEC in 27563 CC1PLUS_SPEC. 27564 27565 -- Macro: ASM_SPEC 27566 A C string constant that tells the GCC driver program options to 27567 pass to the assembler. It can also specify how to translate 27568 options you give to GCC into options for GCC to pass to the 27569 assembler. See the file 'sun3.h' for an example of this. 27570 27571 Do not define this macro if it does not need to do anything. 27572 27573 -- Macro: ASM_FINAL_SPEC 27574 A C string constant that tells the GCC driver program how to run 27575 any programs which cleanup after the normal assembler. Normally, 27576 this is not needed. See the file 'mips.h' for an example of this. 27577 27578 Do not define this macro if it does not need to do anything. 27579 27580 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 27581 Define this macro, with no value, if the driver should give the 27582 assembler an argument consisting of a single dash, '-', to instruct 27583 it to read from its standard input (which will be a pipe connected 27584 to the output of the compiler proper). This argument is given 27585 after any '-o' option specifying the name of the output file. 27586 27587 If you do not define this macro, the assembler is assumed to read 27588 its standard input if given no non-option arguments. If your 27589 assembler cannot read standard input at all, use a '%{pipe:%e}' 27590 construct; see 'mips.h' for instance. 27591 27592 -- Macro: LINK_SPEC 27593 A C string constant that tells the GCC driver program options to 27594 pass to the linker. It can also specify how to translate options 27595 you give to GCC into options for GCC to pass to the linker. 27596 27597 Do not define this macro if it does not need to do anything. 27598 27599 -- Macro: LIB_SPEC 27600 Another C string constant used much like 'LINK_SPEC'. The 27601 difference between the two is that 'LIB_SPEC' is used at the end of 27602 the command given to the linker. 27603 27604 If this macro is not defined, a default is provided that loads the 27605 standard C library from the usual place. See 'gcc.c'. 27606 27607 -- Macro: LIBGCC_SPEC 27608 Another C string constant that tells the GCC driver program how and 27609 when to place a reference to 'libgcc.a' into the linker command 27610 line. This constant is placed both before and after the value of 27611 'LIB_SPEC'. 27612 27613 If this macro is not defined, the GCC driver provides a default 27614 that passes the string '-lgcc' to the linker. 27615 27616 -- Macro: REAL_LIBGCC_SPEC 27617 By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC' 27618 is not directly used by the driver program but is instead modified 27619 to refer to different versions of 'libgcc.a' depending on the 27620 values of the command line flags '-static', '-shared', 27621 '-static-libgcc', and '-shared-libgcc'. On targets where these 27622 modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead. 27623 'REAL_LIBGCC_SPEC' tells the driver how to place a reference to 27624 'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is 27625 used unmodified. 27626 27627 -- Macro: USE_LD_AS_NEEDED 27628 A macro that controls the modifications to 'LIBGCC_SPEC' mentioned 27629 in 'REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 27630 uses '--as-needed' or equivalent options and the shared 'libgcc' in 27631 place of the static exception handler library, when linking without 27632 any of '-static', '-static-libgcc', or '-shared-libgcc'. 27633 27634 -- Macro: LINK_EH_SPEC 27635 If defined, this C string constant is added to 'LINK_SPEC'. When 27636 'USE_LD_AS_NEEDED' is zero or undefined, it also affects the 27637 modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'. 27638 27639 -- Macro: STARTFILE_SPEC 27640 Another C string constant used much like 'LINK_SPEC'. The 27641 difference between the two is that 'STARTFILE_SPEC' is used at the 27642 very beginning of the command given to the linker. 27643 27644 If this macro is not defined, a default is provided that loads the 27645 standard C startup file from the usual place. See 'gcc.c'. 27646 27647 -- Macro: ENDFILE_SPEC 27648 Another C string constant used much like 'LINK_SPEC'. The 27649 difference between the two is that 'ENDFILE_SPEC' is used at the 27650 very end of the command given to the linker. 27651 27652 Do not define this macro if it does not need to do anything. 27653 27654 -- Macro: THREAD_MODEL_SPEC 27655 GCC '-v' will print the thread model GCC was configured to use. 27656 However, this doesn't work on platforms that are multilibbed on 27657 thread models, such as AIX 4.3. On such platforms, define 27658 'THREAD_MODEL_SPEC' such that it evaluates to a string without 27659 blanks that names one of the recognized thread models. '%*', the 27660 default value of this macro, will expand to the value of 27661 'thread_file' set in 'config.gcc'. 27662 27663 -- Macro: SYSROOT_SUFFIX_SPEC 27664 Define this macro to add a suffix to the target sysroot when GCC is 27665 configured with a sysroot. This will cause GCC to search for 27666 usr/lib, et al, within sysroot+suffix. 27667 27668 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 27669 Define this macro to add a headers_suffix to the target sysroot 27670 when GCC is configured with a sysroot. This will cause GCC to pass 27671 the updated sysroot+headers_suffix to CPP, causing it to search for 27672 usr/include, et al, within sysroot+headers_suffix. 27673 27674 -- Macro: EXTRA_SPECS 27675 Define this macro to provide additional specifications to put in 27676 the 'specs' file that can be used in various specifications like 27677 'CC1_SPEC'. 27678 27679 The definition should be an initializer for an array of structures, 27680 containing a string constant, that defines the specification name, 27681 and a string constant that provides the specification. 27682 27683 Do not define this macro if it does not need to do anything. 27684 27685 'EXTRA_SPECS' is useful when an architecture contains several 27686 related targets, which have various '..._SPECS' which are similar 27687 to each other, and the maintainer would like one central place to 27688 keep these definitions. 27689 27690 For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to 27691 define either '_CALL_SYSV' when the System V calling sequence is 27692 used or '_CALL_AIX' when the older AIX-based calling sequence is 27693 used. 27694 27695 The 'config/rs6000/rs6000.h' target file defines: 27696 27697 #define EXTRA_SPECS \ 27698 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 27699 27700 #define CPP_SYS_DEFAULT "" 27701 27702 The 'config/rs6000/sysv.h' target file defines: 27703 #undef CPP_SPEC 27704 #define CPP_SPEC \ 27705 "%{posix: -D_POSIX_SOURCE } \ 27706 %{mcall-sysv: -D_CALL_SYSV } \ 27707 %{!mcall-sysv: %(cpp_sysv_default) } \ 27708 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 27709 27710 #undef CPP_SYSV_DEFAULT 27711 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 27712 27713 while the 'config/rs6000/eabiaix.h' target file defines 27714 'CPP_SYSV_DEFAULT' as: 27715 27716 #undef CPP_SYSV_DEFAULT 27717 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 27718 27719 -- Macro: LINK_LIBGCC_SPECIAL_1 27720 Define this macro if the driver program should find the library 27721 'libgcc.a'. If you do not define this macro, the driver program 27722 will pass the argument '-lgcc' to tell the linker to do the search. 27723 27724 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 27725 The sequence in which libgcc and libc are specified to the linker. 27726 By default this is '%G %L %G'. 27727 27728 -- Macro: LINK_COMMAND_SPEC 27729 A C string constant giving the complete command line need to 27730 execute the linker. When you do this, you will need to update your 27731 port each time a change is made to the link command line within 27732 'gcc.c'. Therefore, define this macro only if you need to 27733 completely redefine the command line for invoking the linker and 27734 there is no other way to accomplish the effect you need. 27735 Overriding this macro may be avoidable by overriding 27736 'LINK_GCC_C_SEQUENCE_SPEC' instead. 27737 27738 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT 27739 True if '..' components should always be removed from directory 27740 names computed relative to GCC's internal directories, false 27741 (default) if such components should be preserved and directory 27742 names containing them passed to other tools such as the linker. 27743 27744 -- Macro: MULTILIB_DEFAULTS 27745 Define this macro as a C expression for the initializer of an array 27746 of string to tell the driver program which options are defaults for 27747 this target and thus do not need to be handled specially when using 27748 'MULTILIB_OPTIONS'. 27749 27750 Do not define this macro if 'MULTILIB_OPTIONS' is not defined in 27751 the target makefile fragment or if none of the options listed in 27752 'MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 27753 27754 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 27755 Define this macro to tell 'gcc' that it should only translate a 27756 '-B' prefix into a '-L' linker option if the prefix indicates an 27757 absolute file name. 27758 27759 -- Macro: MD_EXEC_PREFIX 27760 If defined, this macro is an additional prefix to try after 27761 'STANDARD_EXEC_PREFIX'. 'MD_EXEC_PREFIX' is not searched when the 27762 compiler is built as a cross compiler. If you define 27763 'MD_EXEC_PREFIX', then be sure to add it to the list of directories 27764 used to find the assembler in 'configure.in'. 27765 27766 -- Macro: STANDARD_STARTFILE_PREFIX 27767 Define this macro as a C string constant if you wish to override 27768 the standard choice of 'libdir' as the default prefix to try when 27769 searching for startup files such as 'crt0.o'. 27770 'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 27771 built as a cross compiler. 27772 27773 -- Macro: STANDARD_STARTFILE_PREFIX_1 27774 Define this macro as a C string constant if you wish to override 27775 the standard choice of '/lib' as a prefix to try after the default 27776 prefix when searching for startup files such as 'crt0.o'. 27777 'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 27778 built as a cross compiler. 27779 27780 -- Macro: STANDARD_STARTFILE_PREFIX_2 27781 Define this macro as a C string constant if you wish to override 27782 the standard choice of '/lib' as yet another prefix to try after 27783 the default prefix when searching for startup files such as 27784 'crt0.o'. 'STANDARD_STARTFILE_PREFIX_2' is not searched when the 27785 compiler is built as a cross compiler. 27786 27787 -- Macro: MD_STARTFILE_PREFIX 27788 If defined, this macro supplies an additional prefix to try after 27789 the standard prefixes. 'MD_EXEC_PREFIX' is not searched when the 27790 compiler is built as a cross compiler. 27791 27792 -- Macro: MD_STARTFILE_PREFIX_1 27793 If defined, this macro supplies yet another prefix to try after the 27794 standard prefixes. It is not searched when the compiler is built 27795 as a cross compiler. 27796 27797 -- Macro: INIT_ENVIRONMENT 27798 Define this macro as a C string constant if you wish to set 27799 environment variables for programs called by the driver, such as 27800 the assembler and loader. The driver passes the value of this 27801 macro to 'putenv' to initialize the necessary environment 27802 variables. 27803 27804 -- Macro: LOCAL_INCLUDE_DIR 27805 Define this macro as a C string constant if you wish to override 27806 the standard choice of '/usr/local/include' as the default prefix 27807 to try when searching for local header files. 'LOCAL_INCLUDE_DIR' 27808 comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc', 27809 normally '/usr/include') in the search order. 27810 27811 Cross compilers do not search either '/usr/local/include' or its 27812 replacement. 27813 27814 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT 27815 The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'. See 27816 'INCLUDE_DEFAULTS', below, for the description of components. If 27817 you do not define this macro, no component is used. 27818 27819 -- Macro: INCLUDE_DEFAULTS 27820 Define this macro if you wish to override the entire default search 27821 path for include files. For a native compiler, the default search 27822 path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR', 27823 'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'. In 27824 addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined 27825 automatically by 'Makefile', and specify private search areas for 27826 GCC. The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++ 27827 programs. 27828 27829 The definition should be an initializer for an array of structures. 27830 Each array element should have four elements: the directory name (a 27831 string constant), the component name (also a string constant), a 27832 flag for C++-only directories, and a flag showing that the includes 27833 in the directory don't need to be wrapped in 'extern 'C'' when 27834 compiling C++. Mark the end of the array with a null element. 27835 27836 The component name denotes what GNU package the include file is 27837 part of, if any, in all uppercase letters. For example, it might 27838 be 'GCC' or 'BINUTILS'. If the package is part of a 27839 vendor-supplied operating system, code the component name as '0'. 27840 27841 For example, here is the definition used for VAX/VMS: 27842 27843 #define INCLUDE_DEFAULTS \ 27844 { \ 27845 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 27846 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 27847 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 27848 { ".", 0, 0, 0}, \ 27849 { 0, 0, 0, 0} \ 27850 } 27851 27852 Here is the order of prefixes tried for exec files: 27853 27854 1. Any prefixes specified by the user with '-B'. 27855 27856 2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX' 27857 is not set and the compiler has not been installed in the 27858 configure-time PREFIX, the location in which the compiler has 27859 actually been installed. 27860 27861 3. The directories specified by the environment variable 27862 'COMPILER_PATH'. 27863 27864 4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been 27865 installed in the configured-time PREFIX. 27866 27867 5. The location '/usr/libexec/gcc/', but only if this is a native 27868 compiler. 27869 27870 6. The location '/usr/lib/gcc/', but only if this is a native 27871 compiler. 27872 27873 7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 27874 native compiler. 27875 27876 Here is the order of prefixes tried for startfiles: 27877 27878 1. Any prefixes specified by the user with '-B'. 27879 27880 2. The environment variable 'GCC_EXEC_PREFIX' or its automatically 27881 determined value based on the installed toolchain location. 27882 27883 3. The directories specified by the environment variable 27884 'LIBRARY_PATH' (or port-specific name; native only, cross compilers 27885 do not use this). 27886 27887 4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is 27888 installed in the configured PREFIX or this is a native compiler. 27889 27890 5. The location '/usr/lib/gcc/', but only if this is a native 27891 compiler. 27892 27893 6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 27894 native compiler. 27895 27896 7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a 27897 native compiler, or we have a target system root. 27898 27899 8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is 27900 a native compiler, or we have a target system root. 27901 27902 9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot 27903 modifications. If this path is relative it will be prefixed by 27904 'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX' 27905 and the machine suffix. 27906 27907 10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a 27908 native compiler, or we have a target system root. The default for 27909 this macro is '/lib/'. 27910 27911 11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a 27912 native compiler, or we have a target system root. The default for 27913 this macro is '/usr/lib/'. 27914 27915 27916File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 27917 2791817.3 Run-time Target Specification 27919================================== 27920 27921Here are run-time target specifications. 27922 27923 -- Macro: TARGET_CPU_CPP_BUILTINS () 27924 This function-like macro expands to a block of code that defines 27925 built-in preprocessor macros and assertions for the target CPU, 27926 using the functions 'builtin_define', 'builtin_define_std' and 27927 'builtin_assert'. When the front end calls this macro it provides 27928 a trailing semicolon, and since it has finished command line option 27929 processing your code can use those results freely. 27930 27931 'builtin_assert' takes a string in the form you pass to the 27932 command-line option '-A', such as 'cpu=mips', and creates the 27933 assertion. 'builtin_define' takes a string in the form accepted by 27934 option '-D' and unconditionally defines the macro. 27935 27936 'builtin_define_std' takes a string representing the name of an 27937 object-like macro. If it doesn't lie in the user's namespace, 27938 'builtin_define_std' defines it unconditionally. Otherwise, it 27939 defines a version with two leading underscores, and another version 27940 with two leading and trailing underscores, and defines the original 27941 only if an ISO standard was not requested on the command line. For 27942 example, passing 'unix' defines '__unix', '__unix__' and possibly 27943 'unix'; passing '_mips' defines '__mips', '__mips__' and possibly 27944 '_mips', and passing '_ABI64' defines only '_ABI64'. 27945 27946 You can also test for the C dialect being compiled. The variable 27947 'c_language' is set to one of 'clk_c', 'clk_cplusplus' or 27948 'clk_objective_c'. Note that if we are preprocessing assembler, 27949 this variable will be 'clk_c' but the function-like macro 27950 'preprocessing_asm_p()' will return true, so you might want to 27951 check for that first. If you need to check for strict ANSI, the 27952 variable 'flag_iso' can be used. The function-like macro 27953 'preprocessing_trad_p()' can be used to check for traditional 27954 preprocessing. 27955 27956 -- Macro: TARGET_OS_CPP_BUILTINS () 27957 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 27958 and is used for the target operating system instead. 27959 27960 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 27961 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 27962 and is used for the target object format. 'elfos.h' uses this 27963 macro to define '__ELF__', so you probably do not need to define it 27964 yourself. 27965 27966 -- Variable: extern int target_flags 27967 This variable is declared in 'options.h', which is included before 27968 any target-specific headers. 27969 27970 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 27971 This variable specifies the initial value of 'target_flags'. Its 27972 default setting is 0. 27973 27974 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options 27975 *OPTS, struct gcc_options *OPTS_SET, const struct 27976 cl_decoded_option *DECODED, location_t LOC) 27977 This hook is called whenever the user specifies one of the 27978 target-specific options described by the '.opt' definition files 27979 (*note Options::). It has the opportunity to do some 27980 option-specific processing and should return true if the option is 27981 valid. The default definition does nothing but return true. 27982 27983 DECODED specifies the option and its arguments. OPTS and OPTS_SET 27984 are the 'gcc_options' structures to be used for storing option 27985 state, and LOC is the location at which the option was passed 27986 ('UNKNOWN_LOCATION' except for options passed via attributes). 27987 27988 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 27989 *ARG, int VALUE) 27990 This target hook is called whenever the user specifies one of the 27991 target-specific C language family options described by the '.opt' 27992 definition files(*note Options::). It has the opportunity to do 27993 some option-specific processing and should return true if the 27994 option is valid. The arguments are like for 27995 'TARGET_HANDLE_OPTION'. The default definition does nothing but 27996 return false. 27997 27998 In general, you should use 'TARGET_HANDLE_OPTION' to handle 27999 options. However, if processing an option requires routines that 28000 are only available in the C (and related language) front ends, then 28001 you should use 'TARGET_HANDLE_C_OPTION' instead. 28002 28003 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 28004 STRING) 28005 Targets may provide a string object type that can be used within 28006 and between C, C++ and their respective Objective-C dialects. A 28007 string object might, for example, embed encoding and length 28008 information. These objects are considered opaque to the compiler 28009 and handled as references. An ideal implementation makes the 28010 composition of the string object match that of the Objective-C 28011 'NSString' ('NXString' for GNUStep), allowing efficient 28012 interworking between C-only and Objective-C code. If a target 28013 implements string objects then this hook should return a reference 28014 to such an object constructed from the normal 'C' string 28015 representation provided in STRING. At present, the hook is used by 28016 Objective-C only, to obtain a common-format string object when the 28017 target provides one. 28018 28019 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE 28020 (const char *CLASSNAME) 28021 Declare that Objective C class CLASSNAME is referenced by the 28022 current TU. 28023 28024 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char 28025 *CLASSNAME) 28026 Declare that Objective C class CLASSNAME is defined by the current 28027 TU. 28028 28029 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 28030 STRINGREF) 28031 If a target implements string objects then this hook should return 28032 'true' if STRINGREF is a valid reference to such an object. 28033 28034 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 28035 FORMAT_ARG, tree ARGS_LIST) 28036 If a target implements string objects then this hook should should 28037 provide a facility to check the function arguments in ARGS_LIST 28038 against the format specifiers in FORMAT_ARG where the type of 28039 FORMAT_ARG is one recognized as a valid string reference type. 28040 28041 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 28042 This target function is similar to the hook 28043 'TARGET_OPTION_OVERRIDE' but is called when the optimize level is 28044 changed via an attribute or pragma or when it is reset at the end 28045 of the code affected by the attribute or pragma. It is not called 28046 at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is 28047 called so if you want to perform these actions then, you should 28048 have 'TARGET_OPTION_OVERRIDE' call 28049 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 28050 28051 -- Macro: C_COMMON_OVERRIDE_OPTIONS 28052 This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only 28053 used in the C language frontends (C, Objective-C, C++, 28054 Objective-C++) and so can be used to alter option flag variables 28055 which only exist in those frontends. 28056 28057 -- Common Target Hook: const struct default_options * 28058 TARGET_OPTION_OPTIMIZATION_TABLE 28059 Some machines may desire to change what optimizations are performed 28060 for various optimization levels. This variable, if defined, 28061 describes options to enable at particular sets of optimization 28062 levels. These options are processed once just after the 28063 optimization level is determined and before the remainder of the 28064 command options have been parsed, so may be overridden by other 28065 options passed explicitly. 28066 28067 This processing is run once at program startup and when the 28068 optimization options are changed via '#pragma GCC optimize' or by 28069 using the 'optimize' attribute. 28070 28071 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct 28072 gcc_options *OPTS) 28073 Set target-dependent initial values of fields in OPTS. 28074 28075 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void) 28076 Set target-dependent default values for '--param' settings, using 28077 calls to 'set_default_param_value'. 28078 28079 -- Macro: SWITCHABLE_TARGET 28080 Some targets need to switch between substantially different 28081 subtargets during compilation. For example, the MIPS target has 28082 one subtarget for the traditional MIPS architecture and another for 28083 MIPS16. Source code can switch between these two subarchitectures 28084 using the 'mips16' and 'nomips16' attributes. 28085 28086 Such subtargets can differ in things like the set of available 28087 registers, the set of available instructions, the costs of various 28088 operations, and so on. GCC caches a lot of this type of 28089 information in global variables, and recomputing them for each 28090 subtarget takes a significant amount of time. The compiler 28091 therefore provides a facility for maintaining several versions of 28092 the global variables and quickly switching between them; see 28093 'target-globals.h' for details. 28094 28095 Define this macro to 1 if your target needs this facility. The 28096 default is 0. 28097 28098 -- Target Hook: bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P 28099 (void) 28100 Returns true if the target supports IEEE 754 floating-point 28101 exceptions and rounding modes, false otherwise. This is intended 28102 to relate to the 'float' and 'double' types, but not necessarily 28103 'long double'. By default, returns true if the 'adddf3' 28104 instruction pattern is available and false otherwise, on the 28105 assumption that hardware floating point supports exceptions and 28106 rounding modes but software floating point does not. 28107 28108 28109File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 28110 2811117.4 Defining data structures for per-function information. 28112=========================================================== 28113 28114If the target needs to store information on a per-function basis, GCC 28115provides a macro and a couple of variables to allow this. Note, just 28116using statics to store the information is a bad idea, since GCC supports 28117nested functions, so you can be halfway through encoding one function 28118when another one comes along. 28119 28120 GCC defines a data structure called 'struct function' which contains 28121all of the data specific to an individual function. This structure 28122contains a field called 'machine' whose type is 'struct machine_function 28123*', which can be used by targets to point to their own specific data. 28124 28125 If a target needs per-function specific data it should define the type 28126'struct machine_function' and also the macro 'INIT_EXPANDERS'. This 28127macro should be used to initialize the function pointer 28128'init_machine_status'. This pointer is explained below. 28129 28130 One typical use of per-function, target specific data is to create an 28131RTX to hold the register containing the function's return address. This 28132RTX can then be used to implement the '__builtin_return_address' 28133function, for level 0. 28134 28135 Note--earlier implementations of GCC used a single data area to hold 28136all of the per-function information. Thus when processing of a nested 28137function began the old per-function data had to be pushed onto a stack, 28138and when the processing was finished, it had to be popped off the stack. 28139GCC used to provide function pointers called 'save_machine_status' and 28140'restore_machine_status' to handle the saving and restoring of the 28141target specific information. Since the single data area approach is no 28142longer used, these pointers are no longer supported. 28143 28144 -- Macro: INIT_EXPANDERS 28145 Macro called to initialize any target specific information. This 28146 macro is called once per function, before generation of any RTL has 28147 begun. The intention of this macro is to allow the initialization 28148 of the function pointer 'init_machine_status'. 28149 28150 -- Variable: void (*)(struct function *) init_machine_status 28151 If this function pointer is non-'NULL' it will be called once per 28152 function, before function compilation starts, in order to allow the 28153 target to perform any target specific initialization of the 'struct 28154 function' structure. It is intended that this would be used to 28155 initialize the 'machine' of that structure. 28156 28157 'struct machine_function' structures are expected to be freed by 28158 GC. Generally, any memory that they reference must be allocated by 28159 using GC allocation, including the structure itself. 28160 28161 28162File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 28163 2816417.5 Storage Layout 28165=================== 28166 28167Note that the definitions of the macros in this table which are sizes or 28168alignments measured in bits do not need to be constant. They can be C 28169expressions that refer to static variables, such as the 'target_flags'. 28170*Note Run-time Target::. 28171 28172 -- Macro: BITS_BIG_ENDIAN 28173 Define this macro to have the value 1 if the most significant bit 28174 in a byte has the lowest number; otherwise define it to have the 28175 value zero. This means that bit-field instructions count from the 28176 most significant bit. If the machine has no bit-field 28177 instructions, then this must still be defined, but it doesn't 28178 matter which value it is defined to. This macro need not be a 28179 constant. 28180 28181 This macro does not affect the way structure fields are packed into 28182 bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'. 28183 28184 -- Macro: BYTES_BIG_ENDIAN 28185 Define this macro to have the value 1 if the most significant byte 28186 in a word has the lowest number. This macro need not be a 28187 constant. 28188 28189 -- Macro: WORDS_BIG_ENDIAN 28190 Define this macro to have the value 1 if, in a multiword object, 28191 the most significant word has the lowest number. This applies to 28192 both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if 28193 the order of words in memory is not the same as the order in 28194 registers. This macro need not be a constant. 28195 28196 -- Macro: REG_WORDS_BIG_ENDIAN 28197 On some machines, the order of words in a multiword object differs 28198 between registers in memory. In such a situation, define this 28199 macro to describe the order of words in a register. The macro 28200 'WORDS_BIG_ENDIAN' controls the order of words in memory. 28201 28202 -- Macro: FLOAT_WORDS_BIG_ENDIAN 28203 Define this macro to have the value 1 if 'DFmode', 'XFmode' or 28204 'TFmode' floating point numbers are stored in memory with the word 28205 containing the sign bit at the lowest address; otherwise define it 28206 to have the value 0. This macro need not be a constant. 28207 28208 You need not define this macro if the ordering is the same as for 28209 multi-word integers. 28210 28211 -- Macro: BITS_PER_WORD 28212 Number of bits in a word. If you do not define this macro, the 28213 default is 'BITS_PER_UNIT * UNITS_PER_WORD'. 28214 28215 -- Macro: MAX_BITS_PER_WORD 28216 Maximum number of bits in a word. If this is undefined, the 28217 default is 'BITS_PER_WORD'. Otherwise, it is the constant value 28218 that is the largest value that 'BITS_PER_WORD' can have at 28219 run-time. 28220 28221 -- Macro: UNITS_PER_WORD 28222 Number of storage units in a word; normally the size of a 28223 general-purpose register, a power of two from 1 or 8. 28224 28225 -- Macro: MIN_UNITS_PER_WORD 28226 Minimum number of units in a word. If this is undefined, the 28227 default is 'UNITS_PER_WORD'. Otherwise, it is the constant value 28228 that is the smallest value that 'UNITS_PER_WORD' can have at 28229 run-time. 28230 28231 -- Macro: POINTER_SIZE 28232 Width of a pointer, in bits. You must specify a value no wider 28233 than the width of 'Pmode'. If it is not equal to the width of 28234 'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'. If you do not 28235 specify a value the default is 'BITS_PER_WORD'. 28236 28237 -- Macro: POINTERS_EXTEND_UNSIGNED 28238 A C expression that determines how pointers should be extended from 28239 'ptr_mode' to either 'Pmode' or 'word_mode'. It is greater than 28240 zero if pointers should be zero-extended, zero if they should be 28241 sign-extended, and negative if some other sort of conversion is 28242 needed. In the last case, the extension is done by the target's 28243 'ptr_extend' instruction. 28244 28245 You need not define this macro if the 'ptr_mode', 'Pmode' and 28246 'word_mode' are all the same width. 28247 28248 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 28249 A macro to update M and UNSIGNEDP when an object whose type is TYPE 28250 and which has the specified mode and signedness is to be stored in 28251 a register. This macro is only called when TYPE is a scalar type. 28252 28253 On most RISC machines, which only have operations that operate on a 28254 full register, define this macro to set M to 'word_mode' if M is an 28255 integer mode narrower than 'BITS_PER_WORD'. In most cases, only 28256 integer modes should be widened because wider-precision 28257 floating-point operations are usually more expensive than their 28258 narrower counterparts. 28259 28260 For most machines, the macro definition does not change UNSIGNEDP. 28261 However, some machines, have instructions that preferentially 28262 handle either signed or unsigned quantities of certain modes. For 28263 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 28264 instructions sign-extend the result to 64 bits. On such machines, 28265 set UNSIGNEDP according to which kind of extension is more 28266 efficient. 28267 28268 Do not define this macro if it would never modify M. 28269 28270 -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree 28271 TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE, 28272 int FOR_RETURN) 28273 Like 'PROMOTE_MODE', but it is applied to outgoing function 28274 arguments or function return values. The target hook should return 28275 the new mode and possibly change '*PUNSIGNEDP' if the promotion 28276 should change signedness. This function is called only for scalar 28277 _or pointer_ types. 28278 28279 FOR_RETURN allows to distinguish the promotion of arguments and 28280 return values. If it is '1', a return value is being promoted and 28281 'TARGET_FUNCTION_VALUE' must perform the same promotions done here. 28282 If it is '2', the returned mode should be that of the register in 28283 which an incoming parameter is copied, or the outgoing result is 28284 computed; then the hook should return the same mode as 28285 'promote_mode', though the signedness may be different. 28286 28287 TYPE can be NULL when promoting function arguments of libcalls. 28288 28289 The default is to not promote arguments and return values. You can 28290 also define the hook to 28291 'default_promote_function_mode_always_promote' if you would like to 28292 apply the same rules given by 'PROMOTE_MODE'. 28293 28294 -- Macro: PARM_BOUNDARY 28295 Normal alignment required for function parameters on the stack, in 28296 bits. All stack parameters receive at least this much alignment 28297 regardless of data type. On most machines, this is the same as the 28298 size of an integer. 28299 28300 -- Macro: STACK_BOUNDARY 28301 Define this macro to the minimum alignment enforced by hardware for 28302 the stack pointer on this machine. The definition is a C 28303 expression for the desired alignment (measured in bits). This 28304 value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not 28305 defined. On most machines, this should be the same as 28306 'PARM_BOUNDARY'. 28307 28308 -- Macro: PREFERRED_STACK_BOUNDARY 28309 Define this macro if you wish to preserve a certain alignment for 28310 the stack pointer, greater than what the hardware enforces. The 28311 definition is a C expression for the desired alignment (measured in 28312 bits). This macro must evaluate to a value equal to or larger than 28313 'STACK_BOUNDARY'. 28314 28315 -- Macro: INCOMING_STACK_BOUNDARY 28316 Define this macro if the incoming stack boundary may be different 28317 from 'PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 28318 value equal to or larger than 'STACK_BOUNDARY'. 28319 28320 -- Macro: FUNCTION_BOUNDARY 28321 Alignment required for a function entry point, in bits. 28322 28323 -- Macro: BIGGEST_ALIGNMENT 28324 Biggest alignment that any data type can require on this machine, 28325 in bits. Note that this is not the biggest alignment that is 28326 supported, just the biggest alignment that, when violated, may 28327 cause a fault. 28328 28329 -- Target Hook: HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT 28330 If defined, this target hook specifies the absolute biggest 28331 alignment that a type or variable can have on this machine, 28332 otherwise, 'BIGGEST_ALIGNMENT' is used. 28333 28334 -- Macro: MALLOC_ABI_ALIGNMENT 28335 Alignment, in bits, a C conformant malloc implementation has to 28336 provide. If not defined, the default value is 'BITS_PER_WORD'. 28337 28338 -- Macro: ATTRIBUTE_ALIGNED_VALUE 28339 Alignment used by the '__attribute__ ((aligned))' construct. If 28340 not defined, the default value is 'BIGGEST_ALIGNMENT'. 28341 28342 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 28343 If defined, the smallest alignment, in bits, that can be given to 28344 an object that can be referenced in one operation, without 28345 disturbing any nearby object. Normally, this is 'BITS_PER_UNIT', 28346 but may be larger on machines that don't have byte or half-word 28347 store operations. 28348 28349 -- Macro: BIGGEST_FIELD_ALIGNMENT 28350 Biggest alignment that any structure or union field can require on 28351 this machine, in bits. If defined, this overrides 28352 'BIGGEST_ALIGNMENT' for structure and union fields only, unless the 28353 field alignment has been set by the '__attribute__ ((aligned (N)))' 28354 construct. 28355 28356 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 28357 An expression for the alignment of a structure field FIELD if the 28358 alignment computed in the usual way (including applying of 28359 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the alignment) 28360 is COMPUTED. It overrides alignment only if the field alignment 28361 has not been set by the '__attribute__ ((aligned (N)))' construct. 28362 28363 -- Macro: MAX_STACK_ALIGNMENT 28364 Biggest stack alignment guaranteed by the backend. Use this macro 28365 to specify the maximum alignment of a variable on stack. 28366 28367 If not defined, the default value is 'STACK_BOUNDARY'. 28368 28369 -- Macro: MAX_OFILE_ALIGNMENT 28370 Biggest alignment supported by the object file format of this 28371 machine. Use this macro to limit the alignment which can be 28372 specified using the '__attribute__ ((aligned (N)))' construct. If 28373 not defined, the default value is 'BIGGEST_ALIGNMENT'. 28374 28375 On systems that use ELF, the default (in 'config/elfos.h') is the 28376 largest supported 32-bit ELF section alignment representable on a 28377 32-bit host e.g. '(((uint64_t) 1 << 28) * 8)'. On 32-bit ELF the 28378 largest supported section alignment in bits is '(0x80000000 * 8)', 28379 but this is not representable on 32-bit hosts. 28380 28381 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 28382 If defined, a C expression to compute the alignment for a variable 28383 in the static store. TYPE is the data type, and BASIC-ALIGN is the 28384 alignment that the object would ordinarily have. The value of this 28385 macro is used instead of that alignment to align the object. 28386 28387 If this macro is not defined, then BASIC-ALIGN is used. 28388 28389 One use of this macro is to increase alignment of medium-size data 28390 to make it all fit in fewer cache lines. Another is to cause 28391 character arrays to be word-aligned so that 'strcpy' calls that 28392 copy constants to character arrays can be done inline. 28393 28394 -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN) 28395 Similar to 'DATA_ALIGNMENT', but for the cases where the ABI 28396 mandates some alignment increase, instead of optimization only 28397 purposes. E.g. AMD x86-64 psABI says that variables with array 28398 type larger than 15 bytes must be aligned to 16 byte boundaries. 28399 28400 If this macro is not defined, then BASIC-ALIGN is used. 28401 28402 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 28403 If defined, a C expression to compute the alignment given to a 28404 constant that is being placed in memory. CONSTANT is the constant 28405 and BASIC-ALIGN is the alignment that the object would ordinarily 28406 have. The value of this macro is used instead of that alignment to 28407 align the object. 28408 28409 If this macro is not defined, then BASIC-ALIGN is used. 28410 28411 The typical use of this macro is to increase alignment for string 28412 constants to be word aligned so that 'strcpy' calls that copy 28413 constants can be done inline. 28414 28415 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 28416 If defined, a C expression to compute the alignment for a variable 28417 in the local store. TYPE is the data type, and BASIC-ALIGN is the 28418 alignment that the object would ordinarily have. The value of this 28419 macro is used instead of that alignment to align the object. 28420 28421 If this macro is not defined, then BASIC-ALIGN is used. 28422 28423 One use of this macro is to increase alignment of medium-size data 28424 to make it all fit in fewer cache lines. 28425 28426 If the value of this macro has a type, it should be an unsigned 28427 type. 28428 28429 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE) 28430 This hook can be used to define the alignment for a vector of type 28431 TYPE, in order to comply with a platform ABI. The default is to 28432 require natural alignment for vector types. The alignment returned 28433 by this hook must be a power-of-two multiple of the default 28434 alignment of the vector element type. 28435 28436 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 28437 If defined, a C expression to compute the alignment for stack slot. 28438 TYPE is the data type, MODE is the widest mode available, and 28439 BASIC-ALIGN is the alignment that the slot would ordinarily have. 28440 The value of this macro is used instead of that alignment to align 28441 the slot. 28442 28443 If this macro is not defined, then BASIC-ALIGN is used when TYPE is 28444 'NULL'. Otherwise, 'LOCAL_ALIGNMENT' will be used. 28445 28446 This macro is to set alignment of stack slot to the maximum 28447 alignment of all possible modes which the slot may have. 28448 28449 If the value of this macro has a type, it should be an unsigned 28450 type. 28451 28452 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 28453 If defined, a C expression to compute the alignment for a local 28454 variable DECL. 28455 28456 If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE 28457 (DECL), DECL_ALIGN (DECL))' is used. 28458 28459 One use of this macro is to increase alignment of medium-size data 28460 to make it all fit in fewer cache lines. 28461 28462 If the value of this macro has a type, it should be an unsigned 28463 type. 28464 28465 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 28466 If defined, a C expression to compute the minimum required 28467 alignment for dynamic stack realignment purposes for EXP (a type or 28468 decl), MODE, assuming normal alignment ALIGN. 28469 28470 If this macro is not defined, then ALIGN will be used. 28471 28472 -- Macro: EMPTY_FIELD_BOUNDARY 28473 Alignment in bits to be given to a structure bit-field that follows 28474 an empty field such as 'int : 0;'. 28475 28476 If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 28477 28478 -- Macro: STRUCTURE_SIZE_BOUNDARY 28479 Number of bits which any structure or union's size must be a 28480 multiple of. Each structure or union's size is rounded up to a 28481 multiple of this. 28482 28483 If you do not define this macro, the default is the same as 28484 'BITS_PER_UNIT'. 28485 28486 -- Macro: STRICT_ALIGNMENT 28487 Define this macro to be the value 1 if instructions will fail to 28488 work if given data not on the nominal alignment. If instructions 28489 will merely go slower in that case, define this macro as 0. 28490 28491 -- Macro: PCC_BITFIELD_TYPE_MATTERS 28492 Define this if you wish to imitate the way many other C compilers 28493 handle alignment of bit-fields and the structures that contain 28494 them. 28495 28496 The behavior is that the type written for a named bit-field ('int', 28497 'short', or other integer type) imposes an alignment for the entire 28498 structure, as if the structure really did contain an ordinary field 28499 of that type. In addition, the bit-field is placed within the 28500 structure so that it would fit within such a field, not crossing a 28501 boundary for it. 28502 28503 Thus, on most machines, a named bit-field whose type is written as 28504 'int' would not cross a four-byte boundary, and would force 28505 four-byte alignment for the whole structure. (The alignment used 28506 may not be four bytes; it is controlled by the other alignment 28507 parameters.) 28508 28509 An unnamed bit-field will not affect the alignment of the 28510 containing structure. 28511 28512 If the macro is defined, its definition should be a C expression; a 28513 nonzero value for the expression enables this behavior. 28514 28515 Note that if this macro is not defined, or its value is zero, some 28516 bit-fields may cross more than one alignment boundary. The 28517 compiler can support such references if there are 'insv', 'extv', 28518 and 'extzv' insns that can directly reference memory. 28519 28520 The other known way of making bit-fields work is to define 28521 'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'. Then 28522 every structure can be accessed with fullwords. 28523 28524 Unless the machine has bit-field instructions or you define 28525 'STRUCTURE_SIZE_BOUNDARY' that way, you must define 28526 'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 28527 28528 If your aim is to make GCC use the same conventions for laying out 28529 bit-fields as are used by another compiler, here is how to 28530 investigate what the other compiler does. Compile and run this 28531 program: 28532 28533 struct foo1 28534 { 28535 char x; 28536 char :0; 28537 char y; 28538 }; 28539 28540 struct foo2 28541 { 28542 char x; 28543 int :0; 28544 char y; 28545 }; 28546 28547 main () 28548 { 28549 printf ("Size of foo1 is %d\n", 28550 sizeof (struct foo1)); 28551 printf ("Size of foo2 is %d\n", 28552 sizeof (struct foo2)); 28553 exit (0); 28554 } 28555 28556 If this prints 2 and 5, then the compiler's behavior is what you 28557 would get from 'PCC_BITFIELD_TYPE_MATTERS'. 28558 28559 -- Macro: BITFIELD_NBYTES_LIMITED 28560 Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 28561 to aligning a bit-field within the structure. 28562 28563 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 28564 When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 28565 whether unnamed bitfields affect the alignment of the containing 28566 structure. The hook should return true if the structure should 28567 inherit the alignment requirements of an unnamed bitfield's type. 28568 28569 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 28570 This target hook should return 'true' if accesses to volatile 28571 bitfields should use the narrowest mode possible. It should return 28572 'false' if these accesses should use the bitfield container type. 28573 28574 The default is 'false'. 28575 28576 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD, 28577 machine_mode MODE) 28578 Return true if a structure, union or array containing FIELD should 28579 be accessed using 'BLKMODE'. 28580 28581 If FIELD is the only field in the structure, MODE is its mode, 28582 otherwise MODE is VOIDmode. MODE is provided in the case where 28583 structures of one field would require the structure's mode to 28584 retain the field's mode. 28585 28586 Normally, this is not needed. 28587 28588 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 28589 Define this macro as an expression for the alignment of a type 28590 (given by TYPE as a tree node) if the alignment computed in the 28591 usual way is COMPUTED and the alignment explicitly specified was 28592 SPECIFIED. 28593 28594 The default is to use SPECIFIED if it is larger; otherwise, use the 28595 smaller of COMPUTED and 'BIGGEST_ALIGNMENT' 28596 28597 -- Macro: MAX_FIXED_MODE_SIZE 28598 An integer expression for the size in bits of the largest integer 28599 machine mode that should actually be used. All integer machine 28600 modes of this size or smaller can be used for structures and unions 28601 with the appropriate sizes. If this macro is undefined, 28602 'GET_MODE_BITSIZE (DImode)' is assumed. 28603 28604 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 28605 If defined, an expression of type 'machine_mode' that specifies the 28606 mode of the save area operand of a 'save_stack_LEVEL' named pattern 28607 (*note Standard Names::). SAVE_LEVEL is one of 'SAVE_BLOCK', 28608 'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three 28609 named patterns is having its mode specified. 28610 28611 You need not define this macro if it always returns 'Pmode'. You 28612 would most commonly define this macro if the 'save_stack_LEVEL' 28613 patterns need to support both a 32- and a 64-bit mode. 28614 28615 -- Macro: STACK_SIZE_MODE 28616 If defined, an expression of type 'machine_mode' that specifies the 28617 mode of the size increment operand of an 'allocate_stack' named 28618 pattern (*note Standard Names::). 28619 28620 You need not define this macro if it always returns 'word_mode'. 28621 You would most commonly define this macro if the 'allocate_stack' 28622 pattern needs to support both a 32- and a 64-bit mode. 28623 28624 -- Target Hook: machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 28625 This target hook should return the mode to be used for the return 28626 value of compare instructions expanded to libgcc calls. If not 28627 defined 'word_mode' is returned which is the right choice for a 28628 majority of targets. 28629 28630 -- Target Hook: machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 28631 This target hook should return the mode to be used for the shift 28632 count operand of shift instructions expanded to libgcc calls. If 28633 not defined 'word_mode' is returned which is the right choice for a 28634 majority of targets. 28635 28636 -- Target Hook: machine_mode TARGET_UNWIND_WORD_MODE (void) 28637 Return machine mode to be used for '_Unwind_Word' type. The 28638 default is to use 'word_mode'. 28639 28640 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 28641 RECORD_TYPE) 28642 This target hook returns 'true' if bit-fields in the given 28643 RECORD_TYPE are to be laid out following the rules of Microsoft 28644 Visual C/C++, namely: (i) a bit-field won't share the same storage 28645 unit with the previous bit-field if their underlying types have 28646 different sizes, and the bit-field will be aligned to the highest 28647 alignment of the underlying types of itself and of the previous 28648 bit-field; (ii) a zero-sized bit-field will affect the alignment of 28649 the whole enclosing structure, even if it is unnamed; except that 28650 (iii) a zero-sized bit-field will be disregarded unless it follows 28651 another bit-field of nonzero size. If this hook returns 'true', 28652 other macros that control bit-field layout are ignored. 28653 28654 When a bit-field is inserted into a packed record, the whole size 28655 of the underlying type is used by one or more same-size adjacent 28656 bit-fields (that is, if its long:3, 32 bits is used in the record, 28657 and any additional adjacent long bit-fields are packed into the 28658 same chunk of 32 bits. However, if the size changes, a new field 28659 of that size is allocated). In an unpacked record, this is the 28660 same as using alignment, but not equivalent when packing. 28661 28662 If both MS bit-fields and '__attribute__((packed))' are used, the 28663 latter will take precedence. If '__attribute__((packed))' is used 28664 on a single field when MS bit-fields are in use, it will take 28665 precedence for that field, but the alignment of the rest of the 28666 structure may affect its placement. 28667 28668 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 28669 Returns true if the target supports decimal floating point. 28670 28671 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 28672 Returns true if the target supports fixed-point arithmetic. 28673 28674 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 28675 This hook is called just before expansion into rtl, allowing the 28676 target to perform additional initializations or analysis before the 28677 expansion. For example, the rs6000 port uses it to allocate a 28678 scratch stack slot for use in copying SDmode values between memory 28679 and floating point registers whenever the function being expanded 28680 has any SDmode usage. 28681 28682 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 28683 This hook allows the backend to perform additional instantiations 28684 on rtl that are not actually in any insns yet, but will be later. 28685 28686 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 28687 If your target defines any fundamental types, or any types your 28688 target uses should be mangled differently from the default, define 28689 this hook to return the appropriate encoding for these types as 28690 part of a C++ mangled name. The TYPE argument is the tree 28691 structure representing the type to be mangled. The hook may be 28692 applied to trees which are not target-specific fundamental types; 28693 it should return 'NULL' for all such types, as well as arguments it 28694 does not recognize. If the return value is not 'NULL', it must 28695 point to a statically-allocated string constant. 28696 28697 Target-specific fundamental types might be new fundamental types or 28698 qualified versions of ordinary fundamental types. Encode new 28699 fundamental types as 'u N NAME', where NAME is the name used for 28700 the type in source code, and N is the length of NAME in decimal. 28701 Encode qualified versions of ordinary types as 'U N NAME CODE', 28702 where NAME is the name used for the type qualifier in source code, 28703 N is the length of NAME as above, and CODE is the code used to 28704 represent the unqualified version of this type. (See 28705 'write_builtin_type' in 'cp/mangle.c' for the list of codes.) In 28706 both cases the spaces are for clarity; do not include any spaces in 28707 your string. 28708 28709 This hook is applied to types prior to typedef resolution. If the 28710 mangled name for a particular type depends only on that type's main 28711 variant, you can perform typedef resolution yourself using 28712 'TYPE_MAIN_VARIANT' before mangling. 28713 28714 The default version of this hook always returns 'NULL', which is 28715 appropriate for a target that does not define any new fundamental 28716 types. 28717 28718 28719File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 28720 2872117.6 Layout of Source Language Data Types 28722========================================= 28723 28724These macros define the sizes and other characteristics of the standard 28725basic data types used in programs being compiled. Unlike the macros in 28726the previous section, these apply to specific features of C and related 28727languages, rather than to fundamental aspects of storage layout. 28728 28729 -- Macro: INT_TYPE_SIZE 28730 A C expression for the size in bits of the type 'int' on the target 28731 machine. If you don't define this, the default is one word. 28732 28733 -- Macro: SHORT_TYPE_SIZE 28734 A C expression for the size in bits of the type 'short' on the 28735 target machine. If you don't define this, the default is half a 28736 word. (If this would be less than one storage unit, it is rounded 28737 up to one unit.) 28738 28739 -- Macro: LONG_TYPE_SIZE 28740 A C expression for the size in bits of the type 'long' on the 28741 target machine. If you don't define this, the default is one word. 28742 28743 -- Macro: ADA_LONG_TYPE_SIZE 28744 On some machines, the size used for the Ada equivalent of the type 28745 'long' by a native Ada compiler differs from that used by C. In 28746 that situation, define this macro to be a C expression to be used 28747 for the size of that type. If you don't define this, the default 28748 is the value of 'LONG_TYPE_SIZE'. 28749 28750 -- Macro: LONG_LONG_TYPE_SIZE 28751 A C expression for the size in bits of the type 'long long' on the 28752 target machine. If you don't define this, the default is two 28753 words. If you want to support GNU Ada on your machine, the value 28754 of this macro must be at least 64. 28755 28756 -- Macro: CHAR_TYPE_SIZE 28757 A C expression for the size in bits of the type 'char' on the 28758 target machine. If you don't define this, the default is 28759 'BITS_PER_UNIT'. 28760 28761 -- Macro: BOOL_TYPE_SIZE 28762 A C expression for the size in bits of the C++ type 'bool' and C99 28763 type '_Bool' on the target machine. If you don't define this, and 28764 you probably shouldn't, the default is 'CHAR_TYPE_SIZE'. 28765 28766 -- Macro: FLOAT_TYPE_SIZE 28767 A C expression for the size in bits of the type 'float' on the 28768 target machine. If you don't define this, the default is one word. 28769 28770 -- Macro: DOUBLE_TYPE_SIZE 28771 A C expression for the size in bits of the type 'double' on the 28772 target machine. If you don't define this, the default is two 28773 words. 28774 28775 -- Macro: LONG_DOUBLE_TYPE_SIZE 28776 A C expression for the size in bits of the type 'long double' on 28777 the target machine. If you don't define this, the default is two 28778 words. 28779 28780 -- Macro: SHORT_FRACT_TYPE_SIZE 28781 A C expression for the size in bits of the type 'short _Fract' on 28782 the target machine. If you don't define this, the default is 28783 'BITS_PER_UNIT'. 28784 28785 -- Macro: FRACT_TYPE_SIZE 28786 A C expression for the size in bits of the type '_Fract' on the 28787 target machine. If you don't define this, the default is 28788 'BITS_PER_UNIT * 2'. 28789 28790 -- Macro: LONG_FRACT_TYPE_SIZE 28791 A C expression for the size in bits of the type 'long _Fract' on 28792 the target machine. If you don't define this, the default is 28793 'BITS_PER_UNIT * 4'. 28794 28795 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 28796 A C expression for the size in bits of the type 'long long _Fract' 28797 on the target machine. If you don't define this, the default is 28798 'BITS_PER_UNIT * 8'. 28799 28800 -- Macro: SHORT_ACCUM_TYPE_SIZE 28801 A C expression for the size in bits of the type 'short _Accum' on 28802 the target machine. If you don't define this, the default is 28803 'BITS_PER_UNIT * 2'. 28804 28805 -- Macro: ACCUM_TYPE_SIZE 28806 A C expression for the size in bits of the type '_Accum' on the 28807 target machine. If you don't define this, the default is 28808 'BITS_PER_UNIT * 4'. 28809 28810 -- Macro: LONG_ACCUM_TYPE_SIZE 28811 A C expression for the size in bits of the type 'long _Accum' on 28812 the target machine. If you don't define this, the default is 28813 'BITS_PER_UNIT * 8'. 28814 28815 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 28816 A C expression for the size in bits of the type 'long long _Accum' 28817 on the target machine. If you don't define this, the default is 28818 'BITS_PER_UNIT * 16'. 28819 28820 -- Macro: LIBGCC2_GNU_PREFIX 28821 This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target 28822 hook and should be defined if that hook is overriden to be true. 28823 It causes function names in libgcc to be changed to use a '__gnu_' 28824 prefix for their name rather than the default '__'. A port which 28825 uses this macro should also arrange to use 't-gnu-prefix' in the 28826 libgcc 'config.host'. 28827 28828 -- Macro: TARGET_FLT_EVAL_METHOD 28829 A C expression for the value for 'FLT_EVAL_METHOD' in 'float.h', 28830 assuming, if applicable, that the floating-point control word is in 28831 its default state. If you do not define this macro the value of 28832 'FLT_EVAL_METHOD' will be zero. 28833 28834 -- Macro: WIDEST_HARDWARE_FP_SIZE 28835 A C expression for the size in bits of the widest floating-point 28836 format supported by the hardware. If you define this macro, you 28837 must specify a value less than or equal to the value of 28838 'LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 28839 value of 'LONG_DOUBLE_TYPE_SIZE' is the default. 28840 28841 -- Macro: DEFAULT_SIGNED_CHAR 28842 An expression whose value is 1 or 0, according to whether the type 28843 'char' should be signed or unsigned by default. The user can 28844 always override this default with the options '-fsigned-char' and 28845 '-funsigned-char'. 28846 28847 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 28848 This target hook should return true if the compiler should give an 28849 'enum' type only as many bytes as it takes to represent the range 28850 of possible values of that type. It should return false if all 28851 'enum' types should be allocated like 'int'. 28852 28853 The default is to return false. 28854 28855 -- Macro: SIZE_TYPE 28856 A C expression for a string describing the name of the data type to 28857 use for size values. The typedef name 'size_t' is defined using 28858 the contents of the string. 28859 28860 The string can contain more than one keyword. If so, separate them 28861 with spaces, and write first any length keyword, then 'unsigned' if 28862 appropriate, and finally 'int'. The string must exactly match one 28863 of the data type names defined in the function 28864 'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'. 28865 You may not omit 'int' or change the order--that would cause the 28866 compiler to crash on startup. 28867 28868 If you don't define this macro, the default is '"long unsigned 28869 int"'. 28870 28871 -- Macro: SIZETYPE 28872 GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype' 28873 and 'sbitsizetype') for expressions dealing with size. This macro 28874 is a C expression for a string describing the name of the data type 28875 from which the precision of 'sizetype' is extracted. 28876 28877 The string has the same restrictions as 'SIZE_TYPE' string. 28878 28879 If you don't define this macro, the default is 'SIZE_TYPE'. 28880 28881 -- Macro: PTRDIFF_TYPE 28882 A C expression for a string describing the name of the data type to 28883 use for the result of subtracting two pointers. The typedef name 28884 'ptrdiff_t' is defined using the contents of the string. See 28885 'SIZE_TYPE' above for more information. 28886 28887 If you don't define this macro, the default is '"long int"'. 28888 28889 -- Macro: WCHAR_TYPE 28890 A C expression for a string describing the name of the data type to 28891 use for wide characters. The typedef name 'wchar_t' is defined 28892 using the contents of the string. See 'SIZE_TYPE' above for more 28893 information. 28894 28895 If you don't define this macro, the default is '"int"'. 28896 28897 -- Macro: WCHAR_TYPE_SIZE 28898 A C expression for the size in bits of the data type for wide 28899 characters. This is used in 'cpp', which cannot make use of 28900 'WCHAR_TYPE'. 28901 28902 -- Macro: WINT_TYPE 28903 A C expression for a string describing the name of the data type to 28904 use for wide characters passed to 'printf' and returned from 28905 'getwc'. The typedef name 'wint_t' is defined using the contents 28906 of the string. See 'SIZE_TYPE' above for more information. 28907 28908 If you don't define this macro, the default is '"unsigned int"'. 28909 28910 -- Macro: INTMAX_TYPE 28911 A C expression for a string describing the name of the data type 28912 that can represent any value of any standard or extended signed 28913 integer type. The typedef name 'intmax_t' is defined using the 28914 contents of the string. See 'SIZE_TYPE' above for more 28915 information. 28916 28917 If you don't define this macro, the default is the first of 28918 '"int"', '"long int"', or '"long long int"' that has as much 28919 precision as 'long long int'. 28920 28921 -- Macro: UINTMAX_TYPE 28922 A C expression for a string describing the name of the data type 28923 that can represent any value of any standard or extended unsigned 28924 integer type. The typedef name 'uintmax_t' is defined using the 28925 contents of the string. See 'SIZE_TYPE' above for more 28926 information. 28927 28928 If you don't define this macro, the default is the first of 28929 '"unsigned int"', '"long unsigned int"', or '"long long unsigned 28930 int"' that has as much precision as 'long long unsigned int'. 28931 28932 -- Macro: SIG_ATOMIC_TYPE 28933 -- Macro: INT8_TYPE 28934 -- Macro: INT16_TYPE 28935 -- Macro: INT32_TYPE 28936 -- Macro: INT64_TYPE 28937 -- Macro: UINT8_TYPE 28938 -- Macro: UINT16_TYPE 28939 -- Macro: UINT32_TYPE 28940 -- Macro: UINT64_TYPE 28941 -- Macro: INT_LEAST8_TYPE 28942 -- Macro: INT_LEAST16_TYPE 28943 -- Macro: INT_LEAST32_TYPE 28944 -- Macro: INT_LEAST64_TYPE 28945 -- Macro: UINT_LEAST8_TYPE 28946 -- Macro: UINT_LEAST16_TYPE 28947 -- Macro: UINT_LEAST32_TYPE 28948 -- Macro: UINT_LEAST64_TYPE 28949 -- Macro: INT_FAST8_TYPE 28950 -- Macro: INT_FAST16_TYPE 28951 -- Macro: INT_FAST32_TYPE 28952 -- Macro: INT_FAST64_TYPE 28953 -- Macro: UINT_FAST8_TYPE 28954 -- Macro: UINT_FAST16_TYPE 28955 -- Macro: UINT_FAST32_TYPE 28956 -- Macro: UINT_FAST64_TYPE 28957 -- Macro: INTPTR_TYPE 28958 -- Macro: UINTPTR_TYPE 28959 C expressions for the standard types 'sig_atomic_t', 'int8_t', 28960 'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 28961 'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t', 28962 'int_least64_t', 'uint_least8_t', 'uint_least16_t', 28963 'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 28964 'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 28965 'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'. See 28966 'SIZE_TYPE' above for more information. 28967 28968 If any of these macros evaluates to a null pointer, the 28969 corresponding type is not supported; if GCC is configured to 28970 provide '<stdint.h>' in such a case, the header provided may not 28971 conform to C99, depending on the type in question. The defaults 28972 for all of these macros are null pointers. 28973 28974 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 28975 The C++ compiler represents a pointer-to-member-function with a 28976 struct that looks like: 28977 28978 struct { 28979 union { 28980 void (*fn)(); 28981 ptrdiff_t vtable_index; 28982 }; 28983 ptrdiff_t delta; 28984 }; 28985 28986 The C++ compiler must use one bit to indicate whether the function 28987 that will be called through a pointer-to-member-function is 28988 virtual. Normally, we assume that the low-order bit of a function 28989 pointer must always be zero. Then, by ensuring that the 28990 vtable_index is odd, we can distinguish which variant of the union 28991 is in use. But, on some platforms function pointers can be odd, 28992 and so this doesn't work. In that case, we use the low-order bit 28993 of the 'delta' field, and shift the remainder of the 'delta' field 28994 to the left. 28995 28996 GCC will automatically make the right selection about where to 28997 store this bit using the 'FUNCTION_BOUNDARY' setting for your 28998 platform. However, some platforms such as ARM/Thumb have 28999 'FUNCTION_BOUNDARY' set such that functions always start at even 29000 addresses, but the lowest bit of pointers to functions indicate 29001 whether the function at that address is in ARM or Thumb mode. If 29002 this is the case of your architecture, you should define this macro 29003 to 'ptrmemfunc_vbit_in_delta'. 29004 29005 In general, you should not have to define this macro. On 29006 architectures in which function addresses are always even, 29007 according to 'FUNCTION_BOUNDARY', GCC will automatically define 29008 this macro to 'ptrmemfunc_vbit_in_pfn'. 29009 29010 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 29011 Normally, the C++ compiler uses function pointers in vtables. This 29012 macro allows the target to change to use "function descriptors" 29013 instead. Function descriptors are found on targets for whom a 29014 function pointer is actually a small data structure. Normally the 29015 data structure consists of the actual code address plus a data 29016 pointer to which the function's data is relative. 29017 29018 If vtables are used, the value of this macro should be the number 29019 of words that the function descriptor occupies. 29020 29021 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 29022 By default, the vtable entries are void pointers, the so the 29023 alignment is the same as pointer alignment. The value of this 29024 macro specifies the alignment of the vtable entry in bits. It 29025 should be defined only when special alignment is necessary. */ 29026 29027 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 29028 There are a few non-descriptor entries in the vtable at offsets 29029 below zero. If these entries must be padded (say, to preserve the 29030 alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to 29031 the number of words in each data entry. 29032 29033 29034File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 29035 2903617.7 Register Usage 29037=================== 29038 29039This section explains how to describe what registers the target machine 29040has, and how (in general) they can be used. 29041 29042 The description of which registers a specific instruction can use is 29043done with register classes; see *note Register Classes::. For 29044information on using registers to access a stack frame, see *note Frame 29045Registers::. For passing values in registers, see *note Register 29046Arguments::. For returning values in registers, see *note Scalar 29047Return::. 29048 29049* Menu: 29050 29051* Register Basics:: Number and kinds of registers. 29052* Allocation Order:: Order in which registers are allocated. 29053* Values in Registers:: What kinds of values each reg can hold. 29054* Leaf Functions:: Renumbering registers for leaf functions. 29055* Stack Registers:: Handling a register stack such as 80387. 29056 29057 29058File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 29059 2906017.7.1 Basic Characteristics of Registers 29061----------------------------------------- 29062 29063Registers have various characteristics. 29064 29065 -- Macro: FIRST_PSEUDO_REGISTER 29066 Number of hardware registers known to the compiler. They receive 29067 numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo 29068 register's number really is assigned the number 29069 'FIRST_PSEUDO_REGISTER'. 29070 29071 -- Macro: FIXED_REGISTERS 29072 An initializer that says which registers are used for fixed 29073 purposes all throughout the compiled code and are therefore not 29074 available for general allocation. These would include the stack 29075 pointer, the frame pointer (except on machines where that can be 29076 used as a general register when no frame pointer is needed), the 29077 program counter on machines where that is considered one of the 29078 addressable registers, and any other numbered register with a 29079 standard use. 29080 29081 This information is expressed as a sequence of numbers, separated 29082 by commas and surrounded by braces. The Nth number is 1 if 29083 register N is fixed, 0 otherwise. 29084 29085 The table initialized from this macro, and the table initialized by 29086 the following one, may be overridden at run time either 29087 automatically, by the actions of the macro 29088 'CONDITIONAL_REGISTER_USAGE', or by the user with the command 29089 options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'. 29090 29091 -- Macro: CALL_USED_REGISTERS 29092 Like 'FIXED_REGISTERS' but has 1 for each register that is 29093 clobbered (in general) by function calls as well as for fixed 29094 registers. This macro therefore identifies the registers that are 29095 not available for general allocation of values that must live 29096 across function calls. 29097 29098 If a register has 0 in 'CALL_USED_REGISTERS', the compiler 29099 automatically saves it on function entry and restores it on 29100 function exit, if the register is used within the function. 29101 29102 -- Macro: CALL_REALLY_USED_REGISTERS 29103 Like 'CALL_USED_REGISTERS' except this macro doesn't require that 29104 the entire set of 'FIXED_REGISTERS' be included. 29105 ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS'). 29106 This macro is optional. If not specified, it defaults to the value 29107 of 'CALL_USED_REGISTERS'. 29108 29109 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 29110 A C expression that is nonzero if it is not permissible to store a 29111 value of mode MODE in hard register number REGNO across a call 29112 without some part of it being clobbered. For most machines this 29113 macro need not be defined. It is only required for machines that 29114 do not preserve the entire contents of a register across a call. 29115 29116 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void) 29117 This hook may conditionally modify five variables 'fixed_regs', 29118 'call_used_regs', 'global_regs', 'reg_names', and 29119 'reg_class_contents', to take into account any dependence of these 29120 register sets on target flags. The first three of these are of 29121 type 'char []' (interpreted as Boolean vectors). 'global_regs' is 29122 a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'. 29123 Before the macro is called, 'fixed_regs', 'call_used_regs', 29124 'reg_class_contents', and 'reg_names' have been initialized from 29125 'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and 29126 'REGISTER_NAMES', respectively. 'global_regs' has been cleared, 29127 and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG' 29128 command options have been applied. 29129 29130 If the usage of an entire class of registers depends on the target 29131 flags, you may indicate this to GCC by using this macro to modify 29132 'fixed_regs' and 'call_used_regs' to 1 for each of the registers in 29133 the classes which should not be used by GCC. Also make 29134 'define_register_constraint's return 'NO_REGS' for constraints that 29135 shouldn't be used. 29136 29137 (However, if this class is not included in 'GENERAL_REGS' and all 29138 of the insn patterns whose constraints permit this class are 29139 controlled by target switches, then GCC will automatically avoid 29140 using these registers when the target switches are opposed to 29141 them.) 29142 29143 -- Macro: INCOMING_REGNO (OUT) 29144 Define this macro if the target machine has register windows. This 29145 C expression returns the register number as seen by the called 29146 function corresponding to the register number OUT as seen by the 29147 calling function. Return OUT if register number OUT is not an 29148 outbound register. 29149 29150 -- Macro: OUTGOING_REGNO (IN) 29151 Define this macro if the target machine has register windows. This 29152 C expression returns the register number as seen by the calling 29153 function corresponding to the register number IN as seen by the 29154 called function. Return IN if register number IN is not an inbound 29155 register. 29156 29157 -- Macro: LOCAL_REGNO (REGNO) 29158 Define this macro if the target machine has register windows. This 29159 C expression returns true if the register is call-saved but is in 29160 the register window. Unlike most call-saved registers, such 29161 registers need not be explicitly restored on function exit or 29162 during non-local gotos. 29163 29164 -- Macro: PC_REGNUM 29165 If the program counter has a register number, define this as that 29166 register number. Otherwise, do not define it. 29167 29168 29169File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 29170 2917117.7.2 Order of Allocation of Registers 29172--------------------------------------- 29173 29174Registers are allocated in order. 29175 29176 -- Macro: REG_ALLOC_ORDER 29177 If defined, an initializer for a vector of integers, containing the 29178 numbers of hard registers in the order in which GCC should prefer 29179 to use them (from most preferred to least). 29180 29181 If this macro is not defined, registers are used lowest numbered 29182 first (all else being equal). 29183 29184 One use of this macro is on machines where the highest numbered 29185 registers must always be saved and the save-multiple-registers 29186 instruction supports only sequences of consecutive registers. On 29187 such machines, define 'REG_ALLOC_ORDER' to be an initializer that 29188 lists the highest numbered allocable register first. 29189 29190 -- Macro: ADJUST_REG_ALLOC_ORDER 29191 A C statement (sans semicolon) to choose the order in which to 29192 allocate hard registers for pseudo-registers local to a basic 29193 block. 29194 29195 Store the desired register order in the array 'reg_alloc_order'. 29196 Element 0 should be the register to allocate first; element 1, the 29197 next register; and so on. 29198 29199 The macro body should not assume anything about the contents of 29200 'reg_alloc_order' before execution of the macro. 29201 29202 On most machines, it is not necessary to define this macro. 29203 29204 -- Macro: HONOR_REG_ALLOC_ORDER 29205 Normally, IRA tries to estimate the costs for saving a register in 29206 the prologue and restoring it in the epilogue. This discourages it 29207 from using call-saved registers. If a machine wants to ensure that 29208 IRA allocates registers in the order given by REG_ALLOC_ORDER even 29209 if some call-saved registers appear earlier than call-used ones, 29210 then define this macro as a C expression to nonzero. Default is 0. 29211 29212 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 29213 In some case register allocation order is not enough for the 29214 Integrated Register Allocator (IRA) to generate a good code. If 29215 this macro is defined, it should return a floating point value 29216 based on REGNO. The cost of using REGNO for a pseudo will be 29217 increased by approximately the pseudo's usage frequency times the 29218 value returned by this macro. Not defining this macro is 29219 equivalent to having it always return '0.0'. 29220 29221 On most machines, it is not necessary to define this macro. 29222 29223 29224File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 29225 2922617.7.3 How Values Fit in Registers 29227---------------------------------- 29228 29229This section discusses the macros that describe which kinds of values 29230(specifically, which machine modes) each register can hold, and how many 29231consecutive registers are needed for a given mode. 29232 29233 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 29234 A C expression for the number of consecutive hard registers, 29235 starting at register number REGNO, required to hold a value of mode 29236 MODE. This macro must never return zero, even if a register cannot 29237 hold the requested mode - indicate that with HARD_REGNO_MODE_OK 29238 and/or CANNOT_CHANGE_MODE_CLASS instead. 29239 29240 On a machine where all registers are exactly one word, a suitable 29241 definition of this macro is 29242 29243 #define HARD_REGNO_NREGS(REGNO, MODE) \ 29244 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 29245 / UNITS_PER_WORD) 29246 29247 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 29248 A C expression that is nonzero if a value of mode MODE, stored in 29249 memory, ends with padding that causes it to take up more space than 29250 in registers starting at register number REGNO (as determined by 29251 multiplying GCC's notion of the size of the register when 29252 containing this mode by the number of registers returned by 29253 'HARD_REGNO_NREGS'). By default this is zero. 29254 29255 For example, if a floating-point value is stored in three 32-bit 29256 registers but takes up 128 bits in memory, then this would be 29257 nonzero. 29258 29259 This macros only needs to be defined if there are cases where 29260 'subreg_get_info' would otherwise wrongly determine that a 'subreg' 29261 can be represented by an offset to the register number, when in 29262 fact such a 'subreg' would contain some of the padding not stored 29263 in registers and so not be representable. 29264 29265 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 29266 For values of REGNO and MODE for which 29267 'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 29268 returning the greater number of registers required to hold the 29269 value including any padding. In the example above, the value would 29270 be four. 29271 29272 -- Macro: REGMODE_NATURAL_SIZE (MODE) 29273 Define this macro if the natural size of registers that hold values 29274 of mode MODE is not the word size. It is a C expression that 29275 should give the natural size in bytes for the specified mode. It 29276 is used by the register allocator to try to optimize its results. 29277 This happens for example on SPARC 64-bit where the natural size of 29278 floating-point registers is still 32-bit. 29279 29280 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 29281 A C expression that is nonzero if it is permissible to store a 29282 value of mode MODE in hard register number REGNO (or in several 29283 registers starting with that one). For a machine where all 29284 registers are equivalent, a suitable definition is 29285 29286 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 29287 29288 You need not include code to check for the numbers of fixed 29289 registers, because the allocation mechanism considers them to be 29290 always occupied. 29291 29292 On some machines, double-precision values must be kept in even/odd 29293 register pairs. You can implement that by defining this macro to 29294 reject odd register numbers for such modes. 29295 29296 The minimum requirement for a mode to be OK in a register is that 29297 the 'movMODE' instruction pattern support moves between the 29298 register and other hard register in the same class and that moving 29299 a value into the register and back out not alter it. 29300 29301 Since the same instruction used to move 'word_mode' will work for 29302 all narrower integer modes, it is not necessary on any machine for 29303 'HARD_REGNO_MODE_OK' to distinguish between these modes, provided 29304 you define patterns 'movhi', etc., to take advantage of this. This 29305 is useful because of the interaction between 'HARD_REGNO_MODE_OK' 29306 and 'MODES_TIEABLE_P'; it is very desirable for all integer modes 29307 to be tieable. 29308 29309 Many machines have special registers for floating point arithmetic. 29310 Often people assume that floating point machine modes are allowed 29311 only in floating point registers. This is not true. Any registers 29312 that can hold integers can safely _hold_ a floating point machine 29313 mode, whether or not floating arithmetic can be done on it in those 29314 registers. Integer move instructions can be used to move the 29315 values. 29316 29317 On some machines, though, the converse is true: fixed-point machine 29318 modes may not go in floating registers. This is true if the 29319 floating registers normalize any value stored in them, because 29320 storing a non-floating value there would garble it. In this case, 29321 'HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 29322 floating registers. But if the floating registers do not 29323 automatically normalize, if you can store any bit pattern in one 29324 and retrieve it unchanged without a trap, then any machine mode may 29325 go in a floating register, so you can define this macro to say so. 29326 29327 The primary significance of special floating registers is rather 29328 that they are the registers acceptable in floating point arithmetic 29329 instructions. However, this is of no concern to 29330 'HARD_REGNO_MODE_OK'. You handle it by writing the proper 29331 constraints for those instructions. 29332 29333 On some machines, the floating registers are especially slow to 29334 access, so that it is better to store a value in a stack frame than 29335 in such a register if floating point arithmetic is not being done. 29336 As long as the floating registers are not in class 'GENERAL_REGS', 29337 they will not be used unless some pattern's constraint asks for 29338 one. 29339 29340 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 29341 A C expression that is nonzero if it is OK to rename a hard 29342 register FROM to another hard register TO. 29343 29344 One common use of this macro is to prevent renaming of a register 29345 to another register that is not saved by a prologue in an interrupt 29346 handler. 29347 29348 The default is always nonzero. 29349 29350 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 29351 A C expression that is nonzero if a value of mode MODE1 is 29352 accessible in mode MODE2 without copying. 29353 29354 If 'HARD_REGNO_MODE_OK (R, MODE1)' and 'HARD_REGNO_MODE_OK (R, 29355 MODE2)' are always the same for any R, then 'MODES_TIEABLE_P 29356 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 29357 should define this macro to return zero unless some other mechanism 29358 ensures the accessibility of the value in a narrower mode. 29359 29360 You should define this macro to return nonzero in as many cases as 29361 possible since doing so will allow GCC to perform better register 29362 allocation. 29363 29364 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 29365 This target hook should return 'true' if it is OK to use a hard 29366 register REGNO as scratch reg in peephole2. 29367 29368 One common use of this macro is to prevent using of a register that 29369 is not saved by a prologue in an interrupt handler. 29370 29371 The default version of this hook always returns 'true'. 29372 29373 -- Macro: AVOID_CCMODE_COPIES 29374 Define this macro if the compiler should avoid copies to/from 29375 'CCmode' registers. You should only define this macro if support 29376 for copying to/from 'CCmode' is incomplete. 29377 29378 29379File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 29380 2938117.7.4 Handling Leaf Functions 29382------------------------------ 29383 29384On some machines, a leaf function (i.e., one which makes no calls) can 29385run more efficiently if it does not make its own register window. Often 29386this means it is required to receive its arguments in the registers 29387where they are passed by the caller, instead of the registers where they 29388would normally arrive. 29389 29390 The special treatment for leaf functions generally applies only when 29391other conditions are met; for example, often they may use only those 29392registers for its own variables and temporaries. We use the term "leaf 29393function" to mean a function that is suitable for this special handling, 29394so that functions with no calls are not necessarily "leaf functions". 29395 29396 GCC assigns register numbers before it knows whether the function is 29397suitable for leaf function treatment. So it needs to renumber the 29398registers in order to output a leaf function. The following macros 29399accomplish this. 29400 29401 -- Macro: LEAF_REGISTERS 29402 Name of a char vector, indexed by hard register number, which 29403 contains 1 for a register that is allowable in a candidate for leaf 29404 function treatment. 29405 29406 If leaf function treatment involves renumbering the registers, then 29407 the registers marked here should be the ones before 29408 renumbering--those that GCC would ordinarily allocate. The 29409 registers which will actually be used in the assembler code, after 29410 renumbering, should not be marked with 1 in this vector. 29411 29412 Define this macro only if the target machine offers a way to 29413 optimize the treatment of leaf functions. 29414 29415 -- Macro: LEAF_REG_REMAP (REGNO) 29416 A C expression whose value is the register number to which REGNO 29417 should be renumbered, when a function is treated as a leaf 29418 function. 29419 29420 If REGNO is a register number which should not appear in a leaf 29421 function before renumbering, then the expression should yield -1, 29422 which will cause the compiler to abort. 29423 29424 Define this macro only if the target machine offers a way to 29425 optimize the treatment of leaf functions, and registers need to be 29426 renumbered to do this. 29427 29428 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must 29429usually treat leaf functions specially. They can test the C variable 29430'current_function_is_leaf' which is nonzero for leaf functions. 29431'current_function_is_leaf' is set prior to local register allocation and 29432is valid for the remaining compiler passes. They can also test the C 29433variable 'current_function_uses_only_leaf_regs' which is nonzero for 29434leaf functions which only use leaf registers. 29435'current_function_uses_only_leaf_regs' is valid after all passes that 29436modify the instructions have been run and is only useful if 29437'LEAF_REGISTERS' is defined. 29438 29439 29440File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 29441 2944217.7.5 Registers That Form a Stack 29443---------------------------------- 29444 29445There are special features to handle computers where some of the 29446"registers" form a stack. Stack registers are normally written by 29447pushing onto the stack, and are numbered relative to the top of the 29448stack. 29449 29450 Currently, GCC can only handle one group of stack-like registers, and 29451they must be consecutively numbered. Furthermore, the existing support 29452for stack-like registers is specific to the 80387 floating point 29453coprocessor. If you have a new architecture that uses stack-like 29454registers, you will need to do substantial work on 'reg-stack.c' and 29455write your machine description to cooperate with it, as well as defining 29456these macros. 29457 29458 -- Macro: STACK_REGS 29459 Define this if the machine has any stack-like registers. 29460 29461 -- Macro: STACK_REG_COVER_CLASS 29462 This is a cover class containing the stack registers. Define this 29463 if the machine has any stack-like registers. 29464 29465 -- Macro: FIRST_STACK_REG 29466 The number of the first stack-like register. This one is the top 29467 of the stack. 29468 29469 -- Macro: LAST_STACK_REG 29470 The number of the last stack-like register. This one is the bottom 29471 of the stack. 29472 29473 29474File: gccint.info, Node: Register Classes, Next: Stack and Calling, Prev: Registers, Up: Target Macros 29475 2947617.8 Register Classes 29477===================== 29478 29479On many machines, the numbered registers are not all equivalent. For 29480example, certain registers may not be allowed for indexed addressing; 29481certain registers may not be allowed in some instructions. These 29482machine restrictions are described to the compiler using "register 29483classes". 29484 29485 You define a number of register classes, giving each one a name and 29486saying which of the registers belong to it. Then you can specify 29487register classes that are allowed as operands to particular instruction 29488patterns. 29489 29490 In general, each register will belong to several classes. In fact, one 29491class must be named 'ALL_REGS' and contain all the registers. Another 29492class must be named 'NO_REGS' and contain no registers. Often the union 29493of two classes will be another class; however, this is not required. 29494 29495 One of the classes must be named 'GENERAL_REGS'. There is nothing 29496terribly special about the name, but the operand constraint letters 'r' 29497and 'g' specify this class. If 'GENERAL_REGS' is the same as 29498'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'. 29499 29500 Order the classes so that if class X is contained in class Y then X has 29501a lower class number than Y. 29502 29503 The way classes other than 'GENERAL_REGS' are specified in operand 29504constraints is through machine-dependent operand constraint letters. 29505You can define such letters to correspond to various classes, then use 29506them in operand constraints. 29507 29508 You must define the narrowest register classes for allocatable 29509registers, so that each class either has no subclasses, or that for some 29510mode, the move cost between registers within the class is cheaper than 29511moving a register in the class to or from memory (*note Costs::). 29512 29513 You should define a class for the union of two classes whenever some 29514instruction allows both classes. For example, if an instruction allows 29515either a floating point (coprocessor) register or a general register for 29516a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS' 29517which includes both of them. Otherwise you will get suboptimal code, or 29518even internal compiler errors when reload cannot find a register in the 29519class computed via 'reg_class_subunion'. 29520 29521 You must also specify certain redundant information about the register 29522classes: for each class, which classes contain it and which ones are 29523contained in it; for each pair of classes, the largest class contained 29524in their union. 29525 29526 When a value occupying several consecutive registers is expected in a 29527certain class, all the registers used must belong to that class. 29528Therefore, register classes cannot be used to enforce a requirement for 29529a register pair to start with an even-numbered register. The way to 29530specify this requirement is with 'HARD_REGNO_MODE_OK'. 29531 29532 Register classes used for input-operands of bitwise-and or shift 29533instructions have a special requirement: each such class must have, for 29534each fixed-point machine mode, a subclass whose registers can transfer 29535that mode to or from memory. For example, on some machines, the 29536operations for single-byte values ('QImode') are limited to certain 29537registers. When this is so, each register class that is used in a 29538bitwise-and or shift instruction must have a subclass consisting of 29539registers from which single-byte values can be loaded or stored. This 29540is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to 29541return. 29542 29543 -- Data type: enum reg_class 29544 An enumerated type that must be defined with all the register class 29545 names as enumerated values. 'NO_REGS' must be first. 'ALL_REGS' 29546 must be the last register class, followed by one more enumerated 29547 value, 'LIM_REG_CLASSES', which is not a register class but rather 29548 tells how many classes there are. 29549 29550 Each register class has a number, which is the value of casting the 29551 class name to type 'int'. The number serves as an index in many of 29552 the tables described below. 29553 29554 -- Macro: N_REG_CLASSES 29555 The number of distinct register classes, defined as follows: 29556 29557 #define N_REG_CLASSES (int) LIM_REG_CLASSES 29558 29559 -- Macro: REG_CLASS_NAMES 29560 An initializer containing the names of the register classes as C 29561 string constants. These names are used in writing some of the 29562 debugging dumps. 29563 29564 -- Macro: REG_CLASS_CONTENTS 29565 An initializer containing the contents of the register classes, as 29566 integers which are bit masks. The Nth integer specifies the 29567 contents of class N. The way the integer MASK is interpreted is 29568 that register R is in the class if 'MASK & (1 << R)' is 1. 29569 29570 When the machine has more than 32 registers, an integer does not 29571 suffice. Then the integers are replaced by sub-initializers, 29572 braced groupings containing several integers. Each sub-initializer 29573 must be suitable as an initializer for the type 'HARD_REG_SET' 29574 which is defined in 'hard-reg-set.h'. In this situation, the first 29575 integer in each sub-initializer corresponds to registers 0 through 29576 31, the second integer to registers 32 through 63, and so on. 29577 29578 -- Macro: REGNO_REG_CLASS (REGNO) 29579 A C expression whose value is a register class containing hard 29580 register REGNO. In general there is more than one such class; 29581 choose a class which is "minimal", meaning that no smaller class 29582 also contains the register. 29583 29584 -- Macro: BASE_REG_CLASS 29585 A macro whose definition is the name of the class to which a valid 29586 base register must belong. A base register is one used in an 29587 address which is the register value plus a displacement. 29588 29589 -- Macro: MODE_BASE_REG_CLASS (MODE) 29590 This is a variation of the 'BASE_REG_CLASS' macro which allows the 29591 selection of a base register in a mode dependent manner. If MODE 29592 is VOIDmode then it should return the same value as 29593 'BASE_REG_CLASS'. 29594 29595 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 29596 A C expression whose value is the register class to which a valid 29597 base register must belong in order to be used in a base plus index 29598 register address. You should define this macro if base plus index 29599 addresses have different requirements than other base register 29600 uses. 29601 29602 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE, 29603 INDEX_CODE) 29604 A C expression whose value is the register class to which a valid 29605 base register for a memory reference in mode MODE to address space 29606 ADDRESS_SPACE must belong. OUTER_CODE and INDEX_CODE define the 29607 context in which the base register occurs. OUTER_CODE is the code 29608 of the immediately enclosing expression ('MEM' for the top level of 29609 an address, 'ADDRESS' for something that occurs in an 29610 'address_operand'). INDEX_CODE is the code of the corresponding 29611 index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise. 29612 29613 -- Macro: INDEX_REG_CLASS 29614 A macro whose definition is the name of the class to which a valid 29615 index register must belong. An index register is one used in an 29616 address where its value is either multiplied by a scale factor or 29617 added to another register (as well as added to a displacement). 29618 29619 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 29620 A C expression which is nonzero if register number NUM is suitable 29621 for use as a base register in operand addresses. 29622 29623 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 29624 A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that 29625 that expression may examine the mode of the memory reference in 29626 MODE. You should define this macro if the mode of the memory 29627 reference affects whether a register may be used as a base 29628 register. If you define this macro, the compiler will use it 29629 instead of 'REGNO_OK_FOR_BASE_P'. The mode may be 'VOIDmode' for 29630 addresses that appear outside a 'MEM', i.e., as an 29631 'address_operand'. 29632 29633 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 29634 A C expression which is nonzero if register number NUM is suitable 29635 for use as a base register in base plus index operand addresses, 29636 accessing memory in mode MODE. It may be either a suitable hard 29637 register or a pseudo register that has been allocated such a hard 29638 register. You should define this macro if base plus index 29639 addresses have different requirements than other base register 29640 uses. 29641 29642 Use of this macro is deprecated; please use the more general 29643 'REGNO_MODE_CODE_OK_FOR_BASE_P'. 29644 29645 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE, 29646 OUTER_CODE, INDEX_CODE) 29647 A C expression which is nonzero if register number NUM is suitable 29648 for use as a base register in operand addresses, accessing memory 29649 in mode MODE in address space ADDRESS_SPACE. This is similar to 29650 'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine 29651 the context in which the register appears in the memory reference. 29652 OUTER_CODE is the code of the immediately enclosing expression 29653 ('MEM' if at the top level of the address, 'ADDRESS' for something 29654 that occurs in an 'address_operand'). INDEX_CODE is the code of 29655 the corresponding index expression if OUTER_CODE is 'PLUS'; 29656 'SCRATCH' otherwise. The mode may be 'VOIDmode' for addresses that 29657 appear outside a 'MEM', i.e., as an 'address_operand'. 29658 29659 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 29660 A C expression which is nonzero if register number NUM is suitable 29661 for use as an index register in operand addresses. It may be 29662 either a suitable hard register or a pseudo register that has been 29663 allocated such a hard register. 29664 29665 The difference between an index register and a base register is 29666 that the index register may be scaled. If an address involves the 29667 sum of two registers, neither one of them scaled, then either one 29668 may be labeled the "base" and the other the "index"; but whichever 29669 labeling is used must fit the machine's constraints of which 29670 registers may serve in each capacity. The compiler will try both 29671 labelings, looking for one that is valid, and will reload one or 29672 both registers only if neither labeling works. 29673 29674 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t 29675 RCLASS) 29676 A target hook that places additional preference on the register 29677 class to use when it is necessary to rename a register in class 29678 RCLASS to another class, or perhaps NO_REGS, if no preferred 29679 register class is found or hook 'preferred_rename_class' is not 29680 implemented. Sometimes returning a more restrictive class makes 29681 better code. For example, on ARM, thumb-2 instructions using 29682 'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'. 29683 By returning 'LO_REGS' from 'preferred_rename_class', code size can 29684 be reduced. 29685 29686 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X, 29687 reg_class_t RCLASS) 29688 A target hook that places additional restrictions on the register 29689 class to use when it is necessary to copy value X into a register 29690 in class RCLASS. The value is a register class; perhaps RCLASS, or 29691 perhaps another, smaller class. 29692 29693 The default version of this hook always returns value of 'rclass' 29694 argument. 29695 29696 Sometimes returning a more restrictive class makes better code. 29697 For example, on the 68000, when X is an integer constant that is in 29698 range for a 'moveq' instruction, the value of this macro is always 29699 'DATA_REGS' as long as RCLASS includes the data registers. 29700 Requiring a data register guarantees that a 'moveq' will be used. 29701 29702 One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return 29703 RCLASS is if X is a legitimate constant which cannot be loaded into 29704 some register class. By returning 'NO_REGS' you can force X into a 29705 memory location. For example, rs6000 can load immediate values 29706 into general-purpose registers, but does not have an instruction 29707 for loading an immediate value into a floating-point register, so 29708 'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 29709 floating-point constant. If the constant can't be loaded into any 29710 kind of register, code generation will be better if 29711 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 29712 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 29713 29714 If an insn has pseudos in it after register allocation, reload will 29715 go through the alternatives and call repeatedly 29716 'TARGET_PREFERRED_RELOAD_CLASS' to find the best one. Returning 29717 'NO_REGS', in this case, makes reload add a '!' in front of the 29718 constraint: the x86 back-end uses this feature to discourage usage 29719 of 387 registers when math is done in the SSE registers (and vice 29720 versa). 29721 29722 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 29723 A C expression that places additional restrictions on the register 29724 class to use when it is necessary to copy value X into a register 29725 in class CLASS. The value is a register class; perhaps CLASS, or 29726 perhaps another, smaller class. On many machines, the following 29727 definition is safe: 29728 29729 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 29730 29731 Sometimes returning a more restrictive class makes better code. 29732 For example, on the 68000, when X is an integer constant that is in 29733 range for a 'moveq' instruction, the value of this macro is always 29734 'DATA_REGS' as long as CLASS includes the data registers. 29735 Requiring a data register guarantees that a 'moveq' will be used. 29736 29737 One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if 29738 X is a legitimate constant which cannot be loaded into some 29739 register class. By returning 'NO_REGS' you can force X into a 29740 memory location. For example, rs6000 can load immediate values 29741 into general-purpose registers, but does not have an instruction 29742 for loading an immediate value into a floating-point register, so 29743 'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 29744 floating-point constant. If the constant can't be loaded into any 29745 kind of register, code generation will be better if 29746 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 29747 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 29748 29749 If an insn has pseudos in it after register allocation, reload will 29750 go through the alternatives and call repeatedly 29751 'PREFERRED_RELOAD_CLASS' to find the best one. Returning 29752 'NO_REGS', in this case, makes reload add a '!' in front of the 29753 constraint: the x86 back-end uses this feature to discourage usage 29754 of 387 registers when math is done in the SSE registers (and vice 29755 versa). 29756 29757 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 29758 X, reg_class_t RCLASS) 29759 Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads 29760 instead of input reloads. 29761 29762 The default version of this hook always returns value of 'rclass' 29763 argument. 29764 29765 You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to 29766 discourage reload from using some alternatives, like 29767 'TARGET_PREFERRED_RELOAD_CLASS'. 29768 29769 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 29770 A C expression that places additional restrictions on the register 29771 class to use when it is necessary to be able to hold a value of 29772 mode MODE in a reload register for which class CLASS would 29773 ordinarily be used. 29774 29775 Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when 29776 there are certain modes that simply can't go in certain reload 29777 classes. 29778 29779 The value is a register class; perhaps CLASS, or perhaps another, 29780 smaller class. 29781 29782 Don't define this macro unless the target machine has limitations 29783 which require the macro to do something nontrivial. 29784 29785 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X, 29786 reg_class_t RELOAD_CLASS, machine_mode RELOAD_MODE, 29787 secondary_reload_info *SRI) 29788 Many machines have some registers that cannot be copied directly to 29789 or from memory or even from other types of registers. An example 29790 is the 'MQ' register, which on most machines, can only be copied to 29791 or from general registers, but not memory. Below, we shall be 29792 using the term 'intermediate register' when a move operation cannot 29793 be performed directly, but has to be done by copying the source 29794 into the intermediate register first, and then copying the 29795 intermediate register to the destination. An intermediate register 29796 always has the same mode as source and destination. Since it holds 29797 the actual value being copied, reload might apply optimizations to 29798 re-use an intermediate register and eliding the copy from the 29799 source when it can determine that the intermediate register still 29800 holds the required value. 29801 29802 Another kind of secondary reload is required on some machines which 29803 allow copying all registers to and from memory, but require a 29804 scratch register for stores to some memory locations (e.g., those 29805 with symbolic address on the RT, and those with certain symbolic 29806 address on the SPARC when compiling PIC). Scratch registers need 29807 not have the same mode as the value being copied, and usually hold 29808 a different value than that being copied. Special patterns in the 29809 md file are needed to describe how the copy is performed with the 29810 help of the scratch register; these patterns also describe the 29811 number, register class(es) and mode(s) of the scratch register(s). 29812 29813 In some cases, both an intermediate and a scratch register are 29814 required. 29815 29816 For input reloads, this target hook is called with nonzero IN_P, 29817 and X is an rtx that needs to be copied to a register of class 29818 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 29819 is called with zero IN_P, and a register of class RELOAD_CLASS 29820 needs to be copied to rtx X in RELOAD_MODE. 29821 29822 If copying a register of RELOAD_CLASS from/to X requires an 29823 intermediate register, the hook 'secondary_reload' should return 29824 the register class required for this intermediate register. If no 29825 intermediate register is required, it should return NO_REGS. If 29826 more than one intermediate register is required, describe the one 29827 that is closest in the copy chain to the reload register. 29828 29829 If scratch registers are needed, you also have to describe how to 29830 perform the copy from/to the reload register to/from this closest 29831 intermediate register. Or if no intermediate register is required, 29832 but still a scratch register is needed, describe the copy from/to 29833 the reload register to/from the reload operand X. 29834 29835 You do this by setting 'sri->icode' to the instruction code of a 29836 pattern in the md file which performs the move. Operands 0 and 1 29837 are the output and input of this copy, respectively. Operands from 29838 operand 2 onward are for scratch operands. These scratch operands 29839 must have a mode, and a single-register-class output constraint. 29840 29841 When an intermediate register is used, the 'secondary_reload' hook 29842 will be called again to determine how to copy the intermediate 29843 register to/from the reload operand X, so your hook must also have 29844 code to handle the register class of the intermediate operand. 29845 29846 X might be a pseudo-register or a 'subreg' of a pseudo-register, 29847 which could either be in a hard register or in memory. Use 29848 'true_regnum' to find out; it will return -1 if the pseudo is in 29849 memory and the hard register number if it is in a register. 29850 29851 Scratch operands in memory (constraint '"=m"' / '"=&m"') are 29852 currently not supported. For the time being, you will have to 29853 continue to use 'SECONDARY_MEMORY_NEEDED' for that purpose. 29854 29855 'copy_cost' also uses this target hook to find out how values are 29856 copied. If you want it to include some extra cost for the need to 29857 allocate (a) scratch register(s), set 'sri->extra_cost' to the 29858 additional cost. Or if two dependent moves are supposed to have a 29859 lower cost than the sum of the individual moves due to expected 29860 fortuitous scheduling and/or special forwarding logic, you can set 29861 'sri->extra_cost' to a negative amount. 29862 29863 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 29864 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 29865 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 29866 These macros are obsolete, new ports should use the target hook 29867 'TARGET_SECONDARY_RELOAD' instead. 29868 29869 These are obsolete macros, replaced by the 29870 'TARGET_SECONDARY_RELOAD' target hook. Older ports still define 29871 these macros to indicate to the reload phase that it may need to 29872 allocate at least one register for a reload in addition to the 29873 register to contain the data. Specifically, if copying X to a 29874 register CLASS in MODE requires an intermediate register, you were 29875 supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the 29876 largest register class all of whose registers can be used as 29877 intermediate registers or scratch registers. 29878 29879 If copying a register CLASS in MODE to X requires an intermediate 29880 or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 29881 to be defined be defined to return the largest register class 29882 required. If the requirements for input and output reloads were 29883 the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used 29884 instead of defining both macros identically. 29885 29886 The values returned by these macros are often 'GENERAL_REGS'. 29887 Return 'NO_REGS' if no spare register is needed; i.e., if X can be 29888 directly copied to or from a register of CLASS in MODE without 29889 requiring a scratch register. Do not define this macro if it would 29890 always return 'NO_REGS'. 29891 29892 If a scratch register is required (either with or without an 29893 intermediate register), you were supposed to define patterns for 29894 'reload_inM' or 'reload_outM', as required (*note Standard Names::. 29895 These patterns, which were normally implemented with a 29896 'define_expand', should be similar to the 'movM' patterns, except 29897 that operand 2 is the scratch register. 29898 29899 These patterns need constraints for the reload register and scratch 29900 register that contain a single register class. If the original 29901 reload register (whose class is CLASS) can meet the constraint 29902 given in the pattern, the value returned by these macros is used 29903 for the class of the scratch register. Otherwise, two additional 29904 reload registers are required. Their classes are obtained from the 29905 constraints in the insn pattern. 29906 29907 X might be a pseudo-register or a 'subreg' of a pseudo-register, 29908 which could either be in a hard register or in memory. Use 29909 'true_regnum' to find out; it will return -1 if the pseudo is in 29910 memory and the hard register number if it is in a register. 29911 29912 These macros should not be used in the case where a particular 29913 class of registers can only be copied to memory and not to another 29914 class of registers. In that case, secondary reload registers are 29915 not needed and would not be helpful. Instead, a stack location 29916 must be used to perform the copy and the 'movM' pattern should use 29917 memory as an intermediate storage. This case often occurs between 29918 floating-point and general registers. 29919 29920 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 29921 Certain machines have the property that some registers cannot be 29922 copied to some other registers without using memory. Define this 29923 macro on those machines to be a C expression that is nonzero if 29924 objects of mode M in registers of CLASS1 can only be copied to 29925 registers of class CLASS2 by storing a register of CLASS1 into 29926 memory and loading that memory location into a register of CLASS2. 29927 29928 Do not define this macro if its value would always be zero. 29929 29930 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 29931 Normally when 'SECONDARY_MEMORY_NEEDED' is defined, the compiler 29932 allocates a stack slot for a memory location needed for register 29933 copies. If this macro is defined, the compiler instead uses the 29934 memory location defined by this macro. 29935 29936 Do not define this macro if you do not define 29937 'SECONDARY_MEMORY_NEEDED'. 29938 29939 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 29940 When the compiler needs a secondary memory location to copy between 29941 two registers of mode MODE, it normally allocates sufficient memory 29942 to hold a quantity of 'BITS_PER_WORD' bits and performs the store 29943 and load operations in a mode that many bits wide and whose class 29944 is the same as that of MODE. 29945 29946 This is right thing to do on most machines because it ensures that 29947 all bits of the register are copied and prevents accesses to the 29948 registers in a narrower mode, which some machines prohibit for 29949 floating-point registers. 29950 29951 However, this default behavior is not correct on some machines, 29952 such as the DEC Alpha, that store short integers in floating-point 29953 registers differently than in integer registers. On those 29954 machines, the default widening will not work correctly and you must 29955 define this macro to suppress that widening in some cases. See the 29956 file 'alpha.h' for details. 29957 29958 Do not define this macro if you do not define 29959 'SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 29960 'BITS_PER_WORD' bits wide is correct for your machine. 29961 29962 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS) 29963 A target hook which returns 'true' if pseudos that have been 29964 assigned to registers of class RCLASS would likely be spilled 29965 because registers of RCLASS are needed for spill registers. 29966 29967 The default version of this target hook returns 'true' if RCLASS 29968 has exactly one register and 'false' otherwise. On most machines, 29969 this default should be used. For generally register-starved 29970 machines, such as i386, or machines with right register 29971 constraints, such as SH, this hook can be used to avoid excessive 29972 spilling. 29973 29974 This hook is also used by some of the global intra-procedural code 29975 transformations to throtle code motion, to avoid increasing 29976 register pressure. 29977 29978 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t 29979 RCLASS, machine_mode MODE) 29980 A target hook returns the maximum number of consecutive registers 29981 of class RCLASS needed to hold a value of mode MODE. 29982 29983 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 29984 the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)' 29985 target hook should be the maximum value of 'HARD_REGNO_NREGS 29986 (REGNO, MODE)' for all REGNO values in the class RCLASS. 29987 29988 This target hook helps control the handling of multiple-word values 29989 in the reload pass. 29990 29991 The default version of this target hook returns the size of MODE in 29992 words. 29993 29994 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 29995 A C expression for the maximum number of consecutive registers of 29996 class CLASS needed to hold a value of mode MODE. 29997 29998 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 29999 the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should be 30000 the maximum value of 'HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO 30001 values in the class CLASS. 30002 30003 This macro helps control the handling of multiple-word values in 30004 the reload pass. 30005 30006 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 30007 If defined, a C expression that returns nonzero for a CLASS for 30008 which a change from mode FROM to mode TO is invalid. 30009 30010 For example, loading 32-bit integer or floating-point objects into 30011 floating-point registers on Alpha extends them to 64 bits. 30012 Therefore loading a 64-bit object and then storing it as a 32-bit 30013 object does not store the low-order 32 bits, as would be the case 30014 for a normal register. Therefore, 'alpha.h' defines 30015 'CANNOT_CHANGE_MODE_CLASS' as below: 30016 30017 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 30018 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 30019 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 30020 30021 Even if storing from a register in mode TO would be valid, if both 30022 FROM and 'raw_reg_mode' for CLASS are wider than 'word_mode', then 30023 we must prevent TO narrowing the mode. This happens when the 30024 middle-end assumes that it can load or store pieces of an N-word 30025 pseudo, and that the pseudo will eventually be allocated to N 30026 'word_mode' hard registers. Failure to prevent this kind of mode 30027 change will result in the entire 'raw_reg_mode' being modified 30028 instead of the partial value that the middle-end intended. 30029 30030 -- Target Hook: bool TARGET_LRA_P (void) 30031 A target hook which returns true if we use LRA instead of reload 30032 pass. It means that LRA was ported to the target. The default 30033 version of this target hook returns always false. 30034 30035 -- Target Hook: int TARGET_REGISTER_PRIORITY (int) 30036 A target hook which returns the register priority number to which 30037 the register HARD_REGNO belongs to. The bigger the number, the 30038 more preferable the hard register usage (when all other conditions 30039 are the same). This hook can be used to prefer some hard register 30040 over others in LRA. For example, some x86-64 register usage needs 30041 additional prefix which makes instructions longer. The hook can 30042 return lower priority number for such registers make them less 30043 favorable and as result making the generated code smaller. The 30044 default version of this target hook returns always zero. 30045 30046 -- Target Hook: bool TARGET_REGISTER_USAGE_LEVELING_P (void) 30047 A target hook which returns true if we need register usage 30048 leveling. That means if a few hard registers are equally good for 30049 the assignment, we choose the least used hard register. The 30050 register usage leveling may be profitable for some targets. Don't 30051 use the usage leveling for targets with conditional execution or 30052 targets with big register files as it hurts if-conversion and 30053 cross-jumping optimizations. The default version of this target 30054 hook returns always false. 30055 30056 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void) 30057 A target hook which returns true if an address with the same 30058 structure can have different maximal legitimate displacement. For 30059 example, the displacement can depend on memory mode or on operand 30060 combinations in the insn. The default version of this target hook 30061 returns always false. 30062 30063 -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST) 30064 A target hook which returns 'true' if SUBST can't substitute safely 30065 pseudos with equivalent memory values during register allocation. 30066 The default version of this target hook returns 'false'. On most 30067 machines, this default should be used. For generally machines with 30068 non orthogonal register usage for addressing, such as SH, this hook 30069 can be used to avoid excessive spilling. 30070 30071 -- Target Hook: bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *DISP, 30072 rtx *OFFSET, machine_mode MODE) 30073 A target hook which returns 'true' if *DISP is legitimezed to valid 30074 address displacement with subtracting *OFFSET at memory mode MODE. 30075 The default version of this target hook returns 'false'. This hook 30076 will benefit machines with limited base plus displacement 30077 addressing. 30078 30079 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, 30080 MACHINE_MODE) 30081 This hook defines a class of registers which could be used for 30082 spilling pseudos of the given mode and class, or 'NO_REGS' if only 30083 memory should be used. Not defining this hook is equivalent to 30084 returning 'NO_REGS' for all inputs. 30085 30086 -- Target Hook: machine_mode TARGET_CSTORE_MODE (enum insn_code ICODE) 30087 This hook defines the machine mode to use for the boolean result of 30088 conditional store patterns. The ICODE argument is the instruction 30089 code for the cstore being performed. Not definiting this hook is 30090 the same as accepting the mode encoded into operand 0 of the cstore 30091 expander patterns. 30092 30093 30094File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Register Classes, Up: Target Macros 30095 3009617.9 Stack Layout and Calling Conventions 30097========================================= 30098 30099This describes the stack layout and calling conventions. 30100 30101* Menu: 30102 30103* Frame Layout:: 30104* Exception Handling:: 30105* Stack Checking:: 30106* Frame Registers:: 30107* Elimination:: 30108* Stack Arguments:: 30109* Register Arguments:: 30110* Scalar Return:: 30111* Aggregate Return:: 30112* Caller Saves:: 30113* Function Entry:: 30114* Profiling:: 30115* Tail Calls:: 30116* Stack Smashing Protection:: 30117* Miscellaneous Register Hooks:: 30118 30119 30120File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 30121 3012217.9.1 Basic Stack Layout 30123------------------------- 30124 30125Here is the basic stack layout. 30126 30127 -- Macro: STACK_GROWS_DOWNWARD 30128 Define this macro if pushing a word onto the stack moves the stack 30129 pointer to a smaller address. 30130 30131 When we say, "define this macro if ...", it means that the compiler 30132 checks this macro only with '#ifdef' so the precise definition used 30133 does not matter. 30134 30135 -- Macro: STACK_PUSH_CODE 30136 This macro defines the operation used when something is pushed on 30137 the stack. In RTL, a push operation will be '(set (mem 30138 (STACK_PUSH_CODE (reg sp))) ...)' 30139 30140 The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'. 30141 Which of these is correct depends on the stack direction and on 30142 whether the stack pointer points to the last item on the stack or 30143 whether it points to the space for the next item on the stack. 30144 30145 The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is defined, 30146 which is almost always right, and 'PRE_INC' otherwise, which is 30147 often wrong. 30148 30149 -- Macro: FRAME_GROWS_DOWNWARD 30150 Define this macro to nonzero value if the addresses of local 30151 variable slots are at negative offsets from the frame pointer. 30152 30153 -- Macro: ARGS_GROW_DOWNWARD 30154 Define this macro if successive arguments to a function occupy 30155 decreasing addresses on the stack. 30156 30157 -- Macro: STARTING_FRAME_OFFSET 30158 Offset from the frame pointer to the first local variable slot to 30159 be allocated. 30160 30161 If 'FRAME_GROWS_DOWNWARD', find the next slot's offset by 30162 subtracting the first slot's length from 'STARTING_FRAME_OFFSET'. 30163 Otherwise, it is found by adding the length of the first slot to 30164 the value 'STARTING_FRAME_OFFSET'. 30165 30166 -- Macro: STACK_ALIGNMENT_NEEDED 30167 Define to zero to disable final alignment of the stack during 30168 reload. The nonzero default for this macro is suitable for most 30169 ports. 30170 30171 On ports where 'STARTING_FRAME_OFFSET' is nonzero or where there is 30172 a register save block following the local block that doesn't 30173 require alignment to 'STACK_BOUNDARY', it may be beneficial to 30174 disable stack alignment and do it in the backend. 30175 30176 -- Macro: STACK_POINTER_OFFSET 30177 Offset from the stack pointer register to the first location at 30178 which outgoing arguments are placed. If not specified, the default 30179 value of zero is used. This is the proper value for most machines. 30180 30181 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 30182 the first location at which outgoing arguments are placed. 30183 30184 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 30185 Offset from the argument pointer register to the first argument's 30186 address. On some machines it may depend on the data type of the 30187 function. 30188 30189 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 30190 the first argument's address. 30191 30192 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 30193 Offset from the stack pointer register to an item dynamically 30194 allocated on the stack, e.g., by 'alloca'. 30195 30196 The default value for this macro is 'STACK_POINTER_OFFSET' plus the 30197 length of the outgoing arguments. The default is correct for most 30198 machines. See 'function.c' for details. 30199 30200 -- Macro: INITIAL_FRAME_ADDRESS_RTX 30201 A C expression whose value is RTL representing the address of the 30202 initial stack frame. This address is passed to 'RETURN_ADDR_RTX' 30203 and 'DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 30204 reasonable default value will be used. Define this macro in order 30205 to make frame pointer elimination work in the presence of 30206 '__builtin_frame_address (count)' and '__builtin_return_address 30207 (count)' for 'count' not equal to zero. 30208 30209 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 30210 A C expression whose value is RTL representing the address in a 30211 stack frame where the pointer to the caller's frame is stored. 30212 Assume that FRAMEADDR is an RTL expression for the address of the 30213 stack frame itself. 30214 30215 If you don't define this macro, the default is to return the value 30216 of FRAMEADDR--that is, the stack frame address is also the address 30217 of the stack word that points to the previous frame. 30218 30219 -- Macro: SETUP_FRAME_ADDRESSES 30220 If defined, a C expression that produces the machine-specific code 30221 to setup the stack so that arbitrary frames can be accessed. For 30222 example, on the SPARC, we must flush all of the register windows to 30223 the stack before we can access arbitrary stack frames. You will 30224 seldom need to define this macro. 30225 30226 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 30227 This target hook should return an rtx that is used to store the 30228 address of the current frame into the built in 'setjmp' buffer. 30229 The default value, 'virtual_stack_vars_rtx', is correct for most 30230 machines. One reason you may need to define this target hook is if 30231 'hard_frame_pointer_rtx' is the appropriate value on your machine. 30232 30233 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 30234 A C expression whose value is RTL representing the value of the 30235 frame address for the current frame. FRAMEADDR is the frame 30236 pointer of the current frame. This is used for 30237 __builtin_frame_address. You need only define this macro if the 30238 frame address is not the same as the frame pointer. Most machines 30239 do not need to define it. 30240 30241 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 30242 A C expression whose value is RTL representing the value of the 30243 return address for the frame COUNT steps up from the current frame, 30244 after the prologue. FRAMEADDR is the frame pointer of the COUNT 30245 frame, or the frame pointer of the COUNT - 1 frame if 30246 'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero. 30247 30248 The value of the expression must always be the correct address when 30249 COUNT is zero, but may be 'NULL_RTX' if there is no way to 30250 determine the return address of other frames. 30251 30252 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 30253 Define this macro to nonzero value if the return address of a 30254 particular stack frame is accessed from the frame pointer of the 30255 previous stack frame. The zero default for this macro is suitable 30256 for most ports. 30257 30258 -- Macro: INCOMING_RETURN_ADDR_RTX 30259 A C expression whose value is RTL representing the location of the 30260 incoming return address at the beginning of any function, before 30261 the prologue. This RTL is either a 'REG', indicating that the 30262 return value is saved in 'REG', or a 'MEM' representing a location 30263 in the stack. 30264 30265 You only need to define this macro if you want to support call 30266 frame debugging information like that provided by DWARF 2. 30267 30268 If this RTL is a 'REG', you should also define 30269 'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'. 30270 30271 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 30272 A C expression whose value is an integer giving a DWARF 2 column 30273 number that may be used as an alternative return column. The 30274 column must not correspond to any gcc hard register (that is, it 30275 must not be in the range of 'DWARF_FRAME_REGNUM'). 30276 30277 This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a 30278 general register, but an alternative column needs to be used for 30279 signal frames. Some targets have also used different frame return 30280 columns over time. 30281 30282 -- Macro: DWARF_ZERO_REG 30283 A C expression whose value is an integer giving a DWARF 2 register 30284 number that is considered to always have the value zero. This 30285 should only be defined if the target has an architected zero 30286 register, and someone decided it was a good idea to use that 30287 register number to terminate the stack backtrace. New ports should 30288 avoid this. 30289 30290 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 30291 *LABEL, rtx PATTERN, int INDEX) 30292 This target hook allows the backend to emit frame-related insns 30293 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 30294 debugging info engine will invoke it on insns of the form 30295 (set (reg) (unspec [...] UNSPEC_INDEX)) 30296 and 30297 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 30298 to let the backend emit the call frame instructions. LABEL is the 30299 CFI label attached to the insn, PATTERN is the pattern of the insn 30300 and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'. 30301 30302 -- Macro: INCOMING_FRAME_SP_OFFSET 30303 A C expression whose value is an integer giving the offset, in 30304 bytes, from the value of the stack pointer register to the top of 30305 the stack frame at the beginning of any function, before the 30306 prologue. The top of the frame is defined to be the value of the 30307 stack pointer in the previous frame, just before the call 30308 instruction. 30309 30310 You only need to define this macro if you want to support call 30311 frame debugging information like that provided by DWARF 2. 30312 30313 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 30314 A C expression whose value is an integer giving the offset, in 30315 bytes, from the argument pointer to the canonical frame address 30316 (cfa). The final value should coincide with that calculated by 30317 'INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 30318 during virtual register instantiation. 30319 30320 The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) + 30321 crtl->args.pretend_args_size', which is correct for most machines; 30322 in general, the arguments are found immediately before the stack 30323 frame. Note that this is not the case on some targets that save 30324 registers into the caller's frame, such as SPARC and rs6000, and so 30325 such targets need to define this macro. 30326 30327 You only need to define this macro if the default is incorrect, and 30328 you want to support call frame debugging information like that 30329 provided by DWARF 2. 30330 30331 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 30332 If defined, a C expression whose value is an integer giving the 30333 offset in bytes from the frame pointer to the canonical frame 30334 address (cfa). The final value should coincide with that 30335 calculated by 'INCOMING_FRAME_SP_OFFSET'. 30336 30337 Normally the CFA is calculated as an offset from the argument 30338 pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer 30339 is variable due to the ABI, this may not be possible. If this 30340 macro is defined, it implies that the virtual register 30341 instantiation should be based on the frame pointer instead of the 30342 argument pointer. Only one of 'FRAME_POINTER_CFA_OFFSET' and 30343 'ARG_POINTER_CFA_OFFSET' should be defined. 30344 30345 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 30346 If defined, a C expression whose value is an integer giving the 30347 offset in bytes from the canonical frame address (cfa) to the frame 30348 base used in DWARF 2 debug information. The default is zero. A 30349 different value may reduce the size of debug information on some 30350 ports. 30351 30352 30353File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 30354 3035517.9.2 Exception Handling Support 30356--------------------------------- 30357 30358 -- Macro: EH_RETURN_DATA_REGNO (N) 30359 A C expression whose value is the Nth register number used for data 30360 by exception handlers, or 'INVALID_REGNUM' if fewer than N 30361 registers are usable. 30362 30363 The exception handling library routines communicate with the 30364 exception handlers via a set of agreed upon registers. Ideally 30365 these registers should be call-clobbered; it is possible to use 30366 call-saved registers, but may negatively impact code size. The 30367 target must support at least 2 data registers, but should define 4 30368 if there are enough free registers. 30369 30370 You must define this macro if you want to support call frame 30371 exception handling like that provided by DWARF 2. 30372 30373 -- Macro: EH_RETURN_STACKADJ_RTX 30374 A C expression whose value is RTL representing a location in which 30375 to store a stack adjustment to be applied before function return. 30376 This is used to unwind the stack to an exception handler's call 30377 frame. It will be assigned zero on code paths that return 30378 normally. 30379 30380 Typically this is a call-clobbered hard register that is otherwise 30381 untouched by the epilogue, but could also be a stack slot. 30382 30383 Do not define this macro if the stack pointer is saved and restored 30384 by the regular prolog and epilog code in the call frame itself; in 30385 this case, the exception handling library routines will update the 30386 stack location to be restored in place. Otherwise, you must define 30387 this macro if you want to support call frame exception handling 30388 like that provided by DWARF 2. 30389 30390 -- Macro: EH_RETURN_HANDLER_RTX 30391 A C expression whose value is RTL representing a location in which 30392 to store the address of an exception handler to which we should 30393 return. It will not be assigned on code paths that return 30394 normally. 30395 30396 Typically this is the location in the call frame at which the 30397 normal return address is stored. For targets that return by 30398 popping an address off the stack, this might be a memory address 30399 just below the _target_ call frame rather than inside the current 30400 call frame. If defined, 'EH_RETURN_STACKADJ_RTX' will have already 30401 been assigned, so it may be used to calculate the location of the 30402 target call frame. 30403 30404 Some targets have more complex requirements than storing to an 30405 address calculable during initial code generation. In that case 30406 the 'eh_return' instruction pattern should be used instead. 30407 30408 If you want to support call frame exception handling, you must 30409 define either this macro or the 'eh_return' instruction pattern. 30410 30411 -- Macro: RETURN_ADDR_OFFSET 30412 If defined, an integer-valued C expression for which rtl will be 30413 generated to add it to the exception handler address before it is 30414 searched in the exception handling tables, and to subtract it again 30415 from the address before using it to return to the exception 30416 handler. 30417 30418 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 30419 This macro chooses the encoding of pointers embedded in the 30420 exception handling sections. If at all possible, this should be 30421 defined such that the exception handling section will not require 30422 dynamic relocations, and so may be read-only. 30423 30424 CODE is 0 for data, 1 for code labels, 2 for function pointers. 30425 GLOBAL is true if the symbol may be affected by dynamic 30426 relocations. The macro should return a combination of the 30427 'DW_EH_PE_*' defines as found in 'dwarf2.h'. 30428 30429 If this macro is not defined, pointers will not be encoded but 30430 represented directly. 30431 30432 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 30433 ADDR, DONE) 30434 This macro allows the target to emit whatever special magic is 30435 required to represent the encoding chosen by 30436 'ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 30437 pc-relative and indirect encodings; this must be defined if the 30438 target uses text-relative or data-relative encodings. 30439 30440 This is a C statement that branches to DONE if the format was 30441 handled. ENCODING is the format chosen, SIZE is the number of 30442 bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be 30443 emitted. 30444 30445 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 30446 This macro allows the target to add CPU and operating system 30447 specific code to the call-frame unwinder for use when there is no 30448 unwind data available. The most common reason to implement this 30449 macro is to unwind through signal frames. 30450 30451 This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c', 30452 'unwind-dw2-xtensa.c' and 'unwind-ia64.c'. CONTEXT is an 30453 '_Unwind_Context'; FS is an '_Unwind_FrameState'. Examine 30454 'context->ra' for the address of the code being executed and 30455 'context->cfa' for the stack pointer value. If the frame can be 30456 decoded, the register save addresses should be updated in FS and 30457 the macro should evaluate to '_URC_NO_REASON'. If the frame cannot 30458 be decoded, the macro should evaluate to '_URC_END_OF_STACK'. 30459 30460 For proper signal handling in Java this macro is accompanied by 30461 'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h' 30462 headers. 30463 30464 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 30465 This macro allows the target to add operating system specific code 30466 to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding 30467 directive, usually used for signal or interrupt frames. 30468 30469 This macro is called from 'uw_update_context' in libgcc's 30470 'unwind-ia64.c'. CONTEXT is an '_Unwind_Context'; FS is an 30471 '_Unwind_FrameState'. Examine 'fs->unwabi' for the abi and context 30472 in the '.unwabi' directive. If the '.unwabi' directive can be 30473 handled, the register save addresses should be updated in FS. 30474 30475 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 30476 A C expression that evaluates to true if the target requires unwind 30477 info to be given comdat linkage. Define it to be '1' if comdat 30478 linkage is necessary. The default is '0'. 30479 30480 30481File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 30482 3048317.9.3 Specifying How Stack Checking is Done 30484-------------------------------------------- 30485 30486GCC will check that stack references are within the boundaries of the 30487stack, if the option '-fstack-check' is specified, in one of three ways: 30488 30489 1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC 30490 will assume that you have arranged for full stack checking to be 30491 done at appropriate places in the configuration files. GCC will 30492 not do other special processing. 30493 30494 2. If 'STACK_CHECK_BUILTIN' is zero and the value of the 30495 'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that 30496 you have arranged for static stack checking (checking of the static 30497 stack frame of functions) to be done at appropriate places in the 30498 configuration files. GCC will only emit code to do dynamic stack 30499 checking (checking on dynamic stack allocations) using the third 30500 approach below. 30501 30502 3. If neither of the above are true, GCC will generate code to 30503 periodically "probe" the stack pointer using the values of the 30504 macros defined below. 30505 30506 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 30507defined, GCC will change its allocation strategy for large objects if 30508the option '-fstack-check' is specified: they will always be allocated 30509dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes. 30510 30511 -- Macro: STACK_CHECK_BUILTIN 30512 A nonzero value if stack checking is done by the configuration 30513 files in a machine-dependent manner. You should define this macro 30514 if stack checking is required by the ABI of your machine or if you 30515 would like to do stack checking in some more efficient way than the 30516 generic approach. The default value of this macro is zero. 30517 30518 -- Macro: STACK_CHECK_STATIC_BUILTIN 30519 A nonzero value if static stack checking is done by the 30520 configuration files in a machine-dependent manner. You should 30521 define this macro if you would like to do static stack checking in 30522 some more efficient way than the generic approach. The default 30523 value of this macro is zero. 30524 30525 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 30526 An integer specifying the interval at which GCC must generate stack 30527 probe instructions, defined as 2 raised to this integer. You will 30528 normally define this macro so that the interval be no larger than 30529 the size of the "guard pages" at the end of a stack area. The 30530 default value of 12 (4096-byte interval) is suitable for most 30531 systems. 30532 30533 -- Macro: STACK_CHECK_MOVING_SP 30534 An integer which is nonzero if GCC should move the stack pointer 30535 page by page when doing probes. This can be necessary on systems 30536 where the stack pointer contains the bottom address of the memory 30537 area accessible to the executing thread at any point in time. In 30538 this situation an alternate signal stack is required in order to be 30539 able to recover from a stack overflow. The default value of this 30540 macro is zero. 30541 30542 -- Macro: STACK_CHECK_PROTECT 30543 The number of bytes of stack needed to recover from a stack 30544 overflow, for languages where such a recovery is supported. The 30545 default value of 75 words with the 'setjmp'/'longjmp'-based 30546 exception handling mechanism and 8192 bytes with other exception 30547 handling mechanisms should be adequate for most machines. 30548 30549 The following macros are relevant only if neither STACK_CHECK_BUILTIN 30550nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 30551in the opposite case. 30552 30553 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 30554 The maximum size of a stack frame, in bytes. GCC will generate 30555 probe instructions in non-leaf functions to ensure at least this 30556 many bytes of stack are available. If a stack frame is larger than 30557 this size, stack checking will not be reliable and GCC will issue a 30558 warning. The default is chosen so that GCC only generates one 30559 instruction on most systems. You should normally not change the 30560 default value of this macro. 30561 30562 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 30563 GCC uses this value to generate the above warning message. It 30564 represents the amount of fixed frame used by a function, not 30565 including space for any callee-saved registers, temporaries and 30566 user variables. You need only specify an upper bound for this 30567 amount and will normally use the default of four words. 30568 30569 -- Macro: STACK_CHECK_MAX_VAR_SIZE 30570 The maximum size, in bytes, of an object that GCC will place in the 30571 fixed area of the stack frame when the user specifies 30572 '-fstack-check'. GCC computed the default from the values of the 30573 above macros and you will normally not need to override that 30574 default. 30575 30576 30577File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 30578 3057917.9.4 Registers That Address the Stack Frame 30580--------------------------------------------- 30581 30582This discusses registers that address the stack frame. 30583 30584 -- Macro: STACK_POINTER_REGNUM 30585 The register number of the stack pointer register, which must also 30586 be a fixed register according to 'FIXED_REGISTERS'. On most 30587 machines, the hardware determines which register this is. 30588 30589 -- Macro: FRAME_POINTER_REGNUM 30590 The register number of the frame pointer register, which is used to 30591 access automatic variables in the stack frame. On some machines, 30592 the hardware determines which register this is. On other machines, 30593 you can choose any register you wish for this purpose. 30594 30595 -- Macro: HARD_FRAME_POINTER_REGNUM 30596 On some machines the offset between the frame pointer and starting 30597 offset of the automatic variables is not known until after register 30598 allocation has been done (for example, because the saved registers 30599 are between these two locations). On those machines, define 30600 'FRAME_POINTER_REGNUM' the number of a special, fixed register to 30601 be used internally until the offset is known, and define 30602 'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 30603 used for the frame pointer. 30604 30605 You should define this macro only in the very rare circumstances 30606 when it is not possible to calculate the offset between the frame 30607 pointer and the automatic variables until after register allocation 30608 has been completed. When this macro is defined, you must also 30609 indicate in your definition of 'ELIMINABLE_REGS' how to eliminate 30610 'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or 30611 'STACK_POINTER_REGNUM'. 30612 30613 Do not define this macro if it would be the same as 30614 'FRAME_POINTER_REGNUM'. 30615 30616 -- Macro: ARG_POINTER_REGNUM 30617 The register number of the arg pointer register, which is used to 30618 access the function's argument list. On some machines, this is the 30619 same as the frame pointer register. On some machines, the hardware 30620 determines which register this is. On other machines, you can 30621 choose any register you wish for this purpose. If this is not the 30622 same register as the frame pointer register, then you must mark it 30623 as a fixed register according to 'FIXED_REGISTERS', or arrange to 30624 be able to eliminate it (*note Elimination::). 30625 30626 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER 30627 Define this to a preprocessor constant that is nonzero if 30628 'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the 30629 same. The default definition is '(HARD_FRAME_POINTER_REGNUM == 30630 FRAME_POINTER_REGNUM)'; you only need to define this macro if that 30631 definition is not suitable for use in preprocessor conditionals. 30632 30633 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER 30634 Define this to a preprocessor constant that is nonzero if 30635 'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same. 30636 The default definition is '(HARD_FRAME_POINTER_REGNUM == 30637 ARG_POINTER_REGNUM)'; you only need to define this macro if that 30638 definition is not suitable for use in preprocessor conditionals. 30639 30640 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 30641 The register number of the return address pointer register, which 30642 is used to access the current function's return address from the 30643 stack. On some machines, the return address is not at a fixed 30644 offset from the frame pointer or stack pointer or argument pointer. 30645 This register can be defined to point to the return address on the 30646 stack, and then be converted by 'ELIMINABLE_REGS' into either the 30647 frame pointer or stack pointer. 30648 30649 Do not define this macro unless there is no other way to get the 30650 return address from the stack. 30651 30652 -- Macro: STATIC_CHAIN_REGNUM 30653 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 30654 Register numbers used for passing a function's static chain 30655 pointer. If register windows are used, the register number as seen 30656 by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the 30657 register number as seen by the calling function is 30658 'STATIC_CHAIN_REGNUM'. If these registers are the same, 30659 'STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 30660 30661 The static chain register need not be a fixed register. 30662 30663 If the static chain is passed in memory, these macros should not be 30664 defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used. 30665 30666 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE, 30667 bool INCOMING_P) 30668 This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for 30669 targets that may use different static chain locations for different 30670 nested functions. This may be required if the target has function 30671 attributes that affect the calling conventions of the function and 30672 those calling conventions use different static chain locations. 30673 30674 The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al. 30675 30676 If the static chain is passed in memory, this hook should be used 30677 to provide rtx giving 'mem' expressions that denote where they are 30678 stored. Often the 'mem' expression as seen by the caller will be 30679 at an offset from the stack pointer and the 'mem' expression as 30680 seen by the callee will be at an offset from the frame pointer. 30681 The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and 30682 'arg_pointer_rtx' will have been initialized and should be used to 30683 refer to those items. 30684 30685 -- Macro: DWARF_FRAME_REGISTERS 30686 This macro specifies the maximum number of hard registers that can 30687 be saved in a call frame. This is used to size data structures 30688 used in DWARF2 exception handling. 30689 30690 Prior to GCC 3.0, this macro was needed in order to establish a 30691 stable exception handling ABI in the face of adding new hard 30692 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 30693 insulated from changes in the number of hard registers. 30694 Nevertheless, this macro can still be used to reduce the runtime 30695 memory requirements of the exception handling routines, which can 30696 be substantial if the ISA contains a lot of registers that are not 30697 call-saved. 30698 30699 If this macro is not defined, it defaults to 30700 'FIRST_PSEUDO_REGISTER'. 30701 30702 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 30703 30704 This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided 30705 for backward compatibility in pre GCC 3.0 compiled code. 30706 30707 If this macro is not defined, it defaults to 30708 'DWARF_FRAME_REGISTERS'. 30709 30710 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 30711 30712 Define this macro if the target's representation for dwarf 30713 registers is different than the internal representation for unwind 30714 column. Given a dwarf register, this macro should return the 30715 internal unwind column number to use instead. 30716 30717 See the PowerPC's SPE target for an example. 30718 30719 -- Macro: DWARF_FRAME_REGNUM (REGNO) 30720 30721 Define this macro if the target's representation for dwarf 30722 registers used in .eh_frame or .debug_frame is different from that 30723 used in other debug info sections. Given a GCC hard register 30724 number, this macro should return the .eh_frame register number. 30725 The default is 'DBX_REGISTER_NUMBER (REGNO)'. 30726 30727 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 30728 30729 Define this macro to map register numbers held in the call frame 30730 info that GCC has collected using 'DWARF_FRAME_REGNUM' to those 30731 that should be output in .debug_frame ('FOR_EH' is zero) and 30732 .eh_frame ('FOR_EH' is nonzero). The default is to return 'REGNO'. 30733 30734 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT 30735 30736 Define this macro if the target stores register values as 30737 '_Unwind_Word' type in unwind context. It should be defined if 30738 target register size is larger than the size of 'void *'. The 30739 default is to store register values as 'void *' type. 30740 30741 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT 30742 30743 Define this macro to be 1 if the target always uses extended unwind 30744 context with version, args_size and by_value fields. If it is 30745 undefined, it will be defined to 1 when 30746 'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise. 30747 30748 30749File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 30750 3075117.9.5 Eliminating Frame Pointer and Arg Pointer 30752------------------------------------------------ 30753 30754This is about eliminating the frame pointer and arg pointer. 30755 30756 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 30757 This target hook should return 'true' if a function must have and 30758 use a frame pointer. This target hook is called in the reload 30759 pass. If its return value is 'true' the function will have a frame 30760 pointer. 30761 30762 This target hook can in principle examine the current function and 30763 decide according to the facts, but on most machines the constant 30764 'false' or the constant 'true' suffices. Use 'false' when the 30765 machine allows code to be generated with no frame pointer, and 30766 doing so saves some time or space. Use 'true' when there is no 30767 possible advantage to avoiding a frame pointer. 30768 30769 In certain cases, the compiler does not know how to produce valid 30770 code without a frame pointer. The compiler recognizes those cases 30771 and automatically gives the function a frame pointer regardless of 30772 what 'TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to 30773 worry about them. 30774 30775 In a function that does not require a frame pointer, the frame 30776 pointer register can be allocated for ordinary usage, unless you 30777 mark it as a fixed register. See 'FIXED_REGISTERS' for more 30778 information. 30779 30780 Default return value is 'false'. 30781 30782 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 30783 A C statement to store in the variable DEPTH-VAR the difference 30784 between the frame pointer and the stack pointer values immediately 30785 after the function prologue. The value would be computed from 30786 information such as the result of 'get_frame_size ()' and the 30787 tables of registers 'regs_ever_live' and 'call_used_regs'. 30788 30789 If 'ELIMINABLE_REGS' is defined, this macro will be not be used and 30790 need not be defined. Otherwise, it must be defined even if 30791 'TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case, 30792 you may set DEPTH-VAR to anything. 30793 30794 -- Macro: ELIMINABLE_REGS 30795 If defined, this macro specifies a table of register pairs used to 30796 eliminate unneeded registers that point into the stack frame. If 30797 it is not defined, the only elimination attempted by the compiler 30798 is to replace references to the frame pointer with references to 30799 the stack pointer. 30800 30801 The definition of this macro is a list of structure 30802 initializations, each of which specifies an original and 30803 replacement register. 30804 30805 On some machines, the position of the argument pointer is not known 30806 until the compilation is completed. In such a case, a separate 30807 hard register must be used for the argument pointer. This register 30808 can be eliminated by replacing it with either the frame pointer or 30809 the argument pointer, depending on whether or not the frame pointer 30810 has been eliminated. 30811 30812 In this case, you might specify: 30813 #define ELIMINABLE_REGS \ 30814 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 30815 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 30816 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 30817 30818 Note that the elimination of the argument pointer with the stack 30819 pointer is specified first since that is the preferred elimination. 30820 30821 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 30822 int TO_REG) 30823 This target hook should returns 'true' if the compiler is allowed 30824 to try to replace register number FROM_REG with register number 30825 TO_REG. This target hook need only be defined if 'ELIMINABLE_REGS' 30826 is defined, and will usually be 'true', since most of the cases 30827 preventing register elimination are things that the compiler 30828 already knows about. 30829 30830 Default return value is 'true'. 30831 30832 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 30833 This macro is similar to 'INITIAL_FRAME_POINTER_OFFSET'. It 30834 specifies the initial difference between the specified pair of 30835 registers. This macro must be defined if 'ELIMINABLE_REGS' is 30836 defined. 30837 30838 30839File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 30840 3084117.9.6 Passing Function Arguments on the Stack 30842---------------------------------------------- 30843 30844The macros in this section control how arguments are passed on the 30845stack. See the following section for other macros that control passing 30846certain arguments in registers. 30847 30848 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 30849 This target hook returns 'true' if an argument declared in a 30850 prototype as an integral type smaller than 'int' should actually be 30851 passed as an 'int'. In addition to avoiding errors in certain 30852 cases of mismatch, it also makes for better code on certain 30853 machines. The default is to not promote prototypes. 30854 30855 -- Macro: PUSH_ARGS 30856 A C expression. If nonzero, push insns will be used to pass 30857 outgoing arguments. If the target machine does not have a push 30858 instruction, set it to zero. That directs GCC to use an alternate 30859 strategy: to allocate the entire argument block and then store the 30860 arguments into it. When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING' 30861 must be defined too. 30862 30863 -- Macro: PUSH_ARGS_REVERSED 30864 A C expression. If nonzero, function arguments will be evaluated 30865 from last to first, rather than from first to last. If this macro 30866 is not defined, it defaults to 'PUSH_ARGS' on targets where the 30867 stack and args grow in opposite directions, and 0 otherwise. 30868 30869 -- Macro: PUSH_ROUNDING (NPUSHED) 30870 A C expression that is the number of bytes actually pushed onto the 30871 stack when an instruction attempts to push NPUSHED bytes. 30872 30873 On some machines, the definition 30874 30875 #define PUSH_ROUNDING(BYTES) (BYTES) 30876 30877 will suffice. But on other machines, instructions that appear to 30878 push one byte actually push two bytes in an attempt to maintain 30879 alignment. Then the definition should be 30880 30881 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 30882 30883 If the value of this macro has a type, it should be an unsigned 30884 type. 30885 30886 -- Macro: ACCUMULATE_OUTGOING_ARGS 30887 A C expression. If nonzero, the maximum amount of space required 30888 for outgoing arguments will be computed and placed into 30889 'crtl->outgoing_args_size'. No space will be pushed onto the stack 30890 for each call; instead, the function prologue should increase the 30891 stack frame size by this amount. 30892 30893 Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not 30894 proper. 30895 30896 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 30897 Define this macro if functions should assume that stack space has 30898 been allocated for arguments even when their values are passed in 30899 registers. 30900 30901 The value of this macro is the size, in bytes, of the area reserved 30902 for arguments passed in registers for the function represented by 30903 FNDECL, which can be zero if GCC is calling a library function. 30904 The argument FNDECL can be the FUNCTION_DECL, or the type itself of 30905 the function. 30906 30907 This space can be allocated by the caller, or be a part of the 30908 machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says 30909 which. 30910 30911 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL) 30912 Like 'REG_PARM_STACK_SPACE', but for incoming register arguments. 30913 Define this macro if space guaranteed when compiling a function 30914 body is different to space required when making a call, a situation 30915 that can arise with K&R style function definitions. 30916 30917 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 30918 Define this to a nonzero value if it is the responsibility of the 30919 caller to allocate the area reserved for arguments passed in 30920 registers when calling a function of FNTYPE. FNTYPE may be NULL if 30921 the function called is a library function. 30922 30923 If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 30924 whether the space for these arguments counts in the value of 30925 'crtl->outgoing_args_size'. 30926 30927 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 30928 Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the 30929 stack parameters don't skip the area specified by it. 30930 30931 Normally, when a parameter is not passed in registers, it is placed 30932 on the stack beyond the 'REG_PARM_STACK_SPACE' area. Defining this 30933 macro suppresses this behavior and causes the parameter to be 30934 passed on the stack in its natural location. 30935 30936 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree 30937 FUNTYPE, int SIZE) 30938 This target hook returns the number of bytes of its own arguments 30939 that a function pops on returning, or 0 if the function pops no 30940 arguments and the caller must therefore pop them all after the 30941 function returns. 30942 30943 FUNDECL is a C variable whose value is a tree node that describes 30944 the function in question. Normally it is a node of type 30945 'FUNCTION_DECL' that describes the declaration of the function. 30946 From this you can obtain the 'DECL_ATTRIBUTES' of the function. 30947 30948 FUNTYPE is a C variable whose value is a tree node that describes 30949 the function in question. Normally it is a node of type 30950 'FUNCTION_TYPE' that describes the data type of the function. From 30951 this it is possible to obtain the data types of the value and 30952 arguments (if known). 30953 30954 When a call to a library function is being considered, FUNDECL will 30955 contain an identifier node for the library function. Thus, if you 30956 need to distinguish among various library functions, you can do so 30957 by their names. Note that "library function" in this context means 30958 a function used to perform arithmetic, whose name is known 30959 specially in the compiler and was not mentioned in the C code being 30960 compiled. 30961 30962 SIZE is the number of bytes of arguments passed on the stack. If a 30963 variable number of bytes is passed, it is zero, and argument 30964 popping will always be the responsibility of the calling function. 30965 30966 On the VAX, all functions always pop their arguments, so the 30967 definition of this macro is SIZE. On the 68000, using the standard 30968 calling convention, no functions pop their arguments, so the value 30969 of the macro is always 0 in this case. But an alternative calling 30970 convention is available in which functions that take a fixed number 30971 of arguments pop them but other functions (such as 'printf') pop 30972 nothing (the caller pops all). When this convention is in use, 30973 FUNTYPE is examined to determine whether a function takes a fixed 30974 number of arguments. 30975 30976 -- Macro: CALL_POPS_ARGS (CUM) 30977 A C expression that should indicate the number of bytes a call 30978 sequence pops off the stack. It is added to the value of 30979 'RETURN_POPS_ARGS' when compiling a function call. 30980 30981 CUM is the variable in which all arguments to the called function 30982 have been accumulated. 30983 30984 On certain architectures, such as the SH5, a call trampoline is 30985 used that pops certain registers off the stack, depending on the 30986 arguments that have been passed to the function. Since this is a 30987 property of the call site, not of the called function, 30988 'RETURN_POPS_ARGS' is not appropriate. 30989 30990 30991File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 30992 3099317.9.7 Passing Arguments in Registers 30994------------------------------------- 30995 30996This section describes the macros which let you control how various 30997types of arguments are passed in registers or how they are arranged in 30998the stack. 30999 31000 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, 31001 machine_mode MODE, const_tree TYPE, bool NAMED) 31002 Return an RTX indicating whether a function argument is passed in a 31003 register and if so, which register. 31004 31005 The arguments are CA, which summarizes all the previous arguments; 31006 MODE, the machine mode of the argument; TYPE, the data type of the 31007 argument as a tree node or 0 if that is not known (which happens 31008 for C support library functions); and NAMED, which is 'true' for an 31009 ordinary argument and 'false' for nameless arguments that 31010 correspond to '...' in the called function's prototype. TYPE can 31011 be an incomplete type if a syntax error has previously occurred. 31012 31013 The return value is usually either a 'reg' RTX for the hard 31014 register in which to pass the argument, or zero to pass the 31015 argument on the stack. 31016 31017 The return value can be a 'const_int' which means argument is 31018 passed in a target specific slot with specified number. Target 31019 hooks should be used to store or load argument in such case. See 31020 'TARGET_STORE_BOUNDS_FOR_ARG' and 'TARGET_LOAD_BOUNDS_FOR_ARG' for 31021 more information. 31022 31023 The value of the expression can also be a 'parallel' RTX. This is 31024 used when an argument is passed in multiple locations. The mode of 31025 the 'parallel' should be the mode of the entire argument. The 31026 'parallel' holds any number of 'expr_list' pairs; each one 31027 describes where part of the argument is passed. In each 31028 'expr_list' the first operand must be a 'reg' RTX for the hard 31029 register in which to pass this part of the argument, and the mode 31030 of the register RTX indicates how large this part of the argument 31031 is. The second operand of the 'expr_list' is a 'const_int' which 31032 gives the offset in bytes into the entire argument of where this 31033 part starts. As a special exception the first 'expr_list' in the 31034 'parallel' RTX may have a first operand of zero. This indicates 31035 that the entire argument is also stored on the stack. 31036 31037 The last time this hook is called, it is called with 'MODE == 31038 VOIDmode', and its result is passed to the 'call' or 'call_value' 31039 pattern as operands 2 and 3 respectively. 31040 31041 The usual way to make the ISO library 'stdarg.h' work on a machine 31042 where some arguments are usually passed in registers, is to cause 31043 nameless arguments to be passed on the stack instead. This is done 31044 by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'. 31045 31046 You may use the hook 'targetm.calls.must_pass_in_stack' in the 31047 definition of this macro to determine if this argument is of a type 31048 that must be passed in the stack. If 'REG_PARM_STACK_SPACE' is not 31049 defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an 31050 argument, the compiler will abort. If 'REG_PARM_STACK_SPACE' is 31051 defined, the argument will be computed in the stack and then loaded 31052 into a register. 31053 31054 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (machine_mode MODE, 31055 const_tree TYPE) 31056 This target hook should return 'true' if we should not pass TYPE 31057 solely in registers. The file 'expr.h' defines a definition that 31058 is usually appropriate, refer to 'expr.h' for additional 31059 documentation. 31060 31061 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA, 31062 machine_mode MODE, const_tree TYPE, bool NAMED) 31063 Define this hook if the target machine has "register windows", so 31064 that the register in which a function sees an arguments is not 31065 necessarily the same as the one in which the caller passed the 31066 argument. 31067 31068 For such machines, 'TARGET_FUNCTION_ARG' computes the register in 31069 which the caller passes the value, and 31070 'TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar 31071 fashion to tell the function being called where the arguments will 31072 arrive. 31073 31074 If 'TARGET_FUNCTION_INCOMING_ARG' is not defined, 31075 'TARGET_FUNCTION_ARG' serves both purposes. 31076 31077 -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void) 31078 This hook should return 1 in case pseudo register should be created 31079 for pic_offset_table_rtx during function expand. 31080 31081 -- Target Hook: void TARGET_INIT_PIC_REG (void) 31082 Perform a target dependent initialization of pic_offset_table_rtx. 31083 This hook is called at the start of register allocation. 31084 31085 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM, 31086 machine_mode MODE, tree TYPE, bool NAMED) 31087 This target hook returns the number of bytes at the beginning of an 31088 argument that must be put in registers. The value must be zero for 31089 arguments that are passed entirely in registers or that are 31090 entirely pushed on the stack. 31091 31092 On some machines, certain arguments must be passed partially in 31093 registers and partially in memory. On these machines, typically 31094 the first few words of arguments are passed in registers, and the 31095 rest on the stack. If a multi-word argument (a 'double' or a 31096 structure) crosses that boundary, its first few words must be 31097 passed in registers and the rest must be pushed. This macro tells 31098 the compiler when this occurs, and how many bytes should go in 31099 registers. 31100 31101 'TARGET_FUNCTION_ARG' for these arguments should return the first 31102 register to be used by the caller for this argument; likewise 31103 'TARGET_FUNCTION_INCOMING_ARG', for the called function. 31104 31105 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM, 31106 machine_mode MODE, const_tree TYPE, bool NAMED) 31107 This target hook should return 'true' if an argument at the 31108 position indicated by CUM should be passed by reference. This 31109 predicate is queried after target independent reasons for being 31110 passed by reference, such as 'TREE_ADDRESSABLE (type)'. 31111 31112 If the hook returns true, a copy of that argument is made in memory 31113 and a pointer to the argument is passed instead of the argument 31114 itself. The pointer is passed in whatever way is appropriate for 31115 passing a pointer to that type. 31116 31117 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, 31118 machine_mode MODE, const_tree TYPE, bool NAMED) 31119 The function argument described by the parameters to this hook is 31120 known to be passed by reference. The hook should return true if 31121 the function argument should be copied by the callee instead of 31122 copied by the caller. 31123 31124 For any argument for which the hook returns true, if it can be 31125 determined that the argument is not modified, then a copy need not 31126 be generated. 31127 31128 The default version of this hook always returns false. 31129 31130 -- Macro: CUMULATIVE_ARGS 31131 A C type for declaring a variable that is used as the first 31132 argument of 'TARGET_FUNCTION_ARG' and other related values. For 31133 some target machines, the type 'int' suffices and can hold the 31134 number of bytes of argument so far. 31135 31136 There is no need to record in 'CUMULATIVE_ARGS' anything about the 31137 arguments that have been passed on the stack. The compiler has 31138 other variables to keep track of that. For target machines on 31139 which all arguments are passed on the stack, there is no need to 31140 store anything in 'CUMULATIVE_ARGS'; however, the data structure 31141 must exist and should not be empty, so use 'int'. 31142 31143 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 31144 If defined, this macro is called before generating any code for a 31145 function, but after the CFUN descriptor for the function has been 31146 created. The back end may use this macro to update CFUN to reflect 31147 an ABI other than that which would normally be used by default. If 31148 the compiler is generating code for a compiler-generated function, 31149 FNDECL may be 'NULL'. 31150 31151 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 31152 N_NAMED_ARGS) 31153 A C statement (sans semicolon) for initializing the variable CUM 31154 for the state at the beginning of the argument list. The variable 31155 has type 'CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 31156 for the data type of the function which will receive the args, or 0 31157 if the args are to a compiler support library function. For direct 31158 calls that are not libcalls, FNDECL contain the declaration node of 31159 the function. FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is 31160 used to find arguments for the function being compiled. 31161 N_NAMED_ARGS is set to the number of named arguments, including a 31162 structure return address if it is passed as a parameter, when 31163 making a call. When processing incoming arguments, N_NAMED_ARGS is 31164 set to -1. 31165 31166 When processing a call to a compiler support library function, 31167 LIBNAME identifies which one. It is a 'symbol_ref' rtx which 31168 contains the name of the function, as a string. LIBNAME is 0 when 31169 an ordinary C function call is being processed. Thus, each time 31170 this macro is called, either LIBNAME or FNTYPE is nonzero, but 31171 never both of them at once. 31172 31173 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 31174 Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it 31175 gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'. 31176 INDIRECT would always be zero, too. If this macro is not defined, 31177 'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 31178 31179 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 31180 Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 31181 finding the arguments for the function being compiled. If this 31182 macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead. 31183 31184 The value passed for LIBNAME is always 0, since library routines 31185 with special calling conventions are never compiled with GCC. The 31186 argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'. 31187 31188 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA, 31189 machine_mode MODE, const_tree TYPE, bool NAMED) 31190 This hook updates the summarizer variable pointed to by CA to 31191 advance past an argument in the argument list. The values MODE, 31192 TYPE and NAMED describe that argument. Once this is done, the 31193 variable CUM is suitable for analyzing the _following_ argument 31194 with 'TARGET_FUNCTION_ARG', etc. 31195 31196 This hook need not do anything if the argument in question was 31197 passed on the stack. The compiler knows how to track the amount of 31198 stack space used for arguments without any special help. 31199 31200 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE) 31201 If defined, a C expression that is the number of bytes to add to 31202 the offset of the argument passed in memory. This is needed for 31203 the SPU, which passes 'char' and 'short' arguments in the preferred 31204 slot that is in the middle of the quad word instead of starting at 31205 the top. 31206 31207 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 31208 If defined, a C expression which determines whether, and in which 31209 direction, to pad out an argument with extra space. The value 31210 should be of type 'enum direction': either 'upward' to pad above 31211 the argument, 'downward' to pad below, or 'none' to inhibit 31212 padding. 31213 31214 The _amount_ of padding is not controlled by this macro, but by the 31215 target hook 'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'. It is always 31216 just enough to reach the next multiple of that boundary. 31217 31218 This macro has a default definition which is right for most 31219 systems. For little-endian machines, the default is to pad upward. 31220 For big-endian machines, the default is to pad downward for an 31221 argument of constant size shorter than an 'int', and upward 31222 otherwise. 31223 31224 -- Macro: PAD_VARARGS_DOWN 31225 If defined, a C expression which determines whether the default 31226 implementation of va_arg will attempt to pad down before reading 31227 the next argument, if that argument is smaller than its aligned 31228 space as controlled by 'PARM_BOUNDARY'. If this macro is not 31229 defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN' 31230 is true. 31231 31232 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 31233 Specify padding for the last element of a block move between 31234 registers and memory. FIRST is nonzero if this is the only 31235 element. Defining this macro allows better control of register 31236 function parameters on big-endian machines, without using 31237 'PARALLEL' rtl. In particular, 'MUST_PASS_IN_STACK' need not test 31238 padding and mode of types in registers, as there is no longer a 31239 "wrong" part of a register; For example, a three byte aggregate may 31240 be passed in the high part of a register if so required. 31241 31242 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (machine_mode 31243 MODE, const_tree TYPE) 31244 This hook returns the alignment boundary, in bits, of an argument 31245 with the specified mode and type. The default hook returns 31246 'PARM_BOUNDARY' for all arguments. 31247 31248 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY 31249 (machine_mode MODE, const_tree TYPE) 31250 Normally, the size of an argument is rounded up to 'PARM_BOUNDARY', 31251 which is the default value for this hook. You can define this hook 31252 to return a different value if an argument size must be rounded to 31253 a larger value. 31254 31255 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 31256 A C expression that is nonzero if REGNO is the number of a hard 31257 register in which function arguments are sometimes passed. This 31258 does _not_ include implicit arguments such as the static chain and 31259 the structure-value address. On many machines, no registers can be 31260 used for this purpose since all function arguments are pushed on 31261 the stack. 31262 31263 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 31264 This hook should return true if parameter of type TYPE are passed 31265 as two scalar parameters. By default, GCC will attempt to pack 31266 complex arguments into the target's word size. Some ABIs require 31267 complex arguments to be split and treated as their individual 31268 components. For example, on AIX64, complex floats should be passed 31269 in a pair of floating point registers, even though a complex float 31270 would fit in one 64-bit floating point register. 31271 31272 The default value of this hook is 'NULL', which is treated as 31273 always false. 31274 31275 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 31276 This hook returns a type node for 'va_list' for the target. The 31277 default version of the hook returns 'void*'. 31278 31279 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME, 31280 tree *PTREE) 31281 This target hook is used in function 'c_common_nodes_and_builtins' 31282 to iterate through the target specific builtin types for va_list. 31283 The variable IDX is used as iterator. PNAME has to be a pointer to 31284 a 'const char *' and PTREE a pointer to a 'tree' typed variable. 31285 The arguments PNAME and PTREE are used to store the result of this 31286 macro and are set to the name of the va_list builtin type and its 31287 internal type. If the return value of this macro is zero, then 31288 there is no more element. Otherwise the IDX should be increased 31289 for the next call of this macro to iterate through all types. 31290 31291 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 31292 This hook returns the va_list type of the calling convention 31293 specified by FNDECL. The default version of this hook returns 31294 'va_list_type_node'. 31295 31296 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 31297 This hook returns the va_list type of the calling convention 31298 specified by the type of TYPE. If TYPE is not a valid va_list 31299 type, it returns 'NULL_TREE'. 31300 31301 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 31302 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 31303 This hook performs target-specific gimplification of 'VA_ARG_EXPR'. 31304 The first two parameters correspond to the arguments to 'va_arg'; 31305 the latter two are as in 'gimplify.c:gimplify_expr'. 31306 31307 -- Target Hook: bool TARGET_VALID_POINTER_MODE (machine_mode MODE) 31308 Define this to return nonzero if the port can handle pointers with 31309 machine mode MODE. The default version of this hook returns true 31310 for both 'ptr_mode' and 'Pmode'. 31311 31312 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref *REF) 31313 Define this to return nonzero if the memory reference REF may alias 31314 with the system C library errno location. The default version of 31315 this hook assumes the system C library errno location is either a 31316 declaration of type int or accessed by dereferencing a pointer to 31317 int. 31318 31319 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (machine_mode MODE) 31320 Define this to return nonzero if the port is prepared to handle 31321 insns involving scalar mode MODE. For a scalar mode to be 31322 considered supported, all the basic arithmetic and comparisons must 31323 work. 31324 31325 The default version of this hook returns true for any mode required 31326 to handle the basic C types (as defined by the port). Included 31327 here are the double-word arithmetic supported by the code in 31328 'optabs.c'. 31329 31330 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE) 31331 Define this to return nonzero if the port is prepared to handle 31332 insns involving vector mode MODE. At the very least, it must have 31333 move patterns for this mode. 31334 31335 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode MODE, 31336 unsigned HOST_WIDE_INT NELEMS) 31337 Return true if GCC should try to use a scalar mode to store an 31338 array of NELEMS elements, given that each element has mode MODE. 31339 Returning true here overrides the usual 'MAX_FIXED_MODE' limit and 31340 allows GCC to use any defined integer mode. 31341 31342 One use of this hook is to support vector load and store operations 31343 that operate on several homogeneous vectors. For example, ARM NEON 31344 has operations like: 31345 31346 int8x8x3_t vld3_s8 (const int8_t *) 31347 31348 where the return type is defined as: 31349 31350 typedef struct int8x8x3_t 31351 { 31352 int8x8_t val[3]; 31353 } int8x8x3_t; 31354 31355 If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t' 31356 can have the same mode. GCC can then store 'int8x8x3_t's in 31357 registers rather than forcing them onto the stack. 31358 31359 -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P 31360 (machine_mode MODE) 31361 Define this to return nonzero if libgcc provides support for the 31362 floating-point mode MODE, which is known to pass 31363 'TARGET_SCALAR_MODE_SUPPORTED_P'. The default version of this hook 31364 returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode', 31365 if such modes exist. 31366 31367 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P 31368 (machine_mode MODE) 31369 Define this to return nonzero for machine modes for which the port 31370 has small register classes. If this target hook returns nonzero 31371 for a given MODE, the compiler will try to minimize the lifetime of 31372 registers in MODE. The hook may be called with 'VOIDmode' as 31373 argument. In this case, the hook is expected to return nonzero if 31374 it returns nonzero for any mode. 31375 31376 On some machines, it is risky to let hard registers live across 31377 arbitrary insns. Typically, these machines have instructions that 31378 require values to be in specific registers (like an accumulator), 31379 and reload will fail if the required hard register is used for 31380 another purpose across such an insn. 31381 31382 Passes before reload do not know which hard registers will be used 31383 in an instruction, but the machine modes of the registers set or 31384 used in the instruction are already known. And for some machines, 31385 register classes are small for, say, integer registers but not for 31386 floating point registers. For example, the AMD x86-64 architecture 31387 requires specific registers for the legacy x86 integer 31388 instructions, but there are many SSE registers for floating point 31389 operations. On such targets, a good strategy may be to return 31390 nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero 31391 for the SSE register classes. 31392 31393 The default version of this hook returns false for any mode. It is 31394 always safe to redefine this hook to return with a nonzero value. 31395 But if you unnecessarily define it, you will reduce the amount of 31396 optimizations that can be performed in some cases. If you do not 31397 define this hook to return a nonzero value when it is required, the 31398 compiler will run out of spill registers and print a fatal error 31399 message. 31400 31401 31402File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 31403 3140417.9.8 How Scalar Function Values Are Returned 31405---------------------------------------------- 31406 31407This section discusses the macros that control returning scalars as 31408values--values that can fit in registers. 31409 31410 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 31411 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 31412 31413 Define this to return an RTX representing the place where a 31414 function returns or receives a value of data type RET_TYPE, a tree 31415 node representing a data type. FN_DECL_OR_TYPE is a tree node 31416 representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being 31417 called. If OUTGOING is false, the hook should compute the register 31418 in which the caller will see the return value. Otherwise, the hook 31419 should return an RTX representing the place where a function 31420 returns a value. 31421 31422 On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant. 31423 (Actually, on most machines, scalar values are returned in the same 31424 place regardless of mode.) The value of the expression is usually 31425 a 'reg' RTX for the hard register where the return value is stored. 31426 The value can also be a 'parallel' RTX, if the return value is in 31427 multiple places. See 'TARGET_FUNCTION_ARG' for an explanation of 31428 the 'parallel' form. Note that the callee will populate every 31429 location specified in the 'parallel', but if the first element of 31430 the 'parallel' contains the whole return value, callers will use 31431 that element as the canonical location and ignore the others. The 31432 m68k port uses this type of 'parallel' to return pointers in both 31433 '%a0' (the canonical location) and '%d0'. 31434 31435 If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 31436 the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is 31437 a scalar type. 31438 31439 If the precise function being called is known, FUNC is a tree node 31440 ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 31441 makes it possible to use a different value-returning convention for 31442 specific functions when all their calls are known. 31443 31444 Some target machines have "register windows" so that the register 31445 in which a function returns its value is not the same as the one in 31446 which the caller sees the value. For such machines, you should 31447 return different RTX depending on OUTGOING. 31448 31449 'TARGET_FUNCTION_VALUE' is not used for return values with 31450 aggregate data types, because these are returned in another way. 31451 See 'TARGET_STRUCT_VALUE_RTX' and related macros, below. 31452 31453 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 31454 This macro has been deprecated. Use 'TARGET_FUNCTION_VALUE' for a 31455 new target instead. 31456 31457 -- Macro: LIBCALL_VALUE (MODE) 31458 A C expression to create an RTX representing the place where a 31459 library function returns a value of mode MODE. 31460 31461 Note that "library function" in this context means a compiler 31462 support routine, used to perform arithmetic, whose name is known 31463 specially by the compiler and was not mentioned in the C code being 31464 compiled. 31465 31466 -- Target Hook: rtx TARGET_LIBCALL_VALUE (machine_mode MODE, const_rtx 31467 FUN) 31468 Define this hook if the back-end needs to know the name of the 31469 libcall function in order to determine where the result should be 31470 returned. 31471 31472 The mode of the result is given by MODE and the name of the called 31473 library function is given by FUN. The hook should return an RTX 31474 representing the place where the library function result will be 31475 returned. 31476 31477 If this hook is not defined, then LIBCALL_VALUE will be used. 31478 31479 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 31480 A C expression that is nonzero if REGNO is the number of a hard 31481 register in which the values of called function may come back. 31482 31483 A register whose use for returning values is limited to serving as 31484 the second of a pair (for a value of type 'double', say) need not 31485 be recognized by this macro. So for most machines, this definition 31486 suffices: 31487 31488 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 31489 31490 If the machine has register windows, so that the caller and the 31491 called function use different registers for the return value, this 31492 macro should recognize only the caller's register numbers. 31493 31494 This macro has been deprecated. Use 31495 'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead. 31496 31497 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int 31498 REGNO) 31499 A target hook that return 'true' if REGNO is the number of a hard 31500 register in which the values of called function may come back. 31501 31502 A register whose use for returning values is limited to serving as 31503 the second of a pair (for a value of type 'double', say) need not 31504 be recognized by this target hook. 31505 31506 If the machine has register windows, so that the caller and the 31507 called function use different registers for the return value, this 31508 target hook should recognize only the caller's register numbers. 31509 31510 If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be 31511 used. 31512 31513 -- Macro: APPLY_RESULT_SIZE 31514 Define this macro if 'untyped_call' and 'untyped_return' need more 31515 space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and 31516 restoring an arbitrary return value. 31517 31518 -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG 31519 Normally, when a function returns a structure by memory, the 31520 address is passed as an invisible pointer argument, but the 31521 compiler also arranges to return the address from the function like 31522 it would a normal pointer return value. Define this to true if 31523 that behaviour is undesirable on your target. 31524 31525 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 31526 This hook should return true if values of type TYPE are returned at 31527 the most significant end of a register (in other words, if they are 31528 padded at the least significant end). You can assume that TYPE is 31529 returned in a register; the caller is required to check this. 31530 31531 Note that the register provided by 'TARGET_FUNCTION_VALUE' must be 31532 able to hold the complete return value. For example, if a 1-, 2- 31533 or 3-byte structure is returned at the most significant end of a 31534 4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode' 31535 rtx. 31536 31537 31538File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 31539 3154017.9.9 How Large Values Are Returned 31541------------------------------------ 31542 31543When a function value's mode is 'BLKmode' (and in some other cases), the 31544value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar 31545Return::). Instead, the caller passes the address of a block of memory 31546in which the value should be stored. This address is called the 31547"structure value address". 31548 31549 This section describes how to control returning structure values in 31550memory. 31551 31552 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 31553 const_tree FNTYPE) 31554 This target hook should return a nonzero value to say to return the 31555 function value in memory, just as large structures are always 31556 returned. Here TYPE will be the data type of the value, and FNTYPE 31557 will be the type of the function doing the returning, or 'NULL' for 31558 libcalls. 31559 31560 Note that values of mode 'BLKmode' must be explicitly handled by 31561 this function. Also, the option '-fpcc-struct-return' takes effect 31562 regardless of this macro. On most systems, it is possible to leave 31563 the hook undefined; this causes a default definition to be used, 31564 whose value is the constant 1 for 'BLKmode' values, and 0 31565 otherwise. 31566 31567 Do not use this hook to indicate that structures and unions should 31568 always be returned in memory. You should instead use 31569 'DEFAULT_PCC_STRUCT_RETURN' to indicate this. 31570 31571 -- Macro: DEFAULT_PCC_STRUCT_RETURN 31572 Define this macro to be 1 if all structure and union return values 31573 must be in memory. Since this results in slower code, this should 31574 be defined only if needed for compatibility with other compilers or 31575 with an ABI. If you define this macro to be 0, then the 31576 conventions used for structure and union return values are decided 31577 by the 'TARGET_RETURN_IN_MEMORY' target hook. 31578 31579 If not defined, this defaults to the value 1. 31580 31581 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 31582 This target hook should return the location of the structure value 31583 address (normally a 'mem' or 'reg'), or 0 if the address is passed 31584 as an "invisible" first argument. Note that FNDECL may be 'NULL', 31585 for libcalls. You do not need to define this target hook if the 31586 address is always passed as an "invisible" first argument. 31587 31588 On some architectures the place where the structure value address 31589 is found by the called function is not the same place that the 31590 caller put it. This can be due to register windows, or it could be 31591 because the function prologue moves it to a different place. 31592 INCOMING is '1' or '2' when the location is needed in the context 31593 of the called function, and '0' in the context of the caller. 31594 31595 If INCOMING is nonzero and the address is to be found on the stack, 31596 return a 'mem' which refers to the frame pointer. If INCOMING is 31597 '2', the result is being used to fetch the structure value address 31598 at the beginning of a function. If you need to emit adjusting 31599 code, you should do it at this point. 31600 31601 -- Macro: PCC_STATIC_STRUCT_RETURN 31602 Define this macro if the usual system convention on the target 31603 machine for returning structures and unions is for the called 31604 function to return the address of a static variable containing the 31605 value. 31606 31607 Do not define this if the usual system convention is for the caller 31608 to pass an address to the subroutine. 31609 31610 This macro has effect in '-fpcc-struct-return' mode, but it does 31611 nothing when you use '-freg-struct-return' mode. 31612 31613 -- Target Hook: machine_mode TARGET_GET_RAW_RESULT_MODE (int REGNO) 31614 This target hook returns the mode to be used when accessing raw 31615 return registers in '__builtin_return'. Define this macro if the 31616 value in REG_RAW_MODE is not correct. 31617 31618 -- Target Hook: machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO) 31619 This target hook returns the mode to be used when accessing raw 31620 argument registers in '__builtin_apply_args'. Define this macro if 31621 the value in REG_RAW_MODE is not correct. 31622 31623 31624File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 31625 3162617.9.10 Caller-Saves Register Allocation 31627---------------------------------------- 31628 31629If you enable it, GCC can save registers around function calls. This 31630makes it possible to use call-clobbered registers to hold variables that 31631must live across calls. 31632 31633 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 31634 A C expression specifying which mode is required for saving NREGS 31635 of a pseudo-register in call-clobbered hard register REGNO. If 31636 REGNO is unsuitable for caller save, 'VOIDmode' should be returned. 31637 For most machines this macro need not be defined since GCC will 31638 select the smallest suitable mode. 31639 31640 31641File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 31642 3164317.9.11 Function Entry and Exit 31644------------------------------- 31645 31646This section describes the macros that output function entry 31647("prologue") and exit ("epilogue") code. 31648 31649 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 31650 HOST_WIDE_INT SIZE) 31651 If defined, a function that outputs the assembler code for entry to 31652 a function. The prologue is responsible for setting up the stack 31653 frame, initializing the frame pointer register, saving registers 31654 that must be saved, and allocating SIZE additional bytes of storage 31655 for the local variables. SIZE is an integer. FILE is a stdio 31656 stream to which the assembler code should be output. 31657 31658 The label for the beginning of the function need not be output by 31659 this macro. That has already been done when the macro is run. 31660 31661 To determine which registers to save, the macro can refer to the 31662 array 'regs_ever_live': element R is nonzero if hard register R is 31663 used anywhere within the function. This implies the function 31664 prologue should save register R, provided it is not one of the 31665 call-used registers. ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise 31666 use 'regs_ever_live'.) 31667 31668 On machines that have "register windows", the function entry code 31669 does not save on the stack the registers that are in the windows, 31670 even if they are supposed to be preserved by function calls; 31671 instead it takes appropriate steps to "push" the register stack, if 31672 any non-call-used registers are used in the function. 31673 31674 On machines where functions may or may not have frame-pointers, the 31675 function entry code must vary accordingly; it must set up the frame 31676 pointer if one is wanted, and not otherwise. To determine whether 31677 a frame pointer is in wanted, the macro can refer to the variable 31678 'frame_pointer_needed'. The variable's value will be 1 at run time 31679 in a function that needs a frame pointer. *Note Elimination::. 31680 31681 The function entry code is responsible for allocating any stack 31682 space required for the function. This stack space consists of the 31683 regions listed below. In most cases, these regions are allocated 31684 in the order listed, with the last listed region closest to the top 31685 of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is 31686 defined, and the highest address if it is not defined). You can 31687 use a different order for a machine if doing so is more convenient 31688 or required for compatibility reasons. Except in cases where 31689 required by standard or by a debugger, there is no reason why the 31690 stack layout used by GCC need agree with that used by other 31691 compilers for a machine. 31692 31693 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 31694 If defined, a function that outputs assembler code at the end of a 31695 prologue. This should be used when the function prologue is being 31696 emitted as RTL, and you have some extra assembler that needs to be 31697 emitted. *Note prologue instruction pattern::. 31698 31699 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 31700 If defined, a function that outputs assembler code at the start of 31701 an epilogue. This should be used when the function epilogue is 31702 being emitted as RTL, and you have some extra assembler that needs 31703 to be emitted. *Note epilogue instruction pattern::. 31704 31705 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 31706 HOST_WIDE_INT SIZE) 31707 If defined, a function that outputs the assembler code for exit 31708 from a function. The epilogue is responsible for restoring the 31709 saved registers and stack pointer to their values when the function 31710 was called, and returning control to the caller. This macro takes 31711 the same arguments as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and 31712 the registers to restore are determined from 'regs_ever_live' and 31713 'CALL_USED_REGISTERS' in the same way. 31714 31715 On some machines, there is a single instruction that does all the 31716 work of returning from the function. On these machines, give that 31717 instruction the name 'return' and do not define the macro 31718 'TARGET_ASM_FUNCTION_EPILOGUE' at all. 31719 31720 Do not define a pattern named 'return' if you want the 31721 'TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 31722 switches to control whether return instructions or epilogues are 31723 used, define a 'return' pattern with a validity condition that 31724 tests the target switches appropriately. If the 'return' pattern's 31725 validity condition is false, epilogues will be used. 31726 31727 On machines where functions may or may not have frame-pointers, the 31728 function exit code must vary accordingly. Sometimes the code for 31729 these two cases is completely different. To determine whether a 31730 frame pointer is wanted, the macro can refer to the variable 31731 'frame_pointer_needed'. The variable's value will be 1 when 31732 compiling a function that needs a frame pointer. 31733 31734 Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and 31735 'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 31736 The C variable 'current_function_is_leaf' is nonzero for such a 31737 function. *Note Leaf Functions::. 31738 31739 On some machines, some functions pop their arguments on exit while 31740 others leave that for the caller to do. For example, the 68020 31741 when given '-mrtd' pops arguments in functions that take a fixed 31742 number of arguments. 31743 31744 Your definition of the macro 'RETURN_POPS_ARGS' decides which 31745 functions pop their own arguments. 'TARGET_ASM_FUNCTION_EPILOGUE' 31746 needs to know what was decided. The number of bytes of the current 31747 function's arguments that this function should pop is available in 31748 'crtl->args.pops_args'. *Note Scalar Return::. 31749 31750 * A region of 'crtl->args.pretend_args_size' bytes of uninitialized 31751 space just underneath the first argument arriving on the stack. 31752 (This may not be at the very start of the allocated stack region if 31753 the calling sequence has pushed anything else since pushing the 31754 stack arguments. But usually, on such machines, nothing else has 31755 been pushed yet, because the function prologue itself does all the 31756 pushing.) This region is used on machines where an argument may be 31757 passed partly in registers and partly in memory, and, in some cases 31758 to support the features in '<stdarg.h>'. 31759 31760 * An area of memory used to save certain registers used by the 31761 function. The size of this area, which may also include space for 31762 such things as the return address and pointers to previous stack 31763 frames, is machine-specific and usually depends on which registers 31764 have been used in the function. Machines with register windows 31765 often do not require a save area. 31766 31767 * A region of at least SIZE bytes, possibly rounded up to an 31768 allocation boundary, to contain the local variables of the 31769 function. On some machines, this region and the save area may 31770 occur in the opposite order, with the save area closer to the top 31771 of the stack. 31772 31773 * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of 31774 'crtl->outgoing_args_size' bytes to be used for outgoing argument 31775 lists of the function. *Note Stack Arguments::. 31776 31777 -- Macro: EXIT_IGNORE_STACK 31778 Define this macro as a C expression that is nonzero if the return 31779 instruction or the function epilogue ignores the value of the stack 31780 pointer; in other words, if it is safe to delete an instruction to 31781 adjust the stack pointer before a return from the function. The 31782 default is 0. 31783 31784 Note that this macro's value is relevant only for functions for 31785 which frame pointers are maintained. It is never safe to delete a 31786 final stack adjustment in a function that has no frame pointer, and 31787 the compiler knows this regardless of 'EXIT_IGNORE_STACK'. 31788 31789 -- Macro: EPILOGUE_USES (REGNO) 31790 Define this macro as a C expression that is nonzero for registers 31791 that are used by the epilogue or the 'return' pattern. The stack 31792 and frame pointer registers are already assumed to be used as 31793 needed. 31794 31795 -- Macro: EH_USES (REGNO) 31796 Define this macro as a C expression that is nonzero for registers 31797 that are used by the exception handling mechanism, and so should be 31798 considered live on entry to an exception edge. 31799 31800 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 31801 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 31802 tree FUNCTION) 31803 A function that outputs the assembler code for a thunk function, 31804 used to implement C++ virtual function calls with multiple 31805 inheritance. The thunk acts as a wrapper around a virtual 31806 function, adjusting the implicit object parameter before handing 31807 control off to the real function. 31808 31809 First, emit code to add the integer DELTA to the location that 31810 contains the incoming first argument. Assume that this argument 31811 contains a pointer, and is the one used to pass the 'this' pointer 31812 in C++. This is the incoming argument _before_ the function 31813 prologue, e.g. '%o0' on a sparc. The addition must preserve the 31814 values of all other incoming arguments. 31815 31816 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 31817 be made after adding 'delta'. In particular, if P is the adjusted 31818 pointer, the following adjustment should be made: 31819 31820 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 31821 31822 After the additions, emit code to jump to FUNCTION, which is a 31823 'FUNCTION_DECL'. This is a direct pure jump, not a call, and does 31824 not touch the return address. Hence returning from FUNCTION will 31825 return to whoever called the current 'thunk'. 31826 31827 The effect must be as if FUNCTION had been called directly with the 31828 adjusted first argument. This macro is responsible for emitting 31829 all of the code for a thunk function; 31830 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' 31831 are not invoked. 31832 31833 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 31834 been extracted from it.) It might possibly be useful on some 31835 targets, but probably not. 31836 31837 If you do not define this macro, the target-independent code in the 31838 C++ front end will generate a less efficient heavyweight thunk that 31839 calls FUNCTION instead of jumping to it. The generic approach does 31840 not support varargs. 31841 31842 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 31843 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 31844 const_tree FUNCTION) 31845 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be 31846 able to output the assembler code for the thunk function specified 31847 by the arguments it is passed, and false otherwise. In the latter 31848 case, the generic approach will be used by the C++ front end, with 31849 the limitations previously exposed. 31850 31851 31852File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 31853 3185417.9.12 Generating Code for Profiling 31855------------------------------------- 31856 31857These macros will help you generate code for profiling. 31858 31859 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 31860 A C statement or compound statement to output to FILE some 31861 assembler code to call the profiling subroutine 'mcount'. 31862 31863 The details of how 'mcount' expects to be called are determined by 31864 your operating system environment, not by GCC. To figure them out, 31865 compile a small program for profiling using the system's installed 31866 C compiler and look at the assembler code that results. 31867 31868 Older implementations of 'mcount' expect the address of a counter 31869 variable to be loaded into some register. The name of this 31870 variable is 'LP' followed by the number LABELNO, so you would 31871 generate the name using 'LP%d' in a 'fprintf'. 31872 31873 -- Macro: PROFILE_HOOK 31874 A C statement or compound statement to output to FILE some assembly 31875 code to call the profiling subroutine 'mcount' even the target does 31876 not support profiling. 31877 31878 -- Macro: NO_PROFILE_COUNTERS 31879 Define this macro to be an expression with a nonzero value if the 31880 'mcount' subroutine on your system does not need a counter variable 31881 allocated for each function. This is true for almost all modern 31882 implementations. If you define this macro, you must not use the 31883 LABELNO argument to 'FUNCTION_PROFILER'. 31884 31885 -- Macro: PROFILE_BEFORE_PROLOGUE 31886 Define this macro if the code for function profiling should come 31887 before the function prologue. Normally, the profiling code comes 31888 after. 31889 31890 -- Target Hook: bool TARGET_KEEP_LEAF_WHEN_PROFILED (void) 31891 This target hook returns true if the target wants the leaf flag for 31892 the current function to stay true even if it calls mcount. This 31893 might make sense for targets using the leaf flag only to determine 31894 whether a stack frame needs to be generated or not and for which 31895 the call to mcount is generated before the function prologue. 31896 31897 31898File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 31899 3190017.9.13 Permitting tail calls 31901----------------------------- 31902 31903 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 31904 EXP) 31905 True if it is OK to do sibling call optimization for the specified 31906 call expression EXP. DECL will be the called function, or 'NULL' 31907 if this is an indirect call. 31908 31909 It is not uncommon for limitations of calling conventions to 31910 prevent tail calls to functions outside the current unit of 31911 translation, or during PIC compilation. The hook is used to 31912 enforce these restrictions, as the 'sibcall' md pattern can not 31913 fail, or fall over to a "normal" call. The criteria for successful 31914 sibling call optimization may vary greatly between different 31915 architectures. 31916 31917 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 31918 Add any hard registers to REGS that are live on entry to the 31919 function. This hook only needs to be defined to provide registers 31920 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 31921 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 31922 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, 31923 EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the 31924 PIC_OFFSET_TABLE_REGNUM. 31925 31926 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct 31927 hard_reg_set_container *) 31928 This hook should add additional registers that are computed by the 31929 prologue to the hard regset for shrink-wrapping optimization 31930 purposes. 31931 31932 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree) 31933 True if a function's return statements should be checked for 31934 matching the function's return type. This includes checking for 31935 falling off the end of a non-void function. Return false if no 31936 such check should be made. 31937 31938 31939File: gccint.info, Node: Stack Smashing Protection, Next: Miscellaneous Register Hooks, Prev: Tail Calls, Up: Stack and Calling 31940 3194117.9.14 Stack smashing protection 31942--------------------------------- 31943 31944 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 31945 This hook returns a 'DECL' node for the external variable to use 31946 for the stack protection guard. This variable is initialized by 31947 the runtime to some random value and is used to initialize the 31948 guard value that is placed at the top of the local stack frame. 31949 The type of this variable must be 'ptr_type_node'. 31950 31951 The default version of this hook creates a variable called 31952 '__stack_chk_guard', which is normally defined in 'libgcc2.c'. 31953 31954 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 31955 This hook returns a 'CALL_EXPR' that alerts the runtime that the 31956 stack protect guard variable has been modified. This expression 31957 should involve a call to a 'noreturn' function. 31958 31959 The default version of this hook invokes a function called 31960 '__stack_chk_fail', taking no arguments. This function is normally 31961 defined in 'libgcc2.c'. 31962 31963 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, 31964 struct gcc_options *OPTS) 31965 Whether this target supports splitting the stack when the options 31966 described in OPTS have been passed. This is called after options 31967 have been parsed, so the target may reject splitting the stack in 31968 some configurations. The default version of this hook returns 31969 false. If REPORT is true, this function may issue a warning or 31970 error; if REPORT is false, it must simply return a value 31971 31972 31973File: gccint.info, Node: Miscellaneous Register Hooks, Prev: Stack Smashing Protection, Up: Stack and Calling 31974 3197517.9.15 Miscellaneous register hooks 31976------------------------------------ 31977 31978 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS 31979 Set to true if each call that binds to a local definition 31980 explicitly clobbers or sets all non-fixed registers modified by 31981 performing the call. That is, by the call pattern itself, or by 31982 code that might be inserted by the linker (e.g. stubs, veneers, 31983 branch islands), but not including those modifiable by the callee. 31984 The affected registers may be mentioned explicitly in the call 31985 pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The 31986 default version of this hook is set to false. The purpose of this 31987 hook is to enable the fipa-ra optimization. 31988 31989 31990File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 31991 3199217.10 Implementing the Varargs Macros 31993===================================== 31994 31995GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that 31996work without change on machines that pass arguments on the stack. Other 31997machines require their own implementations of varargs, and the two 31998machine independent header files must have conditionals to include it. 31999 32000 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the 32001calling convention for 'va_start'. The traditional implementation takes 32002just one argument, which is the variable in which to store the argument 32003pointer. The ISO implementation of 'va_start' takes an additional 32004second argument. The user is supposed to write the last named argument 32005of the function here. 32006 32007 However, 'va_start' should not use this argument. The way to find the 32008end of the named arguments is with the built-in functions described 32009below. 32010 32011 -- Macro: __builtin_saveregs () 32012 Use this built-in function to save the argument registers in memory 32013 so that the varargs mechanism can access them. Both ISO and 32014 traditional versions of 'va_start' must use '__builtin_saveregs', 32015 unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 32016 32017 On some machines, '__builtin_saveregs' is open-coded under the 32018 control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'. On 32019 other machines, it calls a routine written in assembler language, 32020 found in 'libgcc2.c'. 32021 32022 Code generated for the call to '__builtin_saveregs' appears at the 32023 beginning of the function, as opposed to where the call to 32024 '__builtin_saveregs' is written, regardless of what the code is. 32025 This is because the registers must be saved before the function 32026 starts to use them for its own purposes. 32027 32028 -- Macro: __builtin_next_arg (LASTARG) 32029 This builtin returns the address of the first anonymous stack 32030 argument, as type 'void *'. If 'ARGS_GROW_DOWNWARD', it returns 32031 the address of the location above the first anonymous stack 32032 argument. Use it in 'va_start' to initialize the pointer for 32033 fetching arguments from the stack. Also use it in 'va_start' to 32034 verify that the second parameter LASTARG is the last named argument 32035 of the current function. 32036 32037 -- Macro: __builtin_classify_type (OBJECT) 32038 Since each machine has its own conventions for which data types are 32039 passed in which kind of register, your implementation of 'va_arg' 32040 has to embody these conventions. The easiest way to categorize the 32041 specified data type is to use '__builtin_classify_type' together 32042 with 'sizeof' and '__alignof__'. 32043 32044 '__builtin_classify_type' ignores the value of OBJECT, considering 32045 only its data type. It returns an integer describing what kind of 32046 type that is--integer, floating, pointer, structure, and so on. 32047 32048 The file 'typeclass.h' defines an enumeration that you can use to 32049 interpret the values of '__builtin_classify_type'. 32050 32051 These machine description macros help implement varargs: 32052 32053 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 32054 If defined, this hook produces the machine-specific code for a call 32055 to '__builtin_saveregs'. This code will be moved to the very 32056 beginning of the function, before any parameter access are made. 32057 The return value of this function should be an RTX that contains 32058 the value to use as the return of '__builtin_saveregs'. 32059 32060 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 32061 ARGS_SO_FAR, machine_mode MODE, tree TYPE, int 32062 *PRETEND_ARGS_SIZE, int SECOND_TIME) 32063 This target hook offers an alternative to using 32064 '__builtin_saveregs' and defining the hook 32065 'TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 32066 register arguments into the stack so that all the arguments appear 32067 to have been passed consecutively on the stack. Once this is done, 32068 you can use the standard implementation of varargs that works for 32069 machines that pass all their arguments on the stack. 32070 32071 The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data 32072 structure, containing the values that are obtained after processing 32073 the named arguments. The arguments MODE and TYPE describe the last 32074 named argument--its machine mode and its data type as a tree node. 32075 32076 The target hook should do two things: first, push onto the stack 32077 all the argument registers _not_ used for the named arguments, and 32078 second, store the size of the data thus pushed into the 32079 'int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 32080 that you store here will serve as additional offset for setting up 32081 the stack frame. 32082 32083 Because you must generate code to push the anonymous arguments at 32084 compile time without knowing their data types, 32085 'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 32086 have just a single category of argument register and use it 32087 uniformly for all data types. 32088 32089 If the argument SECOND_TIME is nonzero, it means that the arguments 32090 of the function are being analyzed for the second time. This 32091 happens for an inline function, which is not actually compiled 32092 until the end of the source file. The hook 32093 'TARGET_SETUP_INCOMING_VARARGS' should not generate any 32094 instructions in this case. 32095 32096 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 32097 CA) 32098 Define this hook to return 'true' if the location where a function 32099 argument is passed depends on whether or not it is a named 32100 argument. 32101 32102 This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG' 32103 is set for varargs and stdarg functions. If this hook returns 32104 'true', the NAMED argument is always true for named arguments, and 32105 false for unnamed arguments. If it returns 'false', but 32106 'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all 32107 arguments are treated as named. Otherwise, all named arguments 32108 except the last are treated as named. 32109 32110 You need not define this hook if it always returns 'false'. 32111 32112 -- Target Hook: void TARGET_CALL_ARGS (rtx, TREE) 32113 While generating RTL for a function call, this target hook is 32114 invoked once for each argument passed to the function, either a 32115 register returned by 'TARGET_FUNCTION_ARG' or a memory location. 32116 It is called just before the point where argument registers are 32117 stored. The type of the function to be called is also passed as 32118 the second argument; it is 'NULL_TREE' for libcalls. The 32119 'TARGET_END_CALL_ARGS' hook is invoked just after the code to copy 32120 the return reg has been emitted. This functionality can be used to 32121 perform special setup of call argument registers if a target needs 32122 it. For functions without arguments, the hook is called once with 32123 'pc_rtx' passed instead of an argument register. Most ports do not 32124 need to implement anything for this hook. 32125 32126 -- Target Hook: void TARGET_END_CALL_ARGS (void) 32127 This target hook is invoked while generating RTL for a function 32128 call, just after the point where the return reg is copied into a 32129 pseudo. It signals that all the call argument and return registers 32130 for the just emitted call are now no longer in use. Most ports do 32131 not need to implement anything for this hook. 32132 32133 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 32134 (cumulative_args_t CA) 32135 If you need to conditionally change ABIs so that one works with 32136 'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 32137 'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING' 32138 was defined, then define this hook to return 'true' if 32139 'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise. 32140 Otherwise, you should not define this hook. 32141 32142 -- Target Hook: rtx TARGET_LOAD_BOUNDS_FOR_ARG (rtx SLOT, rtx ARG, rtx 32143 SLOT_NO) 32144 This hook is used by expand pass to emit insn to load bounds of ARG 32145 passed in SLOT. Expand pass uses this hook in case bounds of ARG 32146 are not passed in register. If SLOT is a memory, then bounds are 32147 loaded as for regular pointer loaded from memory. If SLOT is not a 32148 memory then SLOT_NO is an integer constant holding number of the 32149 target dependent special slot which should be used to obtain 32150 bounds. Hook returns RTX holding loaded bounds. 32151 32152 -- Target Hook: void TARGET_STORE_BOUNDS_FOR_ARG (rtx ARG, rtx SLOT, 32153 rtx BOUNDS, rtx SLOT_NO) 32154 This hook is used by expand pass to emit insns to store BOUNDS of 32155 ARG passed in SLOT. Expand pass uses this hook in case BOUNDS of 32156 ARG are not passed in register. If SLOT is a memory, then BOUNDS 32157 are stored as for regular pointer stored in memory. If SLOT is not 32158 a memory then SLOT_NO is an integer constant holding number of the 32159 target dependent special slot which should be used to store BOUNDS. 32160 32161 -- Target Hook: rtx TARGET_LOAD_RETURNED_BOUNDS (rtx SLOT) 32162 This hook is used by expand pass to emit insn to load bounds 32163 returned by function call in SLOT. Hook returns RTX holding loaded 32164 bounds. 32165 32166 -- Target Hook: void TARGET_STORE_RETURNED_BOUNDS (rtx SLOT, rtx 32167 BOUNDS) 32168 This hook is used by expand pass to emit insn to store BOUNDS 32169 returned by function call into SLOT. 32170 32171 -- Target Hook: rtx TARGET_CHKP_FUNCTION_VALUE_BOUNDS (const_tree 32172 RET_TYPE, const_tree FN_DECL_OR_TYPE, bool OUTGOING) 32173 Define this to return an RTX representing the place where a 32174 function returns bounds for returned pointers. Arguments meaning 32175 is similar to 'TARGET_FUNCTION_VALUE'. 32176 32177 -- Target Hook: void TARGET_SETUP_INCOMING_VARARG_BOUNDS 32178 (cumulative_args_t ARGS_SO_FAR, enum machine_mode MODE, tree 32179 TYPE, int *PRETEND_ARGS_SIZE, int SECOND_TIME) 32180 Use it to store bounds for anonymous register arguments stored into 32181 the stack. Arguments meaning is similar to 32182 'TARGET_SETUP_INCOMING_VARARGS'. 32183 32184 32185File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 32186 3218717.11 Trampolines for Nested Functions 32188====================================== 32189 32190A "trampoline" is a small piece of code that is created at run time when 32191the address of a nested function is taken. It normally resides on the 32192stack, in the stack frame of the containing function. These macros tell 32193GCC how to generate code to allocate and initialize a trampoline. 32194 32195 The instructions in the trampoline must do two things: load a constant 32196address into the static chain register, and jump to the real address of 32197the nested function. On CISC machines such as the m68k, this requires 32198two instructions, a move immediate and a jump. Then the two addresses 32199exist in the trampoline as word-long immediate operands. On RISC 32200machines, it is often necessary to load each address into a register in 32201two parts. Then pieces of each address form separate immediate 32202operands. 32203 32204 The code generated to initialize the trampoline must store the variable 32205parts--the static chain value and the function address--into the 32206immediate operands of the instructions. On a CISC machine, this is 32207simply a matter of copying each address to a memory reference at the 32208proper offset from the start of the trampoline. On a RISC machine, it 32209may be necessary to take out pieces of the address and store them 32210separately. 32211 32212 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 32213 This hook is called by 'assemble_trampoline_template' to output, on 32214 the stream F, assembler code for a block of data that contains the 32215 constant parts of a trampoline. This code should not include a 32216 label--the label is taken care of automatically. 32217 32218 If you do not define this hook, it means no template is needed for 32219 the target. Do not define this hook on systems where the block 32220 move code to copy the trampoline into place would be larger than 32221 the code to generate it on the spot. 32222 32223 -- Macro: TRAMPOLINE_SECTION 32224 Return the section into which the trampoline template is to be 32225 placed (*note Sections::). The default value is 32226 'readonly_data_section'. 32227 32228 -- Macro: TRAMPOLINE_SIZE 32229 A C expression for the size in bytes of the trampoline, as an 32230 integer. 32231 32232 -- Macro: TRAMPOLINE_ALIGNMENT 32233 Alignment required for trampolines, in bits. 32234 32235 If you don't define this macro, the value of 'FUNCTION_ALIGNMENT' 32236 is used for aligning trampolines. 32237 32238 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 32239 rtx STATIC_CHAIN) 32240 This hook is called to initialize a trampoline. M_TRAMP is an RTX 32241 for the memory block for the trampoline; FNDECL is the 32242 'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for 32243 the static chain value that should be passed to the function when 32244 it is called. 32245 32246 If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 32247 first thing this hook should do is emit a block move into M_TRAMP 32248 from the memory block returned by 'assemble_trampoline_template'. 32249 Note that the block move need only cover the constant parts of the 32250 trampoline. If the target isolates the variable parts of the 32251 trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be 32252 copied. 32253 32254 If the target requires any other actions, such as flushing caches 32255 or enabling stack execution, these actions should be performed 32256 after initializing the trampoline proper. 32257 32258 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 32259 This hook should perform any machine-specific adjustment in the 32260 address of the trampoline. Its argument contains the address of 32261 the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'. In 32262 case the address to be used for a function call should be different 32263 from the address at which the template was stored, the different 32264 address should be returned; otherwise ADDR should be returned 32265 unchanged. If this hook is not defined, ADDR will be used for 32266 function calls. 32267 32268 Implementing trampolines is difficult on many machines because they 32269have separate instruction and data caches. Writing into a stack 32270location fails to clear the memory in the instruction cache, so when the 32271program jumps to that location, it executes the old contents. 32272 32273 Here are two possible solutions. One is to clear the relevant parts of 32274the instruction cache whenever a trampoline is set up. The other is to 32275make all trampolines identical, by having them jump to a standard 32276subroutine. The former technique makes trampoline execution faster; the 32277latter makes initialization faster. 32278 32279 To clear the instruction cache when a trampoline is initialized, define 32280the following macro. 32281 32282 -- Macro: CLEAR_INSN_CACHE (BEG, END) 32283 If defined, expands to a C expression clearing the _instruction 32284 cache_ in the specified interval. The definition of this macro 32285 would typically be a series of 'asm' statements. Both BEG and END 32286 are both pointer expressions. 32287 32288 To use a standard subroutine, define the following macro. In addition, 32289you must make sure that the instructions in a trampoline fill an entire 32290cache line with identical instructions, or else ensure that the 32291beginning of the trampoline code is always aligned at the same point in 32292its cache line. Look in 'm68k.h' as a guide. 32293 32294 -- Macro: TRANSFER_FROM_TRAMPOLINE 32295 Define this macro if trampolines need a special subroutine to do 32296 their work. The macro should expand to a series of 'asm' 32297 statements which will be compiled with GCC. They go in a library 32298 function named '__transfer_from_trampoline'. 32299 32300 If you need to avoid executing the ordinary prologue code of a 32301 compiled C function when you jump to the subroutine, you can do so 32302 by placing a special label of your own in the assembler code. Use 32303 one 'asm' statement to generate an assembler label, and another to 32304 make the label global. Then trampolines can use that label to jump 32305 directly to your special assembler code. 32306 32307 32308File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 32309 3231017.12 Implicit Calls to Library Routines 32311======================================== 32312 32313Here is an explanation of implicit calls to library routines. 32314 32315 -- Macro: DECLARE_LIBRARY_RENAMES 32316 This macro, if defined, should expand to a piece of C code that 32317 will get expanded when compiling functions for libgcc.a. It can be 32318 used to provide alternate names for GCC's internal library 32319 functions if there are ABI-mandated names that the compiler should 32320 provide. 32321 32322 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 32323 This hook should declare additional library routines or rename 32324 existing ones, using the functions 'set_optab_libfunc' and 32325 'init_one_libfunc' defined in 'optabs.c'. 'init_optabs' calls this 32326 macro after initializing all the normal library routines. 32327 32328 The default is to do nothing. Most ports don't need to define this 32329 hook. 32330 32331 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX 32332 If false (the default), internal library routines start with two 32333 underscores. If set to true, these routines start with '__gnu_' 32334 instead. E.g., '__muldi3' changes to '__gnu_muldi3'. This 32335 currently only affects functions defined in 'libgcc2.c'. If this 32336 is set to true, the 'tm.h' file must also '#define 32337 LIBGCC2_GNU_PREFIX'. 32338 32339 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 32340 This macro should return 'true' if the library routine that 32341 implements the floating point comparison operator COMPARISON in 32342 mode MODE will return a boolean, and FALSE if it will return a 32343 tristate. 32344 32345 GCC's own floating point libraries return tristates from the 32346 comparison operators, so the default returns false always. Most 32347 ports don't need to define this macro. 32348 32349 -- Macro: TARGET_LIB_INT_CMP_BIASED 32350 This macro should evaluate to 'true' if the integer comparison 32351 functions (like '__cmpdi2') return 0 to indicate that the first 32352 operand is smaller than the second, 1 to indicate that they are 32353 equal, and 2 to indicate that the first operand is greater than the 32354 second. If this macro evaluates to 'false' the comparison 32355 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 32356 target uses the routines in 'libgcc.a', you do not need to define 32357 this macro. 32358 32359 -- Macro: TARGET_HAS_NO_HW_DIVIDE 32360 This macro should be defined if the target has no hardware divide 32361 instructions. If this macro is defined, GCC will use an algorithm 32362 which make use of simple logical and arithmetic operations for 32363 64-bit division. If the macro is not defined, GCC will use an 32364 algorithm which make use of a 64-bit by 32-bit divide primitive. 32365 32366 -- Macro: TARGET_EDOM 32367 The value of 'EDOM' on the target machine, as a C integer constant 32368 expression. If you don't define this macro, GCC does not attempt 32369 to deposit the value of 'EDOM' into 'errno' directly. Look in 32370 '/usr/include/errno.h' to find the value of 'EDOM' on your system. 32371 32372 If you do not define 'TARGET_EDOM', then compiled code reports 32373 domain errors by calling the library function and letting it report 32374 the error. If mathematical functions on your system use 'matherr' 32375 when there is an error, then you should leave 'TARGET_EDOM' 32376 undefined so that 'matherr' is used normally. 32377 32378 -- Macro: GEN_ERRNO_RTX 32379 Define this macro as a C expression to create an rtl expression 32380 that refers to the global "variable" 'errno'. (On certain systems, 32381 'errno' may not actually be a variable.) If you don't define this 32382 macro, a reasonable default is used. 32383 32384 -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class 32385 FN_CLASS) 32386 This hook determines whether a function from a class of functions 32387 FN_CLASS is present at the runtime. 32388 32389 -- Macro: NEXT_OBJC_RUNTIME 32390 Set this macro to 1 to use the "NeXT" Objective-C message sending 32391 conventions by default. This calling convention involves passing 32392 the object, the selector and the method arguments all at once to 32393 the method-lookup library function. This is the usual setting when 32394 targeting Darwin/Mac OS X systems, which have the NeXT runtime 32395 installed. 32396 32397 If the macro is set to 0, the "GNU" Objective-C message sending 32398 convention will be used by default. This convention passes just 32399 the object and the selector to the method-lookup function, which 32400 returns a pointer to the method. 32401 32402 In either case, it remains possible to select code-generation for 32403 the alternate scheme, by means of compiler command line switches. 32404 32405 32406File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 32407 3240817.13 Addressing Modes 32409====================== 32410 32411This is about addressing modes. 32412 32413 -- Macro: HAVE_PRE_INCREMENT 32414 -- Macro: HAVE_PRE_DECREMENT 32415 -- Macro: HAVE_POST_INCREMENT 32416 -- Macro: HAVE_POST_DECREMENT 32417 A C expression that is nonzero if the machine supports 32418 pre-increment, pre-decrement, post-increment, or post-decrement 32419 addressing respectively. 32420 32421 -- Macro: HAVE_PRE_MODIFY_DISP 32422 -- Macro: HAVE_POST_MODIFY_DISP 32423 A C expression that is nonzero if the machine supports pre- or 32424 post-address side-effect generation involving constants other than 32425 the size of the memory operand. 32426 32427 -- Macro: HAVE_PRE_MODIFY_REG 32428 -- Macro: HAVE_POST_MODIFY_REG 32429 A C expression that is nonzero if the machine supports pre- or 32430 post-address side-effect generation involving a register 32431 displacement. 32432 32433 -- Macro: CONSTANT_ADDRESS_P (X) 32434 A C expression that is 1 if the RTX X is a constant which is a 32435 valid address. On most machines the default definition of 32436 '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 32437 but a few machines are more restrictive as to which constant 32438 addresses are supported. 32439 32440 -- Macro: CONSTANT_P (X) 32441 'CONSTANT_P', which is defined by target-independent code, accepts 32442 integer-values expressions whose values are not explicitly known, 32443 such as 'symbol_ref', 'label_ref', and 'high' expressions and 32444 'const' arithmetic expressions, in addition to 'const_int' and 32445 'const_double' expressions. 32446 32447 -- Macro: MAX_REGS_PER_ADDRESS 32448 A number, the maximum number of registers that can appear in a 32449 valid memory address. Note that it is up to you to specify a value 32450 equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P' 32451 would ever accept. 32452 32453 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE, 32454 rtx X, bool STRICT) 32455 A function that returns whether X (an RTX) is a legitimate memory 32456 address on the target machine for a memory operand of mode MODE. 32457 32458 Legitimate addresses are defined in two variants: a strict variant 32459 and a non-strict one. The STRICT parameter chooses which variant 32460 is desired by the caller. 32461 32462 The strict variant is used in the reload pass. It must be defined 32463 so that any pseudo-register that has not been allocated a hard 32464 register is considered a memory reference. This is because in 32465 contexts where some kind of register is required, a pseudo-register 32466 with no hard register must be rejected. For non-hard registers, 32467 the strict variant should look up the 'reg_renumber' array; it 32468 should then proceed using the hard register number in the array, or 32469 treat the pseudo as a memory reference if the array holds '-1'. 32470 32471 The non-strict variant is used in other passes. It must be defined 32472 to accept all pseudo-registers in every context where some kind of 32473 register is required. 32474 32475 Normally, constant addresses which are the sum of a 'symbol_ref' 32476 and an integer are stored inside a 'const' RTX to mark them as 32477 constant. Therefore, there is no need to recognize such sums 32478 specifically as legitimate addresses. Normally you would simply 32479 recognize any 'const' as legitimate. 32480 32481 Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant 32482 sums that are not marked with 'const'. It assumes that a naked 32483 'plus' indicates indexing. If so, then you _must_ reject such 32484 naked constant sums as illegitimate addresses, so that none of them 32485 will be given to 'PRINT_OPERAND_ADDRESS'. 32486 32487 On some machines, whether a symbolic address is legitimate depends 32488 on the section that the address refers to. On these machines, 32489 define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the 32490 information into the 'symbol_ref', and then check for it here. 32491 When you see a 'const', you will have to look inside it to find the 32492 'symbol_ref' in order to determine the section. *Note Assembler 32493 Format::. 32494 32495 Some ports are still using a deprecated legacy substitute for this 32496 hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 32497 syntax: 32498 32499 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 32500 32501 and should 'goto LABEL' if the address X is a valid address on the 32502 target machine for a memory operand of mode MODE. 32503 32504 Compiler source files that want to use the strict variant of this 32505 macro define the macro 'REG_OK_STRICT'. You should use an '#ifdef 32506 REG_OK_STRICT' conditional to define the strict variant in that 32507 case and the non-strict variant otherwise. 32508 32509 Using the hook is usually simpler because it limits the number of 32510 files that are recompiled when changes are made. 32511 32512 -- Macro: TARGET_MEM_CONSTRAINT 32513 A single character to be used instead of the default ''m'' 32514 character for general memory addresses. This defines the 32515 constraint letter which matches the memory addresses accepted by 32516 'TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 32517 support new address formats in your back end without changing the 32518 semantics of the ''m'' constraint. This is necessary in order to 32519 preserve functionality of inline assembly constructs using the 32520 ''m'' constraint. 32521 32522 -- Macro: FIND_BASE_TERM (X) 32523 A C expression to determine the base term of address X, or to 32524 provide a simplified version of X from which 'alias.c' can easily 32525 find the base term. This macro is used in only two places: 32526 'find_base_value' and 'find_base_term' in 'alias.c'. 32527 32528 It is always safe for this macro to not be defined. It exists so 32529 that alias analysis can understand machine-dependent addresses. 32530 32531 The typical use of this macro is to handle addresses containing a 32532 label_ref or symbol_ref within an UNSPEC. 32533 32534 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, 32535 machine_mode MODE) 32536 This hook is given an invalid memory address X for an operand of 32537 mode MODE and should try to return a valid memory address. 32538 32539 X will always be the result of a call to 'break_out_memory_refs', 32540 and OLDX will be the operand that was given to that function to 32541 produce X. 32542 32543 The code of the hook should not alter the substructure of X. If it 32544 transforms X into a more legitimate form, it should return the new 32545 X. 32546 32547 It is not necessary for this hook to come up with a legitimate 32548 address, with the exception of native TLS addresses (*note Emulated 32549 TLS::). The compiler has standard ways of doing so in all cases. 32550 In fact, if the target supports only emulated TLS, it is safe to 32551 omit this hook or make it return X if it cannot find a valid way to 32552 legitimize the address. But often a machine-dependent strategy can 32553 generate better code. 32554 32555 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 32556 WIN) 32557 A C compound statement that attempts to replace X, which is an 32558 address that needs reloading, with a valid memory address for an 32559 operand of mode MODE. WIN will be a C statement label elsewhere in 32560 the code. It is not necessary to define this macro, but it might 32561 be useful for performance reasons. 32562 32563 For example, on the i386, it is sometimes possible to use a single 32564 reload register instead of two by reloading a sum of two pseudo 32565 registers into a register. On the other hand, for number of RISC 32566 processors offsets are limited so that often an intermediate 32567 address needs to be generated in order to address a stack slot. By 32568 defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 32569 intermediate addresses generated for adjacent some stack slots can 32570 be made identical, and thus be shared. 32571 32572 _Note_: This macro should be used with caution. It is necessary to 32573 know something of how reload works in order to effectively use 32574 this, and it is quite easy to produce macros that build in too much 32575 knowledge of reload internals. 32576 32577 _Note_: This macro must be able to reload an address created by a 32578 previous invocation of this macro. If it fails to handle such 32579 addresses then the compiler may generate incorrect code or abort. 32580 32581 The macro definition should use 'push_reload' to indicate parts 32582 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 32583 suitable to be passed unaltered to 'push_reload'. 32584 32585 The code generated by this macro must not alter the substructure of 32586 X. If it transforms X into a more legitimate form, it should 32587 assign X (which will always be a C variable) a new value. This 32588 also applies to parts that you change indirectly by calling 32589 'push_reload'. 32590 32591 The macro definition may use 'strict_memory_address_p' to test if 32592 the address has become legitimate. 32593 32594 If you want to change only a part of X, one standard way of doing 32595 this is to use 'copy_rtx'. Note, however, that it unshares only a 32596 single level of rtl. Thus, if the part to be changed is not at the 32597 top level, you'll need to replace first the top level. It is not 32598 necessary for this macro to come up with a legitimate address; but 32599 often a machine-dependent strategy can generate better code. 32600 32601 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR, 32602 addr_space_t ADDRSPACE) 32603 This hook returns 'true' if memory address ADDR in address space 32604 ADDRSPACE can have different meanings depending on the machine mode 32605 of the memory reference it is used for or if the address is valid 32606 for some modes but not others. 32607 32608 Autoincrement and autodecrement addresses typically have 32609 mode-dependent effects because the amount of the increment or 32610 decrement is the size of the operand being addressed. Some 32611 machines have other mode-dependent addresses. Many RISC machines 32612 have no mode-dependent addresses. 32613 32614 You may assume that ADDR is a valid address for the machine. 32615 32616 The default version of this hook returns 'false'. 32617 32618 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE, 32619 rtx X) 32620 This hook returns true if X is a legitimate constant for a 32621 MODE-mode immediate operand on the target machine. You can assume 32622 that X satisfies 'CONSTANT_P', so you need not check this. 32623 32624 The default definition returns true. 32625 32626 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 32627 This hook is used to undo the possibly obfuscating effects of the 32628 'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros. 32629 Some backend implementations of these macros wrap symbol references 32630 inside an 'UNSPEC' rtx to represent PIC or similar addressing 32631 modes. This target hook allows GCC's optimizers to understand the 32632 semantics of these opaque 'UNSPEC's by converting them back into 32633 their original form. 32634 32635 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X) 32636 This hook should return true if X should not be emitted into debug 32637 sections. 32638 32639 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode MODE, 32640 rtx X) 32641 This hook should return true if X is of a form that cannot (or 32642 should not) be spilled to the constant pool. MODE is the mode of 32643 X. 32644 32645 The default version of this hook returns false. 32646 32647 The primary reason to define this hook is to prevent reload from 32648 deciding that a non-legitimate constant would be better reloaded 32649 from the constant pool instead of spilling and reloading a register 32650 holding the constant. This restriction is often true of addresses 32651 of TLS symbols for various targets. 32652 32653 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode 32654 MODE, const_rtx X) 32655 This hook should return true if pool entries for constant X can be 32656 placed in an 'object_block' structure. MODE is the mode of X. 32657 32658 The default version returns false for all constants. 32659 32660 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL) 32661 This hook should return true if pool entries for DECL should be 32662 placed in an 'object_block' structure. 32663 32664 The default version returns true for all decls. 32665 32666 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (unsigned FN, bool 32667 MD_FN, bool SQRT) 32668 This hook should return the DECL of a function that implements 32669 reciprocal of the builtin function with builtin function code FN, 32670 or 'NULL_TREE' if such a function is not available. MD_FN is true 32671 when FN is a code of a machine-dependent builtin function. When 32672 SQRT is true, additional optimizations that apply only to the 32673 reciprocal of a square root function are performed, and only 32674 reciprocals of 'sqrt' function are valid. 32675 32676 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 32677 This hook should return the DECL of a function F that given an 32678 address ADDR as an argument returns a mask M that can be used to 32679 extract from two vectors the relevant data that resides in ADDR in 32680 case ADDR is not properly aligned. 32681 32682 The autovectorizer, when vectorizing a load operation from an 32683 address ADDR that may be unaligned, will generate two vector loads 32684 from the two aligned addresses around ADDR. It then generates a 32685 'REALIGN_LOAD' operation to extract the relevant data from the two 32686 loaded vectors. The first two arguments to 'REALIGN_LOAD', V1 and 32687 V2, are the two vectors, each of size VS, and the third argument, 32688 OFF, defines how the data will be extracted from these two vectors: 32689 if OFF is 0, then the returned vector is V2; otherwise, the 32690 returned vector is composed from the last VS-OFF elements of V1 32691 concatenated to the first OFF elements of V2. 32692 32693 If this hook is defined, the autovectorizer will generate a call to 32694 F (using the DECL tree that this hook returns) and will use the 32695 return value of F as the argument OFF to 'REALIGN_LOAD'. 32696 Therefore, the mask M returned by F should comply with the 32697 semantics expected by 'REALIGN_LOAD' described above. If this hook 32698 is not defined, then ADDR will be used as the argument OFF to 32699 'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 32700 will be considered. 32701 32702 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum 32703 vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN) 32704 Returns cost of different scalar or vector statements for 32705 vectorization cost model. For vector memory operations the cost 32706 may depend on type (VECTYPE) and misalignment value (MISALIGN). 32707 32708 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 32709 (const_tree TYPE, bool IS_PACKED) 32710 Return true if vector alignment is reachable (by peeling N 32711 iterations) for the given type. 32712 32713 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (machine_mode, 32714 const unsigned char *SEL) 32715 Return true if a vector created for 'vec_perm_const' is valid. 32716 32717 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned 32718 CODE, tree DEST_TYPE, tree SRC_TYPE) 32719 This hook should return the DECL of a function that implements 32720 conversion of the input vector of type SRC_TYPE to type DEST_TYPE. 32721 The value of CODE is one of the enumerators in 'enum tree_code' and 32722 specifies how the conversion is to be applied (truncation, 32723 rounding, etc.). 32724 32725 If this hook is defined, the autovectorizer will use the 32726 'TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 32727 conversion. Otherwise, it will return 'NULL_TREE'. 32728 32729 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION (tree 32730 FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 32731 This hook should return the decl of a function that implements the 32732 vectorized variant of the builtin function with builtin function 32733 code CODE or 'NULL_TREE' if such a function is not available. The 32734 value of FNDECL is the builtin function declaration. The return 32735 type of the vectorized function shall be of vector type 32736 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 32737 32738 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT 32739 (machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool 32740 IS_PACKED) 32741 This hook should return true if the target supports misaligned 32742 vector store/load of a specific factor denoted in the MISALIGNMENT 32743 parameter. The vector store/load should be of machine mode MODE 32744 and the elements in the vectors should be of type TYPE. IS_PACKED 32745 parameter is true if the memory access is defined in a packed 32746 struct. 32747 32748 -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE 32749 (machine_mode MODE) 32750 This hook should return the preferred mode for vectorizing scalar 32751 mode MODE. The default is equal to 'word_mode', because the 32752 vectorizer can do some transformations even in absence of 32753 specialized SIMD hardware. 32754 32755 -- Target Hook: unsigned int 32756 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void) 32757 This hook should return a mask of sizes that should be iterated 32758 over after trying to autovectorize using the vector size derived 32759 from the mode returned by 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE'. 32760 The default is zero which means to not iterate over other vector 32761 sizes. 32762 32763 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop 32764 *LOOP_INFO) 32765 This hook should initialize target-specific data structures in 32766 preparation for modeling the costs of vectorizing a loop or basic 32767 block. The default allocates three unsigned integers for 32768 accumulating costs for the prologue, body, and epilogue of the loop 32769 or basic block. If LOOP_INFO is non-NULL, it identifies the loop 32770 being vectorized; otherwise a single block is being vectorized. 32771 32772 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA, 32773 int COUNT, enum vect_cost_for_stmt KIND, struct _stmt_vec_info 32774 *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE) 32775 This hook should update the target-specific DATA in response to 32776 adding COUNT copies of the given KIND of statement to a loop or 32777 basic block. The default adds the builtin vectorizer cost for the 32778 copies of the statement to the accumulator specified by WHERE, (the 32779 prologue, body, or epilogue) and returns the amount added. The 32780 return value should be viewed as a tentative cost that may later be 32781 revised. 32782 32783 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned 32784 *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST) 32785 This hook should complete calculations of the cost of vectorizing a 32786 loop or basic block based on DATA, and return the prologue, body, 32787 and epilogue costs as unsigned integers. The default returns the 32788 value of the three accumulators. 32789 32790 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA) 32791 This hook should release DATA and any related data structures 32792 allocated by TARGET_VECTORIZE_INIT_COST. The default releases the 32793 accumulator. 32794 32795 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_LOAD (tree) 32796 This hook should return the built-in decl needed to load a vector 32797 of the given type within a transaction. 32798 32799 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_TM_STORE (tree) 32800 This hook should return the built-in decl needed to store a vector 32801 of the given type within a transaction. 32802 32803 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree 32804 MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE) 32805 Target builtin that implements vector gather operation. 32806 MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar 32807 type of the index, scaled by SCALE. The default is 'NULL_TREE' 32808 which means to not vectorize gather loads. 32809 32810 -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN 32811 (struct cgraph_node *, struct cgraph_simd_clone *, TREE, INT) 32812 This hook should set VECSIZE_MANGLE, VECSIZE_INT, VECSIZE_FLOAT 32813 fields in SIMD_CLONE structure pointed by CLONE_INFO argument and 32814 also SIMDLEN field if it was previously 0. The hook should return 32815 0 if SIMD clones shouldn't be emitted, or number of VECSIZE_MANGLE 32816 variants that should be emitted. 32817 32818 -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *) 32819 This hook should add implicit 'attribute(target("..."))' attribute 32820 to SIMD clone NODE if needed. 32821 32822 -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *) 32823 This hook should return -1 if SIMD clone NODE shouldn't be used in 32824 vectorized loops in current function, or non-negative number if it 32825 is usable. In that case, the smaller the number is, the more 32826 desirable it is to use it. 32827 32828 32829File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 32830 3283117.14 Anchored Addresses 32832======================== 32833 32834GCC usually addresses every static object as a separate entity. For 32835example, if we have: 32836 32837 static int a, b, c; 32838 int foo (void) { return a + b + c; } 32839 32840 the code for 'foo' will usually calculate three separate symbolic 32841addresses: those of 'a', 'b' and 'c'. On some targets, it would be 32842better to calculate just one symbolic address and access the three 32843variables relative to it. The equivalent pseudocode would be something 32844like: 32845 32846 int foo (void) 32847 { 32848 register int *xr = &x; 32849 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 32850 } 32851 32852 (which isn't valid C). We refer to shared addresses like 'x' as 32853"section anchors". Their use is controlled by '-fsection-anchors'. 32854 32855 The hooks below describe the target properties that GCC needs to know 32856in order to make effective use of section anchors. It won't use section 32857anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or 32858'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 32859 32860 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 32861 The minimum offset that should be applied to a section anchor. On 32862 most targets, it should be the smallest offset that can be applied 32863 to a base register while still giving a legitimate address for 32864 every mode. The default value is 0. 32865 32866 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 32867 Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset 32868 that should be applied to section anchors. The default value is 0. 32869 32870 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 32871 Write the assembly code to define section anchor X, which is a 32872 'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true. The hook 32873 is called with the assembly output position set to the beginning of 32874 'SYMBOL_REF_BLOCK (X)'. 32875 32876 If 'ASM_OUTPUT_DEF' is available, the hook's default definition 32877 uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'. 32878 If 'ASM_OUTPUT_DEF' is not available, the hook's default definition 32879 is 'NULL', which disables the use of section anchors altogether. 32880 32881 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 32882 Return true if GCC should attempt to use anchors to access 32883 'SYMBOL_REF' X. You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 32884 and '!SYMBOL_REF_ANCHOR_P (X)'. 32885 32886 The default version is correct for most targets, but you might need 32887 to intercept this hook to handle things like target-specific 32888 attributes or target-specific sections. 32889 32890 32891File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 32892 3289317.15 Condition Code Status 32894=========================== 32895 32896The macros in this section can be split in two families, according to 32897the two ways of representing condition codes in GCC. 32898 32899 The first representation is the so called '(cc0)' representation (*note 32900Jump Patterns::), where all instructions can have an implicit clobber of 32901the condition codes. The second is the condition code register 32902representation, which provides better schedulability for architectures 32903that do have a condition code register, but on which most instructions 32904do not affect it. The latter category includes most RISC machines. 32905 32906 The implicit clobbering poses a strong restriction on the placement of 32907the definition and use of the condition code. In the past the 32908definition and use were always adjacent. However, recent changes to 32909support trapping arithmatic may result in the definition and user being 32910in different blocks. Thus, there may be a 'NOTE_INSN_BASIC_BLOCK' 32911between them. Additionally, the definition may be the source of 32912exception handling edges. 32913 32914 These restrictions can prevent important optimizations on some 32915machines. For example, on the IBM RS/6000, there is a delay for taken 32916branches unless the condition code register is set three instructions 32917earlier than the conditional branch. The instruction scheduler cannot 32918perform this optimization if it is not permitted to separate the 32919definition and use of the condition code register. 32920 32921 For this reason, it is possible and suggested to use a register to 32922represent the condition code for new ports. If there is a specific 32923condition code register in the machine, use a hard register. If the 32924condition code or comparison result can be placed in any general 32925register, or if there are multiple condition registers, use a pseudo 32926register. Registers used to store the condition code value will usually 32927have a mode that is in class 'MODE_CC'. 32928 32929 Alternatively, you can use 'BImode' if the comparison operator is 32930specified already in the compare instruction. In this case, you are not 32931interested in most macros in this section. 32932 32933* Menu: 32934 32935* CC0 Condition Codes:: Old style representation of condition codes. 32936* MODE_CC Condition Codes:: Modern representation of condition codes. 32937 32938 32939File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 32940 3294117.15.1 Representation of condition codes using '(cc0)' 32942------------------------------------------------------- 32943 32944The file 'conditions.h' defines a variable 'cc_status' to describe how 32945the condition code was computed (in case the interpretation of the 32946condition code depends on the instruction that it was set by). This 32947variable contains the RTL expressions on which the condition code is 32948currently based, and several standard flags. 32949 32950 Sometimes additional machine-specific flags must be defined in the 32951machine description header file. It can also add additional 32952machine-specific information by defining 'CC_STATUS_MDEP'. 32953 32954 -- Macro: CC_STATUS_MDEP 32955 C code for a data type which is used for declaring the 'mdep' 32956 component of 'cc_status'. It defaults to 'int'. 32957 32958 This macro is not used on machines that do not use 'cc0'. 32959 32960 -- Macro: CC_STATUS_MDEP_INIT 32961 A C expression to initialize the 'mdep' field to "empty". The 32962 default definition does nothing, since most machines don't use the 32963 field anyway. If you want to use the field, you should probably 32964 define this macro to initialize it. 32965 32966 This macro is not used on machines that do not use 'cc0'. 32967 32968 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 32969 A C compound statement to set the components of 'cc_status' 32970 appropriately for an insn INSN whose body is EXP. It is this 32971 macro's responsibility to recognize insns that set the condition 32972 code as a byproduct of other activity as well as those that 32973 explicitly set '(cc0)'. 32974 32975 This macro is not used on machines that do not use 'cc0'. 32976 32977 If there are insns that do not set the condition code but do alter 32978 other machine registers, this macro must check to see whether they 32979 invalidate the expressions that the condition code is recorded as 32980 reflecting. For example, on the 68000, insns that store in address 32981 registers do not set the condition code, which means that usually 32982 'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns. 32983 But suppose that the previous insn set the condition code based on 32984 location 'a4@(102)' and the current insn stores a new value in 32985 'a4'. Although the condition code is not changed by this, it will 32986 no longer be true that it reflects the contents of 'a4@(102)'. 32987 Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case 32988 to say that nothing is known about the condition code value. 32989 32990 The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with 32991 the results of peephole optimization: insns whose patterns are 32992 'parallel' RTXs containing various 'reg', 'mem' or constants which 32993 are just the operands. The RTL structure of these insns is not 32994 sufficient to indicate what the insns actually do. What 32995 'NOTICE_UPDATE_CC' should do when it sees one is just to run 32996 'CC_STATUS_INIT'. 32997 32998 A possible definition of 'NOTICE_UPDATE_CC' is to call a function 32999 that looks at an attribute (*note Insn Attributes::) named, for 33000 example, 'cc'. This avoids having detailed information about 33001 patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'. 33002 33003 33004File: gccint.info, Node: MODE_CC Condition Codes, Prev: CC0 Condition Codes, Up: Condition Code 33005 3300617.15.2 Representation of condition codes using registers 33007--------------------------------------------------------- 33008 33009 -- Macro: SELECT_CC_MODE (OP, X, Y) 33010 On many machines, the condition code may be produced by other 33011 instructions than compares, for example the branch can use directly 33012 the condition code set by a subtract instruction. However, on some 33013 machines when the condition code is set this way some bits (such as 33014 the overflow bit) are not set in the same way as a test 33015 instruction, so that a different branch instruction must be used 33016 for some conditional branches. When this happens, use the machine 33017 mode of the condition code register to record different formats of 33018 the condition code register. Modes can also be used to record 33019 which compare instruction (e.g. a signed or an unsigned 33020 comparison) produced the condition codes. 33021 33022 If other modes than 'CCmode' are required, add them to 33023 'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode 33024 given an operand of a compare. This is needed because the modes 33025 have to be chosen not only during RTL generation but also, for 33026 example, by instruction combination. The result of 33027 'SELECT_CC_MODE' should be consistent with the mode used in the 33028 patterns; for example to support the case of the add on the SPARC 33029 discussed above, we have the pattern 33030 33031 (define_insn "" 33032 [(set (reg:CC_NOOV 0) 33033 (compare:CC_NOOV 33034 (plus:SI (match_operand:SI 0 "register_operand" "%r") 33035 (match_operand:SI 1 "arith_operand" "rI")) 33036 (const_int 0)))] 33037 "" 33038 "...") 33039 33040 together with a 'SELECT_CC_MODE' that returns 'CC_NOOVmode' for 33041 comparisons whose argument is a 'plus': 33042 33043 #define SELECT_CC_MODE(OP,X,Y) \ 33044 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 33045 ? ((OP == LT || OP == LE || OP == GT || OP == GE) \ 33046 ? CCFPEmode : CCFPmode) \ 33047 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 33048 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \ 33049 ? CC_NOOVmode : CCmode)) 33050 33051 Another reason to use modes is to retain information on which 33052 operands were used by the comparison; see 'REVERSIBLE_CC_MODE' 33053 later in this section. 33054 33055 You should define this macro if and only if you define extra CC 33056 modes in 'MACHINE-modes.def'. 33057 33058 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx 33059 *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) 33060 On some machines not all possible comparisons are defined, but you 33061 can convert an invalid comparison into a valid one. For example, 33062 the Alpha does not have a 'GT' comparison, but you can use an 'LT' 33063 comparison instead and swap the order of the operands. 33064 33065 On such machines, implement this hook to do any required 33066 conversions. CODE is the initial comparison code and OP0 and OP1 33067 are the left and right operands of the comparison, respectively. 33068 If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed 33069 to change the value of OP0 since the value might be used in RTXs 33070 which aren't comparisons. E.g. the implementation is not allowed 33071 to swap operands in that case. 33072 33073 GCC will not assume that the comparison resulting from this macro 33074 is valid but will see if the resulting insn matches a pattern in 33075 the 'md' file. 33076 33077 You need not to implement this hook if it would never change the 33078 comparison code or operands. 33079 33080 -- Macro: REVERSIBLE_CC_MODE (MODE) 33081 A C expression whose value is one if it is always safe to reverse a 33082 comparison whose mode is MODE. If 'SELECT_CC_MODE' can ever return 33083 MODE for a floating-point inequality comparison, then 33084 'REVERSIBLE_CC_MODE (MODE)' must be zero. 33085 33086 You need not define this macro if it would always returns zero or 33087 if the floating-point format is anything other than 33088 'IEEE_FLOAT_FORMAT'. For example, here is the definition used on 33089 the SPARC, where floating-point inequality comparisons are given 33090 either 'CCFPEmode' or 'CCFPmode': 33091 33092 #define REVERSIBLE_CC_MODE(MODE) \ 33093 ((MODE) != CCFPEmode && (MODE) != CCFPmode) 33094 33095 -- Macro: REVERSE_CONDITION (CODE, MODE) 33096 A C expression whose value is reversed condition code of the CODE 33097 for comparison done in CC_MODE MODE. The macro is used only in 33098 case 'REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 33099 case machine has some non-standard way how to reverse certain 33100 conditionals. For instance in case all floating point conditions 33101 are non-trapping, compiler may freely convert unordered compares to 33102 ordered ones. Then definition may look like: 33103 33104 #define REVERSE_CONDITION(CODE, MODE) \ 33105 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 33106 : reverse_condition_maybe_unordered (CODE)) 33107 33108 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 33109 *P1, unsigned int *P2) 33110 On targets which do not use '(cc0)', and which use a hard register 33111 rather than a pseudo-register to hold condition codes, the regular 33112 CSE passes are often not able to identify cases in which the hard 33113 register is set to a common value. Use this hook to enable a small 33114 pass which optimizes such cases. This hook should return true to 33115 enable this pass, and it should set the integers to which its 33116 arguments point to the hard register numbers used for condition 33117 codes. When there is only one such register, as is true on most 33118 systems, the integer pointed to by P2 should be set to 33119 'INVALID_REGNUM'. 33120 33121 The default version of this hook returns false. 33122 33123 -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode 33124 M1, machine_mode M2) 33125 On targets which use multiple condition code modes in class 33126 'MODE_CC', it is sometimes the case that a comparison can be 33127 validly done in more than one mode. On such a system, define this 33128 target hook to take two mode arguments and to return a mode in 33129 which both comparisons may be validly done. If there is no such 33130 mode, return 'VOIDmode'. 33131 33132 The default version of this hook checks whether the modes are the 33133 same. If they are, it returns that mode. If they are different, 33134 it returns 'VOIDmode'. 33135 33136 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM 33137 If the target has a dedicated flags register, and it needs to use 33138 the post-reload comparison elimination pass, then this value should 33139 be set appropriately. 33140 33141 33142File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 33143 3314417.16 Describing Relative Costs of Operations 33145============================================= 33146 33147These macros let you describe the relative speed of various operations 33148on the target machine. 33149 33150 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 33151 A C expression for the cost of moving data of mode MODE from a 33152 register in class FROM to one in class TO. The classes are 33153 expressed using the enumeration values such as 'GENERAL_REGS'. A 33154 value of 2 is the default; other values are interpreted relative to 33155 that. 33156 33157 It is not required that the cost always equal 2 when FROM is the 33158 same as TO; on some machines it is expensive to move between 33159 registers if they are not general registers. 33160 33161 If reload sees an insn consisting of a single 'set' between two 33162 hard registers, and if 'REGISTER_MOVE_COST' applied to their 33163 classes returns a value of 2, reload does not check to ensure that 33164 the constraints of the insn are met. Setting a cost of other than 33165 2 will allow reload to verify that the constraints are met. You 33166 should do this if the 'movM' pattern's constraints do not allow 33167 such copying. 33168 33169 These macros are obsolete, new ports should use the target hook 33170 'TARGET_REGISTER_MOVE_COST' instead. 33171 33172 -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE, 33173 reg_class_t FROM, reg_class_t TO) 33174 This target hook should return the cost of moving data of mode MODE 33175 from a register in class FROM to one in class TO. The classes are 33176 expressed using the enumeration values such as 'GENERAL_REGS'. A 33177 value of 2 is the default; other values are interpreted relative to 33178 that. 33179 33180 It is not required that the cost always equal 2 when FROM is the 33181 same as TO; on some machines it is expensive to move between 33182 registers if they are not general registers. 33183 33184 If reload sees an insn consisting of a single 'set' between two 33185 hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their 33186 classes returns a value of 2, reload does not check to ensure that 33187 the constraints of the insn are met. Setting a cost of other than 33188 2 will allow reload to verify that the constraints are met. You 33189 should do this if the 'movM' pattern's constraints do not allow 33190 such copying. 33191 33192 The default version of this function returns 2. 33193 33194 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 33195 A C expression for the cost of moving data of mode MODE between a 33196 register of class CLASS and memory; IN is zero if the value is to 33197 be written to memory, nonzero if it is to be read in. This cost is 33198 relative to those in 'REGISTER_MOVE_COST'. If moving between 33199 registers and memory is more expensive than between two registers, 33200 you should define this macro to express the relative cost. 33201 33202 If you do not define this macro, GCC uses a default cost of 4 plus 33203 the cost of copying via a secondary reload register, if one is 33204 needed. If your machine requires a secondary reload register to 33205 copy between memory and a register of CLASS but the reload 33206 mechanism is more complex than copying via an intermediate, define 33207 this macro to reflect the actual cost of the move. 33208 33209 GCC defines the function 'memory_move_secondary_cost' if secondary 33210 reloads are needed. It computes the costs due to copying via a 33211 secondary register. If your machine copies from memory using a 33212 secondary register in the conventional way but the default base 33213 value of 4 is not correct for your machine, define this macro to 33214 add some other value to the result of that function. The arguments 33215 to that function are the same as to this macro. 33216 33217 These macros are obsolete, new ports should use the target hook 33218 'TARGET_MEMORY_MOVE_COST' instead. 33219 33220 -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE, 33221 reg_class_t RCLASS, bool IN) 33222 This target hook should return the cost of moving data of mode MODE 33223 between a register of class RCLASS and memory; IN is 'false' if the 33224 value is to be written to memory, 'true' if it is to be read in. 33225 This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'. If 33226 moving between registers and memory is more expensive than between 33227 two registers, you should add this target hook to express the 33228 relative cost. 33229 33230 If you do not add this target hook, GCC uses a default cost of 4 33231 plus the cost of copying via a secondary reload register, if one is 33232 needed. If your machine requires a secondary reload register to 33233 copy between memory and a register of RCLASS but the reload 33234 mechanism is more complex than copying via an intermediate, use 33235 this target hook to reflect the actual cost of the move. 33236 33237 GCC defines the function 'memory_move_secondary_cost' if secondary 33238 reloads are needed. It computes the costs due to copying via a 33239 secondary register. If your machine copies from memory using a 33240 secondary register in the conventional way but the default base 33241 value of 4 is not correct for your machine, use this target hook to 33242 add some other value to the result of that function. The arguments 33243 to that function are the same as to this target hook. 33244 33245 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 33246 A C expression for the cost of a branch instruction. A value of 1 33247 is the default; other values are interpreted relative to that. 33248 Parameter SPEED_P is true when the branch in question should be 33249 optimized for speed. When it is false, 'BRANCH_COST' should return 33250 a value optimal for code size rather than performance. 33251 PREDICTABLE_P is true for well-predicted branches. On many 33252 architectures the 'BRANCH_COST' can be reduced then. 33253 33254 Here are additional macros which do not specify precise relative costs, 33255but only that certain actions are more expensive than GCC would 33256ordinarily expect. 33257 33258 -- Macro: SLOW_BYTE_ACCESS 33259 Define this macro as a C expression which is nonzero if accessing 33260 less than a word of memory (i.e. a 'char' or a 'short') is no 33261 faster than accessing a word of memory, i.e., if such access 33262 require more than one instruction or if there is no difference in 33263 cost between byte and (aligned) word loads. 33264 33265 When this macro is not defined, the compiler will access a field by 33266 finding the smallest containing object; when it is defined, a 33267 fullword load will be used if alignment permits. Unless bytes 33268 accesses are faster than word accesses, using word accesses is 33269 preferable since it may eliminate subsequent memory access if 33270 subsequent accesses occur to other fields in the same word of the 33271 structure, but to different bytes. 33272 33273 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 33274 Define this macro to be the value 1 if memory accesses described by 33275 the MODE and ALIGNMENT parameters have a cost many times greater 33276 than aligned accesses, for example if they are emulated in a trap 33277 handler. 33278 33279 When this macro is nonzero, the compiler will act as if 33280 'STRICT_ALIGNMENT' were nonzero when generating code for block 33281 moves. This can cause significantly more instructions to be 33282 produced. Therefore, do not set this macro nonzero if unaligned 33283 accesses only add a cycle or two to the time for a memory access. 33284 33285 If the value of this macro is always zero, it need not be defined. 33286 If this macro is defined, it should produce a nonzero value when 33287 'STRICT_ALIGNMENT' is nonzero. 33288 33289 -- Macro: MOVE_RATIO (SPEED) 33290 The threshold of number of scalar memory-to-memory move insns, 33291 _below_ which a sequence of insns should be generated instead of a 33292 string move insn or a library call. Increasing the value will 33293 always make code faster, but eventually incurs high cost in 33294 increased code size. 33295 33296 Note that on machines where the corresponding move insn is a 33297 'define_expand' that emits a sequence of insns, this macro counts 33298 the number of such sequences. 33299 33300 The parameter SPEED is true if the code is currently being 33301 optimized for speed rather than size. 33302 33303 If you don't define this, a reasonable default is used. 33304 33305 -- Target Hook: bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned 33306 HOST_WIDE_INT SIZE, unsigned int ALIGNMENT, enum 33307 by_pieces_operation OP, bool SPEED_P) 33308 GCC will attempt several strategies when asked to copy between two 33309 areas of memory, or to set, clear or store to memory, for example 33310 when copying a 'struct'. The 'by_pieces' infrastructure implements 33311 such memory operations as a sequence of load, store or move insns. 33312 Alternate strategies are to expand the 'movmem' or 'setmem' optabs, 33313 to emit a library call, or to emit unit-by-unit, loop-based 33314 operations. 33315 33316 This target hook should return true if, for a memory operation with 33317 a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is 33318 expected to result in better code generation. Both SIZE and 33319 ALIGNMENT are measured in terms of storage units. 33320 33321 The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES', 33322 'SET_BY_PIECES', 'STORE_BY_PIECES'. These describe the type of 33323 memory operation under consideration. 33324 33325 The parameter SPEED_P is true if the code is currently being 33326 optimized for speed rather than size. 33327 33328 Returning true for higher values of SIZE can improve code 33329 generation for speed if the target does not provide an 33330 implementation of the 'movmem' or 'setmem' standard names, if the 33331 'movmem' or 'setmem' implementation would be more expensive than a 33332 sequence of insns, or if the overhead of a library call would 33333 dominate that of the body of the memory operation. 33334 33335 Returning true for higher values of 'size' may also cause an 33336 increase in code size, for example where the number of insns 33337 emitted to perform a move would be greater than that of a library 33338 call. 33339 33340 -- Macro: MOVE_MAX_PIECES 33341 A C expression used by 'move_by_pieces' to determine the largest 33342 unit a load or store used to copy memory is. Defaults to 33343 'MOVE_MAX'. 33344 33345 -- Macro: CLEAR_RATIO (SPEED) 33346 The threshold of number of scalar move insns, _below_ which a 33347 sequence of insns should be generated to clear memory instead of a 33348 string clear insn or a library call. Increasing the value will 33349 always make code faster, but eventually incurs high cost in 33350 increased code size. 33351 33352 The parameter SPEED is true if the code is currently being 33353 optimized for speed rather than size. 33354 33355 If you don't define this, a reasonable default is used. 33356 33357 -- Macro: SET_RATIO (SPEED) 33358 The threshold of number of scalar move insns, _below_ which a 33359 sequence of insns should be generated to set memory to a constant 33360 value, instead of a block set insn or a library call. Increasing 33361 the value will always make code faster, but eventually incurs high 33362 cost in increased code size. 33363 33364 The parameter SPEED is true if the code is currently being 33365 optimized for speed rather than size. 33366 33367 If you don't define this, it defaults to the value of 'MOVE_RATIO'. 33368 33369 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 33370 A C expression used to determine whether a load postincrement is a 33371 good thing to use for a given mode. Defaults to the value of 33372 'HAVE_POST_INCREMENT'. 33373 33374 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 33375 A C expression used to determine whether a load postdecrement is a 33376 good thing to use for a given mode. Defaults to the value of 33377 'HAVE_POST_DECREMENT'. 33378 33379 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 33380 A C expression used to determine whether a load preincrement is a 33381 good thing to use for a given mode. Defaults to the value of 33382 'HAVE_PRE_INCREMENT'. 33383 33384 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 33385 A C expression used to determine whether a load predecrement is a 33386 good thing to use for a given mode. Defaults to the value of 33387 'HAVE_PRE_DECREMENT'. 33388 33389 -- Macro: USE_STORE_POST_INCREMENT (MODE) 33390 A C expression used to determine whether a store postincrement is a 33391 good thing to use for a given mode. Defaults to the value of 33392 'HAVE_POST_INCREMENT'. 33393 33394 -- Macro: USE_STORE_POST_DECREMENT (MODE) 33395 A C expression used to determine whether a store postdecrement is a 33396 good thing to use for a given mode. Defaults to the value of 33397 'HAVE_POST_DECREMENT'. 33398 33399 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 33400 This macro is used to determine whether a store preincrement is a 33401 good thing to use for a given mode. Defaults to the value of 33402 'HAVE_PRE_INCREMENT'. 33403 33404 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 33405 This macro is used to determine whether a store predecrement is a 33406 good thing to use for a given mode. Defaults to the value of 33407 'HAVE_PRE_DECREMENT'. 33408 33409 -- Macro: NO_FUNCTION_CSE 33410 Define this macro if it is as good or better to call a constant 33411 function address than to call an address kept in a register. 33412 33413 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT 33414 Define this macro if a non-short-circuit operation produced by 33415 'fold_range_test ()' is optimal. This macro defaults to true if 33416 'BRANCH_COST' is greater than or equal to the value 2. 33417 33418 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, int CODE, int OUTER_CODE, 33419 int OPNO, int *TOTAL, bool SPEED) 33420 This target hook describes the relative costs of RTL expressions. 33421 33422 The cost may depend on the precise form of the expression, which is 33423 available for examination in X, and the fact that X appears as 33424 operand OPNO of an expression with rtx code OUTER_CODE. That is, 33425 the hook can assume that there is some rtx Y such that 'GET_CODE 33426 (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X' 33427 or (b) 'XVEC (Y, OPNO)' contains X. 33428 33429 CODE is X's expression code--redundant, since it can be obtained 33430 with 'GET_CODE (X)'. 33431 33432 In implementing this hook, you can use the construct 'COSTS_N_INSNS 33433 (N)' to specify a cost equal to N fast instructions. 33434 33435 On entry to the hook, '*TOTAL' contains a default estimate for the 33436 cost of the expression. The hook should modify this value as 33437 necessary. Traditionally, the default costs are 'COSTS_N_INSNS 33438 (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and 33439 modulus operations, and 'COSTS_N_INSNS (1)' for all other 33440 operations. 33441 33442 When optimizing for code size, i.e. when 'speed' is false, this 33443 target hook should be used to estimate the relative size cost of an 33444 expression, again relative to 'COSTS_N_INSNS'. 33445 33446 The hook returns true when all subexpressions of X have been 33447 processed, and false when 'rtx_cost' should recurse. 33448 33449 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode 33450 MODE, addr_space_t AS, bool SPEED) 33451 This hook computes the cost of an addressing mode that contains 33452 ADDRESS. If not defined, the cost is computed from the ADDRESS 33453 expression and the 'TARGET_RTX_COST' hook. 33454 33455 For most CISC machines, the default cost is a good approximation of 33456 the true cost of the addressing mode. However, on RISC machines, 33457 all instructions normally have the same length and execution time. 33458 Hence all addresses will have equal costs. 33459 33460 In cases where more than one form of an address is known, the form 33461 with the lowest cost will be used. If multiple forms have the 33462 same, lowest, cost, the one that is the most complex will be used. 33463 33464 For example, suppose an address that is equal to the sum of a 33465 register and a constant is used twice in the same basic block. 33466 When this macro is not defined, the address will be computed in a 33467 register and memory references will be indirect through that 33468 register. On machines where the cost of the addressing mode 33469 containing the sum is no higher than that of a simple indirect 33470 reference, this will produce an additional instruction and possibly 33471 require an additional register. Proper specification of this macro 33472 eliminates this overhead for such machines. 33473 33474 This hook is never called with an invalid address. 33475 33476 On machines where an address involving more than one register is as 33477 cheap as an address computation involving only one register, 33478 defining 'TARGET_ADDRESS_COST' to reflect this can cause two 33479 registers to be live over a region of code where only one would 33480 have been if 'TARGET_ADDRESS_COST' were not defined in that manner. 33481 This effect should be considered in the definition of this macro. 33482 Equivalent costs should probably only be given to addresses with 33483 different numbers of registers on machines with lots of registers. 33484 33485 33486File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 33487 3348817.17 Adjusting the Instruction Scheduler 33489========================================= 33490 33491The instruction scheduler may need a fair amount of machine-specific 33492adjustment in order to produce good code. GCC provides several target 33493hooks for this purpose. It is usually enough to define just a few of 33494them: try the first ones in this list first. 33495 33496 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 33497 This hook returns the maximum number of instructions that can ever 33498 issue at the same time on the target machine. The default is one. 33499 Although the insn scheduler can define itself the possibility of 33500 issue an insn on the same cycle, the value can serve as an 33501 additional constraint to issue insns on the same simulated 33502 processor cycle (see hooks 'TARGET_SCHED_REORDER' and 33503 'TARGET_SCHED_REORDER2'). This value must be constant over the 33504 entire compilation. If you need it to vary depending on what the 33505 instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'. 33506 33507 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 33508 VERBOSE, rtx_insn *INSN, int MORE) 33509 This hook is executed by the scheduler after it has scheduled an 33510 insn from the ready list. It should return the number of insns 33511 which can still be issued in the current cycle. The default is 33512 'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally 33513 are not counted against the issue rate. You should define this 33514 hook if some insns take more machine resources than others, so that 33515 fewer insns can follow them in the same cycle. FILE is either a 33516 null pointer, or a stdio stream to write any debug output to. 33517 VERBOSE is the verbose level provided by '-fsched-verbose-N'. INSN 33518 is the instruction that was scheduled. 33519 33520 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, rtx LINK, 33521 rtx_insn *DEP_INSN, int COST) 33522 This function corrects the value of COST based on the relationship 33523 between INSN and DEP_INSN through the dependence LINK. It should 33524 return the new value. The default is to make no adjustment to 33525 COST. This can be used for example to specify to the scheduler 33526 using the traditional pipeline description that an output- or 33527 anti-dependence does not incur the same cost as a data-dependence. 33528 If the scheduler using the automaton based pipeline description, 33529 the cost of anti-dependence is zero and the cost of 33530 output-dependence is maximum of one and the difference of latency 33531 times of the first and the second insns. If these values are not 33532 acceptable, you could use the hook to modify them too. See also 33533 *note Processor pipeline description::. 33534 33535 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *INSN, int 33536 PRIORITY) 33537 This hook adjusts the integer scheduling priority PRIORITY of INSN. 33538 It should return the new priority. Increase the priority to 33539 execute INSN earlier, reduce the priority to execute INSN later. 33540 Do not define this hook if you do not need to adjust the scheduling 33541 priorities of insns. 33542 33543 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, 33544 rtx_insn **READY, int *N_READYP, int CLOCK) 33545 This hook is executed by the scheduler after it has scheduled the 33546 ready list, to allow the machine description to reorder it (for 33547 example to combine two small instructions together on 'VLIW' 33548 machines). FILE is either a null pointer, or a stdio stream to 33549 write any debug output to. VERBOSE is the verbose level provided 33550 by '-fsched-verbose-N'. READY is a pointer to the ready list of 33551 instructions that are ready to be scheduled. N_READYP is a pointer 33552 to the number of elements in the ready list. The scheduler reads 33553 the ready list in reverse order, starting with READY[*N_READYP - 1] 33554 and going to READY[0]. CLOCK is the timer tick of the scheduler. 33555 You may modify the ready list and the number of ready insns. The 33556 return value is the number of insns that can issue this cycle; 33557 normally this is just 'issue_rate'. See also 33558 'TARGET_SCHED_REORDER2'. 33559 33560 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 33561 rtx_insn **READY, int *N_READYP, int CLOCK) 33562 Like 'TARGET_SCHED_REORDER', but called at a different time. That 33563 function is called whenever the scheduler starts a new cycle. This 33564 one is called once per iteration over a cycle, immediately after 33565 'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and 33566 return the number of insns to be scheduled in the same cycle. 33567 Defining this hook can be useful if there are frequent situations 33568 where scheduling one insn causes other insns to become ready in the 33569 same cycle. These other insns can then be taken into account 33570 properly. 33571 33572 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_P (void) 33573 This hook is used to check whether target platform supports macro 33574 fusion. 33575 33576 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *PREV, 33577 rtx_insn *CURR) 33578 This hook is used to check whether two insns should be macro fused 33579 for a target microarchitecture. If this hook returns true for the 33580 given insn pair (PREV and CURR), the scheduler will put them into a 33581 sched group, and they will not be scheduled apart. The two insns 33582 will be either two SET insns or a compare and a conditional jump 33583 and this hook should validate any dependencies needed to fuse the 33584 two insns together. 33585 33586 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK 33587 (rtx_insn *HEAD, rtx_insn *TAIL) 33588 This hook is called after evaluation forward dependencies of insns 33589 in chain given by two parameter values (HEAD and TAIL 33590 correspondingly) but before insns scheduling of the insn chain. 33591 For example, it can be used for better insn classification if it 33592 requires analysis of dependencies. This hook can use backward and 33593 forward dependencies of the insn scheduler because they are already 33594 calculated. 33595 33596 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 33597 MAX_READY) 33598 This hook is executed by the scheduler at the beginning of each 33599 block of instructions that are to be scheduled. FILE is either a 33600 null pointer, or a stdio stream to write any debug output to. 33601 VERBOSE is the verbose level provided by '-fsched-verbose-N'. 33602 MAX_READY is the maximum number of insns in the current scheduling 33603 region that can be live at the same time. This can be used to 33604 allocate scratch space if it is needed, e.g. by 33605 'TARGET_SCHED_REORDER'. 33606 33607 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 33608 This hook is executed by the scheduler at the end of each block of 33609 instructions that are to be scheduled. It can be used to perform 33610 cleanup of any actions done by the other scheduling hooks. FILE is 33611 either a null pointer, or a stdio stream to write any debug output 33612 to. VERBOSE is the verbose level provided by '-fsched-verbose-N'. 33613 33614 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE, 33615 int OLD_MAX_UID) 33616 This hook is executed by the scheduler after function level 33617 initializations. FILE is either a null pointer, or a stdio stream 33618 to write any debug output to. VERBOSE is the verbose level 33619 provided by '-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 33620 uid when scheduling begins. 33621 33622 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 33623 VERBOSE) 33624 This is the cleanup hook corresponding to 33625 'TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 33626 stdio stream to write any debug output to. VERBOSE is the verbose 33627 level provided by '-fsched-verbose-N'. 33628 33629 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 33630 The hook returns an RTL insn. The automaton state used in the 33631 pipeline hazard recognizer is changed as if the insn were scheduled 33632 when the new simulated processor cycle starts. Usage of the hook 33633 may simplify the automaton pipeline description for some VLIW 33634 processors. If the hook is defined, it is used only for the 33635 automaton based pipeline description. The default is not to change 33636 the state when the new simulated processor cycle starts. 33637 33638 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 33639 The hook can be used to initialize data used by the previous hook. 33640 33641 -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 33642 The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 33643 to changed the state as if the insn were scheduled when the new 33644 simulated processor cycle finishes. 33645 33646 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 33647 The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 33648 used to initialize data used by the previous hook. 33649 33650 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 33651 The hook to notify target that the current simulated cycle is about 33652 to finish. The hook is analogous to 33653 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 33654 more complicated situations - e.g., when advancing state on a 33655 single insn is not enough. 33656 33657 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 33658 The hook to notify target that new simulated cycle has just 33659 started. The hook is analogous to 33660 'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 33661 more complicated situations - e.g., when advancing state on a 33662 single insn is not enough. 33663 33664 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 33665 (void) 33666 This hook controls better choosing an insn from the ready insn 33667 queue for the DFA-based insn scheduler. Usually the scheduler 33668 chooses the first insn from the queue. If the hook returns a 33669 positive value, an additional scheduler code tries all permutations 33670 of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent 33671 ready insns to choose an insn whose issue will result in maximal 33672 number of issued insns on the same cycle. For the VLIW processor, 33673 the code could actually solve the problem of packing simple insns 33674 into the VLIW insn. Of course, if the rules of VLIW packing are 33675 described in the automaton. 33676 33677 This code also could be used for superscalar RISC processors. Let 33678 us consider a superscalar RISC processor with 3 pipelines. Some 33679 insns can be executed in pipelines A or B, some insns can be 33680 executed only in pipelines B or C, and one insn can be executed in 33681 pipeline B. The processor may issue the 1st insn into A and the 33682 2nd one into B. In this case, the 3rd insn will wait for freeing B 33683 until the next cycle. If the scheduler issues the 3rd insn the 33684 first, the processor could issue all 3 insns per cycle. 33685 33686 Actually this code demonstrates advantages of the automaton based 33687 pipeline hazard recognizer. We try quickly and easy many insn 33688 schedules to choose the best one. 33689 33690 The default is no multipass scheduling. 33691 33692 -- Target Hook: int 33693 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD 33694 (rtx_insn *INSN, int READY_INDEX) 33695 33696 This hook controls what insns from the ready insn queue will be 33697 considered for the multipass insn scheduling. If the hook returns 33698 zero for INSN, the insn will be considered in multipass scheduling. 33699 Positive return values will remove INSN from consideration on the 33700 current round of multipass scheduling. Negative return values will 33701 remove INSN from consideration for given number of cycles. 33702 Backends should be careful about returning non-zero for highest 33703 priority instruction at position 0 in the ready list. READY_INDEX 33704 is passed to allow backends make correct judgements. 33705 33706 The default is that any ready insns can be chosen to be issued. 33707 33708 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void 33709 *DATA, signed char *READY_TRY, int N_READY, bool 33710 FIRST_CYCLE_INSN_P) 33711 This hook prepares the target backend for a new round of multipass 33712 scheduling. 33713 33714 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void 33715 *DATA, signed char *READY_TRY, int N_READY, rtx_insn *INSN, 33716 const void *PREV_DATA) 33717 This hook is called when multipass scheduling evaluates instruction 33718 INSN. 33719 33720 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK 33721 (const void *DATA, signed char *READY_TRY, int N_READY) 33722 This is called when multipass scheduling backtracks from evaluation 33723 of an instruction. 33724 33725 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void 33726 *DATA) 33727 This hook notifies the target about the result of the concluded 33728 current round of multipass scheduling. 33729 33730 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void 33731 *DATA) 33732 This hook initializes target-specific data used in multipass 33733 scheduling. 33734 33735 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void 33736 *DATA) 33737 This hook finalizes target-specific data used in multipass 33738 scheduling. 33739 33740 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 33741 VERBOSE, rtx_insn *INSN, int LAST_CLOCK, int CLOCK, int 33742 *SORT_P) 33743 This hook is called by the insn scheduler before issuing INSN on 33744 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 33745 this processor cycle. Instead, the processor cycle is advanced. 33746 If *SORT_P is zero, the insn ready queue is not sorted on the new 33747 cycle start as usually. DUMP and VERBOSE specify the file and 33748 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 33749 are, respectively, the processor cycle on which the previous insn 33750 has been issued, and the current processor cycle. 33751 33752 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 33753 *_DEP, int COST, int DISTANCE) 33754 This hook is used to define which dependences are considered costly 33755 by the target, so costly that it is not advisable to schedule the 33756 insns that are involved in the dependence too close to one another. 33757 The parameters to this hook are as follows: The first parameter 33758 _DEP is the dependence being evaluated. The second parameter COST 33759 is the cost of the dependence as estimated by the scheduler, and 33760 the third parameter DISTANCE is the distance in cycles between the 33761 two insns. The hook returns 'true' if considering the distance 33762 between the two insns the dependence between them is considered 33763 costly by the target, and 'false' otherwise. 33764 33765 Defining this hook can be useful in multiple-issue out-of-order 33766 machines, where (a) it's practically hopeless to predict the actual 33767 data/resource delays, however: (b) there's a better chance to 33768 predict the actual grouping that will be formed, and (c) correctly 33769 emulating the grouping can be very important. In such targets one 33770 may want to allow issuing dependent insns closer to one 33771 another--i.e., closer than the dependence distance; however, not in 33772 cases of "costly dependences", which this hooks allows to define. 33773 33774 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 33775 This hook is called by the insn scheduler after emitting a new 33776 instruction to the instruction stream. The hook notifies a target 33777 backend to extend its per instruction data structures. 33778 33779 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 33780 Return a pointer to a store large enough to hold target scheduling 33781 context. 33782 33783 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 33784 CLEAN_P) 33785 Initialize store pointed to by TC to hold target scheduling 33786 context. It CLEAN_P is true then initialize TC as if scheduler is 33787 at the beginning of the block. Otherwise, copy the current context 33788 into TC. 33789 33790 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 33791 Copy target scheduling context pointed to by TC to the current 33792 context. 33793 33794 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 33795 Deallocate internal data in target scheduling context pointed to by 33796 TC. 33797 33798 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 33799 Deallocate a store for target scheduling context pointed to by TC. 33800 33801 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx_insn *INSN, 33802 unsigned int DEP_STATUS, rtx *NEW_PAT) 33803 This hook is called by the insn scheduler when INSN has only 33804 speculative dependencies and therefore can be scheduled 33805 speculatively. The hook is used to check if the pattern of INSN 33806 has a speculative version and, in case of successful check, to 33807 generate that speculative pattern. The hook should return 1, if 33808 the instruction has a speculative form, or -1, if it doesn't. 33809 REQUEST describes the type of requested speculation. If the return 33810 value equals 1 then NEW_PAT is assigned the generated speculative 33811 pattern. 33812 33813 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int 33814 DEP_STATUS) 33815 This hook is called by the insn scheduler during generation of 33816 recovery code for INSN. It should return 'true', if the 33817 corresponding check instruction should branch to recovery code, or 33818 'false' otherwise. 33819 33820 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN, 33821 rtx_insn *LABEL, unsigned int DS) 33822 This hook is called by the insn scheduler to generate a pattern for 33823 recovery check instruction. If MUTATE_P is zero, then INSN is a 33824 speculative instruction for which the check should be generated. 33825 LABEL is either a label of a basic block, where recovery code 33826 should be emitted, or a null pointer, when requested check doesn't 33827 branch to recovery code (a simple check). If MUTATE_P is nonzero, 33828 then a pattern for a branchy check corresponding to a simple check 33829 denoted by INSN should be generated. In this case LABEL can't be 33830 null. 33831 33832 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def 33833 *SPEC_INFO) 33834 This hook is used by the insn scheduler to find out what features 33835 should be enabled/used. The structure *SPEC_INFO should be filled 33836 in by the target. The structure describes speculation types that 33837 can be used in the scheduler. 33838 33839 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 33840 This hook is called by the swing modulo scheduler to calculate a 33841 resource-based lower bound which is based on the resources 33842 available in the machine and the resources required by each 33843 instruction. The target backend can use G to calculate such bound. 33844 A very simple lower bound will be used in case this hook is not 33845 implemented: the total number of instructions divided by the issue 33846 rate. 33847 33848 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx_insn *INSN, int X) 33849 This hook is called by Haifa Scheduler. It returns true if 33850 dispatch scheduling is supported in hardware and the condition 33851 specified in the parameter is true. 33852 33853 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx_insn *INSN, int X) 33854 This hook is called by Haifa Scheduler. It performs the operation 33855 specified in its second parameter. 33856 33857 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE 33858 True if the processor has an exposed pipeline, which means that not 33859 just the order of instructions is important for correctness when 33860 scheduling, but also the latencies of operations. 33861 33862 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC, 33863 machine_mode MODE) 33864 This hook is called by tree reassociator to determine a level of 33865 parallelism required in output calculations chain. 33866 33867 -- Target Hook: void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *INSN, int 33868 MAX_PRI, int *FUSION_PRI, int *PRI) 33869 This hook is called by scheduling fusion pass. It calculates 33870 fusion priorities for each instruction passed in by parameter. The 33871 priorities are returned via pointer parameters. 33872 33873 INSN is the instruction whose priorities need to be calculated. 33874 MAX_PRI is the maximum priority can be returned in any cases. 33875 FUSION_PRI is the pointer parameter through which INSN's fusion 33876 priority should be calculated and returned. PRI is the pointer 33877 parameter through which INSN's priority should be calculated and 33878 returned. 33879 33880 Same FUSION_PRI should be returned for instructions which should be 33881 scheduled together. Different PRI should be returned for 33882 instructions with same FUSION_PRI. FUSION_PRI is the major sort 33883 key, PRI is the minor sort key. All instructions will be scheduled 33884 according to the two priorities. All priorities calculated should 33885 be between 0 (exclusive) and MAX_PRI (inclusive). To avoid false 33886 dependencies, FUSION_PRI of instructions which need to be scheduled 33887 together should be smaller than FUSION_PRI of irrelevant 33888 instructions. 33889 33890 Given below example: 33891 33892 ldr r10, [r1, 4] 33893 add r4, r4, r10 33894 ldr r15, [r2, 8] 33895 sub r5, r5, r15 33896 ldr r11, [r1, 0] 33897 add r4, r4, r11 33898 ldr r16, [r2, 12] 33899 sub r5, r5, r16 33900 33901 On targets like ARM/AArch64, the two pairs of consecutive loads 33902 should be merged. Since peephole2 pass can't help in this case 33903 unless consecutive loads are actually next to each other in 33904 instruction flow. That's where this scheduling fusion pass works. 33905 This hook calculates priority for each instruction based on its 33906 fustion type, like: 33907 33908 ldr r10, [r1, 4] ; fusion_pri=99, pri=96 33909 add r4, r4, r10 ; fusion_pri=100, pri=100 33910 ldr r15, [r2, 8] ; fusion_pri=98, pri=92 33911 sub r5, r5, r15 ; fusion_pri=100, pri=100 33912 ldr r11, [r1, 0] ; fusion_pri=99, pri=100 33913 add r4, r4, r11 ; fusion_pri=100, pri=100 33914 ldr r16, [r2, 12] ; fusion_pri=98, pri=88 33915 sub r5, r5, r16 ; fusion_pri=100, pri=100 33916 33917 Scheduling fusion pass then sorts all ready to issue instructions 33918 according to the priorities. As a result, instructions of same 33919 fusion type will be pushed together in instruction flow, like: 33920 33921 ldr r11, [r1, 0] 33922 ldr r10, [r1, 4] 33923 ldr r15, [r2, 8] 33924 ldr r16, [r2, 12] 33925 add r4, r4, r10 33926 sub r5, r5, r15 33927 add r4, r4, r11 33928 sub r5, r5, r16 33929 33930 Now peephole2 pass can simply merge the two pairs of loads. 33931 33932 Since scheduling fusion pass relies on peephole2 to do real fusion 33933 work, it is only enabled by default when peephole2 is in effect. 33934 33935 This is firstly introduced on ARM/AArch64 targets, please refer to 33936 the hook implementation for how different fusion types are 33937 supported. 33938 33939 33940File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 33941 3394217.18 Dividing the Output into Sections (Texts, Data, ...) 33943========================================================== 33944 33945An object file is divided into sections containing different types of 33946data. In the most common case, there are three sections: the "text 33947section", which holds instructions and read-only data; the "data 33948section", which holds initialized writable data; and the "bss section", 33949which holds uninitialized data. Some systems have other kinds of 33950sections. 33951 33952 'varasm.c' provides several well-known sections, such as 33953'text_section', 'data_section' and 'bss_section'. The normal way of 33954controlling a 'FOO_section' variable is to define the associated 33955'FOO_SECTION_ASM_OP' macro, as described below. The macros are only 33956read once, when 'varasm.c' initializes itself, so their values must be 33957run-time constants. They may however depend on command-line flags. 33958 33959 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the 33960'FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 33961 33962 Some assemblers require a different string to be written every time a 33963section is selected. If your assembler falls into this category, you 33964should define the 'TARGET_ASM_INIT_SECTIONS' hook and use 33965'get_unnamed_section' to set up the sections. 33966 33967 You must always create a 'text_section', either by defining 33968'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in 33969'TARGET_ASM_INIT_SECTIONS'. The same is true of 'data_section' and 33970'DATA_SECTION_ASM_OP'. If you do not create a distinct 33971'readonly_data_section', the default is to reuse 'text_section'. 33972 33973 All the other 'varasm.c' sections are optional, and are null if the 33974target does not provide them. 33975 33976 -- Macro: TEXT_SECTION_ASM_OP 33977 A C expression whose value is a string, including spacing, 33978 containing the assembler operation that should precede instructions 33979 and read-only data. Normally '"\t.text"' is right. 33980 33981 -- Macro: HOT_TEXT_SECTION_NAME 33982 If defined, a C string constant for the name of the section 33983 containing most frequently executed functions of the program. If 33984 not defined, GCC will provide a default definition if the target 33985 supports named sections. 33986 33987 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 33988 If defined, a C string constant for the name of the section 33989 containing unlikely executed functions in the program. 33990 33991 -- Macro: DATA_SECTION_ASM_OP 33992 A C expression whose value is a string, including spacing, 33993 containing the assembler operation to identify the following data 33994 as writable initialized data. Normally '"\t.data"' is right. 33995 33996 -- Macro: SDATA_SECTION_ASM_OP 33997 If defined, a C expression whose value is a string, including 33998 spacing, containing the assembler operation to identify the 33999 following data as initialized, writable small data. 34000 34001 -- Macro: READONLY_DATA_SECTION_ASM_OP 34002 A C expression whose value is a string, including spacing, 34003 containing the assembler operation to identify the following data 34004 as read-only initialized data. 34005 34006 -- Macro: BSS_SECTION_ASM_OP 34007 If defined, a C expression whose value is a string, including 34008 spacing, containing the assembler operation to identify the 34009 following data as uninitialized global data. If not defined, and 34010 'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data 34011 will be output in the data section if '-fno-common' is passed, 34012 otherwise 'ASM_OUTPUT_COMMON' will be used. 34013 34014 -- Macro: SBSS_SECTION_ASM_OP 34015 If defined, a C expression whose value is a string, including 34016 spacing, containing the assembler operation to identify the 34017 following data as uninitialized, writable small data. 34018 34019 -- Macro: TLS_COMMON_ASM_OP 34020 If defined, a C expression whose value is a string containing the 34021 assembler operation to identify the following data as thread-local 34022 common data. The default is '".tls_common"'. 34023 34024 -- Macro: TLS_SECTION_ASM_FLAG 34025 If defined, a C expression whose value is a character constant 34026 containing the flag used to mark a section as a TLS section. The 34027 default is ''T''. 34028 34029 -- Macro: INIT_SECTION_ASM_OP 34030 If defined, a C expression whose value is a string, including 34031 spacing, containing the assembler operation to identify the 34032 following data as initialization code. If not defined, GCC will 34033 assume such a section does not exist. This section has no 34034 corresponding 'init_section' variable; it is used entirely in 34035 runtime code. 34036 34037 -- Macro: FINI_SECTION_ASM_OP 34038 If defined, a C expression whose value is a string, including 34039 spacing, containing the assembler operation to identify the 34040 following data as finalization code. If not defined, GCC will 34041 assume such a section does not exist. This section has no 34042 corresponding 'fini_section' variable; it is used entirely in 34043 runtime code. 34044 34045 -- Macro: INIT_ARRAY_SECTION_ASM_OP 34046 If defined, a C expression whose value is a string, including 34047 spacing, containing the assembler operation to identify the 34048 following data as part of the '.init_array' (or equivalent) 34049 section. If not defined, GCC will assume such a section does not 34050 exist. Do not define both this macro and 'INIT_SECTION_ASM_OP'. 34051 34052 -- Macro: FINI_ARRAY_SECTION_ASM_OP 34053 If defined, a C expression whose value is a string, including 34054 spacing, containing the assembler operation to identify the 34055 following data as part of the '.fini_array' (or equivalent) 34056 section. If not defined, GCC will assume such a section does not 34057 exist. Do not define both this macro and 'FINI_SECTION_ASM_OP'. 34058 34059 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 34060 If defined, an ASM statement that switches to a different section 34061 via SECTION_OP, calls FUNCTION, and switches back to the text 34062 section. This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or 34063 'FINI_SECTION_ASM_OP' to calls to initialization and finalization 34064 functions from the init and fini sections. By default, this macro 34065 uses a simple function call. Some ports need hand-crafted assembly 34066 code to avoid dependencies on registers initialized in the function 34067 prologue or to ensure that constant pools don't end up too far way 34068 in the text section. 34069 34070 -- Macro: TARGET_LIBGCC_SDATA_SECTION 34071 If defined, a string which names the section into which small 34072 variables defined in crtstuff and libgcc should go. This is useful 34073 when the target has options for optimizing access to small data, 34074 and you want the crtstuff and libgcc routines to be conservative in 34075 what they expect of your application yet liberal in what your 34076 application expects. For example, for targets with a '.sdata' 34077 section (like MIPS), you could compile crtstuff with '-G 0' so that 34078 it doesn't require small data support from your application, but 34079 use this macro to put small data into '.sdata' so that your 34080 application can access these variables whether it uses small data 34081 or not. 34082 34083 -- Macro: FORCE_CODE_SECTION_ALIGN 34084 If defined, an ASM statement that aligns a code section to some 34085 arbitrary boundary. This is used to force all fragments of the 34086 '.init' and '.fini' sections to have to same alignment and thus 34087 prevent the linker from having to add any padding. 34088 34089 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 34090 Define this macro to be an expression with a nonzero value if jump 34091 tables (for 'tablejump' insns) should be output in the text 34092 section, along with the assembler instructions. Otherwise, the 34093 readonly data section is used. 34094 34095 This macro is irrelevant if there is no separate readonly data 34096 section. 34097 34098 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 34099 Define this hook if you need to do something special to set up the 34100 'varasm.c' sections, or if your target has some special sections of 34101 its own that you need to create. 34102 34103 GCC calls this hook after processing the command line, but before 34104 writing any assembly code, and before calling any of the 34105 section-returning hooks described below. 34106 34107 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 34108 Return a mask describing how relocations should be treated when 34109 selecting sections. Bit 1 should be set if global relocations 34110 should be placed in a read-write section; bit 0 should be set if 34111 local relocations should be placed in a read-write section. 34112 34113 The default version of this function returns 3 when '-fpic' is in 34114 effect, and 0 otherwise. The hook is typically redefined when the 34115 target cannot support (some kinds of) dynamic relocations in 34116 read-only sections even in executables. 34117 34118 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 34119 RELOC, unsigned HOST_WIDE_INT ALIGN) 34120 Return the section into which EXP should be placed. You can assume 34121 that EXP is either a 'VAR_DECL' node or a constant of some sort. 34122 RELOC indicates whether the initial value of EXP requires link-time 34123 relocations. Bit 0 is set when variable contains local relocations 34124 only, while bit 1 is set for global relocations. ALIGN is the 34125 constant alignment in bits. 34126 34127 The default version of this function takes care of putting 34128 read-only variables in 'readonly_data_section'. 34129 34130 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 34131 34132 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 34133 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 34134 called for 'FUNCTION_DECL's as well as for variables and constants. 34135 34136 In the case of a 'FUNCTION_DECL', RELOC will be zero if the 34137 function has been determined to be likely to be called, and nonzero 34138 if it is unlikely to be called. 34139 34140 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 34141 Build up a unique section name, expressed as a 'STRING_CST' node, 34142 and assign it to 'DECL_SECTION_NAME (DECL)'. As with 34143 'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 34144 value of EXP requires link-time relocations. 34145 34146 The default version of this function appends the symbol name to the 34147 ELF section name that would normally be used for the symbol. For 34148 example, the function 'foo' would be placed in '.text.foo'. 34149 Whatever the actual target object format, this is often good 34150 enough. 34151 34152 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 34153 DECL) 34154 Return the readonly data section associated with 'DECL_SECTION_NAME 34155 (DECL)'. The default version of this function selects 34156 '.gnu.linkonce.r.name' if the function's section is 34157 '.gnu.linkonce.t.name', '.rodata.name' if function is in 34158 '.text.name', and the normal readonly-data section otherwise. 34159 34160 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX 34161 Usually, the compiler uses the prefix '".rodata"' to construct 34162 section names for mergeable constant data. Define this macro to 34163 override the string if a different section name should be used. 34164 34165 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void) 34166 Return the section that should be used for transactional memory 34167 clone tables. 34168 34169 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (machine_mode 34170 MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 34171 Return the section into which a constant X, of mode MODE, should be 34172 placed. You can assume that X is some kind of constant in RTL. 34173 The argument MODE is redundant except in the case of a 'const_int' 34174 rtx. ALIGN is the constant alignment in bits. 34175 34176 The default version of this function takes care of putting symbolic 34177 constants in 'flag_pic' mode in 'data_section' and everything else 34178 in 'readonly_data_section'. 34179 34180 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree 34181 ID) 34182 Define this hook if you need to postprocess the assembler name 34183 generated by target-independent code. The ID provided to this hook 34184 will be the computed name (e.g., the macro 'DECL_NAME' of the DECL 34185 in C, or the mangled name of the DECL in C++). The return value of 34186 the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name 34187 on your target system. The default implementation of this hook 34188 just returns the ID provided. 34189 34190 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 34191 int NEW_DECL_P) 34192 Define this hook if references to a symbol or a constant must be 34193 treated differently depending on something about the variable or 34194 function named by the symbol (such as what section it is in). 34195 34196 The hook is executed immediately after rtl has been created for 34197 DECL, which may be a variable or function declaration or an entry 34198 in the constant pool. In either case, RTL is the rtl in question. 34199 Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not 34200 have been initialized yet. 34201 34202 In the case of a constant, it is safe to assume that the rtl is a 34203 'mem' whose address is a 'symbol_ref'. Most decls will also have 34204 this form, but that is not guaranteed. Global register variables, 34205 for instance, will have a 'reg' for their rtl. (Normally the right 34206 thing to do with such unusual rtl is leave it alone.) 34207 34208 The NEW_DECL_P argument will be true if this is the first time that 34209 'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. It 34210 will be false for subsequent invocations, which will happen for 34211 duplicate declarations. Whether or not anything must be done for 34212 the duplicate declaration depends on whether the hook examines 34213 'DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 34214 called for a constant. 34215 34216 The usual thing for this hook to do is to record flags in the 34217 'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'. 34218 Historically, the name string was modified if it was necessary to 34219 encode more than one bit of information, but this practice is now 34220 discouraged; use 'SYMBOL_REF_FLAGS'. 34221 34222 The default definition of this hook, 'default_encode_section_info' 34223 in 'varasm.c', sets a number of commonly-useful bits in 34224 'SYMBOL_REF_FLAGS'. Check whether the default does what you need 34225 before overriding it. 34226 34227 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 34228 *NAME) 34229 Decode NAME and return the real name part, sans the characters that 34230 'TARGET_ENCODE_SECTION_INFO' may have added. 34231 34232 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 34233 Returns true if EXP should be placed into a "small data" section. 34234 The default version of this hook always returns false. 34235 34236 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 34237 Contains the value true if the target places read-only "small data" 34238 into a separate section. The default value is false. 34239 34240 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void) 34241 It returns true if target wants profile code emitted before 34242 prologue. 34243 34244 The default version of this hook use the target macro 34245 'PROFILE_BEFORE_PROLOGUE'. 34246 34247 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 34248 Returns true if EXP names an object for which name resolution rules 34249 must resolve to the current "module" (dynamic shared library or 34250 executable image). 34251 34252 The default version of this hook implements the name resolution 34253 rules for ELF, which has a looser model of global name binding than 34254 other currently supported object file formats. 34255 34256 -- Target Hook: bool TARGET_HAVE_TLS 34257 Contains the value true if the target supports thread-local 34258 storage. The default value is false. 34259 34260 34261File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 34262 3426317.19 Position Independent Code 34264=============================== 34265 34266This section describes macros that help implement generation of position 34267independent code. Simply defining these macros is not enough to 34268generate valid PIC; you must also add support to the hook 34269'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS', 34270as well as 'LEGITIMIZE_ADDRESS'. You must modify the definition of 34271'movsi' to do something appropriate when the source operand contains a 34272symbolic address. You may also need to alter the handling of switch 34273statements so that they use relative addresses. 34274 34275 -- Macro: PIC_OFFSET_TABLE_REGNUM 34276 The register number of the register used to address a table of 34277 static data addresses in memory. In some cases this register is 34278 defined by a processor's "application binary interface" (ABI). 34279 When this macro is defined, RTL is generated for this register 34280 once, as with the stack pointer and frame pointer registers. If 34281 this macro is not defined, it is up to the machine-dependent files 34282 to allocate such a register (if necessary). Note that this 34283 register must be fixed when in use (e.g. when 'flag_pic' is true). 34284 34285 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 34286 A C expression that is nonzero if the register defined by 34287 'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. If not defined, 34288 the default is zero. Do not define this macro if 34289 'PIC_OFFSET_TABLE_REGNUM' is not defined. 34290 34291 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 34292 A C expression that is nonzero if X is a legitimate immediate 34293 operand on the target machine when generating position independent 34294 code. You can assume that X satisfies 'CONSTANT_P', so you need 34295 not check this. You can also assume FLAG_PIC is true, so you need 34296 not check it either. You need not define this macro if all 34297 constants (including 'SYMBOL_REF') can be immediate operands when 34298 generating position independent code. 34299 34300 34301File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 34302 3430317.20 Defining the Output Assembler Language 34304============================================ 34305 34306This section describes macros whose principal purpose is to describe how 34307to write instructions in assembler language--rather than what the 34308instructions do. 34309 34310* Menu: 34311 34312* File Framework:: Structural information for the assembler file. 34313* Data Output:: Output of constants (numbers, strings, addresses). 34314* Uninitialized Data:: Output of uninitialized variables. 34315* Label Output:: Output and generation of labels. 34316* Initialization:: General principles of initialization 34317 and termination routines. 34318* Macros for Initialization:: 34319 Specific macros that control the handling of 34320 initialization and termination routines. 34321* Instruction Output:: Output of actual instructions. 34322* Dispatch Tables:: Output of jump tables. 34323* Exception Region Output:: Output of exception region code. 34324* Alignment Output:: Pseudo ops for alignment and skipping data. 34325 34326 34327File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 34328 3432917.20.1 The Overall Framework of an Assembler File 34330-------------------------------------------------- 34331 34332This describes the overall framework of an assembly file. 34333 34334 -- Target Hook: void TARGET_ASM_FILE_START (void) 34335 Output to 'asm_out_file' any text which the assembler expects to 34336 find at the beginning of a file. The default behavior is 34337 controlled by two flags, documented below. Unless your target's 34338 assembler is quite unusual, if you override the default, you should 34339 call 'default_file_start' at some point in your target hook. This 34340 lets other target files rely on these variables. 34341 34342 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 34343 If this flag is true, the text of the macro 'ASM_APP_OFF' will be 34344 printed as the very first line in the assembly file, unless 34345 '-fverbose-asm' is in effect. (If that macro has been defined to 34346 the empty string, this variable has no effect.) With the normal 34347 definition of 'ASM_APP_OFF', the effect is to notify the GNU 34348 assembler that it need not bother stripping comments or extra 34349 whitespace from its input. This allows it to work a bit faster. 34350 34351 The default is false. You should not set it to true unless you 34352 have verified that your port does not generate any extra whitespace 34353 or comments that will cause GAS to issue errors in NO_APP mode. 34354 34355 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 34356 If this flag is true, 'output_file_directive' will be called for 34357 the primary source file, immediately after printing 'ASM_APP_OFF' 34358 (if that is enabled). Most ELF assemblers expect this to be done. 34359 The default is false. 34360 34361 -- Target Hook: void TARGET_ASM_FILE_END (void) 34362 Output to 'asm_out_file' any text which the assembler expects to 34363 find at the end of a file. The default is to output nothing. 34364 34365 -- Function: void file_end_indicate_exec_stack () 34366 Some systems use a common convention, the '.note.GNU-stack' special 34367 section, to indicate whether or not an object file relies on the 34368 stack being executable. If your system uses this convention, you 34369 should define 'TARGET_ASM_FILE_END' to this function. If you need 34370 to do other things in that hook, have your hook function call this 34371 function. 34372 34373 -- Target Hook: void TARGET_ASM_LTO_START (void) 34374 Output to 'asm_out_file' any text which the assembler expects to 34375 find at the start of an LTO section. The default is to output 34376 nothing. 34377 34378 -- Target Hook: void TARGET_ASM_LTO_END (void) 34379 Output to 'asm_out_file' any text which the assembler expects to 34380 find at the end of an LTO section. The default is to output 34381 nothing. 34382 34383 -- Target Hook: void TARGET_ASM_CODE_END (void) 34384 Output to 'asm_out_file' any text which is needed before emitting 34385 unwind info and debug info at the end of a file. Some targets emit 34386 here PIC setup thunks that cannot be emitted at the end of file, 34387 because they couldn't have unwind info then. The default is to 34388 output nothing. 34389 34390 -- Macro: ASM_COMMENT_START 34391 A C string constant describing how to begin a comment in the target 34392 assembler language. The compiler assumes that the comment will end 34393 at the end of the line. 34394 34395 -- Macro: ASM_APP_ON 34396 A C string constant for text to be output before each 'asm' 34397 statement or group of consecutive ones. Normally this is '"#APP"', 34398 which is a comment that has no effect on most assemblers but tells 34399 the GNU assembler that it must check the lines that follow for all 34400 valid assembler constructs. 34401 34402 -- Macro: ASM_APP_OFF 34403 A C string constant for text to be output after each 'asm' 34404 statement or group of consecutive ones. Normally this is 34405 '"#NO_APP"', which tells the GNU assembler to resume making the 34406 time-saving assumptions that are valid for ordinary compiler 34407 output. 34408 34409 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 34410 A C statement to output COFF information or DWARF debugging 34411 information which indicates that filename NAME is the current 34412 source file to the stdio stream STREAM. 34413 34414 This macro need not be defined if the standard form of output for 34415 the file format in use is appropriate. 34416 34417 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE, 34418 const char *NAME) 34419 Output COFF information or DWARF debugging information which 34420 indicates that filename NAME is the current source file to the 34421 stdio stream FILE. 34422 34423 This target hook need not be defined if the standard form of output 34424 for the file format in use is appropriate. 34425 34426 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME) 34427 Output a string based on NAME, suitable for the '#ident' directive, 34428 or the equivalent directive or pragma in non-C-family languages. 34429 If this hook is not defined, nothing is output for the '#ident' 34430 directive. 34431 34432 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 34433 A C statement to output the string STRING to the stdio stream 34434 STREAM. If you do not call the function 'output_quoted_string' in 34435 your config files, GCC will only call it to output filenames to the 34436 assembler source. So you can use it to canonicalize the format of 34437 the filename using this macro. 34438 34439 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 34440 unsigned int FLAGS, tree DECL) 34441 Output assembly directives to switch to section NAME. The section 34442 should have attributes as specified by FLAGS, which is a bit mask 34443 of the 'SECTION_*' flags defined in 'output.h'. If DECL is 34444 non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this 34445 section is associated. 34446 34447 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum 34448 node_frequency FREQ, bool STARTUP, bool EXIT) 34449 Return preferred text (sub)section for function DECL. Main purpose 34450 of this function is to separate cold, normal and hot functions. 34451 STARTUP is true when function is known to be used only at startup 34452 (from static constructors or it is 'main()'). EXIT is true when 34453 function is known to be used only at exit (from static 34454 destructors). Return NULL if function should go to default text 34455 section. 34456 34457 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE 34458 *FILE, tree DECL, bool NEW_IS_COLD) 34459 Used by the target to emit any assembler directives or additional 34460 labels needed when a function is partitioned between different 34461 sections. Output should be written to FILE. The function decl is 34462 available as DECL and the new section is 'cold' if NEW_IS_COLD is 34463 'true'. 34464 34465 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 34466 This flag is true if the target supports 34467 'TARGET_ASM_NAMED_SECTION'. It must not be modified by 34468 command-line option processing. 34469 34470 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 34471 This flag is true if we can create zeroed data by switching to a 34472 BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space. 34473 This is true on most ELF targets. 34474 34475 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 34476 const char *NAME, int RELOC) 34477 Choose a set of section attributes for use by 34478 'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 34479 section name, and whether or not the declaration's initializer may 34480 contain runtime relocations. DECL may be null, in which case 34481 read-write data should be assumed. 34482 34483 The default version of this function handles choosing code vs data, 34484 read-only vs read-write data, and 'flag_pic'. You should only need 34485 to override this if your target has special flags that might be set 34486 via '__attribute__'. 34487 34488 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 34489 TYPE, const char *TEXT) 34490 Provides the target with the ability to record the gcc command line 34491 switches that have been passed to the compiler, and options that 34492 are enabled. The TYPE argument specifies what is being recorded. 34493 It can take the following values: 34494 34495 'SWITCH_TYPE_PASSED' 34496 TEXT is a command line switch that has been set by the user. 34497 34498 'SWITCH_TYPE_ENABLED' 34499 TEXT is an option which has been enabled. This might be as a 34500 direct result of a command line switch, or because it is 34501 enabled by default or because it has been enabled as a side 34502 effect of a different command line switch. For example, the 34503 '-O2' switch enables various different individual optimization 34504 passes. 34505 34506 'SWITCH_TYPE_DESCRIPTIVE' 34507 TEXT is either NULL or some descriptive text which should be 34508 ignored. If TEXT is NULL then it is being used to warn the 34509 target hook that either recording is starting or ending. The 34510 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 34511 the warning is for start up and the second time the warning is 34512 for wind down. This feature is to allow the target hook to 34513 make any necessary preparations before it starts to record 34514 switches and to perform any necessary tidying up after it has 34515 finished recording switches. 34516 34517 'SWITCH_TYPE_LINE_START' 34518 This option can be ignored by this target hook. 34519 34520 'SWITCH_TYPE_LINE_END' 34521 This option can be ignored by this target hook. 34522 34523 The hook's return value must be zero. Other return values may be 34524 supported in the future. 34525 34526 By default this hook is set to NULL, but an example implementation 34527 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 34528 it records the switches as ASCII text inside a new, string 34529 mergeable section in the assembler output file. The name of the 34530 new section is provided by the 34531 'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 34532 34533 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 34534 This is the name of the section that will be created by the example 34535 ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target 34536 hook. 34537 34538 34539File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 34540 3454117.20.2 Output of Data 34542---------------------- 34543 34544 -- Target Hook: const char * TARGET_ASM_BYTE_OP 34545 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 34546 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 34547 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 34548 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 34549 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 34550 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 34551 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 34552 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 34553 These hooks specify assembly directives for creating certain kinds 34554 of integer object. The 'TARGET_ASM_BYTE_OP' directive creates a 34555 byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an 34556 aligned two-byte object, and so on. Any of the hooks may be 34557 'NULL', indicating that no suitable directive is available. 34558 34559 The compiler will print these strings at the start of a new line, 34560 followed immediately by the object's initial value. In most cases, 34561 the string should contain a tab, a pseudo-op, and then another tab. 34562 34563 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 34564 ALIGNED_P) 34565 The 'assemble_integer' function uses this hook to output an integer 34566 object. X is the object's value, SIZE is its size in bytes and 34567 ALIGNED_P indicates whether it is aligned. The function should 34568 return 'true' if it was able to output the object. If it returns 34569 false, 'assemble_integer' will try to split the object into smaller 34570 parts. 34571 34572 The default implementation of this hook will use the 34573 'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the 34574 relevant string is 'NULL'. 34575 34576 -- Target Hook: void TARGET_ASM_DECL_END (void) 34577 Define this hook if the target assembler requires a special marker 34578 to terminate an initialized variable declaration. 34579 34580 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE, 34581 rtx X) 34582 A target hook to recognize RTX patterns that 'output_addr_const' 34583 can't deal with, and output assembly code to FILE corresponding to 34584 the pattern X. This may be used to allow machine-dependent 34585 'UNSPEC's to appear within constants. 34586 34587 If target hook fails to recognize a pattern, it must return 34588 'false', so that a standard error message is printed. If it prints 34589 an error message itself, by calling, for example, 34590 'output_operand_lossage', it may just return 'true'. 34591 34592 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 34593 A C statement to output to the stdio stream STREAM an assembler 34594 instruction to assemble a string constant containing the LEN bytes 34595 at PTR. PTR will be a C expression of type 'char *' and LEN a C 34596 expression of type 'int'. 34597 34598 If the assembler has a '.ascii' pseudo-op as found in the Berkeley 34599 Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'. 34600 34601 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 34602 A C statement to output word N of a function descriptor for DECL. 34603 This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is 34604 defined, and is otherwise unused. 34605 34606 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 34607 You may define this macro as a C expression. You should define the 34608 expression to have a nonzero value if GCC should output the 34609 constant pool for a function before the code for the function, or a 34610 zero value if GCC should output the constant pool after the 34611 function. If you do not define this macro, the usual case, GCC 34612 will output the constant pool before the function. 34613 34614 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 34615 A C statement to output assembler commands to define the start of 34616 the constant pool for a function. FUNNAME is a string giving the 34617 name of the function. Should the return type of the function be 34618 required, it can be obtained via FUNDECL. SIZE is the size, in 34619 bytes, of the constant pool that will be written immediately after 34620 this call. 34621 34622 If no constant-pool prefix is required, the usual case, this macro 34623 need not be defined. 34624 34625 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, 34626 JUMPTO) 34627 A C statement (with or without semicolon) to output a constant in 34628 the constant pool, if it needs special treatment. (This macro need 34629 not do anything for RTL expressions that can be output normally.) 34630 34631 The argument FILE is the standard I/O stream to output the 34632 assembler code on. X is the RTL expression for the constant to 34633 output, and MODE is the machine mode (in case X is a 'const_int'). 34634 ALIGN is the required alignment for the value X; you should output 34635 an assembler directive to force this much alignment. 34636 34637 The argument LABELNO is a number to use in an internal label for 34638 the address of this pool entry. The definition of this macro is 34639 responsible for outputting the label definition at the proper 34640 place. Here is how to do this: 34641 34642 (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO); 34643 34644 When you output a pool entry specially, you should end with a 34645 'goto' to the label JUMPTO. This will prevent the same pool entry 34646 from being output a second time in the usual manner. 34647 34648 You need not define this macro if it would do nothing. 34649 34650 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 34651 A C statement to output assembler commands to at the end of the 34652 constant pool for a function. FUNNAME is a string giving the name 34653 of the function. Should the return type of the function be 34654 required, you can obtain it via FUNDECL. SIZE is the size, in 34655 bytes, of the constant pool that GCC wrote immediately before this 34656 call. 34657 34658 If no constant-pool epilogue is required, the usual case, you need 34659 not define this macro. 34660 34661 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 34662 Define this macro as a C expression which is nonzero if C is used 34663 as a logical line separator by the assembler. STR points to the 34664 position in the string where C was found; this can be used if a 34665 line separator uses multiple characters. 34666 34667 If you do not define this macro, the default is that only the 34668 character ';' is treated as a logical line separator. 34669 34670 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 34671 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 34672 These target hooks are C string constants, describing the syntax in 34673 the assembler for grouping arithmetic expressions. If not 34674 overridden, they default to normal parentheses, which is correct 34675 for most assemblers. 34676 34677 These macros are provided by 'real.h' for writing the definitions of 34678'ASM_OUTPUT_DOUBLE' and the like: 34679 34680 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 34681 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 34682 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 34683 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 34684 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 34685 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 34686 These translate X, of type 'REAL_VALUE_TYPE', to the target's 34687 floating point representation, and store its bit pattern in the 34688 variable L. For 'REAL_VALUE_TO_TARGET_SINGLE' and 34689 'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 34690 'long int'. For the others, it should be an array of 'long int'. 34691 The number of elements in this array is determined by the size of 34692 the desired target floating point data type: 32 bits of it go in 34693 each 'long int' array element. Each array element holds 32 bits of 34694 the result, even if 'long int' is wider than 32 bits on the host 34695 machine. 34696 34697 The array element values are designed so that you can print them 34698 out using 'fprintf' in the order they should appear in the target 34699 machine's memory. 34700 34701 34702File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 34703 3470417.20.3 Output of Uninitialized Variables 34705----------------------------------------- 34706 34707Each of the macros in this section is used to do the whole job of 34708outputting a single uninitialized variable. 34709 34710 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 34711 A C statement (sans semicolon) to output to the stdio stream STREAM 34712 the assembler definition of a common-label named NAME whose size is 34713 SIZE bytes. The variable ROUNDED is the size rounded up to 34714 whatever alignment the caller wants. It is possible that SIZE may 34715 be zero, for instance if a struct with no other member than a 34716 zero-length array is defined. In this case, the backend must 34717 output a symbol definition that allocates at least one byte, both 34718 so that the address of the resulting object does not compare equal 34719 to any other, and because some object formats cannot even express 34720 the concept of a zero-sized common symbol, as that is how they 34721 represent an ordinary undefined external. 34722 34723 Use the expression 'assemble_name (STREAM, NAME)' to output the 34724 name itself; before and after that, output the additional assembler 34725 syntax for defining the name, and a newline. 34726 34727 This macro controls how the assembler definitions of uninitialized 34728 common global variables are output. 34729 34730 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 34731 Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a 34732 separate, explicit argument. If you define this macro, it is used 34733 in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in 34734 handling the required alignment of the variable. The alignment is 34735 specified as the number of bits. 34736 34737 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 34738 ALIGNMENT) 34739 Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 34740 to be output, if there is one, or 'NULL_TREE' if there is no 34741 corresponding variable. If you define this macro, GCC will use it 34742 in place of both 'ASM_OUTPUT_COMMON' and 34743 'ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 34744 see the variable's decl in order to chose what to output. 34745 34746 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 34747 A C statement (sans semicolon) to output to the stdio stream STREAM 34748 the assembler definition of uninitialized global DECL named NAME 34749 whose size is SIZE bytes. The variable ALIGNMENT is the alignment 34750 specified as the number of bits. 34751 34752 Try to use function 'asm_output_aligned_bss' defined in file 34753 'varasm.c' when defining this macro. If unable, use the expression 34754 'assemble_name (STREAM, NAME)' to output the name itself; before 34755 and after that, output the additional assembler syntax for defining 34756 the name, and a newline. 34757 34758 There are two ways of handling global BSS. One is to define this 34759 macro. The other is to have 'TARGET_ASM_SELECT_SECTION' return a 34760 switchable BSS section (*note 34761 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 34762 both. 34763 34764 Some languages do not have 'common' data, and require a non-common 34765 form of global BSS in order to handle uninitialized globals 34766 efficiently. C++ is one example of this. However, if the target 34767 does not support global BSS, the front end may choose to make 34768 globals common in order to save space in the object file. 34769 34770 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 34771 A C statement (sans semicolon) to output to the stdio stream STREAM 34772 the assembler definition of a local-common-label named NAME whose 34773 size is SIZE bytes. The variable ROUNDED is the size rounded up to 34774 whatever alignment the caller wants. 34775 34776 Use the expression 'assemble_name (STREAM, NAME)' to output the 34777 name itself; before and after that, output the additional assembler 34778 syntax for defining the name, and a newline. 34779 34780 This macro controls how the assembler definitions of uninitialized 34781 static variables are output. 34782 34783 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 34784 Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a 34785 separate, explicit argument. If you define this macro, it is used 34786 in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in 34787 handling the required alignment of the variable. The alignment is 34788 specified as the number of bits. 34789 34790 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 34791 ALIGNMENT) 34792 Like 'ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 34793 be output, if there is one, or 'NULL_TREE' if there is no 34794 corresponding variable. If you define this macro, GCC will use it 34795 in place of both 'ASM_OUTPUT_DECL' and 'ASM_OUTPUT_ALIGNED_DECL'. 34796 Define this macro when you need to see the variable's decl in order 34797 to chose what to output. 34798 34799 34800File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 34801 3480217.20.4 Output and Generation of Labels 34803--------------------------------------- 34804 34805This is about outputting labels. 34806 34807 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 34808 A C statement (sans semicolon) to output to the stdio stream STREAM 34809 the assembler definition of a label named NAME. Use the expression 34810 'assemble_name (STREAM, NAME)' to output the name itself; before 34811 and after that, output the additional assembler syntax for defining 34812 the name, and a newline. A default definition of this macro is 34813 provided which is correct for most systems. 34814 34815 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL) 34816 A C statement (sans semicolon) to output to the stdio stream STREAM 34817 the assembler definition of a label named NAME of a function. Use 34818 the expression 'assemble_name (STREAM, NAME)' to output the name 34819 itself; before and after that, output the additional assembler 34820 syntax for defining the name, and a newline. A default definition 34821 of this macro is provided which is correct for most systems. 34822 34823 If this macro is not defined, then the function name is defined in 34824 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 34825 34826 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 34827 Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer 34828 to a compiler-generated label. The default definition uses 34829 'assemble_name_raw', which is like 'assemble_name' except that it 34830 is more efficient. 34831 34832 -- Macro: SIZE_ASM_OP 34833 A C string containing the appropriate assembler directive to 34834 specify the size of a symbol, without any arguments. On systems 34835 that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"'; 34836 on other systems, the default is not to define this macro. 34837 34838 Define this macro only if it is correct to use the default 34839 definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and 34840 'ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 34841 custom definitions of those macros, or if you do not need explicit 34842 symbol sizes at all, do not define this macro. 34843 34844 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 34845 A C statement (sans semicolon) to output to the stdio stream STREAM 34846 a directive telling the assembler that the size of the symbol NAME 34847 is SIZE. SIZE is a 'HOST_WIDE_INT'. If you define 'SIZE_ASM_OP', 34848 a default definition of this macro is provided. 34849 34850 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 34851 A C statement (sans semicolon) to output to the stdio stream STREAM 34852 a directive telling the assembler to calculate the size of the 34853 symbol NAME by subtracting its address from the current address. 34854 34855 If you define 'SIZE_ASM_OP', a default definition of this macro is 34856 provided. The default assumes that the assembler recognizes a 34857 special '.' symbol as referring to the current address, and can 34858 calculate the difference between this and another symbol. If your 34859 assembler does not recognize '.' or cannot do calculations with it, 34860 you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some 34861 other technique. 34862 34863 -- Macro: NO_DOLLAR_IN_LABEL 34864 Define this macro if the assembler does not accept the character 34865 '$' in label names. By default constructors and destructors in G++ 34866 have '$' in the identifiers. If this macro is defined, '.' is used 34867 instead. 34868 34869 -- Macro: NO_DOT_IN_LABEL 34870 Define this macro if the assembler does not accept the character 34871 '.' in label names. By default constructors and destructors in G++ 34872 have names that use '.'. If this macro is defined, these names are 34873 rewritten to avoid '.'. 34874 34875 -- Macro: TYPE_ASM_OP 34876 A C string containing the appropriate assembler directive to 34877 specify the type of a symbol, without any arguments. On systems 34878 that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"'; 34879 on other systems, the default is not to define this macro. 34880 34881 Define this macro only if it is correct to use the default 34882 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 34883 need your own custom definition of this macro, or if you do not 34884 need explicit symbol types at all, do not define this macro. 34885 34886 -- Macro: TYPE_OPERAND_FMT 34887 A C string which specifies (using 'printf' syntax) the format of 34888 the second operand to 'TYPE_ASM_OP'. On systems that use ELF, the 34889 default (in 'config/elfos.h') is '"@%s"'; on other systems, the 34890 default is not to define this macro. 34891 34892 Define this macro only if it is correct to use the default 34893 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 34894 need your own custom definition of this macro, or if you do not 34895 need explicit symbol types at all, do not define this macro. 34896 34897 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 34898 A C statement (sans semicolon) to output to the stdio stream STREAM 34899 a directive telling the assembler that the type of the symbol NAME 34900 is TYPE. TYPE is a C string; currently, that string is always 34901 either '"function"' or '"object"', but you should not count on 34902 this. 34903 34904 If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default 34905 definition of this macro is provided. 34906 34907 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 34908 A C statement (sans semicolon) to output to the stdio stream STREAM 34909 any text necessary for declaring the name NAME of a function which 34910 is being defined. This macro is responsible for outputting the 34911 label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL'). The 34912 argument DECL is the 'FUNCTION_DECL' tree node representing the 34913 function. 34914 34915 If this macro is not defined, then the function name is defined in 34916 the usual manner as a label (by means of 34917 'ASM_OUTPUT_FUNCTION_LABEL'). 34918 34919 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 34920 of this macro. 34921 34922 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 34923 A C statement (sans semicolon) to output to the stdio stream STREAM 34924 any text necessary for declaring the size of a function which is 34925 being defined. The argument NAME is the name of the function. The 34926 argument DECL is the 'FUNCTION_DECL' tree node representing the 34927 function. 34928 34929 If this macro is not defined, then the function size is not 34930 defined. 34931 34932 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 34933 this macro. 34934 34935 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 34936 A C statement (sans semicolon) to output to the stdio stream STREAM 34937 any text necessary for declaring the name NAME of an initialized 34938 variable which is being defined. This macro must output the label 34939 definition (perhaps using 'ASM_OUTPUT_LABEL'). The argument DECL 34940 is the 'VAR_DECL' tree node representing the variable. 34941 34942 If this macro is not defined, then the variable name is defined in 34943 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 34944 34945 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or 34946 'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 34947 34948 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE, 34949 const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE) 34950 A target hook to output to the stdio stream FILE any text necessary 34951 for declaring the name NAME of a constant which is being defined. 34952 This target hook is responsible for outputting the label definition 34953 (perhaps using 'assemble_label'). The argument EXP is the value of 34954 the constant, and SIZE is the size of the constant in bytes. The 34955 NAME will be an internal label. 34956 34957 The default version of this target hook, define the NAME in the 34958 usual manner as a label (by means of 'assemble_label'). 34959 34960 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target 34961 hook. 34962 34963 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 34964 A C statement (sans semicolon) to output to the stdio stream STREAM 34965 any text necessary for claiming a register REGNO for a global 34966 variable DECL with name NAME. 34967 34968 If you don't define this macro, that is equivalent to defining it 34969 to do nothing. 34970 34971 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 34972 A C statement (sans semicolon) to finish up declaring a variable 34973 name once the compiler has processed its initializer fully and thus 34974 has had a chance to determine the size of an array when controlled 34975 by an initializer. This is used on systems where it's necessary to 34976 declare something about the size of the object. 34977 34978 If you don't define this macro, that is equivalent to defining it 34979 to do nothing. 34980 34981 You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or 34982 'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 34983 34984 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 34985 char *NAME) 34986 This target hook is a function to output to the stdio stream STREAM 34987 some commands that will make the label NAME global; that is, 34988 available for reference from other files. 34989 34990 The default implementation relies on a proper definition of 34991 'GLOBAL_ASM_OP'. 34992 34993 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree 34994 DECL) 34995 This target hook is a function to output to the stdio stream STREAM 34996 some commands that will make the name associated with DECL global; 34997 that is, available for reference from other files. 34998 34999 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 35000 target hook. 35001 35002 -- Target Hook: void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *STREAM, 35003 const char *NAME, const_tree DECL) 35004 This target hook is a function to output to the stdio stream STREAM 35005 some commands that will declare the name associated with DECL which 35006 is not defined in the current translation unit. Most assemblers do 35007 not require anything to be output in this case. 35008 35009 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 35010 A C statement (sans semicolon) to output to the stdio stream STREAM 35011 some commands that will make the label NAME weak; that is, 35012 available for reference from other files but only used if no other 35013 definition is available. Use the expression 'assemble_name 35014 (STREAM, NAME)' to output the name itself; before and after that, 35015 output the additional assembler syntax for making that name weak, 35016 and a newline. 35017 35018 If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not 35019 support weak symbols and you should not define the 'SUPPORTS_WEAK' 35020 macro. 35021 35022 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 35023 Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and 35024 'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 35025 or variable decl. If VALUE is not 'NULL', this C statement should 35026 output to the stdio stream STREAM assembler code which defines 35027 (equates) the weak symbol NAME to have the value VALUE. If VALUE 35028 is 'NULL', it should output commands to make NAME weak. 35029 35030 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 35031 Outputs a directive that enables NAME to be used to refer to symbol 35032 VALUE with weak-symbol semantics. 'decl' is the declaration of 35033 'name'. 35034 35035 -- Macro: SUPPORTS_WEAK 35036 A preprocessor constant expression which evaluates to true if the 35037 target supports weak symbols. 35038 35039 If you don't define this macro, 'defaults.h' provides a default 35040 definition. If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is 35041 defined, the default definition is '1'; otherwise, it is '0'. 35042 35043 -- Macro: TARGET_SUPPORTS_WEAK 35044 A C expression which evaluates to true if the target supports weak 35045 symbols. 35046 35047 If you don't define this macro, 'defaults.h' provides a default 35048 definition. The default definition is '(SUPPORTS_WEAK)'. Define 35049 this macro if you want to control weak symbol support with a 35050 compiler flag such as '-melf'. 35051 35052 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 35053 A C statement (sans semicolon) to mark DECL to be emitted as a 35054 public symbol such that extra copies in multiple translation units 35055 will be discarded by the linker. Define this macro if your object 35056 file format provides support for this concept, such as the 'COMDAT' 35057 section flags in the Microsoft Windows PE/COFF format, and this 35058 support requires changes to DECL, such as putting it in a separate 35059 section. 35060 35061 -- Macro: SUPPORTS_ONE_ONLY 35062 A C expression which evaluates to true if the target supports 35063 one-only semantics. 35064 35065 If you don't define this macro, 'varasm.c' provides a default 35066 definition. If 'MAKE_DECL_ONE_ONLY' is defined, the default 35067 definition is '1'; otherwise, it is '0'. Define this macro if you 35068 want to control one-only symbol support with a compiler flag, or if 35069 setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to 35070 be emitted as one-only. 35071 35072 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 35073 VISIBILITY) 35074 This target hook is a function to output to ASM_OUT_FILE some 35075 commands that will make the symbol(s) associated with DECL have 35076 hidden, protected or internal visibility as specified by 35077 VISIBILITY. 35078 35079 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 35080 A C expression that evaluates to true if the target's linker 35081 expects that weak symbols do not appear in a static archive's table 35082 of contents. The default is '0'. 35083 35084 Leaving weak symbols out of an archive's table of contents means 35085 that, if a symbol will only have a definition in one translation 35086 unit and will have undefined references from other translation 35087 units, that symbol should not be weak. Defining this macro to be 35088 nonzero will thus have the effect that certain symbols that would 35089 normally be weak (explicit template instantiations, and vtables for 35090 polymorphic classes with noninline key methods) will instead be 35091 nonweak. 35092 35093 The C++ ABI requires this macro to be zero. Define this macro for 35094 targets where full C++ ABI compliance is impossible and where 35095 linker restrictions require weak symbols to be left out of a static 35096 archive's table of contents. 35097 35098 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 35099 A C statement (sans semicolon) to output to the stdio stream STREAM 35100 any text necessary for declaring the name of an external symbol 35101 named NAME which is referenced in this compilation but not defined. 35102 The value of DECL is the tree node for the declaration. 35103 35104 This macro need not be defined if it does not need to output 35105 anything. The GNU assembler and most Unix assemblers don't require 35106 anything. 35107 35108 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 35109 This target hook is a function to output to ASM_OUT_FILE an 35110 assembler pseudo-op to declare a library function name external. 35111 The name of the library function is given by SYMREF, which is a 35112 'symbol_ref'. 35113 35114 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 35115 *SYMBOL) 35116 This target hook is a function to output to ASM_OUT_FILE an 35117 assembler directive to annotate SYMBOL as used. The Darwin target 35118 uses the .no_dead_code_strip directive. 35119 35120 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 35121 A C statement (sans semicolon) to output to the stdio stream STREAM 35122 a reference in assembler syntax to a label named NAME. This should 35123 add '_' to the front of the name, if that is customary on your 35124 operating system, as it is in most Berkeley Unix systems. This 35125 macro is used in 'assemble_name'. 35126 35127 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME) 35128 Given a symbol NAME, perform same mangling as 'varasm.c''s 35129 'assemble_name', but in memory rather than to a file stream, 35130 returning result as an 'IDENTIFIER_NODE'. Required for correct LTO 35131 symtabs. The default implementation calls the 35132 'TARGET_STRIP_NAME_ENCODING' hook and then prepends the 35133 'USER_LABEL_PREFIX', if any. 35134 35135 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 35136 A C statement (sans semicolon) to output a reference to 35137 'SYMBOL_REF' SYM. If not defined, 'assemble_name' will be used to 35138 output the name of the symbol. This macro may be used to modify 35139 the way a symbol is referenced depending on information encoded by 35140 'TARGET_ENCODE_SECTION_INFO'. 35141 35142 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 35143 A C statement (sans semicolon) to output a reference to BUF, the 35144 result of 'ASM_GENERATE_INTERNAL_LABEL'. If not defined, 35145 'assemble_name' will be used to output the name of the symbol. 35146 This macro is not used by 'output_asm_label', or the '%l' specifier 35147 that calls it; the intention is that this macro should be set when 35148 it is necessary to output a label differently when its address is 35149 being taken. 35150 35151 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 35152 char *PREFIX, unsigned long LABELNO) 35153 A function to output to the stdio stream STREAM a label whose name 35154 is made from the string PREFIX and the number LABELNO. 35155 35156 It is absolutely essential that these labels be distinct from the 35157 labels used for user-level functions and variables. Otherwise, 35158 certain programs will have name conflicts with internal labels. 35159 35160 It is desirable to exclude internal labels from the symbol table of 35161 the object file. Most assemblers have a naming convention for 35162 labels that should be excluded; on many systems, the letter 'L' at 35163 the beginning of a label has this effect. You should find out what 35164 convention your system uses, and follow it. 35165 35166 The default version of this function utilizes 35167 'ASM_GENERATE_INTERNAL_LABEL'. 35168 35169 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 35170 A C statement to output to the stdio stream STREAM a debug info 35171 label whose name is made from the string PREFIX and the number NUM. 35172 This is useful for VLIW targets, where debug info labels may need 35173 to be treated differently than branch target labels. On some 35174 systems, branch target labels must be at the beginning of 35175 instruction bundles, but debug info labels can occur in the middle 35176 of instruction bundles. 35177 35178 If this macro is not defined, then 35179 '(*targetm.asm_out.internal_label)' will be used. 35180 35181 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 35182 A C statement to store into the string STRING a label whose name is 35183 made from the string PREFIX and the number NUM. 35184 35185 This string, when output subsequently by 'assemble_name', should 35186 produce the output that '(*targetm.asm_out.internal_label)' would 35187 produce with the same PREFIX and NUM. 35188 35189 If the string begins with '*', then 'assemble_name' will output the 35190 rest of the string unchanged. It is often convenient for 35191 'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way. If the 35192 string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to 35193 output the string, and may change it. (Of course, 35194 'ASM_OUTPUT_LABELREF' is also part of your machine description, so 35195 you should know what it does on your machine.) 35196 35197 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 35198 A C expression to assign to OUTVAR (which is a variable of type 35199 'char *') a newly allocated string made from the string NAME and 35200 the number NUMBER, with some suitable punctuation added. Use 35201 'alloca' to get space for the string. 35202 35203 The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to 35204 produce an assembler label for an internal static variable whose 35205 name is NAME. Therefore, the string must be such as to result in 35206 valid assembler code. The argument NUMBER is different each time 35207 this macro is executed; it prevents conflicts between 35208 similarly-named internal static variables in different scopes. 35209 35210 Ideally this string should not be a valid C identifier, to prevent 35211 any conflict with the user's own symbols. Most assemblers allow 35212 periods or percent signs in assembler symbols; putting at least one 35213 of these between the name and the number will suffice. 35214 35215 If this macro is not defined, a default definition will be provided 35216 which is correct for most systems. 35217 35218 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 35219 A C statement to output to the stdio stream STREAM assembler code 35220 which defines (equates) the symbol NAME to have the value VALUE. 35221 35222 If 'SET_ASM_OP' is defined, a default definition is provided which 35223 is correct for most systems. 35224 35225 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 35226 DECL_OF_VALUE) 35227 A C statement to output to the stdio stream STREAM assembler code 35228 which defines (equates) the symbol whose tree node is DECL_OF_NAME 35229 to have the value of the tree node DECL_OF_VALUE. This macro will 35230 be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if 35231 the tree nodes are available. 35232 35233 If 'SET_ASM_OP' is defined, a default definition is provided which 35234 is correct for most systems. 35235 35236 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 35237 A C statement that evaluates to true if the assembler code which 35238 defines (equates) the symbol whose tree node is DECL_OF_NAME to 35239 have the value of the tree node DECL_OF_VALUE should be emitted 35240 near the end of the current compilation unit. The default is to 35241 not defer output of defines. This macro affects defines output by 35242 'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'. 35243 35244 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 35245 A C statement to output to the stdio stream STREAM assembler code 35246 which defines (equates) the weak symbol NAME to have the value 35247 VALUE. If VALUE is 'NULL', it defines NAME as an undefined weak 35248 symbol. 35249 35250 Define this macro if the target only supports weak aliases; define 35251 'ASM_OUTPUT_DEF' instead if possible. 35252 35253 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 35254 SEL_NAME) 35255 Define this macro to override the default assembler names used for 35256 Objective-C methods. 35257 35258 The default name is a unique method number followed by the name of 35259 the class (e.g. '_1_Foo'). For methods in categories, the name of 35260 the category is also included in the assembler name (e.g. 35261 '_1_Foo_Bar'). 35262 35263 These names are safe on most systems, but make debugging difficult 35264 since the method's selector is not present in the name. Therefore, 35265 particular systems define other ways of computing names. 35266 35267 BUF is an expression of type 'char *' which gives you a buffer in 35268 which to store the name; its length is as long as CLASS_NAME, 35269 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 35270 35271 The argument IS_INST specifies whether the method is an instance 35272 method or a class method; CLASS_NAME is the name of the class; 35273 CAT_NAME is the name of the category (or 'NULL' if the method is 35274 not in a category); and SEL_NAME is the name of the selector. 35275 35276 On systems where the assembler can handle quoted names, you can use 35277 this macro to provide more human-readable names. 35278 35279 35280File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 35281 3528217.20.5 How Initialization Functions Are Handled 35283------------------------------------------------ 35284 35285The compiled code for certain languages includes "constructors" (also 35286called "initialization routines")--functions to initialize data in the 35287program when the program is started. These functions need to be called 35288before the program is "started"--that is to say, before 'main' is 35289called. 35290 35291 Compiling some languages generates "destructors" (also called 35292"termination routines") that should be called when the program 35293terminates. 35294 35295 To make the initialization and termination functions work, the compiler 35296must output something in the assembler code to cause those functions to 35297be called at the appropriate time. When you port the compiler to a new 35298system, you need to specify how to do this. 35299 35300 There are two major ways that GCC currently supports the execution of 35301initialization and termination functions. Each way has two variants. 35302Much of the structure is common to all four variations. 35303 35304 The linker must build two lists of these functions--a list of 35305initialization functions, called '__CTOR_LIST__', and a list of 35306termination functions, called '__DTOR_LIST__'. 35307 35308 Each list always begins with an ignored function pointer (which may 35309hold 0, -1, or a count of the function pointers after it, depending on 35310the environment). This is followed by a series of zero or more function 35311pointers to constructors (or destructors), followed by a function 35312pointer containing zero. 35313 35314 Depending on the operating system and its executable file format, 35315either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time 35316and exit time. Constructors are called in reverse order of the list; 35317destructors in forward order. 35318 35319 The best way to handle static constructors works only for object file 35320formats which provide arbitrarily-named sections. A section is set 35321aside for a list of constructors, and another for a list of destructors. 35322Traditionally these are called '.ctors' and '.dtors'. Each object file 35323that defines an initialization function also puts a word in the 35324constructor section to point to that function. The linker accumulates 35325all these words into one contiguous '.ctors' section. Termination 35326functions are handled similarly. 35327 35328 This method will be chosen as the default by 'target-def.h' if 35329'TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 35330arbitrary sections, but does support special designated constructor and 35331destructor sections may define 'CTORS_SECTION_ASM_OP' and 35332'DTORS_SECTION_ASM_OP' to achieve the same effect. 35333 35334 When arbitrary sections are available, there are two variants, 35335depending upon how the code in 'crtstuff.c' is called. On systems that 35336support a ".init" section which is executed at program startup, parts of 35337'crtstuff.c' are compiled into that section. The program is linked by 35338the 'gcc' driver like this: 35339 35340 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 35341 35342 The prologue of a function ('__init') appears in the '.init' section of 35343'crti.o'; the epilogue appears in 'crtn.o'. Likewise for the function 35344'__fini' in the ".fini" section. Normally these files are provided by 35345the operating system or by the GNU C library, but are provided by GCC 35346for a few targets. 35347 35348 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled 35349from 'crtstuff.c'. They contain, among other things, code fragments 35350within the '.init' and '.fini' sections that branch to routines in the 35351'.text' section. The linker will pull all parts of a section together, 35352which results in a complete '__init' function that invokes the routines 35353we need at startup. 35354 35355 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro 35356properly. 35357 35358 If no init section is available, when GCC compiles any function called 35359'main' (or more accurately, any function designated as a program entry 35360point by the language front end calling 'expand_main_function'), it 35361inserts a procedure call to '__main' as the first executable code after 35362the function prologue. The '__main' function is defined in 'libgcc2.c' 35363and runs the global constructors. 35364 35365 In file formats that don't support arbitrary sections, there are again 35366two variants. In the simplest variant, the GNU linker (GNU 'ld') and an 35367'a.out' format must be used. In this case, 'TARGET_ASM_CONSTRUCTOR' is 35368defined to produce a '.stabs' entry of type 'N_SETT', referencing the 35369name '__CTOR_LIST__', and with the address of the void function 35370containing the initialization code as its value. The GNU linker 35371recognizes this as a request to add the value to a "set"; the values are 35372accumulated, and are eventually placed in the executable as a vector in 35373the format described above, with a leading (ignored) count and a 35374trailing zero element. 'TARGET_ASM_DESTRUCTOR' is handled similarly. 35375Since no init section is available, the absence of 'INIT_SECTION_ASM_OP' 35376causes the compilation of 'main' to call '__main' as above, starting the 35377initialization process. 35378 35379 The last variant uses neither arbitrary sections nor the GNU linker. 35380This is preferable when you want to do dynamic linking and when using 35381file formats which the GNU linker does not support, such as 'ECOFF'. In 35382this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and 35383termination functions are recognized simply by their names. This 35384requires an extra program in the linkage step, called 'collect2'. This 35385program pretends to be the linker, for use with GCC; it does its job by 35386running the ordinary linker, but also arranges to include the vectors of 35387initialization and termination functions. These functions are called 35388via '__main' as described above. In order to use this method, 35389'use_collect2' must be defined in the target in 'config.gcc'. 35390 35391 The following section describes the specific macros that control and 35392customize the handling of initialization and termination functions. 35393 35394 35395File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 35396 3539717.20.6 Macros Controlling Initialization Routines 35398-------------------------------------------------- 35399 35400Here are the macros that control how the compiler handles initialization 35401and termination functions: 35402 35403 -- Macro: INIT_SECTION_ASM_OP 35404 If defined, a C string constant, including spacing, for the 35405 assembler operation to identify the following data as 35406 initialization code. If not defined, GCC will assume such a 35407 section does not exist. When you are using special sections for 35408 initialization and termination functions, this macro also controls 35409 how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization 35410 functions. 35411 35412 -- Macro: HAS_INIT_SECTION 35413 If defined, 'main' will not call '__main' as described above. This 35414 macro should be defined for systems that control start-up code on a 35415 symbol-by-symbol basis, such as OSF/1, and should not be defined 35416 explicitly for systems that support 'INIT_SECTION_ASM_OP'. 35417 35418 -- Macro: LD_INIT_SWITCH 35419 If defined, a C string constant for a switch that tells the linker 35420 that the following symbol is an initialization routine. 35421 35422 -- Macro: LD_FINI_SWITCH 35423 If defined, a C string constant for a switch that tells the linker 35424 that the following symbol is a finalization routine. 35425 35426 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 35427 If defined, a C statement that will write a function that can be 35428 automatically called when a shared library is loaded. The function 35429 should call FUNC, which takes no arguments. If not defined, and 35430 the object format requires an explicit initialization function, 35431 then a function called '_GLOBAL__DI' will be generated. 35432 35433 This function and the following one are used by collect2 when 35434 linking a shared library that needs constructors or destructors, or 35435 has DWARF2 exception tables embedded in the code. 35436 35437 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 35438 If defined, a C statement that will write a function that can be 35439 automatically called when a shared library is unloaded. The 35440 function should call FUNC, which takes no arguments. If not 35441 defined, and the object format requires an explicit finalization 35442 function, then a function called '_GLOBAL__DD' will be generated. 35443 35444 -- Macro: INVOKE__main 35445 If defined, 'main' will call '__main' despite the presence of 35446 'INIT_SECTION_ASM_OP'. This macro should be defined for systems 35447 where the init section is not actually run automatically, but is 35448 still useful for collecting the lists of constructors and 35449 destructors. 35450 35451 -- Macro: SUPPORTS_INIT_PRIORITY 35452 If nonzero, the C++ 'init_priority' attribute is supported and the 35453 compiler should emit instructions to control the order of 35454 initialization of objects. If zero, the compiler will issue an 35455 error message upon encountering an 'init_priority' attribute. 35456 35457 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 35458 This value is true if the target supports some "native" method of 35459 collecting constructors and destructors to be run at startup and 35460 exit. It is false if we must use 'collect2'. 35461 35462 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 35463 If defined, a function that outputs assembler code to arrange to 35464 call the function referenced by SYMBOL at initialization time. 35465 35466 Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no 35467 arguments and with no return value. If the target supports 35468 initialization priorities, PRIORITY is a value between 0 and 35469 'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'. 35470 35471 If this macro is not defined by the target, a suitable default will 35472 be chosen if (1) the target supports arbitrary section names, (2) 35473 the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is 35474 not defined. 35475 35476 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 35477 This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination 35478 functions rather than initialization functions. 35479 35480 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 35481generated for the generated object file will have static linkage. 35482 35483 If your system uses 'collect2' as the means of processing constructors, 35484then that program normally uses 'nm' to scan an object file for 35485constructor functions to be called. 35486 35487 On certain kinds of systems, you can define this macro to make 35488'collect2' work faster (and, in some cases, make it work at all): 35489 35490 -- Macro: OBJECT_FORMAT_COFF 35491 Define this macro if the system uses COFF (Common Object File 35492 Format) object files, so that 'collect2' can assume this format and 35493 scan object files directly for dynamic constructor/destructor 35494 functions. 35495 35496 This macro is effective only in a native compiler; 'collect2' as 35497 part of a cross compiler always uses 'nm' for the target machine. 35498 35499 -- Macro: REAL_NM_FILE_NAME 35500 Define this macro as a C string constant containing the file name 35501 to use to execute 'nm'. The default is to search the path normally 35502 for 'nm'. 35503 35504 -- Macro: NM_FLAGS 35505 'collect2' calls 'nm' to scan object files for static constructors 35506 and destructors and LTO info. By default, '-n' is passed. Define 35507 'NM_FLAGS' to a C string constant if other options are needed to 35508 get the same output format as GNU 'nm -n' produces. 35509 35510 If your system supports shared libraries and has a program to list the 35511dynamic dependencies of a given library or executable, you can define 35512these macros to enable support for running initialization and 35513termination functions in shared libraries: 35514 35515 -- Macro: LDD_SUFFIX 35516 Define this macro to a C string constant containing the name of the 35517 program which lists dynamic dependencies, like 'ldd' under SunOS 4. 35518 35519 -- Macro: PARSE_LDD_OUTPUT (PTR) 35520 Define this macro to be C code that extracts filenames from the 35521 output of the program denoted by 'LDD_SUFFIX'. PTR is a variable 35522 of type 'char *' that points to the beginning of a line of output 35523 from 'LDD_SUFFIX'. If the line lists a dynamic dependency, the 35524 code must advance PTR to the beginning of the filename on that 35525 line. Otherwise, it must set PTR to 'NULL'. 35526 35527 -- Macro: SHLIB_SUFFIX 35528 Define this macro to a C string constant containing the default 35529 shared library extension of the target (e.g., '".so"'). 'collect2' 35530 strips version information after this suffix when generating global 35531 constructor and destructor names. This define is only needed on 35532 targets that use 'collect2' to process constructors and 35533 destructors. 35534 35535 35536File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 35537 3553817.20.7 Output of Assembler Instructions 35539---------------------------------------- 35540 35541This describes assembler instruction output. 35542 35543 -- Macro: REGISTER_NAMES 35544 A C initializer containing the assembler's names for the machine 35545 registers, each one as a C string constant. This is what 35546 translates register numbers in the compiler into assembler 35547 language. 35548 35549 -- Macro: ADDITIONAL_REGISTER_NAMES 35550 If defined, a C initializer for an array of structures containing a 35551 name and a register number. This macro defines additional names 35552 for hard registers, thus allowing the 'asm' option in declarations 35553 to refer to registers using alternate names. 35554 35555 -- Macro: OVERLAPPING_REGISTER_NAMES 35556 If defined, a C initializer for an array of structures containing a 35557 name, a register number and a count of the number of consecutive 35558 machine registers the name overlaps. This macro defines additional 35559 names for hard registers, thus allowing the 'asm' option in 35560 declarations to refer to registers using alternate names. Unlike 35561 'ADDITIONAL_REGISTER_NAMES', this macro should be used when the 35562 register name implies multiple underlying registers. 35563 35564 This macro should be used when it is important that a clobber in an 35565 'asm' statement clobbers all the underlying values implied by the 35566 register name. For example, on ARM, clobbering the 35567 double-precision VFP register "d0" implies clobbering both 35568 single-precision registers "s0" and "s1". 35569 35570 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 35571 Define this macro if you are using an unusual assembler that 35572 requires different names for the machine instructions. 35573 35574 The definition is a C statement or statements which output an 35575 assembler instruction opcode to the stdio stream STREAM. The 35576 macro-operand PTR is a variable of type 'char *' which points to 35577 the opcode name in its "internal" form--the form that is written in 35578 the machine description. The definition should output the opcode 35579 name to STREAM, performing any translation you desire, and 35580 increment the variable PTR to point at the end of the opcode so 35581 that it will not be output twice. 35582 35583 In fact, your macro definition may process less than the entire 35584 opcode name, or more than the opcode name; but if you want to 35585 process text that includes '%'-sequences to substitute operands, 35586 you must take care of the substitution yourself. Just be sure to 35587 increment PTR over whatever text should not be output normally. 35588 35589 If you need to look at the operand values, they can be found as the 35590 elements of 'recog_data.operand'. 35591 35592 If the macro definition does nothing, the instruction is output in 35593 the usual way. 35594 35595 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 35596 If defined, a C statement to be executed just prior to the output 35597 of assembler code for INSN, to modify the extracted operands so 35598 they will be output differently. 35599 35600 Here the argument OPVEC is the vector containing the operands 35601 extracted from INSN, and NOPERANDS is the number of elements of the 35602 vector which contain meaningful data for this insn. The contents 35603 of this vector are what will be used to convert the insn template 35604 into assembler code, so you can change the assembler output by 35605 changing the contents of the vector. 35606 35607 This macro is useful when various assembler syntaxes share a single 35608 file of instruction patterns; by defining this macro differently, 35609 you can cause a large class of instructions to be output 35610 differently (such as with rearranged operands). Naturally, 35611 variations in assembler syntax affecting individual insn patterns 35612 ought to be handled by writing conditional output routines in those 35613 patterns. 35614 35615 If this macro is not defined, it is equivalent to a null statement. 35616 35617 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, 35618 rtx_insn *INSN, rtx *OPVEC, int NOPERANDS) 35619 If defined, this target hook is a function which is executed just 35620 after the output of assembler code for INSN, to change the mode of 35621 the assembler if necessary. 35622 35623 Here the argument OPVEC is the vector containing the operands 35624 extracted from INSN, and NOPERANDS is the number of elements of the 35625 vector which contain meaningful data for this insn. The contents 35626 of this vector are what was used to convert the insn template into 35627 assembler code, so you can change the assembler mode by checking 35628 the contents of the vector. 35629 35630 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 35631 A C compound statement to output to stdio stream STREAM the 35632 assembler syntax for an instruction operand X. X is an RTL 35633 expression. 35634 35635 CODE is a value that can be used to specify one of several ways of 35636 printing the operand. It is used when identical operands must be 35637 printed differently depending on the context. CODE comes from the 35638 '%' specification that was used to request printing of the operand. 35639 If the specification was just '%DIGIT' then CODE is 0; if the 35640 specification was '%LTR DIGIT' then CODE is the ASCII code for LTR. 35641 35642 If X is a register, this macro should print the register's name. 35643 The names can be found in an array 'reg_names' whose type is 'char 35644 *[]'. 'reg_names' is initialized from 'REGISTER_NAMES'. 35645 35646 When the machine description has a specification '%PUNCT' (a '%' 35647 followed by a punctuation character), this macro is called with a 35648 null pointer for X and the punctuation character for CODE. 35649 35650 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 35651 A C expression which evaluates to true if CODE is a valid 35652 punctuation character for use in the 'PRINT_OPERAND' macro. If 35653 'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 35654 punctuation characters (except for the standard one, '%') are used 35655 in this way. 35656 35657 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 35658 A C compound statement to output to stdio stream STREAM the 35659 assembler syntax for an instruction operand that is a memory 35660 reference whose address is X. X is an RTL expression. 35661 35662 On some machines, the syntax for a symbolic address depends on the 35663 section that the address refers to. On these machines, define the 35664 hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the 35665 'symbol_ref', and then check for it here. *Note Assembler 35666 Format::. 35667 35668 -- Macro: DBR_OUTPUT_SEQEND (FILE) 35669 A C statement, to be executed after all slot-filler instructions 35670 have been output. If necessary, call 'dbr_sequence_length' to 35671 determine the number of slots filled in a sequence (zero if not 35672 currently outputting a sequence), to decide how many no-ops to 35673 output, or whatever. 35674 35675 Don't define this macro if it has nothing to do, but it is helpful 35676 in reading assembly output if the extent of the delay sequence is 35677 made explicit (e.g. with white space). 35678 35679 Note that output routines for instructions with delay slots must be 35680prepared to deal with not being output as part of a sequence (i.e. when 35681the scheduling pass is not run, or when no slot fillers could be found.) 35682The variable 'final_sequence' is null when not processing a sequence, 35683otherwise it contains the 'sequence' rtx being output. 35684 35685 -- Macro: REGISTER_PREFIX 35686 -- Macro: LOCAL_LABEL_PREFIX 35687 -- Macro: USER_LABEL_PREFIX 35688 -- Macro: IMMEDIATE_PREFIX 35689 If defined, C string expressions to be used for the '%R', '%L', 35690 '%U', and '%I' options of 'asm_fprintf' (see 'final.c'). These are 35691 useful when a single 'md' file must support multiple assembler 35692 formats. In that case, the various 'tm.h' files can define these 35693 macros differently. 35694 35695 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 35696 If defined this macro should expand to a series of 'case' 35697 statements which will be parsed inside the 'switch' statement of 35698 the 'asm_fprintf' function. This allows targets to define extra 35699 printf formats which may useful when generating their assembler 35700 statements. Note that uppercase letters are reserved for future 35701 generic extensions to asm_fprintf, and so are not available to 35702 target specific code. The output file is given by the parameter 35703 FILE. The varargs input pointer is ARGPTR and the rest of the 35704 format string, starting the character after the one that is being 35705 switched upon, is pointed to by FORMAT. 35706 35707 -- Macro: ASSEMBLER_DIALECT 35708 If your target supports multiple dialects of assembler language 35709 (such as different opcodes), define this macro as a C expression 35710 that gives the numeric index of the assembler language dialect to 35711 use, with zero as the first variant. 35712 35713 If this macro is defined, you may use constructs of the form 35714 '{option0|option1|option2...}' 35715 in the output templates of patterns (*note Output Template::) or in 35716 the first argument of 'asm_fprintf'. This construct outputs 35717 'option0', 'option1', 'option2', etc., if the value of 35718 'ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 35719 within these strings retain their usual meaning. If there are 35720 fewer alternatives within the braces than the value of 35721 'ASSEMBLER_DIALECT', the construct outputs nothing. If it's needed 35722 to print curly braces or '|' character in assembler output 35723 directly, '%{', '%}' and '%|' can be used. 35724 35725 If you do not define this macro, the characters '{', '|' and '}' do 35726 not have any special meaning when used in templates or operands to 35727 'asm_fprintf'. 35728 35729 Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX', 35730 'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the 35731 variations in assembler language syntax with that mechanism. 35732 Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax 35733 if the syntax variant are larger and involve such things as 35734 different opcodes or operand order. 35735 35736 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 35737 A C expression to output to STREAM some assembler code which will 35738 push hard register number REGNO onto the stack. The code need not 35739 be optimal, since this macro is used only when profiling. 35740 35741 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 35742 A C expression to output to STREAM some assembler code which will 35743 pop hard register number REGNO off of the stack. The code need not 35744 be optimal, since this macro is used only when profiling. 35745 35746 35747File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 35748 3574917.20.8 Output of Dispatch Tables 35750--------------------------------- 35751 35752This concerns dispatch tables. 35753 35754 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 35755 A C statement to output to the stdio stream STREAM an assembler 35756 pseudo-instruction to generate a difference between two labels. 35757 VALUE and REL are the numbers of two internal labels. The 35758 definitions of these labels are output using 35759 '(*targetm.asm_out.internal_label)', and they must be printed in 35760 the same way here. For example, 35761 35762 fprintf (STREAM, "\t.word L%d-L%d\n", 35763 VALUE, REL) 35764 35765 You must provide this macro on machines where the addresses in a 35766 dispatch table are relative to the table's own address. If 35767 defined, GCC will also use this macro on all machines when 35768 producing PIC. BODY is the body of the 'ADDR_DIFF_VEC'; it is 35769 provided so that the mode and flags can be read. 35770 35771 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 35772 This macro should be provided on machines where the addresses in a 35773 dispatch table are absolute. 35774 35775 The definition should be a C statement to output to the stdio 35776 stream STREAM an assembler pseudo-instruction to generate a 35777 reference to a label. VALUE is the number of an internal label 35778 whose definition is output using 35779 '(*targetm.asm_out.internal_label)'. For example, 35780 35781 fprintf (STREAM, "\t.word L%d\n", VALUE) 35782 35783 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 35784 Define this if the label before a jump-table needs to be output 35785 specially. The first three arguments are the same as for 35786 '(*targetm.asm_out.internal_label)'; the fourth argument is the 35787 jump-table which follows (a 'jump_table_data' containing an 35788 'addr_vec' or 'addr_diff_vec'). 35789 35790 This feature is used on system V to output a 'swbeg' statement for 35791 the table. 35792 35793 If this macro is not defined, these labels are output with 35794 '(*targetm.asm_out.internal_label)'. 35795 35796 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 35797 Define this if something special must be output at the end of a 35798 jump-table. The definition should be a C statement to be executed 35799 after the assembler code for the table is written. It should write 35800 the appropriate code to stdio stream STREAM. The argument TABLE is 35801 the jump-table insn, and NUM is the label-number of the preceding 35802 label. 35803 35804 If this macro is not defined, nothing special is output at the end 35805 of the jump-table. 35806 35807 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 35808 DECL, int FOR_EH, int EMPTY) 35809 This target hook emits a label at the beginning of each FDE. It 35810 should be defined on targets where FDEs need special labels, and it 35811 should write the appropriate label, for the FDE associated with the 35812 function declaration DECL, to the stdio stream STREAM. The third 35813 argument, FOR_EH, is a boolean: true if this is for an exception 35814 table. The fourth argument, EMPTY, is a boolean: true if this is a 35815 placeholder label for an omitted FDE. 35816 35817 The default is that FDEs are not given nonlocal labels. 35818 35819 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 35820 This target hook emits a label at the beginning of the exception 35821 table. It should be defined on targets where it is desirable for 35822 the table to be broken up according to function. 35823 35824 The default is that no label is emitted. 35825 35826 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx 35827 PERSONALITY) 35828 If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be 35829 used to emit a directive to install a personality hook into the 35830 unwind info. This hook should not be used if dwarf2 unwind info is 35831 used. 35832 35833 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn 35834 *INSN) 35835 This target hook emits assembly directives required to unwind the 35836 given instruction. This is only used when 35837 'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'. 35838 35839 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN 35840 True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before 35841 the assembly for INSN has been emitted, false if the hook should be 35842 called afterward. 35843 35844 35845File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 35846 3584717.20.9 Assembler Commands for Exception Regions 35848------------------------------------------------ 35849 35850This describes commands marking the start and the end of an exception 35851region. 35852 35853 -- Macro: EH_FRAME_SECTION_NAME 35854 If defined, a C string constant for the name of the section 35855 containing exception handling frame unwind information. If not 35856 defined, GCC will provide a default definition if the target 35857 supports named sections. 'crtstuff.c' uses this macro to switch to 35858 the appropriate section. 35859 35860 You should define this symbol if your target supports DWARF 2 frame 35861 unwind information and the default definition does not work. 35862 35863 -- Macro: EH_FRAME_IN_DATA_SECTION 35864 If defined, DWARF 2 frame unwind information will be placed in the 35865 data section even though the target supports named sections. This 35866 might be necessary, for instance, if the system linker does garbage 35867 collection and sections cannot be marked as not to be collected. 35868 35869 Do not define this macro unless 'TARGET_ASM_NAMED_SECTION' is also 35870 defined. 35871 35872 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 35873 Define this macro to 1 if your target is such that no frame unwind 35874 information encoding used with non-PIC code will ever require a 35875 runtime relocation, but the linker may not support merging 35876 read-only and read-write sections into a single read-write section. 35877 35878 -- Macro: MASK_RETURN_ADDR 35879 An rtx used to mask the return address found via 'RETURN_ADDR_RTX', 35880 so that it does not contain any extraneous set bits in it. 35881 35882 -- Macro: DWARF2_UNWIND_INFO 35883 Define this macro to 0 if your target supports DWARF 2 frame unwind 35884 information, but it does not yet work with exception handling. 35885 Otherwise, if your target supports this information (if it defines 35886 'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will 35887 provide a default definition of 1. 35888 35889 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO 35890 (struct gcc_options *OPTS) 35891 This hook defines the mechanism that will be used for exception 35892 handling by the target. If the target has ABI specified unwind 35893 tables, the hook should return 'UI_TARGET'. If the target is to 35894 use the 'setjmp'/'longjmp'-based exception handling scheme, the 35895 hook should return 'UI_SJLJ'. If the target supports DWARF 2 frame 35896 unwind information, the hook should return 'UI_DWARF2'. 35897 35898 A target may, if exceptions are disabled, choose to return 35899 'UI_NONE'. This may end up simplifying other parts of 35900 target-specific code. The default implementation of this hook 35901 never returns 'UI_NONE'. 35902 35903 Note that the value returned by this hook should be constant. It 35904 should not depend on anything except the command-line switches 35905 described by OPTS. In particular, the setting 'UI_SJLJ' must be 35906 fixed at compiler start-up as C pre-processor macros and builtin 35907 functions related to exception handling are set up depending on 35908 this setting. 35909 35910 The default implementation of the hook first honors the 35911 '--enable-sjlj-exceptions' configure option, then 35912 'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'. If 35913 'DWARF2_UNWIND_INFO' depends on command-line options, the target 35914 must define this hook so that OPTS is used correctly. 35915 35916 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 35917 This variable should be set to 'true' if the target ABI requires 35918 unwinding tables even when exceptions are not used. It must not be 35919 modified by command-line option processing. 35920 35921 -- Macro: DONT_USE_BUILTIN_SETJMP 35922 Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme 35923 should use the 'setjmp'/'longjmp' functions from the C library 35924 instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery. 35925 35926 -- Macro: JMP_BUF_SIZE 35927 This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also 35928 defined. Define this macro if the default size of 'jmp_buf' buffer 35929 for the 'setjmp'/'longjmp'-based exception handling mechanism is 35930 not large enough, or if it is much too large. The default size is 35931 'FIRST_PSEUDO_REGISTER * sizeof(void *)'. 35932 35933 -- Macro: DWARF_CIE_DATA_ALIGNMENT 35934 This macro need only be defined if the target might save registers 35935 in the function prologue at an offset to the stack pointer that is 35936 not aligned to 'UNITS_PER_WORD'. The definition should be the 35937 negative minimum alignment if 'STACK_GROWS_DOWNWARD' is defined, 35938 and the positive minimum alignment otherwise. *Note SDB and 35939 DWARF::. Only applicable if the target supports DWARF 2 frame 35940 unwind information. 35941 35942 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 35943 Contains the value true if the target should add a zero word onto 35944 the end of a Dwarf-2 frame info section when used for exception 35945 handling. Default value is false if 'EH_FRAME_SECTION_NAME' is 35946 defined, and true otherwise. 35947 35948 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 35949 Given a register, this hook should return a parallel of registers 35950 to represent where to find the register pieces. Define this hook 35951 if the register and its mode are represented in Dwarf in 35952 non-contiguous locations, or if the register should be represented 35953 in more than one register in Dwarf. Otherwise, this hook should 35954 return 'NULL_RTX'. If not defined, the default is to return 35955 'NULL_RTX'. 35956 35957 -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO) 35958 Given a register, this hook should return the mode which the 35959 corresponding Dwarf frame register should have. This is normally 35960 used to return a smaller mode than the raw mode to prevent call 35961 clobbered parts of a register altering the frame register size 35962 35963 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 35964 If some registers are represented in Dwarf-2 unwind information in 35965 multiple pieces, define this hook to fill in information about the 35966 sizes of those pieces in the table used by the unwinder at runtime. 35967 It will be called by 'expand_builtin_init_dwarf_reg_sizes' after 35968 filling in a single size corresponding to each hard register; 35969 ADDRESS is the address of the table. 35970 35971 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 35972 This hook is used to output a reference from a frame unwinding 35973 table to the type_info object identified by SYM. It should return 35974 'true' if the reference was output. Returning 'false' will cause 35975 the reference to be output using the normal Dwarf2 routines. 35976 35977 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 35978 This flag should be set to 'true' on targets that use an ARM EABI 35979 based unwinding library, and 'false' on other targets. This 35980 effects the format of unwinding tables, and how the unwinder in 35981 entered after running a cleanup. The default is 'false'. 35982 35983 35984File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 35985 3598617.20.10 Assembler Commands for Alignment 35987----------------------------------------- 35988 35989This describes commands for alignment. 35990 35991 -- Macro: JUMP_ALIGN (LABEL) 35992 The alignment (log base 2) to put in front of LABEL, which is a 35993 common destination of jumps and has no fallthru incoming edge. 35994 35995 This macro need not be defined if you don't want any special 35996 alignment to be done at such a time. Most machine descriptions do 35997 not currently define the macro. 35998 35999 Unless it's necessary to inspect the LABEL parameter, it is better 36000 to set the variable ALIGN_JUMPS in the target's 36001 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36002 user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation. 36003 36004 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36005 The maximum number of bytes to skip before LABEL when applying 36006 'JUMP_ALIGN'. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is 36007 defined. 36008 36009 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 36010 The alignment (log base 2) to put in front of LABEL, which follows 36011 a 'BARRIER'. 36012 36013 This macro need not be defined if you don't want any special 36014 alignment to be done at such a time. Most machine descriptions do 36015 not currently define the macro. 36016 36017 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 36018 (rtx_insn *LABEL) 36019 The maximum number of bytes to skip before LABEL when applying 36020 'LABEL_ALIGN_AFTER_BARRIER'. This works only if 36021 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36022 36023 -- Macro: LOOP_ALIGN (LABEL) 36024 The alignment (log base 2) to put in front of LABEL that heads a 36025 frequently executed basic block (usually the header of a loop). 36026 36027 This macro need not be defined if you don't want any special 36028 alignment to be done at such a time. Most machine descriptions do 36029 not currently define the macro. 36030 36031 Unless it's necessary to inspect the LABEL parameter, it is better 36032 to set the variable 'align_loops' in the target's 36033 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36034 user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation. 36035 36036 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36037 The maximum number of bytes to skip when applying 'LOOP_ALIGN' to 36038 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36039 36040 -- Macro: LABEL_ALIGN (LABEL) 36041 The alignment (log base 2) to put in front of LABEL. If 36042 'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different 36043 alignment, the maximum of the specified values is used. 36044 36045 Unless it's necessary to inspect the LABEL parameter, it is better 36046 to set the variable 'align_labels' in the target's 36047 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36048 user's selection in 'align_labels' in a 'LABEL_ALIGN' 36049 implementation. 36050 36051 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36052 The maximum number of bytes to skip when applying 'LABEL_ALIGN' to 36053 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36054 36055 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 36056 A C statement to output to the stdio stream STREAM an assembler 36057 instruction to advance the location counter by NBYTES bytes. Those 36058 bytes should be zero when loaded. NBYTES will be a C expression of 36059 type 'unsigned HOST_WIDE_INT'. 36060 36061 -- Macro: ASM_NO_SKIP_IN_TEXT 36062 Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the 36063 text section because it fails to put zeros in the bytes that are 36064 skipped. This is true on many Unix systems, where the pseudo-op to 36065 skip bytes produces no-op instructions rather than zeros when used 36066 in the text section. 36067 36068 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 36069 A C statement to output to the stdio stream STREAM an assembler 36070 command to advance the location counter to a multiple of 2 to the 36071 POWER bytes. POWER will be a C expression of type 'int'. 36072 36073 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 36074 Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 36075 for padding, if necessary. 36076 36077 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 36078 A C statement to output to the stdio stream STREAM an assembler 36079 command to advance the location counter to a multiple of 2 to the 36080 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 36081 satisfy the alignment request. POWER and MAX_SKIP will be a C 36082 expression of type 'int'. 36083 36084 36085File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 36086 3608717.21 Controlling Debugging Information Format 36088============================================== 36089 36090This describes how to specify debugging information. 36091 36092* Menu: 36093 36094* All Debuggers:: Macros that affect all debugging formats uniformly. 36095* DBX Options:: Macros enabling specific options in DBX format. 36096* DBX Hooks:: Hook macros for varying DBX format. 36097* File Names and DBX:: Macros controlling output of file names in DBX format. 36098* SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 36099* VMS Debug:: Macros for VMS debug format. 36100 36101 36102File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 36103 3610417.21.1 Macros Affecting All Debugging Formats 36105---------------------------------------------- 36106 36107These macros affect all debugging formats. 36108 36109 -- Macro: DBX_REGISTER_NUMBER (REGNO) 36110 A C expression that returns the DBX register number for the 36111 compiler register number REGNO. In the default macro provided, the 36112 value of this expression will be REGNO itself. But sometimes there 36113 are some registers that the compiler knows about and DBX does not, 36114 or vice versa. In such cases, some register may need to have one 36115 number in the compiler and another for DBX. 36116 36117 If two registers have consecutive numbers inside GCC, and they can 36118 be used as a pair to hold a multiword value, then they _must_ have 36119 consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'. 36120 Otherwise, debuggers will be unable to access such a pair, because 36121 they expect register pairs to be consecutive in their own numbering 36122 scheme. 36123 36124 If you find yourself defining 'DBX_REGISTER_NUMBER' in way that 36125 does not preserve register pairs, then what you must do instead is 36126 redefine the actual register numbering scheme. 36127 36128 -- Macro: DEBUGGER_AUTO_OFFSET (X) 36129 A C expression that returns the integer offset value for an 36130 automatic variable having address X (an RTL expression). The 36131 default computation assumes that X is based on the frame-pointer 36132 and gives the offset from the frame-pointer. This is required for 36133 targets that produce debugging output for DBX or COFF-style 36134 debugging output for SDB and allow the frame-pointer to be 36135 eliminated when the '-g' options is used. 36136 36137 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 36138 A C expression that returns the integer offset value for an 36139 argument having address X (an RTL expression). The nominal offset 36140 is OFFSET. 36141 36142 -- Macro: PREFERRED_DEBUGGING_TYPE 36143 A C expression that returns the type of debugging output GCC should 36144 produce when the user specifies just '-g'. Define this if you have 36145 arranged for GCC to support more than one format of debugging 36146 output. Currently, the allowable values are 'DBX_DEBUG', 36147 'SDB_DEBUG', 'DWARF_DEBUG', 'DWARF2_DEBUG', 'XCOFF_DEBUG', 36148 'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'. 36149 36150 When the user specifies '-ggdb', GCC normally also uses the value 36151 of this macro to select the debugging output format, but with two 36152 exceptions. If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the 36153 value 'DWARF2_DEBUG'. Otherwise, if 'DBX_DEBUGGING_INFO' is 36154 defined, GCC uses 'DBX_DEBUG'. 36155 36156 The value of this macro only affects the default debugging output; 36157 the user can always get a specific type of output by using 36158 '-gstabs', '-gcoff', '-gdwarf-2', '-gxcoff', or '-gvms'. 36159 36160 36161File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 36162 3616317.21.2 Specific Options for DBX Output 36164--------------------------------------- 36165 36166These are specific options for DBX output. 36167 36168 -- Macro: DBX_DEBUGGING_INFO 36169 Define this macro if GCC should produce debugging output for DBX in 36170 response to the '-g' option. 36171 36172 -- Macro: XCOFF_DEBUGGING_INFO 36173 Define this macro if GCC should produce XCOFF format debugging 36174 output in response to the '-g' option. This is a variant of DBX 36175 format. 36176 36177 -- Macro: DEFAULT_GDB_EXTENSIONS 36178 Define this macro to control whether GCC should by default generate 36179 GDB's extended version of DBX debugging information (assuming 36180 DBX-format debugging information is enabled at all). If you don't 36181 define the macro, the default is 1: always generate the extended 36182 information if there is any occasion to. 36183 36184 -- Macro: DEBUG_SYMS_TEXT 36185 Define this macro if all '.stabs' commands should be output while 36186 in the text section. 36187 36188 -- Macro: ASM_STABS_OP 36189 A C string constant, including spacing, naming the assembler pseudo 36190 op to use instead of '"\t.stabs\t"' to define an ordinary debugging 36191 symbol. If you don't define this macro, '"\t.stabs\t"' is used. 36192 This macro applies only to DBX debugging information format. 36193 36194 -- Macro: ASM_STABD_OP 36195 A C string constant, including spacing, naming the assembler pseudo 36196 op to use instead of '"\t.stabd\t"' to define a debugging symbol 36197 whose value is the current location. If you don't define this 36198 macro, '"\t.stabd\t"' is used. This macro applies only to DBX 36199 debugging information format. 36200 36201 -- Macro: ASM_STABN_OP 36202 A C string constant, including spacing, naming the assembler pseudo 36203 op to use instead of '"\t.stabn\t"' to define a debugging symbol 36204 with no name. If you don't define this macro, '"\t.stabn\t"' is 36205 used. This macro applies only to DBX debugging information format. 36206 36207 -- Macro: DBX_NO_XREFS 36208 Define this macro if DBX on your system does not support the 36209 construct 'xsTAGNAME'. On some systems, this construct is used to 36210 describe a forward reference to a structure named TAGNAME. On 36211 other systems, this construct is not supported at all. 36212 36213 -- Macro: DBX_CONTIN_LENGTH 36214 A symbol name in DBX-format debugging information is normally 36215 continued (split into two separate '.stabs' directives) when it 36216 exceeds a certain length (by default, 80 characters). On some 36217 operating systems, DBX requires this splitting; on others, 36218 splitting must not be done. You can inhibit splitting by defining 36219 this macro with the value zero. You can override the default 36220 splitting-length by defining this macro as an expression for the 36221 length you desire. 36222 36223 -- Macro: DBX_CONTIN_CHAR 36224 Normally continuation is indicated by adding a '\' character to the 36225 end of a '.stabs' string when a continuation follows. To use a 36226 different character instead, define this macro as a character 36227 constant for the character you want to use. Do not define this 36228 macro if backslash is correct for your system. 36229 36230 -- Macro: DBX_STATIC_STAB_DATA_SECTION 36231 Define this macro if it is necessary to go to the data section 36232 before outputting the '.stabs' pseudo-op for a non-global static 36233 variable. 36234 36235 -- Macro: DBX_TYPE_DECL_STABS_CODE 36236 The value to use in the "code" field of the '.stabs' directive for 36237 a typedef. The default is 'N_LSYM'. 36238 36239 -- Macro: DBX_STATIC_CONST_VAR_CODE 36240 The value to use in the "code" field of the '.stabs' directive for 36241 a static variable located in the text section. DBX format does not 36242 provide any "right" way to do this. The default is 'N_FUN'. 36243 36244 -- Macro: DBX_REGPARM_STABS_CODE 36245 The value to use in the "code" field of the '.stabs' directive for 36246 a parameter passed in registers. DBX format does not provide any 36247 "right" way to do this. The default is 'N_RSYM'. 36248 36249 -- Macro: DBX_REGPARM_STABS_LETTER 36250 The letter to use in DBX symbol data to identify a symbol as a 36251 parameter passed in registers. DBX format does not customarily 36252 provide any way to do this. The default is ''P''. 36253 36254 -- Macro: DBX_FUNCTION_FIRST 36255 Define this macro if the DBX information for a function and its 36256 arguments should precede the assembler code for the function. 36257 Normally, in DBX format, the debugging information entirely follows 36258 the assembler code. 36259 36260 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 36261 Define this macro, with value 1, if the value of a symbol 36262 describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be 36263 relative to the start of the enclosing function. Normally, GCC 36264 uses an absolute address. 36265 36266 -- Macro: DBX_LINES_FUNCTION_RELATIVE 36267 Define this macro, with value 1, if the value of a symbol 36268 indicating the current line number ('N_SLINE') should be relative 36269 to the start of the enclosing function. Normally, GCC uses an 36270 absolute address. 36271 36272 -- Macro: DBX_USE_BINCL 36273 Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL' 36274 stabs for included header files, as on Sun systems. This macro 36275 also directs GCC to output a type number as a pair of a file number 36276 and a type number within the file. Normally, GCC does not generate 36277 'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a 36278 type number. 36279 36280 36281File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 36282 3628317.21.3 Open-Ended Hooks for DBX Format 36284--------------------------------------- 36285 36286These are hooks for DBX format. 36287 36288 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 36289 A C statement to output DBX debugging information before code for 36290 line number LINE of the current source file to the stdio stream 36291 STREAM. COUNTER is the number of time the macro was invoked, 36292 including the current invocation; it is intended to generate unique 36293 labels in the assembly output. 36294 36295 This macro should not be defined if the default output is correct, 36296 or if it can be made correct by defining 36297 'DBX_LINES_FUNCTION_RELATIVE'. 36298 36299 -- Macro: NO_DBX_FUNCTION_END 36300 Some stabs encapsulation formats (in particular ECOFF), cannot 36301 handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 36302 extension construct. On those machines, define this macro to turn 36303 this feature off without disturbing the rest of the gdb extensions. 36304 36305 -- Macro: NO_DBX_BNSYM_ENSYM 36306 Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx 36307 extension construct. On those machines, define this macro to turn 36308 this feature off without disturbing the rest of the gdb extensions. 36309 36310 36311File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 36312 3631317.21.4 File Names in DBX Format 36314-------------------------------- 36315 36316This describes file names in DBX format. 36317 36318 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 36319 A C statement to output DBX debugging information to the stdio 36320 stream STREAM, which indicates that file NAME is the main source 36321 file--the file specified as the input file for compilation. This 36322 macro is called only once, at the beginning of compilation. 36323 36324 This macro need not be defined if the standard form of output for 36325 DBX debugging information is appropriate. 36326 36327 It may be necessary to refer to a label equal to the beginning of 36328 the text section. You can use 'assemble_name (stream, 36329 ltext_label_name)' to do so. If you do this, you must also set the 36330 variable USED_LTEXT_LABEL_NAME to 'true'. 36331 36332 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 36333 Define this macro, with value 1, if GCC should not emit an 36334 indication of the current directory for compilation and current 36335 source language at the beginning of the file. 36336 36337 -- Macro: NO_DBX_GCC_MARKER 36338 Define this macro, with value 1, if GCC should not emit an 36339 indication that this object file was compiled by GCC. The default 36340 is to emit an 'N_OPT' stab at the beginning of every source file, 36341 with 'gcc2_compiled.' for the string and value 0. 36342 36343 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 36344 A C statement to output DBX debugging information at the end of 36345 compilation of the main source file NAME. Output should be written 36346 to the stdio stream STREAM. 36347 36348 If you don't define this macro, nothing special is output at the 36349 end of compilation, which is correct for most machines. 36350 36351 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 36352 Define this macro _instead of_ defining 36353 'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 36354 the end of compilation is an 'N_SO' stab with an empty string, 36355 whose value is the highest absolute text address in the file. 36356 36357 36358File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 36359 3636017.21.5 Macros for SDB and DWARF Output 36361--------------------------------------- 36362 36363Here are macros for SDB and DWARF output. 36364 36365 -- Macro: SDB_DEBUGGING_INFO 36366 Define this macro if GCC should produce COFF-style debugging output 36367 for SDB in response to the '-g' option. 36368 36369 -- Macro: DWARF2_DEBUGGING_INFO 36370 Define this macro if GCC should produce dwarf version 2 format 36371 debugging output in response to the '-g' option. 36372 36373 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 36374 FUNCTION) 36375 Define this to enable the dwarf attribute 36376 'DW_AT_calling_convention' to be emitted for each function. 36377 Instead of an integer return the enum value for the 'DW_CC_' 36378 tag. 36379 36380 To support optional call frame debugging information, you must also 36381 define 'INCOMING_RETURN_ADDR_RTX' and either set 36382 'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 36383 prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as 36384 appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 36385 36386 -- Macro: DWARF2_FRAME_INFO 36387 Define this macro to a nonzero value if GCC should always output 36388 Dwarf 2 frame information. If 'TARGET_EXCEPT_UNWIND_INFO' (*note 36389 Exception Region Output::) returns 'UI_DWARF2', and exceptions are 36390 enabled, GCC will output this information not matter how you define 36391 'DWARF2_FRAME_INFO'. 36392 36393 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void) 36394 This hook defines the mechanism that will be used for describing 36395 frame unwind information to the debugger. Normally the hook will 36396 return 'UI_DWARF2' if DWARF 2 debug information is enabled, and 36397 return 'UI_NONE' otherwise. 36398 36399 A target may return 'UI_DWARF2' even when DWARF 2 debug information 36400 is disabled in order to always output DWARF 2 frame information. 36401 36402 A target may return 'UI_TARGET' if it has ABI specified unwind 36403 tables. This will suppress generation of the normal debug frame 36404 unwind information. 36405 36406 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 36407 Define this macro to be a nonzero value if the assembler can 36408 generate Dwarf 2 line debug info sections. This will result in 36409 much more compact line number tables, and hence is desirable if it 36410 works. 36411 36412 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS 36413 True if the '.debug_pubtypes' and '.debug_pubnames' sections should 36414 be emitted. These sections are not used on most platforms, and in 36415 particular GDB does not use them. 36416 36417 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR 36418 True if the 'DW_AT_comp_dir' attribute should be emitted for each 36419 compilation unit. This attribute is required for the darwin linker 36420 to emit debug information. 36421 36422 -- Target Hook: bool TARGET_DELAY_SCHED2 36423 True if sched2 is not to be run at its normal place. This usually 36424 means it will be run as part of machine-specific reorg. 36425 36426 -- Target Hook: bool TARGET_DELAY_VARTRACK 36427 True if vartrack is not to be run at its normal place. This 36428 usually means it will be run as part of machine-specific reorg. 36429 36430 -- Target Hook: bool TARGET_NO_REGISTER_ALLOCATION 36431 True if register allocation and the passes following it should not 36432 be run. Usually true only for virtual assembler targets. 36433 36434 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 36435 A C statement to issue assembly directives that create a difference 36436 LAB1 minus LAB2, using an integer of the given SIZE. 36437 36438 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2) 36439 A C statement to issue assembly directives that create a difference 36440 between the two given labels in system defined units, e.g. 36441 instruction slots on IA64 VMS, using an integer of the given size. 36442 36443 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 36444 A C statement to issue assembly directives that create a 36445 section-relative reference to the given LABEL, using an integer of 36446 the given SIZE. The label is known to be defined in the given 36447 SECTION. 36448 36449 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 36450 A C statement to issue assembly directives that create a 36451 self-relative reference to the given LABEL, using an integer of the 36452 given SIZE. 36453 36454 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 36455 A C statement to issue assembly directives that create a reference 36456 to the DWARF table identifier LABEL from the current section. This 36457 is used on some systems to avoid garbage collecting a DWARF table 36458 which is referenced by a function. 36459 36460 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 36461 SIZE, rtx X) 36462 If defined, this target hook is a function which outputs a 36463 DTP-relative reference to the given TLS symbol of the specified 36464 size. 36465 36466 -- Macro: PUT_SDB_... 36467 Define these macros to override the assembler syntax for the 36468 special SDB assembler directives. See 'sdbout.c' for a list of 36469 these macros and their arguments. If the standard syntax is used, 36470 you need not define them yourself. 36471 36472 -- Macro: SDB_DELIM 36473 Some assemblers do not support a semicolon as a delimiter, even 36474 between SDB assembler directives. In that case, define this macro 36475 to be the delimiter to use (usually '\n'). It is not necessary to 36476 define a new set of 'PUT_SDB_OP' macros if this is the only change 36477 required. 36478 36479 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 36480 Define this macro to allow references to unknown structure, union, 36481 or enumeration tags to be emitted. Standard COFF does not allow 36482 handling of unknown references, MIPS ECOFF has support for it. 36483 36484 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 36485 Define this macro to allow references to structure, union, or 36486 enumeration tags that have not yet been seen to be handled. Some 36487 assemblers choke if forward tags are used, while some require it. 36488 36489 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 36490 A C statement to output SDB debugging information before code for 36491 line number LINE of the current source file to the stdio stream 36492 STREAM. The default is to emit an '.ln' directive. 36493 36494 36495File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 36496 3649717.21.6 Macros for VMS Debug Format 36498----------------------------------- 36499 36500Here are macros for VMS debug format. 36501 36502 -- Macro: VMS_DEBUGGING_INFO 36503 Define this macro if GCC should produce debugging output for VMS in 36504 response to the '-g' option. The default behavior for VMS is to 36505 generate minimal debug info for a traceback in the absence of '-g' 36506 unless explicitly overridden with '-g0'. This behavior is 36507 controlled by 'TARGET_OPTION_OPTIMIZATION' and 36508 'TARGET_OPTION_OVERRIDE'. 36509 36510 36511File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 36512 3651317.22 Cross Compilation and Floating Point 36514========================================== 36515 36516While all modern machines use twos-complement representation for 36517integers, there are a variety of representations for floating point 36518numbers. This means that in a cross-compiler the representation of 36519floating point numbers in the compiled program may be different from 36520that used in the machine doing the compilation. 36521 36522 Because different representation systems may offer different amounts of 36523range and precision, all floating point constants must be represented in 36524the target machine's format. Therefore, the cross compiler cannot 36525safely use the host machine's floating point arithmetic; it must emulate 36526the target's arithmetic. To ensure consistency, GCC always uses 36527emulation to work with floating point values, even when the host and 36528target floating point formats are identical. 36529 36530 The following macros are provided by 'real.h' for the compiler to use. 36531All parts of the compiler which generate or optimize floating-point 36532calculations must use these macros. They may evaluate their operands 36533more than once, so operands must not have side effects. 36534 36535 -- Macro: REAL_VALUE_TYPE 36536 The C data type to be used to hold a floating point value in the 36537 target machine's format. Typically this is a 'struct' containing 36538 an array of 'HOST_WIDE_INT', but all code should treat it as an 36539 opaque quantity. 36540 36541 -- Macro: int REAL_VALUES_EQUAL (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 36542 Compares for equality the two values, X and Y. If the target 36543 floating point format supports negative zeroes and/or NaNs, 36544 'REAL_VALUES_EQUAL (-0.0, 0.0)' is true, and 'REAL_VALUES_EQUAL 36545 (NaN, NaN)' is false. 36546 36547 -- Macro: int REAL_VALUES_LESS (REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 36548 Tests whether X is less than Y. 36549 36550 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 36551 Truncates X to a signed integer, rounding toward zero. 36552 36553 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 36554 (REAL_VALUE_TYPE X) 36555 Truncates X to an unsigned integer, rounding toward zero. If X is 36556 negative, returns zero. 36557 36558 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, 36559 machine_mode MODE) 36560 Converts STRING into a floating point number in the target 36561 machine's representation for mode MODE. This routine can handle 36562 both decimal and hexadecimal floating point constants, using the 36563 syntax defined by the C language for both. 36564 36565 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 36566 Returns 1 if X is negative (including negative zero), 0 otherwise. 36567 36568 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 36569 Determines whether X represents infinity (positive or negative). 36570 36571 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 36572 Determines whether X represents a "NaN" (not-a-number). 36573 36574 -- Macro: void REAL_ARITHMETIC (REAL_VALUE_TYPE OUTPUT, enum tree_code 36575 CODE, REAL_VALUE_TYPE X, REAL_VALUE_TYPE Y) 36576 Calculates an arithmetic operation on the two floating point values 36577 X and Y, storing the result in OUTPUT (which must be a variable). 36578 36579 The operation to be performed is specified by CODE. Only the 36580 following codes are supported: 'PLUS_EXPR', 'MINUS_EXPR', 36581 'MULT_EXPR', 'RDIV_EXPR', 'MAX_EXPR', 'MIN_EXPR'. 36582 36583 If 'REAL_ARITHMETIC' is asked to evaluate division by zero and the 36584 target's floating point format cannot represent infinity, it will 36585 call 'abort'. Callers should check for this situation first, using 36586 'MODE_HAS_INFINITIES'. *Note Storage Layout::. 36587 36588 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 36589 Returns the negative of the floating point value X. 36590 36591 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 36592 Returns the absolute value of X. 36593 36594 36595File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 36596 3659717.23 Mode Switching Instructions 36598================================= 36599 36600The following macros control mode switching optimizations: 36601 36602 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 36603 Define this macro if the port needs extra instructions inserted for 36604 mode switching in an optimizing compilation. 36605 36606 For an example, the SH4 can perform both single and double 36607 precision floating point operations, but to perform a single 36608 precision operation, the FPSCR PR bit has to be cleared, while for 36609 a double precision operation, this bit has to be set. Changing the 36610 PR bit requires a general purpose register as a scratch register, 36611 hence these FPSCR sets have to be inserted before reload, i.e. you 36612 can't put this into instruction emitting or 36613 'TARGET_MACHINE_DEPENDENT_REORG'. 36614 36615 You can have multiple entities that are mode-switched, and select 36616 at run time which entities actually need it. 36617 'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that 36618 needs mode-switching. If you define this macro, you also have to 36619 define 'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED', 36620 'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'. 36621 'TARGET_MODE_AFTER', 'TARGET_MODE_ENTRY', and 'TARGET_MODE_EXIT' 36622 are optional. 36623 36624 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 36625 If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as 36626 initializer for an array of integers. Each initializer element N 36627 refers to an entity that needs mode switching, and specifies the 36628 number of different modes that might need to be set for this 36629 entity. The position of the initializer in the 36630 initializer--starting counting at zero--determines the integer that 36631 is used to refer to the mode-switched entity in question. In 36632 macros that take mode arguments / yield a mode result, modes are 36633 represented as numbers 0 ... N - 1. N is used to specify that no 36634 mode switch is needed / supplied. 36635 36636 -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int 36637 PREV_MODE, HARD_REG_SET REGS_LIVE) 36638 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE is 36639 the set of hard registers live at the point where the insn(s) are 36640 to be inserted. PREV_MOXDE indicates the mode to switch from. 36641 Sets of a lower numbered entity will be emitted before sets of a 36642 higher numbered entity to a mode of the same or lower priority. 36643 36644 -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN) 36645 ENTITY is an integer specifying a mode-switched entity. If 36646 'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 36647 return an integer value not larger than the corresponding element 36648 in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 36649 must be switched into prior to the execution of INSN. 36650 36651 -- Target Hook: int TARGET_MODE_AFTER (int ENTITY, int MODE, rtx_insn 36652 *INSN) 36653 ENTITY is an integer specifying a mode-switched entity. If this 36654 macro is defined, it is evaluated for every INSN during mode 36655 switching. It determines the mode that an insn results in (if 36656 different from the incoming mode). 36657 36658 -- Target Hook: int TARGET_MODE_ENTRY (int ENTITY) 36659 If this macro is defined, it is evaluated for every ENTITY that 36660 needs mode switching. It should evaluate to an integer, which is a 36661 mode that ENTITY is assumed to be switched to at function entry. 36662 If 'TARGET_MODE_ENTRY' is defined then 'TARGET_MODE_EXIT' must be 36663 defined. 36664 36665 -- Target Hook: int TARGET_MODE_EXIT (int ENTITY) 36666 If this macro is defined, it is evaluated for every ENTITY that 36667 needs mode switching. It should evaluate to an integer, which is a 36668 mode that ENTITY is assumed to be switched to at function exit. If 36669 'TARGET_MODE_EXIT' is defined then 'TARGET_MODE_ENTRY' must be 36670 defined. 36671 36672 -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N) 36673 This macro specifies the order in which modes for ENTITY are 36674 processed. 0 is the highest priority, 36675 'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 36676 of the macro should be an integer designating a mode for ENTITY. 36677 For any fixed ENTITY, 'mode_priority' (ENTITY, N) shall be a 36678 bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'. 36679 36680 36681File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 36682 3668317.24 Defining target-specific uses of '__attribute__' 36684====================================================== 36685 36686Target-specific attributes may be defined for functions, data and types. 36687These are described using the following target hooks; they also need to 36688be documented in 'extend.texi'. 36689 36690 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 36691 If defined, this target hook points to an array of 'struct 36692 attribute_spec' (defined in 'tree.h') specifying the machine 36693 specific attributes for this target and some of the restrictions on 36694 the entities to which these attributes are applied and the 36695 arguments they take. 36696 36697 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree 36698 NAME) 36699 If defined, this target hook is a function which returns true if 36700 the machine-specific attribute named NAME expects an identifier 36701 given as its first argument to be passed on as a plain identifier, 36702 not subjected to name lookup. If this is not defined, the default 36703 is false for all machine-specific attributes. 36704 36705 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 36706 const_tree TYPE2) 36707 If defined, this target hook is a function which returns zero if 36708 the attributes on TYPE1 and TYPE2 are incompatible, one if they are 36709 compatible, and two if they are nearly compatible (which causes a 36710 warning to be generated). If this is not defined, machine-specific 36711 attributes are supposed always to be compatible. 36712 36713 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 36714 If defined, this target hook is a function which assigns default 36715 attributes to the newly defined TYPE. 36716 36717 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 36718 TYPE2) 36719 Define this target hook if the merging of type attributes needs 36720 special handling. If defined, the result is a list of the combined 36721 'TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 36722 'comptypes' has already been called and returned 1. This function 36723 may call 'merge_attributes' to handle machine-independent merging. 36724 36725 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 36726 NEWDECL) 36727 Define this target hook if the merging of decl attributes needs 36728 special handling. If defined, the result is a list of the combined 36729 'DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 36730 declaration of OLDDECL. Examples of when this is needed are when 36731 one attribute overrides another, or when an attribute is nullified 36732 by a subsequent definition. This function may call 36733 'merge_attributes' to handle machine-independent merging. 36734 36735 If the only target-specific handling you require is 'dllimport' for 36736 Microsoft Windows targets, you should define the macro 36737 'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'. The compiler will then 36738 define a function called 'merge_dllimport_decl_attributes' which 36739 can then be defined as the expansion of 36740 'TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 36741 'handle_dll_attribute' in the attribute table for your port to 36742 perform initial processing of the 'dllimport' and 'dllexport' 36743 attributes. This is done in 'i386/cygwin.h' and 'i386/i386.c', for 36744 example. 36745 36746 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 36747 DECL) 36748 DECL is a variable or function with '__attribute__((dllimport))' 36749 specified. Use this hook if the target needs to add extra 36750 validation checks to 'handle_dll_attribute'. 36751 36752 -- Macro: TARGET_DECLSPEC 36753 Define this macro to a nonzero value if you want to treat 36754 '__declspec(X)' as equivalent to '__attribute((X))'. By default, 36755 this behavior is enabled only for targets that define 36756 'TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 36757 '__declspec' is via a built-in macro, but you should not rely on 36758 this implementation detail. 36759 36760 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 36761 *ATTR_PTR) 36762 Define this target hook if you want to be able to add attributes to 36763 a decl when it is being created. This is normally useful for back 36764 ends which wish to implement a pragma by using the attributes which 36765 correspond to the pragma's effect. The NODE argument is the decl 36766 which is being created. The ATTR_PTR argument is a pointer to the 36767 attribute list for this decl. The list itself should not be 36768 modified, since it may be shared with other decls, but attributes 36769 may be chained on the head of the list and '*ATTR_PTR' modified to 36770 point to the new attributes, or a copy of the list may be made if 36771 further changes are needed. 36772 36773 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 36774 FNDECL) 36775 This target hook returns 'true' if it is OK to inline FNDECL into 36776 the current function, despite its having target-specific 36777 attributes, 'false' otherwise. By default, if a function has a 36778 target specific attribute attached to it, it will not be inlined. 36779 36780 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree 36781 NAME, tree ARGS, int FLAGS) 36782 This hook is called to parse 'attribute(target("..."))', which 36783 allows setting target-specific options on individual functions. 36784 These function-specific options may differ from the options 36785 specified on the command line. The hook should return 'true' if 36786 the options are valid. 36787 36788 The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in 36789 the function declaration to hold a pointer to a target-specific 36790 'struct cl_target_option' structure. 36791 36792 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR, 36793 struct gcc_options *OPTS) 36794 This hook is called to save any additional target-specific 36795 information in the 'struct cl_target_option' structure for 36796 function-specific options from the 'struct gcc_options' structure. 36797 *Note Option file format::. 36798 36799 -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS, 36800 struct cl_target_option *PTR) 36801 This hook is called to restore any additional target-specific 36802 information in the 'struct cl_target_option' structure for 36803 function-specific options to the 'struct gcc_options' structure. 36804 36805 -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct 36806 cl_target_option *PTR) 36807 This hook is called to update target-specific information in the 36808 'struct cl_target_option' structure after it is streamed in from 36809 LTO bytecode. 36810 36811 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 36812 struct cl_target_option *PTR) 36813 This hook is called to print any additional target-specific 36814 information in the 'struct cl_target_option' structure for 36815 function-specific options. 36816 36817 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree 36818 POP_TARGET) 36819 This target hook parses the options for '#pragma GCC target', which 36820 sets the target-specific options for functions that occur later in 36821 the input stream. The options accepted should be the same as those 36822 handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook. 36823 36824 -- Target Hook: void TARGET_OPTION_OVERRIDE (void) 36825 Sometimes certain combinations of command options do not make sense 36826 on a particular target machine. You can override the hook 36827 'TARGET_OPTION_OVERRIDE' to take account of this. This hooks is 36828 called once just after all the command options have been parsed. 36829 36830 Don't use this hook to turn on various extra optimizations for 36831 '-O'. That is what 'TARGET_OPTION_OPTIMIZATION' is for. 36832 36833 If you need to do something whenever the optimization level is 36834 changed via the optimize attribute or pragma, see 36835 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 36836 36837 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree 36838 DECL2) 36839 This target hook returns 'true' if DECL1 and DECL2 are versions of 36840 the same function. DECL1 and DECL2 are function versions if and 36841 only if they have the same function signature and different target 36842 specific attributes, that is, they are compiled for different 36843 target machines. 36844 36845 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 36846 This target hook returns 'false' if the CALLER function cannot 36847 inline CALLEE, based on target specific information. By default, 36848 inlining is not allowed if the callee function has function 36849 specific target options and the caller does not use the same 36850 options. 36851 36852 36853File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 36854 3685517.25 Emulating TLS 36856=================== 36857 36858For targets whose psABI does not provide Thread Local Storage via 36859specific relocations and instruction sequences, an emulation layer is 36860used. A set of target hooks allows this emulation layer to be 36861configured for the requirements of a particular target. For instance 36862the psABI may in fact specify TLS support in terms of an emulation 36863layer. 36864 36865 The emulation layer works by creating a control object for every TLS 36866object. To access the TLS object, a lookup function is provided which, 36867when given the address of the control object, will return the address of 36868the current thread's instance of the TLS object. 36869 36870 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 36871 Contains the name of the helper function that uses a TLS control 36872 object to locate a TLS instance. The default causes libgcc's 36873 emulated TLS helper function to be used. 36874 36875 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 36876 Contains the name of the helper function that should be used at 36877 program startup to register TLS objects that are implicitly 36878 initialized to zero. If this is 'NULL', all TLS objects will have 36879 explicit initializers. The default causes libgcc's emulated TLS 36880 registration function to be used. 36881 36882 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 36883 Contains the name of the section in which TLS control variables 36884 should be placed. The default of 'NULL' allows these to be placed 36885 in any section. 36886 36887 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 36888 Contains the name of the section in which TLS initializers should 36889 be placed. The default of 'NULL' allows these to be placed in any 36890 section. 36891 36892 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 36893 Contains the prefix to be prepended to TLS control variable names. 36894 The default of 'NULL' uses a target-specific prefix. 36895 36896 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 36897 Contains the prefix to be prepended to TLS initializer objects. 36898 The default of 'NULL' uses a target-specific prefix. 36899 36900 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 36901 Specifies a function that generates the FIELD_DECLs for a TLS 36902 control object type. TYPE is the RECORD_TYPE the fields are for 36903 and NAME should be filled with the structure tag, if the default of 36904 '__emutls_object' is unsuitable. The default creates a type 36905 suitable for libgcc's emulated TLS function. 36906 36907 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 36908 TMPL_ADDR) 36909 Specifies a function that generates the CONSTRUCTOR to initialize a 36910 TLS control object. VAR is the TLS control object, DECL is the TLS 36911 object and TMPL_ADDR is the address of the initializer. The 36912 default initializes libgcc's emulated TLS control object. 36913 36914 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 36915 Specifies whether the alignment of TLS control variable objects is 36916 fixed and should not be increased as some backends may do to 36917 optimize single objects. The default is false. 36918 36919 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 36920 Specifies whether a DWARF 'DW_OP_form_tls_address' location 36921 descriptor may be used to describe emulated TLS control objects. 36922 36923 36924File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 36925 3692617.26 Defining coprocessor specifics for MIPS targets. 36927====================================================== 36928 36929The MIPS specification allows MIPS implementations to have as many as 4 36930coprocessors, each with as many as 32 private registers. GCC supports 36931accessing these registers and transferring values between the registers 36932and memory using asm-ized variables. For example: 36933 36934 register unsigned int cp0count asm ("c0r1"); 36935 unsigned int d; 36936 36937 d = cp0count + 3; 36938 36939 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 36940names may be added as described below, or the default names may be 36941overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 36942 36943 Coprocessor registers are assumed to be epilogue-used; sets to them 36944will be preserved even if it does not appear that the register is used 36945again later in the function. 36946 36947 Another note: according to the MIPS spec, coprocessor 1 (if present) is 36948the FPU. One accesses COP1 registers through standard mips 36949floating-point support; they are not included in this mechanism. 36950 36951 36952File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 36953 3695417.27 Parameters for Precompiled Header Validity Checking 36955========================================================= 36956 36957 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 36958 This hook returns a pointer to the data needed by 36959 'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in 36960 bytes. 36961 36962 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 36963 size_t SZ) 36964 This hook checks whether the options used to create a PCH file are 36965 compatible with the current settings. It returns 'NULL' if so and 36966 a suitable error message if not. Error messages will be presented 36967 to the user and must be localized using '_(MSG)'. 36968 36969 DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY' 36970 when the PCH file was created and SZ is the size of that data in 36971 bytes. It's safe to assume that the data was created by the same 36972 version of the compiler, so no format checking is needed. 36973 36974 The default definition of 'default_pch_valid_p' should be suitable 36975 for most targets. 36976 36977 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 36978 PCH_FLAGS) 36979 If this hook is nonnull, the default implementation of 36980 'TARGET_PCH_VALID_P' will use it to check for compatible values of 36981 'target_flags'. PCH_FLAGS specifies the value that 'target_flags' 36982 had when the PCH file was created. The return value is the same as 36983 for 'TARGET_PCH_VALID_P'. 36984 36985 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void) 36986 Called before writing out a PCH file. If the target has some 36987 garbage-collected data that needs to be in a particular state on 36988 PCH loads, it can use this hook to enforce that state. Very few 36989 targets need to do anything here. 36990 36991 36992File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros 36993 3699417.28 C++ ABI parameters 36995======================== 36996 36997 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 36998 Define this hook to override the integer type used for guard 36999 variables. These are used to implement one-time construction of 37000 static objects. The default is long_long_integer_type_node. 37001 37002 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 37003 This hook determines how guard variables are used. It should 37004 return 'false' (the default) if the first byte should be used. A 37005 return value of 'true' indicates that only the least significant 37006 bit should be used. 37007 37008 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 37009 This hook returns the size of the cookie to use when allocating an 37010 array whose elements have the indicated TYPE. Assumes that it is 37011 already known that a cookie is needed. The default is 'max(sizeof 37012 (size_t), alignof(type))', as defined in section 2.7 of the 37013 IA64/Generic C++ ABI. 37014 37015 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 37016 This hook should return 'true' if the element size should be stored 37017 in array cookies. The default is to return 'false'. 37018 37019 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 37020 IMPORT_EXPORT) 37021 If defined by a backend this hook allows the decision made to 37022 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 37023 contain 1 if the class is going to be exported, -1 if it is going 37024 to be imported and 0 otherwise. This function should return the 37025 modified value and perform any other actions necessary to support 37026 the backend's targeted operating system. 37027 37028 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 37029 This hook should return 'true' if constructors and destructors 37030 return the address of the object created/destroyed. The default is 37031 to return 'false'. 37032 37033 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 37034 This hook returns true if the key method for a class (i.e., the 37035 method which, if defined in the current translation unit, causes 37036 the virtual table to be emitted) may be an inline function. Under 37037 the standard Itanium C++ ABI the key method may be an inline 37038 function so long as the function is not declared inline in the 37039 class definition. Under some variants of the ABI, an inline 37040 function can never be the key method. The default is to return 37041 'true'. 37042 37043 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 37044 DECL) 37045 DECL is a virtual table, virtual table table, typeinfo object, or 37046 other similar implicit class data object that will be emitted with 37047 external linkage in this translation unit. No ELF visibility has 37048 been explicitly specified. If the target needs to specify a 37049 visibility other than that of the containing class, use this hook 37050 to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'. 37051 37052 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 37053 This hook returns true (the default) if virtual tables and other 37054 similar implicit class data objects are always COMDAT if they have 37055 external linkage. If this hook returns false, then class data for 37056 classes whose virtual table will be emitted in only one translation 37057 unit will not be COMDAT. 37058 37059 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 37060 This hook returns true (the default) if the RTTI information for 37061 the basic types which is defined in the C++ runtime should always 37062 be COMDAT, false if it should not be COMDAT. 37063 37064 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 37065 This hook returns true if '__aeabi_atexit' (as defined by the ARM 37066 EABI) should be used to register static destructors when 37067 '-fuse-cxa-atexit' is in effect. The default is to return false to 37068 use '__cxa_atexit'. 37069 37070 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 37071 This hook returns true if the target 'atexit' function can be used 37072 in the same manner as '__cxa_atexit' to register C++ static 37073 destructors. This requires that 'atexit'-registered functions in 37074 shared libraries are run in the correct order when the libraries 37075 are unloaded. The default is to return false. 37076 37077 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 37078 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just 37079 been defined. Use this hook to make adjustments to the class (eg, 37080 tweak visibility or perform any other required target 37081 modifications). 37082 37083 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL) 37084 Return target-specific mangling context of DECL or 'NULL_TREE'. 37085 37086 37087File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros 37088 3708917.29 Adding support for named address spaces 37090============================================= 37091 37092The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 37093committee, 'Programming Languages - C - Extensions to support embedded 37094processors', specifies a syntax for embedded processors to specify 37095alternate address spaces. You can configure a GCC port to support 37096section 5.1 of the draft report to add support for address spaces other 37097than the default address space. These address spaces are new keywords 37098that are similar to the 'volatile' and 'const' type attributes. 37099 37100 Pointers to named address spaces can have a different size than 37101pointers to the generic address space. 37102 37103 For example, the SPU port uses the '__ea' address space to refer to 37104memory in the host processor, rather than memory local to the SPU 37105processor. Access to memory in the '__ea' address space involves 37106issuing DMA operations to move data between the host processor and the 37107local processor memory address space. Pointers in the '__ea' address 37108space are either 32 bits or 64 bits based on the '-mea32' or '-mea64' 37109switches (native SPU pointers are always 32 bits). 37110 37111 Internally, address spaces are represented as a small integer in the 37112range 0 to 15 with address space 0 being reserved for the generic 37113address space. 37114 37115 To register a named address space qualifier keyword with the C front 37116end, the target may call the 'c_register_addr_space' routine. For 37117example, the SPU port uses the following to declare '__ea' as the 37118keyword for named address space #1: 37119 #define ADDR_SPACE_EA 1 37120 c_register_addr_space ("__ea", ADDR_SPACE_EA); 37121 37122 -- Target Hook: machine_mode TARGET_ADDR_SPACE_POINTER_MODE 37123 (addr_space_t ADDRESS_SPACE) 37124 Define this to return the machine mode to use for pointers to 37125 ADDRESS_SPACE if the target supports named address spaces. The 37126 default version of this hook returns 'ptr_mode' for the generic 37127 address space only. 37128 37129 -- Target Hook: machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE 37130 (addr_space_t ADDRESS_SPACE) 37131 Define this to return the machine mode to use for addresses in 37132 ADDRESS_SPACE if the target supports named address spaces. The 37133 default version of this hook returns 'Pmode' for the generic 37134 address space only. 37135 37136 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (machine_mode 37137 MODE, addr_space_t AS) 37138 Define this to return nonzero if the port can handle pointers with 37139 machine mode MODE to address space AS. This target hook is the 37140 same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it 37141 includes explicit named address space support. The default version 37142 of this hook returns true for the modes returned by either the 37143 'TARGET_ADDR_SPACE_POINTER_MODE' or 37144 'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address 37145 space. 37146 37147 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P 37148 (machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 37149 Define this to return true if EXP is a valid address for mode MODE 37150 in the named address space AS. The STRICT parameter says whether 37151 strict addressing is in effect after reload has finished. This 37152 target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target 37153 hook, except that it includes explicit named address space support. 37154 37155 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 37156 OLDX, machine_mode MODE, addr_space_t AS) 37157 Define this to modify an invalid address X to be a valid address 37158 with mode MODE in the named address space AS. This target hook is 37159 the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except 37160 that it includes explicit named address space support. 37161 37162 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET, 37163 addr_space_t SUPERSET) 37164 Define this to return whether the SUBSET named address space is 37165 contained within the SUPERSET named address space. Pointers to a 37166 named address space that is a subset of another named address space 37167 will be converted automatically without a cast if used together in 37168 arithmetic operations. Pointers to a superset address space can be 37169 converted to pointers to a subset address space via explicit casts. 37170 37171 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 37172 tree TO_TYPE) 37173 Define this to convert the pointer expression represented by the 37174 RTL OP with type FROM_TYPE that points to a named address space to 37175 a new pointer expression with type TO_TYPE that points to a 37176 different named address space. When this hook it called, it is 37177 guaranteed that one of the two address spaces is a subset of the 37178 other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target 37179 hook. 37180 37181 37182File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 37183 3718417.30 Miscellaneous Parameters 37185============================== 37186 37187Here are several miscellaneous parameters. 37188 37189 -- Macro: HAS_LONG_COND_BRANCH 37190 Define this boolean macro to indicate whether or not your 37191 architecture has conditional branches that can span all of memory. 37192 It is used in conjunction with an optimization that partitions hot 37193 and cold basic blocks into separate sections of the executable. If 37194 this macro is set to false, gcc will convert any conditional 37195 branches that attempt to cross between sections into unconditional 37196 branches or indirect jumps. 37197 37198 -- Macro: HAS_LONG_UNCOND_BRANCH 37199 Define this boolean macro to indicate whether or not your 37200 architecture has unconditional branches that can span all of 37201 memory. It is used in conjunction with an optimization that 37202 partitions hot and cold basic blocks into separate sections of the 37203 executable. If this macro is set to false, gcc will convert any 37204 unconditional branches that attempt to cross between sections into 37205 indirect jumps. 37206 37207 -- Macro: CASE_VECTOR_MODE 37208 An alias for a machine mode name. This is the machine mode that 37209 elements of a jump-table should have. 37210 37211 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 37212 Optional: return the preferred mode for an 'addr_diff_vec' when the 37213 minimum and maximum offset are known. If you define this, it 37214 enables extra code in branch shortening to deal with 37215 'addr_diff_vec'. To make this work, you also have to define 37216 'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit. 37217 The BODY argument is provided so that the offset_unsigned and scale 37218 flags can be updated. 37219 37220 -- Macro: CASE_VECTOR_PC_RELATIVE 37221 Define this macro to be a C expression to indicate when jump-tables 37222 should contain relative addresses. You need not define this macro 37223 if jump-tables never contain relative addresses, or jump-tables 37224 should contain relative addresses only when '-fPIC' or '-fPIC' is 37225 in effect. 37226 37227 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 37228 This function return the smallest number of different values for 37229 which it is best to use a jump-table instead of a tree of 37230 conditional branches. The default is four for machines with a 37231 'casesi' instruction and five otherwise. This is best for most 37232 machines. 37233 37234 -- Macro: WORD_REGISTER_OPERATIONS 37235 Define this macro if operations between registers with integral 37236 mode smaller than a word are always performed on the entire 37237 register. Most RISC machines have this property and most CISC 37238 machines do not. 37239 37240 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 37241 Define this macro to be a C expression indicating when insns that 37242 read memory in MEM_MODE, an integral mode narrower than a word, set 37243 the bits outside of MEM_MODE to be either the sign-extension or the 37244 zero-extension of the data read. Return 'SIGN_EXTEND' for values 37245 of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for 37246 which it zero-extends, and 'UNKNOWN' for other modes. 37247 37248 This macro is not called with MEM_MODE non-integral or with a width 37249 greater than or equal to 'BITS_PER_WORD', so you may return any 37250 value in this case. Do not define this macro if it would always 37251 return 'UNKNOWN'. On machines where this macro is defined, you 37252 will normally define it as the constant 'SIGN_EXTEND' or 37253 'ZERO_EXTEND'. 37254 37255 You may return a non-'UNKNOWN' value even if for some hard 37256 registers the sign extension is not performed, if for the 37257 'REGNO_REG_CLASS' of these hard registers 37258 'CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 37259 MEM_MODE and the TO mode is any integral mode larger than this but 37260 not larger than 'word_mode'. 37261 37262 You must return 'UNKNOWN' if for some hard registers that allow 37263 this mode, 'CANNOT_CHANGE_MODE_CLASS' says that they cannot change 37264 to 'word_mode', but that they can change to another integral mode 37265 that is larger then MEM_MODE but still smaller than 'word_mode'. 37266 37267 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 37268 Define this macro if loading short immediate values into registers 37269 sign extends. 37270 37271 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL 37272 (machine_mode MODE) 37273 When '-ffast-math' is in effect, GCC tries to optimize divisions by 37274 the same divisor, by turning them into multiplications by the 37275 reciprocal. This target hook specifies the minimum number of 37276 divisions that should be there for GCC to perform the optimization 37277 for a variable of mode MODE. The default implementation returns 3 37278 if the machine has an instruction for the division, and 2 if it 37279 does not. 37280 37281 -- Macro: MOVE_MAX 37282 The maximum number of bytes that a single instruction can move 37283 quickly between memory and registers or between two memory 37284 locations. 37285 37286 -- Macro: MAX_MOVE_MAX 37287 The maximum number of bytes that a single instruction can move 37288 quickly between memory and registers or between two memory 37289 locations. If this is undefined, the default is 'MOVE_MAX'. 37290 Otherwise, it is the constant value that is the largest value that 37291 'MOVE_MAX' can have at run-time. 37292 37293 -- Macro: SHIFT_COUNT_TRUNCATED 37294 A C expression that is nonzero if on this machine the number of 37295 bits actually used for the count of a shift operation is equal to 37296 the number of bits needed to represent the size of the object being 37297 shifted. When this macro is nonzero, the compiler will assume that 37298 it is safe to omit a sign-extend, zero-extend, and certain bitwise 37299 'and' instructions that truncates the count of a shift operation. 37300 On machines that have instructions that act on bit-fields at 37301 variable positions, which may include 'bit test' instructions, a 37302 nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of 37303 truncations of the values that serve as arguments to bit-field 37304 instructions. 37305 37306 If both types of instructions truncate the count (for shifts) and 37307 position (for bit-field operations), or if no variable-position 37308 bit-field instructions exist, you should define this macro. 37309 37310 However, on some machines, such as the 80386 and the 680x0, 37311 truncation only applies to shift operations and not the (real or 37312 pretended) bit-field operations. Define 'SHIFT_COUNT_TRUNCATED' to 37313 be zero on such machines. Instead, add patterns to the 'md' file 37314 that include the implied truncation of the shift instructions. 37315 37316 You need not define this macro if it would always have the value of 37317 zero. 37318 37319 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 37320 (machine_mode MODE) 37321 This function describes how the standard shift patterns for MODE 37322 deal with shifts by negative amounts or by more than the width of 37323 the mode. *Note shift patterns::. 37324 37325 On many machines, the shift patterns will apply a mask M to the 37326 shift count, meaning that a fixed-width shift of X by Y is 37327 equivalent to an arbitrary-width shift of X by Y & M. If this is 37328 true for mode MODE, the function should return M, otherwise it 37329 should return 0. A return value of 0 indicates that no particular 37330 behavior is guaranteed. 37331 37332 Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_ 37333 apply to general shift rtxes; it applies only to instructions that 37334 are generated by the named shift patterns. 37335 37336 The default implementation of this function returns 37337 'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0 37338 otherwise. This definition is always safe, but if 37339 'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 37340 nevertheless truncate the shift count, you may get better code by 37341 overriding it. 37342 37343 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 37344 A C expression which is nonzero if on this machine it is safe to 37345 "convert" an integer of INPREC bits to one of OUTPREC bits (where 37346 OUTPREC is smaller than INPREC) by merely operating on it as if it 37347 had only OUTPREC bits. 37348 37349 On many machines, this expression can be 1. 37350 37351 When 'TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 37352 modes for which 'MODES_TIEABLE_P' is 0, suboptimal code can result. 37353 If this is the case, making 'TRULY_NOOP_TRUNCATION' return 0 in 37354 such cases may improve things. 37355 37356 -- Target Hook: int TARGET_MODE_REP_EXTENDED (machine_mode MODE, 37357 machine_mode REP_MODE) 37358 The representation of an integral mode can be such that the values 37359 are always extended to a wider integral mode. Return 'SIGN_EXTEND' 37360 if values of MODE are represented in sign-extended form to 37361 REP_MODE. Return 'UNKNOWN' otherwise. (Currently, none of the 37362 targets use zero-extended representation this way so unlike 37363 'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return 37364 either 'SIGN_EXTEND' or 'UNKNOWN'. Also no target extends MODE to 37365 REP_MODE so that REP_MODE is not the next widest integral mode and 37366 currently we take advantage of this fact.) 37367 37368 Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value 37369 even if the extension is not performed on certain hard registers as 37370 long as for the 'REGNO_REG_CLASS' of these hard registers 37371 'CANNOT_CHANGE_MODE_CLASS' returns nonzero. 37372 37373 Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe 37374 two related properties. If you define 'TARGET_MODE_REP_EXTENDED 37375 (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP 37376 (mode)' to return the same type of extension. 37377 37378 In order to enforce the representation of 'mode', 37379 'TRULY_NOOP_TRUNCATION' should return false when truncating to 37380 'mode'. 37381 37382 -- Macro: STORE_FLAG_VALUE 37383 A C expression describing the value returned by a comparison 37384 operator with an integral mode and stored by a store-flag 37385 instruction ('cstoreMODE4') when the condition is true. This 37386 description must apply to _all_ the 'cstoreMODE4' patterns and all 37387 the comparison operators whose results have a 'MODE_INT' mode. 37388 37389 A value of 1 or -1 means that the instruction implementing the 37390 comparison operator returns exactly 1 or -1 when the comparison is 37391 true and 0 when the comparison is false. Otherwise, the value 37392 indicates which bits of the result are guaranteed to be 1 when the 37393 comparison is true. This value is interpreted in the mode of the 37394 comparison operation, which is given by the mode of the first 37395 operand in the 'cstoreMODE4' pattern. Either the low bit or the 37396 sign bit of 'STORE_FLAG_VALUE' be on. Presently, only those bits 37397 are used by the compiler. 37398 37399 If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 37400 generate code that depends only on the specified bits. It can also 37401 replace comparison operators with equivalent operations if they 37402 cause the required bits to be set, even if the remaining bits are 37403 undefined. For example, on a machine whose comparison operators 37404 return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as 37405 '0x80000000', saying that just the sign bit is relevant, the 37406 expression 37407 37408 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 37409 37410 can be converted to 37411 37412 (ashift:SI X (const_int N)) 37413 37414 where N is the appropriate shift count to move the bit being tested 37415 into the sign bit. 37416 37417 There is no way to describe a machine that always sets the 37418 low-order bit for a true value, but does not guarantee the value of 37419 any other bits, but we do not know of any machine that has such an 37420 instruction. If you are trying to port GCC to such a machine, 37421 include an instruction to perform a logical-and of the result with 37422 1 in the pattern for the comparison operators and let us know at 37423 <gcc@gcc.gnu.org>. 37424 37425 Often, a machine will have multiple instructions that obtain a 37426 value from a comparison (or the condition codes). Here are rules 37427 to guide the choice of value for 'STORE_FLAG_VALUE', and hence the 37428 instructions to be used: 37429 37430 * Use the shortest sequence that yields a valid definition for 37431 'STORE_FLAG_VALUE'. It is more efficient for the compiler to 37432 "normalize" the value (convert it to, e.g., 1 or 0) than for 37433 the comparison operators to do so because there may be 37434 opportunities to combine the normalization with other 37435 operations. 37436 37437 * For equal-length sequences, use a value of 1 or -1, with -1 37438 being slightly preferred on machines with expensive jumps and 37439 1 preferred on other machines. 37440 37441 * As a second choice, choose a value of '0x80000001' if 37442 instructions exist that set both the sign and low-order bits 37443 but do not define the others. 37444 37445 * Otherwise, use a value of '0x80000000'. 37446 37447 Many machines can produce both the value chosen for 37448 'STORE_FLAG_VALUE' and its negation in the same number of 37449 instructions. On those machines, you should also define a pattern 37450 for those cases, e.g., one matching 37451 37452 (set A (neg:M (ne:M B C))) 37453 37454 Some machines can also perform 'and' or 'plus' operations on 37455 condition code values with less instructions than the corresponding 37456 'cstoreMODE4' insn followed by 'and' or 'plus'. On those machines, 37457 define the appropriate patterns. Use the names 'incscc' and 37458 'decscc', respectively, for the patterns which perform 'plus' or 37459 'minus' operations on condition code values. See 'rs6000.md' for 37460 some examples. The GNU Superoptimizer can be used to find such 37461 instruction sequences on other machines. 37462 37463 If this macro is not defined, the default value, 1, is used. You 37464 need not define 'STORE_FLAG_VALUE' if the machine has no store-flag 37465 instructions, or if the value generated by these instructions is 1. 37466 37467 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 37468 A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is 37469 returned when comparison operators with floating-point results are 37470 true. Define this macro on machines that have comparison 37471 operations that return floating-point values. If there are no such 37472 operations, do not define this macro. 37473 37474 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 37475 A C expression that gives a rtx representing the nonzero true 37476 element for vector comparisons. The returned rtx should be valid 37477 for the inner mode of MODE which is guaranteed to be a vector mode. 37478 Define this macro on machines that have vector comparison 37479 operations that return a vector result. If there are no such 37480 operations, do not define this macro. Typically, this macro is 37481 defined as 'const1_rtx' or 'constm1_rtx'. This macro may return 37482 'NULL_RTX' to prevent the compiler optimizing such vector 37483 comparison operations for the given mode. 37484 37485 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 37486 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 37487 A C expression that indicates whether the architecture defines a 37488 value for 'clz' or 'ctz' with a zero operand. A result of '0' 37489 indicates the value is undefined. If the value is defined for only 37490 the RTL expression, the macro should evaluate to '1'; if the value 37491 applies also to the corresponding optab entry (which is normally 37492 the case if it expands directly into the corresponding RTL), then 37493 the macro should evaluate to '2'. In the cases where the value is 37494 defined, VALUE should be set to this value. 37495 37496 If this macro is not defined, the value of 'clz' or 'ctz' at zero 37497 is assumed to be undefined. 37498 37499 This macro must be defined if the target's expansion for 'ffs' 37500 relies on a particular value to get correct results. Otherwise it 37501 is not necessary, though it may be used to optimize some corner 37502 cases, and to provide a default expansion for the 'ffs' optab. 37503 37504 Note that regardless of this macro the "definedness" of 'clz' and 37505 'ctz' at zero do _not_ extend to the builtin functions visible to 37506 the user. Thus one may be free to adjust the value at will to 37507 match the target expansion of these operations without fear of 37508 breaking the API. 37509 37510 -- Macro: Pmode 37511 An alias for the machine mode for pointers. On most machines, 37512 define this to be the integer mode corresponding to the width of a 37513 hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit 37514 machines. On some machines you must define this to be one of the 37515 partial integer modes, such as 'PSImode'. 37516 37517 The width of 'Pmode' must be at least as large as the value of 37518 'POINTER_SIZE'. If it is not equal, you must define the macro 37519 'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 37520 'Pmode'. 37521 37522 -- Macro: FUNCTION_MODE 37523 An alias for the machine mode used for memory references to 37524 functions being called, in 'call' RTL expressions. On most CISC 37525 machines, where an instruction can begin at any byte address, this 37526 should be 'QImode'. On most RISC machines, where all instructions 37527 have fixed size and alignment, this should be a mode with the same 37528 size and alignment as the machine instruction words - typically 37529 'SImode' or 'HImode'. 37530 37531 -- Macro: STDC_0_IN_SYSTEM_HEADERS 37532 In normal operation, the preprocessor expands '__STDC__' to the 37533 constant 1, to signify that GCC conforms to ISO Standard C. On 37534 some hosts, like Solaris, the system compiler uses a different 37535 convention, where '__STDC__' is normally 0, but is 1 if the user 37536 specifies strict conformance to the C Standard. 37537 37538 Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 37539 convention when processing system header files, but when processing 37540 user files '__STDC__' will always expand to 1. 37541 37542 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void) 37543 Define this hook to return the name of a header file to be included 37544 at the start of all compilations, as if it had been included with 37545 '#include <FILE>'. If this hook returns 'NULL', or is not defined, 37546 or the header is not found, or if the user specifies 37547 '-ffreestanding' or '-nostdinc', no header is included. 37548 37549 This hook can be used together with a header provided by the system 37550 C library to implement ISO C requirements for certain macros to be 37551 predefined that describe properties of the whole implementation 37552 rather than just the compiler. 37553 37554 -- C Target Hook: bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*) 37555 Define this hook to add target-specific C++ implicit extern C 37556 functions. If this function returns true for the name of a 37557 file-scope function, that function implicitly gets extern "C" 37558 linkage rather than whatever language linkage the declaration would 37559 normally have. An example of such function is WinMain on Win32 37560 targets. 37561 37562 -- Macro: NO_IMPLICIT_EXTERN_C 37563 Define this macro if the system header files support C++ as well as 37564 C. This macro inhibits the usual method of using system header 37565 files in C++, which is to pretend that the file's contents are 37566 enclosed in 'extern "C" {...}'. 37567 37568 -- Macro: REGISTER_TARGET_PRAGMAS () 37569 Define this macro if you want to implement any target-specific 37570 pragmas. If defined, it is a C expression which makes a series of 37571 calls to 'c_register_pragma' or 'c_register_pragma_with_expansion' 37572 for each pragma. The macro may also do any setup required for the 37573 pragmas. 37574 37575 The primary reason to define this macro is to provide compatibility 37576 with other compilers for the same target. In general, we 37577 discourage definition of target-specific pragmas for GCC. 37578 37579 If the pragma can be implemented by attributes then you should 37580 consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as 37581 well. 37582 37583 Preprocessor macros that appear on pragma lines are not expanded. 37584 All '#pragma' directives that do not match any registered pragma 37585 are silently ignored, unless the user specifies 37586 '-Wunknown-pragmas'. 37587 37588 -- Function: void c_register_pragma (const char *SPACE, const char 37589 *NAME, void (*CALLBACK) (struct cpp_reader *)) 37590 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 37591 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 37592 37593 Each call to 'c_register_pragma' or 37594 'c_register_pragma_with_expansion' establishes one pragma. The 37595 CALLBACK routine will be called when the preprocessor encounters a 37596 pragma of the form 37597 37598 #pragma [SPACE] NAME ... 37599 37600 SPACE is the case-sensitive namespace of the pragma, or 'NULL' to 37601 put the pragma in the global namespace. The callback routine 37602 receives PFILE as its first argument, which can be passed on to 37603 cpplib's functions if necessary. You can lex tokens after the NAME 37604 by calling 'pragma_lex'. Tokens that are not read by the callback 37605 will be silently ignored. The end of the line is indicated by a 37606 token of type 'CPP_EOF'. Macro expansion occurs on the arguments 37607 of pragmas registered with 'c_register_pragma_with_expansion' but 37608 not on the arguments of pragmas registered with 37609 'c_register_pragma'. 37610 37611 Note that the use of 'pragma_lex' is specific to the C and C++ 37612 compilers. It will not work in the Java or Fortran compilers, or 37613 any other language compilers for that matter. Thus if 'pragma_lex' 37614 is going to be called from target-specific code, it must only be 37615 done so when building the C and C++ compilers. This can be done by 37616 defining the variables 'c_target_objs' and 'cxx_target_objs' in the 37617 target entry in the 'config.gcc' file. These variables should name 37618 the target-specific, language-specific object file which contains 37619 the code that uses 'pragma_lex'. Note it will also be necessary to 37620 add a rule to the makefile fragment pointed to by 'tmake_file' that 37621 shows how to build this object file. 37622 37623 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 37624 Define this macro if macros should be expanded in the arguments of 37625 '#pragma pack'. 37626 37627 -- Macro: TARGET_DEFAULT_PACK_STRUCT 37628 If your target requires a structure packing default other than 0 37629 (meaning the machine default), define this macro to the necessary 37630 value (in bytes). This must be a value that would also be valid to 37631 use with '#pragma pack()' (that is, a small power of two). 37632 37633 -- Macro: DOLLARS_IN_IDENTIFIERS 37634 Define this macro to control use of the character '$' in identifier 37635 names for the C family of languages. 0 means '$' is not allowed by 37636 default; 1 means it is allowed. 1 is the default; there is no need 37637 to define this macro in that case. 37638 37639 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 37640 Define this macro as a C expression that is nonzero if it is safe 37641 for the delay slot scheduler to place instructions in the delay 37642 slot of INSN, even if they appear to use a resource set or 37643 clobbered in INSN. INSN is always a 'jump_insn' or an 'insn'; GCC 37644 knows that every 'call_insn' has this behavior. On machines where 37645 some 'insn' or 'jump_insn' is really a function call and hence has 37646 this behavior, you should define this macro. 37647 37648 You need not define this macro if it would always return zero. 37649 37650 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 37651 Define this macro as a C expression that is nonzero if it is safe 37652 for the delay slot scheduler to place instructions in the delay 37653 slot of INSN, even if they appear to set or clobber a resource 37654 referenced in INSN. INSN is always a 'jump_insn' or an 'insn'. On 37655 machines where some 'insn' or 'jump_insn' is really a function call 37656 and its operands are registers whose use is actually in the 37657 subroutine it calls, you should define this macro. Doing so allows 37658 the delay slot scheduler to move instructions which copy arguments 37659 into the argument registers into the delay slot of INSN. 37660 37661 You need not define this macro if it would always return zero. 37662 37663 -- Macro: MULTIPLE_SYMBOL_SPACES 37664 Define this macro as a C expression that is nonzero if, in some 37665 cases, global symbols from one translation unit may not be bound to 37666 undefined symbols in another translation unit without user 37667 intervention. For instance, under Microsoft Windows symbols must 37668 be explicitly imported from shared libraries (DLLs). 37669 37670 You need not define this macro if it would always evaluate to zero. 37671 37672 -- Target Hook: tree TARGET_MD_ASM_CLOBBERS (tree OUTPUTS, tree INPUTS, 37673 tree CLOBBERS) 37674 This target hook should add to CLOBBERS 'STRING_CST' trees for any 37675 hard regs the port wishes to automatically clobber for an asm. It 37676 should return the result of the last 'tree_cons' used to add a 37677 clobber. The OUTPUTS, INPUTS and CLOBBER lists are the 37678 corresponding parameters to the asm and may be inspected to avoid 37679 clobbering a register that is an input or output of the asm. You 37680 can use 'tree_overlaps_hard_reg_set', declared in 'tree.h', to test 37681 for overlap with regards to asm-declared registers. 37682 37683 -- Macro: MATH_LIBRARY 37684 Define this macro as a C string constant for the linker argument to 37685 link in the system math library, minus the initial '"-l"', or '""' 37686 if the target does not have a separate math library. 37687 37688 You need only define this macro if the default of '"m"' is wrong. 37689 37690 -- Macro: LIBRARY_PATH_ENV 37691 Define this macro as a C string constant for the environment 37692 variable that specifies where the linker should look for libraries. 37693 37694 You need only define this macro if the default of '"LIBRARY_PATH"' 37695 is wrong. 37696 37697 -- Macro: TARGET_POSIX_IO 37698 Define this macro if the target supports the following POSIX file 37699 functions, access, mkdir and file locking with fcntl / F_SETLKW. 37700 Defining 'TARGET_POSIX_IO' will enable the test coverage code to 37701 use file locking when exiting a program, which avoids race 37702 conditions if the program has forked. It will also create 37703 directories at run-time for cross-profiling. 37704 37705 -- Macro: MAX_CONDITIONAL_EXECUTE 37706 37707 A C expression for the maximum number of instructions to execute 37708 via conditional execution instructions instead of a branch. A 37709 value of 'BRANCH_COST'+1 is the default if the machine does not use 37710 cc0, and 1 if it does use cc0. 37711 37712 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 37713 Used if the target needs to perform machine-dependent modifications 37714 on the conditionals used for turning basic blocks into 37715 conditionally executed code. CE_INFO points to a data structure, 37716 'struct ce_if_block', which contains information about the 37717 currently processed blocks. TRUE_EXPR and FALSE_EXPR are the tests 37718 that are used for converting the then-block and the else-block, 37719 respectively. Set either TRUE_EXPR or FALSE_EXPR to a null pointer 37720 if the tests cannot be converted. 37721 37722 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 37723 FALSE_EXPR) 37724 Like 'IFCVT_MODIFY_TESTS', but used when converting more 37725 complicated if-statements into conditions combined by 'and' and 37726 'or' operations. BB contains the basic block that contains the 37727 test that is currently being processed and about to be turned into 37728 a condition. 37729 37730 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 37731 A C expression to modify the PATTERN of an INSN that is to be 37732 converted to conditional execution format. CE_INFO points to a 37733 data structure, 'struct ce_if_block', which contains information 37734 about the currently processed blocks. 37735 37736 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 37737 A C expression to perform any final machine dependent modifications 37738 in converting code to conditional execution. The involved basic 37739 blocks can be found in the 'struct ce_if_block' structure that is 37740 pointed to by CE_INFO. 37741 37742 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 37743 A C expression to cancel any machine dependent modifications in 37744 converting code to conditional execution. The involved basic 37745 blocks can be found in the 'struct ce_if_block' structure that is 37746 pointed to by CE_INFO. 37747 37748 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO) 37749 A C expression to initialize any machine specific data for 37750 if-conversion of the if-block in the 'struct ce_if_block' structure 37751 that is pointed to by CE_INFO. 37752 37753 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 37754 If non-null, this hook performs a target-specific pass over the 37755 instruction stream. The compiler will run it at all optimization 37756 levels, just before the point at which it normally does 37757 delayed-branch scheduling. 37758 37759 The exact purpose of the hook varies from target to target. Some 37760 use it to do transformations that are necessary for correctness, 37761 such as laying out in-function constant pools or avoiding hardware 37762 hazards. Others use it as an opportunity to do some 37763 machine-dependent optimizations. 37764 37765 You need not implement the hook if it has nothing to do. The 37766 default definition is null. 37767 37768 -- Target Hook: void TARGET_INIT_BUILTINS (void) 37769 Define this hook if you have any machine-specific built-in 37770 functions that need to be defined. It should be a function that 37771 performs the necessary setup. 37772 37773 Machine specific built-in functions can be useful to expand special 37774 machine instructions that would otherwise not normally be generated 37775 because they have no equivalent in the source language (for 37776 example, SIMD vector instructions or prefetch instructions). 37777 37778 To create a built-in function, call the function 37779 'lang_hooks.builtin_function' which is defined by the language 37780 front end. You can use any type nodes set up by 37781 'build_common_tree_nodes'; only language front ends that use those 37782 two functions will call 'TARGET_INIT_BUILTINS'. 37783 37784 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 37785 INITIALIZE_P) 37786 Define this hook if you have any machine-specific built-in 37787 functions that need to be defined. It should be a function that 37788 returns the builtin function declaration for the builtin function 37789 code CODE. If there is no such builtin and it cannot be 37790 initialized at this time if INITIALIZE_P is true the function 37791 should return 'NULL_TREE'. If CODE is out of range the function 37792 should return 'error_mark_node'. 37793 37794 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 37795 SUBTARGET, machine_mode MODE, int IGNORE) 37796 37797 Expand a call to a machine specific built-in function that was set 37798 up by 'TARGET_INIT_BUILTINS'. EXP is the expression for the 37799 function call; the result should go to TARGET if that is 37800 convenient, and have mode MODE if that is convenient. SUBTARGET 37801 may be used as the target for computing one of EXP's operands. 37802 IGNORE is nonzero if the value is to be ignored. This function 37803 should return the result of the call to the built-in function. 37804 37805 -- Target Hook: tree TARGET_BUILTIN_CHKP_FUNCTION (unsigned FCODE) 37806 This hook allows target to redefine built-in functions used by 37807 Pointer Bounds Checker for code instrumentation. Hook should 37808 return fndecl of function implementing generic builtin whose code 37809 is passed in FCODE. Currently following built-in functions are 37810 obtained using this hook: 37811 -- Built-in Function: __bounds_type __chkp_bndmk (const void *LB, 37812 size_t SIZE) 37813 Function code - BUILT_IN_CHKP_BNDMK. This built-in function is 37814 used by Pointer Bounds Checker to create bound values. LB 37815 holds low bound of the resulting bounds. SIZE holds size of 37816 created bounds. 37817 37818 -- Built-in Function: void __chkp_bndstx (const void *PTR, 37819 __bounds_type B, const void **LOC) 37820 Function code - 'BUILT_IN_CHKP_BNDSTX'. This built-in 37821 function is used by Pointer Bounds Checker to store bounds B 37822 for pointer PTR when PTR is stored by address LOC. 37823 37824 -- Built-in Function: __bounds_type __chkp_bndldx (const void 37825 **LOC, const void *PTR) 37826 Function code - 'BUILT_IN_CHKP_BNDLDX'. This built-in 37827 function is used by Pointer Bounds Checker to get bounds of 37828 pointer PTR loaded by address LOC. 37829 37830 -- Built-in Function: void __chkp_bndcl (const void *PTR, 37831 __bounds_type B) 37832 Function code - 'BUILT_IN_CHKP_BNDCL'. This built-in function 37833 is used by Pointer Bounds Checker to perform check for pointer 37834 PTR against lower bound of bounds B. 37835 37836 -- Built-in Function: void __chkp_bndcu (const void *PTR, 37837 __bounds_type B) 37838 Function code - 'BUILT_IN_CHKP_BNDCU'. This built-in function 37839 is used by Pointer Bounds Checker to perform check for pointer 37840 PTR against upper bound of bounds B. 37841 37842 -- Built-in Function: __bounds_type __chkp_bndret (void *PTR) 37843 Function code - 'BUILT_IN_CHKP_BNDRET'. This built-in 37844 function is used by Pointer Bounds Checker to obtain bounds 37845 returned by a call statement. PTR passed to built-in is 37846 'SSA_NAME' returned by the call. 37847 37848 -- Built-in Function: __bounds_type __chkp_intersect 37849 (__bounds_type B1, __bounds_type B2) 37850 Function code - 'BUILT_IN_CHKP_INTERSECT'. This built-in 37851 function returns intersection of bounds B1 and B2. 37852 37853 -- Built-in Function: __bounds_type __chkp_narrow (const void 37854 *PTR, __bounds_type B, size_t S) 37855 Function code - 'BUILT_IN_CHKP_NARROW'. This built-in 37856 function returns intersection of bounds B and [PTR, PTR + S - 37857 '1']. 37858 37859 -- Built-in Function: size_t __chkp_sizeof (const void *PTR) 37860 Function code - 'BUILT_IN_CHKP_SIZEOF'. This built-in 37861 function returns size of object referenced by PTR. PTR is 37862 always 'ADDR_EXPR' of 'VAR_DECL'. This built-in is used by 37863 Pointer Bounds Checker when bounds of object cannot be 37864 computed statically (e.g. object has incomplete type). 37865 37866 -- Built-in Function: const void *__chkp_extract_lower 37867 (__bounds_type B) 37868 Function code - 'BUILT_IN_CHKP_EXTRACT_LOWER'. This built-in 37869 function returns lower bound of bounds B. 37870 37871 -- Built-in Function: const void *__chkp_extract_upper 37872 (__bounds_type B) 37873 Function code - 'BUILT_IN_CHKP_EXTRACT_UPPER'. This built-in 37874 function returns upper bound of bounds B. 37875 -- Target Hook: tree TARGET_CHKP_BOUND_TYPE (void) 37876 Return type to be used for bounds 37877 -- Target Hook: enum machine_mode TARGET_CHKP_BOUND_MODE (void) 37878 Return mode to be used for bounds. 37879 -- Target Hook: tree TARGET_CHKP_MAKE_BOUNDS_CONSTANT (HOST_WIDE_INT 37880 LB, HOST_WIDE_INT UB) 37881 Return constant used to statically initialize constant bounds with 37882 specified lower bound LB and upper bounds UB. 37883 -- Target Hook: int TARGET_CHKP_INITIALIZE_BOUNDS (tree VAR, tree LB, 37884 tree UB, tree *STMTS) 37885 Generate a list of statements STMTS to initialize pointer bounds 37886 variable VAR with bounds LB and UB. Return the number of generated 37887 statements. 37888 37889 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 37890 LOC, tree FNDECL, void *ARGLIST) 37891 Select a replacement for a machine specific built-in function that 37892 was set up by 'TARGET_INIT_BUILTINS'. This is done _before_ 37893 regular type checking, and so allows the target to implement a 37894 crude form of function overloading. FNDECL is the declaration of 37895 the built-in function. ARGLIST is the list of arguments passed to 37896 the built-in function. The result is a complete expression that 37897 implements the operation, usually another 'CALL_EXPR'. ARGLIST 37898 really has type 'VEC(tree,gc)*' 37899 37900 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree 37901 *ARGP, bool IGNORE) 37902 Fold a call to a machine specific built-in function that was set up 37903 by 'TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 37904 built-in function. N_ARGS is the number of arguments passed to the 37905 function; the arguments themselves are pointed to by ARGP. The 37906 result is another tree, valid for both GIMPLE and GENERIC, 37907 containing a simplified expression for the call's result. If 37908 IGNORE is true the value will be ignored. 37909 37910 -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator 37911 *GSI) 37912 Fold a call to a machine specific built-in function that was set up 37913 by 'TARGET_INIT_BUILTINS'. GSI points to the gimple statement 37914 holding the function call. Returns true if any change was made to 37915 the GIMPLE stream. 37916 37917 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree 37918 DECL2) 37919 This hook is used to compare the target attributes in two functions 37920 to determine which function's features get higher priority. This 37921 is used during function multi-versioning to figure out the order in 37922 which two versions must be dispatched. A function version with a 37923 higher priority is checked for dispatching earlier. DECL1 and 37924 DECL2 are the two function decls that will be compared. 37925 37926 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void 37927 *DECL) 37928 This hook is used to get the dispatcher function for a set of 37929 function versions. The dispatcher function is called to invoke the 37930 right function version at run-time. DECL is one version from a set 37931 of semantically identical versions. 37932 37933 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void 37934 *ARG) 37935 This hook is used to generate the dispatcher logic to invoke the 37936 right function version at run-time for a given set of function 37937 versions. ARG points to the callgraph node of the dispatcher 37938 function whose body must be generated. 37939 37940 -- Target Hook: bool TARGET_CAN_USE_DOLOOP_P (const widest_int 37941 &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int 37942 LOOP_DEPTH, bool ENTERED_AT_TOP) 37943 Return true if it is possible to use low-overhead loops 37944 ('doloop_end' and 'doloop_begin') for a particular loop. 37945 ITERATIONS gives the exact number of iterations, or 0 if not known. 37946 ITERATIONS_MAX gives the maximum number of iterations, or 0 if not 37947 known. LOOP_DEPTH is the nesting depth of the loop, with 1 for 37948 innermost loops, 2 for loops that contain innermost loops, and so 37949 on. ENTERED_AT_TOP is true if the loop is only entered from the 37950 top. 37951 37952 This hook is only used if 'doloop_end' is available. The default 37953 implementation returns true. You can use 37954 'can_use_doloop_if_innermost' if the loop must be the innermost, 37955 and if there are no other restrictions. 37956 37957 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const 37958 rtx_insn *INSN) 37959 37960 Take an instruction in INSN and return NULL if it is valid within a 37961 low-overhead loop, otherwise return a string explaining why doloop 37962 could not be applied. 37963 37964 Many targets use special registers for low-overhead looping. For 37965 any instruction that clobbers these this function should return a 37966 string indicating the reason why the doloop could not be applied. 37967 By default, the RTL loop optimizer does not use a present doloop 37968 pattern for loops containing function calls or branch on table 37969 instructions. 37970 37971 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN) 37972 Take an instruction in INSN and return 'false' if the instruction 37973 is not appropriate as a combination of two or more instructions. 37974 The default is to accept all instructions. 37975 37976 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *FOLLOWER, 37977 const rtx_insn *FOLLOWEE) 37978 FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if 37979 FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. 37980 For example, on some targets, certain kinds of branches can't be 37981 made to follow through a hot/cold partitioning. 37982 37983 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 37984 This target hook returns 'true' if X is considered to be 37985 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 37986 PA doesn't consider PLUS to be commutative inside a MEM. 37987 OUTER_CODE is the rtx code of the enclosing rtl, if known, 37988 otherwise it is UNKNOWN. 37989 37990 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 37991 37992 When the initial value of a hard register has been copied in a 37993 pseudo register, it is often not necessary to actually allocate 37994 another register to this pseudo register, because the original hard 37995 register or a stack slot it has been saved into can be used. 37996 'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 37997 allocation once for each hard register that had its initial value 37998 copied by using 'get_func_hard_reg_initial_val' or 37999 'get_hard_reg_initial_val'. Possible values are 'NULL_RTX', if you 38000 don't want to do any special allocation, a 'REG' rtx--that would 38001 typically be the hard register itself, if it is known not to be 38002 clobbered--or a 'MEM'. If you are returning a 'MEM', this is only 38003 a hint for the allocator; it might decide to use another register 38004 anyways. You may use 'current_function_is_leaf' or 'REG_N_SETS' in 38005 the hook to determine if the hard register in question will not be 38006 clobbered. The default value of this hook is 'NULL', which 38007 disables any special allocation. 38008 38009 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 38010 FLAGS) 38011 This target hook returns nonzero if X, an 'unspec' or 38012 'unspec_volatile' operation, might cause a trap. Targets can use 38013 this hook to enhance precision of analysis for 'unspec' and 38014 'unspec_volatile' operations. You may call 'may_trap_p_1' to 38015 analyze inner elements of X in which case FLAGS should be passed 38016 along. 38017 38018 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 38019 The compiler invokes this hook whenever it changes its current 38020 function context ('cfun'). You can define this function if the 38021 back end needs to perform any initialization or reset actions on a 38022 per-function basis. For example, it may be used to implement 38023 function attributes that affect register usage or code generation 38024 patterns. The argument DECL is the declaration for the new 38025 function context, and may be null to indicate that the compiler has 38026 left a function context and is returning to processing at the top 38027 level. The default hook function does nothing. 38028 38029 GCC sets 'cfun' to a dummy function context during initialization 38030 of some parts of the back end. The hook function is not invoked in 38031 this situation; you need not worry about the hook being invoked 38032 recursively, or when the back end is in a partially-initialized 38033 state. 'cfun' might be 'NULL' to indicate processing at top level, 38034 outside of any function scope. 38035 38036 -- Macro: TARGET_OBJECT_SUFFIX 38037 Define this macro to be a C string representing the suffix for 38038 object files on your target machine. If you do not define this 38039 macro, GCC will use '.o' as the suffix for object files. 38040 38041 -- Macro: TARGET_EXECUTABLE_SUFFIX 38042 Define this macro to be a C string representing the suffix to be 38043 automatically added to executable files on your target machine. If 38044 you do not define this macro, GCC will use the null string as the 38045 suffix for executable files. 38046 38047 -- Macro: COLLECT_EXPORT_LIST 38048 If defined, 'collect2' will scan the individual object files 38049 specified on its command line and create an export list for the 38050 linker. Define this macro for systems like AIX, where the linker 38051 discards object files that are not referenced from 'main' and uses 38052 export lists. 38053 38054 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 38055 Define this macro to a C expression representing a variant of the 38056 method call MDECL, if Java Native Interface (JNI) methods must be 38057 invoked differently from other methods on your target. For 38058 example, on 32-bit Microsoft Windows, JNI methods must be invoked 38059 using the 'stdcall' calling convention and this macro is then 38060 defined as this expression: 38061 38062 build_type_attribute_variant (MDECL, 38063 build_tree_list 38064 (get_identifier ("stdcall"), 38065 NULL)) 38066 38067 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 38068 This target hook returns 'true' past the point in which new jump 38069 instructions could be created. On machines that require a register 38070 for every jump such as the SHmedia ISA of SH5, this point would 38071 typically be reload, so this target hook should be defined to a 38072 function such as: 38073 38074 static bool 38075 cannot_modify_jumps_past_reload_p () 38076 { 38077 return (reload_completed || reload_in_progress); 38078 } 38079 38080 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void) 38081 This target hook returns a register class for which branch target 38082 register optimizations should be applied. All registers in this 38083 class should be usable interchangeably. After reload, registers in 38084 this class will be re-allocated and loads will be hoisted out of 38085 loops and be subjected to inter-block scheduling. 38086 38087 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 38088 AFTER_PROLOGUE_EPILOGUE_GEN) 38089 Branch target register optimization will by default exclude 38090 callee-saved registers that are not already live during the current 38091 function; if this target hook returns true, they will be included. 38092 The target code must than make sure that all target registers in 38093 the class returned by 'TARGET_BRANCH_TARGET_REGISTER_CLASS' that 38094 might need saving are saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates 38095 if prologues and epilogues have already been generated. Note, even 38096 if you only return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, 38097 you still are likely to have to make special provisions in 38098 'INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 38099 target registers. 38100 38101 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 38102 This target hook returns true if the target supports conditional 38103 execution. This target hook is required only when the target has 38104 several different modes and they have different conditional 38105 execution capability, such as ARM. 38106 38107 -- Target Hook: rtx TARGET_GEN_CCMP_FIRST (rtx *PREP_SEQ, rtx *GEN_SEQ, 38108 int CODE, tree OP0, tree OP1) 38109 This function prepares to emit a comparison insn for the first 38110 compare in a sequence of conditional comparisions. It returns a 38111 appropriate 'CC' for passing to 'gen_ccmp_next' or 'cbranch_optab'. 38112 The insns to prepare the compare are saved in PREP_SEQ and the 38113 compare insns are saved in GEN_SEQ. They will be emitted when all 38114 the compares in the the conditional comparision are generated 38115 without error. CODE is the 'rtx_code' of the compare for OP0 and 38116 OP1. 38117 38118 -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx *PREP_SEQ, rtx *GEN_SEQ, 38119 rtx PREV, int CMP_CODE, tree OP0, tree OP1, int BIT_CODE) 38120 This function prepare to emit a conditional comparison within a 38121 sequence of conditional comparisons. It returns a appropriate 'CC' 38122 for passing to 'gen_ccmp_next' or 'cbranch_optab'. The insns to 38123 prepare the compare are saved in PREP_SEQ and the compare insns are 38124 saved in GEN_SEQ. They will be emitted when all the compares in 38125 the conditional comparision are generated without error. The PREV 38126 expression is the result of a prior call to 'gen_ccmp_first' or 38127 'gen_ccmp_next'. It may return 'NULL' if the combination of PREV 38128 and this comparison is not supported, otherwise the result must be 38129 appropriate for passing to 'gen_ccmp_next' or 'cbranch_optab'. 38130 CODE is the 'rtx_code' of the compare for OP0 and OP1. BIT_CODE is 38131 'AND' or 'IOR', which is the op on the two compares. 38132 38133 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL, 38134 struct loop *LOOP) 38135 This target hook returns a new value for the number of times LOOP 38136 should be unrolled. The parameter NUNROLL is the number of times 38137 the loop is to be unrolled. The parameter LOOP is a pointer to the 38138 loop, which is going to be checked for unrolling. This target hook 38139 is required only when the target has special constraints like 38140 maximum number of memory accesses. 38141 38142 -- Macro: POWI_MAX_MULTS 38143 If defined, this macro is interpreted as a signed integer C 38144 expression that specifies the maximum number of floating point 38145 multiplications that should be emitted when expanding 38146 exponentiation by an integer constant inline. When this value is 38147 defined, exponentiation requiring more than this number of 38148 multiplications is implemented by calling the system library's 38149 'pow', 'powf' or 'powl' routines. The default value places no 38150 upper bound on the multiplication count. 38151 38152 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 38153 *IPREFIX, int STDINC) 38154 This target hook should register any extra include files for the 38155 target. The parameter STDINC indicates if normal include files are 38156 present. The parameter SYSROOT is the system root directory. The 38157 parameter IPREFIX is the prefix for the gcc directory. 38158 38159 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 38160 char *IPREFIX, int STDINC) 38161 This target hook should register any extra include files for the 38162 target before any standard headers. The parameter STDINC indicates 38163 if normal include files are present. The parameter SYSROOT is the 38164 system root directory. The parameter IPREFIX is the prefix for the 38165 gcc directory. 38166 38167 -- Macro: void TARGET_OPTF (char *PATH) 38168 This target hook should register special include paths for the 38169 target. The parameter PATH is the include to register. On Darwin 38170 systems, this is used for Framework includes, which have semantics 38171 that are different from '-I'. 38172 38173 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 38174 This target macro returns 'true' if it is safe to use a local alias 38175 for a virtual function FNDECL when constructing thunks, 'false' 38176 otherwise. By default, the macro returns 'true' for all functions, 38177 if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'), 38178 'false' otherwise, 38179 38180 -- Macro: TARGET_FORMAT_TYPES 38181 If defined, this macro is the name of a global variable containing 38182 target-specific format checking information for the '-Wformat' 38183 option. The default is to have no target-specific format checks. 38184 38185 -- Macro: TARGET_N_FORMAT_TYPES 38186 If defined, this macro is the number of entries in 38187 'TARGET_FORMAT_TYPES'. 38188 38189 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 38190 If defined, this macro is the name of a global variable containing 38191 target-specific format overrides for the '-Wformat' option. The 38192 default is to have no target-specific format overrides. If 38193 defined, 'TARGET_FORMAT_TYPES' must be defined, too. 38194 38195 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 38196 If defined, this macro specifies the number of entries in 38197 'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 38198 38199 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 38200 If defined, this macro specifies the optional initialization 38201 routine for target specific customizations of the system printf and 38202 scanf formatter settings. 38203 38204 -- Target Hook: bool TARGET_RELAXED_ORDERING 38205 If set to 'true', means that the target's memory model does not 38206 guarantee that loads which do not depend on one another will access 38207 main memory in the order of the instruction stream; if ordering is 38208 important, an explicit memory barrier must be used. This is true 38209 of many recent processors which implement a policy of "relaxed," 38210 "weak," or "release" memory consistency, such as Alpha, PowerPC, 38211 and ia64. The default is 'false'. 38212 38213 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 38214 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 38215 If defined, this macro returns the diagnostic message when it is 38216 illegal to pass argument VAL to function FUNCDECL with prototype 38217 TYPELIST. 38218 38219 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 38220 FROMTYPE, const_tree TOTYPE) 38221 If defined, this macro returns the diagnostic message when it is 38222 invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity 38223 should be determined by the front end. 38224 38225 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 38226 const_tree TYPE) 38227 If defined, this macro returns the diagnostic message when it is 38228 invalid to apply operation OP (where unary plus is denoted by 38229 'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity 38230 should be determined by the front end. 38231 38232 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 38233 const_tree TYPE1, const_tree TYPE2) 38234 If defined, this macro returns the diagnostic message when it is 38235 invalid to apply operation OP to operands of types TYPE1 and TYPE2, 38236 or 'NULL' if validity should be determined by the front end. 38237 38238 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree 38239 TYPE) 38240 If defined, this macro returns the diagnostic message when it is 38241 invalid for functions to include parameters of type TYPE, or 'NULL' 38242 if validity should be determined by the front end. This is 38243 currently used only by the C and C++ front ends. 38244 38245 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree 38246 TYPE) 38247 If defined, this macro returns the diagnostic message when it is 38248 invalid for functions to have return type TYPE, or 'NULL' if 38249 validity should be determined by the front end. This is currently 38250 used only by the C and C++ front ends. 38251 38252 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 38253 If defined, this target hook returns the type to which values of 38254 TYPE should be promoted when they appear in expressions, analogous 38255 to the integer promotions, or 'NULL_TREE' to use the front end's 38256 normal promotion rules. This hook is useful when there are 38257 target-specific types with special promotion rules. This is 38258 currently used only by the C and C++ front ends. 38259 38260 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 38261 If defined, this hook returns the result of converting EXPR to 38262 TYPE. It should return the converted expression, or 'NULL_TREE' to 38263 apply the front end's normal conversion rules. This hook is useful 38264 when there are target-specific types with special conversion rules. 38265 This is currently used only by the C and C++ front ends. 38266 38267 -- Macro: TARGET_USE_JCR_SECTION 38268 This macro determines whether to use the JCR section to register 38269 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 38270 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else 38271 0. 38272 38273 -- Macro: OBJC_JBLEN 38274 This macro determines the size of the objective C jump buffer for 38275 the NeXT runtime. By default, OBJC_JBLEN is defined to an 38276 innocuous value. 38277 38278 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 38279 Define this macro if any target-specific attributes need to be 38280 attached to the functions in 'libgcc' that provide low-level 38281 support for call stack unwinding. It is used in declarations in 38282 'unwind-generic.h' and the associated definitions of those 38283 functions. 38284 38285 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 38286 Define this macro to update the current function stack boundary if 38287 necessary. 38288 38289 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 38290 This hook should return an rtx for Dynamic Realign Argument Pointer 38291 (DRAP) if a different argument pointer register is needed to access 38292 the function's argument list due to stack realignment. Return 38293 'NULL' if no DRAP is needed. 38294 38295 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 38296 When optimization is disabled, this hook indicates whether or not 38297 arguments should be allocated to stack slots. Normally, GCC 38298 allocates stacks slots for arguments when not optimizing in order 38299 to make debugging easier. However, when a function is declared 38300 with '__attribute__((naked))', there is no stack frame, and the 38301 compiler cannot safely move arguments from the registers in which 38302 they are passed to the stack. Therefore, this hook should return 38303 true in general, but false for naked functions. The default 38304 implementation always returns true. 38305 38306 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 38307 On some architectures it can take multiple instructions to 38308 synthesize a constant. If there is another constant already in a 38309 register that is close enough in value then it is preferable that 38310 the new constant is computed from this register using immediate 38311 addition or subtraction. We accomplish this through CSE. Besides 38312 the value of the constant we also add a lower and an upper constant 38313 anchor to the available expressions. These are then queried when 38314 encountering new constants. The anchors are computed by rounding 38315 the constant up and down to a multiple of the value of 38316 'TARGET_CONST_ANCHOR'. 'TARGET_CONST_ANCHOR' should be the maximum 38317 positive value accepted by immediate-add plus one. We currently 38318 assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2. 38319 For example, on MIPS, where add-immediate takes a 16-bit signed 38320 value, 'TARGET_CONST_ANCHOR' is set to '0x8000'. The default value 38321 is zero, which disables this optimization. 38322 38323 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void) 38324 Return the offset bitwise ored into shifted address to get 38325 corresponding Address Sanitizer shadow memory address. NULL if 38326 Address Sanitizer is not supported by the target. 38327 38328 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned 38329 HOST_WIDE_INT VAL) 38330 Validate target specific memory model mask bits. When NULL no 38331 target specific memory model bits are allowed. 38332 38333 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 38334 This value should be set if the result written by 38335 'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'. 38336 38337 -- Target Hook: bool TARGET_HAS_IFUNC_P (void) 38338 It returns true if the target supports GNU indirect functions. The 38339 support includes the assembler, linker and dynamic linker. The 38340 default value of this hook is based on target's libc. 38341 38342 -- Target Hook: unsigned int TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode 38343 MODE) 38344 If defined, this function returns an appropriate alignment in bits 38345 for an atomic object of machine_mode MODE. If 0 is returned then 38346 the default alignment for the specified mode is used. 38347 38348 -- Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *HOLD, tree 38349 *CLEAR, tree *UPDATE) 38350 ISO C11 requires atomic compound assignments that may raise 38351 floating-point exceptions to raise exceptions corresponding to the 38352 arithmetic operation whose result was successfully stored in a 38353 compare-and-exchange sequence. This requires code equivalent to 38354 calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be 38355 generated at appropriate points in the compare-and-exchange 38356 sequence. This hook should set '*HOLD' to an expression equivalent 38357 to the call to 'feholdexcept', '*CLEAR' to an expression equivalent 38358 to the call to 'feclearexcept' and '*UPDATE' to an expression 38359 equivalent to the call to 'feupdateenv'. The three expressions are 38360 'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if 38361 no code is required in a particular place. The default 38362 implementation leaves all three expressions as 'NULL_TREE'. The 38363 '__atomic_feraiseexcept' function from 'libatomic' may be of use as 38364 part of the code generated in '*UPDATE'. 38365 38366 -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree) 38367 Used when offloaded functions are seen in the compilation unit and 38368 no named sections are available. It is called once for each symbol 38369 that must be recorded in the offload function and variable table. 38370 38371 -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void) 38372 Used when writing out the list of options into an LTO file. It 38373 should translate any relevant target-specific options (such as the 38374 ABI in use) into one of the '-foffload' options that exist as a 38375 common interface to express such options. It should return a 38376 string containing these options, separated by spaces, which the 38377 caller will free. 38378 38379 -- Macro: TARGET_SUPPORTS_WIDE_INT 38380 38381 On older ports, large integers are stored in 'CONST_DOUBLE' rtl 38382 objects. Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be 38383 nonzero to indicate that large integers are stored in 38384 'CONST_WIDE_INT' rtl objects. The 'CONST_WIDE_INT' allows very 38385 large integer constants to be represented. 'CONST_DOUBLE' is 38386 limited to twice the size of the host's 'HOST_WIDE_INT' 38387 representation. 38388 38389 Converting a port mostly requires looking for the places where 38390 'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code 38391 with code that accesses 'CONST_WIDE_INT's. '"grep -i 38392 const_double"' at the port level gets you to 95% of the changes 38393 that need to be made. There are a few places that require a deeper 38394 look. 38395 38396 * There is no equivalent to 'hval' and 'lval' for 38397 'CONST_WIDE_INT's. This would be difficult to express in the 38398 md language since there are a variable number of elements. 38399 38400 Most ports only check that 'hval' is either 0 or -1 to see if 38401 the value is small. As mentioned above, this will no longer 38402 be necessary since small constants are always 'CONST_INT'. Of 38403 course there are still a few exceptions, the alpha's 38404 constraint used by the zap instruction certainly requires 38405 careful examination by C code. However, all the current code 38406 does is pass the hval and lval to C code, so evolving the c 38407 code to look at the 'CONST_WIDE_INT' is not really a large 38408 change. 38409 38410 * Because there is no standard template that ports use to 38411 materialize constants, there is likely to be some futzing that 38412 is unique to each port in this code. 38413 38414 * The rtx costs may have to be adjusted to properly account for 38415 larger constants that are represented as 'CONST_WIDE_INT'. 38416 38417 All and all it does not take long to convert ports that the 38418 maintainer is familiar with. 38419 38420 38421File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 38422 3842318 Host Configuration 38424********************* 38425 38426Most details about the machine and system on which the compiler is 38427actually running are detected by the 'configure' script. Some things 38428are impossible for 'configure' to detect; these are described in two 38429ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook 38430functions in the file specified by the OUT_HOST_HOOK_OBJ variable in 38431'config.gcc'. (The intention is that very few hosts will need a header 38432file but nearly every fully supported host will need to override some 38433hooks.) 38434 38435 If you need to define only a few macros, and they have simple 38436definitions, consider using the 'xm_defines' variable in your 38437'config.gcc' entry instead of creating a host configuration header. 38438*Note System Config::. 38439 38440* Menu: 38441 38442* Host Common:: Things every host probably needs implemented. 38443* Filesystem:: Your host can't have the letter 'a' in filenames? 38444* Host Misc:: Rare configuration options for hosts. 38445 38446 38447File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 38448 3844918.1 Host Common 38450================ 38451 38452Some things are just not portable, even between similar operating 38453systems, and are too difficult for autoconf to detect. They get 38454implemented using hook functions in the file specified by the 38455HOST_HOOK_OBJ variable in 'config.gcc'. 38456 38457 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 38458 This host hook is used to set up handling for extra signals. The 38459 most common thing to do in this hook is to detect stack overflow. 38460 38461 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 38462 FD) 38463 This host hook returns the address of some space that is likely to 38464 be free in some subsequent invocation of the compiler. We intend 38465 to load the PCH data at this address such that the data need not be 38466 relocated. The area should be able to hold SIZE bytes. If the 38467 host uses 'mmap', FD is an open file descriptor that can be used 38468 for probing. 38469 38470 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t 38471 SIZE, int FD, size_t OFFSET) 38472 This host hook is called when a PCH file is about to be loaded. We 38473 want to load SIZE bytes from FD at OFFSET into memory at ADDRESS. 38474 The given address will be the result of a previous invocation of 38475 'HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we couldn't allocate 38476 SIZE bytes at ADDRESS. Return 0 if the memory is allocated but the 38477 data is not loaded. Return 1 if the hook has performed everything. 38478 38479 If the implementation uses reserved address space, free any 38480 reserved space beyond SIZE, regardless of the return value. If no 38481 PCH will be loaded, this hook may be called with SIZE zero, in 38482 which case all reserved address space should be freed. 38483 38484 Do not try to handle values of ADDRESS that could not have been 38485 returned by this executable; just return -1. Such values usually 38486 indicate an out-of-date PCH file (built by some other GCC 38487 executable), and such a PCH file won't work. 38488 38489 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 38490 This host hook returns the alignment required for allocating 38491 virtual memory. Usually this is the same as getpagesize, but on 38492 some hosts the alignment for reserving memory differs from the 38493 pagesize for committing memory. 38494 38495 38496File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 38497 3849818.2 Host Filesystem 38499==================== 38500 38501GCC needs to know a number of things about the semantics of the host 38502machine's filesystem. Filesystems with Unix and MS-DOS semantics are 38503automatically detected. For other systems, you can define the following 38504macros in 'xm-MACHINE.h'. 38505 38506'HAVE_DOS_BASED_FILE_SYSTEM' 38507 This macro is automatically defined by 'system.h' if the host file 38508 system obeys the semantics defined by MS-DOS instead of Unix. DOS 38509 file systems are case insensitive, file specifications may begin 38510 with a drive letter, and both forward slash and backslash ('/' and 38511 '\') are directory separators. 38512 38513'DIR_SEPARATOR' 38514'DIR_SEPARATOR_2' 38515 If defined, these macros expand to character constants specifying 38516 separators for directory names within a file specification. 38517 'system.h' will automatically give them appropriate values on Unix 38518 and MS-DOS file systems. If your file system is neither of these, 38519 define one or both appropriately in 'xm-MACHINE.h'. 38520 38521 However, operating systems like VMS, where constructing a pathname 38522 is more complicated than just stringing together directory names 38523 separated by a special character, should not define either of these 38524 macros. 38525 38526'PATH_SEPARATOR' 38527 If defined, this macro should expand to a character constant 38528 specifying the separator for elements of search paths. The default 38529 value is a colon (':'). DOS-based systems usually, but not always, 38530 use semicolon (';'). 38531 38532'VMS' 38533 Define this macro if the host system is VMS. 38534 38535'HOST_OBJECT_SUFFIX' 38536 Define this macro to be a C string representing the suffix for 38537 object files on your host machine. If you do not define this 38538 macro, GCC will use '.o' as the suffix for object files. 38539 38540'HOST_EXECUTABLE_SUFFIX' 38541 Define this macro to be a C string representing the suffix for 38542 executable files on your host machine. If you do not define this 38543 macro, GCC will use the null string as the suffix for executable 38544 files. 38545 38546'HOST_BIT_BUCKET' 38547 A pathname defined by the host operating system, which can be 38548 opened as a file and written to, but all the information written is 38549 discarded. This is commonly known as a "bit bucket" or "null 38550 device". If you do not define this macro, GCC will use '/dev/null' 38551 as the bit bucket. If the host does not support a bit bucket, 38552 define this macro to an invalid filename. 38553 38554'UPDATE_PATH_HOST_CANONICALIZE (PATH)' 38555 If defined, a C statement (sans semicolon) that performs 38556 host-dependent canonicalization when a path used in a compilation 38557 driver or preprocessor is canonicalized. PATH is a malloc-ed path 38558 to be canonicalized. If the C statement does canonicalize PATH 38559 into a different buffer, the old path should be freed and the new 38560 buffer should have been allocated with malloc. 38561 38562'DUMPFILE_FORMAT' 38563 Define this macro to be a C string representing the format to use 38564 for constructing the index part of debugging dump file names. The 38565 resultant string must fit in fifteen bytes. The full filename will 38566 be the concatenation of: the prefix of the assembler file name, the 38567 string resulting from applying this format to an index number, and 38568 a string unique to each dump file kind, e.g. 'rtl'. 38569 38570 If you do not define this macro, GCC will use '.%02d.'. You should 38571 define this macro if using the default will create an invalid file 38572 name. 38573 38574'DELETE_IF_ORDINARY' 38575 Define this macro to be a C statement (sans semicolon) that 38576 performs host-dependent removal of ordinary temp files in the 38577 compilation driver. 38578 38579 If you do not define this macro, GCC will use the default version. 38580 You should define this macro if the default version does not 38581 reliably remove the temp file as, for example, on VMS which allows 38582 multiple versions of a file. 38583 38584'HOST_LACKS_INODE_NUMBERS' 38585 Define this macro if the host filesystem does not report meaningful 38586 inode numbers in struct stat. 38587 38588 38589File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 38590 3859118.3 Host Misc 38592============== 38593 38594'FATAL_EXIT_CODE' 38595 A C expression for the status code to be returned when the compiler 38596 exits after serious errors. The default is the system-provided 38597 macro 'EXIT_FAILURE', or '1' if the system doesn't define that 38598 macro. Define this macro only if these defaults are incorrect. 38599 38600'SUCCESS_EXIT_CODE' 38601 A C expression for the status code to be returned when the compiler 38602 exits without serious errors. (Warnings are not serious errors.) 38603 The default is the system-provided macro 'EXIT_SUCCESS', or '0' if 38604 the system doesn't define that macro. Define this macro only if 38605 these defaults are incorrect. 38606 38607'USE_C_ALLOCA' 38608 Define this macro if GCC should use the C implementation of 38609 'alloca' provided by 'libiberty.a'. This only affects how some 38610 parts of the compiler itself allocate memory. It does not change 38611 code generation. 38612 38613 When GCC is built with a compiler other than itself, the C 'alloca' 38614 is always used. This is because most other implementations have 38615 serious bugs. You should define this macro only on a system where 38616 no stack-based 'alloca' can possibly work. For instance, if a 38617 system has a small limit on the size of the stack, GCC's builtin 38618 'alloca' will not work reliably. 38619 38620'COLLECT2_HOST_INITIALIZATION' 38621 If defined, a C statement (sans semicolon) that performs 38622 host-dependent initialization when 'collect2' is being initialized. 38623 38624'GCC_DRIVER_HOST_INITIALIZATION' 38625 If defined, a C statement (sans semicolon) that performs 38626 host-dependent initialization when a compilation driver is being 38627 initialized. 38628 38629'HOST_LONG_LONG_FORMAT' 38630 If defined, the string used to indicate an argument of type 'long 38631 long' to functions like 'printf'. The default value is '"ll"'. 38632 38633'HOST_LONG_FORMAT' 38634 If defined, the string used to indicate an argument of type 'long' 38635 to functions like 'printf'. The default value is '"l"'. 38636 38637'HOST_PTR_PRINTF' 38638 If defined, the string used to indicate an argument of type 'void 38639 *' to functions like 'printf'. The default value is '"%p"'. 38640 38641 In addition, if 'configure' generates an incorrect definition of any of 38642the macros in 'auto-host.h', you can override that definition in a host 38643configuration header. If you need to do this, first see if it is 38644possible to fix 'configure'. 38645 38646 38647File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 38648 3864919 Makefile Fragments 38650********************* 38651 38652When you configure GCC using the 'configure' script, it will construct 38653the file 'Makefile' from the template file 'Makefile.in'. When it does 38654this, it can incorporate makefile fragments from the 'config' directory. 38655These are used to set Makefile parameters that are not amenable to being 38656calculated by autoconf. The list of fragments to incorporate is set by 38657'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note 38658System Config::. 38659 38660 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether 38661they are relevant to configuring GCC to produce code for a particular 38662target, or to configuring GCC to run on a particular host. Here TARGET 38663and HOST are mnemonics which usually have some relationship to the 38664canonical system name, but no formal connection. 38665 38666 If these files do not exist, it means nothing needs to be added for a 38667given target or host. Most targets need a few 't-TARGET' fragments, but 38668needing 'x-HOST' fragments is rare. 38669 38670* Menu: 38671 38672* Target Fragment:: Writing 't-TARGET' files. 38673* Host Fragment:: Writing 'x-HOST' files. 38674 38675 38676File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 38677 3867819.1 Target Makefile Fragments 38679============================== 38680 38681Target makefile fragments can set these Makefile variables. 38682 38683'LIBGCC2_CFLAGS' 38684 Compiler flags to use when compiling 'libgcc2.c'. 38685 38686'LIB2FUNCS_EXTRA' 38687 A list of source file names to be compiled or assembled and 38688 inserted into 'libgcc.a'. 38689 38690'CRTSTUFF_T_CFLAGS' 38691 Special flags used when compiling 'crtstuff.c'. *Note 38692 Initialization::. 38693 38694'CRTSTUFF_T_CFLAGS_S' 38695 Special flags used when compiling 'crtstuff.c' for shared linking. 38696 Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'. 38697 *Note Initialization::. 38698 38699'MULTILIB_OPTIONS' 38700 For some targets, invoking GCC in different ways produces objects 38701 that can not be linked together. For example, for some targets GCC 38702 produces both big and little endian code. For these targets, you 38703 must arrange for multiple versions of 'libgcc.a' to be compiled, 38704 one for each set of incompatible options. When GCC invokes the 38705 linker, it arranges to link in the right version of 'libgcc.a', 38706 based on the command line options used. 38707 38708 The 'MULTILIB_OPTIONS' macro lists the set of options for which 38709 special versions of 'libgcc.a' must be built. Write options that 38710 are mutually incompatible side by side, separated by a slash. 38711 Write options that may be used together separated by a space. The 38712 build procedure will build all combinations of compatible options. 38713 38714 For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020 38715 msoft-float', 'Makefile' will build special versions of 'libgcc.a' 38716 using the following sets of options: '-m68000', '-m68020', 38717 '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'. 38718 38719'MULTILIB_DIRNAMES' 38720 If 'MULTILIB_OPTIONS' is used, this variable specifies the 38721 directory names that should be used to hold the various libraries. 38722 Write one element in 'MULTILIB_DIRNAMES' for each element in 38723 'MULTILIB_OPTIONS'. If 'MULTILIB_DIRNAMES' is not used, the 38724 default value will be 'MULTILIB_OPTIONS', with all slashes treated 38725 as spaces. 38726 38727 'MULTILIB_DIRNAMES' describes the multilib directories using GCC 38728 conventions and is applied to directories that are part of the GCC 38729 installation. When multilib-enabled, the compiler will add a 38730 subdirectory of the form PREFIX/MULTILIB before each directory in 38731 the search path for libraries and crt files. 38732 38733 For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020 38734 msoft-float', then the default value of 'MULTILIB_DIRNAMES' is 38735 'm68000 m68020 msoft-float'. You may specify a different value if 38736 you desire a different set of directory names. 38737 38738'MULTILIB_MATCHES' 38739 Sometimes the same option may be written in two different ways. If 38740 an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about 38741 any synonyms. In that case, set 'MULTILIB_MATCHES' to a list of 38742 items of the form 'option=option' to describe all relevant 38743 synonyms. For example, 'm68000=mc68000 m68020=mc68020'. 38744 38745'MULTILIB_EXCEPTIONS' 38746 Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being 38747 specified, there are combinations that should not be built. In 38748 that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch 38749 exceptions in shell case syntax that should not be built. 38750 38751 For example the ARM processor cannot execute both hardware floating 38752 point instructions and the reduced size THUMB instructions at the 38753 same time, so there is no need to build libraries with both of 38754 these options enabled. Therefore 'MULTILIB_EXCEPTIONS' is set to: 38755 *mthumb/*mhard-float* 38756 38757'MULTILIB_REQUIRED' 38758 Sometimes when there are only a few combinations are required, it 38759 would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list 38760 to cover all undesired ones. In such a case, just listing all the 38761 required combinations in 'MULTILIB_REQUIRED' would be more 38762 straightforward. 38763 38764 The way to specify the entries in 'MULTILIB_REQUIRED' is same with 38765 the way used for 'MULTILIB_EXCEPTIONS', only this time what are 38766 required will be specified. Suppose there are multiple sets of 38767 'MULTILIB_OPTIONS' and only two combinations are required, one for 38768 ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, 38769 the 'MULTILIB_REQUIRED' can be set to: 38770 MULTILIB_REQUIRED = mthumb/march=armv7-m 38771 MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 38772 38773 The 'MULTILIB_REQUIRED' can be used together with 38774 'MULTILIB_EXCEPTIONS'. The option combinations generated from 38775 'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and 38776 then by 'MULTILIB_REQUIRED'. 38777 38778'MULTILIB_REUSE' 38779 Sometimes it is desirable to reuse one existing multilib for 38780 different sets of options. Such kind of reuse can minimize the 38781 number of multilib variants. And for some targets it is better to 38782 reuse an existing multilib than to fall back to default multilib 38783 when there is no corresponding multilib. This can be done by 38784 adding reuse rules to 'MULTILIB_REUSE'. 38785 38786 A reuse rule is comprised of two parts connected by equality sign. 38787 The left part is option set used to build multilib and the right 38788 part is option set that will reuse this multilib. The order of 38789 options in the left part matters and should be same with those 38790 specified in 'MULTILIB_REQUIRED' or aligned with order in 38791 'MULTILIB_OPTIONS'. There is no such limitation for options in 38792 right part as we don't build multilib from them. But the equality 38793 sign in both parts should be replaced with period. 38794 38795 The 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that 38796 it sets up relations between two option sets rather than two 38797 options. Here is an example to demo how we reuse libraries built 38798 in Thumb mode for applications built in ARM mode: 38799 MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r 38800 38801 Before the advent of 'MULTILIB_REUSE', GCC select multilib by 38802 comparing command line options with options used to build multilib. 38803 The 'MULTILIB_REUSE' is complementary to that way. Only when the 38804 original comparison matches nothing it will work to see if it is OK 38805 to reuse some existing multilib. 38806 38807'MULTILIB_EXTRA_OPTS' 38808 Sometimes it is desirable that when building multiple versions of 38809 'libgcc.a' certain options should always be passed on to the 38810 compiler. In that case, set 'MULTILIB_EXTRA_OPTS' to be the list 38811 of options to be used for all builds. If you set this, you should 38812 probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it. 38813 38814'MULTILIB_OSDIRNAMES' 38815 If 'MULTILIB_OPTIONS' is used, this variable specifies a list of 38816 subdirectory names, that are used to modify the search path 38817 depending on the chosen multilib. Unlike 'MULTILIB_DIRNAMES', 38818 'MULTILIB_OSDIRNAMES' describes the multilib directories using 38819 operating systems conventions, and is applied to the directories 38820 such as 'lib' or those in the 'LIBRARY_PATH' environment variable. 38821 The format is either the same as of 'MULTILIB_DIRNAMES', or a set 38822 of mappings. When it is the same as 'MULTILIB_DIRNAMES', it 38823 describes the multilib directories using operating system 38824 conventions, rather than GCC conventions. When it is a set of 38825 mappings of the form GCCDIR=OSDIR, the left side gives the GCC 38826 convention and the right gives the equivalent OS defined location. 38827 If the OSDIR part begins with a '!', GCC will not search in the 38828 non-multilib directory and use exclusively the multilib directory. 38829 Otherwise, the compiler will examine the search path for libraries 38830 and crt files twice; the first time it will add MULTILIB to each 38831 directory in the search path, the second it will not. 38832 38833 For configurations that support both multilib and multiarch, 38834 'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus 38835 subsuming 'MULTIARCH_DIRNAME'. The multiarch name is appended to 38836 each directory name, separated by a colon (e.g. 38837 '../lib32:i386-linux-gnu'). 38838 38839 Each multiarch subdirectory will be searched before the 38840 corresponding OS multilib directory, for example 38841 '/lib/i386-linux-gnu' before '/lib/../lib32'. The multiarch name 38842 will also be used to modify the system header search path, as 38843 explained for 'MULTIARCH_DIRNAME'. 38844 38845'MULTIARCH_DIRNAME' 38846 This variable specifies the multiarch name for configurations that 38847 are multiarch-enabled but not multilibbed configurations. 38848 38849 The multiarch name is used to augment the search path for 38850 libraries, crt files and system header files with additional 38851 locations. The compiler will add a multiarch subdirectory of the 38852 form PREFIX/MULTIARCH before each directory in the library and crt 38853 search path. It will also add two directories 38854 'LOCAL_INCLUDE_DIR'/MULTIARCH and 38855 'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search 38856 path, respectively before 'LOCAL_INCLUDE_DIR' and 38857 'NATIVE_SYSTEM_HEADER_DIR'. 38858 38859 'MULTIARCH_DIRNAME' is not used for configurations that support 38860 both multilib and multiarch. In that case, multiarch names are 38861 encoded in 'MULTILIB_OSDIRNAMES' instead. 38862 38863 More documentation about multiarch can be found at 38864 <http://wiki.debian.org/Multiarch>. 38865 38866'SPECS' 38867 Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since 38868 it does not affect the build of target libraries, at least not the 38869 build of the default multilib. One possible work-around is to use 38870 'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if 38871 they had been passed in the compiler driver command line. However, 38872 you don't want to be adding these options after the toolchain is 38873 installed, so you can instead tweak the 'specs' file that will be 38874 used during the toolchain build, while you still install the 38875 original, built-in 'specs'. The trick is to set 'SPECS' to some 38876 other filename (say 'specs.install'), that will then be created out 38877 of the built-in specs, and introduce a 'Makefile' rule to generate 38878 the 'specs' file that's going to be used at build time out of your 38879 'specs.install'. 38880 38881'T_CFLAGS' 38882 These are extra flags to pass to the C compiler. They are used 38883 both when building GCC, and when compiling things with the 38884 just-built GCC. This variable is deprecated and should not be 38885 used. 38886 38887 38888File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 38889 3889019.2 Host Makefile Fragments 38891============================ 38892 38893The use of 'x-HOST' fragments is discouraged. You should only use it 38894for makefile dependencies. 38895 38896 38897File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 38898 3889920 'collect2' 38900************* 38901 38902GCC uses a utility called 'collect2' on nearly all systems to arrange to 38903call various initialization functions at start time. 38904 38905 The program 'collect2' works by linking the program once and looking 38906through the linker output file for symbols with particular names 38907indicating they are constructor functions. If it finds any, it creates 38908a new temporary '.c' file containing a table of them, compiles it, and 38909links the program a second time including that file. 38910 38911 The actual calls to the constructors are carried out by a subroutine 38912called '__main', which is called (automatically) at the beginning of the 38913body of 'main' (provided 'main' was compiled with GNU CC). Calling 38914'__main' is necessary, even when compiling C code, to allow linking C 38915and C++ object code together. (If you use '-nostdlib', you get an 38916unresolved reference to '__main', since it's defined in the standard GCC 38917library. Include '-lgcc' at the end of your compiler command line to 38918resolve this reference.) 38919 38920 The program 'collect2' is installed as 'ld' in the directory where the 38921passes of the compiler are installed. When 'collect2' needs to find the 38922_real_ 'ld', it tries the following file names: 38923 38924 * a hard coded linker file name, if GCC was configured with the 38925 '--with-ld' option. 38926 38927 * 'real-ld' in the directories listed in the compiler's search 38928 directories. 38929 38930 * 'real-ld' in the directories listed in the environment variable 38931 'PATH'. 38932 38933 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 38934 if specified. 38935 38936 * 'ld' in the compiler's search directories, except that 'collect2' 38937 will not execute itself recursively. 38938 38939 * 'ld' in 'PATH'. 38940 38941 "The compiler's search directories" means all the directories where 38942'gcc' searches for passes of the compiler. This includes directories 38943that you specify with '-B'. 38944 38945 Cross-compilers search a little differently: 38946 38947 * 'real-ld' in the compiler's search directories. 38948 38949 * 'TARGET-real-ld' in 'PATH'. 38950 38951 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 38952 if specified. 38953 38954 * 'ld' in the compiler's search directories. 38955 38956 * 'TARGET-ld' in 'PATH'. 38957 38958 'collect2' explicitly avoids running 'ld' using the file name under 38959which 'collect2' itself was invoked. In fact, it remembers up a list of 38960such names--in case one copy of 'collect2' finds another copy (or 38961version) of 'collect2' installed as 'ld' in a second place in the search 38962path. 38963 38964 'collect2' searches for the utilities 'nm' and 'strip' using the same 38965algorithm as above for 'ld'. 38966 38967 38968File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 38969 3897021 Standard Header File Directories 38971*********************************** 38972 38973'GCC_INCLUDE_DIR' means the same thing for native and cross. It is 38974where GCC stores its private include files, and also where GCC stores 38975the fixed include files. A cross compiled GCC runs 'fixincludes' on the 38976header files in '$(tooldir)/include'. (If the cross compilation header 38977files need to be fixed, they must be installed before GCC is built. If 38978the cross compilation header files are already suitable for GCC, nothing 38979special need be done). 38980 38981 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 38982is where 'g++' looks first for header files. The C++ library installs 38983only target independent header files in that directory. 38984 38985 'LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 38986install anything there. It is normally '/usr/local/include'. This is 38987where local additions to a packaged system should place header files. 38988 38989 'CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 38990install anything there. 38991 38992 'TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 38993the place for other packages to install header files that GCC will use. 38994For a cross-compiler, this is the equivalent of '/usr/include'. When 38995you build a cross-compiler, 'fixincludes' processes any header files in 38996this directory. 38997 38998 38999File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 39000 3900122 Memory Management and Type Information 39002***************************************** 39003 39004GCC uses some fairly sophisticated memory management techniques, which 39005involve determining information about GCC's data structures from GCC's 39006source code and using this information to perform garbage collection and 39007implement precompiled headers. 39008 39009 A full C++ parser would be too complicated for this task, so a limited 39010subset of C++ is interpreted and special markers are used to determine 39011what parts of the source to look at. All 'struct', 'union' and 39012'template' structure declarations that define data structures that are 39013allocated under control of the garbage collector must be marked. All 39014global variables that hold pointers to garbage-collected memory must 39015also be marked. Finally, all global variables that need to be saved and 39016restored by a precompiled header must be marked. (The precompiled 39017header mechanism can only save static variables if they're scalar. 39018Complex data structures must be allocated in garbage-collected memory to 39019be saved in a precompiled header.) 39020 39021 The full format of a marker is 39022 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 39023but in most cases no options are needed. The outer double parentheses 39024are still necessary, though: 'GTY(())'. Markers can appear: 39025 39026 * In a structure definition, before the open brace; 39027 * In a global variable declaration, after the keyword 'static' or 39028 'extern'; and 39029 * In a structure field definition, before the name of the field. 39030 39031 Here are some examples of marking simple data structures and globals. 39032 39033 struct GTY(()) TAG 39034 { 39035 FIELDS... 39036 }; 39037 39038 typedef struct GTY(()) TAG 39039 { 39040 FIELDS... 39041 } *TYPENAME; 39042 39043 static GTY(()) struct TAG *LIST; /* points to GC memory */ 39044 static GTY(()) int COUNTER; /* save counter in a PCH */ 39045 39046 The parser understands simple typedefs such as 'typedef struct TAG 39047*NAME;' and 'typedef int NAME;'. These don't need to be marked. 39048 39049 Since 'gengtype''s understanding of C++ is limited, there are several 39050constructs and declarations that are not supported inside 39051classes/structures marked for automatic GC code generation. The 39052following C++ constructs produce a 'gengtype' error on 39053structures/classes marked for automatic GC code generation: 39054 39055 * Type definitions inside classes/structures are not supported. 39056 * Enumerations inside classes/structures are not supported. 39057 39058 If you have a class or structure using any of the above constructs, you 39059need to mark that class as 'GTY ((user))' and provide your own marking 39060routines (see section *note User GC:: for details). 39061 39062 It is always valid to include function definitions inside classes. 39063Those are always ignored by 'gengtype', as it only cares about data 39064members. 39065 39066* Menu: 39067 39068* GTY Options:: What goes inside a 'GTY(())'. 39069* Inheritance and GTY:: Adding GTY to a class hierarchy. 39070* User GC:: Adding user-provided GC marking routines. 39071* GGC Roots:: Making global variables GGC roots. 39072* Files:: How the generated files work. 39073* Invoking the garbage collector:: How to invoke the garbage collector. 39074* Troubleshooting:: When something does not work as expected. 39075 39076 39077File: gccint.info, Node: GTY Options, Next: Inheritance and GTY, Up: Type Information 39078 3907922.1 The Inside of a 'GTY(())' 39080============================== 39081 39082Sometimes the C code is not enough to fully describe the type structure. 39083Extra information can be provided with 'GTY' options and additional 39084markers. Some options take a parameter, which may be either a string or 39085a type name, depending on the parameter. If an option takes no 39086parameter, it is acceptable either to omit the parameter entirely, or to 39087provide an empty string as a parameter. For example, 'GTY ((skip))' and 39088'GTY ((skip ("")))' are equivalent. 39089 39090 When the parameter is a string, often it is a fragment of C code. Four 39091special escapes may be used in these strings, to refer to pieces of the 39092data structure being marked: 39093 39094'%h' 39095 The current structure. 39096'%1' 39097 The structure that immediately contains the current structure. 39098'%0' 39099 The outermost structure that contains the current structure. 39100'%a' 39101 A partial expression of the form '[i1][i2]...' that indexes the 39102 array item currently being marked. 39103 39104 For instance, suppose that you have a structure of the form 39105 struct A { 39106 ... 39107 }; 39108 struct B { 39109 struct A foo[12]; 39110 }; 39111and 'b' is a variable of type 'struct B'. When marking 'b.foo[11]', 39112'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to 39113'b', and '%a' would expand to '[11]'. 39114 39115 As in ordinary C, adjacent strings will be concatenated; this is 39116helpful when you have a complicated expression. 39117 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 39118 " ? TYPE_NEXT_VARIANT (&%h.generic)" 39119 " : TREE_CHAIN (&%h.generic)"))) 39120 39121 The available options are: 39122 39123'length ("EXPRESSION")' 39124 39125 There are two places the type machinery will need to be explicitly 39126 told the length of an array of non-atomic objects. The first case 39127 is when a structure ends in a variable-length array, like this: 39128 struct GTY(()) rtvec_def { 39129 int num_elem; /* number of elements */ 39130 rtx GTY ((length ("%h.num_elem"))) elem[1]; 39131 }; 39132 39133 In this case, the 'length' option is used to override the specified 39134 array length (which should usually be '1'). The parameter of the 39135 option is a fragment of C code that calculates the length. 39136 39137 The second case is when a structure or a global variable contains a 39138 pointer to an array, like this: 39139 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter; 39140 In this case, 'iter' has been allocated by writing something like 39141 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse); 39142 and the 'collapse' provides the length of the field. 39143 39144 This second use of 'length' also works on global variables, like: 39145 static GTY((length("reg_known_value_size"))) rtx *reg_known_value; 39146 39147 Note that the 'length' option is only meant for use with arrays of 39148 non-atomic objects, that is, objects that contain pointers pointing 39149 to other GTY-managed objects. For other GC-allocated arrays and 39150 strings you should use 'atomic'. 39151 39152'skip' 39153 39154 If 'skip' is applied to a field, the type machinery will ignore it. 39155 This is somewhat dangerous; the only safe use is in a union when 39156 one field really isn't ever used. 39157 39158 Use this to mark types that need to be marked by user gc routines, 39159 but are not refered to in a template argument. So if you have some 39160 user gc type T1 and a non user gc type T2 you can give T2 the 39161 for_user option so that the marking functions for T1 can call non 39162 mangled functions to mark T2. 39163 39164'desc ("EXPRESSION")' 39165'tag ("CONSTANT")' 39166'default' 39167 39168 The type machinery needs to be told which field of a 'union' is 39169 currently active. This is done by giving each field a constant 39170 'tag' value, and then specifying a discriminator using 'desc'. The 39171 value of the expression given by 'desc' is compared against each 39172 'tag' value, each of which should be different. If no 'tag' is 39173 matched, the field marked with 'default' is used if there is one, 39174 otherwise no field in the union will be marked. 39175 39176 In the 'desc' option, the "current structure" is the union that it 39177 discriminates. Use '%1' to mean the structure containing it. 39178 There are no escapes available to the 'tag' option, since it is a 39179 constant. 39180 39181 For example, 39182 struct GTY(()) tree_binding 39183 { 39184 struct tree_common common; 39185 union tree_binding_u { 39186 tree GTY ((tag ("0"))) scope; 39187 struct cp_binding_level * GTY ((tag ("1"))) level; 39188 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 39189 tree value; 39190 }; 39191 39192 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 39193 'struct tree_binding *' is presumed to be 0 or 1. If 1, the type 39194 mechanism will treat the field 'level' as being present and if 0, 39195 will treat the field 'scope' as being present. 39196 39197 The 'desc' and 'tag' options can also be used for inheritance to 39198 denote which subclass an instance is. See *note Inheritance and 39199 GTY:: for more information. 39200 39201'cache' 39202 39203 When the 'cache' option is applied to a global variable 39204 gt_clear_cache is called on that variable between the mark and 39205 sweep phases of garbage collection. The gt_clear_cache function is 39206 free to mark blocks as used, or to clear pointers in the variable. 39207 39208'deletable' 39209 39210 'deletable', when applied to a global variable, indicates that when 39211 garbage collection runs, there's no need to mark anything pointed 39212 to by this variable, it can just be set to 'NULL' instead. This is 39213 used to keep a list of free structures around for re-use. 39214 39215'mark_hook ("HOOK-ROUTINE-NAME")' 39216 39217 If provided for a structure or union type, the given 39218 HOOK-ROUTINE-NAME (between double-quotes) is the name of a routine 39219 called when the garbage collector has just marked the data as 39220 reachable. This routine should not change the data, or call any 39221 ggc routine. Its only argument is a pointer to the just marked 39222 (const) structure or union. 39223 39224'maybe_undef' 39225 39226 When applied to a field, 'maybe_undef' indicates that it's OK if 39227 the structure that this fields points to is never defined, so long 39228 as this field is always 'NULL'. This is used to avoid requiring 39229 backends to define certain optional structures. It doesn't work 39230 with language frontends. 39231 39232'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 39233 39234 The type machinery expects all pointers to point to the start of an 39235 object. Sometimes for abstraction purposes it's convenient to have 39236 a pointer which points inside an object. So long as it's possible 39237 to convert the original object to and from the pointer, such 39238 pointers can still be used. TYPE is the type of the original 39239 object, the TO EXPRESSION returns the pointer given the original 39240 object, and the FROM EXPRESSION returns the original object given 39241 the pointer. The pointer will be available using the '%h' escape. 39242 39243'chain_next ("EXPRESSION")' 39244'chain_prev ("EXPRESSION")' 39245'chain_circular ("EXPRESSION")' 39246 39247 It's helpful for the type machinery to know if objects are often 39248 chained together in long lists; this lets it generate code that 39249 uses less stack space by iterating along the list instead of 39250 recursing down it. 'chain_next' is an expression for the next item 39251 in the list, 'chain_prev' is an expression for the previous item. 39252 For singly linked lists, use only 'chain_next'; for doubly linked 39253 lists, use both. The machinery requires that taking the next item 39254 of the previous item gives the original item. 'chain_circular' is 39255 similar to 'chain_next', but can be used for circular single linked 39256 lists. 39257 39258'reorder ("FUNCTION NAME")' 39259 39260 Some data structures depend on the relative ordering of pointers. 39261 If the precompiled header machinery needs to change that ordering, 39262 it will call the function referenced by the 'reorder' option, 39263 before changing the pointers in the object that's pointed to by the 39264 field the option applies to. The function must take four 39265 arguments, with the signature 39266 'void *, void *, gt_pointer_operator, void *'. The first parameter 39267 is a pointer to the structure that contains the object being 39268 updated, or the object itself if there is no containing structure. 39269 The second parameter is a cookie that should be ignored. The third 39270 parameter is a routine that, given a pointer, will update it to its 39271 correct new value. The fourth parameter is a cookie that must be 39272 passed to the second parameter. 39273 39274 PCH cannot handle data structures that depend on the absolute 39275 values of pointers. 'reorder' functions can be expensive. When 39276 possible, it is better to depend on properties of the data, like an 39277 ID number or the hash of a string instead. 39278 39279'atomic' 39280 39281 The 'atomic' option can only be used with pointers. It informs the 39282 GC machinery that the memory that the pointer points to does not 39283 contain any pointers, and hence it should be treated by the GC and 39284 PCH machinery as an "atomic" block of memory that does not need to 39285 be examined when scanning memory for pointers. In particular, the 39286 machinery will not scan that memory for pointers to mark them as 39287 reachable (when marking pointers for GC) or to relocate them (when 39288 writing a PCH file). 39289 39290 The 'atomic' option differs from the 'skip' option. 'atomic' keeps 39291 the memory under Garbage Collection, but makes the GC ignore the 39292 contents of the memory. 'skip' is more drastic in that it causes 39293 the pointer and the memory to be completely ignored by the Garbage 39294 Collector. So, memory marked as 'atomic' is automatically freed 39295 when no longer reachable, while memory marked as 'skip' is not. 39296 39297 The 'atomic' option must be used with great care, because all sorts 39298 of problem can occur if used incorrectly, that is, if the memory 39299 the pointer points to does actually contain a pointer. 39300 39301 Here is an example of how to use it: 39302 struct GTY(()) my_struct { 39303 int number_of_elements; 39304 unsigned int * GTY ((atomic)) elements; 39305 }; 39306 In this case, 'elements' is a pointer under GC, and the memory it 39307 points to needs to be allocated using the Garbage Collector, and 39308 will be freed automatically by the Garbage Collector when it is no 39309 longer referenced. But the memory that the pointer points to is an 39310 array of 'unsigned int' elements, and the GC must not try to scan 39311 it to find pointers to mark or relocate, which is why it is marked 39312 with the 'atomic' option. 39313 39314 Note that, currently, global variables can not be marked with 39315 'atomic'; only fields of a struct can. This is a known limitation. 39316 It would be useful to be able to mark global pointers with 'atomic' 39317 to make the PCH machinery aware of them so that they are saved and 39318 restored correctly to PCH files. 39319 39320'special ("NAME")' 39321 39322 The 'special' option is used to mark types that have to be dealt 39323 with by special case machinery. The parameter is the name of the 39324 special case. See 'gengtype.c' for further details. Avoid adding 39325 new special cases unless there is no other alternative. 39326 39327'user' 39328 39329 The 'user' option indicates that the code to mark structure fields 39330 is completely handled by user-provided routines. See section *note 39331 User GC:: for details on what functions need to be provided. 39332 39333 39334File: gccint.info, Node: Inheritance and GTY, Next: User GC, Prev: GTY Options, Up: Type Information 39335 3933622.2 Support for inheritance 39337============================ 39338 39339gengtype has some support for simple class hierarchies. You can use 39340this to have gengtype autogenerate marking routines, provided: 39341 39342 * There must be a concrete base class, with a discriminator 39343 expression that can be used to identify which subclass an instance 39344 is. 39345 * Only single inheritance is used. 39346 * None of the classes within the hierarchy are templates. 39347 39348 If your class hierarchy does not fit in this pattern, you must use 39349*note User GC:: instead. 39350 39351 The base class and its discriminator must be identified using the 39352"desc" option. Each concrete subclass must use the "tag" option to 39353identify which value of the discriminator it corresponds to. 39354 39355 Every class in the hierarchy must have a 'GTY(())' marker, as gengtype 39356will only attempt to parse classes that have such a marker (1). 39357 39358 class GTY((desc("%h.kind"), tag("0"))) example_base 39359 { 39360 public: 39361 int kind; 39362 tree a; 39363 }; 39364 39365 class GTY((tag("1")) some_subclass : public example_base 39366 { 39367 public: 39368 tree b; 39369 }; 39370 39371 class GTY((tag("2")) some_other_subclass : public example_base 39372 { 39373 public: 39374 tree c; 39375 }; 39376 39377 The generated marking routines for the above will contain a "switch" on 39378"kind", visiting all appropriate fields. For example, if kind is 2, it 39379will cast to "some_other_subclass" and visit fields a, b, and c. 39380 39381 ---------- Footnotes ---------- 39382 39383 (1) Classes lacking such a marker will not be identified as being 39384part of the hierarchy, and so the marking routines will not handle them, 39385leading to a assertion failure within the marking routines due to an 39386unknown tag value (assuming that assertions are enabled). 39387 39388 39389File: gccint.info, Node: User GC, Next: GGC Roots, Prev: Inheritance and GTY, Up: Type Information 39390 3939122.3 Support for user-provided GC marking routines 39392================================================== 39393 39394The garbage collector supports types for which no automatic marking code 39395is generated. For these types, the user is required to provide three 39396functions: one to act as a marker for garbage collection, and two 39397functions to act as marker and pointer walker for pre-compiled headers. 39398 39399 Given a structure 'struct GTY((user)) my_struct', the following 39400functions should be defined to mark 'my_struct': 39401 39402 void gt_ggc_mx (my_struct *p) 39403 { 39404 /* This marks field 'fld'. */ 39405 gt_ggc_mx (p->fld); 39406 } 39407 39408 void gt_pch_nx (my_struct *p) 39409 { 39410 /* This marks field 'fld'. */ 39411 gt_pch_nx (tp->fld); 39412 } 39413 39414 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie) 39415 { 39416 /* For every field 'fld', call the given pointer operator. */ 39417 op (&(tp->fld), cookie); 39418 } 39419 39420 In general, each marker 'M' should call 'M' for every pointer field in 39421the structure. Fields that are not allocated in GC or are not pointers 39422must be ignored. 39423 39424 For embedded lists (e.g., structures with a 'next' or 'prev' pointer), 39425the marker must follow the chain and mark every element in it. 39426 39427 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *, 39428gt_pointer_operator, void *)' are slightly different. In this case, the 39429operation 'op' must be applied to the _address_ of every pointer field. 39430 3943122.3.1 User-provided marking routines for template types 39432-------------------------------------------------------- 39433 39434When a template type 'TP' is marked with 'GTY', all instances of that 39435type are considered user-provided types. This means that the individual 39436instances of 'TP' do not need to be marked with 'GTY'. The user needs 39437to provide template functions to mark all the fields of the type. 39438 39439 The following code snippets represent all the functions that need to be 39440provided. Note that type 'TP' may reference to more than one type. In 39441these snippets, there is only one type 'T', but there could be more. 39442 39443 template<typename T> 39444 void gt_ggc_mx (TP<T> *tp) 39445 { 39446 extern void gt_ggc_mx (T&); 39447 39448 /* This marks field 'fld' of type 'T'. */ 39449 gt_ggc_mx (tp->fld); 39450 } 39451 39452 template<typename T> 39453 void gt_pch_nx (TP<T> *tp) 39454 { 39455 extern void gt_pch_nx (T&); 39456 39457 /* This marks field 'fld' of type 'T'. */ 39458 gt_pch_nx (tp->fld); 39459 } 39460 39461 template<typename T> 39462 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie) 39463 { 39464 /* For every field 'fld' of 'tp' with type 'T *', call the given 39465 pointer operator. */ 39466 op (&(tp->fld), cookie); 39467 } 39468 39469 template<typename T> 39470 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie) 39471 { 39472 extern void gt_pch_nx (T *, gt_pointer_operator, void *); 39473 39474 /* For every field 'fld' of 'tp' with type 'T', call the pointer 39475 walker for all the fields of T. */ 39476 gt_pch_nx (&(tp->fld), op, cookie); 39477 } 39478 39479 Support for user-defined types is currently limited. The following 39480restrictions apply: 39481 39482 1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'. 39483 39484 2. Type 'TP' can only have type names in its argument list. 39485 39486 3. The pointer walker functions are different for 'TP<T>' and 'TP<T 39487 *>'. In the case of 'TP<T>', references to 'T' must be handled by 39488 calling 'gt_pch_nx' (which will, in turn, walk all the pointers 39489 inside fields of 'T'). In the case of 'TP<T *>', references to 'T 39490 *' must be handled by calling the 'op' function on the address of 39491 the pointer (see the code snippets above). 39492 39493 39494File: gccint.info, Node: GGC Roots, Next: Files, Prev: User GC, Up: Type Information 39495 3949622.4 Marking Roots for the Garbage Collector 39497============================================ 39498 39499In addition to keeping track of types, the type machinery also locates 39500the global variables ("roots") that the garbage collector starts at. 39501Roots must be declared using one of the following syntaxes: 39502 39503 * 'extern GTY(([OPTIONS])) TYPE NAME;' 39504 * 'static GTY(([OPTIONS])) TYPE NAME;' 39505The syntax 39506 * 'GTY(([OPTIONS])) TYPE NAME;' 39507is _not_ accepted. There should be an 'extern' declaration of such a 39508variable in a header somewhere--mark that, not the definition. Or, if 39509the variable is only used in one file, make it 'static'. 39510 39511 39512File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 39513 3951422.5 Source Files Containing Type Information 39515============================================= 39516 39517Whenever you add 'GTY' markers to a source file that previously had 39518none, or create a new source file containing 'GTY' markers, there are 39519three things you need to do: 39520 39521 1. You need to add the file to the list of source files the type 39522 machinery scans. There are four cases: 39523 39524 a. For a back-end file, this is usually done automatically; if 39525 not, you should add it to 'target_gtfiles' in the appropriate 39526 port's entries in 'config.gcc'. 39527 39528 b. For files shared by all front ends, add the filename to the 39529 'GTFILES' variable in 'Makefile.in'. 39530 39531 c. For files that are part of one front end, add the filename to 39532 the 'gtfiles' variable defined in the appropriate 39533 'config-lang.in'. Headers should appear before non-headers in 39534 this list. 39535 39536 d. For files that are part of some but not all front ends, add 39537 the filename to the 'gtfiles' variable of _all_ the front ends 39538 that use it. 39539 39540 2. If the file was a header file, you'll need to check that it's 39541 included in the right place to be visible to the generated files. 39542 For a back-end header file, this should be done automatically. For 39543 a front-end header file, it needs to be included by the same file 39544 that includes 'gtype-LANG.h'. For other header files, it needs to 39545 be included in 'gtype-desc.c', which is a generated file, so add it 39546 to 'ifiles' in 'open_base_file' in 'gengtype.c'. 39547 39548 For source files that aren't header files, the machinery will 39549 generate a header file that should be included in the source file 39550 you just changed. The file will be called 'gt-PATH.h' where PATH 39551 is the pathname relative to the 'gcc' directory with slashes 39552 replaced by -, so for example the header file to be included in 39553 'cp/parser.c' is called 'gt-cp-parser.c'. The generated header 39554 file should be included after everything else in the source file. 39555 Don't forget to mention this file as a dependency in the 39556 'Makefile'! 39557 39558 For language frontends, there is another file that needs to be included 39559somewhere. It will be called 'gtype-LANG.h', where LANG is the name of 39560the subdirectory the language is contained in. 39561 39562 Plugins can add additional root tables. Run the 'gengtype' utility in 39563plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 39564with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H 39565file. The GCC build tree is needed to be present in that mode. 39566 39567 39568File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting, Prev: Files, Up: Type Information 39569 3957022.6 How to invoke the garbage collector 39571======================================== 39572 39573The GCC garbage collector GGC is only invoked explicitly. In contrast 39574with many other garbage collectors, it is not implicitly invoked by 39575allocation routines when a lot of memory has been consumed. So the only 39576way to have GGC reclaim storage is to call the 'ggc_collect' function 39577explicitly. This call is an expensive operation, as it may have to scan 39578the entire heap. Beware that local variables (on the GCC call stack) 39579are not followed by such an invocation (as many other garbage collectors 39580do): you should reference all your data from static or external 'GTY'-ed 39581variables, and it is advised to call 'ggc_collect' with a shallow call 39582stack. The GGC is an exact mark and sweep garbage collector (so it does 39583not scan the call stack for pointers). In practice GCC passes don't 39584often call 'ggc_collect' themselves, because it is called by the pass 39585manager between passes. 39586 39587 At the time of the 'ggc_collect' call all pointers in the GC-marked 39588structures must be valid or 'NULL'. In practice this means that there 39589should not be uninitialized pointer fields in the structures even if 39590your code never reads or writes those fields at a particular instance. 39591One way to ensure this is to use cleared versions of allocators unless 39592all the fields are initialized manually immediately after allocation. 39593 39594 39595File: gccint.info, Node: Troubleshooting, Prev: Invoking the garbage collector, Up: Type Information 39596 3959722.7 Troubleshooting the garbage collector 39598========================================== 39599 39600With the current garbage collector implementation, most issues should 39601show up as GCC compilation errors. Some of the most commonly 39602encountered issues are described below. 39603 39604 * Gengtype does not produce allocators for a 'GTY'-marked type. 39605 Gengtype checks if there is at least one possible path from GC 39606 roots to at least one instance of each type before outputting 39607 allocators. If there is no such path, the 'GTY' markers will be 39608 ignored and no allocators will be output. Solve this by making 39609 sure that there exists at least one such path. If creating it is 39610 unfeasible or raises a "code smell", consider if you really must 39611 use GC for allocating such type. 39612 39613 * Link-time errors about undefined 'gt_ggc_r_foo_bar' and 39614 similarly-named symbols. Check if your 'foo_bar' source file has 39615 '#include "gt-foo_bar.h"' as its very last line. 39616 39617 39618File: gccint.info, Node: Plugins, Next: LTO, Prev: Type Information, Up: Top 39619 3962023 Plugins 39621********** 39622 39623GCC plugins are loadable modules that provide extra features to the 39624compiler. Like GCC itself they can be distributed in source and binary 39625forms. 39626 39627 GCC plugins provide developers with a rich subset of the GCC API to 39628allow them to extend GCC as they see fit. Whether it is writing an 39629additional optimization pass, transforming code, or analyzing 39630information, plugins can be quite useful. 39631 39632* Menu: 39633 39634* Plugins loading:: How can we load plugins. 39635* Plugin API:: The APIs for plugins. 39636* Plugins pass:: How a plugin interact with the pass manager. 39637* Plugins GC:: How a plugin Interact with GCC Garbage Collector. 39638* Plugins description:: Giving information about a plugin itself. 39639* Plugins attr:: Registering custom attributes or pragmas. 39640* Plugins recording:: Recording information about pass execution. 39641* Plugins gate:: Controlling which passes are being run. 39642* Plugins tracking:: Keeping track of available passes. 39643* Plugins building:: How can we build a plugin. 39644 39645 39646File: gccint.info, Node: Plugins loading, Next: Plugin API, Up: Plugins 39647 3964823.1 Loading Plugins 39649==================== 39650 39651Plugins are supported on platforms that support '-ldl -rdynamic'. They 39652are loaded by the compiler using 'dlopen' and invoked at pre-determined 39653locations in the compilation process. 39654 39655 Plugins are loaded with 39656 39657 '-fplugin=/path/to/NAME.so' '-fplugin-arg-NAME-KEY1[=VALUE1]' 39658 39659 The plugin arguments are parsed by GCC and passed to respective plugins 39660as key-value pairs. Multiple plugins can be invoked by specifying 39661multiple '-fplugin' arguments. 39662 39663 A plugin can be simply given by its short name (no dots or slashes). 39664When simply passing '-fplugin=NAME', the plugin is loaded from the 39665'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc 39666-print-file-name=plugin`/NAME.so', using backquote shell syntax to query 39667the 'plugin' directory. 39668 39669 39670File: gccint.info, Node: Plugin API, Next: Plugins pass, Prev: Plugins loading, Up: Plugins 39671 3967223.2 Plugin API 39673=============== 39674 39675Plugins are activated by the compiler at specific events as defined in 39676'gcc-plugin.h'. For each event of interest, the plugin should call 39677'register_callback' specifying the name of the event and address of the 39678callback function that will handle that event. 39679 39680 The header 'gcc-plugin.h' must be the first gcc header to be included. 39681 3968223.2.1 Plugin license check 39683--------------------------- 39684 39685Every plugin should define the global symbol 'plugin_is_GPL_compatible' 39686to assert that it has been licensed under a GPL-compatible license. If 39687this symbol does not exist, the compiler will emit a fatal error and 39688exit with the error message: 39689 39690 fatal error: plugin NAME is not licensed under a GPL-compatible license 39691 NAME: undefined symbol: plugin_is_GPL_compatible 39692 compilation terminated 39693 39694 The declared type of the symbol should be int, to match a forward 39695declaration in 'gcc-plugin.h' that suppresses C++ mangling. It does not 39696need to be in any allocated section, though. The compiler merely 39697asserts that the symbol exists in the global scope. Something like this 39698is enough: 39699 39700 int plugin_is_GPL_compatible; 39701 3970223.2.2 Plugin initialization 39703---------------------------- 39704 39705Every plugin should export a function called 'plugin_init' that is 39706called right after the plugin is loaded. This function is responsible 39707for registering all the callbacks required by the plugin and do any 39708other required initialization. 39709 39710 This function is called from 'compile_file' right before invoking the 39711parser. The arguments to 'plugin_init' are: 39712 39713 * 'plugin_info': Plugin invocation information. 39714 * 'version': GCC version. 39715 39716 The 'plugin_info' struct is defined as follows: 39717 39718 struct plugin_name_args 39719 { 39720 char *base_name; /* Short name of the plugin 39721 (filename without .so suffix). */ 39722 const char *full_name; /* Path to the plugin as specified with 39723 -fplugin=. */ 39724 int argc; /* Number of arguments specified with 39725 -fplugin-arg-.... */ 39726 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 39727 const char *version; /* Version string provided by plugin. */ 39728 const char *help; /* Help string provided by plugin. */ 39729 } 39730 39731 If initialization fails, 'plugin_init' must return a non-zero value. 39732Otherwise, it should return 0. 39733 39734 The version of the GCC compiler loading the plugin is described by the 39735following structure: 39736 39737 struct plugin_gcc_version 39738 { 39739 const char *basever; 39740 const char *datestamp; 39741 const char *devphase; 39742 const char *revision; 39743 const char *configuration_arguments; 39744 }; 39745 39746 The function 'plugin_default_version_check' takes two pointers to such 39747structure and compare them field by field. It can be used by the 39748plugin's 'plugin_init' function. 39749 39750 The version of GCC used to compile the plugin can be found in the 39751symbol 'gcc_version' defined in the header 'plugin-version.h'. The 39752recommended version check to perform looks like 39753 39754 #include "plugin-version.h" 39755 ... 39756 39757 int 39758 plugin_init (struct plugin_name_args *plugin_info, 39759 struct plugin_gcc_version *version) 39760 { 39761 if (!plugin_default_version_check (version, &gcc_version)) 39762 return 1; 39763 39764 } 39765 39766 but you can also check the individual fields if you want a less strict 39767check. 39768 3976923.2.3 Plugin callbacks 39770----------------------- 39771 39772Callback functions have the following prototype: 39773 39774 /* The prototype for a plugin callback function. 39775 gcc_data - event-specific data provided by GCC 39776 user_data - plugin-specific data provided by the plug-in. */ 39777 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 39778 39779 Callbacks can be invoked at the following pre-determined events: 39780 39781 enum plugin_event 39782 { 39783 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 39784 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 39785 PLUGIN_FINISH_DECL, /* After finishing parsing a declaration. */ 39786 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 39787 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 39788 PLUGIN_FINISH, /* Called before GCC exits. */ 39789 PLUGIN_INFO, /* Information about the plugin. */ 39790 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 39791 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 39792 PLUGIN_GGC_END, /* Called at end of GGC. */ 39793 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 39794 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 39795 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 39796 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 39797 /* Called before first pass from all_passes. */ 39798 PLUGIN_ALL_PASSES_START, 39799 /* Called after last pass from all_passes. */ 39800 PLUGIN_ALL_PASSES_END, 39801 /* Called before first ipa pass. */ 39802 PLUGIN_ALL_IPA_PASSES_START, 39803 /* Called after last ipa pass. */ 39804 PLUGIN_ALL_IPA_PASSES_END, 39805 /* Allows to override pass gate decision for current_pass. */ 39806 PLUGIN_OVERRIDE_GATE, 39807 /* Called before executing a pass. */ 39808 PLUGIN_PASS_EXECUTION, 39809 /* Called before executing subpasses of a GIMPLE_PASS in 39810 execute_ipa_pass_list. */ 39811 PLUGIN_EARLY_GIMPLE_PASSES_START, 39812 /* Called after executing subpasses of a GIMPLE_PASS in 39813 execute_ipa_pass_list. */ 39814 PLUGIN_EARLY_GIMPLE_PASSES_END, 39815 /* Called when a pass is first instantiated. */ 39816 PLUGIN_NEW_PASS, 39817 /* Called when a file is #include-d or given via the #line directive. 39818 This could happen many times. The event data is the included file path, 39819 as a const char* pointer. */ 39820 PLUGIN_INCLUDE_FILE, 39821 39822 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 39823 array. */ 39824 }; 39825 39826 In addition, plugins can also look up the enumerator of a named event, 39827and / or generate new events dynamically, by calling the function 39828'get_named_event_id'. 39829 39830 To register a callback, the plugin calls 'register_callback' with the 39831arguments: 39832 39833 * 'char *name': Plugin name. 39834 * 'int event': The event code. 39835 * 'plugin_callback_func callback': The function that handles 'event'. 39836 * 'void *user_data': Pointer to plugin-specific data. 39837 39838 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and 39839PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null, 39840and the 'user_data' is specific. 39841 39842 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data 39843from GCC), plugins may register their own pragmas. Notice that pragmas 39844are not available from 'lto1', so plugins used with '-flto' option to 39845GCC during link-time optimization cannot use pragmas and do not even see 39846functions like 'c_register_pragma' or 'pragma_lex'. 39847 39848 The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC 39849data, is triggered for processing of '#include' or '#line' directives. 39850 39851 The PLUGIN_FINISH event is the last time that plugins can call GCC 39852functions, notably emit diagnostics with 'warning', 'error' etc. 39853 39854 39855File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, Up: Plugins 39856 3985723.3 Interacting with the pass manager 39858====================================== 39859 39860There needs to be a way to add/reorder/remove passes dynamically. This 39861is useful for both analysis plugins (plugging in after a certain pass 39862such as CFG or an IPA pass) and optimization plugins. 39863 39864 Basic support for inserting new passes or replacing existing passes is 39865provided. A plugin registers a new pass with GCC by calling 39866'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a 39867pointer to a 'struct register_pass_info' object defined as follows 39868 39869 enum pass_positioning_ops 39870 { 39871 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 39872 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 39873 PASS_POS_REPLACE // Replace the reference pass. 39874 }; 39875 39876 struct register_pass_info 39877 { 39878 struct opt_pass *pass; /* New pass provided by the plugin. */ 39879 const char *reference_pass_name; /* Name of the reference pass for hooking 39880 up the new pass. */ 39881 int ref_pass_instance_number; /* Insert the pass at the specified 39882 instance number of the reference pass. */ 39883 /* Do it for every instance if it is 0. */ 39884 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 39885 }; 39886 39887 39888 /* Sample plugin code that registers a new pass. */ 39889 int 39890 plugin_init (struct plugin_name_args *plugin_info, 39891 struct plugin_gcc_version *version) 39892 { 39893 struct register_pass_info pass_info; 39894 39895 ... 39896 39897 /* Code to fill in the pass_info object with new pass information. */ 39898 39899 ... 39900 39901 /* Register the new pass. */ 39902 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 39903 39904 ... 39905 } 39906 39907 39908File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins pass, Up: Plugins 39909 3991023.4 Interacting with the GCC Garbage Collector 39911=============================================== 39912 39913Some plugins may want to be informed when GGC (the GCC Garbage 39914Collector) is running. They can register callbacks for the 39915'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback 39916is called with a null 'gcc_data') to be notified of the start or end of 39917the GCC garbage collection. 39918 39919 Some plugins may need to have GGC mark additional data. This can be 39920done by registering a callback (called with a null 'gcc_data') for the 39921'PLUGIN_GGC_MARKING' event. Such callbacks can call the 'ggc_set_mark' 39922routine, preferably through the 'ggc_mark' macro (and conversely, these 39923routines should usually not be used in plugins outside of the 39924'PLUGIN_GGC_MARKING' event). Plugins that wish to hold weak references 39925to gc data may also use this event to drop weak references when the 39926object is about to be collected. The 'ggc_marked_p' function can be 39927used to tell if an object is marked, or is about to be collected. The 39928'gt_clear_cache' overloads which some types define may also be of use in 39929managing weak references. 39930 39931 Some plugins may need to add extra GGC root tables, e.g. to handle 39932their own 'GTY'-ed data. This can be done with the 39933'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 39934extra root table (of type 'struct ggc_root_tab*') as 'user_data'. 39935Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 39936generates these extra root tables. 39937 39938 You should understand the details of memory management inside GCC 39939before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'. 39940 39941 39942File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugins GC, Up: Plugins 39943 3994423.5 Giving information about a plugin 39945====================================== 39946 39947A plugin should give some information to the user about itself. This 39948uses the following structure: 39949 39950 struct plugin_info 39951 { 39952 const char *version; 39953 const char *help; 39954 }; 39955 39956 Such a structure is passed as the 'user_data' by the plugin's init 39957routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event 39958and a null callback. 39959 39960 39961File: gccint.info, Node: Plugins attr, Next: Plugins recording, Prev: Plugins description, Up: Plugins 39962 3996323.6 Registering custom attributes or pragmas 39964============================================= 39965 39966For analysis (or other) purposes it is useful to be able to add custom 39967attributes or pragmas. 39968 39969 The 'PLUGIN_ATTRIBUTES' callback is called during attribute 39970registration. Use the 'register_attribute' function to register custom 39971attributes. 39972 39973 /* Attribute handler callback */ 39974 static tree 39975 handle_user_attribute (tree *node, tree name, tree args, 39976 int flags, bool *no_add_attrs) 39977 { 39978 return NULL_TREE; 39979 } 39980 39981 /* Attribute definition */ 39982 static struct attribute_spec user_attr = 39983 { "user", 1, 1, false, false, false, handle_user_attribute, false }; 39984 39985 /* Plugin callback called during attribute registration. 39986 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 39987 */ 39988 static void 39989 register_attributes (void *event_data, void *data) 39990 { 39991 warning (0, G_("Callback to register attributes")); 39992 register_attribute (&user_attr); 39993 } 39994 39995 39996 The PLUGIN_PRAGMAS callback is called once during pragmas registration. 39997Use the 'c_register_pragma', 'c_register_pragma_with_data', 39998'c_register_pragma_with_expansion', 39999'c_register_pragma_with_expansion_and_data' functions to register custom 40000pragmas and their handlers (which often want to call 'pragma_lex') from 40001'c-family/c-pragma.h'. 40002 40003 /* Plugin callback called during pragmas registration. Registered with 40004 register_callback (plugin_name, PLUGIN_PRAGMAS, 40005 register_my_pragma, NULL); 40006 */ 40007 static void 40008 register_my_pragma (void *event_data, void *data) 40009 { 40010 warning (0, G_("Callback to register pragmas")); 40011 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 40012 } 40013 40014 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your 40015plugin) as the "space" argument of your pragma. 40016 40017 Pragmas registered with 'c_register_pragma_with_expansion' or 40018'c_register_pragma_with_expansion_and_data' support preprocessor 40019expansions. For example: 40020 40021 #define NUMBER 10 40022 #pragma GCCPLUGIN foothreshold (NUMBER) 40023 40024 40025File: gccint.info, Node: Plugins recording, Next: Plugins gate, Prev: Plugins attr, Up: Plugins 40026 4002723.7 Recording information about pass execution 40028=============================================== 40029 40030The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 40031(the same as current_pass) as 'gcc_data' to the callback. You can also 40032inspect cfun to find out about which function this pass is executed for. 40033Note that this event will only be invoked if the gate check (if 40034applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 40035other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END', 40036'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END', 40037'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 40038'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 40039plugin(s) in order to get context for the pass execution. 40040 40041 40042File: gccint.info, Node: Plugins gate, Next: Plugins tracking, Prev: Plugins recording, Up: Plugins 40043 4004423.8 Controlling which passes are being run 40045=========================================== 40046 40047After the original gate function for a pass is called, its result - the 40048gate status - is stored as an integer. Then the event 40049'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 40050the 'gcc_data' parameter to the callback function. A nonzero value of 40051the gate status means that the pass is to be executed. You can both 40052read and write the gate status via the passed pointer. 40053 40054 40055File: gccint.info, Node: Plugins tracking, Next: Plugins building, Prev: Plugins gate, Up: Plugins 40056 4005723.9 Keeping track of available passes 40058====================================== 40059 40060When your plugin is loaded, you can inspect the various pass lists to 40061determine what passes are available. However, other plugins might add 40062new passes. Also, future changes to GCC might cause generic passes to 40063be added after plugin loading. When a pass is first added to one of the 40064pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback 40065parameter 'gcc_data' pointing to the new pass. 40066 40067 40068File: gccint.info, Node: Plugins building, Prev: Plugins tracking, Up: Plugins 40069 4007023.10 Building GCC plugins 40071========================== 40072 40073If plugins are enabled, GCC installs the headers needed to build a 40074plugin (somewhere in the installation tree, e.g. under '/usr/local'). 40075In particular a 'plugin/include' directory is installed, containing all 40076the header files needed to build plugins. 40077 40078 On most systems, you can query this 'plugin' directory by invoking 'gcc 40079-print-file-name=plugin' (replace if needed 'gcc' with the appropriate 40080program path). 40081 40082 Inside plugins, this 'plugin' directory name can be queried by calling 40083'default_plugin_dir_name ()'. 40084 40085 Plugins may know, when they are compiled, the GCC version for which 40086'plugin-version.h' is provided. The constant macros 40087'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR', 40088'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers, 40089so a plugin could ensure it is built for GCC 4.7 with 40090 #if GCCPLUGIN_VERSION != 4007 40091 #error this GCC plugin is for GCC 4.7 40092 #endif 40093 40094 The following GNU Makefile excerpt shows how to build a simple plugin: 40095 40096 HOST_GCC=g++ 40097 TARGET_GCC=gcc 40098 PLUGIN_SOURCE_FILES= plugin1.c plugin2.cc 40099 GCCPLUGINS_DIR:= $(shell $(TARGET_GCC) -print-file-name=plugin) 40100 CXXFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -fno-rtti -O2 40101 40102 plugin.so: $(PLUGIN_SOURCE_FILES) 40103 $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@ 40104 40105 A single source file plugin may be built with 'g++ -I`gcc 40106-print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.c -o 40107plugin.so', using backquote shell syntax to query the 'plugin' 40108directory. 40109 40110 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and 40111'gtype.state' have the same version as the GCC for which the plugin is 40112built. 40113 40114 40115File: gccint.info, Node: LTO, Next: Match and Simplify, Prev: Plugins, Up: Top 40116 4011724 Link Time Optimization 40118************************* 40119 40120Link Time Optimization (LTO) gives GCC the capability of dumping its 40121internal representation (GIMPLE) to disk, so that all the different 40122compilation units that make up a single executable can be optimized as a 40123single module. This expands the scope of inter-procedural optimizations 40124to encompass the whole program (or, rather, everything that is visible 40125at link time). 40126 40127* Menu: 40128 40129* LTO Overview:: Overview of LTO. 40130* LTO object file layout:: LTO file sections in ELF. 40131* IPA:: Using summary information in IPA passes. 40132* WHOPR:: Whole program assumptions, 40133 linker plugin and symbol visibilities. 40134* Internal flags:: Internal flags controlling 'lto1'. 40135 40136 40137File: gccint.info, Node: LTO Overview, Next: LTO object file layout, Up: LTO 40138 4013924.1 Design Overview 40140==================== 40141 40142Link time optimization is implemented as a GCC front end for a bytecode 40143representation of GIMPLE that is emitted in special sections of '.o' 40144files. Currently, LTO support is enabled in most ELF-based systems, as 40145well as darwin, cygwin and mingw systems. 40146 40147 Since GIMPLE bytecode is saved alongside final object code, object 40148files generated with LTO support are larger than regular object files. 40149This "fat" object format makes it easy to integrate LTO into existing 40150build systems, as one can, for instance, produce archives of the files. 40151Additionally, one might be able to ship one set of fat objects which 40152could be used both for development and the production of optimized 40153builds. A, perhaps surprising, side effect of this feature is that any 40154mistake in the toolchain leads to LTO information not being used (e.g. 40155an older 'libtool' calling 'ld' directly). This is both an advantage, 40156as the system is more robust, and a disadvantage, as the user is not 40157informed that the optimization has been disabled. 40158 40159 The current implementation only produces "fat" objects, effectively 40160doubling compilation time and increasing file sizes up to 5x the 40161original size. This hides the problem that some tools, such as 'ar' and 40162'nm', need to understand symbol tables of LTO sections. These tools 40163were extended to use the plugin infrastructure, and with these problems 40164solved, GCC will also support "slim" objects consisting of the 40165intermediate code alone. 40166 40167 At the highest level, LTO splits the compiler in two. The first half 40168(the "writer") produces a streaming representation of all the internal 40169data structures needed to optimize and generate code. This includes 40170declarations, types, the callgraph and the GIMPLE representation of 40171function bodies. 40172 40173 When '-flto' is given during compilation of a source file, the pass 40174manager executes all the passes in 'all_lto_gen_passes'. Currently, 40175this phase is composed of two IPA passes: 40176 40177 * 'pass_ipa_lto_gimple_out' This pass executes the function 40178 'lto_output' in 'lto-streamer-out.c', which traverses the call 40179 graph encoding every reachable declaration, type and function. 40180 This generates a memory representation of all the file sections 40181 described below. 40182 40183 * 'pass_ipa_lto_finish_out' This pass executes the function 40184 'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the 40185 memory image built in the previous pass and encodes it in the 40186 corresponding ELF file sections. 40187 40188 The second half of LTO support is the "reader". This is implemented as 40189the GCC front end 'lto1' in 'lto/lto.c'. When 'collect2' detects a link 40190set of '.o'/'.a' files with LTO information and the '-flto' is enabled, 40191it invokes 'lto1' which reads the set of files and aggregates them into 40192a single translation unit for optimization. The main entry point for 40193the reader is 'lto/lto.c':'lto_main'. 40194 4019524.1.1 LTO modes of operation 40196----------------------------- 40197 40198One of the main goals of the GCC link-time infrastructure was to allow 40199effective compilation of large programs. For this reason GCC implements 40200two link-time compilation modes. 40201 40202 1. _LTO mode_, in which the whole program is read into the compiler at 40203 link-time and optimized in a similar way as if it were a single 40204 source-level compilation unit. 40205 40206 2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs 40207 and/or a distributed compilation environment to quickly link large 40208 applications. WHOPR stands for WHOle Program optimizeR (not to be 40209 confused with the semantics of '-fwhole-program'). It partitions 40210 the aggregated callgraph from many different '.o' files and 40211 distributes the compilation of the sub-graphs to different CPUs. 40212 40213 Note that distributed compilation is not implemented yet, but since 40214 the parallelism is facilitated via generating a 'Makefile', it 40215 would be easy to implement. 40216 40217 WHOPR splits LTO into three main stages: 40218 1. Local generation (LGEN) This stage executes in parallel. Every 40219 file in the program is compiled into the intermediate language and 40220 packaged together with the local call-graph and summary 40221 information. This stage is the same for both the LTO and WHOPR 40222 compilation mode. 40223 40224 2. Whole Program Analysis (WPA) WPA is performed sequentially. The 40225 global call-graph is generated, and a global analysis procedure 40226 makes transformation decisions. The global call-graph is 40227 partitioned to facilitate parallel optimization during phase 3. 40228 The results of the WPA stage are stored into new object files which 40229 contain the partitions of program expressed in the intermediate 40230 language and the optimization decisions. 40231 40232 3. Local transformations (LTRANS) This stage executes in parallel. 40233 All the decisions made during phase 2 are implemented locally in 40234 each partitioned object file, and the final object code is 40235 generated. Optimizations which cannot be decided efficiently 40236 during the phase 2 may be performed on the local call-graph 40237 partitions. 40238 40239 WHOPR can be seen as an extension of the usual LTO mode of compilation. 40240In LTO, WPA and LTRANS are executed within a single execution of the 40241compiler, after the whole program has been read into memory. 40242 40243 When compiling in WHOPR mode, the callgraph is partitioned during the 40244WPA stage. The whole program is split into a given number of partitions 40245of roughly the same size. The compiler tries to minimize the number of 40246references which cross partition boundaries. The main advantage of 40247WHOPR is to allow the parallel execution of LTRANS stages, which are the 40248most time-consuming part of the compilation process. Additionally, it 40249avoids the need to load the whole program into memory. 40250 40251 40252File: gccint.info, Node: LTO object file layout, Next: IPA, Prev: LTO Overview, Up: LTO 40253 4025424.2 LTO file sections 40255====================== 40256 40257LTO information is stored in several ELF sections inside object files. 40258Data structures and enum codes for sections are defined in 40259'lto-streamer.h'. 40260 40261 These sections are emitted from 'lto-streamer-out.c' and mapped in all 40262at once from 'lto/lto.c':'lto_file_read'. The individual functions 40263dealing with the reading/writing of each section are described below. 40264 40265 * Command line options ('.gnu.lto_.opts') 40266 40267 This section contains the command line options used to generate the 40268 object files. This is used at link time to determine the 40269 optimization level and other settings when they are not explicitly 40270 specified at the linker command line. 40271 40272 Currently, GCC does not support combining LTO object files compiled 40273 with different set of the command line options into a single 40274 binary. At link time, the options given on the command line and 40275 the options saved on all the files in a link-time set are applied 40276 globally. No attempt is made at validating the combination of 40277 flags (other than the usual validation done by option processing). 40278 This is implemented in 'lto/lto.c':'lto_read_all_file_options'. 40279 40280 * Symbol table ('.gnu.lto_.symtab') 40281 40282 This table replaces the ELF symbol table for functions and 40283 variables represented in the LTO IL. Symbols used and exported by 40284 the optimized assembly code of "fat" objects might not match the 40285 ones used and exported by the intermediate code. This table is 40286 necessary because the intermediate code is less optimized and thus 40287 requires a separate symbol table. 40288 40289 Additionally, the binary code in the "fat" object will lack a call 40290 to a function, since the call was optimized out at compilation time 40291 after the intermediate language was streamed out. In some special 40292 cases, the same optimization may not happen during link-time 40293 optimization. This would lead to an undefined symbol if only one 40294 symbol table was used. 40295 40296 The symbol table is emitted in 40297 'lto-streamer-out.c':'produce_symtab'. 40298 40299 * Global declarations and types ('.gnu.lto_.decls') 40300 40301 This section contains an intermediate language dump of all 40302 declarations and types required to represent the callgraph, static 40303 variables and top-level debug info. 40304 40305 The contents of this section are emitted in 40306 'lto-streamer-out.c':'produce_asm_for_decls'. Types and symbols 40307 are emitted in a topological order that preserves the sharing of 40308 pointers when the file is read back in 40309 ('lto.c':'read_cgraph_and_symbols'). 40310 40311 * The callgraph ('.gnu.lto_.cgraph') 40312 40313 This section contains the basic data structure used by the GCC 40314 inter-procedural optimization infrastructure. This section stores 40315 an annotated multi-graph which represents the functions and call 40316 sites as well as the variables, aliases and top-level 'asm' 40317 statements. 40318 40319 This section is emitted in 'lto-streamer-out.c':'output_cgraph' and 40320 read in 'lto-cgraph.c':'input_cgraph'. 40321 40322 * IPA references ('.gnu.lto_.refs') 40323 40324 This section contains references between function and static 40325 variables. It is emitted by 'lto-cgraph.c':'output_refs' and read 40326 by 'lto-cgraph.c':'input_refs'. 40327 40328 * Function bodies ('.gnu.lto_.function_body.<name>') 40329 40330 This section contains function bodies in the intermediate language 40331 representation. Every function body is in a separate section to 40332 allow copying of the section independently to different object 40333 files or reading the function on demand. 40334 40335 Functions are emitted in 'lto-streamer-out.c':'output_function' and 40336 read in 'lto-streamer-in.c':'input_function'. 40337 40338 * Static variable initializers ('.gnu.lto_.vars') 40339 40340 This section contains all the symbols in the global variable pool. 40341 It is emitted by 'lto-cgraph.c':'output_varpool' and read in 40342 'lto-cgraph.c':'input_cgraph'. 40343 40344 * Summaries and optimization summaries used by IPA passes 40345 ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst' 40346 or 'reference') 40347 40348 These sections are used by IPA passes that need to emit summary 40349 information during LTO generation to be read and aggregated at link 40350 time. Each pass is responsible for implementing two pass manager 40351 hooks: one for writing the summary and another for reading it in. 40352 The format of these sections is entirely up to each individual 40353 pass. The only requirement is that the writer and reader hooks 40354 agree on the format. 40355 40356 40357File: gccint.info, Node: IPA, Next: WHOPR, Prev: LTO object file layout, Up: LTO 40358 4035924.3 Using summary information in IPA passes 40360============================================ 40361 40362Programs are represented internally as a _callgraph_ (a multi-graph 40363where nodes are functions and edges are call sites) and a _varpool_ (a 40364list of static and external variables in the program). 40365 40366 The inter-procedural optimization is organized as a sequence of 40367individual passes, which operate on the callgraph and the varpool. To 40368make the implementation of WHOPR possible, every inter-procedural 40369optimization pass is split into several stages that are executed at 40370different times during WHOPR compilation: 40371 40372 * LGEN time 40373 1. _Generate summary_ ('generate_summary' in 'struct 40374 ipa_opt_pass_d'). This stage analyzes every function body and 40375 variable initializer is examined and stores relevant 40376 information into a pass-specific data structure. 40377 40378 2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d'). 40379 This stage writes all the pass-specific information generated 40380 by 'generate_summary'. Summaries go into their own 40381 'LTO_section_*' sections that have to be declared in 40382 'lto-streamer.h':'enum lto_section_type'. A new section is 40383 created by calling 'create_output_block' and data can be 40384 written using the 'lto_output_*' routines. 40385 40386 * WPA time 40387 1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d'). 40388 This stage reads all the pass-specific information in exactly 40389 the same order that it was written by 'write_summary'. 40390 40391 2. _Execute_ ('execute' in 'struct opt_pass'). This performs 40392 inter-procedural propagation. This must be done without 40393 actual access to the individual function bodies or variable 40394 initializers. Typically, this results in a transitive closure 40395 operation over the summary information of all the nodes in the 40396 callgraph. 40397 40398 3. _Write optimization summary_ ('write_optimization_summary' in 40399 'struct ipa_opt_pass_d'). This writes the result of the 40400 inter-procedural propagation into the object file. This can 40401 use the same data structures and helper routines used in 40402 'write_summary'. 40403 40404 * LTRANS time 40405 1. _Read optimization summary_ ('read_optimization_summary' in 40406 'struct ipa_opt_pass_d'). The counterpart to 40407 'write_optimization_summary'. This reads the interprocedural 40408 optimization decisions in exactly the same format emitted by 40409 'write_optimization_summary'. 40410 40411 2. _Transform_ ('function_transform' and 'variable_transform' in 40412 'struct ipa_opt_pass_d'). The actual function bodies and 40413 variable initializers are updated based on the information 40414 passed down from the _Execute_ stage. 40415 40416 The implementation of the inter-procedural passes are shared between 40417LTO, WHOPR and classic non-LTO compilation. 40418 40419 * During the traditional file-by-file mode every pass executes its 40420 own _Generate summary_, _Execute_, and _Transform_ stages within 40421 the single execution context of the compiler. 40422 40423 * In LTO compilation mode, every pass uses _Generate summary_ and 40424 _Write summary_ stages at compilation time, while the _Read 40425 summary_, _Execute_, and _Transform_ stages are executed at link 40426 time. 40427 40428 * In WHOPR mode all stages are used. 40429 40430 To simplify development, the GCC pass manager differentiates between 40431normal inter-procedural passes and small inter-procedural passes. A 40432_small inter-procedural pass_ ('SIMPLE_IPA_PASS') is a pass that does 40433everything at once and thus it can not be executed during WPA in WHOPR 40434mode. It defines only the _Execute_ stage and during this stage it 40435accesses and modifies the function bodies. Such passes are useful for 40436optimization at LGEN or LTRANS time and are used, for example, to 40437implement early optimization before writing object files. The simple 40438inter-procedural passes can also be used for easier prototyping and 40439development of a new inter-procedural pass. 40440 4044124.3.1 Virtual clones 40442--------------------- 40443 40444One of the main challenges of introducing the WHOPR compilation mode was 40445addressing the interactions between optimization passes. In LTO 40446compilation mode, the passes are executed in a sequence, each of which 40447consists of analysis (or _Generate summary_), propagation (or _Execute_) 40448and _Transform_ stages. Once the work of one pass is finished, the next 40449pass sees the updated program representation and can execute. This 40450makes the individual passes dependent on each other. 40451 40452 In WHOPR mode all passes first execute their _Generate summary_ stage. 40453Then summary writing marks the end of the LGEN stage. At WPA time, the 40454summaries are read back into memory and all passes run the _Execute_ 40455stage. Optimization summaries are streamed and sent to LTRANS, where 40456all the passes execute the _Transform_ stage. 40457 40458 Most optimization passes split naturally into analysis, propagation and 40459transformation stages. But some do not. The main problem arises when 40460one pass performs changes and the following pass gets confused by seeing 40461different callgraphs between the _Transform_ stage and the _Generate 40462summary_ or _Execute_ stage. This means that the passes are required to 40463communicate their decisions with each other. 40464 40465 To facilitate this communication, the GCC callgraph infrastructure 40466implements _virtual clones_, a method of representing the changes 40467performed by the optimization passes in the callgraph without needing to 40468update function bodies. 40469 40470 A _virtual clone_ in the callgraph is a function that has no associated 40471body, just a description of how to create its body based on a different 40472function (which itself may be a virtual clone). 40473 40474 The description of function modifications includes adjustments to the 40475function's signature (which allows, for example, removing or adding 40476function arguments), substitutions to perform on the function body, and, 40477for inlined functions, a pointer to the function that it will be inlined 40478into. 40479 40480 It is also possible to redirect any edge of the callgraph from a 40481function to its virtual clone. This implies updating of the call site 40482to adjust for the new function signature. 40483 40484 Most of the transformations performed by inter-procedural optimizations 40485can be represented via virtual clones. For instance, a constant 40486propagation pass can produce a virtual clone of the function which 40487replaces one of its arguments by a constant. The inliner can represent 40488its decisions by producing a clone of a function whose body will be 40489later integrated into a given function. 40490 40491 Using _virtual clones_, the program can be easily updated during the 40492_Execute_ stage, solving most of pass interactions problems that would 40493otherwise occur during _Transform_. 40494 40495 Virtual clones are later materialized in the LTRANS stage and turned 40496into real functions. Passes executed after the virtual clone were 40497introduced also perform their _Transform_ stage on new functions, so for 40498a pass there is no significant difference between operating on a real 40499function or a virtual clone introduced before its _Execute_ stage. 40500 40501 Optimization passes then work on virtual clones introduced before their 40502_Execute_ stage as if they were real functions. The only difference is 40503that clones are not visible during the _Generate Summary_ stage. 40504 40505 To keep function summaries updated, the callgraph interface allows an 40506optimizer to register a callback that is called every time a new clone 40507is introduced as well as when the actual function or variable is 40508generated or when a function or variable is removed. These hooks are 40509registered in the _Generate summary_ stage and allow the pass to keep 40510its information intact until the _Execute_ stage. The same hooks can 40511also be registered during the _Execute_ stage to keep the optimization 40512summaries updated for the _Transform_ stage. 40513 4051424.3.2 IPA references 40515--------------------- 40516 40517GCC represents IPA references in the callgraph. For a function or 40518variable 'A', the _IPA reference_ is a list of all locations where the 40519address of 'A' is taken and, when 'A' is a variable, a list of all 40520direct stores and reads to/from 'A'. References represent an oriented 40521multi-graph on the union of nodes of the callgraph and the varpool. See 40522'ipa-reference.c':'ipa_reference_write_optimization_summary' and 40523'ipa-reference.c':'ipa_reference_read_optimization_summary' for details. 40524 4052524.3.3 Jump functions 40526--------------------- 40527 40528Suppose that an optimization pass sees a function 'A' and it knows the 40529values of (some of) its arguments. The _jump function_ describes the 40530value of a parameter of a given function call in function 'A' based on 40531this knowledge. 40532 40533 Jump functions are used by several optimizations, such as the 40534inter-procedural constant propagation pass and the devirtualization 40535pass. The inliner also uses jump functions to perform inlining of 40536callbacks. 40537 40538 40539File: gccint.info, Node: WHOPR, Next: Internal flags, Prev: IPA, Up: LTO 40540 4054124.4 Whole program assumptions, linker plugin and symbol visibilities 40542===================================================================== 40543 40544Link-time optimization gives relatively minor benefits when used alone. 40545The problem is that propagation of inter-procedural information does not 40546work well across functions and variables that are called or referenced 40547by other compilation units (such as from a dynamically linked library). 40548We say that such functions and variables are _externally visible_. 40549 40550 To make the situation even more difficult, many applications organize 40551themselves as a set of shared libraries, and the default ELF visibility 40552rules allow one to overwrite any externally visible symbol with a 40553different symbol at runtime. This basically disables any optimizations 40554across such functions and variables, because the compiler cannot be sure 40555that the function body it is seeing is the same function body that will 40556be used at runtime. Any function or variable not declared 'static' in 40557the sources degrades the quality of inter-procedural optimization. 40558 40559 To avoid this problem the compiler must assume that it sees the whole 40560program when doing link-time optimization. Strictly speaking, the whole 40561program is rarely visible even at link-time. Standard system libraries 40562are usually linked dynamically or not provided with the link-time 40563information. In GCC, the whole program option ('-fwhole-program') 40564asserts that every function and variable defined in the current 40565compilation unit is static, except for function 'main' (note: at link 40566time, the current unit is the union of all objects compiled with LTO). 40567Since some functions and variables need to be referenced externally, for 40568example by another DSO or from an assembler file, GCC also provides the 40569function and variable attribute 'externally_visible' which can be used 40570to disable the effect of '-fwhole-program' on a specific symbol. 40571 40572 The whole program mode assumptions are slightly more complex in C++, 40573where inline functions in headers are put into _COMDAT_ sections. 40574COMDAT function and variables can be defined by multiple object files 40575and their bodies are unified at link-time and dynamic link-time. COMDAT 40576functions are changed to local only when their address is not taken and 40577thus un-sharing them with a library is not harmful. COMDAT variables 40578always remain externally visible, however for readonly variables it is 40579assumed that their initializers cannot be overwritten by a different 40580value. 40581 40582 GCC provides the function and variable attribute 'visibility' that can 40583be used to specify the visibility of externally visible symbols (or 40584alternatively an '-fdefault-visibility' command line option). ELF 40585defines the 'default', 'protected', 'hidden' and 'internal' 40586visibilities. 40587 40588 The most commonly used is visibility is 'hidden'. It specifies that 40589the symbol cannot be referenced from outside of the current shared 40590library. Unfortunately, this information cannot be used directly by the 40591link-time optimization in the compiler since the whole shared library 40592also might contain non-LTO objects and those are not visible to the 40593compiler. 40594 40595 GCC solves this problem using linker plugins. A _linker plugin_ is an 40596interface to the linker that allows an external program to claim the 40597ownership of a given object file. The linker then performs the linking 40598procedure by querying the plugin about the symbol table of the claimed 40599objects and once the linking decisions are complete, the plugin is 40600allowed to provide the final object file before the actual linking is 40601made. The linker plugin obtains the symbol resolution information which 40602specifies which symbols provided by the claimed objects are bound from 40603the rest of a binary being linked. 40604 40605 Currently, the linker plugin works only in combination with the Gold 40606linker, but a GNU ld implementation is under development. 40607 40608 GCC is designed to be independent of the rest of the toolchain and aims 40609to support linkers without plugin support. For this reason it does not 40610use the linker plugin by default. Instead, the object files are 40611examined by 'collect2' before being passed to the linker and objects 40612found to have LTO sections are passed to 'lto1' first. This mode does 40613not work for library archives. The decision on what object files from 40614the archive are needed depends on the actual linking and thus GCC would 40615have to implement the linker itself. The resolution information is 40616missing too and thus GCC needs to make an educated guess based on 40617'-fwhole-program'. Without the linker plugin GCC also assumes that 40618symbols are declared 'hidden' and not referred by non-LTO code by 40619default. 40620 40621 40622File: gccint.info, Node: Internal flags, Prev: WHOPR, Up: LTO 40623 4062424.5 Internal flags controlling 'lto1' 40625====================================== 40626 40627The following flags are passed into 'lto1' and are not meant to be used 40628directly from the command line. 40629 40630 * -fwpa This option runs the serial part of the link-time optimizer 40631 performing the inter-procedural propagation (WPA mode). The 40632 compiler reads in summary information from all inputs and performs 40633 an analysis based on summary information only. It generates object 40634 files for subsequent runs of the link-time optimizer where 40635 individual object files are optimized using both summary 40636 information from the WPA mode and the actual function bodies. It 40637 then drives the LTRANS phase. 40638 40639 * -fltrans This option runs the link-time optimizer in the 40640 local-transformation (LTRANS) mode, which reads in output from a 40641 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 40642 optimizes an object and produces the final assembly. 40643 40644 * -fltrans-output-list=FILE This option specifies a file to which the 40645 names of LTRANS output files are written. This option is only 40646 meaningful in conjunction with '-fwpa'. 40647 40648 * -fresolution=FILE This option specifies the linker resolution file. 40649 This option is only meaningful in conjunction with '-fwpa' and as 40650 option to pass through to the LTO linker plugin. 40651 40652 40653File: gccint.info, Node: Match and Simplify, Next: Funding, Prev: LTO, Up: Top 40654 4065525 Match and Simplify 40656********************* 40657 40658The GIMPLE and GENERIC pattern matching project match-and-simplify tries 40659to address several issues. 40660 40661 1. unify expression simplifications currently spread and duplicated 40662 over separate files like fold-const.c, gimple-fold.c and builtins.c 40663 2. allow for a cheap way to implement building and simplifying 40664 non-trivial GIMPLE expressions, avoiding the need to go through 40665 building and simplifying GENERIC via fold_buildN and then 40666 gimplifying via force_gimple_operand 40667 40668 To address these the project introduces a simple domain specific 40669language to write expression simplifications from which code targeting 40670GIMPLE and GENERIC is auto-generated. The GENERIC variant follows the 40671fold_buildN API while for the GIMPLE variant and to address 2) new APIs 40672are introduced. 40673 40674* Menu: 40675 40676* GIMPLE API:: 40677* The Language:: 40678 40679 40680File: gccint.info, Node: GIMPLE API, Next: The Language, Up: Match and Simplify 40681 4068225.1 GIMPLE API 40683=============== 40684 40685 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 40686 gimple_seq *, tree (*)(tree)) 40687 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 40688 tree, gimple_seq *, tree (*)(tree)) 40689 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 40690 tree, tree, gimple_seq *, tree (*)(tree)) 40691 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 40692 tree, gimple_seq *, tree (*)(tree)) 40693 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 40694 tree, tree, gimple_seq *, tree (*)(tree)) 40695 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 40696 tree, tree, gimple_seq *, tree (*)(tree)) 40697 The main GIMPLE API entry to the expression simplifications 40698 mimicing that of the GENERIC fold_{unary,binary,ternary} functions. 40699 40700 thus providing n-ary overloads for operation or function. The 40701additional arguments are a gimple_seq where built statements are 40702inserted on (if 'NULL' then simplifications requiring new statements are 40703not performed) and a valueization hook that can be used to tie 40704simplifications to a SSA lattice. 40705 40706 In addition to those APIs 'fold_stmt' is overloaded with a valueization 40707hook: 40708 40709 -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree)); 40710 40711 Ontop of these a 'fold_buildN'-like API for GIMPLE is introduced: 40712 40713 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 40714 tree_code, tree, tree, tree (*valueize) (tree) = NULL); 40715 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 40716 tree_code, tree, tree, tree, tree (*valueize) (tree) = NULL); 40717 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 40718 tree_code, tree, tree, tree, tree, tree (*valueize) (tree) = 40719 NULL); 40720 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 40721 built_in_function, tree, tree, tree (*valueize) (tree) = 40722 NULL); 40723 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 40724 built_in_function, tree, tree, tree, tree (*valueize) (tree) = 40725 NULL); 40726 -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t, 40727 tree, tree); 40728 40729 which is supposed to replace 'force_gimple_operand (fold_buildN (...), 40730...)' and calls to 'fold_convert'. Overloads without the 'location_t' 40731argument exist. Built statements are inserted on the provided sequence 40732and simplification is performed using the optional valueization hook. 40733 40734 40735File: gccint.info, Node: The Language, Prev: GIMPLE API, Up: Match and Simplify 40736 4073725.2 The Language 40738================= 40739 40740The language to write expression simplifications in resembles other 40741domain-specific languages GCC uses. Thus it is lispy. Lets start with 40742an example from the match.pd file: 40743 40744 (simplify 40745 (bit_and @0 integer_all_onesp) 40746 @0) 40747 40748 This example contains all required parts of an expression 40749simplification. A simplification is wrapped inside a '(simplify ...)' 40750expression. That contains at least two operands - an expression that is 40751matched with the GIMPLE or GENERIC IL and a replacement expression that 40752is returned if the match was successful. 40753 40754 Expressions have an operator ID, 'bit_and' in this case. Expressions 40755can be lower-case tree codes with '_expr' stripped off or builtin 40756function code names in all-caps, like 'BUILT_IN_SQRT'. 40757 40758 '@n' denotes a so-called capture. It captures the operand and lets you 40759refer to it in other places of the match-and-simplify. In the above 40760example it is refered to in the replacement expression. Captures are 40761'@' followed by a number or an identifier. 40762 40763 (simplify 40764 (bit_xor @0 @0) 40765 { build_zero_cst (type); }) 40766 40767 In this example '@0' is mentioned twice which constrains the matched 40768expression to have two equal operands. This example also introduces 40769operands written in C code. These can be used in the expression 40770replacements and are supposed to evaluate to a tree node which has to be 40771a valid GIMPLE operand (so you cannot generate expressions in C code). 40772 40773 (simplify 40774 (trunc_mod integer_zerop@0 @1) 40775 (if (!integer_zerop (@1))) 40776 @0) 40777 40778 Here '@0' captures the first operand of the trunc_mod expression which 40779is also predicated with 'integer_zerop'. Expression operands may be 40780either expressions, predicates or captures. Captures can be 40781unconstrained or capture expresions or predicates. 40782 40783 This example introduces an optional operand of simplify, the 40784if-expression. This condition is evaluated after the expression matched 40785in the IL and is required to evaluate to true to enable the replacement 40786expression. The expression operand of the 'if' is a standard C 40787expression which may contain references to captures. 40788 40789 A 'if' expression can be used to specify a common condition for 40790multiple simplify patterns, avoiding the need to repeat that multiple 40791times: 40792 40793 (if (!TYPE_SATURATING (type) 40794 && !FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type)) 40795 (simplify 40796 (minus (plus @0 @1) @0) 40797 @1) 40798 (simplify 40799 (minus (minus @0 @1) @0) 40800 (negate @1))) 40801 40802 Ifs can be nested. 40803 40804 Captures can also be used for capturing results of sub-expressions. 40805 40806 #if GIMPLE 40807 (simplify 40808 (pointer_plus (addr@2 @0) INTEGER_CST_P@1) 40809 (if (is_gimple_min_invariant (@2))) 40810 { 40811 HOST_WIDE_INT off; 40812 tree base = get_addr_base_and_unit_offset (@0, &off); 40813 off += tree_to_uhwi (@1); 40814 /* Now with that we should be able to simply write 40815 (addr (mem_ref (addr @base) (plus @off @1))) */ 40816 build1 (ADDR_EXPR, type, 40817 build2 (MEM_REF, TREE_TYPE (TREE_TYPE (@2)), 40818 build_fold_addr_expr (base), 40819 build_int_cst (ptr_type_node, off))); 40820 }) 40821 #endif 40822 40823 In the above example, '@2' captures the result of the expression '(addr 40824@0)'. For outermost expression only its type can be captured, and the 40825keyword 'type' is reserved for this purpose. The above example also 40826gives a way to conditionalize patterns to only apply to 'GIMPLE' or 40827'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE' 40828and 'GENERIC' and using preprocessor directives. 40829 40830 (simplify 40831 (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1)) 40832 (bit_and @1 @0)) 40833 40834 Here we introduce flags on match expressions. There is currently a 40835single flag, 'c', which denotes that the expression should be also 40836matched commutated. Thus the above match expression is really the 40837following four match expressions: 40838 40839 (bit_and integral_op_p@0 (bit_ior (bit_not @0) @1)) (bit_and (bit_ior 40840(bit_not @0) @1) integral_op_p@0) (bit_and integral_op_p@0 (bit_ior @1 40841(bit_not @0))) (bit_and (bit_ior @1 (bit_not @0)) integral_op_p@0) 40842 40843 Usual canonicalizations you know from GENERIC expressions are applied 40844before matching, so for example constant operands always come second in 40845commutative expressions. 40846 40847 More features exist to avoid too much repetition. 40848 40849 (for op (plus pointer_plus minus bit_ior bit_xor) 40850 (simplify 40851 (op @0 integer_zerop) 40852 @0)) 40853 40854 A 'for' expression can be used to repeat a pattern for each operator 40855specified, substituting 'op'. 'for' can be nested and a 'for' can have 40856multiple operators to iterate. 40857 40858 (for opa (plus minus) 40859 opb (minus plus) 40860 (for opc (plus minus) 40861 (simplify... 40862 40863 In this example the pattern will be repeated four times with 'opa, opb, 40864opc' being 'plus, minus, plus', 'plus, minus, minus', 'minus, plus, 40865plus', 'minus, plus, minus'. 40866 40867 To avoid repeating operator lists in 'for' you can name them via 40868 40869 (define_operator_list pmm plus minus mult) 40870 40871 and use them in 'for' operator lists where they get expanded. 40872 40873 (for opa (pmm trunc_div) 40874 (simplify... 40875 40876 So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'. 40877 40878 Using operator lists can also remove the need to explicitely write a 40879'for'. All operator list uses that appear in a 'simplify' or 'match' 40880pattern in operator positions will implicitely be added to a new 'for'. 40881For example 40882 40883 (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 40884 (define_operator_list POW BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 40885 (simplify 40886 (SQRT (POW @0 @1)) 40887 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))) 40888 40889 is the same as 40890 40891 (for SQRT (BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 40892 POW (BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 40893 (simplify 40894 (SQRT (POW @0 @1)) 40895 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); })))) 40896 40897 Another building block are 'with' expressions in the result expression 40898which nest the generated code in a new C block followed by its argument: 40899 40900 (simplify 40901 (convert (mult @0 @1)) 40902 (with { tree utype = unsigned_type_for (type); } 40903 (convert (mult (convert:utype @0) (convert:utype @1))))) 40904 40905 This allows code nested in the 'with' to refer to the declared 40906variables. In the above case we use the feature to specify the type of 40907a generated expression with the ':type' syntax where 'type' needs to be 40908an identifier that refers to the desired type. Usually the types of the 40909generated result expressions are determined from the context, but 40910sometimes like in the above case it is required that you specify them 40911explicitely. 40912 40913 As intermediate conversions are often optional there is a way to avoid 40914the need to repeat patterns both with and without such conversions. 40915Namely you can mark a conversion as being optional with a '?': 40916 40917 (simplify 40918 (eq (convert@0 @1) (convert? @2)) 40919 (eq @1 (convert @2))) 40920 40921 which will match both '(eq (convert @1) (convert @2))' and '(eq 40922(convert @1) @2)'. The optional converts are supposed to be all either 40923present or not, thus '(eq (convert? @1) (convert? @2))' will result in 40924two patterns only. If you want to match all four combinations you have 40925access to two additional conditional converts as in '(eq (convert1? @1) 40926(convert2? @2))'. 40927 40928 Predicates available from the GCC middle-end need to be made available 40929explicitely via 'define_predicates': 40930 40931 (define_predicates 40932 integer_onep integer_zerop integer_all_onesp) 40933 40934 You can also define predicates using the pattern matching language and 40935the 'match' form: 40936 40937 (match negate_expr_p 40938 INTEGER_CST 40939 (if (TYPE_OVERFLOW_WRAPS (type) 40940 || may_negate_without_overflow_p (t)))) 40941 (match negate_expr_p 40942 (negate @0)) 40943 40944 This shows that for 'match' expressions there is 't' available which 40945captures the outermost expression (something not possible in the 40946'simplify' context). As you can see 'match' has an identifier as first 40947operand which is how you refer to the predicate in patterns. Multiple 40948'match' for the same identifier add additional cases where the predicate 40949matches. 40950 40951 Predicates can also match an expression in which case you need to 40952provide a template specifying the identifier and where to get its 40953operands from: 40954 40955 (match (logical_inverted_value @0) 40956 (eq @0 integer_zerop)) 40957 (match (logical_inverted_value @0) 40958 (bit_not truth_valued_p@0)) 40959 40960 You can use the above predicate like 40961 40962 (simplify 40963 (bit_and @0 (logical_inverted_value @0)) 40964 { build_zero_cst (type); }) 40965 40966 Which will match a bitwise and of an operand with its logical inverted 40967value. 40968 40969 40970File: gccint.info, Node: Funding, Next: GNU Project, Prev: Match and Simplify, Up: Top 40971 40972Funding Free Software 40973********************* 40974 40975If you want to have more free software a few years from now, it makes 40976sense for you to help encourage people to contribute funds for its 40977development. The most effective approach known is to encourage 40978commercial redistributors to donate. 40979 40980 Users of free software systems can boost the pace of development by 40981encouraging for-a-fee distributors to donate part of their selling price 40982to free software developers--the Free Software Foundation, and others. 40983 40984 The way to convince distributors to do this is to demand it and expect 40985it from them. So when you compare distributors, judge them partly by 40986how much they give to free software development. Show distributors they 40987must compete to be the one who gives the most. 40988 40989 To make this approach work, you must insist on numbers that you can 40990compare, such as, "We will donate ten dollars to the Frobnitz project 40991for each disk sold." Don't be satisfied with a vague promise, such as 40992"A portion of the profits are donated," since it doesn't give a basis 40993for comparison. 40994 40995 Even a precise fraction "of the profits from this disk" is not very 40996meaningful, since creative accounting and unrelated business decisions 40997can greatly alter what fraction of the sales price counts as profit. If 40998the price you pay is $50, ten percent of the profit is probably less 40999than a dollar; it might be a few cents, or nothing at all. 41000 41001 Some redistributors do development work themselves. This is useful 41002too; but to keep everyone honest, you need to inquire how much they do, 41003and what kind. Some kinds of development make much more long-term 41004difference than others. For example, maintaining a separate version of 41005a program contributes very little; maintaining the standard version of a 41006program for the whole community contributes much. Easy new ports 41007contribute little, since someone else would surely do them; difficult 41008ports such as adding a new CPU to the GNU Compiler Collection contribute 41009more; major new features or packages contribute the most. 41010 41011 By establishing the idea that supporting further development is "the 41012proper thing to do" when distributing free software for a fee, we can 41013assure a steady flow of resources into making more free software. 41014 41015 Copyright (C) 1994 Free Software Foundation, Inc. 41016 Verbatim copying and redistribution of this section is permitted 41017 without royalty; alteration is not permitted. 41018 41019 41020File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 41021 41022The GNU Project and GNU/Linux 41023***************************** 41024 41025The GNU Project was launched in 1984 to develop a complete Unix-like 41026operating system which is free software: the GNU system. (GNU is a 41027recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 41028Variants of the GNU operating system, which use the kernel Linux, are 41029now widely used; though these systems are often referred to as "Linux", 41030they are more accurately called GNU/Linux systems. 41031 41032 For more information, see: 41033 <http://www.gnu.org/> 41034 <http://www.gnu.org/gnu/linux-and-gnu.html> 41035 41036 41037File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 41038 41039GNU General Public License 41040************************** 41041 41042 Version 3, 29 June 2007 41043 41044 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 41045 41046 Everyone is permitted to copy and distribute verbatim copies of this 41047 license document, but changing it is not allowed. 41048 41049Preamble 41050======== 41051 41052The GNU General Public License is a free, copyleft license for software 41053and other kinds of works. 41054 41055 The licenses for most software and other practical works are designed 41056to take away your freedom to share and change the works. By contrast, 41057the GNU General Public License is intended to guarantee your freedom to 41058share and change all versions of a program-to make sure it remains free 41059software for all its users. We, the Free Software Foundation, use the 41060GNU General Public License for most of our software; it applies also to 41061any other work released this way by its authors. You can apply it to 41062your programs, too. 41063 41064 When we speak of free software, we are referring to freedom, not price. 41065Our General Public Licenses are designed to make sure that you have the 41066freedom to distribute copies of free software (and charge for them if 41067you wish), that you receive source code or can get it if you want it, 41068that you can change the software or use pieces of it in new free 41069programs, and that you know you can do these things. 41070 41071 To protect your rights, we need to prevent others from denying you 41072these rights or asking you to surrender the rights. Therefore, you have 41073certain responsibilities if you distribute copies of the software, or if 41074you modify it: responsibilities to respect the freedom of others. 41075 41076 For example, if you distribute copies of such a program, whether gratis 41077or for a fee, you must pass on to the recipients the same freedoms that 41078you received. You must make sure that they, too, receive or can get the 41079source code. And you must show them these terms so they know their 41080rights. 41081 41082 Developers that use the GNU GPL protect your rights with two steps: (1) 41083assert copyright on the software, and (2) offer you this License giving 41084you legal permission to copy, distribute and/or modify it. 41085 41086 For the developers' and authors' protection, the GPL clearly explains 41087that there is no warranty for this free software. For both users' and 41088authors' sake, the GPL requires that modified versions be marked as 41089changed, so that their problems will not be attributed erroneously to 41090authors of previous versions. 41091 41092 Some devices are designed to deny users access to install or run 41093modified versions of the software inside them, although the manufacturer 41094can do so. This is fundamentally incompatible with the aim of 41095protecting users' freedom to change the software. The systematic 41096pattern of such abuse occurs in the area of products for individuals to 41097use, which is precisely where it is most unacceptable. Therefore, we 41098have designed this version of the GPL to prohibit the practice for those 41099products. If such problems arise substantially in other domains, we 41100stand ready to extend this provision to those domains in future versions 41101of the GPL, as needed to protect the freedom of users. 41102 41103 Finally, every program is threatened constantly by software patents. 41104States should not allow patents to restrict development and use of 41105software on general-purpose computers, but in those that do, we wish to 41106avoid the special danger that patents applied to a free program could 41107make it effectively proprietary. To prevent this, the GPL assures that 41108patents cannot be used to render the program non-free. 41109 41110 The precise terms and conditions for copying, distribution and 41111modification follow. 41112 41113TERMS AND CONDITIONS 41114==================== 41115 41116 0. Definitions. 41117 41118 "This License" refers to version 3 of the GNU General Public 41119 License. 41120 41121 "Copyright" also means copyright-like laws that apply to other 41122 kinds of works, such as semiconductor masks. 41123 41124 "The Program" refers to any copyrightable work licensed under this 41125 License. Each licensee is addressed as "you". "Licensees" and 41126 "recipients" may be individuals or organizations. 41127 41128 To "modify" a work means to copy from or adapt all or part of the 41129 work in a fashion requiring copyright permission, other than the 41130 making of an exact copy. The resulting work is called a "modified 41131 version" of the earlier work or a work "based on" the earlier work. 41132 41133 A "covered work" means either the unmodified Program or a work 41134 based on the Program. 41135 41136 To "propagate" a work means to do anything with it that, without 41137 permission, would make you directly or secondarily liable for 41138 infringement under applicable copyright law, except executing it on 41139 a computer or modifying a private copy. Propagation includes 41140 copying, distribution (with or without modification), making 41141 available to the public, and in some countries other activities as 41142 well. 41143 41144 To "convey" a work means any kind of propagation that enables other 41145 parties to make or receive copies. Mere interaction with a user 41146 through a computer network, with no transfer of a copy, is not 41147 conveying. 41148 41149 An interactive user interface displays "Appropriate Legal Notices" 41150 to the extent that it includes a convenient and prominently visible 41151 feature that (1) displays an appropriate copyright notice, and (2) 41152 tells the user that there is no warranty for the work (except to 41153 the extent that warranties are provided), that licensees may convey 41154 the work under this License, and how to view a copy of this 41155 License. If the interface presents a list of user commands or 41156 options, such as a menu, a prominent item in the list meets this 41157 criterion. 41158 41159 1. Source Code. 41160 41161 The "source code" for a work means the preferred form of the work 41162 for making modifications to it. "Object code" means any non-source 41163 form of a work. 41164 41165 A "Standard Interface" means an interface that either is an 41166 official standard defined by a recognized standards body, or, in 41167 the case of interfaces specified for a particular programming 41168 language, one that is widely used among developers working in that 41169 language. 41170 41171 The "System Libraries" of an executable work include anything, 41172 other than the work as a whole, that (a) is included in the normal 41173 form of packaging a Major Component, but which is not part of that 41174 Major Component, and (b) serves only to enable use of the work with 41175 that Major Component, or to implement a Standard Interface for 41176 which an implementation is available to the public in source code 41177 form. A "Major Component", in this context, means a major 41178 essential component (kernel, window system, and so on) of the 41179 specific operating system (if any) on which the executable work 41180 runs, or a compiler used to produce the work, or an object code 41181 interpreter used to run it. 41182 41183 The "Corresponding Source" for a work in object code form means all 41184 the source code needed to generate, install, and (for an executable 41185 work) run the object code and to modify the work, including scripts 41186 to control those activities. However, it does not include the 41187 work's System Libraries, or general-purpose tools or generally 41188 available free programs which are used unmodified in performing 41189 those activities but which are not part of the work. For example, 41190 Corresponding Source includes interface definition files associated 41191 with source files for the work, and the source code for shared 41192 libraries and dynamically linked subprograms that the work is 41193 specifically designed to require, such as by intimate data 41194 communication or control flow between those subprograms and other 41195 parts of the work. 41196 41197 The Corresponding Source need not include anything that users can 41198 regenerate automatically from other parts of the Corresponding 41199 Source. 41200 41201 The Corresponding Source for a work in source code form is that 41202 same work. 41203 41204 2. Basic Permissions. 41205 41206 All rights granted under this License are granted for the term of 41207 copyright on the Program, and are irrevocable provided the stated 41208 conditions are met. This License explicitly affirms your unlimited 41209 permission to run the unmodified Program. The output from running 41210 a covered work is covered by this License only if the output, given 41211 its content, constitutes a covered work. This License acknowledges 41212 your rights of fair use or other equivalent, as provided by 41213 copyright law. 41214 41215 You may make, run and propagate covered works that you do not 41216 convey, without conditions so long as your license otherwise 41217 remains in force. You may convey covered works to others for the 41218 sole purpose of having them make modifications exclusively for you, 41219 or provide you with facilities for running those works, provided 41220 that you comply with the terms of this License in conveying all 41221 material for which you do not control copyright. Those thus making 41222 or running the covered works for you must do so exclusively on your 41223 behalf, under your direction and control, on terms that prohibit 41224 them from making any copies of your copyrighted material outside 41225 their relationship with you. 41226 41227 Conveying under any other circumstances is permitted solely under 41228 the conditions stated below. Sublicensing is not allowed; section 41229 10 makes it unnecessary. 41230 41231 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 41232 41233 No covered work shall be deemed part of an effective technological 41234 measure under any applicable law fulfilling obligations under 41235 article 11 of the WIPO copyright treaty adopted on 20 December 41236 1996, or similar laws prohibiting or restricting circumvention of 41237 such measures. 41238 41239 When you convey a covered work, you waive any legal power to forbid 41240 circumvention of technological measures to the extent such 41241 circumvention is effected by exercising rights under this License 41242 with respect to the covered work, and you disclaim any intention to 41243 limit operation or modification of the work as a means of 41244 enforcing, against the work's users, your or third parties' legal 41245 rights to forbid circumvention of technological measures. 41246 41247 4. Conveying Verbatim Copies. 41248 41249 You may convey verbatim copies of the Program's source code as you 41250 receive it, in any medium, provided that you conspicuously and 41251 appropriately publish on each copy an appropriate copyright notice; 41252 keep intact all notices stating that this License and any 41253 non-permissive terms added in accord with section 7 apply to the 41254 code; keep intact all notices of the absence of any warranty; and 41255 give all recipients a copy of this License along with the Program. 41256 41257 You may charge any price or no price for each copy that you convey, 41258 and you may offer support or warranty protection for a fee. 41259 41260 5. Conveying Modified Source Versions. 41261 41262 You may convey a work based on the Program, or the modifications to 41263 produce it from the Program, in the form of source code under the 41264 terms of section 4, provided that you also meet all of these 41265 conditions: 41266 41267 a. The work must carry prominent notices stating that you 41268 modified it, and giving a relevant date. 41269 41270 b. The work must carry prominent notices stating that it is 41271 released under this License and any conditions added under 41272 section 7. This requirement modifies the requirement in 41273 section 4 to "keep intact all notices". 41274 41275 c. You must license the entire work, as a whole, under this 41276 License to anyone who comes into possession of a copy. This 41277 License will therefore apply, along with any applicable 41278 section 7 additional terms, to the whole of the work, and all 41279 its parts, regardless of how they are packaged. This License 41280 gives no permission to license the work in any other way, but 41281 it does not invalidate such permission if you have separately 41282 received it. 41283 41284 d. If the work has interactive user interfaces, each must display 41285 Appropriate Legal Notices; however, if the Program has 41286 interactive interfaces that do not display Appropriate Legal 41287 Notices, your work need not make them do so. 41288 41289 A compilation of a covered work with other separate and independent 41290 works, which are not by their nature extensions of the covered 41291 work, and which are not combined with it such as to form a larger 41292 program, in or on a volume of a storage or distribution medium, is 41293 called an "aggregate" if the compilation and its resulting 41294 copyright are not used to limit the access or legal rights of the 41295 compilation's users beyond what the individual works permit. 41296 Inclusion of a covered work in an aggregate does not cause this 41297 License to apply to the other parts of the aggregate. 41298 41299 6. Conveying Non-Source Forms. 41300 41301 You may convey a covered work in object code form under the terms 41302 of sections 4 and 5, provided that you also convey the 41303 machine-readable Corresponding Source under the terms of this 41304 License, in one of these ways: 41305 41306 a. Convey the object code in, or embodied in, a physical product 41307 (including a physical distribution medium), accompanied by the 41308 Corresponding Source fixed on a durable physical medium 41309 customarily used for software interchange. 41310 41311 b. Convey the object code in, or embodied in, a physical product 41312 (including a physical distribution medium), accompanied by a 41313 written offer, valid for at least three years and valid for as 41314 long as you offer spare parts or customer support for that 41315 product model, to give anyone who possesses the object code 41316 either (1) a copy of the Corresponding Source for all the 41317 software in the product that is covered by this License, on a 41318 durable physical medium customarily used for software 41319 interchange, for a price no more than your reasonable cost of 41320 physically performing this conveying of source, or (2) access 41321 to copy the Corresponding Source from a network server at no 41322 charge. 41323 41324 c. Convey individual copies of the object code with a copy of the 41325 written offer to provide the Corresponding Source. This 41326 alternative is allowed only occasionally and noncommercially, 41327 and only if you received the object code with such an offer, 41328 in accord with subsection 6b. 41329 41330 d. Convey the object code by offering access from a designated 41331 place (gratis or for a charge), and offer equivalent access to 41332 the Corresponding Source in the same way through the same 41333 place at no further charge. You need not require recipients 41334 to copy the Corresponding Source along with the object code. 41335 If the place to copy the object code is a network server, the 41336 Corresponding Source may be on a different server (operated by 41337 you or a third party) that supports equivalent copying 41338 facilities, provided you maintain clear directions next to the 41339 object code saying where to find the Corresponding Source. 41340 Regardless of what server hosts the Corresponding Source, you 41341 remain obligated to ensure that it is available for as long as 41342 needed to satisfy these requirements. 41343 41344 e. Convey the object code using peer-to-peer transmission, 41345 provided you inform other peers where the object code and 41346 Corresponding Source of the work are being offered to the 41347 general public at no charge under subsection 6d. 41348 41349 A separable portion of the object code, whose source code is 41350 excluded from the Corresponding Source as a System Library, need 41351 not be included in conveying the object code work. 41352 41353 A "User Product" is either (1) a "consumer product", which means 41354 any tangible personal property which is normally used for personal, 41355 family, or household purposes, or (2) anything designed or sold for 41356 incorporation into a dwelling. In determining whether a product is 41357 a consumer product, doubtful cases shall be resolved in favor of 41358 coverage. For a particular product received by a particular user, 41359 "normally used" refers to a typical or common use of that class of 41360 product, regardless of the status of the particular user or of the 41361 way in which the particular user actually uses, or expects or is 41362 expected to use, the product. A product is a consumer product 41363 regardless of whether the product has substantial commercial, 41364 industrial or non-consumer uses, unless such uses represent the 41365 only significant mode of use of the product. 41366 41367 "Installation Information" for a User Product means any methods, 41368 procedures, authorization keys, or other information required to 41369 install and execute modified versions of a covered work in that 41370 User Product from a modified version of its Corresponding Source. 41371 The information must suffice to ensure that the continued 41372 functioning of the modified object code is in no case prevented or 41373 interfered with solely because modification has been made. 41374 41375 If you convey an object code work under this section in, or with, 41376 or specifically for use in, a User Product, and the conveying 41377 occurs as part of a transaction in which the right of possession 41378 and use of the User Product is transferred to the recipient in 41379 perpetuity or for a fixed term (regardless of how the transaction 41380 is characterized), the Corresponding Source conveyed under this 41381 section must be accompanied by the Installation Information. But 41382 this requirement does not apply if neither you nor any third party 41383 retains the ability to install modified object code on the User 41384 Product (for example, the work has been installed in ROM). 41385 41386 The requirement to provide Installation Information does not 41387 include a requirement to continue to provide support service, 41388 warranty, or updates for a work that has been modified or installed 41389 by the recipient, or for the User Product in which it has been 41390 modified or installed. Access to a network may be denied when the 41391 modification itself materially and adversely affects the operation 41392 of the network or violates the rules and protocols for 41393 communication across the network. 41394 41395 Corresponding Source conveyed, and Installation Information 41396 provided, in accord with this section must be in a format that is 41397 publicly documented (and with an implementation available to the 41398 public in source code form), and must require no special password 41399 or key for unpacking, reading or copying. 41400 41401 7. Additional Terms. 41402 41403 "Additional permissions" are terms that supplement the terms of 41404 this License by making exceptions from one or more of its 41405 conditions. Additional permissions that are applicable to the 41406 entire Program shall be treated as though they were included in 41407 this License, to the extent that they are valid under applicable 41408 law. If additional permissions apply only to part of the Program, 41409 that part may be used separately under those permissions, but the 41410 entire Program remains governed by this License without regard to 41411 the additional permissions. 41412 41413 When you convey a copy of a covered work, you may at your option 41414 remove any additional permissions from that copy, or from any part 41415 of it. (Additional permissions may be written to require their own 41416 removal in certain cases when you modify the work.) You may place 41417 additional permissions on material, added by you to a covered work, 41418 for which you have or can give appropriate copyright permission. 41419 41420 Notwithstanding any other provision of this License, for material 41421 you add to a covered work, you may (if authorized by the copyright 41422 holders of that material) supplement the terms of this License with 41423 terms: 41424 41425 a. Disclaiming warranty or limiting liability differently from 41426 the terms of sections 15 and 16 of this License; or 41427 41428 b. Requiring preservation of specified reasonable legal notices 41429 or author attributions in that material or in the Appropriate 41430 Legal Notices displayed by works containing it; or 41431 41432 c. Prohibiting misrepresentation of the origin of that material, 41433 or requiring that modified versions of such material be marked 41434 in reasonable ways as different from the original version; or 41435 41436 d. Limiting the use for publicity purposes of names of licensors 41437 or authors of the material; or 41438 41439 e. Declining to grant rights under trademark law for use of some 41440 trade names, trademarks, or service marks; or 41441 41442 f. Requiring indemnification of licensors and authors of that 41443 material by anyone who conveys the material (or modified 41444 versions of it) with contractual assumptions of liability to 41445 the recipient, for any liability that these contractual 41446 assumptions directly impose on those licensors and authors. 41447 41448 All other non-permissive additional terms are considered "further 41449 restrictions" within the meaning of section 10. If the Program as 41450 you received it, or any part of it, contains a notice stating that 41451 it is governed by this License along with a term that is a further 41452 restriction, you may remove that term. If a license document 41453 contains a further restriction but permits relicensing or conveying 41454 under this License, you may add to a covered work material governed 41455 by the terms of that license document, provided that the further 41456 restriction does not survive such relicensing or conveying. 41457 41458 If you add terms to a covered work in accord with this section, you 41459 must place, in the relevant source files, a statement of the 41460 additional terms that apply to those files, or a notice indicating 41461 where to find the applicable terms. 41462 41463 Additional terms, permissive or non-permissive, may be stated in 41464 the form of a separately written license, or stated as exceptions; 41465 the above requirements apply either way. 41466 41467 8. Termination. 41468 41469 You may not propagate or modify a covered work except as expressly 41470 provided under this License. Any attempt otherwise to propagate or 41471 modify it is void, and will automatically terminate your rights 41472 under this License (including any patent licenses granted under the 41473 third paragraph of section 11). 41474 41475 However, if you cease all violation of this License, then your 41476 license from a particular copyright holder is reinstated (a) 41477 provisionally, unless and until the copyright holder explicitly and 41478 finally terminates your license, and (b) permanently, if the 41479 copyright holder fails to notify you of the violation by some 41480 reasonable means prior to 60 days after the cessation. 41481 41482 Moreover, your license from a particular copyright holder is 41483 reinstated permanently if the copyright holder notifies you of the 41484 violation by some reasonable means, this is the first time you have 41485 received notice of violation of this License (for any work) from 41486 that copyright holder, and you cure the violation prior to 30 days 41487 after your receipt of the notice. 41488 41489 Termination of your rights under this section does not terminate 41490 the licenses of parties who have received copies or rights from you 41491 under this License. If your rights have been terminated and not 41492 permanently reinstated, you do not qualify to receive new licenses 41493 for the same material under section 10. 41494 41495 9. Acceptance Not Required for Having Copies. 41496 41497 You are not required to accept this License in order to receive or 41498 run a copy of the Program. Ancillary propagation of a covered work 41499 occurring solely as a consequence of using peer-to-peer 41500 transmission to receive a copy likewise does not require 41501 acceptance. However, nothing other than this License grants you 41502 permission to propagate or modify any covered work. These actions 41503 infringe copyright if you do not accept this License. Therefore, 41504 by modifying or propagating a covered work, you indicate your 41505 acceptance of this License to do so. 41506 41507 10. Automatic Licensing of Downstream Recipients. 41508 41509 Each time you convey a covered work, the recipient automatically 41510 receives a license from the original licensors, to run, modify and 41511 propagate that work, subject to this License. You are not 41512 responsible for enforcing compliance by third parties with this 41513 License. 41514 41515 An "entity transaction" is a transaction transferring control of an 41516 organization, or substantially all assets of one, or subdividing an 41517 organization, or merging organizations. If propagation of a 41518 covered work results from an entity transaction, each party to that 41519 transaction who receives a copy of the work also receives whatever 41520 licenses to the work the party's predecessor in interest had or 41521 could give under the previous paragraph, plus a right to possession 41522 of the Corresponding Source of the work from the predecessor in 41523 interest, if the predecessor has it or can get it with reasonable 41524 efforts. 41525 41526 You may not impose any further restrictions on the exercise of the 41527 rights granted or affirmed under this License. For example, you 41528 may not impose a license fee, royalty, or other charge for exercise 41529 of rights granted under this License, and you may not initiate 41530 litigation (including a cross-claim or counterclaim in a lawsuit) 41531 alleging that any patent claim is infringed by making, using, 41532 selling, offering for sale, or importing the Program or any portion 41533 of it. 41534 41535 11. Patents. 41536 41537 A "contributor" is a copyright holder who authorizes use under this 41538 License of the Program or a work on which the Program is based. 41539 The work thus licensed is called the contributor's "contributor 41540 version". 41541 41542 A contributor's "essential patent claims" are all patent claims 41543 owned or controlled by the contributor, whether already acquired or 41544 hereafter acquired, that would be infringed by some manner, 41545 permitted by this License, of making, using, or selling its 41546 contributor version, but do not include claims that would be 41547 infringed only as a consequence of further modification of the 41548 contributor version. For purposes of this definition, "control" 41549 includes the right to grant patent sublicenses in a manner 41550 consistent with the requirements of this License. 41551 41552 Each contributor grants you a non-exclusive, worldwide, 41553 royalty-free patent license under the contributor's essential 41554 patent claims, to make, use, sell, offer for sale, import and 41555 otherwise run, modify and propagate the contents of its contributor 41556 version. 41557 41558 In the following three paragraphs, a "patent license" is any 41559 express agreement or commitment, however denominated, not to 41560 enforce a patent (such as an express permission to practice a 41561 patent or covenant not to sue for patent infringement). To "grant" 41562 such a patent license to a party means to make such an agreement or 41563 commitment not to enforce a patent against the party. 41564 41565 If you convey a covered work, knowingly relying on a patent 41566 license, and the Corresponding Source of the work is not available 41567 for anyone to copy, free of charge and under the terms of this 41568 License, through a publicly available network server or other 41569 readily accessible means, then you must either (1) cause the 41570 Corresponding Source to be so available, or (2) arrange to deprive 41571 yourself of the benefit of the patent license for this particular 41572 work, or (3) arrange, in a manner consistent with the requirements 41573 of this License, to extend the patent license to downstream 41574 recipients. "Knowingly relying" means you have actual knowledge 41575 that, but for the patent license, your conveying the covered work 41576 in a country, or your recipient's use of the covered work in a 41577 country, would infringe one or more identifiable patents in that 41578 country that you have reason to believe are valid. 41579 41580 If, pursuant to or in connection with a single transaction or 41581 arrangement, you convey, or propagate by procuring conveyance of, a 41582 covered work, and grant a patent license to some of the parties 41583 receiving the covered work authorizing them to use, propagate, 41584 modify or convey a specific copy of the covered work, then the 41585 patent license you grant is automatically extended to all 41586 recipients of the covered work and works based on it. 41587 41588 A patent license is "discriminatory" if it does not include within 41589 the scope of its coverage, prohibits the exercise of, or is 41590 conditioned on the non-exercise of one or more of the rights that 41591 are specifically granted under this License. You may not convey a 41592 covered work if you are a party to an arrangement with a third 41593 party that is in the business of distributing software, under which 41594 you make payment to the third party based on the extent of your 41595 activity of conveying the work, and under which the third party 41596 grants, to any of the parties who would receive the covered work 41597 from you, a discriminatory patent license (a) in connection with 41598 copies of the covered work conveyed by you (or copies made from 41599 those copies), or (b) primarily for and in connection with specific 41600 products or compilations that contain the covered work, unless you 41601 entered into that arrangement, or that patent license was granted, 41602 prior to 28 March 2007. 41603 41604 Nothing in this License shall be construed as excluding or limiting 41605 any implied license or other defenses to infringement that may 41606 otherwise be available to you under applicable patent law. 41607 41608 12. No Surrender of Others' Freedom. 41609 41610 If conditions are imposed on you (whether by court order, agreement 41611 or otherwise) that contradict the conditions of this License, they 41612 do not excuse you from the conditions of this License. If you 41613 cannot convey a covered work so as to satisfy simultaneously your 41614 obligations under this License and any other pertinent obligations, 41615 then as a consequence you may not convey it at all. For example, 41616 if you agree to terms that obligate you to collect a royalty for 41617 further conveying from those to whom you convey the Program, the 41618 only way you could satisfy both those terms and this License would 41619 be to refrain entirely from conveying the Program. 41620 41621 13. Use with the GNU Affero General Public License. 41622 41623 Notwithstanding any other provision of this License, you have 41624 permission to link or combine any covered work with a work licensed 41625 under version 3 of the GNU Affero General Public License into a 41626 single combined work, and to convey the resulting work. The terms 41627 of this License will continue to apply to the part which is the 41628 covered work, but the special requirements of the GNU Affero 41629 General Public License, section 13, concerning interaction through 41630 a network will apply to the combination as such. 41631 41632 14. Revised Versions of this License. 41633 41634 The Free Software Foundation may publish revised and/or new 41635 versions of the GNU General Public License from time to time. Such 41636 new versions will be similar in spirit to the present version, but 41637 may differ in detail to address new problems or concerns. 41638 41639 Each version is given a distinguishing version number. If the 41640 Program specifies that a certain numbered version of the GNU 41641 General Public License "or any later version" applies to it, you 41642 have the option of following the terms and conditions either of 41643 that numbered version or of any later version published by the Free 41644 Software Foundation. If the Program does not specify a version 41645 number of the GNU General Public License, you may choose any 41646 version ever published by the Free Software Foundation. 41647 41648 If the Program specifies that a proxy can decide which future 41649 versions of the GNU General Public License can be used, that 41650 proxy's public statement of acceptance of a version permanently 41651 authorizes you to choose that version for the Program. 41652 41653 Later license versions may give you additional or different 41654 permissions. However, no additional obligations are imposed on any 41655 author or copyright holder as a result of your choosing to follow a 41656 later version. 41657 41658 15. Disclaimer of Warranty. 41659 41660 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 41661 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 41662 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 41663 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 41664 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 41665 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 41666 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 41667 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 41668 NECESSARY SERVICING, REPAIR OR CORRECTION. 41669 41670 16. Limitation of Liability. 41671 41672 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 41673 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 41674 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 41675 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 41676 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 41677 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 41678 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 41679 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 41680 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 41681 THE POSSIBILITY OF SUCH DAMAGES. 41682 41683 17. Interpretation of Sections 15 and 16. 41684 41685 If the disclaimer of warranty and limitation of liability provided 41686 above cannot be given local legal effect according to their terms, 41687 reviewing courts shall apply local law that most closely 41688 approximates an absolute waiver of all civil liability in 41689 connection with the Program, unless a warranty or assumption of 41690 liability accompanies a copy of the Program in return for a fee. 41691 41692END OF TERMS AND CONDITIONS 41693=========================== 41694 41695How to Apply These Terms to Your New Programs 41696============================================= 41697 41698If you develop a new program, and you want it to be of the greatest 41699possible use to the public, the best way to achieve this is to make it 41700free software which everyone can redistribute and change under these 41701terms. 41702 41703 To do so, attach the following notices to the program. It is safest to 41704attach them to the start of each source file to most effectively state 41705the exclusion of warranty; and each file should have at least the 41706"copyright" line and a pointer to where the full notice is found. 41707 41708 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 41709 Copyright (C) YEAR NAME OF AUTHOR 41710 41711 This program is free software: you can redistribute it and/or modify 41712 it under the terms of the GNU General Public License as published by 41713 the Free Software Foundation, either version 3 of the License, or (at 41714 your option) any later version. 41715 41716 This program is distributed in the hope that it will be useful, but 41717 WITHOUT ANY WARRANTY; without even the implied warranty of 41718 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 41719 General Public License for more details. 41720 41721 You should have received a copy of the GNU General Public License 41722 along with this program. If not, see <http://www.gnu.org/licenses/>. 41723 41724 Also add information on how to contact you by electronic and paper 41725mail. 41726 41727 If the program does terminal interaction, make it output a short notice 41728like this when it starts in an interactive mode: 41729 41730 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 41731 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 41732 This is free software, and you are welcome to redistribute it 41733 under certain conditions; type 'show c' for details. 41734 41735 The hypothetical commands 'show w' and 'show c' should show the 41736appropriate parts of the General Public License. Of course, your 41737program's commands might be different; for a GUI interface, you would 41738use an "about box". 41739 41740 You should also get your employer (if you work as a programmer) or 41741school, if any, to sign a "copyright disclaimer" for the program, if 41742necessary. For more information on this, and how to apply and follow 41743the GNU GPL, see <http://www.gnu.org/licenses/>. 41744 41745 The GNU General Public License does not permit incorporating your 41746program into proprietary programs. If your program is a subroutine 41747library, you may consider it more useful to permit linking proprietary 41748applications with the library. If this is what you want to do, use the 41749GNU Lesser General Public License instead of this License. But first, 41750please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 41751 41752 41753File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 41754 41755GNU Free Documentation License 41756****************************** 41757 41758 Version 1.3, 3 November 2008 41759 41760 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 41761 <http://fsf.org/> 41762 41763 Everyone is permitted to copy and distribute verbatim copies 41764 of this license document, but changing it is not allowed. 41765 41766 0. PREAMBLE 41767 41768 The purpose of this License is to make a manual, textbook, or other 41769 functional and useful document "free" in the sense of freedom: to 41770 assure everyone the effective freedom to copy and redistribute it, 41771 with or without modifying it, either commercially or 41772 noncommercially. Secondarily, this License preserves for the 41773 author and publisher a way to get credit for their work, while not 41774 being considered responsible for modifications made by others. 41775 41776 This License is a kind of "copyleft", which means that derivative 41777 works of the document must themselves be free in the same sense. 41778 It complements the GNU General Public License, which is a copyleft 41779 license designed for free software. 41780 41781 We have designed this License in order to use it for manuals for 41782 free software, because free software needs free documentation: a 41783 free program should come with manuals providing the same freedoms 41784 that the software does. But this License is not limited to 41785 software manuals; it can be used for any textual work, regardless 41786 of subject matter or whether it is published as a printed book. We 41787 recommend this License principally for works whose purpose is 41788 instruction or reference. 41789 41790 1. APPLICABILITY AND DEFINITIONS 41791 41792 This License applies to any manual or other work, in any medium, 41793 that contains a notice placed by the copyright holder saying it can 41794 be distributed under the terms of this License. Such a notice 41795 grants a world-wide, royalty-free license, unlimited in duration, 41796 to use that work under the conditions stated herein. The 41797 "Document", below, refers to any such manual or work. Any member 41798 of the public is a licensee, and is addressed as "you". You accept 41799 the license if you copy, modify or distribute the work in a way 41800 requiring permission under copyright law. 41801 41802 A "Modified Version" of the Document means any work containing the 41803 Document or a portion of it, either copied verbatim, or with 41804 modifications and/or translated into another language. 41805 41806 A "Secondary Section" is a named appendix or a front-matter section 41807 of the Document that deals exclusively with the relationship of the 41808 publishers or authors of the Document to the Document's overall 41809 subject (or to related matters) and contains nothing that could 41810 fall directly within that overall subject. (Thus, if the Document 41811 is in part a textbook of mathematics, a Secondary Section may not 41812 explain any mathematics.) The relationship could be a matter of 41813 historical connection with the subject or with related matters, or 41814 of legal, commercial, philosophical, ethical or political position 41815 regarding them. 41816 41817 The "Invariant Sections" are certain Secondary Sections whose 41818 titles are designated, as being those of Invariant Sections, in the 41819 notice that says that the Document is released under this License. 41820 If a section does not fit the above definition of Secondary then it 41821 is not allowed to be designated as Invariant. The Document may 41822 contain zero Invariant Sections. If the Document does not identify 41823 any Invariant Sections then there are none. 41824 41825 The "Cover Texts" are certain short passages of text that are 41826 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 41827 that says that the Document is released under this License. A 41828 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 41829 be at most 25 words. 41830 41831 A "Transparent" copy of the Document means a machine-readable copy, 41832 represented in a format whose specification is available to the 41833 general public, that is suitable for revising the document 41834 straightforwardly with generic text editors or (for images composed 41835 of pixels) generic paint programs or (for drawings) some widely 41836 available drawing editor, and that is suitable for input to text 41837 formatters or for automatic translation to a variety of formats 41838 suitable for input to text formatters. A copy made in an otherwise 41839 Transparent file format whose markup, or absence of markup, has 41840 been arranged to thwart or discourage subsequent modification by 41841 readers is not Transparent. An image format is not Transparent if 41842 used for any substantial amount of text. A copy that is not 41843 "Transparent" is called "Opaque". 41844 41845 Examples of suitable formats for Transparent copies include plain 41846 ASCII without markup, Texinfo input format, LaTeX input format, 41847 SGML or XML using a publicly available DTD, and standard-conforming 41848 simple HTML, PostScript or PDF designed for human modification. 41849 Examples of transparent image formats include PNG, XCF and JPG. 41850 Opaque formats include proprietary formats that can be read and 41851 edited only by proprietary word processors, SGML or XML for which 41852 the DTD and/or processing tools are not generally available, and 41853 the machine-generated HTML, PostScript or PDF produced by some word 41854 processors for output purposes only. 41855 41856 The "Title Page" means, for a printed book, the title page itself, 41857 plus such following pages as are needed to hold, legibly, the 41858 material this License requires to appear in the title page. For 41859 works in formats which do not have any title page as such, "Title 41860 Page" means the text near the most prominent appearance of the 41861 work's title, preceding the beginning of the body of the text. 41862 41863 The "publisher" means any person or entity that distributes copies 41864 of the Document to the public. 41865 41866 A section "Entitled XYZ" means a named subunit of the Document 41867 whose title either is precisely XYZ or contains XYZ in parentheses 41868 following text that translates XYZ in another language. (Here XYZ 41869 stands for a specific section name mentioned below, such as 41870 "Acknowledgements", "Dedications", "Endorsements", or "History".) 41871 To "Preserve the Title" of such a section when you modify the 41872 Document means that it remains a section "Entitled XYZ" according 41873 to this definition. 41874 41875 The Document may include Warranty Disclaimers next to the notice 41876 which states that this License applies to the Document. These 41877 Warranty Disclaimers are considered to be included by reference in 41878 this License, but only as regards disclaiming warranties: any other 41879 implication that these Warranty Disclaimers may have is void and 41880 has no effect on the meaning of this License. 41881 41882 2. VERBATIM COPYING 41883 41884 You may copy and distribute the Document in any medium, either 41885 commercially or noncommercially, provided that this License, the 41886 copyright notices, and the license notice saying this License 41887 applies to the Document are reproduced in all copies, and that you 41888 add no other conditions whatsoever to those of this License. You 41889 may not use technical measures to obstruct or control the reading 41890 or further copying of the copies you make or distribute. However, 41891 you may accept compensation in exchange for copies. If you 41892 distribute a large enough number of copies you must also follow the 41893 conditions in section 3. 41894 41895 You may also lend copies, under the same conditions stated above, 41896 and you may publicly display copies. 41897 41898 3. COPYING IN QUANTITY 41899 41900 If you publish printed copies (or copies in media that commonly 41901 have printed covers) of the Document, numbering more than 100, and 41902 the Document's license notice requires Cover Texts, you must 41903 enclose the copies in covers that carry, clearly and legibly, all 41904 these Cover Texts: Front-Cover Texts on the front cover, and 41905 Back-Cover Texts on the back cover. Both covers must also clearly 41906 and legibly identify you as the publisher of these copies. The 41907 front cover must present the full title with all words of the title 41908 equally prominent and visible. You may add other material on the 41909 covers in addition. Copying with changes limited to the covers, as 41910 long as they preserve the title of the Document and satisfy these 41911 conditions, can be treated as verbatim copying in other respects. 41912 41913 If the required texts for either cover are too voluminous to fit 41914 legibly, you should put the first ones listed (as many as fit 41915 reasonably) on the actual cover, and continue the rest onto 41916 adjacent pages. 41917 41918 If you publish or distribute Opaque copies of the Document 41919 numbering more than 100, you must either include a machine-readable 41920 Transparent copy along with each Opaque copy, or state in or with 41921 each Opaque copy a computer-network location from which the general 41922 network-using public has access to download using public-standard 41923 network protocols a complete Transparent copy of the Document, free 41924 of added material. If you use the latter option, you must take 41925 reasonably prudent steps, when you begin distribution of Opaque 41926 copies in quantity, to ensure that this Transparent copy will 41927 remain thus accessible at the stated location until at least one 41928 year after the last time you distribute an Opaque copy (directly or 41929 through your agents or retailers) of that edition to the public. 41930 41931 It is requested, but not required, that you contact the authors of 41932 the Document well before redistributing any large number of copies, 41933 to give them a chance to provide you with an updated version of the 41934 Document. 41935 41936 4. MODIFICATIONS 41937 41938 You may copy and distribute a Modified Version of the Document 41939 under the conditions of sections 2 and 3 above, provided that you 41940 release the Modified Version under precisely this License, with the 41941 Modified Version filling the role of the Document, thus licensing 41942 distribution and modification of the Modified Version to whoever 41943 possesses a copy of it. In addition, you must do these things in 41944 the Modified Version: 41945 41946 A. Use in the Title Page (and on the covers, if any) a title 41947 distinct from that of the Document, and from those of previous 41948 versions (which should, if there were any, be listed in the 41949 History section of the Document). You may use the same title 41950 as a previous version if the original publisher of that 41951 version gives permission. 41952 41953 B. List on the Title Page, as authors, one or more persons or 41954 entities responsible for authorship of the modifications in 41955 the Modified Version, together with at least five of the 41956 principal authors of the Document (all of its principal 41957 authors, if it has fewer than five), unless they release you 41958 from this requirement. 41959 41960 C. State on the Title page the name of the publisher of the 41961 Modified Version, as the publisher. 41962 41963 D. Preserve all the copyright notices of the Document. 41964 41965 E. Add an appropriate copyright notice for your modifications 41966 adjacent to the other copyright notices. 41967 41968 F. Include, immediately after the copyright notices, a license 41969 notice giving the public permission to use the Modified 41970 Version under the terms of this License, in the form shown in 41971 the Addendum below. 41972 41973 G. Preserve in that license notice the full lists of Invariant 41974 Sections and required Cover Texts given in the Document's 41975 license notice. 41976 41977 H. Include an unaltered copy of this License. 41978 41979 I. Preserve the section Entitled "History", Preserve its Title, 41980 and add to it an item stating at least the title, year, new 41981 authors, and publisher of the Modified Version as given on the 41982 Title Page. If there is no section Entitled "History" in the 41983 Document, create one stating the title, year, authors, and 41984 publisher of the Document as given on its Title Page, then add 41985 an item describing the Modified Version as stated in the 41986 previous sentence. 41987 41988 J. Preserve the network location, if any, given in the Document 41989 for public access to a Transparent copy of the Document, and 41990 likewise the network locations given in the Document for 41991 previous versions it was based on. These may be placed in the 41992 "History" section. You may omit a network location for a work 41993 that was published at least four years before the Document 41994 itself, or if the original publisher of the version it refers 41995 to gives permission. 41996 41997 K. For any section Entitled "Acknowledgements" or "Dedications", 41998 Preserve the Title of the section, and preserve in the section 41999 all the substance and tone of each of the contributor 42000 acknowledgements and/or dedications given therein. 42001 42002 L. Preserve all the Invariant Sections of the Document, unaltered 42003 in their text and in their titles. Section numbers or the 42004 equivalent are not considered part of the section titles. 42005 42006 M. Delete any section Entitled "Endorsements". Such a section 42007 may not be included in the Modified Version. 42008 42009 N. Do not retitle any existing section to be Entitled 42010 "Endorsements" or to conflict in title with any Invariant 42011 Section. 42012 42013 O. Preserve any Warranty Disclaimers. 42014 42015 If the Modified Version includes new front-matter sections or 42016 appendices that qualify as Secondary Sections and contain no 42017 material copied from the Document, you may at your option designate 42018 some or all of these sections as invariant. To do this, add their 42019 titles to the list of Invariant Sections in the Modified Version's 42020 license notice. These titles must be distinct from any other 42021 section titles. 42022 42023 You may add a section Entitled "Endorsements", provided it contains 42024 nothing but endorsements of your Modified Version by various 42025 parties--for example, statements of peer review or that the text 42026 has been approved by an organization as the authoritative 42027 definition of a standard. 42028 42029 You may add a passage of up to five words as a Front-Cover Text, 42030 and a passage of up to 25 words as a Back-Cover Text, to the end of 42031 the list of Cover Texts in the Modified Version. Only one passage 42032 of Front-Cover Text and one of Back-Cover Text may be added by (or 42033 through arrangements made by) any one entity. If the Document 42034 already includes a cover text for the same cover, previously added 42035 by you or by arrangement made by the same entity you are acting on 42036 behalf of, you may not add another; but you may replace the old 42037 one, on explicit permission from the previous publisher that added 42038 the old one. 42039 42040 The author(s) and publisher(s) of the Document do not by this 42041 License give permission to use their names for publicity for or to 42042 assert or imply endorsement of any Modified Version. 42043 42044 5. COMBINING DOCUMENTS 42045 42046 You may combine the Document with other documents released under 42047 this License, under the terms defined in section 4 above for 42048 modified versions, provided that you include in the combination all 42049 of the Invariant Sections of all of the original documents, 42050 unmodified, and list them all as Invariant Sections of your 42051 combined work in its license notice, and that you preserve all 42052 their Warranty Disclaimers. 42053 42054 The combined work need only contain one copy of this License, and 42055 multiple identical Invariant Sections may be replaced with a single 42056 copy. If there are multiple Invariant Sections with the same name 42057 but different contents, make the title of each such section unique 42058 by adding at the end of it, in parentheses, the name of the 42059 original author or publisher of that section if known, or else a 42060 unique number. Make the same adjustment to the section titles in 42061 the list of Invariant Sections in the license notice of the 42062 combined work. 42063 42064 In the combination, you must combine any sections Entitled 42065 "History" in the various original documents, forming one section 42066 Entitled "History"; likewise combine any sections Entitled 42067 "Acknowledgements", and any sections Entitled "Dedications". You 42068 must delete all sections Entitled "Endorsements." 42069 42070 6. COLLECTIONS OF DOCUMENTS 42071 42072 You may make a collection consisting of the Document and other 42073 documents released under this License, and replace the individual 42074 copies of this License in the various documents with a single copy 42075 that is included in the collection, provided that you follow the 42076 rules of this License for verbatim copying of each of the documents 42077 in all other respects. 42078 42079 You may extract a single document from such a collection, and 42080 distribute it individually under this License, provided you insert 42081 a copy of this License into the extracted document, and follow this 42082 License in all other respects regarding verbatim copying of that 42083 document. 42084 42085 7. AGGREGATION WITH INDEPENDENT WORKS 42086 42087 A compilation of the Document or its derivatives with other 42088 separate and independent documents or works, in or on a volume of a 42089 storage or distribution medium, is called an "aggregate" if the 42090 copyright resulting from the compilation is not used to limit the 42091 legal rights of the compilation's users beyond what the individual 42092 works permit. When the Document is included in an aggregate, this 42093 License does not apply to the other works in the aggregate which 42094 are not themselves derivative works of the Document. 42095 42096 If the Cover Text requirement of section 3 is applicable to these 42097 copies of the Document, then if the Document is less than one half 42098 of the entire aggregate, the Document's Cover Texts may be placed 42099 on covers that bracket the Document within the aggregate, or the 42100 electronic equivalent of covers if the Document is in electronic 42101 form. Otherwise they must appear on printed covers that bracket 42102 the whole aggregate. 42103 42104 8. TRANSLATION 42105 42106 Translation is considered a kind of modification, so you may 42107 distribute translations of the Document under the terms of section 42108 4. Replacing Invariant Sections with translations requires special 42109 permission from their copyright holders, but you may include 42110 translations of some or all Invariant Sections in addition to the 42111 original versions of these Invariant Sections. You may include a 42112 translation of this License, and all the license notices in the 42113 Document, and any Warranty Disclaimers, provided that you also 42114 include the original English version of this License and the 42115 original versions of those notices and disclaimers. In case of a 42116 disagreement between the translation and the original version of 42117 this License or a notice or disclaimer, the original version will 42118 prevail. 42119 42120 If a section in the Document is Entitled "Acknowledgements", 42121 "Dedications", or "History", the requirement (section 4) to 42122 Preserve its Title (section 1) will typically require changing the 42123 actual title. 42124 42125 9. TERMINATION 42126 42127 You may not copy, modify, sublicense, or distribute the Document 42128 except as expressly provided under this License. Any attempt 42129 otherwise to copy, modify, sublicense, or distribute it is void, 42130 and will automatically terminate your rights under this License. 42131 42132 However, if you cease all violation of this License, then your 42133 license from a particular copyright holder is reinstated (a) 42134 provisionally, unless and until the copyright holder explicitly and 42135 finally terminates your license, and (b) permanently, if the 42136 copyright holder fails to notify you of the violation by some 42137 reasonable means prior to 60 days after the cessation. 42138 42139 Moreover, your license from a particular copyright holder is 42140 reinstated permanently if the copyright holder notifies you of the 42141 violation by some reasonable means, this is the first time you have 42142 received notice of violation of this License (for any work) from 42143 that copyright holder, and you cure the violation prior to 30 days 42144 after your receipt of the notice. 42145 42146 Termination of your rights under this section does not terminate 42147 the licenses of parties who have received copies or rights from you 42148 under this License. If your rights have been terminated and not 42149 permanently reinstated, receipt of a copy of some or all of the 42150 same material does not give you any rights to use it. 42151 42152 10. FUTURE REVISIONS OF THIS LICENSE 42153 42154 The Free Software Foundation may publish new, revised versions of 42155 the GNU Free Documentation License from time to time. Such new 42156 versions will be similar in spirit to the present version, but may 42157 differ in detail to address new problems or concerns. See 42158 <http://www.gnu.org/copyleft/>. 42159 42160 Each version of the License is given a distinguishing version 42161 number. If the Document specifies that a particular numbered 42162 version of this License "or any later version" applies to it, you 42163 have the option of following the terms and conditions either of 42164 that specified version or of any later version that has been 42165 published (not as a draft) by the Free Software Foundation. If the 42166 Document does not specify a version number of this License, you may 42167 choose any version ever published (not as a draft) by the Free 42168 Software Foundation. If the Document specifies that a proxy can 42169 decide which future versions of this License can be used, that 42170 proxy's public statement of acceptance of a version permanently 42171 authorizes you to choose that version for the Document. 42172 42173 11. RELICENSING 42174 42175 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 42176 World Wide Web server that publishes copyrightable works and also 42177 provides prominent facilities for anybody to edit those works. A 42178 public wiki that anybody can edit is an example of such a server. 42179 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 42180 site means any set of copyrightable works thus published on the MMC 42181 site. 42182 42183 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 42184 license published by Creative Commons Corporation, a not-for-profit 42185 corporation with a principal place of business in San Francisco, 42186 California, as well as future copyleft versions of that license 42187 published by that same organization. 42188 42189 "Incorporate" means to publish or republish a Document, in whole or 42190 in part, as part of another Document. 42191 42192 An MMC is "eligible for relicensing" if it is licensed under this 42193 License, and if all works that were first published under this 42194 License somewhere other than this MMC, and subsequently 42195 incorporated in whole or in part into the MMC, (1) had no cover 42196 texts or invariant sections, and (2) were thus incorporated prior 42197 to November 1, 2008. 42198 42199 The operator of an MMC Site may republish an MMC contained in the 42200 site under CC-BY-SA on the same site at any time before August 1, 42201 2009, provided the MMC is eligible for relicensing. 42202 42203ADDENDUM: How to use this License for your documents 42204==================================================== 42205 42206To use this License in a document you have written, include a copy of 42207the License in the document and put the following copyright and license 42208notices just after the title page: 42209 42210 Copyright (C) YEAR YOUR NAME. 42211 Permission is granted to copy, distribute and/or modify this document 42212 under the terms of the GNU Free Documentation License, Version 1.3 42213 or any later version published by the Free Software Foundation; 42214 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 42215 Texts. A copy of the license is included in the section entitled ``GNU 42216 Free Documentation License''. 42217 42218 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 42219replace the "with...Texts." line with this: 42220 42221 with the Invariant Sections being LIST THEIR TITLES, with 42222 the Front-Cover Texts being LIST, and with the Back-Cover Texts 42223 being LIST. 42224 42225 If you have Invariant Sections without Cover Texts, or some other 42226combination of the three, merge those two alternatives to suit the 42227situation. 42228 42229 If your document contains nontrivial examples of program code, we 42230recommend releasing these examples in parallel under your choice of free 42231software license, such as the GNU General Public License, to permit 42232their use in free software. 42233 42234 42235File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 42236 42237Contributors to GCC 42238******************* 42239 42240The GCC project would like to thank its many contributors. Without them 42241the project would not have been nearly as successful as it has been. 42242Any omissions in this list are accidental. Feel free to contact 42243<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 42244some of your contributions are not listed. Please keep this list in 42245alphabetical order. 42246 42247 * Analog Devices helped implement the support for complex data types 42248 and iterators. 42249 42250 * John David Anglin for threading-related fixes and improvements to 42251 libstdc++-v3, and the HP-UX port. 42252 42253 * James van Artsdalen wrote the code that makes efficient use of the 42254 Intel 80387 register stack. 42255 42256 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 42257 Series port. 42258 42259 * Alasdair Baird for various bug fixes. 42260 42261 * Giovanni Bajo for analyzing lots of complicated C++ problem 42262 reports. 42263 42264 * Peter Barada for his work to improve code generation for new 42265 ColdFire cores. 42266 42267 * Gerald Baumgartner added the signature extension to the C++ front 42268 end. 42269 42270 * Godmar Back for his Java improvements and encouragement. 42271 42272 * Scott Bambrough for help porting the Java compiler. 42273 42274 * Wolfgang Bangerth for processing tons of bug reports. 42275 42276 * Jon Beniston for his Microsoft Windows port of Java and port to 42277 Lattice Mico32. 42278 42279 * Daniel Berlin for better DWARF2 support, faster/better 42280 optimizations, improved alias analysis, plus migrating GCC to 42281 Bugzilla. 42282 42283 * Geoff Berry for his Java object serialization work and various 42284 patches. 42285 42286 * David Binderman tests weekly snapshots of GCC trunk against Fedora 42287 Rawhide for several architectures. 42288 42289 * Laurynas Biveinis for memory management work and DJGPP port fixes. 42290 42291 * Uros Bizjak for the implementation of x87 math built-in functions 42292 and for various middle end and i386 back end improvements and bug 42293 fixes. 42294 42295 * Eric Blake for helping to make GCJ and libgcj conform to the 42296 specifications. 42297 42298 * Janne Blomqvist for contributions to GNU Fortran. 42299 42300 * Segher Boessenkool for various fixes. 42301 42302 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 42303 other Java work. 42304 42305 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 42306 miscellaneous clean-ups. 42307 42308 * Steven Bosscher for integrating the GNU Fortran front end into GCC 42309 and for contributing to the tree-ssa branch. 42310 42311 * Eric Botcazou for fixing middle- and backend bugs left and right. 42312 42313 * Per Bothner for his direction via the steering committee and 42314 various improvements to the infrastructure for supporting new 42315 languages. Chill front end implementation. Initial 42316 implementations of cpplib, fix-header, config.guess, libio, and 42317 past C++ library (libg++) maintainer. Dreaming up, designing and 42318 implementing much of GCJ. 42319 42320 * Devon Bowen helped port GCC to the Tahoe. 42321 42322 * Don Bowman for mips-vxworks contributions. 42323 42324 * Dave Brolley for work on cpplib and Chill. 42325 42326 * Paul Brook for work on the ARM architecture and maintaining GNU 42327 Fortran. 42328 42329 * Robert Brown implemented the support for Encore 32000 systems. 42330 42331 * Christian Bruel for improvements to local store elimination. 42332 42333 * Herman A.J. ten Brugge for various fixes. 42334 42335 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 42336 FAQ. 42337 42338 * Joe Buck for his direction via the steering committee from its 42339 creation to 2013. 42340 42341 * Craig Burley for leadership of the G77 Fortran effort. 42342 42343 * Stephan Buys for contributing Doxygen notes for libstdc++. 42344 42345 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 42346 to the C++ strings, streambufs and formatted I/O, hard detective 42347 work on the frustrating localization issues, and keeping up with 42348 the problem reports. 42349 42350 * John Carr for his alias work, SPARC hacking, infrastructure 42351 improvements, previous contributions to the steering committee, 42352 loop optimizations, etc. 42353 42354 * Stephane Carrez for 68HC11 and 68HC12 ports. 42355 42356 * Steve Chamberlain for support for the Renesas SH and H8 processors 42357 and the PicoJava processor, and for GCJ config fixes. 42358 42359 * Glenn Chambers for help with the GCJ FAQ. 42360 42361 * John-Marc Chandonia for various libgcj patches. 42362 42363 * Denis Chertykov for contributing and maintaining the AVR port, the 42364 first GCC port for an 8-bit architecture. 42365 42366 * Scott Christley for his Objective-C contributions. 42367 42368 * Eric Christopher for his Java porting help and clean-ups. 42369 42370 * Branko Cibej for more warning contributions. 42371 42372 * The GNU Classpath project for all of their merged runtime code. 42373 42374 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 42375 '--help', and other random hacking. 42376 42377 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 42378 42379 * R. Kelley Cook for making GCC buildable from a read-only directory 42380 as well as other miscellaneous build process and documentation 42381 clean-ups. 42382 42383 * Ralf Corsepius for SH testing and minor bug fixing. 42384 42385 * Stan Cox for care and feeding of the x86 port and lots of behind 42386 the scenes hacking. 42387 42388 * Alex Crain provided changes for the 3b1. 42389 42390 * Ian Dall for major improvements to the NS32k port. 42391 42392 * Paul Dale for his work to add uClinux platform support to the m68k 42393 backend. 42394 42395 * Dario Dariol contributed the four varieties of sample programs that 42396 print a copy of their source. 42397 42398 * Russell Davidson for fstream and stringstream fixes in libstdc++. 42399 42400 * Bud Davis for work on the G77 and GNU Fortran compilers. 42401 42402 * Mo DeJong for GCJ and libgcj bug fixes. 42403 42404 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 42405 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 42406 42407 * Arnaud Desitter for helping to debug GNU Fortran. 42408 42409 * Gabriel Dos Reis for contributions to G++, contributions and 42410 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 42411 including 'valarray<>', 'complex<>', maintaining the numerics 42412 library (including that pesky '<limits>' :-) and keeping up-to-date 42413 anything to do with numbers. 42414 42415 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 42416 ISO C99 support, CFG dumping support, etc., plus support of the C++ 42417 runtime libraries including for all kinds of C interface issues, 42418 contributing and maintaining 'complex<>', sanity checking and 42419 disbursement, configuration architecture, libio maintenance, and 42420 early math work. 42421 42422 * Franc,ois Dumont for his work on libstdc++-v3, especially 42423 maintaining and improving 'debug-mode' and associative and 42424 unordered containers. 42425 42426 * Zdenek Dvorak for a new loop unroller and various fixes. 42427 42428 * Michael Eager for his work on the Xilinx MicroBlaze port. 42429 42430 * Richard Earnshaw for his ongoing work with the ARM. 42431 42432 * David Edelsohn for his direction via the steering committee, 42433 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 42434 loop changes, doing the entire AIX port of libstdc++ with his bare 42435 hands, and for ensuring GCC properly keeps working on AIX. 42436 42437 * Kevin Ediger for the floating point formatting of num_put::do_put 42438 in libstdc++. 42439 42440 * Phil Edwards for libstdc++ work including configuration hackery, 42441 documentation maintainer, chief breaker of the web pages, the 42442 occasional iostream bug fix, and work on shared library symbol 42443 versioning. 42444 42445 * Paul Eggert for random hacking all over GCC. 42446 42447 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 42448 configuration support for locales and fstream-related fixes. 42449 42450 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 42451 iostreams. 42452 42453 * Christian Ehrhardt for dealing with bug reports. 42454 42455 * Ben Elliston for his work to move the Objective-C runtime into its 42456 own subdirectory and for his work on autoconf. 42457 42458 * Revital Eres for work on the PowerPC 750CL port. 42459 42460 * Marc Espie for OpenBSD support. 42461 42462 * Doug Evans for much of the global optimization framework, arc, 42463 m32r, and SPARC work. 42464 42465 * Christopher Faylor for his work on the Cygwin port and for caring 42466 and feeding the gcc.gnu.org box and saving its users tons of spam. 42467 42468 * Fred Fish for BeOS support and Ada fixes. 42469 42470 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 42471 42472 * Peter Gerwinski for various bug fixes and the Pascal front end. 42473 42474 * Kaveh R. Ghazi for his direction via the steering committee, 42475 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 42476 on a plethora of platforms. Kaveh extends his gratitude to the 42477 CAIP Center at Rutgers University for providing him with computing 42478 resources to work on Free Software from the late 1980s to 2010. 42479 42480 * John Gilmore for a donation to the FSF earmarked improving GNU 42481 Java. 42482 42483 * Judy Goldberg for c++ contributions. 42484 42485 * Torbjorn Granlund for various fixes and the c-torture testsuite, 42486 multiply- and divide-by-constant optimization, improved long long 42487 support, improved leaf function register allocation, and his 42488 direction via the steering committee. 42489 42490 * Jonny Grant for improvements to 'collect2's' '--help' 42491 documentation. 42492 42493 * Anthony Green for his '-Os' contributions, the moxie port, and Java 42494 front end work. 42495 42496 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 42497 code. 42498 42499 * Michael K. Gschwind contributed the port to the PDP-11. 42500 42501 * Richard Biener for his ongoing middle-end contributions and bug 42502 fixes and for release management. 42503 42504 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 42505 the support for Dwarf symbolic debugging information, and much of 42506 the support for System V Release 4. He has also worked heavily on 42507 the Intel 386 and 860 support. 42508 42509 * Sumanth Gundapaneni for contributing the CR16 port. 42510 42511 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 42512 GCSE. 42513 42514 * Bruno Haible for improvements in the runtime overhead for EH, new 42515 warnings and assorted bug fixes. 42516 42517 * Andrew Haley for his amazing Java compiler and library efforts. 42518 42519 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 42520 series 300. 42521 42522 * Michael Hayes for various thankless work he's done trying to get 42523 the c30/c40 ports functional. Lots of loop and unroll improvements 42524 and fixes. 42525 42526 * Dara Hazeghi for wading through myriads of target-specific bug 42527 reports. 42528 42529 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 42530 42531 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 42532 work, loop opts, and generally fixing lots of old problems we've 42533 ignored for years, flow rewrite and lots of further stuff, 42534 including reviewing tons of patches. 42535 42536 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 42537 various fixes. 42538 42539 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 42540 contributed the support for the Sony NEWS machine. 42541 42542 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 42543 various fixes. 42544 42545 * Katherine Holcomb for work on GNU Fortran. 42546 42547 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 42548 of testing and bug fixing, particularly of GCC configury code. 42549 42550 * Steve Holmgren for MachTen patches. 42551 42552 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 42553 42554 * Jan Hubicka for his x86 port improvements. 42555 42556 * Falk Hueffner for working on C and optimization bug reports. 42557 42558 * Bernardo Innocenti for his m68k work, including merging of ColdFire 42559 improvements and uClinux support. 42560 42561 * Christian Iseli for various bug fixes. 42562 42563 * Kamil Iskra for general m68k hacking. 42564 42565 * Lee Iverson for random fixes and MIPS testing. 42566 42567 * Balaji V. Iyer for Cilk+ development and merging. 42568 42569 * Andreas Jaeger for testing and benchmarking of GCC and various bug 42570 fixes. 42571 42572 * Martin Jambor for his work on inter-procedural optimizations, the 42573 switch conversion pass, and scalar replacement of aggregates. 42574 42575 * Jakub Jelinek for his SPARC work and sibling call optimizations as 42576 well as lots of bug fixes and test cases, and for improving the 42577 Java build system. 42578 42579 * Janis Johnson for ia64 testing and fixes, her quality improvement 42580 sidetracks, and web page maintenance. 42581 42582 * Kean Johnston for SCO OpenServer support and various fixes. 42583 42584 * Tim Josling for the sample language treelang based originally on 42585 Richard Kenner's "toy" language. 42586 42587 * Nicolai Josuttis for additional libstdc++ documentation. 42588 42589 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 42590 target. 42591 42592 * Steven G. Kargl for work on GNU Fortran. 42593 42594 * David Kashtan of SRI adapted GCC to VMS. 42595 42596 * Ryszard Kabatek for many, many libstdc++ bug fixes and 42597 optimizations of strings, especially member functions, and for 42598 auto_ptr fixes. 42599 42600 * Geoffrey Keating for his ongoing work to make the PPC work for 42601 GNU/Linux and his automatic regression tester. 42602 42603 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 42604 work in just about every part of libstdc++. 42605 42606 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 42607 MIL-STD-1750A. 42608 42609 * Richard Kenner of the New York University Ultracomputer Research 42610 Laboratory wrote the machine descriptions for the AMD 29000, the 42611 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 42612 support for instruction attributes. He also made changes to better 42613 support RISC processors including changes to common subexpression 42614 elimination, strength reduction, function calling sequence 42615 handling, and condition code support, in addition to generalizing 42616 the code for frame pointer elimination and delay slot scheduling. 42617 Richard Kenner was also the head maintainer of GCC for several 42618 years. 42619 42620 * Mumit Khan for various contributions to the Cygwin and Mingw32 42621 ports and maintaining binary releases for Microsoft Windows hosts, 42622 and for massive libstdc++ porting work to Cygwin/Mingw32. 42623 42624 * Robin Kirkham for cpu32 support. 42625 42626 * Mark Klein for PA improvements. 42627 42628 * Thomas Koenig for various bug fixes. 42629 42630 * Bruce Korb for the new and improved fixincludes code. 42631 42632 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 42633 effort. 42634 42635 * Maxim Kuvyrkov for contributions to the instruction scheduler, the 42636 Android and m68k/Coldfire ports, and optimizations. 42637 42638 * Charles LaBrec contributed the support for the Integrated Solutions 42639 68020 system. 42640 42641 * Asher Langton and Mike Kumbera for contributing Cray pointer 42642 support to GNU Fortran, and for other GNU Fortran improvements. 42643 42644 * Jeff Law for his direction via the steering committee, coordinating 42645 the entire egcs project and GCC 2.95, rolling out snapshots and 42646 releases, handling merges from GCC2, reviewing tons of patches that 42647 might have fallen through the cracks else, and random but extensive 42648 hacking. 42649 42650 * Walter Lee for work on the TILE-Gx and TILEPro ports. 42651 42652 * Marc Lehmann for his direction via the steering committee and 42653 helping with analysis and improvements of x86 performance. 42654 42655 * Victor Leikehman for work on GNU Fortran. 42656 42657 * Ted Lemon wrote parts of the RTL reader and printer. 42658 42659 * Kriang Lerdsuwanakij for C++ improvements including template as 42660 template parameter support, and many C++ fixes. 42661 42662 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 42663 and random work on the Java front end. 42664 42665 * Alain Lichnewsky ported GCC to the MIPS CPU. 42666 42667 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 42668 and patches. 42669 42670 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 42671 42672 * Chen Liqin for various S+core related fixes/improvement, and for 42673 maintaining the S+core port. 42674 42675 * Weiwen Liu for testing and various bug fixes. 42676 42677 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 42678 diagnostics fixes and improvements. 42679 42680 * Dave Love for his ongoing work with the Fortran front end and 42681 runtime libraries. 42682 42683 * Martin von Lo"wis for internal consistency checking infrastructure, 42684 various C++ improvements including namespace support, and tons of 42685 assistance with libstdc++/compiler merges. 42686 42687 * H.J. Lu for his previous contributions to the steering committee, 42688 many x86 bug reports, prototype patches, and keeping the GNU/Linux 42689 ports working. 42690 42691 * Greg McGary for random fixes and (someday) bounded pointers. 42692 42693 * Andrew MacLeod for his ongoing work in building a real EH system, 42694 various code generation improvements, work on the global optimizer, 42695 etc. 42696 42697 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 42698 hacking improvements to compile-time performance, overall knowledge 42699 and direction in the area of instruction scheduling, and design and 42700 implementation of the automaton based instruction scheduler. 42701 42702 * Bob Manson for his behind the scenes work on dejagnu. 42703 42704 * John Marino for contributing the DragonFly BSD port. 42705 42706 * Philip Martin for lots of libstdc++ string and vector iterator 42707 fixes and improvements, and string clean up and testsuites. 42708 42709 * Michael Matz for his work on dominance tree discovery, the x86-64 42710 port, link-time optimization framework and general optimization 42711 improvements. 42712 42713 * All of the Mauve project contributors, for Java test code. 42714 42715 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 42716 42717 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 42718 42719 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 42720 powerpc, haifa, ECOFF debug support, and other assorted hacking. 42721 42722 * Jason Merrill for his direction via the steering committee and 42723 leading the G++ effort. 42724 42725 * Martin Michlmayr for testing GCC on several architectures using the 42726 entire Debian archive. 42727 42728 * David Miller for his direction via the steering committee, lots of 42729 SPARC work, improvements in jump.c and interfacing with the Linux 42730 kernel developers. 42731 42732 * Gary Miller ported GCC to Charles River Data Systems machines. 42733 42734 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 42735 the entire libstdc++ testsuite namespace-compatible. 42736 42737 * Mark Mitchell for his direction via the steering committee, 42738 mountains of C++ work, load/store hoisting out of loops, alias 42739 analysis improvements, ISO C 'restrict' support, and serving as 42740 release manager from 2000 to 2011. 42741 42742 * Alan Modra for various GNU/Linux bits and testing. 42743 42744 * Toon Moene for his direction via the steering committee, Fortran 42745 maintenance, and his ongoing work to make us make Fortran run fast. 42746 42747 * Jason Molenda for major help in the care and feeding of all the 42748 services on the gcc.gnu.org (formerly egcs.cygnus.com) 42749 machine--mail, web services, ftp services, etc etc. Doing all this 42750 work on scrap paper and the backs of envelopes would have been... 42751 difficult. 42752 42753 * Catherine Moore for fixing various ugly problems we have sent her 42754 way, including the haifa bug which was killing the Alpha & PowerPC 42755 Linux kernels. 42756 42757 * Mike Moreton for his various Java patches. 42758 42759 * David Mosberger-Tang for various Alpha improvements, and for the 42760 initial IA-64 port. 42761 42762 * Stephen Moshier contributed the floating point emulator that 42763 assists in cross-compilation and permits support for floating point 42764 numbers wider than 64 bits and for ISO C99 support. 42765 42766 * Bill Moyer for his behind the scenes work on various issues. 42767 42768 * Philippe De Muyter for his work on the m68k port. 42769 42770 * Joseph S. Myers for his work on the PDP-11 port, format checking 42771 and ISO C99 support, and continuous emphasis on (and contributions 42772 to) documentation. 42773 42774 * Nathan Myers for his work on libstdc++-v3: architecture and 42775 authorship through the first three snapshots, including 42776 implementation of locale infrastructure, string, shadow C headers, 42777 and the initial project documentation (DESIGN, CHECKLIST, and so 42778 forth). Later, more work on MT-safe string and shadow headers. 42779 42780 * Felix Natter for documentation on porting libstdc++. 42781 42782 * Nathanael Nerode for cleaning up the configuration/build process. 42783 42784 * NeXT, Inc. donated the front end that supports the Objective-C 42785 language. 42786 42787 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 42788 search engine setup, various documentation fixes and other small 42789 fixes. 42790 42791 * Geoff Noer for his work on getting cygwin native builds working. 42792 42793 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 42794 tracking web pages, GIMPLE tuples, and assorted fixes. 42795 42796 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 42797 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 42798 infrastructure improvements. 42799 42800 * Alexandre Oliva for various build infrastructure improvements, 42801 scripts and amazing testing work, including keeping libtool issues 42802 sane and happy. 42803 42804 * Stefan Olsson for work on mt_alloc. 42805 42806 * Melissa O'Neill for various NeXT fixes. 42807 42808 * Rainer Orth for random MIPS work, including improvements to GCC's 42809 o32 ABI support, improvements to dejagnu's MIPS support, Java 42810 configuration clean-ups and porting work, and maintaining the IRIX, 42811 Solaris 2, and Tru64 UNIX ports. 42812 42813 * Hartmut Penner for work on the s390 port. 42814 42815 * Paul Petersen wrote the machine description for the Alliant FX/8. 42816 42817 * Alexandre Petit-Bianco for implementing much of the Java compiler 42818 and continued Java maintainership. 42819 42820 * Matthias Pfaller for major improvements to the NS32k port. 42821 42822 * Gerald Pfeifer for his direction via the steering committee, 42823 pointing out lots of problems we need to solve, maintenance of the 42824 web pages, and taking care of documentation maintenance in general. 42825 42826 * Andrew Pinski for processing bug reports by the dozen. 42827 42828 * Ovidiu Predescu for his work on the Objective-C front end and 42829 runtime libraries. 42830 42831 * Jerry Quinn for major performance improvements in C++ formatted 42832 I/O. 42833 42834 * Ken Raeburn for various improvements to checker, MIPS ports and 42835 various cleanups in the compiler. 42836 42837 * Rolf W. Rasmussen for hacking on AWT. 42838 42839 * David Reese of Sun Microsystems contributed to the Solaris on 42840 PowerPC port. 42841 42842 * Volker Reichelt for keeping up with the problem reports. 42843 42844 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 42845 hacking and developing and maintaining the Epiphany port. 42846 42847 * Loren J. Rittle for improvements to libstdc++-v3 including the 42848 FreeBSD port, threading fixes, thread-related configury changes, 42849 critical threading documentation, and solutions to really tricky 42850 I/O problems, as well as keeping GCC properly working on FreeBSD 42851 and continuous testing. 42852 42853 * Craig Rodrigues for processing tons of bug reports. 42854 42855 * Ola Ro"nnerup for work on mt_alloc. 42856 42857 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 42858 42859 * David Ronis inspired and encouraged Craig to rewrite the G77 42860 documentation in texinfo format by contributing a first pass at a 42861 translation of the old 'g77-0.5.16/f/DOC' file. 42862 42863 * Ken Rose for fixes to GCC's delay slot filling code. 42864 42865 * Ira Rosen for her contributions to the auto-vectorizer. 42866 42867 * Paul Rubin wrote most of the preprocessor. 42868 42869 * Pe'tur Runo'lfsson for major performance improvements in C++ 42870 formatted I/O and large file support in C++ filebuf. 42871 42872 * Chip Salzenberg for libstdc++ patches and improvements to locales, 42873 traits, Makefiles, libio, libtool hackery, and "long long" support. 42874 42875 * Juha Sarlin for improvements to the H8 code generator. 42876 42877 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 42878 300. 42879 42880 * Roger Sayle for improvements to constant folding and GCC's RTL 42881 optimizers as well as for fixing numerous bugs. 42882 42883 * Bradley Schatz for his work on the GCJ FAQ. 42884 42885 * Peter Schauer wrote the code to allow debugging to work on the 42886 Alpha. 42887 42888 * William Schelter did most of the work on the Intel 80386 support. 42889 42890 * Tobias Schlu"ter for work on GNU Fortran. 42891 42892 * Bernd Schmidt for various code generation improvements and major 42893 work in the reload pass, serving as release manager for GCC 2.95.3, 42894 and work on the Blackfin and C6X ports. 42895 42896 * Peter Schmid for constant testing of libstdc++--especially 42897 application testing, going above and beyond what was requested for 42898 the release criteria--and libstdc++ header file tweaks. 42899 42900 * Jason Schroeder for jcf-dump patches. 42901 42902 * Andreas Schwab for his work on the m68k port. 42903 42904 * Lars Segerlund for work on GNU Fortran. 42905 42906 * Dodji Seketeli for numerous C++ bug fixes and debug info 42907 improvements. 42908 42909 * Tim Shen for major work on '<regex>'. 42910 42911 * Joel Sherrill for his direction via the steering committee, RTEMS 42912 contributions and RTEMS testing. 42913 42914 * Nathan Sidwell for many C++ fixes/improvements. 42915 42916 * Jeffrey Siegal for helping RMS with the original design of GCC, 42917 some code which handles the parse tree and RTL data structures, 42918 constant folding and help with the original VAX & m68k ports. 42919 42920 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 42921 from the LWG (thereby keeping GCC in line with updates from the 42922 ISO). 42923 42924 * Franz Sirl for his ongoing work with making the PPC port stable for 42925 GNU/Linux. 42926 42927 * Andrey Slepuhin for assorted AIX hacking. 42928 42929 * Trevor Smigiel for contributing the SPU port. 42930 42931 * Christopher Smith did the port for Convex machines. 42932 42933 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 42934 Retired from GCC maintainership August 2010, having mentored two 42935 new maintainers into the role. 42936 42937 * Randy Smith finished the Sun FPA support. 42938 42939 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 42940 functions, '<random>', and various improvements to C++11 features. 42941 42942 * Scott Snyder for queue, iterator, istream, and string fixes and 42943 libstdc++ testsuite entries. Also for providing the patch to G77 42944 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 42945 'LOGICAL*1'. 42946 42947 * Zdenek Sojka for running automated regression testing of GCC and 42948 reporting numerous bugs. 42949 42950 * Jayant Sonar for contributing the CR16 port. 42951 42952 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 42953 42954 * Richard Stallman, for writing the original GCC and launching the 42955 GNU project. 42956 42957 * Jan Stein of the Chalmers Computer Society provided support for 42958 Genix, as well as part of the 32000 machine description. 42959 42960 * Nigel Stephens for various mips16 related fixes/improvements. 42961 42962 * Jonathan Stone wrote the machine description for the Pyramid 42963 computer. 42964 42965 * Graham Stott for various infrastructure improvements. 42966 42967 * John Stracke for his Java HTTP protocol fixes. 42968 42969 * Mike Stump for his Elxsi port, G++ contributions over the years and 42970 more recently his vxworks contributions 42971 42972 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 42973 42974 * Shigeya Suzuki for this fixes for the bsdi platforms. 42975 42976 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 42977 support, general configury hacking, fixincludes, etc. 42978 42979 * Holger Teutsch provided the support for the Clipper CPU. 42980 42981 * Gary Thomas for his ongoing work to make the PPC work for 42982 GNU/Linux. 42983 42984 * Philipp Thomas for random bug fixes throughout the compiler 42985 42986 * Jason Thorpe for thread support in libstdc++ on NetBSD. 42987 42988 * Kresten Krab Thorup wrote the run time support for the Objective-C 42989 language and the fantastic Java bytecode interpreter. 42990 42991 * Michael Tiemann for random bug fixes, the first instruction 42992 scheduler, initial C++ support, function integration, NS32k, SPARC 42993 and M88k machine description work, delay slot scheduling. 42994 42995 * Andreas Tobler for his work porting libgcj to Darwin. 42996 42997 * Teemu Torma for thread safe exception handling support. 42998 42999 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 43000 definitions, and of the VAX machine description. 43001 43002 * Daniel Towner and Hariharan Sandanagobalane contributed and 43003 maintain the picoChip port. 43004 43005 * Tom Tromey for internationalization support and for his many Java 43006 contributions and libgcj maintainership. 43007 43008 * Lassi Tuura for improvements to config.guess to determine HP 43009 processor types. 43010 43011 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 43012 43013 * Andy Vaught for the design and initial implementation of the GNU 43014 Fortran front end. 43015 43016 * Brent Verner for work with the libstdc++ cshadow files and their 43017 associated configure steps. 43018 43019 * Todd Vierling for contributions for NetBSD ports. 43020 43021 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 43022 guidance. 43023 43024 * Dean Wakerley for converting the install documentation from HTML to 43025 texinfo in time for GCC 3.0. 43026 43027 * Krister Walfridsson for random bug fixes. 43028 43029 * Feng Wang for contributions to GNU Fortran. 43030 43031 * Stephen M. Webb for time and effort on making libstdc++ shadow 43032 files work with the tricky Solaris 8+ headers, and for pushing the 43033 build-time header tree. Also, for starting and driving the 43034 '<regex>' effort. 43035 43036 * John Wehle for various improvements for the x86 code generator, 43037 related infrastructure improvements to help x86 code generation, 43038 value range propagation and other work, WE32k port. 43039 43040 * Ulrich Weigand for work on the s390 port. 43041 43042 * Zack Weinberg for major work on cpplib and various other bug fixes. 43043 43044 * Matt Welsh for help with Linux Threads support in GCJ. 43045 43046 * Urban Widmark for help fixing java.io. 43047 43048 * Mark Wielaard for new Java library code and his work integrating 43049 with Classpath. 43050 43051 * Dale Wiles helped port GCC to the Tahoe. 43052 43053 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 43054 43055 * Jim Wilson for his direction via the steering committee, tackling 43056 hard problems in various places that nobody else wanted to work on, 43057 strength reduction and other loop optimizations. 43058 43059 * Paul Woegerer and Tal Agmon for the CRX port. 43060 43061 * Carlo Wood for various fixes. 43062 43063 * Tom Wood for work on the m88k port. 43064 43065 * Chung-Ju Wu for his work on the Andes NDS32 port. 43066 43067 * Canqun Yang for work on GNU Fortran. 43068 43069 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 43070 description for the Tron architecture (specifically, the Gmicro). 43071 43072 * Kevin Zachmann helped port GCC to the Tahoe. 43073 43074 * Ayal Zaks for Swing Modulo Scheduling (SMS). 43075 43076 * Xiaoqiang Zhang for work on GNU Fortran. 43077 43078 * Gilles Zunino for help porting Java to Irix. 43079 43080 The following people are recognized for their contributions to GNAT, 43081the Ada front end of GCC: 43082 * Bernard Banner 43083 43084 * Romain Berrendonner 43085 43086 * Geert Bosch 43087 43088 * Emmanuel Briot 43089 43090 * Joel Brobecker 43091 43092 * Ben Brosgol 43093 43094 * Vincent Celier 43095 43096 * Arnaud Charlet 43097 43098 * Chien Chieng 43099 43100 * Cyrille Comar 43101 43102 * Cyrille Crozes 43103 43104 * Robert Dewar 43105 43106 * Gary Dismukes 43107 43108 * Robert Duff 43109 43110 * Ed Falis 43111 43112 * Ramon Fernandez 43113 43114 * Sam Figueroa 43115 43116 * Vasiliy Fofanov 43117 43118 * Michael Friess 43119 43120 * Franco Gasperoni 43121 43122 * Ted Giering 43123 43124 * Matthew Gingell 43125 43126 * Laurent Guerby 43127 43128 * Jerome Guitton 43129 43130 * Olivier Hainque 43131 43132 * Jerome Hugues 43133 43134 * Hristian Kirtchev 43135 43136 * Jerome Lambourg 43137 43138 * Bruno Leclerc 43139 43140 * Albert Lee 43141 43142 * Sean McNeil 43143 43144 * Javier Miranda 43145 43146 * Laurent Nana 43147 43148 * Pascal Obry 43149 43150 * Dong-Ik Oh 43151 43152 * Laurent Pautet 43153 43154 * Brett Porter 43155 43156 * Thomas Quinot 43157 43158 * Nicolas Roche 43159 43160 * Pat Rogers 43161 43162 * Jose Ruiz 43163 43164 * Douglas Rupp 43165 43166 * Sergey Rybin 43167 43168 * Gail Schenker 43169 43170 * Ed Schonberg 43171 43172 * Nicolas Setton 43173 43174 * Samuel Tardieu 43175 43176 The following people are recognized for their contributions of new 43177features, bug reports, testing and integration of classpath/libgcj for 43178GCC version 4.1: 43179 * Lillian Angel for 'JTree' implementation and lots Free Swing 43180 additions and bug fixes. 43181 43182 * Wolfgang Baer for 'GapContent' bug fixes. 43183 43184 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 43185 event fixes, lots of Free Swing work including 'JTable' editing. 43186 43187 * Stuart Ballard for RMI constant fixes. 43188 43189 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 43190 43191 * Gary Benson for 'MessageFormat' fixes. 43192 43193 * Daniel Bonniot for 'Serialization' fixes. 43194 43195 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 43196 and 'DOM xml:id' support. 43197 43198 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 43199 43200 * Archie Cobbs for build fixes, VM interface updates, 43201 'URLClassLoader' updates. 43202 43203 * Kelley Cook for build fixes. 43204 43205 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 43206 43207 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 43208 improvements. 43209 43210 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 43211 2D support. Lots of imageio framework additions, lots of AWT and 43212 Free Swing bug fixes. 43213 43214 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 43215 fixes, better 'Proxy' support, bug fixes and IKVM integration. 43216 43217 * Santiago Gala for 'AccessControlContext' fixes. 43218 43219 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 43220 improvements. 43221 43222 * David Gilbert for 'basic' and 'metal' icon and plaf support and 43223 lots of documenting, Lots of Free Swing and metal theme additions. 43224 'MetalIconFactory' implementation. 43225 43226 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 43227 43228 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 43229 build speedups. 43230 43231 * Kim Ho for 'JFileChooser' implementation. 43232 43233 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 43234 'Serialization' fixes, 'Properties' XML support and generic branch 43235 work, VMIntegration guide update. 43236 43237 * Bastiaan Huisman for 'TimeZone' bug fixing. 43238 43239 * Andreas Jaeger for mprec updates. 43240 43241 * Paul Jenner for better '-Werror' support. 43242 43243 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 43244 43245 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 43246 bug fixes all over. Lots of Free Swing work including styled text. 43247 43248 * Simon Kitching for 'String' cleanups and optimization suggestions. 43249 43250 * Michael Koch for configuration fixes, 'Locale' updates, bug and 43251 build fixes. 43252 43253 * Guilhem Lavaux for configuration, thread and channel fixes and 43254 Kaffe integration. JCL native 'Pointer' updates. Logger bug 43255 fixes. 43256 43257 * David Lichteblau for JCL support library global/local reference 43258 cleanups. 43259 43260 * Aaron Luchko for JDWP updates and documentation fixes. 43261 43262 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 43263 features. 43264 43265 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 43266 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 43267 and implementing the Qt4 peers. 43268 43269 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 43270 'SystemLogger' and 'FileHandler' rotate implementations, NIO 43271 'FileChannel.map' support, security and policy updates. 43272 43273 * Bryce McKinlay for RMI work. 43274 43275 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 43276 testing and documenting. 43277 43278 * Kalle Olavi Niemitalo for build fixes. 43279 43280 * Rainer Orth for build fixes. 43281 43282 * Andrew Overholt for 'File' locking fixes. 43283 43284 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 43285 43286 * Olga Rodimina for 'MenuSelectionManager' implementation. 43287 43288 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 43289 43290 * Julian Scheid for documentation updates and gjdoc support. 43291 43292 * Christian Schlichtherle for zip fixes and cleanups. 43293 43294 * Robert Schuster for documentation updates and beans fixes, 43295 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 43296 and URL, AWT and Free Swing bug fixes. 43297 43298 * Keith Seitz for lots of JDWP work. 43299 43300 * Christian Thalinger for 64-bit cleanups, Configuration and VM 43301 interface fixes and 'CACAO' integration, 'fdlibm' updates. 43302 43303 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 43304 43305 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 43306 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 43307 43308 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 43309 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 43310 'GdkPixbugDecoder' updates. 43311 43312 * Tom Tromey for Eclipse integration, generics work, lots of bug 43313 fixes and gcj integration including coordinating The Big Merge. 43314 43315 * Mark Wielaard for bug fixes, packaging and release management, 43316 'Clipboard' implementation, system call interrupts and network 43317 timeouts and 'GdkPixpufDecoder' fixes. 43318 43319 In addition to the above, all of which also contributed time and energy 43320in testing GCC, we would like to thank the following for their 43321contributions to testing: 43322 43323 * Michael Abd-El-Malek 43324 43325 * Thomas Arend 43326 43327 * Bonzo Armstrong 43328 43329 * Steven Ashe 43330 43331 * Chris Baldwin 43332 43333 * David Billinghurst 43334 43335 * Jim Blandy 43336 43337 * Stephane Bortzmeyer 43338 43339 * Horst von Brand 43340 43341 * Frank Braun 43342 43343 * Rodney Brown 43344 43345 * Sidney Cadot 43346 43347 * Bradford Castalia 43348 43349 * Robert Clark 43350 43351 * Jonathan Corbet 43352 43353 * Ralph Doncaster 43354 43355 * Richard Emberson 43356 43357 * Levente Farkas 43358 43359 * Graham Fawcett 43360 43361 * Mark Fernyhough 43362 43363 * Robert A. French 43364 43365 * Jo"rgen Freyh 43366 43367 * Mark K. Gardner 43368 43369 * Charles-Antoine Gauthier 43370 43371 * Yung Shing Gene 43372 43373 * David Gilbert 43374 43375 * Simon Gornall 43376 43377 * Fred Gray 43378 43379 * John Griffin 43380 43381 * Patrik Hagglund 43382 43383 * Phil Hargett 43384 43385 * Amancio Hasty 43386 43387 * Takafumi Hayashi 43388 43389 * Bryan W. Headley 43390 43391 * Kevin B. Hendricks 43392 43393 * Joep Jansen 43394 43395 * Christian Joensson 43396 43397 * Michel Kern 43398 43399 * David Kidd 43400 43401 * Tobias Kuipers 43402 43403 * Anand Krishnaswamy 43404 43405 * A. O. V. Le Blanc 43406 43407 * llewelly 43408 43409 * Damon Love 43410 43411 * Brad Lucier 43412 43413 * Matthias Klose 43414 43415 * Martin Knoblauch 43416 43417 * Rick Lutowski 43418 43419 * Jesse Macnish 43420 43421 * Stefan Morrell 43422 43423 * Anon A. Mous 43424 43425 * Matthias Mueller 43426 43427 * Pekka Nikander 43428 43429 * Rick Niles 43430 43431 * Jon Olson 43432 43433 * Magnus Persson 43434 43435 * Chris Pollard 43436 43437 * Richard Polton 43438 43439 * Derk Reefman 43440 43441 * David Rees 43442 43443 * Paul Reilly 43444 43445 * Tom Reilly 43446 43447 * Torsten Rueger 43448 43449 * Danny Sadinoff 43450 43451 * Marc Schifer 43452 43453 * Erik Schnetter 43454 43455 * Wayne K. Schroll 43456 43457 * David Schuler 43458 43459 * Vin Shelton 43460 43461 * Tim Souder 43462 43463 * Adam Sulmicki 43464 43465 * Bill Thorson 43466 43467 * George Talbot 43468 43469 * Pedro A. M. Vazquez 43470 43471 * Gregory Warnes 43472 43473 * Ian Watson 43474 43475 * David E. Young 43476 43477 * And many others 43478 43479 And finally we'd like to thank everyone who uses the compiler, provides 43480feedback and generally reminds us why we're doing this work in the first 43481place. 43482 43483 43484File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 43485 43486Option Index 43487************ 43488 43489GCC's command line options are indexed here without any initial '-' or 43490'--'. Where an option has both positive and negative forms (such as 43491'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 43492indexed under the most appropriate form; it may sometimes be useful to 43493look up both forms. 43494 43495[index] 43496* Menu: 43497 43498* fltrans: Internal flags. (line 18) 43499* fltrans-output-list: Internal flags. (line 23) 43500* fresolution: Internal flags. (line 27) 43501* fwpa: Internal flags. (line 9) 43502* msoft-float: Soft float library routines. 43503 (line 6) 43504 43505 43506File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 43507 43508Concept Index 43509************* 43510 43511[index] 43512* Menu: 43513 43514* ! in constraint: Multi-Alternative. (line 47) 43515* # in constraint: Modifiers. (line 78) 43516* # in template: Output Template. (line 66) 43517* #pragma: Misc. (line 387) 43518* $ in constraint: Multi-Alternative. (line 56) 43519* % in constraint: Modifiers. (line 52) 43520* % in GTY option: GTY Options. (line 18) 43521* % in template: Output Template. (line 6) 43522* & in constraint: Modifiers. (line 25) 43523* (gimple_stmt_iterator: GIMPLE API. (line 30) 43524* (nil): RTL Objects. (line 73) 43525* * in constraint: Modifiers. (line 83) 43526* * in template: Output Statement. (line 29) 43527* *gimple_build_asm_vec: GIMPLE_ASM. (line 6) 43528* *gimple_build_assign: GIMPLE_ASSIGN. (line 6) 43529* *gimple_build_assign <1>: GIMPLE_ASSIGN. (line 18) 43530* *gimple_build_assign <2>: GIMPLE_ASSIGN. (line 29) 43531* *gimple_build_assign <3>: GIMPLE_ASSIGN. (line 35) 43532* *gimple_build_bind: GIMPLE_BIND. (line 6) 43533* *gimple_build_call: GIMPLE_CALL. (line 6) 43534* *gimple_build_call_from_tree: GIMPLE_CALL. (line 15) 43535* *gimple_build_call_vec: GIMPLE_CALL. (line 23) 43536* *gimple_build_catch: GIMPLE_CATCH. (line 6) 43537* *gimple_build_cond: GIMPLE_COND. (line 6) 43538* *gimple_build_cond_from_tree: GIMPLE_COND. (line 14) 43539* *gimple_build_debug_bind: GIMPLE_DEBUG. (line 6) 43540* *gimple_build_eh_filter: GIMPLE_EH_FILTER. (line 6) 43541* *gimple_build_goto: GIMPLE_GOTO. (line 6) 43542* *gimple_build_label: GIMPLE_LABEL. (line 6) 43543* *gimple_build_omp_atomic_load: GIMPLE_OMP_ATOMIC_LOAD. 43544 (line 6) 43545* *gimple_build_omp_atomic_store: GIMPLE_OMP_ATOMIC_STORE. 43546 (line 6) 43547* *gimple_build_omp_continue: GIMPLE_OMP_CONTINUE. 43548 (line 6) 43549* *gimple_build_omp_critical: GIMPLE_OMP_CRITICAL. 43550 (line 6) 43551* *gimple_build_omp_for: GIMPLE_OMP_FOR. (line 6) 43552* *gimple_build_omp_parallel: GIMPLE_OMP_PARALLEL. 43553 (line 6) 43554* *gimple_build_omp_sections: GIMPLE_OMP_SECTIONS. 43555 (line 6) 43556* *gimple_build_omp_single: GIMPLE_OMP_SINGLE. (line 6) 43557* *gimple_build_resx: GIMPLE_RESX. (line 6) 43558* *gimple_build_return: GIMPLE_RETURN. (line 6) 43559* *gimple_build_switch: GIMPLE_SWITCH. (line 6) 43560* *gimple_build_try: GIMPLE_TRY. (line 6) 43561* + in constraint: Modifiers. (line 12) 43562* -fsection-anchors: Special Accessors. (line 117) 43563* -fsection-anchors <1>: Anchored Addresses. (line 6) 43564* /c in RTL dump: Flags. (line 221) 43565* /f in RTL dump: Flags. (line 229) 43566* /i in RTL dump: Flags. (line 274) 43567* /j in RTL dump: Flags. (line 286) 43568* /s in RTL dump: Flags. (line 245) 43569* /u in RTL dump: Flags. (line 296) 43570* /v in RTL dump: Flags. (line 328) 43571* 0 in constraint: Simple Constraints. (line 128) 43572* < in constraint: Simple Constraints. (line 47) 43573* = in constraint: Modifiers. (line 8) 43574* > in constraint: Simple Constraints. (line 59) 43575* ? in constraint: Multi-Alternative. (line 41) 43576* \: Output Template. (line 46) 43577* ^ in constraint: Multi-Alternative. (line 52) 43578* __absvdi2: Integer library routines. 43579 (line 106) 43580* __absvsi2: Integer library routines. 43581 (line 105) 43582* __addda3: Fixed-point fractional library routines. 43583 (line 52) 43584* __adddf3: Soft float library routines. 43585 (line 22) 43586* __adddq3: Fixed-point fractional library routines. 43587 (line 39) 43588* __addha3: Fixed-point fractional library routines. 43589 (line 49) 43590* __addhq3: Fixed-point fractional library routines. 43591 (line 37) 43592* __addqq3: Fixed-point fractional library routines. 43593 (line 35) 43594* __addsa3: Fixed-point fractional library routines. 43595 (line 51) 43596* __addsf3: Soft float library routines. 43597 (line 21) 43598* __addsq3: Fixed-point fractional library routines. 43599 (line 38) 43600* __addta3: Fixed-point fractional library routines. 43601 (line 53) 43602* __addtf3: Soft float library routines. 43603 (line 23) 43604* __adduda3: Fixed-point fractional library routines. 43605 (line 59) 43606* __addudq3: Fixed-point fractional library routines. 43607 (line 47) 43608* __adduha3: Fixed-point fractional library routines. 43609 (line 55) 43610* __adduhq3: Fixed-point fractional library routines. 43611 (line 43) 43612* __adduqq3: Fixed-point fractional library routines. 43613 (line 41) 43614* __addusa3: Fixed-point fractional library routines. 43615 (line 57) 43616* __addusq3: Fixed-point fractional library routines. 43617 (line 45) 43618* __adduta3: Fixed-point fractional library routines. 43619 (line 61) 43620* __addvdi3: Integer library routines. 43621 (line 110) 43622* __addvsi3: Integer library routines. 43623 (line 109) 43624* __addxf3: Soft float library routines. 43625 (line 25) 43626* __ashlda3: Fixed-point fractional library routines. 43627 (line 358) 43628* __ashldi3: Integer library routines. 43629 (line 13) 43630* __ashldq3: Fixed-point fractional library routines. 43631 (line 346) 43632* __ashlha3: Fixed-point fractional library routines. 43633 (line 356) 43634* __ashlhq3: Fixed-point fractional library routines. 43635 (line 344) 43636* __ashlqq3: Fixed-point fractional library routines. 43637 (line 343) 43638* __ashlsa3: Fixed-point fractional library routines. 43639 (line 357) 43640* __ashlsi3: Integer library routines. 43641 (line 12) 43642* __ashlsq3: Fixed-point fractional library routines. 43643 (line 345) 43644* __ashlta3: Fixed-point fractional library routines. 43645 (line 359) 43646* __ashlti3: Integer library routines. 43647 (line 14) 43648* __ashluda3: Fixed-point fractional library routines. 43649 (line 365) 43650* __ashludq3: Fixed-point fractional library routines. 43651 (line 354) 43652* __ashluha3: Fixed-point fractional library routines. 43653 (line 361) 43654* __ashluhq3: Fixed-point fractional library routines. 43655 (line 350) 43656* __ashluqq3: Fixed-point fractional library routines. 43657 (line 348) 43658* __ashlusa3: Fixed-point fractional library routines. 43659 (line 363) 43660* __ashlusq3: Fixed-point fractional library routines. 43661 (line 352) 43662* __ashluta3: Fixed-point fractional library routines. 43663 (line 367) 43664* __ashrda3: Fixed-point fractional library routines. 43665 (line 378) 43666* __ashrdi3: Integer library routines. 43667 (line 18) 43668* __ashrdq3: Fixed-point fractional library routines. 43669 (line 374) 43670* __ashrha3: Fixed-point fractional library routines. 43671 (line 376) 43672* __ashrhq3: Fixed-point fractional library routines. 43673 (line 372) 43674* __ashrqq3: Fixed-point fractional library routines. 43675 (line 371) 43676* __ashrsa3: Fixed-point fractional library routines. 43677 (line 377) 43678* __ashrsi3: Integer library routines. 43679 (line 17) 43680* __ashrsq3: Fixed-point fractional library routines. 43681 (line 373) 43682* __ashrta3: Fixed-point fractional library routines. 43683 (line 379) 43684* __ashrti3: Integer library routines. 43685 (line 19) 43686* __bid_adddd3: Decimal float library routines. 43687 (line 23) 43688* __bid_addsd3: Decimal float library routines. 43689 (line 19) 43690* __bid_addtd3: Decimal float library routines. 43691 (line 27) 43692* __bid_divdd3: Decimal float library routines. 43693 (line 66) 43694* __bid_divsd3: Decimal float library routines. 43695 (line 62) 43696* __bid_divtd3: Decimal float library routines. 43697 (line 70) 43698* __bid_eqdd2: Decimal float library routines. 43699 (line 258) 43700* __bid_eqsd2: Decimal float library routines. 43701 (line 256) 43702* __bid_eqtd2: Decimal float library routines. 43703 (line 260) 43704* __bid_extendddtd2: Decimal float library routines. 43705 (line 91) 43706* __bid_extendddtf: Decimal float library routines. 43707 (line 139) 43708* __bid_extendddxf: Decimal float library routines. 43709 (line 133) 43710* __bid_extenddfdd: Decimal float library routines. 43711 (line 146) 43712* __bid_extenddftd: Decimal float library routines. 43713 (line 106) 43714* __bid_extendsddd2: Decimal float library routines. 43715 (line 87) 43716* __bid_extendsddf: Decimal float library routines. 43717 (line 127) 43718* __bid_extendsdtd2: Decimal float library routines. 43719 (line 89) 43720* __bid_extendsdtf: Decimal float library routines. 43721 (line 137) 43722* __bid_extendsdxf: Decimal float library routines. 43723 (line 131) 43724* __bid_extendsfdd: Decimal float library routines. 43725 (line 102) 43726* __bid_extendsfsd: Decimal float library routines. 43727 (line 144) 43728* __bid_extendsftd: Decimal float library routines. 43729 (line 104) 43730* __bid_extendtftd: Decimal float library routines. 43731 (line 148) 43732* __bid_extendxftd: Decimal float library routines. 43733 (line 108) 43734* __bid_fixdddi: Decimal float library routines. 43735 (line 169) 43736* __bid_fixddsi: Decimal float library routines. 43737 (line 161) 43738* __bid_fixsddi: Decimal float library routines. 43739 (line 167) 43740* __bid_fixsdsi: Decimal float library routines. 43741 (line 159) 43742* __bid_fixtddi: Decimal float library routines. 43743 (line 171) 43744* __bid_fixtdsi: Decimal float library routines. 43745 (line 163) 43746* __bid_fixunsdddi: Decimal float library routines. 43747 (line 186) 43748* __bid_fixunsddsi: Decimal float library routines. 43749 (line 177) 43750* __bid_fixunssddi: Decimal float library routines. 43751 (line 184) 43752* __bid_fixunssdsi: Decimal float library routines. 43753 (line 175) 43754* __bid_fixunstddi: Decimal float library routines. 43755 (line 188) 43756* __bid_fixunstdsi: Decimal float library routines. 43757 (line 179) 43758* __bid_floatdidd: Decimal float library routines. 43759 (line 204) 43760* __bid_floatdisd: Decimal float library routines. 43761 (line 202) 43762* __bid_floatditd: Decimal float library routines. 43763 (line 206) 43764* __bid_floatsidd: Decimal float library routines. 43765 (line 195) 43766* __bid_floatsisd: Decimal float library routines. 43767 (line 193) 43768* __bid_floatsitd: Decimal float library routines. 43769 (line 197) 43770* __bid_floatunsdidd: Decimal float library routines. 43771 (line 222) 43772* __bid_floatunsdisd: Decimal float library routines. 43773 (line 220) 43774* __bid_floatunsditd: Decimal float library routines. 43775 (line 224) 43776* __bid_floatunssidd: Decimal float library routines. 43777 (line 213) 43778* __bid_floatunssisd: Decimal float library routines. 43779 (line 211) 43780* __bid_floatunssitd: Decimal float library routines. 43781 (line 215) 43782* __bid_gedd2: Decimal float library routines. 43783 (line 276) 43784* __bid_gesd2: Decimal float library routines. 43785 (line 274) 43786* __bid_getd2: Decimal float library routines. 43787 (line 278) 43788* __bid_gtdd2: Decimal float library routines. 43789 (line 303) 43790* __bid_gtsd2: Decimal float library routines. 43791 (line 301) 43792* __bid_gttd2: Decimal float library routines. 43793 (line 305) 43794* __bid_ledd2: Decimal float library routines. 43795 (line 294) 43796* __bid_lesd2: Decimal float library routines. 43797 (line 292) 43798* __bid_letd2: Decimal float library routines. 43799 (line 296) 43800* __bid_ltdd2: Decimal float library routines. 43801 (line 285) 43802* __bid_ltsd2: Decimal float library routines. 43803 (line 283) 43804* __bid_lttd2: Decimal float library routines. 43805 (line 287) 43806* __bid_muldd3: Decimal float library routines. 43807 (line 52) 43808* __bid_mulsd3: Decimal float library routines. 43809 (line 48) 43810* __bid_multd3: Decimal float library routines. 43811 (line 56) 43812* __bid_nedd2: Decimal float library routines. 43813 (line 267) 43814* __bid_negdd2: Decimal float library routines. 43815 (line 77) 43816* __bid_negsd2: Decimal float library routines. 43817 (line 75) 43818* __bid_negtd2: Decimal float library routines. 43819 (line 79) 43820* __bid_nesd2: Decimal float library routines. 43821 (line 265) 43822* __bid_netd2: Decimal float library routines. 43823 (line 269) 43824* __bid_subdd3: Decimal float library routines. 43825 (line 37) 43826* __bid_subsd3: Decimal float library routines. 43827 (line 33) 43828* __bid_subtd3: Decimal float library routines. 43829 (line 41) 43830* __bid_truncdddf: Decimal float library routines. 43831 (line 152) 43832* __bid_truncddsd2: Decimal float library routines. 43833 (line 93) 43834* __bid_truncddsf: Decimal float library routines. 43835 (line 123) 43836* __bid_truncdfsd: Decimal float library routines. 43837 (line 110) 43838* __bid_truncsdsf: Decimal float library routines. 43839 (line 150) 43840* __bid_trunctddd2: Decimal float library routines. 43841 (line 97) 43842* __bid_trunctddf: Decimal float library routines. 43843 (line 129) 43844* __bid_trunctdsd2: Decimal float library routines. 43845 (line 95) 43846* __bid_trunctdsf: Decimal float library routines. 43847 (line 125) 43848* __bid_trunctdtf: Decimal float library routines. 43849 (line 154) 43850* __bid_trunctdxf: Decimal float library routines. 43851 (line 135) 43852* __bid_trunctfdd: Decimal float library routines. 43853 (line 118) 43854* __bid_trunctfsd: Decimal float library routines. 43855 (line 114) 43856* __bid_truncxfdd: Decimal float library routines. 43857 (line 116) 43858* __bid_truncxfsd: Decimal float library routines. 43859 (line 112) 43860* __bid_unorddd2: Decimal float library routines. 43861 (line 234) 43862* __bid_unordsd2: Decimal float library routines. 43863 (line 232) 43864* __bid_unordtd2: Decimal float library routines. 43865 (line 236) 43866* __bswapdi2: Integer library routines. 43867 (line 161) 43868* __bswapsi2: Integer library routines. 43869 (line 160) 43870* __builtin_classify_type: Varargs. (line 48) 43871* __builtin_next_arg: Varargs. (line 39) 43872* __builtin_saveregs: Varargs. (line 22) 43873* __chkp_bndcl: Misc. (line 649) 43874* __chkp_bndcu: Misc. (line 655) 43875* __chkp_bndldx: Misc. (line 643) 43876* __chkp_bndmk: Misc. (line 630) 43877* __chkp_bndret: Misc. (line 661) 43878* __chkp_bndstx: Misc. (line 637) 43879* __chkp_intersect: Misc. (line 667) 43880* __chkp_narrow: Misc. (line 672) 43881* __chkp_sizeof: Misc. (line 678) 43882* __clear_cache: Miscellaneous routines. 43883 (line 9) 43884* __clzdi2: Integer library routines. 43885 (line 130) 43886* __clzsi2: Integer library routines. 43887 (line 129) 43888* __clzti2: Integer library routines. 43889 (line 131) 43890* __cmpda2: Fixed-point fractional library routines. 43891 (line 458) 43892* __cmpdf2: Soft float library routines. 43893 (line 163) 43894* __cmpdi2: Integer library routines. 43895 (line 86) 43896* __cmpdq2: Fixed-point fractional library routines. 43897 (line 447) 43898* __cmpha2: Fixed-point fractional library routines. 43899 (line 456) 43900* __cmphq2: Fixed-point fractional library routines. 43901 (line 445) 43902* __cmpqq2: Fixed-point fractional library routines. 43903 (line 444) 43904* __cmpsa2: Fixed-point fractional library routines. 43905 (line 457) 43906* __cmpsf2: Soft float library routines. 43907 (line 162) 43908* __cmpsq2: Fixed-point fractional library routines. 43909 (line 446) 43910* __cmpta2: Fixed-point fractional library routines. 43911 (line 459) 43912* __cmptf2: Soft float library routines. 43913 (line 164) 43914* __cmpti2: Integer library routines. 43915 (line 87) 43916* __cmpuda2: Fixed-point fractional library routines. 43917 (line 464) 43918* __cmpudq2: Fixed-point fractional library routines. 43919 (line 454) 43920* __cmpuha2: Fixed-point fractional library routines. 43921 (line 461) 43922* __cmpuhq2: Fixed-point fractional library routines. 43923 (line 451) 43924* __cmpuqq2: Fixed-point fractional library routines. 43925 (line 449) 43926* __cmpusa2: Fixed-point fractional library routines. 43927 (line 463) 43928* __cmpusq2: Fixed-point fractional library routines. 43929 (line 452) 43930* __cmputa2: Fixed-point fractional library routines. 43931 (line 466) 43932* __CTOR_LIST__: Initialization. (line 25) 43933* __ctzdi2: Integer library routines. 43934 (line 137) 43935* __ctzsi2: Integer library routines. 43936 (line 136) 43937* __ctzti2: Integer library routines. 43938 (line 138) 43939* __divda3: Fixed-point fractional library routines. 43940 (line 234) 43941* __divdc3: Soft float library routines. 43942 (line 250) 43943* __divdf3: Soft float library routines. 43944 (line 47) 43945* __divdi3: Integer library routines. 43946 (line 24) 43947* __divdq3: Fixed-point fractional library routines. 43948 (line 229) 43949* __divha3: Fixed-point fractional library routines. 43950 (line 231) 43951* __divhq3: Fixed-point fractional library routines. 43952 (line 227) 43953* __divqq3: Fixed-point fractional library routines. 43954 (line 225) 43955* __divsa3: Fixed-point fractional library routines. 43956 (line 233) 43957* __divsc3: Soft float library routines. 43958 (line 248) 43959* __divsf3: Soft float library routines. 43960 (line 46) 43961* __divsi3: Integer library routines. 43962 (line 23) 43963* __divsq3: Fixed-point fractional library routines. 43964 (line 228) 43965* __divta3: Fixed-point fractional library routines. 43966 (line 235) 43967* __divtc3: Soft float library routines. 43968 (line 252) 43969* __divtf3: Soft float library routines. 43970 (line 48) 43971* __divti3: Integer library routines. 43972 (line 25) 43973* __divxc3: Soft float library routines. 43974 (line 254) 43975* __divxf3: Soft float library routines. 43976 (line 50) 43977* __dpd_adddd3: Decimal float library routines. 43978 (line 21) 43979* __dpd_addsd3: Decimal float library routines. 43980 (line 17) 43981* __dpd_addtd3: Decimal float library routines. 43982 (line 25) 43983* __dpd_divdd3: Decimal float library routines. 43984 (line 64) 43985* __dpd_divsd3: Decimal float library routines. 43986 (line 60) 43987* __dpd_divtd3: Decimal float library routines. 43988 (line 68) 43989* __dpd_eqdd2: Decimal float library routines. 43990 (line 257) 43991* __dpd_eqsd2: Decimal float library routines. 43992 (line 255) 43993* __dpd_eqtd2: Decimal float library routines. 43994 (line 259) 43995* __dpd_extendddtd2: Decimal float library routines. 43996 (line 90) 43997* __dpd_extendddtf: Decimal float library routines. 43998 (line 138) 43999* __dpd_extendddxf: Decimal float library routines. 44000 (line 132) 44001* __dpd_extenddfdd: Decimal float library routines. 44002 (line 145) 44003* __dpd_extenddftd: Decimal float library routines. 44004 (line 105) 44005* __dpd_extendsddd2: Decimal float library routines. 44006 (line 86) 44007* __dpd_extendsddf: Decimal float library routines. 44008 (line 126) 44009* __dpd_extendsdtd2: Decimal float library routines. 44010 (line 88) 44011* __dpd_extendsdtf: Decimal float library routines. 44012 (line 136) 44013* __dpd_extendsdxf: Decimal float library routines. 44014 (line 130) 44015* __dpd_extendsfdd: Decimal float library routines. 44016 (line 101) 44017* __dpd_extendsfsd: Decimal float library routines. 44018 (line 143) 44019* __dpd_extendsftd: Decimal float library routines. 44020 (line 103) 44021* __dpd_extendtftd: Decimal float library routines. 44022 (line 147) 44023* __dpd_extendxftd: Decimal float library routines. 44024 (line 107) 44025* __dpd_fixdddi: Decimal float library routines. 44026 (line 168) 44027* __dpd_fixddsi: Decimal float library routines. 44028 (line 160) 44029* __dpd_fixsddi: Decimal float library routines. 44030 (line 166) 44031* __dpd_fixsdsi: Decimal float library routines. 44032 (line 158) 44033* __dpd_fixtddi: Decimal float library routines. 44034 (line 170) 44035* __dpd_fixtdsi: Decimal float library routines. 44036 (line 162) 44037* __dpd_fixunsdddi: Decimal float library routines. 44038 (line 185) 44039* __dpd_fixunsddsi: Decimal float library routines. 44040 (line 176) 44041* __dpd_fixunssddi: Decimal float library routines. 44042 (line 183) 44043* __dpd_fixunssdsi: Decimal float library routines. 44044 (line 174) 44045* __dpd_fixunstddi: Decimal float library routines. 44046 (line 187) 44047* __dpd_fixunstdsi: Decimal float library routines. 44048 (line 178) 44049* __dpd_floatdidd: Decimal float library routines. 44050 (line 203) 44051* __dpd_floatdisd: Decimal float library routines. 44052 (line 201) 44053* __dpd_floatditd: Decimal float library routines. 44054 (line 205) 44055* __dpd_floatsidd: Decimal float library routines. 44056 (line 194) 44057* __dpd_floatsisd: Decimal float library routines. 44058 (line 192) 44059* __dpd_floatsitd: Decimal float library routines. 44060 (line 196) 44061* __dpd_floatunsdidd: Decimal float library routines. 44062 (line 221) 44063* __dpd_floatunsdisd: Decimal float library routines. 44064 (line 219) 44065* __dpd_floatunsditd: Decimal float library routines. 44066 (line 223) 44067* __dpd_floatunssidd: Decimal float library routines. 44068 (line 212) 44069* __dpd_floatunssisd: Decimal float library routines. 44070 (line 210) 44071* __dpd_floatunssitd: Decimal float library routines. 44072 (line 214) 44073* __dpd_gedd2: Decimal float library routines. 44074 (line 275) 44075* __dpd_gesd2: Decimal float library routines. 44076 (line 273) 44077* __dpd_getd2: Decimal float library routines. 44078 (line 277) 44079* __dpd_gtdd2: Decimal float library routines. 44080 (line 302) 44081* __dpd_gtsd2: Decimal float library routines. 44082 (line 300) 44083* __dpd_gttd2: Decimal float library routines. 44084 (line 304) 44085* __dpd_ledd2: Decimal float library routines. 44086 (line 293) 44087* __dpd_lesd2: Decimal float library routines. 44088 (line 291) 44089* __dpd_letd2: Decimal float library routines. 44090 (line 295) 44091* __dpd_ltdd2: Decimal float library routines. 44092 (line 284) 44093* __dpd_ltsd2: Decimal float library routines. 44094 (line 282) 44095* __dpd_lttd2: Decimal float library routines. 44096 (line 286) 44097* __dpd_muldd3: Decimal float library routines. 44098 (line 50) 44099* __dpd_mulsd3: Decimal float library routines. 44100 (line 46) 44101* __dpd_multd3: Decimal float library routines. 44102 (line 54) 44103* __dpd_nedd2: Decimal float library routines. 44104 (line 266) 44105* __dpd_negdd2: Decimal float library routines. 44106 (line 76) 44107* __dpd_negsd2: Decimal float library routines. 44108 (line 74) 44109* __dpd_negtd2: Decimal float library routines. 44110 (line 78) 44111* __dpd_nesd2: Decimal float library routines. 44112 (line 264) 44113* __dpd_netd2: Decimal float library routines. 44114 (line 268) 44115* __dpd_subdd3: Decimal float library routines. 44116 (line 35) 44117* __dpd_subsd3: Decimal float library routines. 44118 (line 31) 44119* __dpd_subtd3: Decimal float library routines. 44120 (line 39) 44121* __dpd_truncdddf: Decimal float library routines. 44122 (line 151) 44123* __dpd_truncddsd2: Decimal float library routines. 44124 (line 92) 44125* __dpd_truncddsf: Decimal float library routines. 44126 (line 122) 44127* __dpd_truncdfsd: Decimal float library routines. 44128 (line 109) 44129* __dpd_truncsdsf: Decimal float library routines. 44130 (line 149) 44131* __dpd_trunctddd2: Decimal float library routines. 44132 (line 96) 44133* __dpd_trunctddf: Decimal float library routines. 44134 (line 128) 44135* __dpd_trunctdsd2: Decimal float library routines. 44136 (line 94) 44137* __dpd_trunctdsf: Decimal float library routines. 44138 (line 124) 44139* __dpd_trunctdtf: Decimal float library routines. 44140 (line 153) 44141* __dpd_trunctdxf: Decimal float library routines. 44142 (line 134) 44143* __dpd_trunctfdd: Decimal float library routines. 44144 (line 117) 44145* __dpd_trunctfsd: Decimal float library routines. 44146 (line 113) 44147* __dpd_truncxfdd: Decimal float library routines. 44148 (line 115) 44149* __dpd_truncxfsd: Decimal float library routines. 44150 (line 111) 44151* __dpd_unorddd2: Decimal float library routines. 44152 (line 233) 44153* __dpd_unordsd2: Decimal float library routines. 44154 (line 231) 44155* __dpd_unordtd2: Decimal float library routines. 44156 (line 235) 44157* __DTOR_LIST__: Initialization. (line 25) 44158* __eqdf2: Soft float library routines. 44159 (line 193) 44160* __eqsf2: Soft float library routines. 44161 (line 192) 44162* __eqtf2: Soft float library routines. 44163 (line 194) 44164* __extenddftf2: Soft float library routines. 44165 (line 67) 44166* __extenddfxf2: Soft float library routines. 44167 (line 68) 44168* __extendsfdf2: Soft float library routines. 44169 (line 64) 44170* __extendsftf2: Soft float library routines. 44171 (line 65) 44172* __extendsfxf2: Soft float library routines. 44173 (line 66) 44174* __ffsdi2: Integer library routines. 44175 (line 143) 44176* __ffsti2: Integer library routines. 44177 (line 144) 44178* __fixdfdi: Soft float library routines. 44179 (line 87) 44180* __fixdfsi: Soft float library routines. 44181 (line 80) 44182* __fixdfti: Soft float library routines. 44183 (line 93) 44184* __fixsfdi: Soft float library routines. 44185 (line 86) 44186* __fixsfsi: Soft float library routines. 44187 (line 79) 44188* __fixsfti: Soft float library routines. 44189 (line 92) 44190* __fixtfdi: Soft float library routines. 44191 (line 88) 44192* __fixtfsi: Soft float library routines. 44193 (line 81) 44194* __fixtfti: Soft float library routines. 44195 (line 94) 44196* __fixunsdfdi: Soft float library routines. 44197 (line 107) 44198* __fixunsdfsi: Soft float library routines. 44199 (line 100) 44200* __fixunsdfti: Soft float library routines. 44201 (line 114) 44202* __fixunssfdi: Soft float library routines. 44203 (line 106) 44204* __fixunssfsi: Soft float library routines. 44205 (line 99) 44206* __fixunssfti: Soft float library routines. 44207 (line 113) 44208* __fixunstfdi: Soft float library routines. 44209 (line 108) 44210* __fixunstfsi: Soft float library routines. 44211 (line 101) 44212* __fixunstfti: Soft float library routines. 44213 (line 115) 44214* __fixunsxfdi: Soft float library routines. 44215 (line 109) 44216* __fixunsxfsi: Soft float library routines. 44217 (line 102) 44218* __fixunsxfti: Soft float library routines. 44219 (line 116) 44220* __fixxfdi: Soft float library routines. 44221 (line 89) 44222* __fixxfsi: Soft float library routines. 44223 (line 82) 44224* __fixxfti: Soft float library routines. 44225 (line 95) 44226* __floatdidf: Soft float library routines. 44227 (line 127) 44228* __floatdisf: Soft float library routines. 44229 (line 126) 44230* __floatditf: Soft float library routines. 44231 (line 128) 44232* __floatdixf: Soft float library routines. 44233 (line 129) 44234* __floatsidf: Soft float library routines. 44235 (line 121) 44236* __floatsisf: Soft float library routines. 44237 (line 120) 44238* __floatsitf: Soft float library routines. 44239 (line 122) 44240* __floatsixf: Soft float library routines. 44241 (line 123) 44242* __floattidf: Soft float library routines. 44243 (line 133) 44244* __floattisf: Soft float library routines. 44245 (line 132) 44246* __floattitf: Soft float library routines. 44247 (line 134) 44248* __floattixf: Soft float library routines. 44249 (line 135) 44250* __floatundidf: Soft float library routines. 44251 (line 145) 44252* __floatundisf: Soft float library routines. 44253 (line 144) 44254* __floatunditf: Soft float library routines. 44255 (line 146) 44256* __floatundixf: Soft float library routines. 44257 (line 147) 44258* __floatunsidf: Soft float library routines. 44259 (line 139) 44260* __floatunsisf: Soft float library routines. 44261 (line 138) 44262* __floatunsitf: Soft float library routines. 44263 (line 140) 44264* __floatunsixf: Soft float library routines. 44265 (line 141) 44266* __floatuntidf: Soft float library routines. 44267 (line 151) 44268* __floatuntisf: Soft float library routines. 44269 (line 150) 44270* __floatuntitf: Soft float library routines. 44271 (line 152) 44272* __floatuntixf: Soft float library routines. 44273 (line 153) 44274* __fractdadf: Fixed-point fractional library routines. 44275 (line 643) 44276* __fractdadi: Fixed-point fractional library routines. 44277 (line 640) 44278* __fractdadq: Fixed-point fractional library routines. 44279 (line 623) 44280* __fractdaha2: Fixed-point fractional library routines. 44281 (line 624) 44282* __fractdahi: Fixed-point fractional library routines. 44283 (line 638) 44284* __fractdahq: Fixed-point fractional library routines. 44285 (line 621) 44286* __fractdaqi: Fixed-point fractional library routines. 44287 (line 637) 44288* __fractdaqq: Fixed-point fractional library routines. 44289 (line 620) 44290* __fractdasa2: Fixed-point fractional library routines. 44291 (line 625) 44292* __fractdasf: Fixed-point fractional library routines. 44293 (line 642) 44294* __fractdasi: Fixed-point fractional library routines. 44295 (line 639) 44296* __fractdasq: Fixed-point fractional library routines. 44297 (line 622) 44298* __fractdata2: Fixed-point fractional library routines. 44299 (line 626) 44300* __fractdati: Fixed-point fractional library routines. 44301 (line 641) 44302* __fractdauda: Fixed-point fractional library routines. 44303 (line 634) 44304* __fractdaudq: Fixed-point fractional library routines. 44305 (line 630) 44306* __fractdauha: Fixed-point fractional library routines. 44307 (line 632) 44308* __fractdauhq: Fixed-point fractional library routines. 44309 (line 628) 44310* __fractdauqq: Fixed-point fractional library routines. 44311 (line 627) 44312* __fractdausa: Fixed-point fractional library routines. 44313 (line 633) 44314* __fractdausq: Fixed-point fractional library routines. 44315 (line 629) 44316* __fractdauta: Fixed-point fractional library routines. 44317 (line 635) 44318* __fractdfda: Fixed-point fractional library routines. 44319 (line 1032) 44320* __fractdfdq: Fixed-point fractional library routines. 44321 (line 1029) 44322* __fractdfha: Fixed-point fractional library routines. 44323 (line 1030) 44324* __fractdfhq: Fixed-point fractional library routines. 44325 (line 1027) 44326* __fractdfqq: Fixed-point fractional library routines. 44327 (line 1026) 44328* __fractdfsa: Fixed-point fractional library routines. 44329 (line 1031) 44330* __fractdfsq: Fixed-point fractional library routines. 44331 (line 1028) 44332* __fractdfta: Fixed-point fractional library routines. 44333 (line 1033) 44334* __fractdfuda: Fixed-point fractional library routines. 44335 (line 1040) 44336* __fractdfudq: Fixed-point fractional library routines. 44337 (line 1037) 44338* __fractdfuha: Fixed-point fractional library routines. 44339 (line 1038) 44340* __fractdfuhq: Fixed-point fractional library routines. 44341 (line 1035) 44342* __fractdfuqq: Fixed-point fractional library routines. 44343 (line 1034) 44344* __fractdfusa: Fixed-point fractional library routines. 44345 (line 1039) 44346* __fractdfusq: Fixed-point fractional library routines. 44347 (line 1036) 44348* __fractdfuta: Fixed-point fractional library routines. 44349 (line 1041) 44350* __fractdida: Fixed-point fractional library routines. 44351 (line 982) 44352* __fractdidq: Fixed-point fractional library routines. 44353 (line 979) 44354* __fractdiha: Fixed-point fractional library routines. 44355 (line 980) 44356* __fractdihq: Fixed-point fractional library routines. 44357 (line 977) 44358* __fractdiqq: Fixed-point fractional library routines. 44359 (line 976) 44360* __fractdisa: Fixed-point fractional library routines. 44361 (line 981) 44362* __fractdisq: Fixed-point fractional library routines. 44363 (line 978) 44364* __fractdita: Fixed-point fractional library routines. 44365 (line 983) 44366* __fractdiuda: Fixed-point fractional library routines. 44367 (line 990) 44368* __fractdiudq: Fixed-point fractional library routines. 44369 (line 987) 44370* __fractdiuha: Fixed-point fractional library routines. 44371 (line 988) 44372* __fractdiuhq: Fixed-point fractional library routines. 44373 (line 985) 44374* __fractdiuqq: Fixed-point fractional library routines. 44375 (line 984) 44376* __fractdiusa: Fixed-point fractional library routines. 44377 (line 989) 44378* __fractdiusq: Fixed-point fractional library routines. 44379 (line 986) 44380* __fractdiuta: Fixed-point fractional library routines. 44381 (line 991) 44382* __fractdqda: Fixed-point fractional library routines. 44383 (line 551) 44384* __fractdqdf: Fixed-point fractional library routines. 44385 (line 573) 44386* __fractdqdi: Fixed-point fractional library routines. 44387 (line 570) 44388* __fractdqha: Fixed-point fractional library routines. 44389 (line 549) 44390* __fractdqhi: Fixed-point fractional library routines. 44391 (line 568) 44392* __fractdqhq2: Fixed-point fractional library routines. 44393 (line 547) 44394* __fractdqqi: Fixed-point fractional library routines. 44395 (line 567) 44396* __fractdqqq2: Fixed-point fractional library routines. 44397 (line 546) 44398* __fractdqsa: Fixed-point fractional library routines. 44399 (line 550) 44400* __fractdqsf: Fixed-point fractional library routines. 44401 (line 572) 44402* __fractdqsi: Fixed-point fractional library routines. 44403 (line 569) 44404* __fractdqsq2: Fixed-point fractional library routines. 44405 (line 548) 44406* __fractdqta: Fixed-point fractional library routines. 44407 (line 552) 44408* __fractdqti: Fixed-point fractional library routines. 44409 (line 571) 44410* __fractdquda: Fixed-point fractional library routines. 44411 (line 563) 44412* __fractdqudq: Fixed-point fractional library routines. 44413 (line 558) 44414* __fractdquha: Fixed-point fractional library routines. 44415 (line 560) 44416* __fractdquhq: Fixed-point fractional library routines. 44417 (line 555) 44418* __fractdquqq: Fixed-point fractional library routines. 44419 (line 553) 44420* __fractdqusa: Fixed-point fractional library routines. 44421 (line 562) 44422* __fractdqusq: Fixed-point fractional library routines. 44423 (line 556) 44424* __fractdquta: Fixed-point fractional library routines. 44425 (line 565) 44426* __fracthada2: Fixed-point fractional library routines. 44427 (line 579) 44428* __fracthadf: Fixed-point fractional library routines. 44429 (line 597) 44430* __fracthadi: Fixed-point fractional library routines. 44431 (line 594) 44432* __fracthadq: Fixed-point fractional library routines. 44433 (line 577) 44434* __fracthahi: Fixed-point fractional library routines. 44435 (line 592) 44436* __fracthahq: Fixed-point fractional library routines. 44437 (line 575) 44438* __fracthaqi: Fixed-point fractional library routines. 44439 (line 591) 44440* __fracthaqq: Fixed-point fractional library routines. 44441 (line 574) 44442* __fracthasa2: Fixed-point fractional library routines. 44443 (line 578) 44444* __fracthasf: Fixed-point fractional library routines. 44445 (line 596) 44446* __fracthasi: Fixed-point fractional library routines. 44447 (line 593) 44448* __fracthasq: Fixed-point fractional library routines. 44449 (line 576) 44450* __fracthata2: Fixed-point fractional library routines. 44451 (line 580) 44452* __fracthati: Fixed-point fractional library routines. 44453 (line 595) 44454* __fracthauda: Fixed-point fractional library routines. 44455 (line 588) 44456* __fracthaudq: Fixed-point fractional library routines. 44457 (line 584) 44458* __fracthauha: Fixed-point fractional library routines. 44459 (line 586) 44460* __fracthauhq: Fixed-point fractional library routines. 44461 (line 582) 44462* __fracthauqq: Fixed-point fractional library routines. 44463 (line 581) 44464* __fracthausa: Fixed-point fractional library routines. 44465 (line 587) 44466* __fracthausq: Fixed-point fractional library routines. 44467 (line 583) 44468* __fracthauta: Fixed-point fractional library routines. 44469 (line 589) 44470* __fracthida: Fixed-point fractional library routines. 44471 (line 950) 44472* __fracthidq: Fixed-point fractional library routines. 44473 (line 947) 44474* __fracthiha: Fixed-point fractional library routines. 44475 (line 948) 44476* __fracthihq: Fixed-point fractional library routines. 44477 (line 945) 44478* __fracthiqq: Fixed-point fractional library routines. 44479 (line 944) 44480* __fracthisa: Fixed-point fractional library routines. 44481 (line 949) 44482* __fracthisq: Fixed-point fractional library routines. 44483 (line 946) 44484* __fracthita: Fixed-point fractional library routines. 44485 (line 951) 44486* __fracthiuda: Fixed-point fractional library routines. 44487 (line 958) 44488* __fracthiudq: Fixed-point fractional library routines. 44489 (line 955) 44490* __fracthiuha: Fixed-point fractional library routines. 44491 (line 956) 44492* __fracthiuhq: Fixed-point fractional library routines. 44493 (line 953) 44494* __fracthiuqq: Fixed-point fractional library routines. 44495 (line 952) 44496* __fracthiusa: Fixed-point fractional library routines. 44497 (line 957) 44498* __fracthiusq: Fixed-point fractional library routines. 44499 (line 954) 44500* __fracthiuta: Fixed-point fractional library routines. 44501 (line 959) 44502* __fracthqda: Fixed-point fractional library routines. 44503 (line 505) 44504* __fracthqdf: Fixed-point fractional library routines. 44505 (line 521) 44506* __fracthqdi: Fixed-point fractional library routines. 44507 (line 518) 44508* __fracthqdq2: Fixed-point fractional library routines. 44509 (line 502) 44510* __fracthqha: Fixed-point fractional library routines. 44511 (line 503) 44512* __fracthqhi: Fixed-point fractional library routines. 44513 (line 516) 44514* __fracthqqi: Fixed-point fractional library routines. 44515 (line 515) 44516* __fracthqqq2: Fixed-point fractional library routines. 44517 (line 500) 44518* __fracthqsa: Fixed-point fractional library routines. 44519 (line 504) 44520* __fracthqsf: Fixed-point fractional library routines. 44521 (line 520) 44522* __fracthqsi: Fixed-point fractional library routines. 44523 (line 517) 44524* __fracthqsq2: Fixed-point fractional library routines. 44525 (line 501) 44526* __fracthqta: Fixed-point fractional library routines. 44527 (line 506) 44528* __fracthqti: Fixed-point fractional library routines. 44529 (line 519) 44530* __fracthquda: Fixed-point fractional library routines. 44531 (line 513) 44532* __fracthqudq: Fixed-point fractional library routines. 44533 (line 510) 44534* __fracthquha: Fixed-point fractional library routines. 44535 (line 511) 44536* __fracthquhq: Fixed-point fractional library routines. 44537 (line 508) 44538* __fracthquqq: Fixed-point fractional library routines. 44539 (line 507) 44540* __fracthqusa: Fixed-point fractional library routines. 44541 (line 512) 44542* __fracthqusq: Fixed-point fractional library routines. 44543 (line 509) 44544* __fracthquta: Fixed-point fractional library routines. 44545 (line 514) 44546* __fractqida: Fixed-point fractional library routines. 44547 (line 932) 44548* __fractqidq: Fixed-point fractional library routines. 44549 (line 929) 44550* __fractqiha: Fixed-point fractional library routines. 44551 (line 930) 44552* __fractqihq: Fixed-point fractional library routines. 44553 (line 927) 44554* __fractqiqq: Fixed-point fractional library routines. 44555 (line 926) 44556* __fractqisa: Fixed-point fractional library routines. 44557 (line 931) 44558* __fractqisq: Fixed-point fractional library routines. 44559 (line 928) 44560* __fractqita: Fixed-point fractional library routines. 44561 (line 933) 44562* __fractqiuda: Fixed-point fractional library routines. 44563 (line 941) 44564* __fractqiudq: Fixed-point fractional library routines. 44565 (line 937) 44566* __fractqiuha: Fixed-point fractional library routines. 44567 (line 939) 44568* __fractqiuhq: Fixed-point fractional library routines. 44569 (line 935) 44570* __fractqiuqq: Fixed-point fractional library routines. 44571 (line 934) 44572* __fractqiusa: Fixed-point fractional library routines. 44573 (line 940) 44574* __fractqiusq: Fixed-point fractional library routines. 44575 (line 936) 44576* __fractqiuta: Fixed-point fractional library routines. 44577 (line 942) 44578* __fractqqda: Fixed-point fractional library routines. 44579 (line 481) 44580* __fractqqdf: Fixed-point fractional library routines. 44581 (line 499) 44582* __fractqqdi: Fixed-point fractional library routines. 44583 (line 496) 44584* __fractqqdq2: Fixed-point fractional library routines. 44585 (line 478) 44586* __fractqqha: Fixed-point fractional library routines. 44587 (line 479) 44588* __fractqqhi: Fixed-point fractional library routines. 44589 (line 494) 44590* __fractqqhq2: Fixed-point fractional library routines. 44591 (line 476) 44592* __fractqqqi: Fixed-point fractional library routines. 44593 (line 493) 44594* __fractqqsa: Fixed-point fractional library routines. 44595 (line 480) 44596* __fractqqsf: Fixed-point fractional library routines. 44597 (line 498) 44598* __fractqqsi: Fixed-point fractional library routines. 44599 (line 495) 44600* __fractqqsq2: Fixed-point fractional library routines. 44601 (line 477) 44602* __fractqqta: Fixed-point fractional library routines. 44603 (line 482) 44604* __fractqqti: Fixed-point fractional library routines. 44605 (line 497) 44606* __fractqquda: Fixed-point fractional library routines. 44607 (line 490) 44608* __fractqqudq: Fixed-point fractional library routines. 44609 (line 486) 44610* __fractqquha: Fixed-point fractional library routines. 44611 (line 488) 44612* __fractqquhq: Fixed-point fractional library routines. 44613 (line 484) 44614* __fractqquqq: Fixed-point fractional library routines. 44615 (line 483) 44616* __fractqqusa: Fixed-point fractional library routines. 44617 (line 489) 44618* __fractqqusq: Fixed-point fractional library routines. 44619 (line 485) 44620* __fractqquta: Fixed-point fractional library routines. 44621 (line 491) 44622* __fractsada2: Fixed-point fractional library routines. 44623 (line 603) 44624* __fractsadf: Fixed-point fractional library routines. 44625 (line 619) 44626* __fractsadi: Fixed-point fractional library routines. 44627 (line 616) 44628* __fractsadq: Fixed-point fractional library routines. 44629 (line 601) 44630* __fractsaha2: Fixed-point fractional library routines. 44631 (line 602) 44632* __fractsahi: Fixed-point fractional library routines. 44633 (line 614) 44634* __fractsahq: Fixed-point fractional library routines. 44635 (line 599) 44636* __fractsaqi: Fixed-point fractional library routines. 44637 (line 613) 44638* __fractsaqq: Fixed-point fractional library routines. 44639 (line 598) 44640* __fractsasf: Fixed-point fractional library routines. 44641 (line 618) 44642* __fractsasi: Fixed-point fractional library routines. 44643 (line 615) 44644* __fractsasq: Fixed-point fractional library routines. 44645 (line 600) 44646* __fractsata2: Fixed-point fractional library routines. 44647 (line 604) 44648* __fractsati: Fixed-point fractional library routines. 44649 (line 617) 44650* __fractsauda: Fixed-point fractional library routines. 44651 (line 611) 44652* __fractsaudq: Fixed-point fractional library routines. 44653 (line 608) 44654* __fractsauha: Fixed-point fractional library routines. 44655 (line 609) 44656* __fractsauhq: Fixed-point fractional library routines. 44657 (line 606) 44658* __fractsauqq: Fixed-point fractional library routines. 44659 (line 605) 44660* __fractsausa: Fixed-point fractional library routines. 44661 (line 610) 44662* __fractsausq: Fixed-point fractional library routines. 44663 (line 607) 44664* __fractsauta: Fixed-point fractional library routines. 44665 (line 612) 44666* __fractsfda: Fixed-point fractional library routines. 44667 (line 1016) 44668* __fractsfdq: Fixed-point fractional library routines. 44669 (line 1013) 44670* __fractsfha: Fixed-point fractional library routines. 44671 (line 1014) 44672* __fractsfhq: Fixed-point fractional library routines. 44673 (line 1011) 44674* __fractsfqq: Fixed-point fractional library routines. 44675 (line 1010) 44676* __fractsfsa: Fixed-point fractional library routines. 44677 (line 1015) 44678* __fractsfsq: Fixed-point fractional library routines. 44679 (line 1012) 44680* __fractsfta: Fixed-point fractional library routines. 44681 (line 1017) 44682* __fractsfuda: Fixed-point fractional library routines. 44683 (line 1024) 44684* __fractsfudq: Fixed-point fractional library routines. 44685 (line 1021) 44686* __fractsfuha: Fixed-point fractional library routines. 44687 (line 1022) 44688* __fractsfuhq: Fixed-point fractional library routines. 44689 (line 1019) 44690* __fractsfuqq: Fixed-point fractional library routines. 44691 (line 1018) 44692* __fractsfusa: Fixed-point fractional library routines. 44693 (line 1023) 44694* __fractsfusq: Fixed-point fractional library routines. 44695 (line 1020) 44696* __fractsfuta: Fixed-point fractional library routines. 44697 (line 1025) 44698* __fractsida: Fixed-point fractional library routines. 44699 (line 966) 44700* __fractsidq: Fixed-point fractional library routines. 44701 (line 963) 44702* __fractsiha: Fixed-point fractional library routines. 44703 (line 964) 44704* __fractsihq: Fixed-point fractional library routines. 44705 (line 961) 44706* __fractsiqq: Fixed-point fractional library routines. 44707 (line 960) 44708* __fractsisa: Fixed-point fractional library routines. 44709 (line 965) 44710* __fractsisq: Fixed-point fractional library routines. 44711 (line 962) 44712* __fractsita: Fixed-point fractional library routines. 44713 (line 967) 44714* __fractsiuda: Fixed-point fractional library routines. 44715 (line 974) 44716* __fractsiudq: Fixed-point fractional library routines. 44717 (line 971) 44718* __fractsiuha: Fixed-point fractional library routines. 44719 (line 972) 44720* __fractsiuhq: Fixed-point fractional library routines. 44721 (line 969) 44722* __fractsiuqq: Fixed-point fractional library routines. 44723 (line 968) 44724* __fractsiusa: Fixed-point fractional library routines. 44725 (line 973) 44726* __fractsiusq: Fixed-point fractional library routines. 44727 (line 970) 44728* __fractsiuta: Fixed-point fractional library routines. 44729 (line 975) 44730* __fractsqda: Fixed-point fractional library routines. 44731 (line 527) 44732* __fractsqdf: Fixed-point fractional library routines. 44733 (line 545) 44734* __fractsqdi: Fixed-point fractional library routines. 44735 (line 542) 44736* __fractsqdq2: Fixed-point fractional library routines. 44737 (line 524) 44738* __fractsqha: Fixed-point fractional library routines. 44739 (line 525) 44740* __fractsqhi: Fixed-point fractional library routines. 44741 (line 540) 44742* __fractsqhq2: Fixed-point fractional library routines. 44743 (line 523) 44744* __fractsqqi: Fixed-point fractional library routines. 44745 (line 539) 44746* __fractsqqq2: Fixed-point fractional library routines. 44747 (line 522) 44748* __fractsqsa: Fixed-point fractional library routines. 44749 (line 526) 44750* __fractsqsf: Fixed-point fractional library routines. 44751 (line 544) 44752* __fractsqsi: Fixed-point fractional library routines. 44753 (line 541) 44754* __fractsqta: Fixed-point fractional library routines. 44755 (line 528) 44756* __fractsqti: Fixed-point fractional library routines. 44757 (line 543) 44758* __fractsquda: Fixed-point fractional library routines. 44759 (line 536) 44760* __fractsqudq: Fixed-point fractional library routines. 44761 (line 532) 44762* __fractsquha: Fixed-point fractional library routines. 44763 (line 534) 44764* __fractsquhq: Fixed-point fractional library routines. 44765 (line 530) 44766* __fractsquqq: Fixed-point fractional library routines. 44767 (line 529) 44768* __fractsqusa: Fixed-point fractional library routines. 44769 (line 535) 44770* __fractsqusq: Fixed-point fractional library routines. 44771 (line 531) 44772* __fractsquta: Fixed-point fractional library routines. 44773 (line 537) 44774* __fracttada2: Fixed-point fractional library routines. 44775 (line 650) 44776* __fracttadf: Fixed-point fractional library routines. 44777 (line 671) 44778* __fracttadi: Fixed-point fractional library routines. 44779 (line 668) 44780* __fracttadq: Fixed-point fractional library routines. 44781 (line 647) 44782* __fracttaha2: Fixed-point fractional library routines. 44783 (line 648) 44784* __fracttahi: Fixed-point fractional library routines. 44785 (line 666) 44786* __fracttahq: Fixed-point fractional library routines. 44787 (line 645) 44788* __fracttaqi: Fixed-point fractional library routines. 44789 (line 665) 44790* __fracttaqq: Fixed-point fractional library routines. 44791 (line 644) 44792* __fracttasa2: Fixed-point fractional library routines. 44793 (line 649) 44794* __fracttasf: Fixed-point fractional library routines. 44795 (line 670) 44796* __fracttasi: Fixed-point fractional library routines. 44797 (line 667) 44798* __fracttasq: Fixed-point fractional library routines. 44799 (line 646) 44800* __fracttati: Fixed-point fractional library routines. 44801 (line 669) 44802* __fracttauda: Fixed-point fractional library routines. 44803 (line 661) 44804* __fracttaudq: Fixed-point fractional library routines. 44805 (line 656) 44806* __fracttauha: Fixed-point fractional library routines. 44807 (line 658) 44808* __fracttauhq: Fixed-point fractional library routines. 44809 (line 653) 44810* __fracttauqq: Fixed-point fractional library routines. 44811 (line 651) 44812* __fracttausa: Fixed-point fractional library routines. 44813 (line 660) 44814* __fracttausq: Fixed-point fractional library routines. 44815 (line 654) 44816* __fracttauta: Fixed-point fractional library routines. 44817 (line 663) 44818* __fracttida: Fixed-point fractional library routines. 44819 (line 998) 44820* __fracttidq: Fixed-point fractional library routines. 44821 (line 995) 44822* __fracttiha: Fixed-point fractional library routines. 44823 (line 996) 44824* __fracttihq: Fixed-point fractional library routines. 44825 (line 993) 44826* __fracttiqq: Fixed-point fractional library routines. 44827 (line 992) 44828* __fracttisa: Fixed-point fractional library routines. 44829 (line 997) 44830* __fracttisq: Fixed-point fractional library routines. 44831 (line 994) 44832* __fracttita: Fixed-point fractional library routines. 44833 (line 999) 44834* __fracttiuda: Fixed-point fractional library routines. 44835 (line 1007) 44836* __fracttiudq: Fixed-point fractional library routines. 44837 (line 1003) 44838* __fracttiuha: Fixed-point fractional library routines. 44839 (line 1005) 44840* __fracttiuhq: Fixed-point fractional library routines. 44841 (line 1001) 44842* __fracttiuqq: Fixed-point fractional library routines. 44843 (line 1000) 44844* __fracttiusa: Fixed-point fractional library routines. 44845 (line 1006) 44846* __fracttiusq: Fixed-point fractional library routines. 44847 (line 1002) 44848* __fracttiuta: Fixed-point fractional library routines. 44849 (line 1008) 44850* __fractudada: Fixed-point fractional library routines. 44851 (line 865) 44852* __fractudadf: Fixed-point fractional library routines. 44853 (line 888) 44854* __fractudadi: Fixed-point fractional library routines. 44855 (line 885) 44856* __fractudadq: Fixed-point fractional library routines. 44857 (line 861) 44858* __fractudaha: Fixed-point fractional library routines. 44859 (line 863) 44860* __fractudahi: Fixed-point fractional library routines. 44861 (line 883) 44862* __fractudahq: Fixed-point fractional library routines. 44863 (line 859) 44864* __fractudaqi: Fixed-point fractional library routines. 44865 (line 882) 44866* __fractudaqq: Fixed-point fractional library routines. 44867 (line 858) 44868* __fractudasa: Fixed-point fractional library routines. 44869 (line 864) 44870* __fractudasf: Fixed-point fractional library routines. 44871 (line 887) 44872* __fractudasi: Fixed-point fractional library routines. 44873 (line 884) 44874* __fractudasq: Fixed-point fractional library routines. 44875 (line 860) 44876* __fractudata: Fixed-point fractional library routines. 44877 (line 866) 44878* __fractudati: Fixed-point fractional library routines. 44879 (line 886) 44880* __fractudaudq: Fixed-point fractional library routines. 44881 (line 874) 44882* __fractudauha2: Fixed-point fractional library routines. 44883 (line 876) 44884* __fractudauhq: Fixed-point fractional library routines. 44885 (line 870) 44886* __fractudauqq: Fixed-point fractional library routines. 44887 (line 868) 44888* __fractudausa2: Fixed-point fractional library routines. 44889 (line 878) 44890* __fractudausq: Fixed-point fractional library routines. 44891 (line 872) 44892* __fractudauta2: Fixed-point fractional library routines. 44893 (line 880) 44894* __fractudqda: Fixed-point fractional library routines. 44895 (line 772) 44896* __fractudqdf: Fixed-point fractional library routines. 44897 (line 798) 44898* __fractudqdi: Fixed-point fractional library routines. 44899 (line 794) 44900* __fractudqdq: Fixed-point fractional library routines. 44901 (line 767) 44902* __fractudqha: Fixed-point fractional library routines. 44903 (line 769) 44904* __fractudqhi: Fixed-point fractional library routines. 44905 (line 792) 44906* __fractudqhq: Fixed-point fractional library routines. 44907 (line 764) 44908* __fractudqqi: Fixed-point fractional library routines. 44909 (line 790) 44910* __fractudqqq: Fixed-point fractional library routines. 44911 (line 762) 44912* __fractudqsa: Fixed-point fractional library routines. 44913 (line 771) 44914* __fractudqsf: Fixed-point fractional library routines. 44915 (line 797) 44916* __fractudqsi: Fixed-point fractional library routines. 44917 (line 793) 44918* __fractudqsq: Fixed-point fractional library routines. 44919 (line 765) 44920* __fractudqta: Fixed-point fractional library routines. 44921 (line 774) 44922* __fractudqti: Fixed-point fractional library routines. 44923 (line 795) 44924* __fractudquda: Fixed-point fractional library routines. 44925 (line 786) 44926* __fractudquha: Fixed-point fractional library routines. 44927 (line 782) 44928* __fractudquhq2: Fixed-point fractional library routines. 44929 (line 778) 44930* __fractudquqq2: Fixed-point fractional library routines. 44931 (line 776) 44932* __fractudqusa: Fixed-point fractional library routines. 44933 (line 784) 44934* __fractudqusq2: Fixed-point fractional library routines. 44935 (line 780) 44936* __fractudquta: Fixed-point fractional library routines. 44937 (line 788) 44938* __fractuhada: Fixed-point fractional library routines. 44939 (line 806) 44940* __fractuhadf: Fixed-point fractional library routines. 44941 (line 829) 44942* __fractuhadi: Fixed-point fractional library routines. 44943 (line 826) 44944* __fractuhadq: Fixed-point fractional library routines. 44945 (line 802) 44946* __fractuhaha: Fixed-point fractional library routines. 44947 (line 804) 44948* __fractuhahi: Fixed-point fractional library routines. 44949 (line 824) 44950* __fractuhahq: Fixed-point fractional library routines. 44951 (line 800) 44952* __fractuhaqi: Fixed-point fractional library routines. 44953 (line 823) 44954* __fractuhaqq: Fixed-point fractional library routines. 44955 (line 799) 44956* __fractuhasa: Fixed-point fractional library routines. 44957 (line 805) 44958* __fractuhasf: Fixed-point fractional library routines. 44959 (line 828) 44960* __fractuhasi: Fixed-point fractional library routines. 44961 (line 825) 44962* __fractuhasq: Fixed-point fractional library routines. 44963 (line 801) 44964* __fractuhata: Fixed-point fractional library routines. 44965 (line 807) 44966* __fractuhati: Fixed-point fractional library routines. 44967 (line 827) 44968* __fractuhauda2: Fixed-point fractional library routines. 44969 (line 819) 44970* __fractuhaudq: Fixed-point fractional library routines. 44971 (line 815) 44972* __fractuhauhq: Fixed-point fractional library routines. 44973 (line 811) 44974* __fractuhauqq: Fixed-point fractional library routines. 44975 (line 809) 44976* __fractuhausa2: Fixed-point fractional library routines. 44977 (line 817) 44978* __fractuhausq: Fixed-point fractional library routines. 44979 (line 813) 44980* __fractuhauta2: Fixed-point fractional library routines. 44981 (line 821) 44982* __fractuhqda: Fixed-point fractional library routines. 44983 (line 709) 44984* __fractuhqdf: Fixed-point fractional library routines. 44985 (line 730) 44986* __fractuhqdi: Fixed-point fractional library routines. 44987 (line 727) 44988* __fractuhqdq: Fixed-point fractional library routines. 44989 (line 706) 44990* __fractuhqha: Fixed-point fractional library routines. 44991 (line 707) 44992* __fractuhqhi: Fixed-point fractional library routines. 44993 (line 725) 44994* __fractuhqhq: Fixed-point fractional library routines. 44995 (line 704) 44996* __fractuhqqi: Fixed-point fractional library routines. 44997 (line 724) 44998* __fractuhqqq: Fixed-point fractional library routines. 44999 (line 703) 45000* __fractuhqsa: Fixed-point fractional library routines. 45001 (line 708) 45002* __fractuhqsf: Fixed-point fractional library routines. 45003 (line 729) 45004* __fractuhqsi: Fixed-point fractional library routines. 45005 (line 726) 45006* __fractuhqsq: Fixed-point fractional library routines. 45007 (line 705) 45008* __fractuhqta: Fixed-point fractional library routines. 45009 (line 710) 45010* __fractuhqti: Fixed-point fractional library routines. 45011 (line 728) 45012* __fractuhquda: Fixed-point fractional library routines. 45013 (line 720) 45014* __fractuhqudq2: Fixed-point fractional library routines. 45015 (line 715) 45016* __fractuhquha: Fixed-point fractional library routines. 45017 (line 717) 45018* __fractuhquqq2: Fixed-point fractional library routines. 45019 (line 711) 45020* __fractuhqusa: Fixed-point fractional library routines. 45021 (line 719) 45022* __fractuhqusq2: Fixed-point fractional library routines. 45023 (line 713) 45024* __fractuhquta: Fixed-point fractional library routines. 45025 (line 722) 45026* __fractunsdadi: Fixed-point fractional library routines. 45027 (line 1562) 45028* __fractunsdahi: Fixed-point fractional library routines. 45029 (line 1560) 45030* __fractunsdaqi: Fixed-point fractional library routines. 45031 (line 1559) 45032* __fractunsdasi: Fixed-point fractional library routines. 45033 (line 1561) 45034* __fractunsdati: Fixed-point fractional library routines. 45035 (line 1563) 45036* __fractunsdida: Fixed-point fractional library routines. 45037 (line 1714) 45038* __fractunsdidq: Fixed-point fractional library routines. 45039 (line 1711) 45040* __fractunsdiha: Fixed-point fractional library routines. 45041 (line 1712) 45042* __fractunsdihq: Fixed-point fractional library routines. 45043 (line 1709) 45044* __fractunsdiqq: Fixed-point fractional library routines. 45045 (line 1708) 45046* __fractunsdisa: Fixed-point fractional library routines. 45047 (line 1713) 45048* __fractunsdisq: Fixed-point fractional library routines. 45049 (line 1710) 45050* __fractunsdita: Fixed-point fractional library routines. 45051 (line 1715) 45052* __fractunsdiuda: Fixed-point fractional library routines. 45053 (line 1726) 45054* __fractunsdiudq: Fixed-point fractional library routines. 45055 (line 1721) 45056* __fractunsdiuha: Fixed-point fractional library routines. 45057 (line 1723) 45058* __fractunsdiuhq: Fixed-point fractional library routines. 45059 (line 1718) 45060* __fractunsdiuqq: Fixed-point fractional library routines. 45061 (line 1716) 45062* __fractunsdiusa: Fixed-point fractional library routines. 45063 (line 1725) 45064* __fractunsdiusq: Fixed-point fractional library routines. 45065 (line 1719) 45066* __fractunsdiuta: Fixed-point fractional library routines. 45067 (line 1728) 45068* __fractunsdqdi: Fixed-point fractional library routines. 45069 (line 1546) 45070* __fractunsdqhi: Fixed-point fractional library routines. 45071 (line 1544) 45072* __fractunsdqqi: Fixed-point fractional library routines. 45073 (line 1543) 45074* __fractunsdqsi: Fixed-point fractional library routines. 45075 (line 1545) 45076* __fractunsdqti: Fixed-point fractional library routines. 45077 (line 1547) 45078* __fractunshadi: Fixed-point fractional library routines. 45079 (line 1552) 45080* __fractunshahi: Fixed-point fractional library routines. 45081 (line 1550) 45082* __fractunshaqi: Fixed-point fractional library routines. 45083 (line 1549) 45084* __fractunshasi: Fixed-point fractional library routines. 45085 (line 1551) 45086* __fractunshati: Fixed-point fractional library routines. 45087 (line 1553) 45088* __fractunshida: Fixed-point fractional library routines. 45089 (line 1670) 45090* __fractunshidq: Fixed-point fractional library routines. 45091 (line 1667) 45092* __fractunshiha: Fixed-point fractional library routines. 45093 (line 1668) 45094* __fractunshihq: Fixed-point fractional library routines. 45095 (line 1665) 45096* __fractunshiqq: Fixed-point fractional library routines. 45097 (line 1664) 45098* __fractunshisa: Fixed-point fractional library routines. 45099 (line 1669) 45100* __fractunshisq: Fixed-point fractional library routines. 45101 (line 1666) 45102* __fractunshita: Fixed-point fractional library routines. 45103 (line 1671) 45104* __fractunshiuda: Fixed-point fractional library routines. 45105 (line 1682) 45106* __fractunshiudq: Fixed-point fractional library routines. 45107 (line 1677) 45108* __fractunshiuha: Fixed-point fractional library routines. 45109 (line 1679) 45110* __fractunshiuhq: Fixed-point fractional library routines. 45111 (line 1674) 45112* __fractunshiuqq: Fixed-point fractional library routines. 45113 (line 1672) 45114* __fractunshiusa: Fixed-point fractional library routines. 45115 (line 1681) 45116* __fractunshiusq: Fixed-point fractional library routines. 45117 (line 1675) 45118* __fractunshiuta: Fixed-point fractional library routines. 45119 (line 1684) 45120* __fractunshqdi: Fixed-point fractional library routines. 45121 (line 1536) 45122* __fractunshqhi: Fixed-point fractional library routines. 45123 (line 1534) 45124* __fractunshqqi: Fixed-point fractional library routines. 45125 (line 1533) 45126* __fractunshqsi: Fixed-point fractional library routines. 45127 (line 1535) 45128* __fractunshqti: Fixed-point fractional library routines. 45129 (line 1537) 45130* __fractunsqida: Fixed-point fractional library routines. 45131 (line 1648) 45132* __fractunsqidq: Fixed-point fractional library routines. 45133 (line 1645) 45134* __fractunsqiha: Fixed-point fractional library routines. 45135 (line 1646) 45136* __fractunsqihq: Fixed-point fractional library routines. 45137 (line 1643) 45138* __fractunsqiqq: Fixed-point fractional library routines. 45139 (line 1642) 45140* __fractunsqisa: Fixed-point fractional library routines. 45141 (line 1647) 45142* __fractunsqisq: Fixed-point fractional library routines. 45143 (line 1644) 45144* __fractunsqita: Fixed-point fractional library routines. 45145 (line 1649) 45146* __fractunsqiuda: Fixed-point fractional library routines. 45147 (line 1660) 45148* __fractunsqiudq: Fixed-point fractional library routines. 45149 (line 1655) 45150* __fractunsqiuha: Fixed-point fractional library routines. 45151 (line 1657) 45152* __fractunsqiuhq: Fixed-point fractional library routines. 45153 (line 1652) 45154* __fractunsqiuqq: Fixed-point fractional library routines. 45155 (line 1650) 45156* __fractunsqiusa: Fixed-point fractional library routines. 45157 (line 1659) 45158* __fractunsqiusq: Fixed-point fractional library routines. 45159 (line 1653) 45160* __fractunsqiuta: Fixed-point fractional library routines. 45161 (line 1662) 45162* __fractunsqqdi: Fixed-point fractional library routines. 45163 (line 1531) 45164* __fractunsqqhi: Fixed-point fractional library routines. 45165 (line 1529) 45166* __fractunsqqqi: Fixed-point fractional library routines. 45167 (line 1528) 45168* __fractunsqqsi: Fixed-point fractional library routines. 45169 (line 1530) 45170* __fractunsqqti: Fixed-point fractional library routines. 45171 (line 1532) 45172* __fractunssadi: Fixed-point fractional library routines. 45173 (line 1557) 45174* __fractunssahi: Fixed-point fractional library routines. 45175 (line 1555) 45176* __fractunssaqi: Fixed-point fractional library routines. 45177 (line 1554) 45178* __fractunssasi: Fixed-point fractional library routines. 45179 (line 1556) 45180* __fractunssati: Fixed-point fractional library routines. 45181 (line 1558) 45182* __fractunssida: Fixed-point fractional library routines. 45183 (line 1692) 45184* __fractunssidq: Fixed-point fractional library routines. 45185 (line 1689) 45186* __fractunssiha: Fixed-point fractional library routines. 45187 (line 1690) 45188* __fractunssihq: Fixed-point fractional library routines. 45189 (line 1687) 45190* __fractunssiqq: Fixed-point fractional library routines. 45191 (line 1686) 45192* __fractunssisa: Fixed-point fractional library routines. 45193 (line 1691) 45194* __fractunssisq: Fixed-point fractional library routines. 45195 (line 1688) 45196* __fractunssita: Fixed-point fractional library routines. 45197 (line 1693) 45198* __fractunssiuda: Fixed-point fractional library routines. 45199 (line 1704) 45200* __fractunssiudq: Fixed-point fractional library routines. 45201 (line 1699) 45202* __fractunssiuha: Fixed-point fractional library routines. 45203 (line 1701) 45204* __fractunssiuhq: Fixed-point fractional library routines. 45205 (line 1696) 45206* __fractunssiuqq: Fixed-point fractional library routines. 45207 (line 1694) 45208* __fractunssiusa: Fixed-point fractional library routines. 45209 (line 1703) 45210* __fractunssiusq: Fixed-point fractional library routines. 45211 (line 1697) 45212* __fractunssiuta: Fixed-point fractional library routines. 45213 (line 1706) 45214* __fractunssqdi: Fixed-point fractional library routines. 45215 (line 1541) 45216* __fractunssqhi: Fixed-point fractional library routines. 45217 (line 1539) 45218* __fractunssqqi: Fixed-point fractional library routines. 45219 (line 1538) 45220* __fractunssqsi: Fixed-point fractional library routines. 45221 (line 1540) 45222* __fractunssqti: Fixed-point fractional library routines. 45223 (line 1542) 45224* __fractunstadi: Fixed-point fractional library routines. 45225 (line 1567) 45226* __fractunstahi: Fixed-point fractional library routines. 45227 (line 1565) 45228* __fractunstaqi: Fixed-point fractional library routines. 45229 (line 1564) 45230* __fractunstasi: Fixed-point fractional library routines. 45231 (line 1566) 45232* __fractunstati: Fixed-point fractional library routines. 45233 (line 1568) 45234* __fractunstida: Fixed-point fractional library routines. 45235 (line 1737) 45236* __fractunstidq: Fixed-point fractional library routines. 45237 (line 1733) 45238* __fractunstiha: Fixed-point fractional library routines. 45239 (line 1735) 45240* __fractunstihq: Fixed-point fractional library routines. 45241 (line 1731) 45242* __fractunstiqq: Fixed-point fractional library routines. 45243 (line 1730) 45244* __fractunstisa: Fixed-point fractional library routines. 45245 (line 1736) 45246* __fractunstisq: Fixed-point fractional library routines. 45247 (line 1732) 45248* __fractunstita: Fixed-point fractional library routines. 45249 (line 1738) 45250* __fractunstiuda: Fixed-point fractional library routines. 45251 (line 1752) 45252* __fractunstiudq: Fixed-point fractional library routines. 45253 (line 1746) 45254* __fractunstiuha: Fixed-point fractional library routines. 45255 (line 1748) 45256* __fractunstiuhq: Fixed-point fractional library routines. 45257 (line 1742) 45258* __fractunstiuqq: Fixed-point fractional library routines. 45259 (line 1740) 45260* __fractunstiusa: Fixed-point fractional library routines. 45261 (line 1750) 45262* __fractunstiusq: Fixed-point fractional library routines. 45263 (line 1744) 45264* __fractunstiuta: Fixed-point fractional library routines. 45265 (line 1754) 45266* __fractunsudadi: Fixed-point fractional library routines. 45267 (line 1628) 45268* __fractunsudahi: Fixed-point fractional library routines. 45269 (line 1624) 45270* __fractunsudaqi: Fixed-point fractional library routines. 45271 (line 1622) 45272* __fractunsudasi: Fixed-point fractional library routines. 45273 (line 1626) 45274* __fractunsudati: Fixed-point fractional library routines. 45275 (line 1630) 45276* __fractunsudqdi: Fixed-point fractional library routines. 45277 (line 1602) 45278* __fractunsudqhi: Fixed-point fractional library routines. 45279 (line 1598) 45280* __fractunsudqqi: Fixed-point fractional library routines. 45281 (line 1596) 45282* __fractunsudqsi: Fixed-point fractional library routines. 45283 (line 1600) 45284* __fractunsudqti: Fixed-point fractional library routines. 45285 (line 1604) 45286* __fractunsuhadi: Fixed-point fractional library routines. 45287 (line 1612) 45288* __fractunsuhahi: Fixed-point fractional library routines. 45289 (line 1608) 45290* __fractunsuhaqi: Fixed-point fractional library routines. 45291 (line 1606) 45292* __fractunsuhasi: Fixed-point fractional library routines. 45293 (line 1610) 45294* __fractunsuhati: Fixed-point fractional library routines. 45295 (line 1614) 45296* __fractunsuhqdi: Fixed-point fractional library routines. 45297 (line 1583) 45298* __fractunsuhqhi: Fixed-point fractional library routines. 45299 (line 1581) 45300* __fractunsuhqqi: Fixed-point fractional library routines. 45301 (line 1580) 45302* __fractunsuhqsi: Fixed-point fractional library routines. 45303 (line 1582) 45304* __fractunsuhqti: Fixed-point fractional library routines. 45305 (line 1584) 45306* __fractunsuqqdi: Fixed-point fractional library routines. 45307 (line 1576) 45308* __fractunsuqqhi: Fixed-point fractional library routines. 45309 (line 1572) 45310* __fractunsuqqqi: Fixed-point fractional library routines. 45311 (line 1570) 45312* __fractunsuqqsi: Fixed-point fractional library routines. 45313 (line 1574) 45314* __fractunsuqqti: Fixed-point fractional library routines. 45315 (line 1578) 45316* __fractunsusadi: Fixed-point fractional library routines. 45317 (line 1619) 45318* __fractunsusahi: Fixed-point fractional library routines. 45319 (line 1617) 45320* __fractunsusaqi: Fixed-point fractional library routines. 45321 (line 1616) 45322* __fractunsusasi: Fixed-point fractional library routines. 45323 (line 1618) 45324* __fractunsusati: Fixed-point fractional library routines. 45325 (line 1620) 45326* __fractunsusqdi: Fixed-point fractional library routines. 45327 (line 1592) 45328* __fractunsusqhi: Fixed-point fractional library routines. 45329 (line 1588) 45330* __fractunsusqqi: Fixed-point fractional library routines. 45331 (line 1586) 45332* __fractunsusqsi: Fixed-point fractional library routines. 45333 (line 1590) 45334* __fractunsusqti: Fixed-point fractional library routines. 45335 (line 1594) 45336* __fractunsutadi: Fixed-point fractional library routines. 45337 (line 1638) 45338* __fractunsutahi: Fixed-point fractional library routines. 45339 (line 1634) 45340* __fractunsutaqi: Fixed-point fractional library routines. 45341 (line 1632) 45342* __fractunsutasi: Fixed-point fractional library routines. 45343 (line 1636) 45344* __fractunsutati: Fixed-point fractional library routines. 45345 (line 1640) 45346* __fractuqqda: Fixed-point fractional library routines. 45347 (line 679) 45348* __fractuqqdf: Fixed-point fractional library routines. 45349 (line 702) 45350* __fractuqqdi: Fixed-point fractional library routines. 45351 (line 699) 45352* __fractuqqdq: Fixed-point fractional library routines. 45353 (line 675) 45354* __fractuqqha: Fixed-point fractional library routines. 45355 (line 677) 45356* __fractuqqhi: Fixed-point fractional library routines. 45357 (line 697) 45358* __fractuqqhq: Fixed-point fractional library routines. 45359 (line 673) 45360* __fractuqqqi: Fixed-point fractional library routines. 45361 (line 696) 45362* __fractuqqqq: Fixed-point fractional library routines. 45363 (line 672) 45364* __fractuqqsa: Fixed-point fractional library routines. 45365 (line 678) 45366* __fractuqqsf: Fixed-point fractional library routines. 45367 (line 701) 45368* __fractuqqsi: Fixed-point fractional library routines. 45369 (line 698) 45370* __fractuqqsq: Fixed-point fractional library routines. 45371 (line 674) 45372* __fractuqqta: Fixed-point fractional library routines. 45373 (line 680) 45374* __fractuqqti: Fixed-point fractional library routines. 45375 (line 700) 45376* __fractuqquda: Fixed-point fractional library routines. 45377 (line 692) 45378* __fractuqqudq2: Fixed-point fractional library routines. 45379 (line 686) 45380* __fractuqquha: Fixed-point fractional library routines. 45381 (line 688) 45382* __fractuqquhq2: Fixed-point fractional library routines. 45383 (line 682) 45384* __fractuqqusa: Fixed-point fractional library routines. 45385 (line 690) 45386* __fractuqqusq2: Fixed-point fractional library routines. 45387 (line 684) 45388* __fractuqquta: Fixed-point fractional library routines. 45389 (line 694) 45390* __fractusada: Fixed-point fractional library routines. 45391 (line 836) 45392* __fractusadf: Fixed-point fractional library routines. 45393 (line 857) 45394* __fractusadi: Fixed-point fractional library routines. 45395 (line 854) 45396* __fractusadq: Fixed-point fractional library routines. 45397 (line 833) 45398* __fractusaha: Fixed-point fractional library routines. 45399 (line 834) 45400* __fractusahi: Fixed-point fractional library routines. 45401 (line 852) 45402* __fractusahq: Fixed-point fractional library routines. 45403 (line 831) 45404* __fractusaqi: Fixed-point fractional library routines. 45405 (line 851) 45406* __fractusaqq: Fixed-point fractional library routines. 45407 (line 830) 45408* __fractusasa: Fixed-point fractional library routines. 45409 (line 835) 45410* __fractusasf: Fixed-point fractional library routines. 45411 (line 856) 45412* __fractusasi: Fixed-point fractional library routines. 45413 (line 853) 45414* __fractusasq: Fixed-point fractional library routines. 45415 (line 832) 45416* __fractusata: Fixed-point fractional library routines. 45417 (line 837) 45418* __fractusati: Fixed-point fractional library routines. 45419 (line 855) 45420* __fractusauda2: Fixed-point fractional library routines. 45421 (line 847) 45422* __fractusaudq: Fixed-point fractional library routines. 45423 (line 843) 45424* __fractusauha2: Fixed-point fractional library routines. 45425 (line 845) 45426* __fractusauhq: Fixed-point fractional library routines. 45427 (line 840) 45428* __fractusauqq: Fixed-point fractional library routines. 45429 (line 838) 45430* __fractusausq: Fixed-point fractional library routines. 45431 (line 841) 45432* __fractusauta2: Fixed-point fractional library routines. 45433 (line 849) 45434* __fractusqda: Fixed-point fractional library routines. 45435 (line 738) 45436* __fractusqdf: Fixed-point fractional library routines. 45437 (line 761) 45438* __fractusqdi: Fixed-point fractional library routines. 45439 (line 758) 45440* __fractusqdq: Fixed-point fractional library routines. 45441 (line 734) 45442* __fractusqha: Fixed-point fractional library routines. 45443 (line 736) 45444* __fractusqhi: Fixed-point fractional library routines. 45445 (line 756) 45446* __fractusqhq: Fixed-point fractional library routines. 45447 (line 732) 45448* __fractusqqi: Fixed-point fractional library routines. 45449 (line 755) 45450* __fractusqqq: Fixed-point fractional library routines. 45451 (line 731) 45452* __fractusqsa: Fixed-point fractional library routines. 45453 (line 737) 45454* __fractusqsf: Fixed-point fractional library routines. 45455 (line 760) 45456* __fractusqsi: Fixed-point fractional library routines. 45457 (line 757) 45458* __fractusqsq: Fixed-point fractional library routines. 45459 (line 733) 45460* __fractusqta: Fixed-point fractional library routines. 45461 (line 739) 45462* __fractusqti: Fixed-point fractional library routines. 45463 (line 759) 45464* __fractusquda: Fixed-point fractional library routines. 45465 (line 751) 45466* __fractusqudq2: Fixed-point fractional library routines. 45467 (line 745) 45468* __fractusquha: Fixed-point fractional library routines. 45469 (line 747) 45470* __fractusquhq2: Fixed-point fractional library routines. 45471 (line 743) 45472* __fractusquqq2: Fixed-point fractional library routines. 45473 (line 741) 45474* __fractusqusa: Fixed-point fractional library routines. 45475 (line 749) 45476* __fractusquta: Fixed-point fractional library routines. 45477 (line 753) 45478* __fractutada: Fixed-point fractional library routines. 45479 (line 899) 45480* __fractutadf: Fixed-point fractional library routines. 45481 (line 925) 45482* __fractutadi: Fixed-point fractional library routines. 45483 (line 921) 45484* __fractutadq: Fixed-point fractional library routines. 45485 (line 894) 45486* __fractutaha: Fixed-point fractional library routines. 45487 (line 896) 45488* __fractutahi: Fixed-point fractional library routines. 45489 (line 919) 45490* __fractutahq: Fixed-point fractional library routines. 45491 (line 891) 45492* __fractutaqi: Fixed-point fractional library routines. 45493 (line 917) 45494* __fractutaqq: Fixed-point fractional library routines. 45495 (line 889) 45496* __fractutasa: Fixed-point fractional library routines. 45497 (line 898) 45498* __fractutasf: Fixed-point fractional library routines. 45499 (line 924) 45500* __fractutasi: Fixed-point fractional library routines. 45501 (line 920) 45502* __fractutasq: Fixed-point fractional library routines. 45503 (line 892) 45504* __fractutata: Fixed-point fractional library routines. 45505 (line 901) 45506* __fractutati: Fixed-point fractional library routines. 45507 (line 922) 45508* __fractutauda2: Fixed-point fractional library routines. 45509 (line 915) 45510* __fractutaudq: Fixed-point fractional library routines. 45511 (line 909) 45512* __fractutauha2: Fixed-point fractional library routines. 45513 (line 911) 45514* __fractutauhq: Fixed-point fractional library routines. 45515 (line 905) 45516* __fractutauqq: Fixed-point fractional library routines. 45517 (line 903) 45518* __fractutausa2: Fixed-point fractional library routines. 45519 (line 913) 45520* __fractutausq: Fixed-point fractional library routines. 45521 (line 907) 45522* __gedf2: Soft float library routines. 45523 (line 205) 45524* __gesf2: Soft float library routines. 45525 (line 204) 45526* __getf2: Soft float library routines. 45527 (line 206) 45528* __gtdf2: Soft float library routines. 45529 (line 223) 45530* __gtsf2: Soft float library routines. 45531 (line 222) 45532* __gttf2: Soft float library routines. 45533 (line 224) 45534* __ledf2: Soft float library routines. 45535 (line 217) 45536* __lesf2: Soft float library routines. 45537 (line 216) 45538* __letf2: Soft float library routines. 45539 (line 218) 45540* __lshrdi3: Integer library routines. 45541 (line 30) 45542* __lshrsi3: Integer library routines. 45543 (line 29) 45544* __lshrti3: Integer library routines. 45545 (line 31) 45546* __lshruda3: Fixed-point fractional library routines. 45547 (line 396) 45548* __lshrudq3: Fixed-point fractional library routines. 45549 (line 390) 45550* __lshruha3: Fixed-point fractional library routines. 45551 (line 392) 45552* __lshruhq3: Fixed-point fractional library routines. 45553 (line 386) 45554* __lshruqq3: Fixed-point fractional library routines. 45555 (line 384) 45556* __lshrusa3: Fixed-point fractional library routines. 45557 (line 394) 45558* __lshrusq3: Fixed-point fractional library routines. 45559 (line 388) 45560* __lshruta3: Fixed-point fractional library routines. 45561 (line 398) 45562* __ltdf2: Soft float library routines. 45563 (line 211) 45564* __ltsf2: Soft float library routines. 45565 (line 210) 45566* __lttf2: Soft float library routines. 45567 (line 212) 45568* __main: Collect2. (line 15) 45569* __moddi3: Integer library routines. 45570 (line 36) 45571* __modsi3: Integer library routines. 45572 (line 35) 45573* __modti3: Integer library routines. 45574 (line 37) 45575* __morestack_current_segment: Miscellaneous routines. 45576 (line 45) 45577* __morestack_initial_sp: Miscellaneous routines. 45578 (line 46) 45579* __morestack_segments: Miscellaneous routines. 45580 (line 44) 45581* __mulda3: Fixed-point fractional library routines. 45582 (line 178) 45583* __muldc3: Soft float library routines. 45584 (line 239) 45585* __muldf3: Soft float library routines. 45586 (line 39) 45587* __muldi3: Integer library routines. 45588 (line 42) 45589* __muldq3: Fixed-point fractional library routines. 45590 (line 165) 45591* __mulha3: Fixed-point fractional library routines. 45592 (line 175) 45593* __mulhq3: Fixed-point fractional library routines. 45594 (line 163) 45595* __mulqq3: Fixed-point fractional library routines. 45596 (line 161) 45597* __mulsa3: Fixed-point fractional library routines. 45598 (line 177) 45599* __mulsc3: Soft float library routines. 45600 (line 237) 45601* __mulsf3: Soft float library routines. 45602 (line 38) 45603* __mulsi3: Integer library routines. 45604 (line 41) 45605* __mulsq3: Fixed-point fractional library routines. 45606 (line 164) 45607* __multa3: Fixed-point fractional library routines. 45608 (line 179) 45609* __multc3: Soft float library routines. 45610 (line 241) 45611* __multf3: Soft float library routines. 45612 (line 40) 45613* __multi3: Integer library routines. 45614 (line 43) 45615* __muluda3: Fixed-point fractional library routines. 45616 (line 185) 45617* __muludq3: Fixed-point fractional library routines. 45618 (line 173) 45619* __muluha3: Fixed-point fractional library routines. 45620 (line 181) 45621* __muluhq3: Fixed-point fractional library routines. 45622 (line 169) 45623* __muluqq3: Fixed-point fractional library routines. 45624 (line 167) 45625* __mulusa3: Fixed-point fractional library routines. 45626 (line 183) 45627* __mulusq3: Fixed-point fractional library routines. 45628 (line 171) 45629* __muluta3: Fixed-point fractional library routines. 45630 (line 187) 45631* __mulvdi3: Integer library routines. 45632 (line 114) 45633* __mulvsi3: Integer library routines. 45634 (line 113) 45635* __mulxc3: Soft float library routines. 45636 (line 243) 45637* __mulxf3: Soft float library routines. 45638 (line 42) 45639* __nedf2: Soft float library routines. 45640 (line 199) 45641* __negda2: Fixed-point fractional library routines. 45642 (line 306) 45643* __negdf2: Soft float library routines. 45644 (line 55) 45645* __negdi2: Integer library routines. 45646 (line 46) 45647* __negdq2: Fixed-point fractional library routines. 45648 (line 296) 45649* __negha2: Fixed-point fractional library routines. 45650 (line 304) 45651* __neghq2: Fixed-point fractional library routines. 45652 (line 294) 45653* __negqq2: Fixed-point fractional library routines. 45654 (line 293) 45655* __negsa2: Fixed-point fractional library routines. 45656 (line 305) 45657* __negsf2: Soft float library routines. 45658 (line 54) 45659* __negsq2: Fixed-point fractional library routines. 45660 (line 295) 45661* __negta2: Fixed-point fractional library routines. 45662 (line 307) 45663* __negtf2: Soft float library routines. 45664 (line 56) 45665* __negti2: Integer library routines. 45666 (line 47) 45667* __neguda2: Fixed-point fractional library routines. 45668 (line 311) 45669* __negudq2: Fixed-point fractional library routines. 45670 (line 302) 45671* __neguha2: Fixed-point fractional library routines. 45672 (line 308) 45673* __neguhq2: Fixed-point fractional library routines. 45674 (line 299) 45675* __neguqq2: Fixed-point fractional library routines. 45676 (line 297) 45677* __negusa2: Fixed-point fractional library routines. 45678 (line 310) 45679* __negusq2: Fixed-point fractional library routines. 45680 (line 300) 45681* __neguta2: Fixed-point fractional library routines. 45682 (line 313) 45683* __negvdi2: Integer library routines. 45684 (line 118) 45685* __negvsi2: Integer library routines. 45686 (line 117) 45687* __negxf2: Soft float library routines. 45688 (line 57) 45689* __nesf2: Soft float library routines. 45690 (line 198) 45691* __netf2: Soft float library routines. 45692 (line 200) 45693* __paritydi2: Integer library routines. 45694 (line 150) 45695* __paritysi2: Integer library routines. 45696 (line 149) 45697* __parityti2: Integer library routines. 45698 (line 151) 45699* __popcountdi2: Integer library routines. 45700 (line 156) 45701* __popcountsi2: Integer library routines. 45702 (line 155) 45703* __popcountti2: Integer library routines. 45704 (line 157) 45705* __powidf2: Soft float library routines. 45706 (line 232) 45707* __powisf2: Soft float library routines. 45708 (line 231) 45709* __powitf2: Soft float library routines. 45710 (line 233) 45711* __powixf2: Soft float library routines. 45712 (line 234) 45713* __satfractdadq: Fixed-point fractional library routines. 45714 (line 1160) 45715* __satfractdaha2: Fixed-point fractional library routines. 45716 (line 1161) 45717* __satfractdahq: Fixed-point fractional library routines. 45718 (line 1158) 45719* __satfractdaqq: Fixed-point fractional library routines. 45720 (line 1157) 45721* __satfractdasa2: Fixed-point fractional library routines. 45722 (line 1162) 45723* __satfractdasq: Fixed-point fractional library routines. 45724 (line 1159) 45725* __satfractdata2: Fixed-point fractional library routines. 45726 (line 1163) 45727* __satfractdauda: Fixed-point fractional library routines. 45728 (line 1173) 45729* __satfractdaudq: Fixed-point fractional library routines. 45730 (line 1168) 45731* __satfractdauha: Fixed-point fractional library routines. 45732 (line 1170) 45733* __satfractdauhq: Fixed-point fractional library routines. 45734 (line 1166) 45735* __satfractdauqq: Fixed-point fractional library routines. 45736 (line 1164) 45737* __satfractdausa: Fixed-point fractional library routines. 45738 (line 1172) 45739* __satfractdausq: Fixed-point fractional library routines. 45740 (line 1167) 45741* __satfractdauta: Fixed-point fractional library routines. 45742 (line 1174) 45743* __satfractdfda: Fixed-point fractional library routines. 45744 (line 1513) 45745* __satfractdfdq: Fixed-point fractional library routines. 45746 (line 1510) 45747* __satfractdfha: Fixed-point fractional library routines. 45748 (line 1511) 45749* __satfractdfhq: Fixed-point fractional library routines. 45750 (line 1508) 45751* __satfractdfqq: Fixed-point fractional library routines. 45752 (line 1507) 45753* __satfractdfsa: Fixed-point fractional library routines. 45754 (line 1512) 45755* __satfractdfsq: Fixed-point fractional library routines. 45756 (line 1509) 45757* __satfractdfta: Fixed-point fractional library routines. 45758 (line 1514) 45759* __satfractdfuda: Fixed-point fractional library routines. 45760 (line 1522) 45761* __satfractdfudq: Fixed-point fractional library routines. 45762 (line 1518) 45763* __satfractdfuha: Fixed-point fractional library routines. 45764 (line 1520) 45765* __satfractdfuhq: Fixed-point fractional library routines. 45766 (line 1516) 45767* __satfractdfuqq: Fixed-point fractional library routines. 45768 (line 1515) 45769* __satfractdfusa: Fixed-point fractional library routines. 45770 (line 1521) 45771* __satfractdfusq: Fixed-point fractional library routines. 45772 (line 1517) 45773* __satfractdfuta: Fixed-point fractional library routines. 45774 (line 1523) 45775* __satfractdida: Fixed-point fractional library routines. 45776 (line 1463) 45777* __satfractdidq: Fixed-point fractional library routines. 45778 (line 1460) 45779* __satfractdiha: Fixed-point fractional library routines. 45780 (line 1461) 45781* __satfractdihq: Fixed-point fractional library routines. 45782 (line 1458) 45783* __satfractdiqq: Fixed-point fractional library routines. 45784 (line 1457) 45785* __satfractdisa: Fixed-point fractional library routines. 45786 (line 1462) 45787* __satfractdisq: Fixed-point fractional library routines. 45788 (line 1459) 45789* __satfractdita: Fixed-point fractional library routines. 45790 (line 1464) 45791* __satfractdiuda: Fixed-point fractional library routines. 45792 (line 1471) 45793* __satfractdiudq: Fixed-point fractional library routines. 45794 (line 1468) 45795* __satfractdiuha: Fixed-point fractional library routines. 45796 (line 1469) 45797* __satfractdiuhq: Fixed-point fractional library routines. 45798 (line 1466) 45799* __satfractdiuqq: Fixed-point fractional library routines. 45800 (line 1465) 45801* __satfractdiusa: Fixed-point fractional library routines. 45802 (line 1470) 45803* __satfractdiusq: Fixed-point fractional library routines. 45804 (line 1467) 45805* __satfractdiuta: Fixed-point fractional library routines. 45806 (line 1472) 45807* __satfractdqda: Fixed-point fractional library routines. 45808 (line 1105) 45809* __satfractdqha: Fixed-point fractional library routines. 45810 (line 1103) 45811* __satfractdqhq2: Fixed-point fractional library routines. 45812 (line 1101) 45813* __satfractdqqq2: Fixed-point fractional library routines. 45814 (line 1100) 45815* __satfractdqsa: Fixed-point fractional library routines. 45816 (line 1104) 45817* __satfractdqsq2: Fixed-point fractional library routines. 45818 (line 1102) 45819* __satfractdqta: Fixed-point fractional library routines. 45820 (line 1106) 45821* __satfractdquda: Fixed-point fractional library routines. 45822 (line 1117) 45823* __satfractdqudq: Fixed-point fractional library routines. 45824 (line 1112) 45825* __satfractdquha: Fixed-point fractional library routines. 45826 (line 1114) 45827* __satfractdquhq: Fixed-point fractional library routines. 45828 (line 1109) 45829* __satfractdquqq: Fixed-point fractional library routines. 45830 (line 1107) 45831* __satfractdqusa: Fixed-point fractional library routines. 45832 (line 1116) 45833* __satfractdqusq: Fixed-point fractional library routines. 45834 (line 1110) 45835* __satfractdquta: Fixed-point fractional library routines. 45836 (line 1119) 45837* __satfracthada2: Fixed-point fractional library routines. 45838 (line 1126) 45839* __satfracthadq: Fixed-point fractional library routines. 45840 (line 1124) 45841* __satfracthahq: Fixed-point fractional library routines. 45842 (line 1122) 45843* __satfracthaqq: Fixed-point fractional library routines. 45844 (line 1121) 45845* __satfracthasa2: Fixed-point fractional library routines. 45846 (line 1125) 45847* __satfracthasq: Fixed-point fractional library routines. 45848 (line 1123) 45849* __satfracthata2: Fixed-point fractional library routines. 45850 (line 1127) 45851* __satfracthauda: Fixed-point fractional library routines. 45852 (line 1138) 45853* __satfracthaudq: Fixed-point fractional library routines. 45854 (line 1133) 45855* __satfracthauha: Fixed-point fractional library routines. 45856 (line 1135) 45857* __satfracthauhq: Fixed-point fractional library routines. 45858 (line 1130) 45859* __satfracthauqq: Fixed-point fractional library routines. 45860 (line 1128) 45861* __satfracthausa: Fixed-point fractional library routines. 45862 (line 1137) 45863* __satfracthausq: Fixed-point fractional library routines. 45864 (line 1131) 45865* __satfracthauta: Fixed-point fractional library routines. 45866 (line 1140) 45867* __satfracthida: Fixed-point fractional library routines. 45868 (line 1431) 45869* __satfracthidq: Fixed-point fractional library routines. 45870 (line 1428) 45871* __satfracthiha: Fixed-point fractional library routines. 45872 (line 1429) 45873* __satfracthihq: Fixed-point fractional library routines. 45874 (line 1426) 45875* __satfracthiqq: Fixed-point fractional library routines. 45876 (line 1425) 45877* __satfracthisa: Fixed-point fractional library routines. 45878 (line 1430) 45879* __satfracthisq: Fixed-point fractional library routines. 45880 (line 1427) 45881* __satfracthita: Fixed-point fractional library routines. 45882 (line 1432) 45883* __satfracthiuda: Fixed-point fractional library routines. 45884 (line 1439) 45885* __satfracthiudq: Fixed-point fractional library routines. 45886 (line 1436) 45887* __satfracthiuha: Fixed-point fractional library routines. 45888 (line 1437) 45889* __satfracthiuhq: Fixed-point fractional library routines. 45890 (line 1434) 45891* __satfracthiuqq: Fixed-point fractional library routines. 45892 (line 1433) 45893* __satfracthiusa: Fixed-point fractional library routines. 45894 (line 1438) 45895* __satfracthiusq: Fixed-point fractional library routines. 45896 (line 1435) 45897* __satfracthiuta: Fixed-point fractional library routines. 45898 (line 1440) 45899* __satfracthqda: Fixed-point fractional library routines. 45900 (line 1071) 45901* __satfracthqdq2: Fixed-point fractional library routines. 45902 (line 1068) 45903* __satfracthqha: Fixed-point fractional library routines. 45904 (line 1069) 45905* __satfracthqqq2: Fixed-point fractional library routines. 45906 (line 1066) 45907* __satfracthqsa: Fixed-point fractional library routines. 45908 (line 1070) 45909* __satfracthqsq2: Fixed-point fractional library routines. 45910 (line 1067) 45911* __satfracthqta: Fixed-point fractional library routines. 45912 (line 1072) 45913* __satfracthquda: Fixed-point fractional library routines. 45914 (line 1079) 45915* __satfracthqudq: Fixed-point fractional library routines. 45916 (line 1076) 45917* __satfracthquha: Fixed-point fractional library routines. 45918 (line 1077) 45919* __satfracthquhq: Fixed-point fractional library routines. 45920 (line 1074) 45921* __satfracthquqq: Fixed-point fractional library routines. 45922 (line 1073) 45923* __satfracthqusa: Fixed-point fractional library routines. 45924 (line 1078) 45925* __satfracthqusq: Fixed-point fractional library routines. 45926 (line 1075) 45927* __satfracthquta: Fixed-point fractional library routines. 45928 (line 1080) 45929* __satfractqida: Fixed-point fractional library routines. 45930 (line 1409) 45931* __satfractqidq: Fixed-point fractional library routines. 45932 (line 1406) 45933* __satfractqiha: Fixed-point fractional library routines. 45934 (line 1407) 45935* __satfractqihq: Fixed-point fractional library routines. 45936 (line 1404) 45937* __satfractqiqq: Fixed-point fractional library routines. 45938 (line 1403) 45939* __satfractqisa: Fixed-point fractional library routines. 45940 (line 1408) 45941* __satfractqisq: Fixed-point fractional library routines. 45942 (line 1405) 45943* __satfractqita: Fixed-point fractional library routines. 45944 (line 1410) 45945* __satfractqiuda: Fixed-point fractional library routines. 45946 (line 1421) 45947* __satfractqiudq: Fixed-point fractional library routines. 45948 (line 1416) 45949* __satfractqiuha: Fixed-point fractional library routines. 45950 (line 1418) 45951* __satfractqiuhq: Fixed-point fractional library routines. 45952 (line 1413) 45953* __satfractqiuqq: Fixed-point fractional library routines. 45954 (line 1411) 45955* __satfractqiusa: Fixed-point fractional library routines. 45956 (line 1420) 45957* __satfractqiusq: Fixed-point fractional library routines. 45958 (line 1414) 45959* __satfractqiuta: Fixed-point fractional library routines. 45960 (line 1423) 45961* __satfractqqda: Fixed-point fractional library routines. 45962 (line 1050) 45963* __satfractqqdq2: Fixed-point fractional library routines. 45964 (line 1047) 45965* __satfractqqha: Fixed-point fractional library routines. 45966 (line 1048) 45967* __satfractqqhq2: Fixed-point fractional library routines. 45968 (line 1045) 45969* __satfractqqsa: Fixed-point fractional library routines. 45970 (line 1049) 45971* __satfractqqsq2: Fixed-point fractional library routines. 45972 (line 1046) 45973* __satfractqqta: Fixed-point fractional library routines. 45974 (line 1051) 45975* __satfractqquda: Fixed-point fractional library routines. 45976 (line 1062) 45977* __satfractqqudq: Fixed-point fractional library routines. 45978 (line 1057) 45979* __satfractqquha: Fixed-point fractional library routines. 45980 (line 1059) 45981* __satfractqquhq: Fixed-point fractional library routines. 45982 (line 1054) 45983* __satfractqquqq: Fixed-point fractional library routines. 45984 (line 1052) 45985* __satfractqqusa: Fixed-point fractional library routines. 45986 (line 1061) 45987* __satfractqqusq: Fixed-point fractional library routines. 45988 (line 1055) 45989* __satfractqquta: Fixed-point fractional library routines. 45990 (line 1064) 45991* __satfractsada2: Fixed-point fractional library routines. 45992 (line 1147) 45993* __satfractsadq: Fixed-point fractional library routines. 45994 (line 1145) 45995* __satfractsaha2: Fixed-point fractional library routines. 45996 (line 1146) 45997* __satfractsahq: Fixed-point fractional library routines. 45998 (line 1143) 45999* __satfractsaqq: Fixed-point fractional library routines. 46000 (line 1142) 46001* __satfractsasq: Fixed-point fractional library routines. 46002 (line 1144) 46003* __satfractsata2: Fixed-point fractional library routines. 46004 (line 1148) 46005* __satfractsauda: Fixed-point fractional library routines. 46006 (line 1155) 46007* __satfractsaudq: Fixed-point fractional library routines. 46008 (line 1152) 46009* __satfractsauha: Fixed-point fractional library routines. 46010 (line 1153) 46011* __satfractsauhq: Fixed-point fractional library routines. 46012 (line 1150) 46013* __satfractsauqq: Fixed-point fractional library routines. 46014 (line 1149) 46015* __satfractsausa: Fixed-point fractional library routines. 46016 (line 1154) 46017* __satfractsausq: Fixed-point fractional library routines. 46018 (line 1151) 46019* __satfractsauta: Fixed-point fractional library routines. 46020 (line 1156) 46021* __satfractsfda: Fixed-point fractional library routines. 46022 (line 1497) 46023* __satfractsfdq: Fixed-point fractional library routines. 46024 (line 1494) 46025* __satfractsfha: Fixed-point fractional library routines. 46026 (line 1495) 46027* __satfractsfhq: Fixed-point fractional library routines. 46028 (line 1492) 46029* __satfractsfqq: Fixed-point fractional library routines. 46030 (line 1491) 46031* __satfractsfsa: Fixed-point fractional library routines. 46032 (line 1496) 46033* __satfractsfsq: Fixed-point fractional library routines. 46034 (line 1493) 46035* __satfractsfta: Fixed-point fractional library routines. 46036 (line 1498) 46037* __satfractsfuda: Fixed-point fractional library routines. 46038 (line 1505) 46039* __satfractsfudq: Fixed-point fractional library routines. 46040 (line 1502) 46041* __satfractsfuha: Fixed-point fractional library routines. 46042 (line 1503) 46043* __satfractsfuhq: Fixed-point fractional library routines. 46044 (line 1500) 46045* __satfractsfuqq: Fixed-point fractional library routines. 46046 (line 1499) 46047* __satfractsfusa: Fixed-point fractional library routines. 46048 (line 1504) 46049* __satfractsfusq: Fixed-point fractional library routines. 46050 (line 1501) 46051* __satfractsfuta: Fixed-point fractional library routines. 46052 (line 1506) 46053* __satfractsida: Fixed-point fractional library routines. 46054 (line 1447) 46055* __satfractsidq: Fixed-point fractional library routines. 46056 (line 1444) 46057* __satfractsiha: Fixed-point fractional library routines. 46058 (line 1445) 46059* __satfractsihq: Fixed-point fractional library routines. 46060 (line 1442) 46061* __satfractsiqq: Fixed-point fractional library routines. 46062 (line 1441) 46063* __satfractsisa: Fixed-point fractional library routines. 46064 (line 1446) 46065* __satfractsisq: Fixed-point fractional library routines. 46066 (line 1443) 46067* __satfractsita: Fixed-point fractional library routines. 46068 (line 1448) 46069* __satfractsiuda: Fixed-point fractional library routines. 46070 (line 1455) 46071* __satfractsiudq: Fixed-point fractional library routines. 46072 (line 1452) 46073* __satfractsiuha: Fixed-point fractional library routines. 46074 (line 1453) 46075* __satfractsiuhq: Fixed-point fractional library routines. 46076 (line 1450) 46077* __satfractsiuqq: Fixed-point fractional library routines. 46078 (line 1449) 46079* __satfractsiusa: Fixed-point fractional library routines. 46080 (line 1454) 46081* __satfractsiusq: Fixed-point fractional library routines. 46082 (line 1451) 46083* __satfractsiuta: Fixed-point fractional library routines. 46084 (line 1456) 46085* __satfractsqda: Fixed-point fractional library routines. 46086 (line 1086) 46087* __satfractsqdq2: Fixed-point fractional library routines. 46088 (line 1083) 46089* __satfractsqha: Fixed-point fractional library routines. 46090 (line 1084) 46091* __satfractsqhq2: Fixed-point fractional library routines. 46092 (line 1082) 46093* __satfractsqqq2: Fixed-point fractional library routines. 46094 (line 1081) 46095* __satfractsqsa: Fixed-point fractional library routines. 46096 (line 1085) 46097* __satfractsqta: Fixed-point fractional library routines. 46098 (line 1087) 46099* __satfractsquda: Fixed-point fractional library routines. 46100 (line 1097) 46101* __satfractsqudq: Fixed-point fractional library routines. 46102 (line 1092) 46103* __satfractsquha: Fixed-point fractional library routines. 46104 (line 1094) 46105* __satfractsquhq: Fixed-point fractional library routines. 46106 (line 1090) 46107* __satfractsquqq: Fixed-point fractional library routines. 46108 (line 1088) 46109* __satfractsqusa: Fixed-point fractional library routines. 46110 (line 1096) 46111* __satfractsqusq: Fixed-point fractional library routines. 46112 (line 1091) 46113* __satfractsquta: Fixed-point fractional library routines. 46114 (line 1098) 46115* __satfracttada2: Fixed-point fractional library routines. 46116 (line 1182) 46117* __satfracttadq: Fixed-point fractional library routines. 46118 (line 1179) 46119* __satfracttaha2: Fixed-point fractional library routines. 46120 (line 1180) 46121* __satfracttahq: Fixed-point fractional library routines. 46122 (line 1177) 46123* __satfracttaqq: Fixed-point fractional library routines. 46124 (line 1176) 46125* __satfracttasa2: Fixed-point fractional library routines. 46126 (line 1181) 46127* __satfracttasq: Fixed-point fractional library routines. 46128 (line 1178) 46129* __satfracttauda: Fixed-point fractional library routines. 46130 (line 1193) 46131* __satfracttaudq: Fixed-point fractional library routines. 46132 (line 1188) 46133* __satfracttauha: Fixed-point fractional library routines. 46134 (line 1190) 46135* __satfracttauhq: Fixed-point fractional library routines. 46136 (line 1185) 46137* __satfracttauqq: Fixed-point fractional library routines. 46138 (line 1183) 46139* __satfracttausa: Fixed-point fractional library routines. 46140 (line 1192) 46141* __satfracttausq: Fixed-point fractional library routines. 46142 (line 1186) 46143* __satfracttauta: Fixed-point fractional library routines. 46144 (line 1195) 46145* __satfracttida: Fixed-point fractional library routines. 46146 (line 1479) 46147* __satfracttidq: Fixed-point fractional library routines. 46148 (line 1476) 46149* __satfracttiha: Fixed-point fractional library routines. 46150 (line 1477) 46151* __satfracttihq: Fixed-point fractional library routines. 46152 (line 1474) 46153* __satfracttiqq: Fixed-point fractional library routines. 46154 (line 1473) 46155* __satfracttisa: Fixed-point fractional library routines. 46156 (line 1478) 46157* __satfracttisq: Fixed-point fractional library routines. 46158 (line 1475) 46159* __satfracttita: Fixed-point fractional library routines. 46160 (line 1480) 46161* __satfracttiuda: Fixed-point fractional library routines. 46162 (line 1488) 46163* __satfracttiudq: Fixed-point fractional library routines. 46164 (line 1484) 46165* __satfracttiuha: Fixed-point fractional library routines. 46166 (line 1486) 46167* __satfracttiuhq: Fixed-point fractional library routines. 46168 (line 1482) 46169* __satfracttiuqq: Fixed-point fractional library routines. 46170 (line 1481) 46171* __satfracttiusa: Fixed-point fractional library routines. 46172 (line 1487) 46173* __satfracttiusq: Fixed-point fractional library routines. 46174 (line 1483) 46175* __satfracttiuta: Fixed-point fractional library routines. 46176 (line 1489) 46177* __satfractudada: Fixed-point fractional library routines. 46178 (line 1358) 46179* __satfractudadq: Fixed-point fractional library routines. 46180 (line 1353) 46181* __satfractudaha: Fixed-point fractional library routines. 46182 (line 1355) 46183* __satfractudahq: Fixed-point fractional library routines. 46184 (line 1351) 46185* __satfractudaqq: Fixed-point fractional library routines. 46186 (line 1349) 46187* __satfractudasa: Fixed-point fractional library routines. 46188 (line 1357) 46189* __satfractudasq: Fixed-point fractional library routines. 46190 (line 1352) 46191* __satfractudata: Fixed-point fractional library routines. 46192 (line 1359) 46193* __satfractudaudq: Fixed-point fractional library routines. 46194 (line 1367) 46195* __satfractudauha2: Fixed-point fractional library routines. 46196 (line 1369) 46197* __satfractudauhq: Fixed-point fractional library routines. 46198 (line 1363) 46199* __satfractudauqq: Fixed-point fractional library routines. 46200 (line 1361) 46201* __satfractudausa2: Fixed-point fractional library routines. 46202 (line 1371) 46203* __satfractudausq: Fixed-point fractional library routines. 46204 (line 1365) 46205* __satfractudauta2: Fixed-point fractional library routines. 46206 (line 1373) 46207* __satfractudqda: Fixed-point fractional library routines. 46208 (line 1282) 46209* __satfractudqdq: Fixed-point fractional library routines. 46210 (line 1277) 46211* __satfractudqha: Fixed-point fractional library routines. 46212 (line 1279) 46213* __satfractudqhq: Fixed-point fractional library routines. 46214 (line 1274) 46215* __satfractudqqq: Fixed-point fractional library routines. 46216 (line 1272) 46217* __satfractudqsa: Fixed-point fractional library routines. 46218 (line 1281) 46219* __satfractudqsq: Fixed-point fractional library routines. 46220 (line 1275) 46221* __satfractudqta: Fixed-point fractional library routines. 46222 (line 1284) 46223* __satfractudquda: Fixed-point fractional library routines. 46224 (line 1296) 46225* __satfractudquha: Fixed-point fractional library routines. 46226 (line 1292) 46227* __satfractudquhq2: Fixed-point fractional library routines. 46228 (line 1288) 46229* __satfractudquqq2: Fixed-point fractional library routines. 46230 (line 1286) 46231* __satfractudqusa: Fixed-point fractional library routines. 46232 (line 1294) 46233* __satfractudqusq2: Fixed-point fractional library routines. 46234 (line 1290) 46235* __satfractudquta: Fixed-point fractional library routines. 46236 (line 1298) 46237* __satfractuhada: Fixed-point fractional library routines. 46238 (line 1310) 46239* __satfractuhadq: Fixed-point fractional library routines. 46240 (line 1305) 46241* __satfractuhaha: Fixed-point fractional library routines. 46242 (line 1307) 46243* __satfractuhahq: Fixed-point fractional library routines. 46244 (line 1302) 46245* __satfractuhaqq: Fixed-point fractional library routines. 46246 (line 1300) 46247* __satfractuhasa: Fixed-point fractional library routines. 46248 (line 1309) 46249* __satfractuhasq: Fixed-point fractional library routines. 46250 (line 1303) 46251* __satfractuhata: Fixed-point fractional library routines. 46252 (line 1312) 46253* __satfractuhauda2: Fixed-point fractional library routines. 46254 (line 1324) 46255* __satfractuhaudq: Fixed-point fractional library routines. 46256 (line 1320) 46257* __satfractuhauhq: Fixed-point fractional library routines. 46258 (line 1316) 46259* __satfractuhauqq: Fixed-point fractional library routines. 46260 (line 1314) 46261* __satfractuhausa2: Fixed-point fractional library routines. 46262 (line 1322) 46263* __satfractuhausq: Fixed-point fractional library routines. 46264 (line 1318) 46265* __satfractuhauta2: Fixed-point fractional library routines. 46266 (line 1326) 46267* __satfractuhqda: Fixed-point fractional library routines. 46268 (line 1231) 46269* __satfractuhqdq: Fixed-point fractional library routines. 46270 (line 1228) 46271* __satfractuhqha: Fixed-point fractional library routines. 46272 (line 1229) 46273* __satfractuhqhq: Fixed-point fractional library routines. 46274 (line 1226) 46275* __satfractuhqqq: Fixed-point fractional library routines. 46276 (line 1225) 46277* __satfractuhqsa: Fixed-point fractional library routines. 46278 (line 1230) 46279* __satfractuhqsq: Fixed-point fractional library routines. 46280 (line 1227) 46281* __satfractuhqta: Fixed-point fractional library routines. 46282 (line 1232) 46283* __satfractuhquda: Fixed-point fractional library routines. 46284 (line 1242) 46285* __satfractuhqudq2: Fixed-point fractional library routines. 46286 (line 1237) 46287* __satfractuhquha: Fixed-point fractional library routines. 46288 (line 1239) 46289* __satfractuhquqq2: Fixed-point fractional library routines. 46290 (line 1233) 46291* __satfractuhqusa: Fixed-point fractional library routines. 46292 (line 1241) 46293* __satfractuhqusq2: Fixed-point fractional library routines. 46294 (line 1235) 46295* __satfractuhquta: Fixed-point fractional library routines. 46296 (line 1244) 46297* __satfractunsdida: Fixed-point fractional library routines. 46298 (line 1841) 46299* __satfractunsdidq: Fixed-point fractional library routines. 46300 (line 1837) 46301* __satfractunsdiha: Fixed-point fractional library routines. 46302 (line 1839) 46303* __satfractunsdihq: Fixed-point fractional library routines. 46304 (line 1835) 46305* __satfractunsdiqq: Fixed-point fractional library routines. 46306 (line 1834) 46307* __satfractunsdisa: Fixed-point fractional library routines. 46308 (line 1840) 46309* __satfractunsdisq: Fixed-point fractional library routines. 46310 (line 1836) 46311* __satfractunsdita: Fixed-point fractional library routines. 46312 (line 1842) 46313* __satfractunsdiuda: Fixed-point fractional library routines. 46314 (line 1856) 46315* __satfractunsdiudq: Fixed-point fractional library routines. 46316 (line 1850) 46317* __satfractunsdiuha: Fixed-point fractional library routines. 46318 (line 1852) 46319* __satfractunsdiuhq: Fixed-point fractional library routines. 46320 (line 1846) 46321* __satfractunsdiuqq: Fixed-point fractional library routines. 46322 (line 1844) 46323* __satfractunsdiusa: Fixed-point fractional library routines. 46324 (line 1854) 46325* __satfractunsdiusq: Fixed-point fractional library routines. 46326 (line 1848) 46327* __satfractunsdiuta: Fixed-point fractional library routines. 46328 (line 1858) 46329* __satfractunshida: Fixed-point fractional library routines. 46330 (line 1793) 46331* __satfractunshidq: Fixed-point fractional library routines. 46332 (line 1789) 46333* __satfractunshiha: Fixed-point fractional library routines. 46334 (line 1791) 46335* __satfractunshihq: Fixed-point fractional library routines. 46336 (line 1787) 46337* __satfractunshiqq: Fixed-point fractional library routines. 46338 (line 1786) 46339* __satfractunshisa: Fixed-point fractional library routines. 46340 (line 1792) 46341* __satfractunshisq: Fixed-point fractional library routines. 46342 (line 1788) 46343* __satfractunshita: Fixed-point fractional library routines. 46344 (line 1794) 46345* __satfractunshiuda: Fixed-point fractional library routines. 46346 (line 1808) 46347* __satfractunshiudq: Fixed-point fractional library routines. 46348 (line 1802) 46349* __satfractunshiuha: Fixed-point fractional library routines. 46350 (line 1804) 46351* __satfractunshiuhq: Fixed-point fractional library routines. 46352 (line 1798) 46353* __satfractunshiuqq: Fixed-point fractional library routines. 46354 (line 1796) 46355* __satfractunshiusa: Fixed-point fractional library routines. 46356 (line 1806) 46357* __satfractunshiusq: Fixed-point fractional library routines. 46358 (line 1800) 46359* __satfractunshiuta: Fixed-point fractional library routines. 46360 (line 1810) 46361* __satfractunsqida: Fixed-point fractional library routines. 46362 (line 1767) 46363* __satfractunsqidq: Fixed-point fractional library routines. 46364 (line 1763) 46365* __satfractunsqiha: Fixed-point fractional library routines. 46366 (line 1765) 46367* __satfractunsqihq: Fixed-point fractional library routines. 46368 (line 1761) 46369* __satfractunsqiqq: Fixed-point fractional library routines. 46370 (line 1760) 46371* __satfractunsqisa: Fixed-point fractional library routines. 46372 (line 1766) 46373* __satfractunsqisq: Fixed-point fractional library routines. 46374 (line 1762) 46375* __satfractunsqita: Fixed-point fractional library routines. 46376 (line 1768) 46377* __satfractunsqiuda: Fixed-point fractional library routines. 46378 (line 1782) 46379* __satfractunsqiudq: Fixed-point fractional library routines. 46380 (line 1776) 46381* __satfractunsqiuha: Fixed-point fractional library routines. 46382 (line 1778) 46383* __satfractunsqiuhq: Fixed-point fractional library routines. 46384 (line 1772) 46385* __satfractunsqiuqq: Fixed-point fractional library routines. 46386 (line 1770) 46387* __satfractunsqiusa: Fixed-point fractional library routines. 46388 (line 1780) 46389* __satfractunsqiusq: Fixed-point fractional library routines. 46390 (line 1774) 46391* __satfractunsqiuta: Fixed-point fractional library routines. 46392 (line 1784) 46393* __satfractunssida: Fixed-point fractional library routines. 46394 (line 1818) 46395* __satfractunssidq: Fixed-point fractional library routines. 46396 (line 1815) 46397* __satfractunssiha: Fixed-point fractional library routines. 46398 (line 1816) 46399* __satfractunssihq: Fixed-point fractional library routines. 46400 (line 1813) 46401* __satfractunssiqq: Fixed-point fractional library routines. 46402 (line 1812) 46403* __satfractunssisa: Fixed-point fractional library routines. 46404 (line 1817) 46405* __satfractunssisq: Fixed-point fractional library routines. 46406 (line 1814) 46407* __satfractunssita: Fixed-point fractional library routines. 46408 (line 1819) 46409* __satfractunssiuda: Fixed-point fractional library routines. 46410 (line 1830) 46411* __satfractunssiudq: Fixed-point fractional library routines. 46412 (line 1825) 46413* __satfractunssiuha: Fixed-point fractional library routines. 46414 (line 1827) 46415* __satfractunssiuhq: Fixed-point fractional library routines. 46416 (line 1822) 46417* __satfractunssiuqq: Fixed-point fractional library routines. 46418 (line 1820) 46419* __satfractunssiusa: Fixed-point fractional library routines. 46420 (line 1829) 46421* __satfractunssiusq: Fixed-point fractional library routines. 46422 (line 1823) 46423* __satfractunssiuta: Fixed-point fractional library routines. 46424 (line 1832) 46425* __satfractunstida: Fixed-point fractional library routines. 46426 (line 1870) 46427* __satfractunstidq: Fixed-point fractional library routines. 46428 (line 1865) 46429* __satfractunstiha: Fixed-point fractional library routines. 46430 (line 1867) 46431* __satfractunstihq: Fixed-point fractional library routines. 46432 (line 1862) 46433* __satfractunstiqq: Fixed-point fractional library routines. 46434 (line 1860) 46435* __satfractunstisa: Fixed-point fractional library routines. 46436 (line 1869) 46437* __satfractunstisq: Fixed-point fractional library routines. 46438 (line 1863) 46439* __satfractunstita: Fixed-point fractional library routines. 46440 (line 1872) 46441* __satfractunstiuda: Fixed-point fractional library routines. 46442 (line 1886) 46443* __satfractunstiudq: Fixed-point fractional library routines. 46444 (line 1880) 46445* __satfractunstiuha: Fixed-point fractional library routines. 46446 (line 1882) 46447* __satfractunstiuhq: Fixed-point fractional library routines. 46448 (line 1876) 46449* __satfractunstiuqq: Fixed-point fractional library routines. 46450 (line 1874) 46451* __satfractunstiusa: Fixed-point fractional library routines. 46452 (line 1884) 46453* __satfractunstiusq: Fixed-point fractional library routines. 46454 (line 1878) 46455* __satfractunstiuta: Fixed-point fractional library routines. 46456 (line 1888) 46457* __satfractuqqda: Fixed-point fractional library routines. 46458 (line 1207) 46459* __satfractuqqdq: Fixed-point fractional library routines. 46460 (line 1202) 46461* __satfractuqqha: Fixed-point fractional library routines. 46462 (line 1204) 46463* __satfractuqqhq: Fixed-point fractional library routines. 46464 (line 1199) 46465* __satfractuqqqq: Fixed-point fractional library routines. 46466 (line 1197) 46467* __satfractuqqsa: Fixed-point fractional library routines. 46468 (line 1206) 46469* __satfractuqqsq: Fixed-point fractional library routines. 46470 (line 1200) 46471* __satfractuqqta: Fixed-point fractional library routines. 46472 (line 1209) 46473* __satfractuqquda: Fixed-point fractional library routines. 46474 (line 1221) 46475* __satfractuqqudq2: Fixed-point fractional library routines. 46476 (line 1215) 46477* __satfractuqquha: Fixed-point fractional library routines. 46478 (line 1217) 46479* __satfractuqquhq2: Fixed-point fractional library routines. 46480 (line 1211) 46481* __satfractuqqusa: Fixed-point fractional library routines. 46482 (line 1219) 46483* __satfractuqqusq2: Fixed-point fractional library routines. 46484 (line 1213) 46485* __satfractuqquta: Fixed-point fractional library routines. 46486 (line 1223) 46487* __satfractusada: Fixed-point fractional library routines. 46488 (line 1334) 46489* __satfractusadq: Fixed-point fractional library routines. 46490 (line 1331) 46491* __satfractusaha: Fixed-point fractional library routines. 46492 (line 1332) 46493* __satfractusahq: Fixed-point fractional library routines. 46494 (line 1329) 46495* __satfractusaqq: Fixed-point fractional library routines. 46496 (line 1328) 46497* __satfractusasa: Fixed-point fractional library routines. 46498 (line 1333) 46499* __satfractusasq: Fixed-point fractional library routines. 46500 (line 1330) 46501* __satfractusata: Fixed-point fractional library routines. 46502 (line 1335) 46503* __satfractusauda2: Fixed-point fractional library routines. 46504 (line 1345) 46505* __satfractusaudq: Fixed-point fractional library routines. 46506 (line 1341) 46507* __satfractusauha2: Fixed-point fractional library routines. 46508 (line 1343) 46509* __satfractusauhq: Fixed-point fractional library routines. 46510 (line 1338) 46511* __satfractusauqq: Fixed-point fractional library routines. 46512 (line 1336) 46513* __satfractusausq: Fixed-point fractional library routines. 46514 (line 1339) 46515* __satfractusauta2: Fixed-point fractional library routines. 46516 (line 1347) 46517* __satfractusqda: Fixed-point fractional library routines. 46518 (line 1255) 46519* __satfractusqdq: Fixed-point fractional library routines. 46520 (line 1250) 46521* __satfractusqha: Fixed-point fractional library routines. 46522 (line 1252) 46523* __satfractusqhq: Fixed-point fractional library routines. 46524 (line 1248) 46525* __satfractusqqq: Fixed-point fractional library routines. 46526 (line 1246) 46527* __satfractusqsa: Fixed-point fractional library routines. 46528 (line 1254) 46529* __satfractusqsq: Fixed-point fractional library routines. 46530 (line 1249) 46531* __satfractusqta: Fixed-point fractional library routines. 46532 (line 1256) 46533* __satfractusquda: Fixed-point fractional library routines. 46534 (line 1268) 46535* __satfractusqudq2: Fixed-point fractional library routines. 46536 (line 1262) 46537* __satfractusquha: Fixed-point fractional library routines. 46538 (line 1264) 46539* __satfractusquhq2: Fixed-point fractional library routines. 46540 (line 1260) 46541* __satfractusquqq2: Fixed-point fractional library routines. 46542 (line 1258) 46543* __satfractusqusa: Fixed-point fractional library routines. 46544 (line 1266) 46545* __satfractusquta: Fixed-point fractional library routines. 46546 (line 1270) 46547* __satfractutada: Fixed-point fractional library routines. 46548 (line 1385) 46549* __satfractutadq: Fixed-point fractional library routines. 46550 (line 1380) 46551* __satfractutaha: Fixed-point fractional library routines. 46552 (line 1382) 46553* __satfractutahq: Fixed-point fractional library routines. 46554 (line 1377) 46555* __satfractutaqq: Fixed-point fractional library routines. 46556 (line 1375) 46557* __satfractutasa: Fixed-point fractional library routines. 46558 (line 1384) 46559* __satfractutasq: Fixed-point fractional library routines. 46560 (line 1378) 46561* __satfractutata: Fixed-point fractional library routines. 46562 (line 1387) 46563* __satfractutauda2: Fixed-point fractional library routines. 46564 (line 1401) 46565* __satfractutaudq: Fixed-point fractional library routines. 46566 (line 1395) 46567* __satfractutauha2: Fixed-point fractional library routines. 46568 (line 1397) 46569* __satfractutauhq: Fixed-point fractional library routines. 46570 (line 1391) 46571* __satfractutauqq: Fixed-point fractional library routines. 46572 (line 1389) 46573* __satfractutausa2: Fixed-point fractional library routines. 46574 (line 1399) 46575* __satfractutausq: Fixed-point fractional library routines. 46576 (line 1393) 46577* __splitstack_find: Miscellaneous routines. 46578 (line 15) 46579* __ssaddda3: Fixed-point fractional library routines. 46580 (line 74) 46581* __ssadddq3: Fixed-point fractional library routines. 46582 (line 69) 46583* __ssaddha3: Fixed-point fractional library routines. 46584 (line 71) 46585* __ssaddhq3: Fixed-point fractional library routines. 46586 (line 67) 46587* __ssaddqq3: Fixed-point fractional library routines. 46588 (line 65) 46589* __ssaddsa3: Fixed-point fractional library routines. 46590 (line 73) 46591* __ssaddsq3: Fixed-point fractional library routines. 46592 (line 68) 46593* __ssaddta3: Fixed-point fractional library routines. 46594 (line 75) 46595* __ssashlda3: Fixed-point fractional library routines. 46596 (line 409) 46597* __ssashldq3: Fixed-point fractional library routines. 46598 (line 405) 46599* __ssashlha3: Fixed-point fractional library routines. 46600 (line 407) 46601* __ssashlhq3: Fixed-point fractional library routines. 46602 (line 403) 46603* __ssashlsa3: Fixed-point fractional library routines. 46604 (line 408) 46605* __ssashlsq3: Fixed-point fractional library routines. 46606 (line 404) 46607* __ssashlta3: Fixed-point fractional library routines. 46608 (line 410) 46609* __ssdivda3: Fixed-point fractional library routines. 46610 (line 268) 46611* __ssdivdq3: Fixed-point fractional library routines. 46612 (line 263) 46613* __ssdivha3: Fixed-point fractional library routines. 46614 (line 265) 46615* __ssdivhq3: Fixed-point fractional library routines. 46616 (line 261) 46617* __ssdivqq3: Fixed-point fractional library routines. 46618 (line 259) 46619* __ssdivsa3: Fixed-point fractional library routines. 46620 (line 267) 46621* __ssdivsq3: Fixed-point fractional library routines. 46622 (line 262) 46623* __ssdivta3: Fixed-point fractional library routines. 46624 (line 269) 46625* __ssmulda3: Fixed-point fractional library routines. 46626 (line 200) 46627* __ssmuldq3: Fixed-point fractional library routines. 46628 (line 195) 46629* __ssmulha3: Fixed-point fractional library routines. 46630 (line 197) 46631* __ssmulhq3: Fixed-point fractional library routines. 46632 (line 193) 46633* __ssmulqq3: Fixed-point fractional library routines. 46634 (line 191) 46635* __ssmulsa3: Fixed-point fractional library routines. 46636 (line 199) 46637* __ssmulsq3: Fixed-point fractional library routines. 46638 (line 194) 46639* __ssmulta3: Fixed-point fractional library routines. 46640 (line 201) 46641* __ssnegda2: Fixed-point fractional library routines. 46642 (line 323) 46643* __ssnegdq2: Fixed-point fractional library routines. 46644 (line 320) 46645* __ssnegha2: Fixed-point fractional library routines. 46646 (line 321) 46647* __ssneghq2: Fixed-point fractional library routines. 46648 (line 318) 46649* __ssnegqq2: Fixed-point fractional library routines. 46650 (line 317) 46651* __ssnegsa2: Fixed-point fractional library routines. 46652 (line 322) 46653* __ssnegsq2: Fixed-point fractional library routines. 46654 (line 319) 46655* __ssnegta2: Fixed-point fractional library routines. 46656 (line 324) 46657* __sssubda3: Fixed-point fractional library routines. 46658 (line 136) 46659* __sssubdq3: Fixed-point fractional library routines. 46660 (line 131) 46661* __sssubha3: Fixed-point fractional library routines. 46662 (line 133) 46663* __sssubhq3: Fixed-point fractional library routines. 46664 (line 129) 46665* __sssubqq3: Fixed-point fractional library routines. 46666 (line 127) 46667* __sssubsa3: Fixed-point fractional library routines. 46668 (line 135) 46669* __sssubsq3: Fixed-point fractional library routines. 46670 (line 130) 46671* __sssubta3: Fixed-point fractional library routines. 46672 (line 137) 46673* __subda3: Fixed-point fractional library routines. 46674 (line 114) 46675* __subdf3: Soft float library routines. 46676 (line 30) 46677* __subdq3: Fixed-point fractional library routines. 46678 (line 101) 46679* __subha3: Fixed-point fractional library routines. 46680 (line 111) 46681* __subhq3: Fixed-point fractional library routines. 46682 (line 99) 46683* __subqq3: Fixed-point fractional library routines. 46684 (line 97) 46685* __subsa3: Fixed-point fractional library routines. 46686 (line 113) 46687* __subsf3: Soft float library routines. 46688 (line 29) 46689* __subsq3: Fixed-point fractional library routines. 46690 (line 100) 46691* __subta3: Fixed-point fractional library routines. 46692 (line 115) 46693* __subtf3: Soft float library routines. 46694 (line 31) 46695* __subuda3: Fixed-point fractional library routines. 46696 (line 121) 46697* __subudq3: Fixed-point fractional library routines. 46698 (line 109) 46699* __subuha3: Fixed-point fractional library routines. 46700 (line 117) 46701* __subuhq3: Fixed-point fractional library routines. 46702 (line 105) 46703* __subuqq3: Fixed-point fractional library routines. 46704 (line 103) 46705* __subusa3: Fixed-point fractional library routines. 46706 (line 119) 46707* __subusq3: Fixed-point fractional library routines. 46708 (line 107) 46709* __subuta3: Fixed-point fractional library routines. 46710 (line 123) 46711* __subvdi3: Integer library routines. 46712 (line 122) 46713* __subvsi3: Integer library routines. 46714 (line 121) 46715* __subxf3: Soft float library routines. 46716 (line 33) 46717* __truncdfsf2: Soft float library routines. 46718 (line 75) 46719* __trunctfdf2: Soft float library routines. 46720 (line 72) 46721* __trunctfsf2: Soft float library routines. 46722 (line 74) 46723* __truncxfdf2: Soft float library routines. 46724 (line 71) 46725* __truncxfsf2: Soft float library routines. 46726 (line 73) 46727* __ucmpdi2: Integer library routines. 46728 (line 92) 46729* __ucmpti2: Integer library routines. 46730 (line 93) 46731* __udivdi3: Integer library routines. 46732 (line 52) 46733* __udivmoddi4: Integer library routines. 46734 (line 59) 46735* __udivmodti4: Integer library routines. 46736 (line 61) 46737* __udivsi3: Integer library routines. 46738 (line 50) 46739* __udivti3: Integer library routines. 46740 (line 54) 46741* __udivuda3: Fixed-point fractional library routines. 46742 (line 252) 46743* __udivudq3: Fixed-point fractional library routines. 46744 (line 246) 46745* __udivuha3: Fixed-point fractional library routines. 46746 (line 248) 46747* __udivuhq3: Fixed-point fractional library routines. 46748 (line 242) 46749* __udivuqq3: Fixed-point fractional library routines. 46750 (line 240) 46751* __udivusa3: Fixed-point fractional library routines. 46752 (line 250) 46753* __udivusq3: Fixed-point fractional library routines. 46754 (line 244) 46755* __udivuta3: Fixed-point fractional library routines. 46756 (line 254) 46757* __umoddi3: Integer library routines. 46758 (line 69) 46759* __umodsi3: Integer library routines. 46760 (line 67) 46761* __umodti3: Integer library routines. 46762 (line 71) 46763* __unorddf2: Soft float library routines. 46764 (line 172) 46765* __unordsf2: Soft float library routines. 46766 (line 171) 46767* __unordtf2: Soft float library routines. 46768 (line 173) 46769* __usadduda3: Fixed-point fractional library routines. 46770 (line 91) 46771* __usaddudq3: Fixed-point fractional library routines. 46772 (line 85) 46773* __usadduha3: Fixed-point fractional library routines. 46774 (line 87) 46775* __usadduhq3: Fixed-point fractional library routines. 46776 (line 81) 46777* __usadduqq3: Fixed-point fractional library routines. 46778 (line 79) 46779* __usaddusa3: Fixed-point fractional library routines. 46780 (line 89) 46781* __usaddusq3: Fixed-point fractional library routines. 46782 (line 83) 46783* __usadduta3: Fixed-point fractional library routines. 46784 (line 93) 46785* __usashluda3: Fixed-point fractional library routines. 46786 (line 427) 46787* __usashludq3: Fixed-point fractional library routines. 46788 (line 421) 46789* __usashluha3: Fixed-point fractional library routines. 46790 (line 423) 46791* __usashluhq3: Fixed-point fractional library routines. 46792 (line 417) 46793* __usashluqq3: Fixed-point fractional library routines. 46794 (line 415) 46795* __usashlusa3: Fixed-point fractional library routines. 46796 (line 425) 46797* __usashlusq3: Fixed-point fractional library routines. 46798 (line 419) 46799* __usashluta3: Fixed-point fractional library routines. 46800 (line 429) 46801* __usdivuda3: Fixed-point fractional library routines. 46802 (line 286) 46803* __usdivudq3: Fixed-point fractional library routines. 46804 (line 280) 46805* __usdivuha3: Fixed-point fractional library routines. 46806 (line 282) 46807* __usdivuhq3: Fixed-point fractional library routines. 46808 (line 276) 46809* __usdivuqq3: Fixed-point fractional library routines. 46810 (line 274) 46811* __usdivusa3: Fixed-point fractional library routines. 46812 (line 284) 46813* __usdivusq3: Fixed-point fractional library routines. 46814 (line 278) 46815* __usdivuta3: Fixed-point fractional library routines. 46816 (line 288) 46817* __usmuluda3: Fixed-point fractional library routines. 46818 (line 218) 46819* __usmuludq3: Fixed-point fractional library routines. 46820 (line 212) 46821* __usmuluha3: Fixed-point fractional library routines. 46822 (line 214) 46823* __usmuluhq3: Fixed-point fractional library routines. 46824 (line 208) 46825* __usmuluqq3: Fixed-point fractional library routines. 46826 (line 206) 46827* __usmulusa3: Fixed-point fractional library routines. 46828 (line 216) 46829* __usmulusq3: Fixed-point fractional library routines. 46830 (line 210) 46831* __usmuluta3: Fixed-point fractional library routines. 46832 (line 220) 46833* __usneguda2: Fixed-point fractional library routines. 46834 (line 337) 46835* __usnegudq2: Fixed-point fractional library routines. 46836 (line 332) 46837* __usneguha2: Fixed-point fractional library routines. 46838 (line 334) 46839* __usneguhq2: Fixed-point fractional library routines. 46840 (line 329) 46841* __usneguqq2: Fixed-point fractional library routines. 46842 (line 327) 46843* __usnegusa2: Fixed-point fractional library routines. 46844 (line 336) 46845* __usnegusq2: Fixed-point fractional library routines. 46846 (line 330) 46847* __usneguta2: Fixed-point fractional library routines. 46848 (line 339) 46849* __ussubuda3: Fixed-point fractional library routines. 46850 (line 154) 46851* __ussubudq3: Fixed-point fractional library routines. 46852 (line 148) 46853* __ussubuha3: Fixed-point fractional library routines. 46854 (line 150) 46855* __ussubuhq3: Fixed-point fractional library routines. 46856 (line 144) 46857* __ussubuqq3: Fixed-point fractional library routines. 46858 (line 142) 46859* __ussubusa3: Fixed-point fractional library routines. 46860 (line 152) 46861* __ussubusq3: Fixed-point fractional library routines. 46862 (line 146) 46863* __ussubuta3: Fixed-point fractional library routines. 46864 (line 156) 46865* abort: Portability. (line 20) 46866* abs: Arithmetic. (line 200) 46867* abs and attributes: Expressions. (line 83) 46868* absence_set: Processor pipeline description. 46869 (line 223) 46870* absM2 instruction pattern: Standard Names. (line 582) 46871* absolute value: Arithmetic. (line 200) 46872* ABS_EXPR: Unary and Binary Expressions. 46873 (line 6) 46874* access to operands: Accessors. (line 6) 46875* access to special operands: Special Accessors. (line 6) 46876* accessors: Accessors. (line 6) 46877* ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 48) 46878* ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 133) 46879* ACCUM_TYPE_SIZE: Type Layout. (line 87) 46880* ADA_LONG_TYPE_SIZE: Type Layout. (line 25) 46881* Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 46882 (line 6) 46883* ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 14) 46884* addM3 instruction pattern: Standard Names. (line 260) 46885* addMODEcc instruction pattern: Standard Names. (line 1112) 46886* addptrM3 instruction pattern: Standard Names. (line 290) 46887* address constraints: Simple Constraints. (line 162) 46888* addressing modes: Addressing Modes. (line 6) 46889* address_operand: Machine-Independent Predicates. 46890 (line 62) 46891* address_operand <1>: Simple Constraints. (line 166) 46892* addr_diff_vec: Side Effects. (line 314) 46893* addr_diff_vec, length of: Insn Lengths. (line 26) 46894* ADDR_EXPR: Storage References. (line 6) 46895* addr_vec: Side Effects. (line 309) 46896* addr_vec, length of: Insn Lengths. (line 26) 46897* addvM4 instruction pattern: Standard Names. (line 276) 46898* ADJUST_FIELD_ALIGN: Storage Layout. (line 195) 46899* ADJUST_INSN_LENGTH: Insn Lengths. (line 41) 46900* ADJUST_REG_ALLOC_ORDER: Allocation Order. (line 22) 46901* aggregates as return values: Aggregate Return. (line 6) 46902* alias: Alias analysis. (line 6) 46903* allocate_stack instruction pattern: Standard Names. (line 1426) 46904* ALL_REGS: Register Classes. (line 17) 46905* alternate entry points: Insns. (line 146) 46906* anchored addresses: Anchored Addresses. (line 6) 46907* and: Arithmetic. (line 158) 46908* and and attributes: Expressions. (line 50) 46909* and, canonicalization of: Insn Canonicalizations. 46910 (line 51) 46911* andM3 instruction pattern: Standard Names. (line 266) 46912* ANNOTATE_EXPR: Unary and Binary Expressions. 46913 (line 6) 46914* annotations: Annotations. (line 6) 46915* APPLY_RESULT_SIZE: Scalar Return. (line 112) 46916* ARGS_GROW_DOWNWARD: Frame Layout. (line 34) 46917* argument passing: Interface. (line 36) 46918* arguments in registers: Register Arguments. (line 6) 46919* arguments on stack: Stack Arguments. (line 6) 46920* ARG_POINTER_CFA_OFFSET: Frame Layout. (line 194) 46921* ARG_POINTER_REGNUM: Frame Registers. (line 40) 46922* ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65) 46923* arg_pointer_rtx: Frame Registers. (line 104) 46924* arithmetic library: Soft float library routines. 46925 (line 6) 46926* arithmetic shift: Arithmetic. (line 173) 46927* arithmetic shift with signed saturation: Arithmetic. (line 173) 46928* arithmetic shift with unsigned saturation: Arithmetic. (line 173) 46929* arithmetic, in RTL: Arithmetic. (line 6) 46930* ARITHMETIC_TYPE_P: Types for C++. (line 59) 46931* array: Types. (line 6) 46932* ARRAY_RANGE_REF: Storage References. (line 6) 46933* ARRAY_REF: Storage References. (line 6) 46934* ARRAY_TYPE: Types. (line 6) 46935* ashift: Arithmetic. (line 173) 46936* ashift and attributes: Expressions. (line 83) 46937* ashiftrt: Arithmetic. (line 190) 46938* ashiftrt and attributes: Expressions. (line 83) 46939* ashlM3 instruction pattern: Standard Names. (line 553) 46940* ashrM3 instruction pattern: Standard Names. (line 563) 46941* ASM_APP_OFF: File Framework. (line 76) 46942* ASM_APP_ON: File Framework. (line 69) 46943* ASM_COMMENT_START: File Framework. (line 64) 46944* ASM_DECLARE_FUNCTION_NAME: Label Output. (line 108) 46945* ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 123) 46946* ASM_DECLARE_OBJECT_NAME: Label Output. (line 136) 46947* ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 164) 46948* ASM_FINAL_SPEC: Driver. (line 81) 46949* ASM_FINISH_DECLARE_OBJECT: Label Output. (line 172) 46950* ASM_FORMAT_PRIVATE_NAME: Label Output. (line 398) 46951* asm_fprintf: Instruction Output. (line 150) 46952* ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 160) 46953* ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 382) 46954* asm_input: Side Effects. (line 296) 46955* asm_input and /v: Flags. (line 76) 46956* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 80) 46957* asm_noperands: Insns. (line 304) 46958* ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 78) 46959* asm_operands and /v: Flags. (line 76) 46960* asm_operands, RTL sharing: Sharing. (line 45) 46961* asm_operands, usage: Assembler. (line 6) 46962* ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 8) 46963* ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 25) 46964* ASM_OUTPUT_ALIGN: Alignment Output. (line 85) 46965* ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 45) 46966* ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 29) 46967* ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 36) 46968* ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 89) 46969* ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 82) 46970* ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 90) 46971* ASM_OUTPUT_ASCII: Data Output. (line 54) 46972* ASM_OUTPUT_CASE_END: Dispatch Tables. (line 50) 46973* ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 37) 46974* ASM_OUTPUT_COMMON: Uninitialized Data. (line 9) 46975* ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 370) 46976* ASM_OUTPUT_DEF: Label Output. (line 419) 46977* ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 426) 46978* ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 77) 46979* ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 86) 46980* ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 92) 46981* ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 97) 46982* ASM_OUTPUT_DWARF_VMS_DELTA: SDB and DWARF. (line 81) 46983* ASM_OUTPUT_EXTERNAL: Label Output. (line 299) 46984* ASM_OUTPUT_FDESC: Data Output. (line 63) 46985* ASM_OUTPUT_FUNCTION_LABEL: Label Output. (line 16) 46986* ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 27) 46987* ASM_OUTPUT_LABEL: Label Output. (line 8) 46988* ASM_OUTPUT_LABELREF: Label Output. (line 321) 46989* ASM_OUTPUT_LABEL_REF: Label Output. (line 343) 46990* ASM_OUTPUT_LOCAL: Uninitialized Data. (line 69) 46991* ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 94) 46992* ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 51) 46993* ASM_OUTPUT_OPCODE: Instruction Output. (line 35) 46994* ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 112) 46995* ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 76) 46996* ASM_OUTPUT_REG_POP: Instruction Output. (line 206) 46997* ASM_OUTPUT_REG_PUSH: Instruction Output. (line 201) 46998* ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 45) 46999* ASM_OUTPUT_SKIP: Alignment Output. (line 72) 47000* ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 83) 47001* ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 87) 47002* ASM_OUTPUT_SYMBOL_REF: Label Output. (line 336) 47003* ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 98) 47004* ASM_OUTPUT_WEAKREF: Label Output. (line 231) 47005* ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 445) 47006* ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 66) 47007* ASM_SPEC: Driver. (line 73) 47008* ASM_STABD_OP: DBX Options. (line 34) 47009* ASM_STABN_OP: DBX Options. (line 41) 47010* ASM_STABS_OP: DBX Options. (line 28) 47011* ASM_WEAKEN_DECL: Label Output. (line 223) 47012* ASM_WEAKEN_LABEL: Label Output. (line 210) 47013* assembler format: File Framework. (line 6) 47014* assembler instructions in RTL: Assembler. (line 6) 47015* ASSEMBLER_DIALECT: Instruction Output. (line 172) 47016* assemble_name: Label Output. (line 8) 47017* assemble_name_raw: Label Output. (line 27) 47018* assigning attribute values to insns: Tagging Insns. (line 6) 47019* ASSUME_EXTENDED_UNWIND_CONTEXT: Frame Registers. (line 165) 47020* asterisk in template: Output Statement. (line 29) 47021* AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) 47022* atan2M3 instruction pattern: Standard Names. (line 665) 47023* atomic: GTY Options. (line 204) 47024* atomic_addMODE instruction pattern: Standard Names. (line 1828) 47025* atomic_add_fetchMODE instruction pattern: Standard Names. (line 1857) 47026* atomic_andMODE instruction pattern: Standard Names. (line 1828) 47027* atomic_and_fetchMODE instruction pattern: Standard Names. (line 1857) 47028* atomic_compare_and_swapMODE instruction pattern: Standard Names. 47029 (line 1764) 47030* atomic_exchangeMODE instruction pattern: Standard Names. (line 1816) 47031* atomic_fetch_addMODE instruction pattern: Standard Names. (line 1842) 47032* atomic_fetch_andMODE instruction pattern: Standard Names. (line 1842) 47033* atomic_fetch_nandMODE instruction pattern: Standard Names. (line 1842) 47034* atomic_fetch_orMODE instruction pattern: Standard Names. (line 1842) 47035* atomic_fetch_subMODE instruction pattern: Standard Names. (line 1842) 47036* atomic_fetch_xorMODE instruction pattern: Standard Names. (line 1842) 47037* atomic_loadMODE instruction pattern: Standard Names. (line 1795) 47038* atomic_nandMODE instruction pattern: Standard Names. (line 1828) 47039* atomic_nand_fetchMODE instruction pattern: Standard Names. (line 1857) 47040* atomic_orMODE instruction pattern: Standard Names. (line 1828) 47041* atomic_or_fetchMODE instruction pattern: Standard Names. (line 1857) 47042* atomic_storeMODE instruction pattern: Standard Names. (line 1805) 47043* atomic_subMODE instruction pattern: Standard Names. (line 1828) 47044* atomic_sub_fetchMODE instruction pattern: Standard Names. (line 1857) 47045* atomic_test_and_set instruction pattern: Standard Names. (line 1874) 47046* atomic_xorMODE instruction pattern: Standard Names. (line 1828) 47047* atomic_xor_fetchMODE instruction pattern: Standard Names. (line 1857) 47048* attr: Expressions. (line 163) 47049* attr <1>: Tagging Insns. (line 54) 47050* attribute expressions: Expressions. (line 6) 47051* attribute specifications: Attr Example. (line 6) 47052* attribute specifications example: Attr Example. (line 6) 47053* attributes: Attributes. (line 6) 47054* attributes, defining: Defining Attributes. 47055 (line 6) 47056* attributes, target-specific: Target Attributes. (line 6) 47057* ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 177) 47058* attr_flag: Expressions. (line 138) 47059* autoincrement addressing, availability: Portability. (line 20) 47060* autoincrement/decrement addressing: Simple Constraints. (line 30) 47061* automata_option: Processor pipeline description. 47062 (line 304) 47063* automaton based pipeline description: Processor pipeline description. 47064 (line 6) 47065* automaton based pipeline description <1>: Processor pipeline description. 47066 (line 49) 47067* automaton based scheduler: Processor pipeline description. 47068 (line 6) 47069* AVOID_CCMODE_COPIES: Values in Registers. 47070 (line 150) 47071* backslash: Output Template. (line 46) 47072* barrier: Insns. (line 176) 47073* barrier and /f: Flags. (line 107) 47074* barrier and /v: Flags. (line 44) 47075* BASE_REG_CLASS: Register Classes. (line 111) 47076* basic block: Basic Blocks. (line 6) 47077* Basic Statements: Basic Statements. (line 6) 47078* basic-block.h: Control Flow. (line 6) 47079* basic_block: Basic Blocks. (line 6) 47080* BASIC_BLOCK: Basic Blocks. (line 14) 47081* BB_HEAD, BB_END: Maintaining the CFG. 47082 (line 76) 47083* bb_seq: GIMPLE sequences. (line 72) 47084* BIGGEST_ALIGNMENT: Storage Layout. (line 162) 47085* BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 188) 47086* BImode: Machine Modes. (line 22) 47087* BIND_EXPR: Unary and Binary Expressions. 47088 (line 6) 47089* BINFO_TYPE: Classes. (line 6) 47090* bit-fields: Bit-Fields. (line 6) 47091* BITFIELD_NBYTES_LIMITED: Storage Layout. (line 398) 47092* BITS_BIG_ENDIAN: Storage Layout. (line 11) 47093* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8) 47094* BITS_PER_UNIT: Machine Modes. (line 354) 47095* BITS_PER_WORD: Storage Layout. (line 50) 47096* bitwise complement: Arithmetic. (line 154) 47097* bitwise exclusive-or: Arithmetic. (line 168) 47098* bitwise inclusive-or: Arithmetic. (line 163) 47099* bitwise logical-and: Arithmetic. (line 158) 47100* BIT_AND_EXPR: Unary and Binary Expressions. 47101 (line 6) 47102* BIT_IOR_EXPR: Unary and Binary Expressions. 47103 (line 6) 47104* BIT_NOT_EXPR: Unary and Binary Expressions. 47105 (line 6) 47106* BIT_XOR_EXPR: Unary and Binary Expressions. 47107 (line 6) 47108* BLKmode: Machine Modes. (line 185) 47109* BLKmode, and function return values: Calls. (line 23) 47110* blockage instruction pattern: Standard Names. (line 1627) 47111* Blocks: Blocks. (line 6) 47112* BLOCK_FOR_INSN, gimple_bb: Maintaining the CFG. 47113 (line 28) 47114* BLOCK_REG_PADDING: Register Arguments. (line 242) 47115* BND32mode: Machine Modes. (line 209) 47116* BND64mode: Machine Modes. (line 209) 47117* bool: Misc. (line 992) 47118* BOOLEAN_TYPE: Types. (line 6) 47119* BOOL_TYPE_SIZE: Type Layout. (line 43) 47120* branch prediction: Profile information. 47121 (line 24) 47122* BRANCH_COST: Costs. (line 104) 47123* break_out_memory_refs: Addressing Modes. (line 134) 47124* BREAK_STMT: Statements for C++. (line 6) 47125* BSS_SECTION_ASM_OP: Sections. (line 67) 47126* bswap: Arithmetic. (line 246) 47127* bswapM2 instruction pattern: Standard Names. (line 571) 47128* btruncM2 instruction pattern: Standard Names. (line 683) 47129* build0: Macros and Functions. 47130 (line 16) 47131* build1: Macros and Functions. 47132 (line 17) 47133* build2: Macros and Functions. 47134 (line 18) 47135* build3: Macros and Functions. 47136 (line 19) 47137* build4: Macros and Functions. 47138 (line 20) 47139* build5: Macros and Functions. 47140 (line 21) 47141* build6: Macros and Functions. 47142 (line 22) 47143* builtin_longjmp instruction pattern: Standard Names. (line 1524) 47144* builtin_setjmp_receiver instruction pattern: Standard Names. 47145 (line 1514) 47146* builtin_setjmp_setup instruction pattern: Standard Names. (line 1503) 47147* BYTES_BIG_ENDIAN: Storage Layout. (line 23) 47148* BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 219) 47149* byte_mode: Machine Modes. (line 367) 47150* C statements for assembler output: Output Statement. (line 6) 47151* cache: GTY Options. (line 125) 47152* call: Flags. (line 221) 47153* call <1>: Side Effects. (line 92) 47154* call instruction pattern: Standard Names. (line 1169) 47155* call usage: Calls. (line 10) 47156* call, in call_insn: Flags. (line 33) 47157* call, in mem: Flags. (line 81) 47158* call-clobbered register: Register Basics. (line 35) 47159* call-clobbered register <1>: Register Basics. (line 46) 47160* call-clobbered register <2>: Register Basics. (line 53) 47161* call-saved register: Register Basics. (line 35) 47162* call-saved register <1>: Register Basics. (line 46) 47163* call-saved register <2>: Register Basics. (line 53) 47164* call-used register: Register Basics. (line 35) 47165* call-used register <1>: Register Basics. (line 46) 47166* call-used register <2>: Register Basics. (line 53) 47167* calling conventions: Stack and Calling. (line 6) 47168* calling functions in RTL: Calls. (line 6) 47169* CALL_EXPR: Unary and Binary Expressions. 47170 (line 6) 47171* call_insn: Insns. (line 95) 47172* call_insn and /c: Flags. (line 33) 47173* call_insn and /f: Flags. (line 107) 47174* call_insn and /i: Flags. (line 24) 47175* call_insn and /j: Flags. (line 161) 47176* call_insn and /s: Flags. (line 49) 47177* call_insn and /s <1>: Flags. (line 148) 47178* call_insn and /u: Flags. (line 19) 47179* call_insn and /u <1>: Flags. (line 39) 47180* call_insn and /u or /i: Flags. (line 29) 47181* call_insn and /v: Flags. (line 44) 47182* CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 47183* call_pop instruction pattern: Standard Names. (line 1197) 47184* CALL_POPS_ARGS: Stack Arguments. (line 138) 47185* CALL_REALLY_USED_REGISTERS: Register Basics. (line 45) 47186* CALL_USED_REGISTERS: Register Basics. (line 34) 47187* call_used_regs: Register Basics. (line 59) 47188* call_value instruction pattern: Standard Names. (line 1189) 47189* call_value_pop instruction pattern: Standard Names. (line 1197) 47190* canadian: Configure Terms. (line 6) 47191* CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 533) 47192* CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory. 47193 (line 276) 47194* canonicalization of instructions: Insn Canonicalizations. 47195 (line 6) 47196* canonicalize_funcptr_for_compare instruction pattern: Standard Names. 47197 (line 1358) 47198* can_create_pseudo_p: Standard Names. (line 75) 47199* can_fallthru: Basic Blocks. (line 67) 47200* caret: Multi-Alternative. (line 52) 47201* casesi instruction pattern: Standard Names. (line 1290) 47202* CASE_VECTOR_MODE: Misc. (line 26) 47203* CASE_VECTOR_PC_RELATIVE: Misc. (line 39) 47204* CASE_VECTOR_SHORTEN_MODE: Misc. (line 30) 47205* cbranchMODE4 instruction pattern: Standard Names. (line 1158) 47206* cc0: Regs and Memory. (line 303) 47207* cc0 <1>: CC0 Condition Codes. 47208 (line 6) 47209* cc0, RTL sharing: Sharing. (line 27) 47210* cc0_rtx: Regs and Memory. (line 329) 47211* CC1PLUS_SPEC: Driver. (line 63) 47212* CC1_SPEC: Driver. (line 55) 47213* CCmode: Machine Modes. (line 178) 47214* CCmode <1>: MODE_CC Condition Codes. 47215 (line 6) 47216* cc_status: CC0 Condition Codes. 47217 (line 6) 47218* CC_STATUS_MDEP: CC0 Condition Codes. 47219 (line 16) 47220* CC_STATUS_MDEP_INIT: CC0 Condition Codes. 47221 (line 22) 47222* CDImode: Machine Modes. (line 204) 47223* ceilM2 instruction pattern: Standard Names. (line 699) 47224* CEIL_DIV_EXPR: Unary and Binary Expressions. 47225 (line 6) 47226* CEIL_MOD_EXPR: Unary and Binary Expressions. 47227 (line 6) 47228* CFA_FRAME_BASE_OFFSET: Frame Layout. (line 226) 47229* CFG verification: Maintaining the CFG. 47230 (line 117) 47231* CFG, Control Flow Graph: Control Flow. (line 6) 47232* cfghooks.h: Maintaining the CFG. 47233 (line 6) 47234* cgraph_finalize_function: Parsing pass. (line 51) 47235* chain_circular: GTY Options. (line 167) 47236* chain_next: GTY Options. (line 167) 47237* chain_prev: GTY Options. (line 167) 47238* change_address: Standard Names. (line 47) 47239* CHAR_TYPE_SIZE: Type Layout. (line 38) 47240* check_stack instruction pattern: Standard Names. (line 1444) 47241* CHImode: Machine Modes. (line 204) 47242* CILK_PLUS: Cilk Plus Transformation. 47243 (line 6) 47244* class definitions, register: Register Classes. (line 6) 47245* class preference constraints: Class Preferences. (line 6) 47246* class, scope: Classes. (line 6) 47247* classes of RTX codes: RTL Classes. (line 6) 47248* CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 47249* CLASSTYPE_HAS_MUTABLE: Classes. (line 85) 47250* CLASSTYPE_NON_POD_P: Classes. (line 90) 47251* CLASS_MAX_NREGS: Register Classes. (line 521) 47252* CLASS_TYPE_P: Types for C++. (line 63) 47253* Cleanups: Cleanups. (line 6) 47254* CLEANUP_DECL: Statements for C++. (line 6) 47255* CLEANUP_EXPR: Statements for C++. (line 6) 47256* CLEANUP_POINT_EXPR: Unary and Binary Expressions. 47257 (line 6) 47258* CLEANUP_STMT: Statements for C++. (line 6) 47259* clear_cache instruction pattern: Standard Names. (line 1934) 47260* CLEAR_INSN_CACHE: Trampolines. (line 98) 47261* CLEAR_RATIO: Costs. (line 204) 47262* clobber: Side Effects. (line 106) 47263* clrsb: Arithmetic. (line 215) 47264* clrsbM2 instruction pattern: Standard Names. (line 764) 47265* clz: Arithmetic. (line 222) 47266* clzM2 instruction pattern: Standard Names. (line 771) 47267* CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 304) 47268* cmpmemM instruction pattern: Standard Names. (line 912) 47269* cmpstrM instruction pattern: Standard Names. (line 891) 47270* cmpstrnM instruction pattern: Standard Names. (line 878) 47271* code generation RTL sequences: Expander Definitions. 47272 (line 6) 47273* code iterators in .md files: Code Iterators. (line 6) 47274* codes, RTL expression: RTL Objects. (line 47) 47275* code_label: Insns. (line 125) 47276* CODE_LABEL: Basic Blocks. (line 50) 47277* code_label and /i: Flags. (line 59) 47278* code_label and /v: Flags. (line 44) 47279* CODE_LABEL_NUMBER: Insns. (line 125) 47280* COImode: Machine Modes. (line 204) 47281* COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 47282* COLLECT_EXPORT_LIST: Misc. (line 866) 47283* COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 47284 (line 43) 47285* COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 47286 (line 32) 47287* commit_edge_insertions: Maintaining the CFG. 47288 (line 105) 47289* compare: Arithmetic. (line 46) 47290* compare, canonicalization of: Insn Canonicalizations. 47291 (line 36) 47292* comparison_operator: Machine-Independent Predicates. 47293 (line 110) 47294* compiler passes and files: Passes. (line 6) 47295* complement, bitwise: Arithmetic. (line 154) 47296* COMPLEX_CST: Constant expressions. 47297 (line 6) 47298* COMPLEX_EXPR: Unary and Binary Expressions. 47299 (line 6) 47300* COMPLEX_TYPE: Types. (line 6) 47301* COMPONENT_REF: Storage References. (line 6) 47302* Compound Expressions: Compound Expressions. 47303 (line 6) 47304* Compound Lvalues: Compound Lvalues. (line 6) 47305* COMPOUND_EXPR: Unary and Binary Expressions. 47306 (line 6) 47307* COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 47308 (line 6) 47309* COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 47310 (line 377) 47311* COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 47312 (line 377) 47313* computed jump: Edges. (line 127) 47314* computing the length of an insn: Insn Lengths. (line 6) 47315* concat: Regs and Memory. (line 381) 47316* concatn: Regs and Memory. (line 387) 47317* cond: Comparisons. (line 90) 47318* cond and attributes: Expressions. (line 37) 47319* condition code register: Regs and Memory. (line 303) 47320* condition code status: Condition Code. (line 6) 47321* condition codes: Comparisons. (line 20) 47322* conditional execution: Conditional Execution. 47323 (line 6) 47324* Conditional Expressions: Conditional Expressions. 47325 (line 6) 47326* conditions, in patterns: Patterns. (line 43) 47327* cond_exec: Side Effects. (line 254) 47328* COND_EXPR: Unary and Binary Expressions. 47329 (line 6) 47330* configuration file: Filesystem. (line 6) 47331* configuration file <1>: Host Misc. (line 6) 47332* configure terms: Configure Terms. (line 6) 47333* CONJ_EXPR: Unary and Binary Expressions. 47334 (line 6) 47335* const: Constants. (line 140) 47336* const0_rtx: Constants. (line 21) 47337* CONST0_RTX: Constants. (line 160) 47338* const1_rtx: Constants. (line 21) 47339* CONST1_RTX: Constants. (line 160) 47340* const2_rtx: Constants. (line 21) 47341* CONST2_RTX: Constants. (line 160) 47342* constant attributes: Constant Attributes. 47343 (line 6) 47344* constant definitions: Constant Definitions. 47345 (line 6) 47346* constants in constraints: Simple Constraints. (line 68) 47347* CONSTANT_ADDRESS_P: Addressing Modes. (line 28) 47348* CONSTANT_ALIGNMENT: Storage Layout. (line 241) 47349* CONSTANT_P: Addressing Modes. (line 35) 47350* CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 47351* CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 68) 47352* constm1_rtx: Constants. (line 21) 47353* constraint modifier characters: Modifiers. (line 6) 47354* constraint, matching: Simple Constraints. (line 140) 47355* constraints: Constraints. (line 6) 47356* constraints, defining: Define Constraints. (line 6) 47357* constraints, machine specific: Machine Constraints. 47358 (line 6) 47359* constraints, testing: C Constraint Interface. 47360 (line 6) 47361* constraint_num: C Constraint Interface. 47362 (line 30) 47363* constraint_satisfied_p: C Constraint Interface. 47364 (line 42) 47365* CONSTRUCTOR: Unary and Binary Expressions. 47366 (line 6) 47367* constructors, automatic calls: Collect2. (line 15) 47368* constructors, output of: Initialization. (line 6) 47369* CONST_DECL: Declarations. (line 6) 47370* const_double: Constants. (line 37) 47371* const_double, RTL sharing: Sharing. (line 29) 47372* CONST_DOUBLE_LOW: Constants. (line 54) 47373* const_double_operand: Machine-Independent Predicates. 47374 (line 20) 47375* const_fixed: Constants. (line 93) 47376* const_int: Constants. (line 8) 47377* const_int and attribute tests: Expressions. (line 47) 47378* const_int and attributes: Expressions. (line 10) 47379* const_int, RTL sharing: Sharing. (line 23) 47380* const_int_operand: Machine-Independent Predicates. 47381 (line 15) 47382* const_string: Constants. (line 112) 47383* const_string and attributes: Expressions. (line 20) 47384* const_true_rtx: Constants. (line 31) 47385* const_vector: Constants. (line 100) 47386* const_vector, RTL sharing: Sharing. (line 32) 47387* CONST_WIDE_INT: Constants. (line 67) 47388* CONST_WIDE_INT_ELT: Constants. (line 89) 47389* CONST_WIDE_INT_NUNITS: Constants. (line 84) 47390* CONST_WIDE_INT_VEC: Constants. (line 80) 47391* container: Containers. (line 6) 47392* CONTINUE_STMT: Statements for C++. (line 6) 47393* contributors: Contributors. (line 6) 47394* controlling register usage: Register Basics. (line 73) 47395* controlling the compilation driver: Driver. (line 6) 47396* conventions, run-time: Interface. (line 6) 47397* conversions: Conversions. (line 6) 47398* CONVERT_EXPR: Unary and Binary Expressions. 47399 (line 6) 47400* copysignM3 instruction pattern: Standard Names. (line 745) 47401* copy_rtx: Addressing Modes. (line 189) 47402* copy_rtx_if_shared: Sharing. (line 64) 47403* cosM2 instruction pattern: Standard Names. (line 611) 47404* costs of instructions: Costs. (line 6) 47405* CPLUSPLUS_CPP_SPEC: Driver. (line 50) 47406* CPP_SPEC: Driver. (line 43) 47407* CP_INTEGRAL_TYPE: Types for C++. (line 55) 47408* cp_namespace_decls: Namespaces. (line 49) 47409* CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 47410* CP_TYPE_CONST_P: Types for C++. (line 24) 47411* cp_type_quals: Types for C++. (line 6) 47412* cp_type_quals <1>: Types for C++. (line 16) 47413* CP_TYPE_RESTRICT_P: Types for C++. (line 30) 47414* CP_TYPE_VOLATILE_P: Types for C++. (line 27) 47415* CQImode: Machine Modes. (line 204) 47416* cross compilation and floating point: Floating Point. (line 6) 47417* crtl->args.pops_args: Function Entry. (line 104) 47418* crtl->args.pretend_args_size: Function Entry. (line 110) 47419* crtl->outgoing_args_size: Stack Arguments. (line 48) 47420* CRTSTUFF_T_CFLAGS: Target Fragment. (line 15) 47421* CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 19) 47422* CRT_CALL_STATIC_FUNCTION: Sections. (line 120) 47423* CSImode: Machine Modes. (line 204) 47424* cstoreMODE4 instruction pattern: Standard Names. (line 1119) 47425* CTImode: Machine Modes. (line 204) 47426* ctrapMM4 instruction pattern: Standard Names. (line 1596) 47427* ctz: Arithmetic. (line 230) 47428* ctzM2 instruction pattern: Standard Names. (line 780) 47429* CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 305) 47430* CUMULATIVE_ARGS: Register Arguments. (line 140) 47431* current_function_is_leaf: Leaf Functions. (line 50) 47432* current_function_uses_only_leaf_regs: Leaf Functions. (line 50) 47433* current_insn_predicate: Conditional Execution. 47434 (line 27) 47435* C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 136) 47436* c_register_pragma: Misc. (line 407) 47437* c_register_pragma_with_expansion: Misc. (line 409) 47438* DAmode: Machine Modes. (line 154) 47439* data bypass: Processor pipeline description. 47440 (line 105) 47441* data bypass <1>: Processor pipeline description. 47442 (line 196) 47443* data dependence delays: Processor pipeline description. 47444 (line 6) 47445* Data Dependency Analysis: Dependency analysis. 47446 (line 6) 47447* data structures: Per-Function Data. (line 6) 47448* DATA_ABI_ALIGNMENT: Storage Layout. (line 233) 47449* DATA_ALIGNMENT: Storage Layout. (line 220) 47450* DATA_SECTION_ASM_OP: Sections. (line 52) 47451* DBR_OUTPUT_SEQEND: Instruction Output. (line 133) 47452* dbr_sequence_length: Instruction Output. (line 133) 47453* DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 100) 47454* DBX_CONTIN_CHAR: DBX Options. (line 63) 47455* DBX_CONTIN_LENGTH: DBX Options. (line 53) 47456* DBX_DEBUGGING_INFO: DBX Options. (line 8) 47457* DBX_FUNCTION_FIRST: DBX Options. (line 94) 47458* DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 106) 47459* DBX_NO_XREFS: DBX Options. (line 47) 47460* DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 8) 47461* DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 33) 47462* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 47463 (line 41) 47464* DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 8) 47465* DBX_REGISTER_NUMBER: All Debuggers. (line 8) 47466* DBX_REGPARM_STABS_CODE: DBX Options. (line 84) 47467* DBX_REGPARM_STABS_LETTER: DBX Options. (line 89) 47468* DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 79) 47469* DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 70) 47470* DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 75) 47471* DBX_USE_BINCL: DBX Options. (line 112) 47472* DCmode: Machine Modes. (line 199) 47473* DDmode: Machine Modes. (line 93) 47474* De Morgan's law: Insn Canonicalizations. 47475 (line 51) 47476* dead_or_set_p: define_peephole. (line 65) 47477* DEBUGGER_ARG_OFFSET: All Debuggers. (line 36) 47478* DEBUGGER_AUTO_OFFSET: All Debuggers. (line 27) 47479* debug_expr: Debug Information. (line 22) 47480* DEBUG_EXPR_DECL: Declarations. (line 6) 47481* debug_insn: Insns. (line 236) 47482* DEBUG_SYMS_TEXT: DBX Options. (line 24) 47483* decimal float library: Decimal float library routines. 47484 (line 6) 47485* declaration: Declarations. (line 6) 47486* declarations, RTL: RTL Declarations. (line 6) 47487* DECLARE_LIBRARY_RENAMES: Library Calls. (line 8) 47488* DECL_ALIGN: Declarations. (line 6) 47489* DECL_ANTICIPATED: Functions for C++. (line 42) 47490* DECL_ARGUMENTS: Function Basics. (line 36) 47491* DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 47492* DECL_ARTIFICIAL: Working with declarations. 47493 (line 24) 47494* DECL_ARTIFICIAL <1>: Function Basics. (line 6) 47495* DECL_ARTIFICIAL <2>: Function Properties. 47496 (line 47) 47497* DECL_ASSEMBLER_NAME: Function Basics. (line 6) 47498* DECL_ASSEMBLER_NAME <1>: Function Basics. (line 19) 47499* DECL_ATTRIBUTES: Attributes. (line 21) 47500* DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 47501* DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 47502* DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 47503* DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 47504* DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 47505* DECL_CONTEXT: Namespaces. (line 31) 47506* DECL_CONV_FN_P: Functions for C++. (line 105) 47507* DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 47508* DECL_DESTRUCTOR_P: Functions for C++. (line 95) 47509* DECL_EXTERNAL: Declarations. (line 6) 47510* DECL_EXTERNAL <1>: Function Properties. 47511 (line 25) 47512* DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 47513* DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 47514* DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 47515* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 47516 (line 61) 47517* DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 47518* DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 47519 (line 55) 47520* DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 47521* DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 47522* DECL_INITIAL: Declarations. (line 6) 47523* DECL_INITIAL <1>: Function Basics. (line 51) 47524* DECL_LINKONCE_P: Functions for C++. (line 50) 47525* DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 47526* DECL_MAIN_P: Functions for C++. (line 34) 47527* DECL_NAME: Working with declarations. 47528 (line 7) 47529* DECL_NAME <1>: Function Basics. (line 6) 47530* DECL_NAME <2>: Function Basics. (line 9) 47531* DECL_NAME <3>: Namespaces. (line 20) 47532* DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 47533* DECL_NAMESPACE_STD_P: Namespaces. (line 45) 47534* DECL_NONCONVERTING_P: Functions for C++. (line 80) 47535* DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 47536* DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 47537* DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 47538* DECL_PURE_P: Function Properties. 47539 (line 40) 47540* DECL_RESULT: Function Basics. (line 41) 47541* DECL_SAVED_TREE: Function Basics. (line 44) 47542* DECL_SIZE: Declarations. (line 6) 47543* DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 47544* DECL_STMT: Statements for C++. (line 6) 47545* DECL_STMT_DECL: Statements for C++. (line 6) 47546* DECL_THUNK_P: Functions for C++. (line 116) 47547* DECL_VIRTUAL_P: Function Properties. 47548 (line 44) 47549* DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 47550* decrement_and_branch_until_zero instruction pattern: Standard Names. 47551 (line 1327) 47552* default: GTY Options. (line 88) 47553* default_file_start: File Framework. (line 8) 47554* DEFAULT_GDB_EXTENSIONS: DBX Options. (line 17) 47555* DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 34) 47556* DEFAULT_SIGNED_CHAR: Type Layout. (line 123) 47557* define_address_constraint: Define Constraints. (line 99) 47558* define_asm_attributes: Tagging Insns. (line 73) 47559* define_attr: Defining Attributes. 47560 (line 6) 47561* define_automaton: Processor pipeline description. 47562 (line 53) 47563* define_bypass: Processor pipeline description. 47564 (line 196) 47565* define_code_attr: Code Iterators. (line 6) 47566* define_code_iterator: Code Iterators. (line 6) 47567* define_cond_exec: Conditional Execution. 47568 (line 13) 47569* define_constants: Constant Definitions. 47570 (line 6) 47571* define_constraint: Define Constraints. (line 45) 47572* define_cpu_unit: Processor pipeline description. 47573 (line 68) 47574* define_c_enum: Constant Definitions. 47575 (line 49) 47576* define_delay: Delay Slots. (line 25) 47577* define_enum: Constant Definitions. 47578 (line 118) 47579* define_enum_attr: Defining Attributes. 47580 (line 83) 47581* define_enum_attr <1>: Constant Definitions. 47582 (line 136) 47583* define_expand: Expander Definitions. 47584 (line 11) 47585* define_insn: Patterns. (line 6) 47586* define_insn example: Example. (line 6) 47587* define_insn_and_split: Insn Splitting. (line 170) 47588* define_insn_reservation: Processor pipeline description. 47589 (line 105) 47590* define_int_attr: Int Iterators. (line 6) 47591* define_int_iterator: Int Iterators. (line 6) 47592* define_memory_constraint: Define Constraints. (line 80) 47593* define_mode_attr: Substitutions. (line 6) 47594* define_mode_iterator: Defining Mode Iterators. 47595 (line 6) 47596* define_peephole: define_peephole. (line 6) 47597* define_peephole2: define_peephole2. (line 6) 47598* define_predicate: Defining Predicates. 47599 (line 6) 47600* define_query_cpu_unit: Processor pipeline description. 47601 (line 90) 47602* define_register_constraint: Define Constraints. (line 26) 47603* define_reservation: Processor pipeline description. 47604 (line 185) 47605* define_special_predicate: Defining Predicates. 47606 (line 6) 47607* define_split: Insn Splitting. (line 32) 47608* define_subst: Define Subst. (line 6) 47609* define_subst <1>: Define Subst Example. 47610 (line 6) 47611* define_subst <2>: Define Subst Pattern Matching. 47612 (line 6) 47613* define_subst <3>: Define Subst Output Template. 47614 (line 6) 47615* define_subst <4>: Define Subst. (line 14) 47616* define_subst <5>: Subst Iterators. (line 6) 47617* define_subst_attr: Subst Iterators. (line 6) 47618* define_subst_attr <1>: Subst Iterators. (line 26) 47619* defining attributes and their values: Defining Attributes. 47620 (line 6) 47621* defining constraints: Define Constraints. (line 6) 47622* defining jump instruction patterns: Jump Patterns. (line 6) 47623* defining looping instruction patterns: Looping Patterns. (line 6) 47624* defining peephole optimizers: Peephole Definitions. 47625 (line 6) 47626* defining predicates: Defining Predicates. 47627 (line 6) 47628* defining RTL sequences for code generation: Expander Definitions. 47629 (line 6) 47630* delay slots, defining: Delay Slots. (line 6) 47631* deletable: GTY Options. (line 132) 47632* DELETE_IF_ORDINARY: Filesystem. (line 79) 47633* Dependent Patterns: Dependent Patterns. (line 6) 47634* desc: GTY Options. (line 88) 47635* destructors, output of: Initialization. (line 6) 47636* deterministic finite state automaton: Processor pipeline description. 47637 (line 6) 47638* deterministic finite state automaton <1>: Processor pipeline description. 47639 (line 304) 47640* DFmode: Machine Modes. (line 76) 47641* digits in constraint: Simple Constraints. (line 128) 47642* DImode: Machine Modes. (line 45) 47643* directory options .md: Including Patterns. (line 47) 47644* DIR_SEPARATOR: Filesystem. (line 18) 47645* DIR_SEPARATOR_2: Filesystem. (line 19) 47646* disabling certain registers: Register Basics. (line 73) 47647* dispatch table: Dispatch Tables. (line 8) 47648* div: Arithmetic. (line 116) 47649* div and attributes: Expressions. (line 83) 47650* division: Arithmetic. (line 116) 47651* division <1>: Arithmetic. (line 130) 47652* division <2>: Arithmetic. (line 136) 47653* divM3 instruction pattern: Standard Names. (line 266) 47654* divmodM4 instruction pattern: Standard Names. (line 533) 47655* dollar sign: Multi-Alternative. (line 56) 47656* DOLLARS_IN_IDENTIFIERS: Misc. (line 452) 47657* doloop_begin instruction pattern: Standard Names. (line 1349) 47658* doloop_end instruction pattern: Standard Names. (line 1337) 47659* DONE: Expander Definitions. 47660 (line 77) 47661* DONT_USE_BUILTIN_SETJMP: Exception Region Output. 47662 (line 77) 47663* DOUBLE_TYPE_SIZE: Type Layout. (line 52) 47664* DO_BODY: Statements for C++. (line 6) 47665* DO_COND: Statements for C++. (line 6) 47666* DO_STMT: Statements for C++. (line 6) 47667* DQmode: Machine Modes. (line 118) 47668* driver: Driver. (line 6) 47669* DRIVER_SELF_SPECS: Driver. (line 8) 47670* dump examples: Dump examples. (line 6) 47671* dump setup: Dump setup. (line 6) 47672* dump types: Dump types. (line 6) 47673* dump verbosity: Dump output verbosity. 47674 (line 6) 47675* DUMPFILE_FORMAT: Filesystem. (line 67) 47676* dump_basic_block: Dump types. (line 29) 47677* dump_generic_expr: Dump types. (line 31) 47678* dump_gimple_stmt: Dump types. (line 33) 47679* dump_printf: Dump types. (line 6) 47680* DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 49) 47681* DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 12) 47682* DWARF2_FRAME_INFO: SDB and DWARF. (line 29) 47683* DWARF2_FRAME_REG_OUT: Frame Registers. (line 151) 47684* DWARF2_UNWIND_INFO: Exception Region Output. 47685 (line 38) 47686* DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 152) 47687* DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 47688 (line 89) 47689* DWARF_FRAME_REGISTERS: Frame Registers. (line 109) 47690* DWARF_FRAME_REGNUM: Frame Registers. (line 143) 47691* DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 134) 47692* DWARF_ZERO_REG: Frame Layout. (line 163) 47693* DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 90) 47694* E in constraint: Simple Constraints. (line 87) 47695* earlyclobber operand: Modifiers. (line 25) 47696* edge: Edges. (line 6) 47697* edge in the flow graph: Edges. (line 6) 47698* edge iterators: Edges. (line 15) 47699* edge splitting: Maintaining the CFG. 47700 (line 105) 47701* EDGE_ABNORMAL: Edges. (line 127) 47702* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 47703* EDGE_ABNORMAL, EDGE_EH: Edges. (line 95) 47704* EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 121) 47705* EDGE_FALLTHRU, force_nonfallthru: Edges. (line 85) 47706* EDOM, implicit usage: Library Calls. (line 59) 47707* EH_FRAME_IN_DATA_SECTION: Exception Region Output. 47708 (line 19) 47709* EH_FRAME_SECTION_NAME: Exception Region Output. 47710 (line 9) 47711* eh_return instruction pattern: Standard Names. (line 1530) 47712* EH_RETURN_DATA_REGNO: Exception Handling. (line 6) 47713* EH_RETURN_HANDLER_RTX: Exception Handling. (line 38) 47714* EH_RETURN_STACKADJ_RTX: Exception Handling. (line 21) 47715* EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 47716 (line 28) 47717* EH_USES: Function Entry. (line 155) 47718* ei_edge: Edges. (line 43) 47719* ei_end_p: Edges. (line 27) 47720* ei_last: Edges. (line 23) 47721* ei_next: Edges. (line 35) 47722* ei_one_before_end_p: Edges. (line 31) 47723* ei_prev: Edges. (line 39) 47724* ei_safe_safe: Edges. (line 47) 47725* ei_start: Edges. (line 19) 47726* ELIMINABLE_REGS: Elimination. (line 46) 47727* ELSE_CLAUSE: Statements for C++. (line 6) 47728* Embedded C: Fixed-point fractional library routines. 47729 (line 6) 47730* Empty Statements: Empty Statements. (line 6) 47731* EMPTY_CLASS_EXPR: Statements for C++. (line 6) 47732* EMPTY_FIELD_BOUNDARY: Storage Layout. (line 311) 47733* Emulated TLS: Emulated TLS. (line 6) 47734* enabled: Disable Insn Alternatives. 47735 (line 6) 47736* ENDFILE_SPEC: Driver. (line 155) 47737* endianness: Portability. (line 20) 47738* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 10) 47739* enum reg_class: Register Classes. (line 70) 47740* ENUMERAL_TYPE: Types. (line 6) 47741* enumerations: Constant Definitions. 47742 (line 49) 47743* epilogue: Function Entry. (line 6) 47744* epilogue instruction pattern: Standard Names. (line 1568) 47745* EPILOGUE_USES: Function Entry. (line 149) 47746* eq: Comparisons. (line 52) 47747* eq and attributes: Expressions. (line 83) 47748* equal: Comparisons. (line 52) 47749* eq_attr: Expressions. (line 104) 47750* EQ_EXPR: Unary and Binary Expressions. 47751 (line 6) 47752* errno, implicit usage: Library Calls. (line 71) 47753* EXACT_DIV_EXPR: Unary and Binary Expressions. 47754 (line 6) 47755* examining SSA_NAMEs: SSA. (line 214) 47756* exception handling: Edges. (line 95) 47757* exception handling <1>: Exception Handling. (line 6) 47758* exception_receiver instruction pattern: Standard Names. (line 1495) 47759* exclamation point: Multi-Alternative. (line 47) 47760* exclusion_set: Processor pipeline description. 47761 (line 223) 47762* exclusive-or, bitwise: Arithmetic. (line 168) 47763* EXIT_EXPR: Unary and Binary Expressions. 47764 (line 6) 47765* EXIT_IGNORE_STACK: Function Entry. (line 137) 47766* expander definitions: Expander Definitions. 47767 (line 6) 47768* expM2 instruction pattern: Standard Names. (line 640) 47769* expression: Expression trees. (line 6) 47770* expression codes: RTL Objects. (line 47) 47771* EXPR_FILENAME: Working with declarations. 47772 (line 14) 47773* EXPR_LINENO: Working with declarations. 47774 (line 20) 47775* expr_list: Insns. (line 540) 47776* EXPR_STMT: Statements for C++. (line 6) 47777* EXPR_STMT_EXPR: Statements for C++. (line 6) 47778* extendMN2 instruction pattern: Standard Names. (line 970) 47779* extensible constraints: Simple Constraints. (line 171) 47780* EXTRA_SPECS: Driver. (line 182) 47781* extv instruction pattern: Standard Names. (line 1061) 47782* extvM instruction pattern: Standard Names. (line 1006) 47783* extvmisalignM instruction pattern: Standard Names. (line 1016) 47784* extzv instruction pattern: Standard Names. (line 1079) 47785* extzvM instruction pattern: Standard Names. (line 1030) 47786* extzvmisalignM instruction pattern: Standard Names. (line 1033) 47787* F in constraint: Simple Constraints. (line 92) 47788* FAIL: Expander Definitions. 47789 (line 83) 47790* fall-thru: Edges. (line 68) 47791* FATAL_EXIT_CODE: Host Misc. (line 6) 47792* FDL, GNU Free Documentation License: GNU Free Documentation License. 47793 (line 6) 47794* features, optional, in system conventions: Run-time Target. 47795 (line 59) 47796* ffs: Arithmetic. (line 210) 47797* ffsM2 instruction pattern: Standard Names. (line 754) 47798* FIELD_DECL: Declarations. (line 6) 47799* files and passes of the compiler: Passes. (line 6) 47800* files, generated: Files. (line 6) 47801* file_end_indicate_exec_stack: File Framework. (line 39) 47802* final_absence_set: Processor pipeline description. 47803 (line 223) 47804* FINAL_PRESCAN_INSN: Instruction Output. (line 60) 47805* final_presence_set: Processor pipeline description. 47806 (line 223) 47807* final_sequence: Instruction Output. (line 144) 47808* FIND_BASE_TERM: Addressing Modes. (line 117) 47809* finite state automaton minimization: Processor pipeline description. 47810 (line 304) 47811* FINI_ARRAY_SECTION_ASM_OP: Sections. (line 113) 47812* FINI_SECTION_ASM_OP: Sections. (line 98) 47813* FIRST_PARM_OFFSET: Frame Layout. (line 65) 47814* FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65) 47815* FIRST_PSEUDO_REGISTER: Register Basics. (line 8) 47816* FIRST_STACK_REG: Stack Registers. (line 26) 47817* FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 47818* fix: Conversions. (line 66) 47819* fixed register: Register Basics. (line 15) 47820* fixed-point fractional library: Fixed-point fractional library routines. 47821 (line 6) 47822* FIXED_CONVERT_EXPR: Unary and Binary Expressions. 47823 (line 6) 47824* FIXED_CST: Constant expressions. 47825 (line 6) 47826* FIXED_POINT_TYPE: Types. (line 6) 47827* FIXED_REGISTERS: Register Basics. (line 14) 47828* fixed_regs: Register Basics. (line 59) 47829* fixMN2 instruction pattern: Standard Names. (line 937) 47830* fixunsMN2 instruction pattern: Standard Names. (line 946) 47831* fixuns_truncMN2 instruction pattern: Standard Names. (line 961) 47832* fix_truncMN2 instruction pattern: Standard Names. (line 957) 47833* FIX_TRUNC_EXPR: Unary and Binary Expressions. 47834 (line 6) 47835* flags in RTL expression: Flags. (line 6) 47836* float: Conversions. (line 58) 47837* floating point and cross compilation: Floating Point. (line 6) 47838* floatMN2 instruction pattern: Standard Names. (line 929) 47839* floatunsMN2 instruction pattern: Standard Names. (line 933) 47840* FLOAT_EXPR: Unary and Binary Expressions. 47841 (line 6) 47842* float_extend: Conversions. (line 33) 47843* FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 32) 47844* FLOAT_STORE_FLAG_VALUE: Misc. (line 286) 47845* float_truncate: Conversions. (line 53) 47846* FLOAT_TYPE_SIZE: Type Layout. (line 48) 47847* FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 41) 47848* FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory. 47849 (line 224) 47850* floorM2 instruction pattern: Standard Names. (line 675) 47851* FLOOR_DIV_EXPR: Unary and Binary Expressions. 47852 (line 6) 47853* FLOOR_MOD_EXPR: Unary and Binary Expressions. 47854 (line 6) 47855* flow-insensitive alias analysis: Alias analysis. (line 6) 47856* flow-sensitive alias analysis: Alias analysis. (line 6) 47857* fma: Arithmetic. (line 112) 47858* fmaM4 instruction pattern: Standard Names. (line 300) 47859* fmodM3 instruction pattern: Standard Names. (line 593) 47860* fmsM4 instruction pattern: Standard Names. (line 307) 47861* fnmaM4 instruction pattern: Standard Names. (line 313) 47862* fnmsM4 instruction pattern: Standard Names. (line 319) 47863* FORCE_CODE_SECTION_ALIGN: Sections. (line 144) 47864* force_reg: Standard Names. (line 36) 47865* FOR_BODY: Statements for C++. (line 6) 47866* FOR_COND: Statements for C++. (line 6) 47867* FOR_EXPR: Statements for C++. (line 6) 47868* FOR_INIT_STMT: Statements for C++. (line 6) 47869* FOR_STMT: Statements for C++. (line 6) 47870* for_user: GTY Options. (line 82) 47871* fractional types: Fixed-point fractional library routines. 47872 (line 6) 47873* fractMN2 instruction pattern: Standard Names. (line 979) 47874* fractunsMN2 instruction pattern: Standard Names. (line 994) 47875* fract_convert: Conversions. (line 82) 47876* FRACT_TYPE_SIZE: Type Layout. (line 67) 47877* frame layout: Frame Layout. (line 6) 47878* FRAME_ADDR_RTX: Frame Layout. (line 114) 47879* FRAME_GROWS_DOWNWARD: Frame Layout. (line 30) 47880* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory. 47881 (line 69) 47882* FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 212) 47883* frame_pointer_needed: Function Entry. (line 34) 47884* FRAME_POINTER_REGNUM: Frame Registers. (line 13) 47885* FRAME_POINTER_REGNUM and virtual registers: Regs and Memory. 47886 (line 74) 47887* frame_pointer_rtx: Frame Registers. (line 104) 47888* frame_related: Flags. (line 229) 47889* frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags. 47890 (line 107) 47891* frame_related, in mem: Flags. (line 85) 47892* frame_related, in reg: Flags. (line 94) 47893* frame_related, in symbol_ref: Flags. (line 165) 47894* frequency, count, BB_FREQ_BASE: Profile information. 47895 (line 30) 47896* ftruncM2 instruction pattern: Standard Names. (line 952) 47897* function: Functions. (line 6) 47898* function <1>: Functions for C++. (line 6) 47899* function call conventions: Interface. (line 6) 47900* function entry and exit: Function Entry. (line 6) 47901* function entry point, alternate function entry point: Edges. 47902 (line 180) 47903* function properties: Function Properties. 47904 (line 6) 47905* function-call insns: Calls. (line 6) 47906* functions, leaf: Leaf Functions. (line 6) 47907* FUNCTION_ARG_OFFSET: Register Arguments. (line 210) 47908* FUNCTION_ARG_PADDING: Register Arguments. (line 217) 47909* FUNCTION_ARG_REGNO_P: Register Arguments. (line 265) 47910* FUNCTION_BOUNDARY: Storage Layout. (line 159) 47911* FUNCTION_DECL: Functions. (line 6) 47912* FUNCTION_DECL <1>: Functions for C++. (line 6) 47913* FUNCTION_MODE: Misc. (line 341) 47914* FUNCTION_PROFILER: Profiling. (line 8) 47915* FUNCTION_TYPE: Types. (line 6) 47916* FUNCTION_VALUE: Scalar Return. (line 52) 47917* FUNCTION_VALUE_REGNO_P: Scalar Return. (line 78) 47918* fundamental type: Types. (line 6) 47919* G in constraint: Simple Constraints. (line 96) 47920* g in constraint: Simple Constraints. (line 118) 47921* garbage collector, invocation: Invoking the garbage collector. 47922 (line 6) 47923* garbage collector, troubleshooting: Troubleshooting. (line 6) 47924* GCC and portability: Portability. (line 6) 47925* GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 47926* gcov_type: Profile information. 47927 (line 41) 47928* ge: Comparisons. (line 72) 47929* ge and attributes: Expressions. (line 83) 47930* gencodes: RTL passes. (line 18) 47931* general_operand: Machine-Independent Predicates. 47932 (line 104) 47933* GENERAL_REGS: Register Classes. (line 22) 47934* generated files: Files. (line 6) 47935* generating assembler output: Output Statement. (line 6) 47936* generating insns: RTL Template. (line 6) 47937* GENERIC: Parsing pass. (line 6) 47938* GENERIC <1>: GENERIC. (line 6) 47939* generic predicates: Machine-Independent Predicates. 47940 (line 6) 47941* genflags: RTL passes. (line 18) 47942* GEN_ERRNO_RTX: Library Calls. (line 71) 47943* get_attr: Expressions. (line 99) 47944* get_attr_length: Insn Lengths. (line 52) 47945* GET_CLASS_NARROWEST_MODE: Machine Modes. (line 344) 47946* GET_CODE: RTL Objects. (line 47) 47947* get_frame_size: Elimination. (line 34) 47948* get_insns: Insns. (line 34) 47949* get_last_insn: Insns. (line 34) 47950* GET_MODE: Machine Modes. (line 291) 47951* GET_MODE_ALIGNMENT: Machine Modes. (line 331) 47952* GET_MODE_BITSIZE: Machine Modes. (line 315) 47953* GET_MODE_CLASS: Machine Modes. (line 305) 47954* GET_MODE_FBIT: Machine Modes. (line 322) 47955* GET_MODE_IBIT: Machine Modes. (line 318) 47956* GET_MODE_MASK: Machine Modes. (line 326) 47957* GET_MODE_NAME: Machine Modes. (line 302) 47958* GET_MODE_NUNITS: Machine Modes. (line 340) 47959* GET_MODE_SIZE: Machine Modes. (line 312) 47960* GET_MODE_UNIT_SIZE: Machine Modes. (line 334) 47961* GET_MODE_WIDER_MODE: Machine Modes. (line 308) 47962* GET_RTX_CLASS: RTL Classes. (line 6) 47963* GET_RTX_FORMAT: RTL Classes. (line 131) 47964* GET_RTX_LENGTH: RTL Classes. (line 128) 47965* get_thread_pointerMODE instruction pattern: Standard Names. 47966 (line 1905) 47967* geu: Comparisons. (line 72) 47968* geu and attributes: Expressions. (line 83) 47969* GE_EXPR: Unary and Binary Expressions. 47970 (line 6) 47971* GGC: Type Information. (line 6) 47972* ggc_collect: Invoking the garbage collector. 47973 (line 6) 47974* GIMPLE: Parsing pass. (line 13) 47975* GIMPLE <1>: Gimplification pass. 47976 (line 6) 47977* GIMPLE <2>: GIMPLE. (line 6) 47978* GIMPLE API: GIMPLE API. (line 6) 47979* GIMPLE class hierarchy: Class hierarchy of GIMPLE statements. 47980 (line 6) 47981* GIMPLE Exception Handling: GIMPLE Exception Handling. 47982 (line 6) 47983* GIMPLE instruction set: GIMPLE instruction set. 47984 (line 6) 47985* GIMPLE sequences: GIMPLE sequences. (line 6) 47986* GIMPLE statement iterators: Basic Blocks. (line 78) 47987* GIMPLE statement iterators <1>: Maintaining the CFG. 47988 (line 33) 47989* gimple_addresses_taken: Manipulating GIMPLE statements. 47990 (line 89) 47991* GIMPLE_ASM: GIMPLE_ASM. (line 6) 47992* gimple_asm_clobber_op: GIMPLE_ASM. (line 39) 47993* gimple_asm_input_op: GIMPLE_ASM. (line 23) 47994* gimple_asm_nclobbers: GIMPLE_ASM. (line 20) 47995* gimple_asm_ninputs: GIMPLE_ASM. (line 14) 47996* gimple_asm_noutputs: GIMPLE_ASM. (line 17) 47997* gimple_asm_output_op: GIMPLE_ASM. (line 31) 47998* gimple_asm_set_clobber_op: GIMPLE_ASM. (line 43) 47999* gimple_asm_set_input_op: GIMPLE_ASM. (line 27) 48000* gimple_asm_set_output_op: GIMPLE_ASM. (line 35) 48001* gimple_asm_set_volatile: GIMPLE_ASM. (line 54) 48002* gimple_asm_string: GIMPLE_ASM. (line 47) 48003* gimple_asm_volatile_p: GIMPLE_ASM. (line 51) 48004* GIMPLE_ASSIGN: GIMPLE_ASSIGN. (line 6) 48005* gimple_assign_cast_p: Logical Operators. (line 158) 48006* gimple_assign_cast_p <1>: GIMPLE_ASSIGN. (line 104) 48007* gimple_assign_lhs: GIMPLE_ASSIGN. (line 62) 48008* gimple_assign_lhs_ptr: GIMPLE_ASSIGN. (line 65) 48009* gimple_assign_rhs1: GIMPLE_ASSIGN. (line 68) 48010* gimple_assign_rhs1_ptr: GIMPLE_ASSIGN. (line 71) 48011* gimple_assign_rhs2: GIMPLE_ASSIGN. (line 75) 48012* gimple_assign_rhs2_ptr: GIMPLE_ASSIGN. (line 78) 48013* gimple_assign_rhs3: GIMPLE_ASSIGN. (line 82) 48014* gimple_assign_rhs3_ptr: GIMPLE_ASSIGN. (line 85) 48015* gimple_assign_rhs_class: GIMPLE_ASSIGN. (line 56) 48016* gimple_assign_rhs_code: GIMPLE_ASSIGN. (line 52) 48017* gimple_assign_set_lhs: GIMPLE_ASSIGN. (line 89) 48018* gimple_assign_set_rhs1: GIMPLE_ASSIGN. (line 92) 48019* gimple_assign_set_rhs2: GIMPLE_ASSIGN. (line 96) 48020* gimple_assign_set_rhs3: GIMPLE_ASSIGN. (line 100) 48021* gimple_bb: Manipulating GIMPLE statements. 48022 (line 17) 48023* GIMPLE_BIND: GIMPLE_BIND. (line 6) 48024* gimple_bind_add_seq: GIMPLE_BIND. (line 34) 48025* gimple_bind_add_stmt: GIMPLE_BIND. (line 31) 48026* gimple_bind_append_vars: GIMPLE_BIND. (line 18) 48027* gimple_bind_block: GIMPLE_BIND. (line 39) 48028* gimple_bind_body: GIMPLE_BIND. (line 22) 48029* gimple_bind_set_block: GIMPLE_BIND. (line 44) 48030* gimple_bind_set_body: GIMPLE_BIND. (line 26) 48031* gimple_bind_set_vars: GIMPLE_BIND. (line 14) 48032* gimple_bind_vars: GIMPLE_BIND. (line 11) 48033* gimple_block: Manipulating GIMPLE statements. 48034 (line 20) 48035* gimple_build: GIMPLE API. (line 34) 48036* gimple_build <1>: GIMPLE API. (line 36) 48037* gimple_build <2>: GIMPLE API. (line 38) 48038* gimple_build <3>: GIMPLE API. (line 41) 48039* gimple_build <4>: GIMPLE API. (line 44) 48040* gimple_build_nop: GIMPLE_NOP. (line 6) 48041* gimple_build_omp_master: GIMPLE_OMP_MASTER. (line 6) 48042* gimple_build_omp_ordered: GIMPLE_OMP_ORDERED. (line 6) 48043* gimple_build_omp_return: GIMPLE_OMP_RETURN. (line 6) 48044* gimple_build_omp_section: GIMPLE_OMP_SECTION. (line 6) 48045* gimple_build_omp_sections_switch: GIMPLE_OMP_SECTIONS. 48046 (line 13) 48047* gimple_build_wce: GIMPLE_WITH_CLEANUP_EXPR. 48048 (line 6) 48049* GIMPLE_CALL: GIMPLE_CALL. (line 6) 48050* gimple_call_arg: GIMPLE_CALL. (line 65) 48051* gimple_call_arg_ptr: GIMPLE_CALL. (line 69) 48052* gimple_call_chain: GIMPLE_CALL. (line 56) 48053* gimple_call_copy_skip_args: GIMPLE_CALL. (line 90) 48054* gimple_call_fn: GIMPLE_CALL. (line 37) 48055* gimple_call_fndecl: GIMPLE_CALL. (line 45) 48056* gimple_call_lhs: GIMPLE_CALL. (line 28) 48057* gimple_call_lhs_ptr: GIMPLE_CALL. (line 31) 48058* gimple_call_noreturn_p: GIMPLE_CALL. (line 87) 48059* gimple_call_num_args: GIMPLE_CALL. (line 62) 48060* gimple_call_return_type: GIMPLE_CALL. (line 53) 48061* gimple_call_set_arg: GIMPLE_CALL. (line 74) 48062* gimple_call_set_chain: GIMPLE_CALL. (line 59) 48063* gimple_call_set_fn: GIMPLE_CALL. (line 41) 48064* gimple_call_set_fndecl: GIMPLE_CALL. (line 50) 48065* gimple_call_set_lhs: GIMPLE_CALL. (line 34) 48066* gimple_call_set_tail: GIMPLE_CALL. (line 79) 48067* gimple_call_tail_p: GIMPLE_CALL. (line 84) 48068* GIMPLE_CATCH: GIMPLE_CATCH. (line 6) 48069* gimple_catch_handler: GIMPLE_CATCH. (line 19) 48070* gimple_catch_set_handler: GIMPLE_CATCH. (line 26) 48071* gimple_catch_set_types: GIMPLE_CATCH. (line 23) 48072* gimple_catch_types: GIMPLE_CATCH. (line 12) 48073* gimple_catch_types_ptr: GIMPLE_CATCH. (line 15) 48074* gimple_code: Manipulating GIMPLE statements. 48075 (line 14) 48076* GIMPLE_COND: GIMPLE_COND. (line 6) 48077* gimple_cond_code: GIMPLE_COND. (line 20) 48078* gimple_cond_false_label: GIMPLE_COND. (line 59) 48079* gimple_cond_lhs: GIMPLE_COND. (line 29) 48080* gimple_cond_make_false: GIMPLE_COND. (line 63) 48081* gimple_cond_make_true: GIMPLE_COND. (line 66) 48082* gimple_cond_rhs: GIMPLE_COND. (line 37) 48083* gimple_cond_set_code: GIMPLE_COND. (line 24) 48084* gimple_cond_set_false_label: GIMPLE_COND. (line 54) 48085* gimple_cond_set_lhs: GIMPLE_COND. (line 33) 48086* gimple_cond_set_rhs: GIMPLE_COND. (line 41) 48087* gimple_cond_set_true_label: GIMPLE_COND. (line 49) 48088* gimple_cond_true_label: GIMPLE_COND. (line 45) 48089* gimple_convert: GIMPLE API. (line 47) 48090* gimple_copy: Manipulating GIMPLE statements. 48091 (line 146) 48092* GIMPLE_DEBUG: GIMPLE_DEBUG. (line 6) 48093* GIMPLE_DEBUG_BIND: GIMPLE_DEBUG. (line 6) 48094* gimple_debug_bind_get_value: GIMPLE_DEBUG. (line 46) 48095* gimple_debug_bind_get_value_ptr: GIMPLE_DEBUG. (line 50) 48096* gimple_debug_bind_get_var: GIMPLE_DEBUG. (line 43) 48097* gimple_debug_bind_has_value_p: GIMPLE_DEBUG. (line 68) 48098* gimple_debug_bind_p: Logical Operators. (line 162) 48099* gimple_debug_bind_reset_value: GIMPLE_DEBUG. (line 64) 48100* gimple_debug_bind_set_value: GIMPLE_DEBUG. (line 59) 48101* gimple_debug_bind_set_var: GIMPLE_DEBUG. (line 55) 48102* gimple_def_ops: Manipulating GIMPLE statements. 48103 (line 93) 48104* GIMPLE_EH_FILTER: GIMPLE_EH_FILTER. (line 6) 48105* gimple_eh_filter_failure: GIMPLE_EH_FILTER. (line 18) 48106* gimple_eh_filter_set_failure: GIMPLE_EH_FILTER. (line 27) 48107* gimple_eh_filter_set_types: GIMPLE_EH_FILTER. (line 22) 48108* gimple_eh_filter_types: GIMPLE_EH_FILTER. (line 11) 48109* gimple_eh_filter_types_ptr: GIMPLE_EH_FILTER. (line 14) 48110* gimple_eh_must_not_throw_fndecl: GIMPLE_EH_FILTER. (line 32) 48111* gimple_eh_must_not_throw_set_fndecl: GIMPLE_EH_FILTER. (line 36) 48112* gimple_expr_code: Manipulating GIMPLE statements. 48113 (line 30) 48114* gimple_expr_type: Manipulating GIMPLE statements. 48115 (line 23) 48116* GIMPLE_GOTO: GIMPLE_GOTO. (line 6) 48117* gimple_goto_dest: GIMPLE_GOTO. (line 9) 48118* gimple_goto_set_dest: GIMPLE_GOTO. (line 12) 48119* gimple_has_mem_ops: Manipulating GIMPLE statements. 48120 (line 71) 48121* gimple_has_ops: Manipulating GIMPLE statements. 48122 (line 68) 48123* gimple_has_volatile_ops: Manipulating GIMPLE statements. 48124 (line 133) 48125* GIMPLE_LABEL: GIMPLE_LABEL. (line 6) 48126* gimple_label_label: GIMPLE_LABEL. (line 10) 48127* gimple_label_set_label: GIMPLE_LABEL. (line 13) 48128* gimple_loaded_syms: Manipulating GIMPLE statements. 48129 (line 121) 48130* gimple_locus: Manipulating GIMPLE statements. 48131 (line 41) 48132* gimple_locus_empty_p: Manipulating GIMPLE statements. 48133 (line 47) 48134* gimple_modified_p: Manipulating GIMPLE statements. 48135 (line 129) 48136* GIMPLE_NOP: GIMPLE_NOP. (line 6) 48137* gimple_nop_p: GIMPLE_NOP. (line 9) 48138* gimple_no_warning_p: Manipulating GIMPLE statements. 48139 (line 50) 48140* gimple_num_ops: Logical Operators. (line 76) 48141* gimple_num_ops <1>: Manipulating GIMPLE statements. 48142 (line 74) 48143* GIMPLE_OMP_ATOMIC_LOAD: GIMPLE_OMP_ATOMIC_LOAD. 48144 (line 6) 48145* gimple_omp_atomic_load_lhs: GIMPLE_OMP_ATOMIC_LOAD. 48146 (line 16) 48147* gimple_omp_atomic_load_rhs: GIMPLE_OMP_ATOMIC_LOAD. 48148 (line 24) 48149* gimple_omp_atomic_load_set_lhs: GIMPLE_OMP_ATOMIC_LOAD. 48150 (line 12) 48151* gimple_omp_atomic_load_set_rhs: GIMPLE_OMP_ATOMIC_LOAD. 48152 (line 20) 48153* GIMPLE_OMP_ATOMIC_STORE: GIMPLE_OMP_ATOMIC_STORE. 48154 (line 6) 48155* gimple_omp_atomic_store_set_val: GIMPLE_OMP_ATOMIC_STORE. 48156 (line 11) 48157* gimple_omp_atomic_store_val: GIMPLE_OMP_ATOMIC_STORE. 48158 (line 15) 48159* gimple_omp_body: GIMPLE_OMP_PARALLEL. 48160 (line 23) 48161* GIMPLE_OMP_CONTINUE: GIMPLE_OMP_CONTINUE. 48162 (line 6) 48163* gimple_omp_continue_control_def: GIMPLE_OMP_CONTINUE. 48164 (line 12) 48165* gimple_omp_continue_control_def_ptr: GIMPLE_OMP_CONTINUE. 48166 (line 17) 48167* gimple_omp_continue_control_use: GIMPLE_OMP_CONTINUE. 48168 (line 26) 48169* gimple_omp_continue_control_use_ptr: GIMPLE_OMP_CONTINUE. 48170 (line 31) 48171* gimple_omp_continue_set_control_def: GIMPLE_OMP_CONTINUE. 48172 (line 21) 48173* gimple_omp_continue_set_control_use: GIMPLE_OMP_CONTINUE. 48174 (line 35) 48175* GIMPLE_OMP_CRITICAL: GIMPLE_OMP_CRITICAL. 48176 (line 6) 48177* gimple_omp_critical_name: GIMPLE_OMP_CRITICAL. 48178 (line 12) 48179* gimple_omp_critical_name_ptr: GIMPLE_OMP_CRITICAL. 48180 (line 16) 48181* gimple_omp_critical_set_name: GIMPLE_OMP_CRITICAL. 48182 (line 21) 48183* GIMPLE_OMP_FOR: GIMPLE_OMP_FOR. (line 6) 48184* gimple_omp_for_clauses: GIMPLE_OMP_FOR. (line 17) 48185* gimple_omp_for_clauses_ptr: GIMPLE_OMP_FOR. (line 20) 48186* gimple_omp_for_cond: GIMPLE_OMP_FOR. (line 80) 48187* gimple_omp_for_final: GIMPLE_OMP_FOR. (line 48) 48188* gimple_omp_for_final_ptr: GIMPLE_OMP_FOR. (line 51) 48189* gimple_omp_for_incr: GIMPLE_OMP_FOR. (line 58) 48190* gimple_omp_for_incr_ptr: GIMPLE_OMP_FOR. (line 61) 48191* gimple_omp_for_index: GIMPLE_OMP_FOR. (line 28) 48192* gimple_omp_for_index_ptr: GIMPLE_OMP_FOR. (line 31) 48193* gimple_omp_for_initial: GIMPLE_OMP_FOR. (line 38) 48194* gimple_omp_for_initial_ptr: GIMPLE_OMP_FOR. (line 41) 48195* gimple_omp_for_pre_body: GIMPLE_OMP_FOR. (line 67) 48196* gimple_omp_for_set_clauses: GIMPLE_OMP_FOR. (line 23) 48197* gimple_omp_for_set_cond: GIMPLE_OMP_FOR. (line 76) 48198* gimple_omp_for_set_final: GIMPLE_OMP_FOR. (line 54) 48199* gimple_omp_for_set_incr: GIMPLE_OMP_FOR. (line 64) 48200* gimple_omp_for_set_index: GIMPLE_OMP_FOR. (line 34) 48201* gimple_omp_for_set_initial: GIMPLE_OMP_FOR. (line 44) 48202* gimple_omp_for_set_pre_body: GIMPLE_OMP_FOR. (line 71) 48203* GIMPLE_OMP_MASTER: GIMPLE_OMP_MASTER. (line 6) 48204* GIMPLE_OMP_ORDERED: GIMPLE_OMP_ORDERED. (line 6) 48205* GIMPLE_OMP_PARALLEL: GIMPLE_OMP_PARALLEL. 48206 (line 6) 48207* gimple_omp_parallel_child_fn: GIMPLE_OMP_PARALLEL. 48208 (line 42) 48209* gimple_omp_parallel_child_fn_ptr: GIMPLE_OMP_PARALLEL. 48210 (line 47) 48211* gimple_omp_parallel_clauses: GIMPLE_OMP_PARALLEL. 48212 (line 30) 48213* gimple_omp_parallel_clauses_ptr: GIMPLE_OMP_PARALLEL. 48214 (line 33) 48215* gimple_omp_parallel_combined_p: GIMPLE_OMP_PARALLEL. 48216 (line 15) 48217* gimple_omp_parallel_data_arg: GIMPLE_OMP_PARALLEL. 48218 (line 56) 48219* gimple_omp_parallel_data_arg_ptr: GIMPLE_OMP_PARALLEL. 48220 (line 61) 48221* gimple_omp_parallel_set_child_fn: GIMPLE_OMP_PARALLEL. 48222 (line 52) 48223* gimple_omp_parallel_set_clauses: GIMPLE_OMP_PARALLEL. 48224 (line 37) 48225* gimple_omp_parallel_set_combined_p: GIMPLE_OMP_PARALLEL. 48226 (line 19) 48227* gimple_omp_parallel_set_data_arg: GIMPLE_OMP_PARALLEL. 48228 (line 65) 48229* GIMPLE_OMP_RETURN: GIMPLE_OMP_RETURN. (line 6) 48230* gimple_omp_return_nowait_p: GIMPLE_OMP_RETURN. (line 13) 48231* gimple_omp_return_set_nowait: GIMPLE_OMP_RETURN. (line 10) 48232* GIMPLE_OMP_SECTION: GIMPLE_OMP_SECTION. (line 6) 48233* GIMPLE_OMP_SECTIONS: GIMPLE_OMP_SECTIONS. 48234 (line 6) 48235* gimple_omp_sections_clauses: GIMPLE_OMP_SECTIONS. 48236 (line 29) 48237* gimple_omp_sections_clauses_ptr: GIMPLE_OMP_SECTIONS. 48238 (line 32) 48239* gimple_omp_sections_control: GIMPLE_OMP_SECTIONS. 48240 (line 16) 48241* gimple_omp_sections_control_ptr: GIMPLE_OMP_SECTIONS. 48242 (line 20) 48243* gimple_omp_sections_set_clauses: GIMPLE_OMP_SECTIONS. 48244 (line 35) 48245* gimple_omp_sections_set_control: GIMPLE_OMP_SECTIONS. 48246 (line 24) 48247* gimple_omp_section_last_p: GIMPLE_OMP_SECTION. (line 11) 48248* gimple_omp_section_set_last: GIMPLE_OMP_SECTION. (line 15) 48249* gimple_omp_set_body: GIMPLE_OMP_PARALLEL. 48250 (line 26) 48251* GIMPLE_OMP_SINGLE: GIMPLE_OMP_SINGLE. (line 6) 48252* gimple_omp_single_clauses: GIMPLE_OMP_SINGLE. (line 13) 48253* gimple_omp_single_clauses_ptr: GIMPLE_OMP_SINGLE. (line 16) 48254* gimple_omp_single_set_clauses: GIMPLE_OMP_SINGLE. (line 19) 48255* gimple_op: Logical Operators. (line 79) 48256* gimple_op <1>: Manipulating GIMPLE statements. 48257 (line 80) 48258* gimple_ops: Logical Operators. (line 82) 48259* gimple_ops <1>: Manipulating GIMPLE statements. 48260 (line 77) 48261* gimple_op_ptr: Manipulating GIMPLE statements. 48262 (line 83) 48263* GIMPLE_PHI: GIMPLE_PHI. (line 6) 48264* gimple_phi_arg: GIMPLE_PHI. (line 24) 48265* gimple_phi_arg <1>: SSA. (line 62) 48266* gimple_phi_arg_def: SSA. (line 68) 48267* gimple_phi_arg_edge: SSA. (line 65) 48268* gimple_phi_capacity: GIMPLE_PHI. (line 6) 48269* gimple_phi_num_args: GIMPLE_PHI. (line 10) 48270* gimple_phi_num_args <1>: SSA. (line 58) 48271* gimple_phi_result: GIMPLE_PHI. (line 15) 48272* gimple_phi_result <1>: SSA. (line 55) 48273* gimple_phi_result_ptr: GIMPLE_PHI. (line 18) 48274* gimple_phi_set_arg: GIMPLE_PHI. (line 28) 48275* gimple_phi_set_result: GIMPLE_PHI. (line 21) 48276* gimple_plf: Manipulating GIMPLE statements. 48277 (line 64) 48278* GIMPLE_RESX: GIMPLE_RESX. (line 6) 48279* gimple_resx_region: GIMPLE_RESX. (line 12) 48280* gimple_resx_set_region: GIMPLE_RESX. (line 15) 48281* GIMPLE_RETURN: GIMPLE_RETURN. (line 6) 48282* gimple_return_retval: GIMPLE_RETURN. (line 9) 48283* gimple_return_set_retval: GIMPLE_RETURN. (line 12) 48284* gimple_seq_add_seq: GIMPLE sequences. (line 30) 48285* gimple_seq_add_stmt: GIMPLE sequences. (line 24) 48286* gimple_seq_alloc: GIMPLE sequences. (line 61) 48287* gimple_seq_copy: GIMPLE sequences. (line 65) 48288* gimple_seq_deep_copy: GIMPLE sequences. (line 36) 48289* gimple_seq_empty_p: GIMPLE sequences. (line 69) 48290* gimple_seq_first: GIMPLE sequences. (line 43) 48291* gimple_seq_init: GIMPLE sequences. (line 58) 48292* gimple_seq_last: GIMPLE sequences. (line 46) 48293* gimple_seq_reverse: GIMPLE sequences. (line 39) 48294* gimple_seq_set_first: GIMPLE sequences. (line 53) 48295* gimple_seq_set_last: GIMPLE sequences. (line 49) 48296* gimple_seq_singleton_p: GIMPLE sequences. (line 78) 48297* gimple_set_block: Manipulating GIMPLE statements. 48298 (line 38) 48299* gimple_set_def_ops: Manipulating GIMPLE statements. 48300 (line 96) 48301* gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 48302 (line 136) 48303* gimple_set_locus: Manipulating GIMPLE statements. 48304 (line 44) 48305* gimple_set_op: Manipulating GIMPLE statements. 48306 (line 86) 48307* gimple_set_plf: Manipulating GIMPLE statements. 48308 (line 60) 48309* gimple_set_use_ops: Manipulating GIMPLE statements. 48310 (line 103) 48311* gimple_set_vdef_ops: Manipulating GIMPLE statements. 48312 (line 117) 48313* gimple_set_visited: Manipulating GIMPLE statements. 48314 (line 53) 48315* gimple_set_vuse_ops: Manipulating GIMPLE statements. 48316 (line 110) 48317* gimple_simplify: GIMPLE API. (line 6) 48318* gimple_simplify <1>: GIMPLE API. (line 8) 48319* gimple_simplify <2>: GIMPLE API. (line 10) 48320* gimple_simplify <3>: GIMPLE API. (line 12) 48321* gimple_simplify <4>: GIMPLE API. (line 14) 48322* gimple_simplify <5>: GIMPLE API. (line 16) 48323* gimple_statement_base: Tuple representation. 48324 (line 14) 48325* gimple_statement_with_ops: Tuple representation. 48326 (line 96) 48327* gimple_stored_syms: Manipulating GIMPLE statements. 48328 (line 125) 48329* GIMPLE_SWITCH: GIMPLE_SWITCH. (line 6) 48330* gimple_switch_default_label: GIMPLE_SWITCH. (line 41) 48331* gimple_switch_index: GIMPLE_SWITCH. (line 24) 48332* gimple_switch_label: GIMPLE_SWITCH. (line 31) 48333* gimple_switch_num_labels: GIMPLE_SWITCH. (line 14) 48334* gimple_switch_set_default_label: GIMPLE_SWITCH. (line 45) 48335* gimple_switch_set_index: GIMPLE_SWITCH. (line 27) 48336* gimple_switch_set_label: GIMPLE_SWITCH. (line 36) 48337* gimple_switch_set_num_labels: GIMPLE_SWITCH. (line 19) 48338* GIMPLE_TRY: GIMPLE_TRY. (line 6) 48339* gimple_try_catch_is_cleanup: GIMPLE_TRY. (line 19) 48340* gimple_try_cleanup: GIMPLE_TRY. (line 26) 48341* gimple_try_eval: GIMPLE_TRY. (line 22) 48342* gimple_try_kind: GIMPLE_TRY. (line 15) 48343* gimple_try_set_catch_is_cleanup: GIMPLE_TRY. (line 30) 48344* gimple_try_set_cleanup: GIMPLE_TRY. (line 38) 48345* gimple_try_set_eval: GIMPLE_TRY. (line 34) 48346* gimple_use_ops: Manipulating GIMPLE statements. 48347 (line 100) 48348* gimple_vdef_ops: Manipulating GIMPLE statements. 48349 (line 114) 48350* gimple_visited_p: Manipulating GIMPLE statements. 48351 (line 57) 48352* gimple_vuse_ops: Manipulating GIMPLE statements. 48353 (line 107) 48354* gimple_wce_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 48355 (line 10) 48356* gimple_wce_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 48357 (line 17) 48358* gimple_wce_set_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 48359 (line 13) 48360* gimple_wce_set_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 48361 (line 20) 48362* GIMPLE_WITH_CLEANUP_EXPR: GIMPLE_WITH_CLEANUP_EXPR. 48363 (line 6) 48364* gimplification: Parsing pass. (line 13) 48365* gimplification <1>: Gimplification pass. 48366 (line 6) 48367* gimplifier: Parsing pass. (line 13) 48368* gimplify_assign: GIMPLE_ASSIGN. (line 41) 48369* gimplify_expr: Gimplification pass. 48370 (line 18) 48371* gimplify_function_tree: Gimplification pass. 48372 (line 18) 48373* GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 48374* global_regs: Register Basics. (line 59) 48375* GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 90) 48376* greater than: Comparisons. (line 60) 48377* greater than <1>: Comparisons. (line 64) 48378* greater than <2>: Comparisons. (line 72) 48379* gsi_after_labels: Sequence iterators. (line 74) 48380* gsi_bb: Sequence iterators. (line 82) 48381* gsi_commit_edge_inserts: Sequence iterators. (line 193) 48382* gsi_commit_edge_inserts <1>: Maintaining the CFG. 48383 (line 105) 48384* gsi_commit_one_edge_insert: Sequence iterators. (line 188) 48385* gsi_end_p: Sequence iterators. (line 59) 48386* gsi_end_p <1>: Maintaining the CFG. 48387 (line 48) 48388* gsi_for_stmt: Sequence iterators. (line 156) 48389* gsi_insert_after: Sequence iterators. (line 145) 48390* gsi_insert_after <1>: Maintaining the CFG. 48391 (line 60) 48392* gsi_insert_before: Sequence iterators. (line 134) 48393* gsi_insert_before <1>: Maintaining the CFG. 48394 (line 66) 48395* gsi_insert_on_edge: Sequence iterators. (line 173) 48396* gsi_insert_on_edge <1>: Maintaining the CFG. 48397 (line 105) 48398* gsi_insert_on_edge_immediate: Sequence iterators. (line 183) 48399* gsi_insert_seq_after: Sequence iterators. (line 152) 48400* gsi_insert_seq_before: Sequence iterators. (line 141) 48401* gsi_insert_seq_on_edge: Sequence iterators. (line 177) 48402* gsi_last: Sequence iterators. (line 49) 48403* gsi_last <1>: Maintaining the CFG. 48404 (line 44) 48405* gsi_last_bb: Sequence iterators. (line 55) 48406* gsi_link_after: Sequence iterators. (line 113) 48407* gsi_link_before: Sequence iterators. (line 103) 48408* gsi_link_seq_after: Sequence iterators. (line 108) 48409* gsi_link_seq_before: Sequence iterators. (line 97) 48410* gsi_move_after: Sequence iterators. (line 159) 48411* gsi_move_before: Sequence iterators. (line 164) 48412* gsi_move_to_bb_end: Sequence iterators. (line 169) 48413* gsi_next: Sequence iterators. (line 65) 48414* gsi_next <1>: Maintaining the CFG. 48415 (line 52) 48416* gsi_one_before_end_p: Sequence iterators. (line 62) 48417* gsi_prev: Sequence iterators. (line 68) 48418* gsi_prev <1>: Maintaining the CFG. 48419 (line 56) 48420* gsi_remove: Sequence iterators. (line 88) 48421* gsi_remove <1>: Maintaining the CFG. 48422 (line 72) 48423* gsi_replace: Sequence iterators. (line 128) 48424* gsi_seq: Sequence iterators. (line 85) 48425* gsi_split_seq_after: Sequence iterators. (line 118) 48426* gsi_split_seq_before: Sequence iterators. (line 123) 48427* gsi_start: Sequence iterators. (line 39) 48428* gsi_start <1>: Maintaining the CFG. 48429 (line 40) 48430* gsi_start_bb: Sequence iterators. (line 45) 48431* gsi_stmt: Sequence iterators. (line 71) 48432* gsi_stmt_ptr: Sequence iterators. (line 79) 48433* gt: Comparisons. (line 60) 48434* gt and attributes: Expressions. (line 83) 48435* gtu: Comparisons. (line 64) 48436* gtu and attributes: Expressions. (line 83) 48437* GTY: Type Information. (line 6) 48438* GT_EXPR: Unary and Binary Expressions. 48439 (line 6) 48440* H in constraint: Simple Constraints. (line 96) 48441* HAmode: Machine Modes. (line 146) 48442* HANDLER: Statements for C++. (line 6) 48443* HANDLER_BODY: Statements for C++. (line 6) 48444* HANDLER_PARMS: Statements for C++. (line 6) 48445* HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 442) 48446* hard registers: Regs and Memory. (line 9) 48447* HARD_FRAME_POINTER_IS_ARG_POINTER: Frame Registers. (line 57) 48448* HARD_FRAME_POINTER_IS_FRAME_POINTER: Frame Registers. (line 50) 48449* HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 19) 48450* HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 10) 48451* HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 52) 48452* HARD_REGNO_MODE_OK: Values in Registers. 48453 (line 57) 48454* HARD_REGNO_NREGS: Values in Registers. 48455 (line 10) 48456* HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 48457 (line 24) 48458* HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 48459 (line 42) 48460* HARD_REGNO_RENAME_OK: Values in Registers. 48461 (line 117) 48462* HAS_INIT_SECTION: Macros for Initialization. 48463 (line 18) 48464* HAS_LONG_COND_BRANCH: Misc. (line 8) 48465* HAS_LONG_UNCOND_BRANCH: Misc. (line 17) 48466* HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 48467* HAVE_POST_DECREMENT: Addressing Modes. (line 11) 48468* HAVE_POST_INCREMENT: Addressing Modes. (line 10) 48469* HAVE_POST_MODIFY_DISP: Addressing Modes. (line 17) 48470* HAVE_POST_MODIFY_REG: Addressing Modes. (line 23) 48471* HAVE_PRE_DECREMENT: Addressing Modes. (line 9) 48472* HAVE_PRE_INCREMENT: Addressing Modes. (line 8) 48473* HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 16) 48474* HAVE_PRE_MODIFY_REG: Addressing Modes. (line 22) 48475* HCmode: Machine Modes. (line 199) 48476* HFmode: Machine Modes. (line 61) 48477* high: Constants. (line 150) 48478* HImode: Machine Modes. (line 29) 48479* HImode, in insn: Insns. (line 268) 48480* HONOR_REG_ALLOC_ORDER: Allocation Order. (line 36) 48481* host configuration: Host Config. (line 6) 48482* host functions: Host Common. (line 6) 48483* host hooks: Host Common. (line 6) 48484* host makefile fragment: Host Fragment. (line 6) 48485* HOST_BIT_BUCKET: Filesystem. (line 51) 48486* HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 48487* HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 11) 48488* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 43) 48489* HOST_HOOKS_GT_PCH_GET_ADDRESS: Host Common. (line 15) 48490* HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 24) 48491* HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 48492* HOST_LONG_FORMAT: Host Misc. (line 45) 48493* HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 48494* HOST_OBJECT_SUFFIX: Filesystem. (line 40) 48495* HOST_PTR_PRINTF: Host Misc. (line 49) 48496* HOT_TEXT_SECTION_NAME: Sections. (line 42) 48497* HQmode: Machine Modes. (line 110) 48498* i in constraint: Simple Constraints. (line 68) 48499* I in constraint: Simple Constraints. (line 79) 48500* identifier: Identifiers. (line 6) 48501* IDENTIFIER_LENGTH: Identifiers. (line 22) 48502* IDENTIFIER_NODE: Identifiers. (line 6) 48503* IDENTIFIER_OPNAME_P: Identifiers. (line 27) 48504* IDENTIFIER_POINTER: Identifiers. (line 17) 48505* IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 48506* IEEE 754-2008: Decimal float library routines. 48507 (line 6) 48508* IFCVT_MACHDEP_INIT: Misc. (line 567) 48509* IFCVT_MODIFY_CANCEL: Misc. (line 561) 48510* IFCVT_MODIFY_FINAL: Misc. (line 555) 48511* IFCVT_MODIFY_INSN: Misc. (line 549) 48512* IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 541) 48513* IFCVT_MODIFY_TESTS: Misc. (line 531) 48514* IF_COND: Statements for C++. (line 6) 48515* IF_STMT: Statements for C++. (line 6) 48516* if_then_else: Comparisons. (line 80) 48517* if_then_else and attributes: Expressions. (line 32) 48518* if_then_else usage: Side Effects. (line 56) 48519* IMAGPART_EXPR: Unary and Binary Expressions. 48520 (line 6) 48521* Immediate Uses: SSA Operands. (line 258) 48522* immediate_operand: Machine-Independent Predicates. 48523 (line 10) 48524* IMMEDIATE_PREFIX: Instruction Output. (line 153) 48525* include: Including Patterns. (line 6) 48526* INCLUDE_DEFAULTS: Driver. (line 327) 48527* inclusive-or, bitwise: Arithmetic. (line 163) 48528* INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 183) 48529* INCOMING_REGNO: Register Basics. (line 86) 48530* INCOMING_REG_PARM_STACK_SPACE: Stack Arguments. (line 73) 48531* INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 139) 48532* INCOMING_STACK_BOUNDARY: Storage Layout. (line 154) 48533* INDEX_REG_CLASS: Register Classes. (line 140) 48534* indirect_jump instruction pattern: Standard Names. (line 1286) 48535* indirect_operand: Machine-Independent Predicates. 48536 (line 70) 48537* INDIRECT_REF: Storage References. (line 6) 48538* initialization routines: Initialization. (line 6) 48539* INITIAL_ELIMINATION_OFFSET: Elimination. (line 84) 48540* INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 81) 48541* INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 34) 48542* INIT_ARRAY_SECTION_ASM_OP: Sections. (line 106) 48543* INIT_CUMULATIVE_ARGS: Register Arguments. (line 161) 48544* INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 189) 48545* INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 183) 48546* INIT_ENVIRONMENT: Driver. (line 305) 48547* INIT_EXPANDERS: Per-Function Data. (line 36) 48548* INIT_EXPR: Unary and Binary Expressions. 48549 (line 6) 48550* init_machine_status: Per-Function Data. (line 42) 48551* init_one_libfunc: Library Calls. (line 15) 48552* INIT_SECTION_ASM_OP: Sections. (line 90) 48553* INIT_SECTION_ASM_OP <1>: Macros for Initialization. 48554 (line 9) 48555* inlining: Target Attributes. (line 95) 48556* insert_insn_on_edge: Maintaining the CFG. 48557 (line 105) 48558* insn: Insns. (line 63) 48559* insn and /f: Flags. (line 107) 48560* insn and /j: Flags. (line 157) 48561* insn and /s: Flags. (line 49) 48562* insn and /s <1>: Flags. (line 148) 48563* insn and /u: Flags. (line 39) 48564* insn and /v: Flags. (line 44) 48565* insn attributes: Insn Attributes. (line 6) 48566* insn canonicalization: Insn Canonicalizations. 48567 (line 6) 48568* insn includes: Including Patterns. (line 6) 48569* insn lengths, computing: Insn Lengths. (line 6) 48570* insn notes, notes: Basic Blocks. (line 52) 48571* insn splitting: Insn Splitting. (line 6) 48572* insn-attr.h: Defining Attributes. 48573 (line 34) 48574* insns: Insns. (line 6) 48575* insns, generating: RTL Template. (line 6) 48576* insns, recognizing: RTL Template. (line 6) 48577* INSN_ANNULLED_BRANCH_P: Flags. (line 39) 48578* INSN_CODE: Insns. (line 295) 48579* INSN_DELETED_P: Flags. (line 44) 48580* INSN_FROM_TARGET_P: Flags. (line 49) 48581* insn_list: Insns. (line 540) 48582* INSN_REFERENCES_ARE_DELAYED: Misc. (line 469) 48583* INSN_SETS_ARE_DELAYED: Misc. (line 458) 48584* INSN_UID: Insns. (line 23) 48585* INSN_VAR_LOCATION: Insns. (line 236) 48586* instruction attributes: Insn Attributes. (line 6) 48587* instruction latency time: Processor pipeline description. 48588 (line 6) 48589* instruction latency time <1>: Processor pipeline description. 48590 (line 105) 48591* instruction latency time <2>: Processor pipeline description. 48592 (line 196) 48593* instruction patterns: Patterns. (line 6) 48594* instruction splitting: Insn Splitting. (line 6) 48595* insv instruction pattern: Standard Names. (line 1085) 48596* insvM instruction pattern: Standard Names. (line 1037) 48597* insvmisalignM instruction pattern: Standard Names. (line 1047) 48598* int iterators in .md files: Int Iterators. (line 6) 48599* INT16_TYPE: Type Layout. (line 216) 48600* INT32_TYPE: Type Layout. (line 217) 48601* INT64_TYPE: Type Layout. (line 218) 48602* INT8_TYPE: Type Layout. (line 215) 48603* INTEGER_CST: Constant expressions. 48604 (line 6) 48605* INTEGER_TYPE: Types. (line 6) 48606* Interdependence of Patterns: Dependent Patterns. (line 6) 48607* interfacing to GCC output: Interface. (line 6) 48608* interlock delays: Processor pipeline description. 48609 (line 6) 48610* intermediate representation lowering: Parsing pass. (line 13) 48611* INTMAX_TYPE: Type Layout. (line 192) 48612* INTPTR_TYPE: Type Layout. (line 239) 48613* introduction: Top. (line 6) 48614* INT_FAST16_TYPE: Type Layout. (line 232) 48615* INT_FAST32_TYPE: Type Layout. (line 233) 48616* INT_FAST64_TYPE: Type Layout. (line 234) 48617* INT_FAST8_TYPE: Type Layout. (line 231) 48618* INT_LEAST16_TYPE: Type Layout. (line 224) 48619* INT_LEAST32_TYPE: Type Layout. (line 225) 48620* INT_LEAST64_TYPE: Type Layout. (line 226) 48621* INT_LEAST8_TYPE: Type Layout. (line 223) 48622* INT_TYPE_SIZE: Type Layout. (line 11) 48623* INVOKE__main: Macros for Initialization. 48624 (line 50) 48625* in_struct: Flags. (line 245) 48626* in_struct, in code_label and note: Flags. (line 59) 48627* in_struct, in insn and jump_insn and call_insn: Flags. (line 49) 48628* in_struct, in insn, call_insn, jump_insn and jump_table_data: Flags. 48629 (line 148) 48630* in_struct, in subreg: Flags. (line 187) 48631* ior: Arithmetic. (line 163) 48632* ior and attributes: Expressions. (line 50) 48633* ior, canonicalization of: Insn Canonicalizations. 48634 (line 51) 48635* iorM3 instruction pattern: Standard Names. (line 266) 48636* IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 44) 48637* IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 123) 48638* is_gimple_addressable: Logical Operators. (line 113) 48639* is_gimple_asm_val: Logical Operators. (line 117) 48640* is_gimple_assign: Logical Operators. (line 149) 48641* is_gimple_call: Logical Operators. (line 152) 48642* is_gimple_call_addr: Logical Operators. (line 120) 48643* is_gimple_constant: Logical Operators. (line 128) 48644* is_gimple_debug: Logical Operators. (line 155) 48645* is_gimple_ip_invariant: Logical Operators. (line 137) 48646* is_gimple_ip_invariant_address: Logical Operators. (line 142) 48647* is_gimple_mem_ref_addr: Logical Operators. (line 124) 48648* is_gimple_min_invariant: Logical Operators. (line 131) 48649* is_gimple_omp: Logical Operators. (line 166) 48650* is_gimple_val: Logical Operators. (line 107) 48651* iterators in .md files: Iterators. (line 6) 48652* IV analysis on GIMPLE: Scalar evolutions. (line 6) 48653* IV analysis on RTL: loop-iv. (line 6) 48654* JMP_BUF_SIZE: Exception Region Output. 48655 (line 82) 48656* jump: Flags. (line 286) 48657* jump instruction pattern: Standard Names. (line 1164) 48658* jump instruction patterns: Jump Patterns. (line 6) 48659* jump instructions and set: Side Effects. (line 56) 48660* jump, in call_insn: Flags. (line 161) 48661* jump, in insn: Flags. (line 157) 48662* jump, in mem: Flags. (line 70) 48663* Jumps: Jumps. (line 6) 48664* JUMP_ALIGN: Alignment Output. (line 8) 48665* jump_insn: Insns. (line 73) 48666* jump_insn and /f: Flags. (line 107) 48667* jump_insn and /s: Flags. (line 49) 48668* jump_insn and /s <1>: Flags. (line 148) 48669* jump_insn and /u: Flags. (line 39) 48670* jump_insn and /v: Flags. (line 44) 48671* JUMP_LABEL: Insns. (line 80) 48672* JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 150) 48673* jump_table_data: Insns. (line 166) 48674* jump_table_data and /s: Flags. (line 148) 48675* jump_table_data and /v: Flags. (line 44) 48676* LABEL_ALIGN: Alignment Output. (line 57) 48677* LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 26) 48678* LABEL_ALTERNATE_NAME: Edges. (line 180) 48679* LABEL_ALT_ENTRY_P: Insns. (line 146) 48680* LABEL_DECL: Declarations. (line 6) 48681* LABEL_KIND: Insns. (line 146) 48682* LABEL_NUSES: Insns. (line 142) 48683* LABEL_PRESERVE_P: Flags. (line 59) 48684* label_ref: Constants. (line 127) 48685* label_ref and /v: Flags. (line 65) 48686* label_ref, RTL sharing: Sharing. (line 35) 48687* LABEL_REF_NONLOCAL_P: Flags. (line 65) 48688* language-dependent trees: Language-dependent trees. 48689 (line 6) 48690* language-independent intermediate representation: Parsing pass. 48691 (line 13) 48692* lang_hooks.gimplify_expr: Gimplification pass. 48693 (line 18) 48694* lang_hooks.parse_file: Parsing pass. (line 6) 48695* large return values: Aggregate Return. (line 6) 48696* LAST_STACK_REG: Stack Registers. (line 30) 48697* LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 48698* lceilMN2: Standard Names. (line 740) 48699* LCSSA: LCSSA. (line 6) 48700* LDD_SUFFIX: Macros for Initialization. 48701 (line 121) 48702* LD_FINI_SWITCH: Macros for Initialization. 48703 (line 28) 48704* LD_INIT_SWITCH: Macros for Initialization. 48705 (line 24) 48706* le: Comparisons. (line 76) 48707* le and attributes: Expressions. (line 83) 48708* leaf functions: Leaf Functions. (line 6) 48709* leaf_function_p: Standard Names. (line 1248) 48710* LEAF_REGISTERS: Leaf Functions. (line 23) 48711* LEAF_REG_REMAP: Leaf Functions. (line 37) 48712* left rotate: Arithmetic. (line 195) 48713* left shift: Arithmetic. (line 173) 48714* LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 48715* LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 150) 48716* length: GTY Options. (line 47) 48717* less than: Comparisons. (line 68) 48718* less than or equal: Comparisons. (line 76) 48719* leu: Comparisons. (line 76) 48720* leu and attributes: Expressions. (line 83) 48721* LE_EXPR: Unary and Binary Expressions. 48722 (line 6) 48723* lfloorMN2: Standard Names. (line 735) 48724* LIB2FUNCS_EXTRA: Target Fragment. (line 11) 48725* LIBCALL_VALUE: Scalar Return. (line 56) 48726* libgcc.a: Library Calls. (line 6) 48727* LIBGCC2_CFLAGS: Target Fragment. (line 8) 48728* LIBGCC2_GNU_PREFIX: Type Layout. (line 102) 48729* LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 1097) 48730* LIBGCC_SPEC: Driver. (line 115) 48731* library subroutine names: Library Calls. (line 6) 48732* LIBRARY_PATH_ENV: Misc. (line 509) 48733* LIB_SPEC: Driver. (line 107) 48734* LIMIT_RELOAD_CLASS: Register Classes. (line 296) 48735* LINK_COMMAND_SPEC: Driver. (line 236) 48736* LINK_EH_SPEC: Driver. (line 142) 48737* LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 232) 48738* LINK_LIBGCC_SPECIAL_1: Driver. (line 227) 48739* LINK_SPEC: Driver. (line 100) 48740* list: Containers. (line 6) 48741* Liveness representation: Liveness information. 48742 (line 6) 48743* load address instruction: Simple Constraints. (line 162) 48744* LOAD_EXTEND_OP: Misc. (line 59) 48745* load_multiple instruction pattern: Standard Names. (line 136) 48746* Local Register Allocator (LRA): RTL passes. (line 187) 48747* LOCAL_ALIGNMENT: Storage Layout. (line 254) 48748* LOCAL_CLASS_P: Classes. (line 73) 48749* LOCAL_DECL_ALIGNMENT: Storage Layout. (line 291) 48750* LOCAL_INCLUDE_DIR: Driver. (line 312) 48751* LOCAL_LABEL_PREFIX: Instruction Output. (line 151) 48752* LOCAL_REGNO: Register Basics. (line 100) 48753* Logical Operators: Logical Operators. (line 6) 48754* logical-and, bitwise: Arithmetic. (line 158) 48755* LOGICAL_OP_NON_SHORT_CIRCUIT: Costs. (line 272) 48756* logM2 instruction pattern: Standard Names. (line 648) 48757* LOG_LINKS: Insns. (line 314) 48758* longjmp and automatic variables: Interface. (line 52) 48759* LONG_ACCUM_TYPE_SIZE: Type Layout. (line 92) 48760* LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 57) 48761* LONG_FRACT_TYPE_SIZE: Type Layout. (line 72) 48762* LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 97) 48763* LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 77) 48764* LONG_LONG_TYPE_SIZE: Type Layout. (line 32) 48765* LONG_TYPE_SIZE: Type Layout. (line 21) 48766* Loop analysis: Loop representation. 48767 (line 6) 48768* Loop manipulation: Loop manipulation. (line 6) 48769* Loop querying: Loop querying. (line 6) 48770* Loop representation: Loop representation. 48771 (line 6) 48772* Loop-closed SSA form: LCSSA. (line 6) 48773* looping instruction patterns: Looping Patterns. (line 6) 48774* LOOP_ALIGN: Alignment Output. (line 40) 48775* LOOP_EXPR: Unary and Binary Expressions. 48776 (line 6) 48777* lowering, language-dependent intermediate representation: Parsing pass. 48778 (line 13) 48779* lo_sum: Arithmetic. (line 25) 48780* lrintMN2: Standard Names. (line 725) 48781* lroundMN2: Standard Names. (line 730) 48782* lshiftrt: Arithmetic. (line 190) 48783* lshiftrt and attributes: Expressions. (line 83) 48784* LSHIFT_EXPR: Unary and Binary Expressions. 48785 (line 6) 48786* lshrM3 instruction pattern: Standard Names. (line 563) 48787* lt: Comparisons. (line 68) 48788* lt and attributes: Expressions. (line 83) 48789* LTGT_EXPR: Unary and Binary Expressions. 48790 (line 6) 48791* lto: LTO. (line 6) 48792* ltrans: LTO. (line 6) 48793* ltu: Comparisons. (line 68) 48794* LT_EXPR: Unary and Binary Expressions. 48795 (line 6) 48796* m in constraint: Simple Constraints. (line 17) 48797* machine attributes: Target Attributes. (line 6) 48798* machine description macros: Target Macros. (line 6) 48799* machine descriptions: Machine Desc. (line 6) 48800* machine mode conversions: Conversions. (line 6) 48801* machine modes: Machine Modes. (line 6) 48802* machine specific constraints: Machine Constraints. 48803 (line 6) 48804* machine-independent predicates: Machine-Independent Predicates. 48805 (line 6) 48806* machine_mode: Machine Modes. (line 6) 48807* macros, target description: Target Macros. (line 6) 48808* maddMN4 instruction pattern: Standard Names. (line 486) 48809* makefile fragment: Fragments. (line 6) 48810* makefile targets: Makefile. (line 6) 48811* MAKE_DECL_ONE_ONLY: Label Output. (line 253) 48812* make_safe_from: Expander Definitions. 48813 (line 151) 48814* MALLOC_ABI_ALIGNMENT: Storage Layout. (line 173) 48815* Manipulating GIMPLE statements: Manipulating GIMPLE statements. 48816 (line 6) 48817* marking roots: GGC Roots. (line 6) 48818* mark_hook: GTY Options. (line 139) 48819* MASK_RETURN_ADDR: Exception Region Output. 48820 (line 34) 48821* Match and Simplify: Match and Simplify. (line 6) 48822* matching constraint: Simple Constraints. (line 140) 48823* matching operands: Output Template. (line 49) 48824* match_dup: RTL Template. (line 73) 48825* match_dup <1>: define_peephole2. (line 28) 48826* match_dup and attributes: Insn Lengths. (line 16) 48827* match_operand: RTL Template. (line 16) 48828* match_operand and attributes: Expressions. (line 55) 48829* match_operator: RTL Template. (line 95) 48830* match_op_dup: RTL Template. (line 163) 48831* match_parallel: RTL Template. (line 172) 48832* match_par_dup: RTL Template. (line 219) 48833* match_scratch: RTL Template. (line 58) 48834* match_scratch <1>: define_peephole2. (line 28) 48835* match_test and attributes: Expressions. (line 64) 48836* math library: Soft float library routines. 48837 (line 6) 48838* math, in RTL: Arithmetic. (line 6) 48839* matherr: Library Calls. (line 59) 48840* MATH_LIBRARY: Misc. (line 502) 48841* maxM3 instruction pattern: Standard Names. (line 325) 48842* MAX_BITSIZE_MODE_ANY_INT: Machine Modes. (line 358) 48843* MAX_BITSIZE_MODE_ANY_MODE: Machine Modes. (line 364) 48844* MAX_BITS_PER_WORD: Storage Layout. (line 54) 48845* MAX_CONDITIONAL_EXECUTE: Misc. (line 524) 48846* MAX_FIXED_MODE_SIZE: Storage Layout. (line 436) 48847* MAX_MOVE_MAX: Misc. (line 105) 48848* MAX_OFILE_ALIGNMENT: Storage Layout. (line 208) 48849* MAX_REGS_PER_ADDRESS: Addressing Modes. (line 42) 48850* MAX_STACK_ALIGNMENT: Storage Layout. (line 202) 48851* maybe_undef: GTY Options. (line 148) 48852* may_trap_p, tree_could_trap_p: Edges. (line 114) 48853* mcount: Profiling. (line 12) 48854* MD_EXEC_PREFIX: Driver. (line 267) 48855* MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 93) 48856* MD_HANDLE_UNWABI: Exception Handling. (line 112) 48857* MD_STARTFILE_PREFIX: Driver. (line 295) 48858* MD_STARTFILE_PREFIX_1: Driver. (line 300) 48859* mem: Regs and Memory. (line 370) 48860* mem and /c: Flags. (line 81) 48861* mem and /f: Flags. (line 85) 48862* mem and /j: Flags. (line 70) 48863* mem and /u: Flags. (line 134) 48864* mem and /v: Flags. (line 76) 48865* mem, RTL sharing: Sharing. (line 40) 48866* memory model: Memory model. (line 6) 48867* memory reference, nonoffsettable: Simple Constraints. (line 254) 48868* memory references in constraints: Simple Constraints. (line 17) 48869* memory_barrier instruction pattern: Standard Names. (line 1634) 48870* MEMORY_MOVE_COST: Costs. (line 53) 48871* memory_operand: Machine-Independent Predicates. 48872 (line 57) 48873* MEM_ADDR_SPACE: Special Accessors. (line 48) 48874* MEM_ALIAS_SET: Special Accessors. (line 9) 48875* MEM_ALIGN: Special Accessors. (line 45) 48876* MEM_EXPR: Special Accessors. (line 19) 48877* MEM_KEEP_ALIAS_SET_P: Flags. (line 70) 48878* MEM_NOTRAP_P: Flags. (line 81) 48879* MEM_OFFSET: Special Accessors. (line 31) 48880* MEM_OFFSET_KNOWN_P: Special Accessors. (line 27) 48881* MEM_POINTER: Flags. (line 85) 48882* MEM_READONLY_P: Flags. (line 134) 48883* MEM_REF: Storage References. (line 6) 48884* mem_signal_fenceMODE instruction pattern: Standard Names. (line 1893) 48885* MEM_SIZE: Special Accessors. (line 39) 48886* MEM_SIZE_KNOWN_P: Special Accessors. (line 35) 48887* mem_thread_fenceMODE instruction pattern: Standard Names. (line 1885) 48888* MEM_VOLATILE_P: Flags. (line 76) 48889* METHOD_TYPE: Types. (line 6) 48890* MINIMUM_ALIGNMENT: Storage Layout. (line 304) 48891* MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 181) 48892* minM3 instruction pattern: Standard Names. (line 325) 48893* minus: Arithmetic. (line 38) 48894* minus and attributes: Expressions. (line 83) 48895* minus, canonicalization of: Insn Canonicalizations. 48896 (line 27) 48897* MINUS_EXPR: Unary and Binary Expressions. 48898 (line 6) 48899* MIN_UNITS_PER_WORD: Storage Layout. (line 64) 48900* MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 48901* miscellaneous register hooks: Miscellaneous Register Hooks. 48902 (line 6) 48903* mnemonic attribute: Mnemonic Attribute. (line 6) 48904* mod: Arithmetic. (line 136) 48905* mod and attributes: Expressions. (line 83) 48906* mode classes: Machine Modes. (line 225) 48907* mode iterators in .md files: Mode Iterators. (line 6) 48908* mode switching: Mode Switching. (line 6) 48909* MODES_TIEABLE_P: Values in Registers. 48910 (line 127) 48911* MODE_ACCUM: Machine Modes. (line 255) 48912* MODE_BASE_REG_CLASS: Register Classes. (line 116) 48913* MODE_BASE_REG_REG_CLASS: Register Classes. (line 122) 48914* MODE_CC: Machine Modes. (line 274) 48915* MODE_CC <1>: MODE_CC Condition Codes. 48916 (line 6) 48917* MODE_CODE_BASE_REG_CLASS: Register Classes. (line 129) 48918* MODE_COMPLEX_FLOAT: Machine Modes. (line 266) 48919* MODE_COMPLEX_INT: Machine Modes. (line 263) 48920* MODE_DECIMAL_FLOAT: Machine Modes. (line 243) 48921* MODE_FLOAT: Machine Modes. (line 239) 48922* MODE_FRACT: Machine Modes. (line 247) 48923* MODE_FUNCTION: Machine Modes. (line 270) 48924* MODE_INT: Machine Modes. (line 231) 48925* MODE_PARTIAL_INT: Machine Modes. (line 235) 48926* MODE_POINTER_BOUNDS: Machine Modes. (line 279) 48927* MODE_RANDOM: Machine Modes. (line 284) 48928* MODE_UACCUM: Machine Modes. (line 259) 48929* MODE_UFRACT: Machine Modes. (line 251) 48930* modifiers in constraints: Modifiers. (line 6) 48931* MODIFY_EXPR: Unary and Binary Expressions. 48932 (line 6) 48933* MODIFY_JNI_METHOD_CALL: Misc. (line 873) 48934* modM3 instruction pattern: Standard Names. (line 266) 48935* modulo scheduling: RTL passes. (line 123) 48936* MOVE_MAX: Misc. (line 100) 48937* MOVE_MAX_PIECES: Costs. (line 199) 48938* MOVE_RATIO: Costs. (line 148) 48939* movM instruction pattern: Standard Names. (line 11) 48940* movmemM instruction pattern: Standard Names. (line 805) 48941* movmisalignM instruction pattern: Standard Names. (line 125) 48942* movMODEcc instruction pattern: Standard Names. (line 1099) 48943* movstr instruction pattern: Standard Names. (line 840) 48944* movstrictM instruction pattern: Standard Names. (line 119) 48945* msubMN4 instruction pattern: Standard Names. (line 509) 48946* mulhisi3 instruction pattern: Standard Names. (line 462) 48947* mulM3 instruction pattern: Standard Names. (line 266) 48948* mulqihi3 instruction pattern: Standard Names. (line 466) 48949* mulsidi3 instruction pattern: Standard Names. (line 466) 48950* mult: Arithmetic. (line 93) 48951* mult and attributes: Expressions. (line 83) 48952* mult, canonicalization of: Insn Canonicalizations. 48953 (line 27) 48954* mult, canonicalization of <1>: Insn Canonicalizations. 48955 (line 91) 48956* MULTIARCH_DIRNAME: Target Fragment. (line 170) 48957* MULTILIB_DEFAULTS: Driver. (line 252) 48958* MULTILIB_DIRNAMES: Target Fragment. (line 44) 48959* MULTILIB_EXCEPTIONS: Target Fragment. (line 70) 48960* MULTILIB_EXTRA_OPTS: Target Fragment. (line 132) 48961* MULTILIB_MATCHES: Target Fragment. (line 63) 48962* MULTILIB_OPTIONS: Target Fragment. (line 24) 48963* MULTILIB_OSDIRNAMES: Target Fragment. (line 139) 48964* MULTILIB_REQUIRED: Target Fragment. (line 82) 48965* MULTILIB_REUSE: Target Fragment. (line 103) 48966* multiple alternative constraints: Multi-Alternative. (line 6) 48967* MULTIPLE_SYMBOL_SPACES: Misc. (line 482) 48968* multiplication: Arithmetic. (line 93) 48969* multiplication with signed saturation: Arithmetic. (line 93) 48970* multiplication with unsigned saturation: Arithmetic. (line 93) 48971* MULT_EXPR: Unary and Binary Expressions. 48972 (line 6) 48973* MULT_HIGHPART_EXPR: Unary and Binary Expressions. 48974 (line 6) 48975* mulvM4 instruction pattern: Standard Names. (line 282) 48976* n in constraint: Simple Constraints. (line 73) 48977* name: Identifiers. (line 6) 48978* named address spaces: Named Address Spaces. 48979 (line 6) 48980* named patterns and conditions: Patterns. (line 49) 48981* names, pattern: Standard Names. (line 6) 48982* namespace, scope: Namespaces. (line 6) 48983* NAMESPACE_DECL: Declarations. (line 6) 48984* NAMESPACE_DECL <1>: Namespaces. (line 6) 48985* NATIVE_SYSTEM_HEADER_COMPONENT: Driver. (line 322) 48986* ne: Comparisons. (line 56) 48987* ne and attributes: Expressions. (line 83) 48988* nearbyintM2 instruction pattern: Standard Names. (line 707) 48989* neg: Arithmetic. (line 82) 48990* neg and attributes: Expressions. (line 83) 48991* neg, canonicalization of: Insn Canonicalizations. 48992 (line 27) 48993* NEGATE_EXPR: Unary and Binary Expressions. 48994 (line 6) 48995* negation: Arithmetic. (line 82) 48996* negation with signed saturation: Arithmetic. (line 82) 48997* negation with unsigned saturation: Arithmetic. (line 82) 48998* negM2 instruction pattern: Standard Names. (line 575) 48999* negvM3 instruction pattern: Standard Names. (line 578) 49000* nested functions, trampolines for: Trampolines. (line 6) 49001* nested_ptr: GTY Options. (line 156) 49002* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks. (line 25) 49003* NEXT_INSN: Insns. (line 30) 49004* NEXT_OBJC_RUNTIME: Library Calls. (line 82) 49005* NE_EXPR: Unary and Binary Expressions. 49006 (line 6) 49007* nil: RTL Objects. (line 73) 49008* NM_FLAGS: Macros for Initialization. 49009 (line 110) 49010* nondeterministic finite state automaton: Processor pipeline description. 49011 (line 304) 49012* nonimmediate_operand: Machine-Independent Predicates. 49013 (line 100) 49014* nonlocal goto handler: Edges. (line 171) 49015* nonlocal_goto instruction pattern: Standard Names. (line 1468) 49016* nonlocal_goto_receiver instruction pattern: Standard Names. 49017 (line 1485) 49018* nonmemory_operand: Machine-Independent Predicates. 49019 (line 96) 49020* nonoffsettable memory reference: Simple Constraints. (line 254) 49021* NON_LVALUE_EXPR: Unary and Binary Expressions. 49022 (line 6) 49023* nop instruction pattern: Standard Names. (line 1281) 49024* NOP_EXPR: Unary and Binary Expressions. 49025 (line 6) 49026* normal predicates: Predicates. (line 31) 49027* not: Arithmetic. (line 154) 49028* not and attributes: Expressions. (line 50) 49029* not equal: Comparisons. (line 56) 49030* not, canonicalization of: Insn Canonicalizations. 49031 (line 27) 49032* note: Insns. (line 183) 49033* note and /i: Flags. (line 59) 49034* note and /v: Flags. (line 44) 49035* NOTE_INSN_BASIC_BLOCK: Basic Blocks. (line 50) 49036* NOTE_INSN_BASIC_BLOCK <1>: Basic Blocks. (line 52) 49037* NOTE_INSN_BLOCK_BEG: Insns. (line 208) 49038* NOTE_INSN_BLOCK_END: Insns. (line 208) 49039* NOTE_INSN_DELETED: Insns. (line 198) 49040* NOTE_INSN_DELETED_LABEL: Insns. (line 203) 49041* NOTE_INSN_EH_REGION_BEG: Insns. (line 214) 49042* NOTE_INSN_EH_REGION_END: Insns. (line 214) 49043* NOTE_INSN_FUNCTION_BEG: Insns. (line 221) 49044* NOTE_INSN_VAR_LOCATION: Insns. (line 225) 49045* NOTE_LINE_NUMBER: Insns. (line 183) 49046* NOTE_SOURCE_FILE: Insns. (line 183) 49047* NOTE_VAR_LOCATION: Insns. (line 225) 49048* NOTICE_UPDATE_CC: CC0 Condition Codes. 49049 (line 30) 49050* NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 25) 49051* NO_DBX_FUNCTION_END: DBX Hooks. (line 19) 49052* NO_DBX_GCC_MARKER: File Names and DBX. (line 27) 49053* NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 22) 49054* NO_DOLLAR_IN_LABEL: Label Output. (line 64) 49055* NO_DOT_IN_LABEL: Label Output. (line 70) 49056* NO_FUNCTION_CSE: Costs. (line 268) 49057* NO_IMPLICIT_EXTERN_C: Misc. (line 381) 49058* NO_PROFILE_COUNTERS: Profiling. (line 27) 49059* NO_REGS: Register Classes. (line 17) 49060* Number of iterations analysis: Number of iterations. 49061 (line 6) 49062* NUM_MACHINE_MODES: Machine Modes. (line 297) 49063* NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 49064* N_REG_CLASSES: Register Classes. (line 81) 49065* o in constraint: Simple Constraints. (line 23) 49066* OACC_CACHE: OpenACC. (line 6) 49067* OACC_DATA: OpenACC. (line 6) 49068* OACC_DECLARE: OpenACC. (line 6) 49069* OACC_ENTER_DATA: OpenACC. (line 6) 49070* OACC_EXIT_DATA: OpenACC. (line 6) 49071* OACC_HOST_DATA: OpenACC. (line 6) 49072* OACC_KERNELS: OpenACC. (line 6) 49073* OACC_LOOP: OpenACC. (line 6) 49074* OACC_PARALLEL: OpenACC. (line 6) 49075* OACC_UPDATE: OpenACC. (line 6) 49076* OBJC_GEN_METHOD_LABEL: Label Output. (line 454) 49077* OBJC_JBLEN: Misc. (line 1092) 49078* OBJECT_FORMAT_COFF: Macros for Initialization. 49079 (line 96) 49080* offsettable address: Simple Constraints. (line 23) 49081* OFFSET_TYPE: Types. (line 6) 49082* OImode: Machine Modes. (line 51) 49083* Omega a solver for linear programming problems: Omega. (line 6) 49084* OMP_ATOMIC: OpenMP. (line 6) 49085* OMP_CLAUSE: OpenMP. (line 6) 49086* OMP_CONTINUE: OpenMP. (line 6) 49087* OMP_CRITICAL: OpenMP. (line 6) 49088* OMP_FOR: OpenMP. (line 6) 49089* OMP_MASTER: OpenMP. (line 6) 49090* OMP_ORDERED: OpenMP. (line 6) 49091* OMP_PARALLEL: OpenMP. (line 6) 49092* OMP_RETURN: OpenMP. (line 6) 49093* OMP_SECTION: OpenMP. (line 6) 49094* OMP_SECTIONS: OpenMP. (line 6) 49095* OMP_SINGLE: OpenMP. (line 6) 49096* one_cmplM2 instruction pattern: Standard Names. (line 802) 49097* operand access: Accessors. (line 6) 49098* Operand Access Routines: SSA Operands. (line 116) 49099* operand constraints: Constraints. (line 6) 49100* Operand Iterators: SSA Operands. (line 116) 49101* operand predicates: Predicates. (line 6) 49102* operand substitution: Output Template. (line 6) 49103* Operands: Operands. (line 6) 49104* operands: SSA Operands. (line 6) 49105* operands <1>: Patterns. (line 55) 49106* operator predicates: Predicates. (line 6) 49107* optc-gen.awk: Options. (line 6) 49108* OPTGROUP_ALL: Optimization groups. 49109 (line 25) 49110* OPTGROUP_INLINE: Optimization groups. 49111 (line 15) 49112* OPTGROUP_IPA: Optimization groups. 49113 (line 9) 49114* OPTGROUP_LOOP: Optimization groups. 49115 (line 12) 49116* OPTGROUP_OTHER: Optimization groups. 49117 (line 21) 49118* OPTGROUP_VEC: Optimization groups. 49119 (line 18) 49120* optimization dumps: Optimization info. (line 6) 49121* optimization groups: Optimization groups. 49122 (line 6) 49123* optimization info file names: Dump files and streams. 49124 (line 6) 49125* Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 49126* OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 8) 49127* option specification files: Options. (line 6) 49128* optional hardware or system features: Run-time Target. (line 59) 49129* options, directory search: Including Patterns. (line 47) 49130* OPTION_DEFAULT_SPECS: Driver. (line 25) 49131* order of register allocation: Allocation Order. (line 6) 49132* ordered_comparison_operator: Machine-Independent Predicates. 49133 (line 115) 49134* ORDERED_EXPR: Unary and Binary Expressions. 49135 (line 6) 49136* Ordering of Patterns: Pattern Ordering. (line 6) 49137* ORIGINAL_REGNO: Special Accessors. (line 53) 49138* other register constraints: Simple Constraints. (line 171) 49139* outgoing_args_size: Stack Arguments. (line 48) 49140* OUTGOING_REGNO: Register Basics. (line 93) 49141* OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 79) 49142* output of assembler code: File Framework. (line 6) 49143* output statements: Output Statement. (line 6) 49144* output templates: Output Template. (line 6) 49145* output_asm_insn: Output Statement. (line 52) 49146* OUTPUT_QUOTED_STRING: File Framework. (line 106) 49147* OVERLAPPING_REGISTER_NAMES: Instruction Output. (line 20) 49148* OVERLOAD: Functions for C++. (line 6) 49149* OVERRIDE_ABI_FORMAT: Register Arguments. (line 153) 49150* OVL_CURRENT: Functions for C++. (line 6) 49151* OVL_NEXT: Functions for C++. (line 6) 49152* p in constraint: Simple Constraints. (line 162) 49153* PAD_VARARGS_DOWN: Register Arguments. (line 234) 49154* parallel: Side Effects. (line 210) 49155* parameters, c++ abi: C++ ABI. (line 6) 49156* parameters, miscellaneous: Misc. (line 6) 49157* parameters, precompiled headers: PCH Target. (line 6) 49158* parity: Arithmetic. (line 242) 49159* parityM2 instruction pattern: Standard Names. (line 795) 49160* PARM_BOUNDARY: Storage Layout. (line 133) 49161* PARM_DECL: Declarations. (line 6) 49162* PARSE_LDD_OUTPUT: Macros for Initialization. 49163 (line 125) 49164* pass dumps: Passes. (line 6) 49165* passes and files of the compiler: Passes. (line 6) 49166* passing arguments: Interface. (line 36) 49167* pass_duplicate_computed_gotos: Edges. (line 161) 49168* PATH_SEPARATOR: Filesystem. (line 31) 49169* PATTERN: Insns. (line 284) 49170* pattern conditions: Patterns. (line 43) 49171* pattern names: Standard Names. (line 6) 49172* Pattern Ordering: Pattern Ordering. (line 6) 49173* patterns: Patterns. (line 6) 49174* pc: Regs and Memory. (line 357) 49175* pc and attributes: Insn Lengths. (line 20) 49176* pc, RTL sharing: Sharing. (line 25) 49177* PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 330) 49178* PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 64) 49179* PC_REGNUM: Register Basics. (line 107) 49180* pc_rtx: Regs and Memory. (line 362) 49181* PDImode: Machine Modes. (line 40) 49182* peephole optimization, RTL representation: Side Effects. (line 244) 49183* peephole optimizer definitions: Peephole Definitions. 49184 (line 6) 49185* per-function data: Per-Function Data. (line 6) 49186* percent sign: Output Template. (line 6) 49187* PHI nodes: SSA. (line 31) 49188* PIC: PIC. (line 6) 49189* PIC_OFFSET_TABLE_REGNUM: PIC. (line 15) 49190* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 25) 49191* pipeline hazard recognizer: Processor pipeline description. 49192 (line 6) 49193* pipeline hazard recognizer <1>: Processor pipeline description. 49194 (line 53) 49195* Plugins: Plugins. (line 6) 49196* plus: Arithmetic. (line 14) 49197* plus and attributes: Expressions. (line 83) 49198* plus, canonicalization of: Insn Canonicalizations. 49199 (line 27) 49200* PLUS_EXPR: Unary and Binary Expressions. 49201 (line 6) 49202* Pmode: Misc. (line 329) 49203* pmode_register_operand: Machine-Independent Predicates. 49204 (line 34) 49205* pointer: Types. (line 6) 49206* POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 76) 49207* POINTER_PLUS_EXPR: Unary and Binary Expressions. 49208 (line 6) 49209* POINTER_SIZE: Storage Layout. (line 70) 49210* POINTER_TYPE: Types. (line 6) 49211* popcount: Arithmetic. (line 238) 49212* popcountM2 instruction pattern: Standard Names. (line 789) 49213* pops_args: Function Entry. (line 104) 49214* pop_operand: Machine-Independent Predicates. 49215 (line 87) 49216* portability: Portability. (line 6) 49217* position independent code: PIC. (line 6) 49218* POSTDECREMENT_EXPR: Unary and Binary Expressions. 49219 (line 6) 49220* POSTINCREMENT_EXPR: Unary and Binary Expressions. 49221 (line 6) 49222* post_dec: Incdec. (line 25) 49223* post_inc: Incdec. (line 30) 49224* post_modify: Incdec. (line 33) 49225* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks. 49226 (line 34) 49227* POWI_MAX_MULTS: Misc. (line 961) 49228* powM3 instruction pattern: Standard Names. (line 656) 49229* pragma: Misc. (line 387) 49230* PREDECREMENT_EXPR: Unary and Binary Expressions. 49231 (line 6) 49232* predefined macros: Run-time Target. (line 6) 49233* predicates: Predicates. (line 6) 49234* predicates and machine modes: Predicates. (line 31) 49235* predication: Conditional Execution. 49236 (line 6) 49237* predict.def: Profile information. 49238 (line 24) 49239* PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 41) 49240* PREFERRED_RELOAD_CLASS: Register Classes. (line 249) 49241* PREFERRED_STACK_BOUNDARY: Storage Layout. (line 147) 49242* prefetch: Side Effects. (line 324) 49243* prefetch and /v: Flags. (line 214) 49244* prefetch instruction pattern: Standard Names. (line 1611) 49245* PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 214) 49246* PREINCREMENT_EXPR: Unary and Binary Expressions. 49247 (line 6) 49248* presence_set: Processor pipeline description. 49249 (line 223) 49250* preserving SSA form: SSA. (line 74) 49251* preserving virtual SSA form: SSA. (line 182) 49252* pretend_args_size: Function Entry. (line 110) 49253* prev_active_insn: define_peephole. (line 60) 49254* PREV_INSN: Insns. (line 26) 49255* pre_dec: Incdec. (line 8) 49256* PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 126) 49257* pre_inc: Incdec. (line 22) 49258* pre_modify: Incdec. (line 52) 49259* PRINT_OPERAND: Instruction Output. (line 95) 49260* PRINT_OPERAND_ADDRESS: Instruction Output. (line 122) 49261* PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 115) 49262* probe_stack instruction pattern: Standard Names. (line 1460) 49263* probe_stack_address instruction pattern: Standard Names. (line 1453) 49264* processor functional units: Processor pipeline description. 49265 (line 6) 49266* processor functional units <1>: Processor pipeline description. 49267 (line 68) 49268* processor pipeline description: Processor pipeline description. 49269 (line 6) 49270* product: Arithmetic. (line 93) 49271* profile feedback: Profile information. 49272 (line 14) 49273* profile representation: Profile information. 49274 (line 6) 49275* PROFILE_BEFORE_PROLOGUE: Profiling. (line 34) 49276* PROFILE_HOOK: Profiling. (line 22) 49277* profiling, code generation: Profiling. (line 6) 49278* program counter: Regs and Memory. (line 358) 49279* prologue: Function Entry. (line 6) 49280* prologue instruction pattern: Standard Names. (line 1549) 49281* PROMOTE_MODE: Storage Layout. (line 87) 49282* pseudo registers: Regs and Memory. (line 9) 49283* PSImode: Machine Modes. (line 32) 49284* PTRDIFF_TYPE: Type Layout. (line 163) 49285* purge_dead_edges: Edges. (line 103) 49286* purge_dead_edges <1>: Maintaining the CFG. 49287 (line 81) 49288* push address instruction: Simple Constraints. (line 162) 49289* pushM1 instruction pattern: Standard Names. (line 253) 49290* PUSH_ARGS: Stack Arguments. (line 17) 49291* PUSH_ARGS_REVERSED: Stack Arguments. (line 25) 49292* push_operand: Machine-Independent Predicates. 49293 (line 80) 49294* push_reload: Addressing Modes. (line 176) 49295* PUSH_ROUNDING: Stack Arguments. (line 31) 49296* PUT_CODE: RTL Objects. (line 47) 49297* PUT_MODE: Machine Modes. (line 294) 49298* PUT_REG_NOTE_KIND: Insns. (line 346) 49299* PUT_SDB_...: SDB and DWARF. (line 109) 49300* QCmode: Machine Modes. (line 199) 49301* QFmode: Machine Modes. (line 57) 49302* QImode: Machine Modes. (line 25) 49303* QImode, in insn: Insns. (line 268) 49304* QQmode: Machine Modes. (line 106) 49305* qualified type: Types. (line 6) 49306* qualified type <1>: Types for C++. (line 6) 49307* querying function unit reservations: Processor pipeline description. 49308 (line 90) 49309* question mark: Multi-Alternative. (line 41) 49310* quotient: Arithmetic. (line 116) 49311* r in constraint: Simple Constraints. (line 64) 49312* RDIV_EXPR: Unary and Binary Expressions. 49313 (line 6) 49314* READONLY_DATA_SECTION_ASM_OP: Sections. (line 62) 49315* real operands: SSA Operands. (line 6) 49316* REALPART_EXPR: Unary and Binary Expressions. 49317 (line 6) 49318* REAL_ARITHMETIC: Floating Point. (line 64) 49319* REAL_CST: Constant expressions. 49320 (line 6) 49321* REAL_LIBGCC_SPEC: Driver. (line 124) 49322* REAL_NM_FILE_NAME: Macros for Initialization. 49323 (line 105) 49324* REAL_TYPE: Types. (line 6) 49325* REAL_VALUES_EQUAL: Floating Point. (line 31) 49326* REAL_VALUES_LESS: Floating Point. (line 37) 49327* REAL_VALUE_ABS: Floating Point. (line 81) 49328* REAL_VALUE_ATOF: Floating Point. (line 48) 49329* REAL_VALUE_FIX: Floating Point. (line 40) 49330* REAL_VALUE_ISINF: Floating Point. (line 58) 49331* REAL_VALUE_ISNAN: Floating Point. (line 61) 49332* REAL_VALUE_NEGATE: Floating Point. (line 78) 49333* REAL_VALUE_NEGATIVE: Floating Point. (line 55) 49334* REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 147) 49335* REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 145) 49336* REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 146) 49337* REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 143) 49338* REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 144) 49339* REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 142) 49340* REAL_VALUE_TYPE: Floating Point. (line 25) 49341* REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 43) 49342* recognizing insns: RTL Template. (line 6) 49343* recog_data.operand: Instruction Output. (line 54) 49344* RECORD_TYPE: Types. (line 6) 49345* RECORD_TYPE <1>: Classes. (line 6) 49346* redirect_edge_and_branch: Profile information. 49347 (line 71) 49348* redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 49349 (line 90) 49350* reduc_plus_scal_M instruction pattern: Standard Names. (line 364) 49351* reduc_smax_M instruction pattern: Standard Names. (line 331) 49352* reduc_smax_scal_M instruction pattern: Standard Names. (line 354) 49353* reduc_smin_M instruction pattern: Standard Names. (line 331) 49354* reduc_smin_scal_M instruction pattern: Standard Names. (line 354) 49355* reduc_splus_M instruction pattern: Standard Names. (line 347) 49356* reduc_umax_M instruction pattern: Standard Names. (line 339) 49357* reduc_umax_scal_M instruction pattern: Standard Names. (line 359) 49358* reduc_umin_M instruction pattern: Standard Names. (line 339) 49359* reduc_umin_scal_M instruction pattern: Standard Names. (line 359) 49360* reduc_uplus_M instruction pattern: Standard Names. (line 347) 49361* reference: Types. (line 6) 49362* REFERENCE_TYPE: Types. (line 6) 49363* reg: Regs and Memory. (line 9) 49364* reg and /f: Flags. (line 94) 49365* reg and /i: Flags. (line 89) 49366* reg and /v: Flags. (line 98) 49367* reg, RTL sharing: Sharing. (line 17) 49368* register allocation order: Allocation Order. (line 6) 49369* register class definitions: Register Classes. (line 6) 49370* register class preference constraints: Class Preferences. (line 6) 49371* register pairs: Values in Registers. 49372 (line 69) 49373* Register Transfer Language (RTL): RTL. (line 6) 49374* register usage: Registers. (line 6) 49375* registers arguments: Register Arguments. (line 6) 49376* registers in constraints: Simple Constraints. (line 64) 49377* REGISTER_MOVE_COST: Costs. (line 9) 49378* REGISTER_NAMES: Instruction Output. (line 8) 49379* register_operand: Machine-Independent Predicates. 49380 (line 29) 49381* REGISTER_PREFIX: Instruction Output. (line 150) 49382* REGISTER_TARGET_PRAGMAS: Misc. (line 387) 49383* REGMODE_NATURAL_SIZE: Values in Registers. 49384 (line 49) 49385* REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 172) 49386* REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 150) 49387* REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 160) 49388* REGNO_OK_FOR_BASE_P: Register Classes. (line 146) 49389* REGNO_OK_FOR_INDEX_P: Register Classes. (line 186) 49390* REGNO_REG_CLASS: Register Classes. (line 105) 49391* regs_ever_live: Function Entry. (line 21) 49392* regular expressions: Processor pipeline description. 49393 (line 6) 49394* regular expressions <1>: Processor pipeline description. 49395 (line 105) 49396* REG_ALLOC_ORDER: Allocation Order. (line 8) 49397* REG_BR_PRED: Insns. (line 526) 49398* REG_BR_PROB: Insns. (line 519) 49399* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 49400 (line 82) 49401* REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 49402 (line 52) 49403* REG_CC_SETTER: Insns. (line 491) 49404* REG_CC_USER: Insns. (line 491) 49405* reg_class_contents: Register Basics. (line 59) 49406* REG_CLASS_CONTENTS: Register Classes. (line 91) 49407* reg_class_for_constraint: C Constraint Interface. 49408 (line 48) 49409* REG_CLASS_NAMES: Register Classes. (line 86) 49410* REG_CROSSING_JUMP: Insns. (line 405) 49411* REG_DEAD: Insns. (line 357) 49412* REG_DEAD, REG_UNUSED: Liveness information. 49413 (line 32) 49414* REG_DEP_ANTI: Insns. (line 513) 49415* REG_DEP_OUTPUT: Insns. (line 509) 49416* REG_DEP_TRUE: Insns. (line 506) 49417* REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 109) 49418* REG_EQUAL: Insns. (line 420) 49419* REG_EQUIV: Insns. (line 420) 49420* REG_EXPR: Special Accessors. (line 58) 49421* REG_FRAME_RELATED_EXPR: Insns. (line 532) 49422* REG_FUNCTION_VALUE_P: Flags. (line 89) 49423* REG_INC: Insns. (line 373) 49424* reg_label and /v: Flags. (line 65) 49425* REG_LABEL_OPERAND: Insns. (line 387) 49426* REG_LABEL_TARGET: Insns. (line 396) 49427* reg_names: Register Basics. (line 59) 49428* reg_names <1>: Instruction Output. (line 107) 49429* REG_NONNEG: Insns. (line 379) 49430* REG_NOTES: Insns. (line 321) 49431* REG_NOTE_KIND: Insns. (line 346) 49432* REG_OFFSET: Special Accessors. (line 62) 49433* REG_OK_STRICT: Addressing Modes. (line 99) 49434* REG_PARM_STACK_SPACE: Stack Arguments. (line 58) 49435* REG_PARM_STACK_SPACE, and TARGET_FUNCTION_ARG: Register Arguments. 49436 (line 56) 49437* REG_POINTER: Flags. (line 94) 49438* REG_SETJMP: Insns. (line 414) 49439* REG_UNUSED: Insns. (line 366) 49440* REG_USERVAR_P: Flags. (line 98) 49441* REG_VALUE_IN_UNWIND_CONTEXT: Frame Registers. (line 158) 49442* REG_WORDS_BIG_ENDIAN: Storage Layout. (line 35) 49443* relative costs: Costs. (line 6) 49444* RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 262) 49445* reloading: RTL passes. (line 170) 49446* reload_completed: Standard Names. (line 1248) 49447* reload_in instruction pattern: Standard Names. (line 98) 49448* reload_in_progress: Standard Names. (line 57) 49449* reload_out instruction pattern: Standard Names. (line 98) 49450* remainder: Arithmetic. (line 136) 49451* remainderM3 instruction pattern: Standard Names. (line 602) 49452* reorder: GTY Options. (line 182) 49453* representation of RTL: RTL. (line 6) 49454* reservation delays: Processor pipeline description. 49455 (line 6) 49456* restore_stack_block instruction pattern: Standard Names. (line 1374) 49457* restore_stack_function instruction pattern: Standard Names. 49458 (line 1374) 49459* restore_stack_nonlocal instruction pattern: Standard Names. 49460 (line 1374) 49461* rest_of_decl_compilation: Parsing pass. (line 51) 49462* rest_of_type_compilation: Parsing pass. (line 51) 49463* RESULT_DECL: Declarations. (line 6) 49464* return: Side Effects. (line 72) 49465* return instruction pattern: Standard Names. (line 1222) 49466* return values in registers: Scalar Return. (line 6) 49467* returning aggregate values: Aggregate Return. (line 6) 49468* returning structures and unions: Interface. (line 10) 49469* RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 64) 49470* RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 133) 49471* RETURN_ADDR_OFFSET: Exception Handling. (line 59) 49472* RETURN_ADDR_RTX: Frame Layout. (line 122) 49473* RETURN_EXPR: Statements for C++. (line 6) 49474* RETURN_STMT: Statements for C++. (line 6) 49475* return_val: Flags. (line 274) 49476* return_val, in call_insn: Flags. (line 24) 49477* return_val, in reg: Flags. (line 89) 49478* return_val, in symbol_ref: Flags. (line 202) 49479* reverse probability: Profile information. 49480 (line 66) 49481* REVERSE_CONDITION: MODE_CC Condition Codes. 49482 (line 92) 49483* REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 49484 (line 77) 49485* right rotate: Arithmetic. (line 195) 49486* right shift: Arithmetic. (line 190) 49487* rintM2 instruction pattern: Standard Names. (line 715) 49488* RISC: Processor pipeline description. 49489 (line 6) 49490* RISC <1>: Processor pipeline description. 49491 (line 223) 49492* roots, marking: GGC Roots. (line 6) 49493* rotate: Arithmetic. (line 195) 49494* rotate <1>: Arithmetic. (line 195) 49495* rotatert: Arithmetic. (line 195) 49496* rotlM3 instruction pattern: Standard Names. (line 563) 49497* rotrM3 instruction pattern: Standard Names. (line 563) 49498* roundM2 instruction pattern: Standard Names. (line 691) 49499* ROUND_DIV_EXPR: Unary and Binary Expressions. 49500 (line 6) 49501* ROUND_MOD_EXPR: Unary and Binary Expressions. 49502 (line 6) 49503* ROUND_TYPE_ALIGN: Storage Layout. (line 427) 49504* RSHIFT_EXPR: Unary and Binary Expressions. 49505 (line 6) 49506* RTL addition: Arithmetic. (line 14) 49507* RTL addition with signed saturation: Arithmetic. (line 14) 49508* RTL addition with unsigned saturation: Arithmetic. (line 14) 49509* RTL classes: RTL Classes. (line 6) 49510* RTL comparison: Arithmetic. (line 46) 49511* RTL comparison operations: Comparisons. (line 6) 49512* RTL constant expression types: Constants. (line 6) 49513* RTL constants: Constants. (line 6) 49514* RTL declarations: RTL Declarations. (line 6) 49515* RTL difference: Arithmetic. (line 38) 49516* RTL expression: RTL Objects. (line 6) 49517* RTL expressions for arithmetic: Arithmetic. (line 6) 49518* RTL format: RTL Classes. (line 72) 49519* RTL format characters: RTL Classes. (line 77) 49520* RTL function-call insns: Calls. (line 6) 49521* RTL insn template: RTL Template. (line 6) 49522* RTL integers: RTL Objects. (line 6) 49523* RTL memory expressions: Regs and Memory. (line 6) 49524* RTL object types: RTL Objects. (line 6) 49525* RTL postdecrement: Incdec. (line 6) 49526* RTL postincrement: Incdec. (line 6) 49527* RTL predecrement: Incdec. (line 6) 49528* RTL preincrement: Incdec. (line 6) 49529* RTL register expressions: Regs and Memory. (line 6) 49530* RTL representation: RTL. (line 6) 49531* RTL side effect expressions: Side Effects. (line 6) 49532* RTL strings: RTL Objects. (line 6) 49533* RTL structure sharing assumptions: Sharing. (line 6) 49534* RTL subtraction: Arithmetic. (line 38) 49535* RTL subtraction with signed saturation: Arithmetic. (line 38) 49536* RTL subtraction with unsigned saturation: Arithmetic. (line 38) 49537* RTL sum: Arithmetic. (line 14) 49538* RTL vectors: RTL Objects. (line 6) 49539* RTL_CONST_CALL_P: Flags. (line 19) 49540* RTL_CONST_OR_PURE_CALL_P: Flags. (line 29) 49541* RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33) 49542* RTL_PURE_CALL_P: Flags. (line 24) 49543* RTX (See RTL): RTL Objects. (line 6) 49544* RTX codes, classes of: RTL Classes. (line 6) 49545* RTX_FRAME_RELATED_P: Flags. (line 107) 49546* run-time conventions: Interface. (line 6) 49547* run-time target specification: Run-time Target. (line 6) 49548* s in constraint: Simple Constraints. (line 100) 49549* SAD_EXPR: Vectors. (line 6) 49550* same_type_p: Types. (line 86) 49551* SAmode: Machine Modes. (line 150) 49552* satfractMN2 instruction pattern: Standard Names. (line 987) 49553* satfractunsMN2 instruction pattern: Standard Names. (line 1000) 49554* satisfies_constraint_M: C Constraint Interface. 49555 (line 36) 49556* sat_fract: Conversions. (line 90) 49557* SAVE_EXPR: Unary and Binary Expressions. 49558 (line 6) 49559* save_stack_block instruction pattern: Standard Names. (line 1374) 49560* save_stack_function instruction pattern: Standard Names. (line 1374) 49561* save_stack_nonlocal instruction pattern: Standard Names. (line 1374) 49562* SBSS_SECTION_ASM_OP: Sections. (line 75) 49563* Scalar evolutions: Scalar evolutions. (line 6) 49564* scalars, returned as values: Scalar Return. (line 6) 49565* SCHED_GROUP_P: Flags. (line 148) 49566* SCmode: Machine Modes. (line 199) 49567* scratch: Regs and Memory. (line 294) 49568* scratch operands: Regs and Memory. (line 294) 49569* scratch, RTL sharing: Sharing. (line 35) 49570* scratch_operand: Machine-Independent Predicates. 49571 (line 49) 49572* SDATA_SECTION_ASM_OP: Sections. (line 57) 49573* SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 127) 49574* SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 122) 49575* SDB_DEBUGGING_INFO: SDB and DWARF. (line 8) 49576* SDB_DELIM: SDB and DWARF. (line 115) 49577* SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 132) 49578* SDmode: Machine Modes. (line 88) 49579* sdot_prodM instruction pattern: Standard Names. (line 369) 49580* search options: Including Patterns. (line 47) 49581* SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 391) 49582* SECONDARY_MEMORY_NEEDED: Register Classes. (line 447) 49583* SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 466) 49584* SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 457) 49585* SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 392) 49586* SECONDARY_RELOAD_CLASS: Register Classes. (line 390) 49587* SELECT_CC_MODE: MODE_CC Condition Codes. 49588 (line 6) 49589* sequence: Side Effects. (line 259) 49590* Sequence iterators: Sequence iterators. (line 6) 49591* set: Side Effects. (line 15) 49592* set and /f: Flags. (line 107) 49593* setmemM instruction pattern: Standard Names. (line 851) 49594* SETUP_FRAME_ADDRESSES: Frame Layout. (line 100) 49595* SET_ASM_OP: Label Output. (line 423) 49596* SET_ASM_OP <1>: Label Output. (line 434) 49597* set_attr: Tagging Insns. (line 31) 49598* set_attr_alternative: Tagging Insns. (line 49) 49599* set_bb_seq: GIMPLE sequences. (line 75) 49600* SET_DEST: Side Effects. (line 69) 49601* SET_IS_RETURN_P: Flags. (line 157) 49602* SET_LABEL_KIND: Insns. (line 146) 49603* set_optab_libfunc: Library Calls. (line 15) 49604* SET_RATIO: Costs. (line 216) 49605* SET_SRC: Side Effects. (line 69) 49606* set_thread_pointerMODE instruction pattern: Standard Names. 49607 (line 1905) 49608* SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 49609* SET_TYPE_STRUCTURAL_EQUALITY <1>: Types. (line 81) 49610* SFmode: Machine Modes. (line 69) 49611* sharing of RTL components: Sharing. (line 6) 49612* shift: Arithmetic. (line 173) 49613* SHIFT_COUNT_TRUNCATED: Misc. (line 112) 49614* SHLIB_SUFFIX: Macros for Initialization. 49615 (line 133) 49616* SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 82) 49617* SHORT_FRACT_TYPE_SIZE: Type Layout. (line 62) 49618* SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 86) 49619* SHORT_TYPE_SIZE: Type Layout. (line 15) 49620* sibcall_epilogue instruction pattern: Standard Names. (line 1581) 49621* sibling call: Edges. (line 121) 49622* SIBLING_CALL_P: Flags. (line 161) 49623* signed division: Arithmetic. (line 116) 49624* signed division with signed saturation: Arithmetic. (line 116) 49625* signed maximum: Arithmetic. (line 141) 49626* signed minimum: Arithmetic. (line 141) 49627* sign_extend: Conversions. (line 23) 49628* sign_extract: Bit-Fields. (line 8) 49629* sign_extract, canonicalization of: Insn Canonicalizations. 49630 (line 87) 49631* SIG_ATOMIC_TYPE: Type Layout. (line 214) 49632* SImode: Machine Modes. (line 37) 49633* simple constraints: Simple Constraints. (line 6) 49634* simple_return: Side Effects. (line 86) 49635* simple_return instruction pattern: Standard Names. (line 1237) 49636* sincosM3 instruction pattern: Standard Names. (line 627) 49637* sinM2 instruction pattern: Standard Names. (line 619) 49638* SIZETYPE: Type Layout. (line 153) 49639* SIZE_ASM_OP: Label Output. (line 33) 49640* SIZE_TYPE: Type Layout. (line 137) 49641* skip: GTY Options. (line 76) 49642* SLOW_BYTE_ACCESS: Costs. (line 117) 49643* SLOW_UNALIGNED_ACCESS: Costs. (line 132) 49644* smax: Arithmetic. (line 141) 49645* smin: Arithmetic. (line 141) 49646* sms, swing, software pipelining: RTL passes. (line 123) 49647* smulM3_highpart instruction pattern: Standard Names. (line 478) 49648* soft float library: Soft float library routines. 49649 (line 6) 49650* special: GTY Options. (line 245) 49651* special predicates: Predicates. (line 31) 49652* SPECS: Target Fragment. (line 191) 49653* speed of instructions: Costs. (line 6) 49654* splitting instructions: Insn Splitting. (line 6) 49655* split_block: Maintaining the CFG. 49656 (line 97) 49657* SQmode: Machine Modes. (line 114) 49658* sqrt: Arithmetic. (line 206) 49659* sqrtM2 instruction pattern: Standard Names. (line 585) 49660* square root: Arithmetic. (line 206) 49661* SSA: SSA. (line 6) 49662* ssaddM3 instruction pattern: Standard Names. (line 266) 49663* ssadM instruction pattern: Standard Names. (line 378) 49664* ssashlM3 instruction pattern: Standard Names. (line 553) 49665* SSA_NAME_DEF_STMT: SSA. (line 216) 49666* SSA_NAME_VERSION: SSA. (line 221) 49667* ssdivM3 instruction pattern: Standard Names. (line 266) 49668* ssmaddMN4 instruction pattern: Standard Names. (line 501) 49669* ssmsubMN4 instruction pattern: Standard Names. (line 525) 49670* ssmulM3 instruction pattern: Standard Names. (line 266) 49671* ssnegM2 instruction pattern: Standard Names. (line 575) 49672* sssubM3 instruction pattern: Standard Names. (line 266) 49673* ssum_widenM3 instruction pattern: Standard Names. (line 387) 49674* ss_abs: Arithmetic. (line 200) 49675* ss_ashift: Arithmetic. (line 173) 49676* ss_div: Arithmetic. (line 116) 49677* ss_minus: Arithmetic. (line 38) 49678* ss_mult: Arithmetic. (line 93) 49679* ss_neg: Arithmetic. (line 82) 49680* ss_plus: Arithmetic. (line 14) 49681* ss_truncate: Conversions. (line 43) 49682* stack arguments: Stack Arguments. (line 6) 49683* stack frame layout: Frame Layout. (line 6) 49684* stack smashing protection: Stack Smashing Protection. 49685 (line 6) 49686* STACK_ALIGNMENT_NEEDED: Frame Layout. (line 47) 49687* STACK_BOUNDARY: Storage Layout. (line 139) 49688* STACK_CHECK_BUILTIN: Stack Checking. (line 31) 49689* STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 82) 49690* STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 73) 49691* STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 89) 49692* STACK_CHECK_MOVING_SP: Stack Checking. (line 53) 49693* STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 45) 49694* STACK_CHECK_PROTECT: Stack Checking. (line 62) 49695* STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 38) 49696* STACK_DYNAMIC_OFFSET: Frame Layout. (line 73) 49697* STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory. 49698 (line 83) 49699* STACK_GROWS_DOWNWARD: Frame Layout. (line 8) 49700* STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 89) 49701* STACK_POINTER_OFFSET: Frame Layout. (line 57) 49702* STACK_POINTER_OFFSET and virtual registers: Regs and Memory. 49703 (line 93) 49704* STACK_POINTER_REGNUM: Frame Registers. (line 8) 49705* STACK_POINTER_REGNUM and virtual registers: Regs and Memory. 49706 (line 83) 49707* stack_pointer_rtx: Frame Registers. (line 104) 49708* stack_protect_set instruction pattern: Standard Names. (line 1915) 49709* stack_protect_test instruction pattern: Standard Names. (line 1925) 49710* STACK_PUSH_CODE: Frame Layout. (line 16) 49711* STACK_REGS: Stack Registers. (line 19) 49712* STACK_REG_COVER_CLASS: Stack Registers. (line 22) 49713* STACK_SAVEAREA_MODE: Storage Layout. (line 443) 49714* STACK_SIZE_MODE: Storage Layout. (line 454) 49715* STACK_SLOT_ALIGNMENT: Storage Layout. (line 275) 49716* standard pattern names: Standard Names. (line 6) 49717* STANDARD_STARTFILE_PREFIX: Driver. (line 274) 49718* STANDARD_STARTFILE_PREFIX_1: Driver. (line 281) 49719* STANDARD_STARTFILE_PREFIX_2: Driver. (line 288) 49720* STARTFILE_SPEC: Driver. (line 147) 49721* STARTING_FRAME_OFFSET: Frame Layout. (line 38) 49722* STARTING_FRAME_OFFSET and virtual registers: Regs and Memory. 49723 (line 74) 49724* Statement and operand traversals: Statement and operand traversals. 49725 (line 6) 49726* Statement Sequences: Statement Sequences. 49727 (line 6) 49728* Statements: Statements. (line 6) 49729* statements: Function Properties. 49730 (line 6) 49731* statements <1>: Statements for C++. (line 6) 49732* Static profile estimation: Profile information. 49733 (line 24) 49734* static single assignment: SSA. (line 6) 49735* STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 77) 49736* STATIC_CHAIN_REGNUM: Frame Registers. (line 76) 49737* stdarg.h and register arguments: Register Arguments. (line 51) 49738* STDC_0_IN_SYSTEM_HEADERS: Misc. (line 350) 49739* STMT_EXPR: Unary and Binary Expressions. 49740 (line 6) 49741* STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 49742* storage layout: Storage Layout. (line 6) 49743* STORE_FLAG_VALUE: Misc. (line 201) 49744* store_multiple instruction pattern: Standard Names. (line 159) 49745* strcpy: Storage Layout. (line 228) 49746* STRICT_ALIGNMENT: Storage Layout. (line 325) 49747* strict_low_part: RTL Declarations. (line 9) 49748* strict_memory_address_p: Addressing Modes. (line 186) 49749* STRING_CST: Constant expressions. 49750 (line 6) 49751* STRING_POOL_ADDRESS_P: Flags. (line 165) 49752* strlenM instruction pattern: Standard Names. (line 922) 49753* structure value address: Aggregate Return. (line 6) 49754* structures, returning: Interface. (line 10) 49755* STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 317) 49756* subM3 instruction pattern: Standard Names. (line 266) 49757* SUBOBJECT: Statements for C++. (line 6) 49758* SUBOBJECT_CLEANUP: Statements for C++. (line 6) 49759* subreg: Regs and Memory. (line 97) 49760* subreg and /s: Flags. (line 187) 49761* subreg and /u: Flags. (line 180) 49762* subreg and /u and /v: Flags. (line 170) 49763* subreg, in strict_low_part: RTL Declarations. (line 9) 49764* SUBREG_BYTE: Regs and Memory. (line 285) 49765* SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 170) 49766* SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 180) 49767* SUBREG_PROMOTED_VAR_P: Flags. (line 187) 49768* SUBREG_REG: Regs and Memory. (line 285) 49769* subst iterators in .md files: Subst Iterators. (line 6) 49770* subvM4 instruction pattern: Standard Names. (line 282) 49771* SUCCESS_EXIT_CODE: Host Misc. (line 12) 49772* SUPPORTS_INIT_PRIORITY: Macros for Initialization. 49773 (line 57) 49774* SUPPORTS_ONE_ONLY: Label Output. (line 262) 49775* SUPPORTS_WEAK: Label Output. (line 236) 49776* SWITCHABLE_TARGET: Run-time Target. (line 164) 49777* SWITCH_BODY: Statements for C++. (line 6) 49778* SWITCH_COND: Statements for C++. (line 6) 49779* SWITCH_STMT: Statements for C++. (line 6) 49780* symbolic label: Sharing. (line 20) 49781* SYMBOL_FLAG_ANCHOR: Special Accessors. (line 117) 49782* SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 99) 49783* SYMBOL_FLAG_FUNCTION: Special Accessors. (line 92) 49784* SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 113) 49785* SYMBOL_FLAG_LOCAL: Special Accessors. (line 95) 49786* SYMBOL_FLAG_SMALL: Special Accessors. (line 104) 49787* SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 108) 49788* symbol_ref: Constants. (line 117) 49789* symbol_ref and /f: Flags. (line 165) 49790* symbol_ref and /i: Flags. (line 202) 49791* symbol_ref and /u: Flags. (line 10) 49792* symbol_ref and /v: Flags. (line 206) 49793* symbol_ref, RTL sharing: Sharing. (line 20) 49794* SYMBOL_REF_ANCHOR_P: Special Accessors. (line 117) 49795* SYMBOL_REF_BLOCK: Special Accessors. (line 130) 49796* SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 135) 49797* SYMBOL_REF_CONSTANT: Special Accessors. (line 78) 49798* SYMBOL_REF_DATA: Special Accessors. (line 82) 49799* SYMBOL_REF_DECL: Special Accessors. (line 67) 49800* SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 99) 49801* SYMBOL_REF_FLAG: Flags. (line 206) 49802* SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 277) 49803* SYMBOL_REF_FLAGS: Special Accessors. (line 86) 49804* SYMBOL_REF_FUNCTION_P: Special Accessors. (line 92) 49805* SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 113) 49806* SYMBOL_REF_LOCAL_P: Special Accessors. (line 95) 49807* SYMBOL_REF_SMALL_P: Special Accessors. (line 104) 49808* SYMBOL_REF_TLS_MODEL: Special Accessors. (line 108) 49809* SYMBOL_REF_USED: Flags. (line 197) 49810* SYMBOL_REF_WEAK: Flags. (line 202) 49811* sync_addMODE instruction pattern: Standard Names. (line 1680) 49812* sync_andMODE instruction pattern: Standard Names. (line 1680) 49813* sync_compare_and_swapMODE instruction pattern: Standard Names. 49814 (line 1640) 49815* sync_iorMODE instruction pattern: Standard Names. (line 1680) 49816* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1745) 49817* sync_lock_test_and_setMODE instruction pattern: Standard Names. 49818 (line 1719) 49819* sync_nandMODE instruction pattern: Standard Names. (line 1680) 49820* sync_new_addMODE instruction pattern: Standard Names. (line 1712) 49821* sync_new_andMODE instruction pattern: Standard Names. (line 1712) 49822* sync_new_iorMODE instruction pattern: Standard Names. (line 1712) 49823* sync_new_nandMODE instruction pattern: Standard Names. (line 1712) 49824* sync_new_subMODE instruction pattern: Standard Names. (line 1712) 49825* sync_new_xorMODE instruction pattern: Standard Names. (line 1712) 49826* sync_old_addMODE instruction pattern: Standard Names. (line 1695) 49827* sync_old_andMODE instruction pattern: Standard Names. (line 1695) 49828* sync_old_iorMODE instruction pattern: Standard Names. (line 1695) 49829* sync_old_nandMODE instruction pattern: Standard Names. (line 1695) 49830* sync_old_subMODE instruction pattern: Standard Names. (line 1695) 49831* sync_old_xorMODE instruction pattern: Standard Names. (line 1695) 49832* sync_subMODE instruction pattern: Standard Names. (line 1680) 49833* sync_xorMODE instruction pattern: Standard Names. (line 1680) 49834* SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 176) 49835* SYSROOT_SUFFIX_SPEC: Driver. (line 171) 49836* t-TARGET: Target Fragment. (line 6) 49837* table jump: Basic Blocks. (line 67) 49838* tablejump instruction pattern: Standard Names. (line 1310) 49839* tag: GTY Options. (line 88) 49840* tagging insns: Tagging Insns. (line 6) 49841* tail calls: Tail Calls. (line 6) 49842* TAmode: Machine Modes. (line 158) 49843* target attributes: Target Attributes. (line 6) 49844* target description macros: Target Macros. (line 6) 49845* target functions: Target Structure. (line 6) 49846* target hooks: Target Structure. (line 6) 49847* target makefile fragment: Target Fragment. (line 6) 49848* target specifications: Run-time Target. (line 6) 49849* targetm: Target Structure. (line 6) 49850* targets, makefile: Makefile. (line 6) 49851* TARGET_ABSOLUTE_BIGGEST_ALIGNMENT: Storage Layout. (line 168) 49852* TARGET_ADDRESS_COST: Costs. (line 308) 49853* TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 49854 (line 43) 49855* TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 49856 (line 85) 49857* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 49858 (line 61) 49859* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 49860 (line 69) 49861* TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 49862 (line 36) 49863* TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 49864 (line 76) 49865* TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 49866 (line 50) 49867* TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 402) 49868* TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 809) 49869* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 1114) 49870* TARGET_ALWAYS_STRIP_DOTDOT: Driver. (line 246) 49871* TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 95) 49872* TARGET_ARM_EABI_UNWINDER: Exception Region Output. 49873 (line 133) 49874* TARGET_ARRAY_MODE_SUPPORTED_P: Register Arguments. (line 345) 49875* TARGET_ASAN_SHADOW_OFFSET: Misc. (line 1142) 49876* TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 9) 49877* TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 7) 49878* TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 8) 49879* TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 10) 49880* TARGET_ASM_ASSEMBLE_UNDEFINED_DECL: Label Output. (line 203) 49881* TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 273) 49882* TARGET_ASM_BYTE_OP: Data Output. (line 6) 49883* TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 202) 49884* TARGET_ASM_CLOSE_PAREN: Data Output. (line 133) 49885* TARGET_ASM_CODE_END: File Framework. (line 57) 49886* TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 49887 (line 68) 49888* TARGET_ASM_DECLARE_CONSTANT_NAME: Label Output. (line 149) 49889* TARGET_ASM_DECL_END: Data Output. (line 38) 49890* TARGET_ASM_DESTRUCTOR: Macros for Initialization. 49891 (line 82) 49892* TARGET_ASM_EMIT_EXCEPT_PERSONALITY: Dispatch Tables. (line 80) 49893* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 73) 49894* TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 61) 49895* TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 309) 49896* TARGET_ASM_FILE_END: File Framework. (line 35) 49897* TARGET_ASM_FILE_START: File Framework. (line 8) 49898* TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 16) 49899* TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 29) 49900* TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 82) 49901* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 59) 49902* TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 53) 49903* TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 65) 49904* TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 9) 49905* TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 213) 49906* TARGET_ASM_FUNCTION_SECTION: File Framework. (line 121) 49907* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework. 49908 (line 131) 49909* TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 194) 49910* TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 185) 49911* TARGET_ASM_INIT_SECTIONS: Sections. (line 159) 49912* TARGET_ASM_INTEGER: Data Output. (line 25) 49913* TARGET_ASM_INTERNAL_LABEL: Label Output. (line 352) 49914* TARGET_ASM_JUMP_ALIGN_MAX_SKIP: Alignment Output. (line 21) 49915* TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. 49916 (line 34) 49917* TARGET_ASM_LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 68) 49918* TARGET_ASM_LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 53) 49919* TARGET_ASM_LTO_END: File Framework. (line 52) 49920* TARGET_ASM_LTO_START: File Framework. (line 47) 49921* TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 315) 49922* TARGET_ASM_MERGEABLE_RODATA_PREFIX: Sections. (line 221) 49923* TARGET_ASM_NAMED_SECTION: File Framework. (line 113) 49924* TARGET_ASM_OPEN_PAREN: Data Output. (line 132) 49925* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 42) 49926* TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 42) 49927* TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 103) 49928* TARGET_ASM_OUTPUT_IDENT: File Framework. (line 100) 49929* TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 160) 49930* TARGET_ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 91) 49931* TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 162) 49932* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 207) 49933* TARGET_ASM_RELOC_RW_MASK: Sections. (line 168) 49934* TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 230) 49935* TARGET_ASM_SELECT_SECTION: Sections. (line 179) 49936* TARGET_ASM_TM_CLONE_TABLE_SECTION: Sections. (line 226) 49937* TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 28) 49938* TARGET_ASM_TTYPE: Exception Region Output. 49939 (line 127) 49940* TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 13) 49941* TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 11) 49942* TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 12) 49943* TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 14) 49944* TARGET_ASM_UNIQUE_SECTION: Sections. (line 201) 49945* TARGET_ASM_UNWIND_EMIT: Dispatch Tables. (line 87) 49946* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN: Dispatch Tables. (line 93) 49947* TARGET_ATOMIC_ALIGN_FOR_MODE: Misc. (line 1161) 49948* TARGET_ATOMIC_ASSIGN_EXPAND_FENV: Misc. (line 1167) 49949* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL: Misc. (line 1152) 49950* TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 10) 49951* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P: Target Attributes. (line 17) 49952* TARGET_BINDS_LOCAL_P: Sections. (line 308) 49953* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 906) 49954* TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 899) 49955* TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 285) 49956* TARGET_BUILTIN_CHKP_FUNCTION: Misc. (line 624) 49957* TARGET_BUILTIN_DECL: Misc. (line 603) 49958* TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 261) 49959* TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 107) 49960* TARGET_CALLEE_COPIES: Register Arguments. (line 127) 49961* TARGET_CALL_ARGS: Varargs. (line 123) 49962* TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks. 49963 (line 6) 49964* TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 234) 49965* TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 886) 49966* TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P: Register Classes. (line 590) 49967* TARGET_CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 49968 (line 55) 49969* TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 306) 49970* TARGET_CAN_ELIMINATE: Elimination. (line 73) 49971* TARGET_CAN_FOLLOW_JUMP: Misc. (line 795) 49972* TARGET_CAN_INLINE_P: Target Attributes. (line 165) 49973* TARGET_CAN_USE_DOLOOP_P: Misc. (line 759) 49974* TARGET_CASE_VALUES_THRESHOLD: Misc. (line 46) 49975* TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 49976 (line 120) 49977* TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 26) 49978* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target. (line 119) 49979* TARGET_CHKP_BOUND_MODE: Misc. (line 696) 49980* TARGET_CHKP_BOUND_TYPE: Misc. (line 694) 49981* TARGET_CHKP_FUNCTION_VALUE_BOUNDS: Varargs. (line 182) 49982* TARGET_CHKP_INITIALIZE_BOUNDS: Misc. (line 702) 49983* TARGET_CHKP_MAKE_BOUNDS_CONSTANT: Misc. (line 698) 49984* TARGET_CLASS_LIKELY_SPILLED_P: Register Classes. (line 489) 49985* TARGET_CLASS_MAX_NREGS: Register Classes. (line 505) 49986* TARGET_COMMUTATIVE_P: Misc. (line 802) 49987* TARGET_COMPARE_VERSION_PRIORITY: Misc. (line 736) 49988* TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 25) 49989* TARGET_CONDITIONAL_REGISTER_USAGE: Register Basics. (line 59) 49990* TARGET_CONST_ANCHOR: Misc. (line 1125) 49991* TARGET_CONST_NOT_OK_FOR_DEBUG_P: Addressing Modes. (line 230) 49992* TARGET_CONVERT_TO_TYPE: Misc. (line 1079) 49993* TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 8) 49994* TARGET_CSTORE_MODE: Register Classes. (line 613) 49995* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 86) 49996* TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 37) 49997* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 61) 49998* TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 24) 49999* TARGET_CXX_DECL_MANGLING_CONTEXT: C++ ABI. (line 92) 50000* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 52) 50001* TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 17) 50002* TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 11) 50003* TARGET_CXX_GUARD_TYPE: C++ ABI. (line 6) 50004* TARGET_CXX_IMPLICIT_EXTERN_C: Misc. (line 373) 50005* TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 28) 50006* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 42) 50007* TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 68) 50008* TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 73) 50009* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 79) 50010* TARGET_C_PREINCLUDE: Misc. (line 361) 50011* TARGET_DEBUG_UNWIND_INFO: SDB and DWARF. (line 36) 50012* TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 507) 50013* TARGET_DECLSPEC: Target Attributes. (line 72) 50014* TARGET_DEFAULT_PACK_STRUCT: Misc. (line 446) 50015* TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 129) 50016* TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 55) 50017* TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 437) 50018* TARGET_DELAY_SCHED2: SDB and DWARF. (line 65) 50019* TARGET_DELAY_VARTRACK: SDB and DWARF. (line 69) 50020* TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 221) 50021* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P: Register Classes. (line 583) 50022* TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 55) 50023* TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 16) 50024* TARGET_DWARF_FRAME_REG_MODE: Exception Region Output. 50025 (line 113) 50026* TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 171) 50027* TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 50028 (line 104) 50029* TARGET_EDOM: Library Calls. (line 59) 50030* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 67) 50031* TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 18) 50032* TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 23) 50033* TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 44) 50034* TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 35) 50035* TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 62) 50036* TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 48) 50037* TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 55) 50038* TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 40) 50039* TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 30) 50040* TARGET_ENCODE_SECTION_INFO: Sections. (line 251) 50041* TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes. 50042 (line 82) 50043* TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 127) 50044* TARGET_END_CALL_ARGS: Varargs. (line 137) 50045* TARGET_ENUM_VA_LIST_P: Register Arguments. (line 289) 50046* TARGET_EXCEPT_UNWIND_INFO: Exception Region Output. 50047 (line 45) 50048* TARGET_EXECUTABLE_SUFFIX: Misc. (line 860) 50049* TARGET_EXPAND_BUILTIN: Misc. (line 613) 50050* TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 64) 50051* TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 513) 50052* TARGET_EXPR: Unary and Binary Expressions. 50053 (line 6) 50054* TARGET_EXTRA_INCLUDES: Misc. (line 971) 50055* TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 20) 50056* TARGET_EXTRA_PRE_INCLUDES: Misc. (line 978) 50057* TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 50058 (line 105) 50059* TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 510) 50060* target_flags: Run-time Target. (line 51) 50061* TARGET_FLAGS_REGNUM: MODE_CC Condition Codes. 50062 (line 133) 50063* TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target. 50064 (line 183) 50065* TARGET_FLT_EVAL_METHOD: Type Layout. (line 110) 50066* TARGET_FN_ABI_VA_LIST: Register Arguments. (line 301) 50067* TARGET_FOLD_BUILTIN: Misc. (line 719) 50068* TARGET_FORCE_AT_COMP_DIR: SDB and DWARF. (line 60) 50069* TARGET_FORMAT_TYPES: Misc. (line 999) 50070* TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 8) 50071* TARGET_FUNCTION_ARG: Register Arguments. (line 10) 50072* TARGET_FUNCTION_ARG_ADVANCE: Register Arguments. (line 198) 50073* TARGET_FUNCTION_ARG_BOUNDARY: Register Arguments. (line 252) 50074* TARGET_FUNCTION_ARG_ROUND_BOUNDARY: Register Arguments. (line 258) 50075* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 93) 50076* TARGET_FUNCTION_INCOMING_ARG: Register Arguments. (line 71) 50077* TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 6) 50078* TARGET_FUNCTION_VALUE: Scalar Return. (line 9) 50079* TARGET_FUNCTION_VALUE_REGNO_P: Scalar Return. (line 96) 50080* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc. (line 752) 50081* TARGET_GEN_CCMP_FIRST: Misc. (line 926) 50082* TARGET_GEN_CCMP_NEXT: Misc. (line 937) 50083* TARGET_GET_DRAP_RTX: Misc. (line 1108) 50084* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc. (line 745) 50085* TARGET_GET_PCH_VALIDITY: PCH Target. (line 6) 50086* TARGET_GET_RAW_ARG_MODE: Aggregate Return. (line 81) 50087* TARGET_GET_RAW_RESULT_MODE: Aggregate Return. (line 76) 50088* TARGET_GIMPLE_FOLD_BUILTIN: Misc. (line 729) 50089* TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 311) 50090* TARGET_HANDLE_C_OPTION: Run-time Target. (line 73) 50091* TARGET_HANDLE_OPTION: Run-time Target. (line 59) 50092* TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 50093 (line 141) 50094* TARGET_HAS_IFUNC_P: Misc. (line 1156) 50095* TARGET_HAS_NO_HW_DIVIDE: Library Calls. (line 52) 50096* TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 920) 50097* TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 50098 (line 63) 50099* TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 139) 50100* TARGET_HAVE_SRODATA_SECTION: Sections. (line 297) 50101* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 144) 50102* TARGET_HAVE_TLS: Sections. (line 317) 50103* TARGET_INIT_BUILTINS: Misc. (line 587) 50104* TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 50105 (line 119) 50106* TARGET_INIT_LIBFUNCS: Library Calls. (line 15) 50107* TARGET_INIT_PIC_REG: Register Arguments. (line 91) 50108* TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 80) 50109* TARGET_INSTANTIATE_DECLS: Storage Layout. (line 521) 50110* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 1032) 50111* TARGET_INVALID_BINARY_OP: Misc. (line 1051) 50112* TARGET_INVALID_CONVERSION: Misc. (line 1038) 50113* TARGET_INVALID_PARAMETER_TYPE: Misc. (line 1057) 50114* TARGET_INVALID_RETURN_TYPE: Misc. (line 1064) 50115* TARGET_INVALID_UNARY_OP: Misc. (line 1044) 50116* TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 776) 50117* TARGET_IN_SMALL_DATA_P: Sections. (line 293) 50118* TARGET_KEEP_LEAF_WHEN_PROFILED: Profiling. (line 39) 50119* TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 48) 50120* TARGET_LEGITIMATE_COMBINED_INSN: Misc. (line 790) 50121* TARGET_LEGITIMATE_CONSTANT_P: Addressing Modes. (line 213) 50122* TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 129) 50123* TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes. (line 598) 50124* TARGET_LIBCALL_VALUE: Scalar Return. (line 65) 50125* TARGET_LIBC_HAS_FUNCTION: Library Calls. (line 77) 50126* TARGET_LIBFUNC_GNU_PREFIX: Library Calls. (line 24) 50127* TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 463) 50128* TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments. 50129 (line 369) 50130* TARGET_LIBGCC_SDATA_SECTION: Sections. (line 131) 50131* TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 469) 50132* TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 42) 50133* TARGET_LOAD_BOUNDS_FOR_ARG: Varargs. (line 153) 50134* TARGET_LOAD_RETURNED_BOUNDS: Varargs. (line 172) 50135* TARGET_LOOP_UNROLL_ADJUST: Misc. (line 952) 50136* TARGET_LRA_P: Register Classes. (line 557) 50137* TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 572) 50138* TARGET_MANGLE_ASSEMBLER_NAME: Label Output. (line 328) 50139* TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 241) 50140* TARGET_MANGLE_TYPE: Storage Layout. (line 525) 50141* TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 38) 50142* TARGET_MD_ASM_CLOBBERS: Misc. (line 491) 50143* TARGET_MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 415) 50144* TARGET_MEMMODEL_CHECK: Misc. (line 1147) 50145* TARGET_MEMORY_MOVE_COST: Costs. (line 79) 50146* TARGET_MEM_CONSTRAINT: Addressing Modes. (line 107) 50147* TARGET_MEM_REF: Storage References. (line 6) 50148* TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 45) 50149* TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 37) 50150* TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 32) 50151* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 90) 50152* TARGET_MODE_AFTER: Mode Switching. (line 57) 50153* TARGET_MODE_DEPENDENT_ADDRESS_P: Addressing Modes. (line 196) 50154* TARGET_MODE_EMIT: Mode Switching. (line 42) 50155* TARGET_MODE_ENTRY: Mode Switching. (line 64) 50156* TARGET_MODE_EXIT: Mode Switching. (line 71) 50157* TARGET_MODE_NEEDED: Mode Switching. (line 50) 50158* TARGET_MODE_PRIORITY: Mode Switching. (line 78) 50159* TARGET_MODE_REP_EXTENDED: Misc. (line 175) 50160* TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 479) 50161* TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 64) 50162* TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments. 50163 (line 56) 50164* TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 408) 50165* TARGET_NO_REGISTER_ALLOCATION: SDB and DWARF. (line 73) 50166* TARGET_N_FORMAT_TYPES: Misc. (line 1004) 50167* TARGET_OBJC_CONSTRUCT_STRING_OBJECT: Run-time Target. (line 88) 50168* TARGET_OBJC_DECLARE_CLASS_DEFINITION: Run-time Target. (line 109) 50169* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target. 50170 (line 104) 50171* TARGET_OBJECT_SUFFIX: Misc. (line 855) 50172* TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 45) 50173* TARGET_OFFLOAD_OPTIONS: Misc. (line 1190) 50174* TARGET_OMIT_STRUCT_RETURN_REG: Scalar Return. (line 117) 50175* TARGET_OPTF: Misc. (line 986) 50176* TARGET_OPTION_DEFAULT_PARAMS: Run-time Target. (line 160) 50177* TARGET_OPTION_FUNCTION_VERSIONS: Target Attributes. (line 157) 50178* TARGET_OPTION_INIT_STRUCT: Run-time Target. (line 156) 50179* TARGET_OPTION_OPTIMIZATION_TABLE: Run-time Target. (line 142) 50180* TARGET_OPTION_OVERRIDE: Target Attributes. (line 144) 50181* TARGET_OPTION_POST_STREAM_IN: Target Attributes. (line 125) 50182* TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 137) 50183* TARGET_OPTION_PRINT: Target Attributes. (line 131) 50184* TARGET_OPTION_RESTORE: Target Attributes. (line 119) 50185* TARGET_OPTION_SAVE: Target Attributes. (line 112) 50186* TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 100) 50187* TARGET_OS_CPP_BUILTINS: Run-time Target. (line 41) 50188* TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 1008) 50189* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 1014) 50190* TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 1018) 50191* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 126) 50192* TARGET_PASS_BY_REFERENCE: Register Arguments. (line 115) 50193* TARGET_PCH_VALID_P: PCH Target. (line 11) 50194* TARGET_POSIX_IO: Misc. (line 516) 50195* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 284) 50196* TARGET_PREFERRED_RELOAD_CLASS: Register Classes. (line 213) 50197* TARGET_PREFERRED_RENAME_CLASS: Register Classes. (line 201) 50198* TARGET_PREPARE_PCH_SAVE: PCH Target. (line 34) 50199* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 144) 50200* TARGET_PROFILE_BEFORE_PROLOGUE: Sections. (line 301) 50201* TARGET_PROMOTED_TYPE: Misc. (line 1071) 50202* TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 109) 50203* TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 10) 50204* TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 256) 50205* TARGET_RECORD_OFFLOAD_SYMBOL: Misc. (line 1185) 50206* TARGET_REF_MAY_ALIAS_ERRNO: Register Arguments. (line 322) 50207* TARGET_REGISTER_MOVE_COST: Costs. (line 31) 50208* TARGET_REGISTER_PRIORITY: Register Classes. (line 562) 50209* TARGET_REGISTER_USAGE_LEVELING_P: Register Classes. (line 573) 50210* TARGET_RELAXED_ORDERING: Misc. (line 1023) 50211* TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 708) 50212* TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 15) 50213* TARGET_RETURN_IN_MSB: Scalar Return. (line 124) 50214* TARGET_RETURN_POPS_ARGS: Stack Arguments. (line 98) 50215* TARGET_RTX_COSTS: Costs. (line 277) 50216* TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 329) 50217* TARGET_SCHED_ADJUST_COST: Scheduling. (line 35) 50218* TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 50) 50219* TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 294) 50220* TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 309) 50221* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 101) 50222* TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 255) 50223* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 172) 50224* TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 156) 50225* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 165) 50226* TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 144) 50227* TARGET_SCHED_DISPATCH: Scheduling. (line 363) 50228* TARGET_SCHED_DISPATCH_DO: Scheduling. (line 368) 50229* TARGET_SCHED_EXPOSED_PIPELINE: Scheduling. (line 372) 50230* TARGET_SCHED_FINISH: Scheduling. (line 122) 50231* TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 137) 50232* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling. (line 235) 50233* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling. (line 223) 50234* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 50235 (line 179) 50236* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 50237 (line 207) 50238* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling. (line 240) 50239* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling. (line 250) 50240* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling. (line 245) 50241* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling. (line 229) 50242* TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 313) 50243* TARGET_SCHED_FUSION_PRIORITY: Scheduling. (line 382) 50244* TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 335) 50245* TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 289) 50246* TARGET_SCHED_INIT: Scheduling. (line 111) 50247* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 161) 50248* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 153) 50249* TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 129) 50250* TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 298) 50251* TARGET_SCHED_ISSUE_RATE: Scheduling. (line 11) 50252* TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 267) 50253* TARGET_SCHED_MACRO_FUSION_P: Scheduling. (line 87) 50254* TARGET_SCHED_MACRO_FUSION_PAIR_P: Scheduling. (line 91) 50255* TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 328) 50256* TARGET_SCHED_REASSOCIATION_WIDTH: Scheduling. (line 377) 50257* TARGET_SCHED_REORDER: Scheduling. (line 58) 50258* TARGET_SCHED_REORDER2: Scheduling. (line 75) 50259* TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 305) 50260* TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 347) 50261* TARGET_SCHED_SMS_RES_MII: Scheduling. (line 354) 50262* TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 316) 50263* TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 22) 50264* TARGET_SECONDARY_RELOAD: Register Classes. (line 312) 50265* TARGET_SECTION_TYPE_FLAGS: File Framework. (line 149) 50266* TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 71) 50267* TARGET_SETUP_INCOMING_VARARG_BOUNDS: Varargs. (line 188) 50268* TARGET_SET_CURRENT_FUNCTION: Misc. (line 837) 50269* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 33) 50270* TARGET_SET_UP_BY_PROLOGUE: Tail Calls. (line 29) 50271* TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 138) 50272* TARGET_SIMD_CLONE_ADJUST: Addressing Modes. (line 413) 50273* TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN: Addressing Modes. 50274 (line 405) 50275* TARGET_SIMD_CLONE_USABLE: Addressing Modes. (line 417) 50276* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments. 50277 (line 377) 50278* TARGET_SPILL_CLASS: Register Classes. (line 606) 50279* TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 273) 50280* TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 50281 (line 16) 50282* TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 50283 (line 6) 50284* TARGET_STATIC_CHAIN: Frame Registers. (line 90) 50285* TARGET_STORE_BOUNDS_FOR_ARG: Varargs. (line 163) 50286* TARGET_STORE_RETURNED_BOUNDS: Varargs. (line 177) 50287* TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 107) 50288* TARGET_STRING_OBJECT_REF_TYPE_P: Run-time Target. (line 114) 50289* TARGET_STRIP_NAME_ENCODING: Sections. (line 288) 50290* TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 44) 50291* TARGET_SUPPORTS_SPLIT_STACK: Stack Smashing Protection. 50292 (line 25) 50293* TARGET_SUPPORTS_WEAK: Label Output. (line 244) 50294* TARGET_SUPPORTS_WIDE_INT: Misc. (line 1198) 50295* TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 50296 (line 98) 50297* TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 74) 50298* TARGET_TRAMPOLINE_INIT: Trampolines. (line 54) 50299* TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 828) 50300* TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 50301 (line 72) 50302* TARGET_UNWIND_WORD_MODE: Storage Layout. (line 475) 50303* TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 1104) 50304* TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 123) 50305* TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 53) 50306* TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 248) 50307* TARGET_USE_BLOCKS_FOR_DECL_P: Addressing Modes. (line 255) 50308* TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs. (line 164) 50309* TARGET_USE_JCR_SECTION: Misc. (line 1086) 50310* TARGET_USE_PSEUDO_PIC_REG: Register Arguments. (line 87) 50311* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 66) 50312* TARGET_VALID_POINTER_MODE: Register Arguments. (line 317) 50313* TARGET_VECTORIZE_ADD_STMT_COST: Addressing Modes. (line 367) 50314* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes. 50315 (line 350) 50316* TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 312) 50317* TARGET_VECTORIZE_BUILTIN_GATHER: Addressing Modes. (line 398) 50318* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 271) 50319* TARGET_VECTORIZE_BUILTIN_TM_LOAD: Addressing Modes. (line 390) 50320* TARGET_VECTORIZE_BUILTIN_TM_STORE: Addressing Modes. (line 394) 50321* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 50322 (line 297) 50323* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 50324 (line 324) 50325* TARGET_VECTORIZE_DESTROY_COST_DATA: Addressing Modes. (line 385) 50326* TARGET_VECTORIZE_FINISH_COST: Addressing Modes. (line 378) 50327* TARGET_VECTORIZE_INIT_COST: Addressing Modes. (line 358) 50328* TARGET_VECTORIZE_PREFERRED_SIMD_MODE: Addressing Modes. (line 343) 50329* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. 50330 (line 333) 50331* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 50332 (line 303) 50333* TARGET_VECTORIZE_VEC_PERM_CONST_OK: Addressing Modes. (line 308) 50334* TARGET_VECTOR_ALIGNMENT: Storage Layout. (line 268) 50335* TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 340) 50336* TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 309) 50337* TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 303) 50338* TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 292) 50339* TARGET_WANT_DEBUG_PUB_SECTIONS: SDB and DWARF. (line 55) 50340* TARGET_WARN_FUNC_RETURN: Tail Calls. (line 35) 50341* TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 280) 50342* TCmode: Machine Modes. (line 199) 50343* TDmode: Machine Modes. (line 97) 50344* TEMPLATE_DECL: Declarations. (line 6) 50345* Temporaries: Temporaries. (line 6) 50346* termination routines: Initialization. (line 6) 50347* testing constraints: C Constraint Interface. 50348 (line 6) 50349* TEXT_SECTION_ASM_OP: Sections. (line 37) 50350* TFmode: Machine Modes. (line 101) 50351* The Language: The Language. (line 6) 50352* THEN_CLAUSE: Statements for C++. (line 6) 50353* THREAD_MODEL_SPEC: Driver. (line 162) 50354* THROW_EXPR: Unary and Binary Expressions. 50355 (line 6) 50356* THUNK_DECL: Declarations. (line 6) 50357* THUNK_DELTA: Declarations. (line 6) 50358* TImode: Machine Modes. (line 48) 50359* TImode, in insn: Insns. (line 268) 50360* TLS_COMMON_ASM_OP: Sections. (line 80) 50361* TLS_SECTION_ASM_FLAG: Sections. (line 85) 50362* tm.h macros: Target Macros. (line 6) 50363* TQFmode: Machine Modes. (line 65) 50364* TQmode: Machine Modes. (line 122) 50365* trampolines for nested functions: Trampolines. (line 6) 50366* TRAMPOLINE_ALIGNMENT: Trampolines. (line 48) 50367* TRAMPOLINE_SECTION: Trampolines. (line 39) 50368* TRAMPOLINE_SIZE: Trampolines. (line 44) 50369* TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 110) 50370* trap instruction pattern: Standard Names. (line 1591) 50371* tree: Tree overview. (line 6) 50372* tree <1>: Macros and Functions. 50373 (line 6) 50374* Tree SSA: Tree SSA. (line 6) 50375* TREE_CHAIN: Macros and Functions. 50376 (line 6) 50377* TREE_CODE: Tree overview. (line 6) 50378* tree_fits_shwi_p: Constant expressions. 50379 (line 6) 50380* tree_fits_uhwi_p: Constant expressions. 50381 (line 6) 50382* TREE_INT_CST_ELT: Constant expressions. 50383 (line 6) 50384* tree_int_cst_equal: Constant expressions. 50385 (line 6) 50386* TREE_INT_CST_LOW: Constant expressions. 50387 (line 6) 50388* tree_int_cst_lt: Constant expressions. 50389 (line 6) 50390* TREE_INT_CST_NUNITS: Constant expressions. 50391 (line 6) 50392* TREE_LIST: Containers. (line 6) 50393* TREE_OPERAND: Expression trees. (line 6) 50394* TREE_PUBLIC: Function Basics. (line 6) 50395* TREE_PUBLIC <1>: Function Properties. 50396 (line 28) 50397* TREE_PURPOSE: Containers. (line 6) 50398* TREE_READONLY: Function Properties. 50399 (line 37) 50400* tree_size: Macros and Functions. 50401 (line 13) 50402* TREE_STATIC: Function Properties. 50403 (line 31) 50404* TREE_STRING_LENGTH: Constant expressions. 50405 (line 6) 50406* TREE_STRING_POINTER: Constant expressions. 50407 (line 6) 50408* TREE_THIS_VOLATILE: Function Properties. 50409 (line 34) 50410* tree_to_shwi: Constant expressions. 50411 (line 6) 50412* tree_to_uhwi: Constant expressions. 50413 (line 6) 50414* TREE_TYPE: Macros and Functions. 50415 (line 6) 50416* TREE_TYPE <1>: Types. (line 6) 50417* TREE_TYPE <2>: Working with declarations. 50418 (line 11) 50419* TREE_TYPE <3>: Expression trees. (line 6) 50420* TREE_TYPE <4>: Expression trees. (line 17) 50421* TREE_TYPE <5>: Function Basics. (line 47) 50422* TREE_TYPE <6>: Types for C++. (line 6) 50423* TREE_VALUE: Containers. (line 6) 50424* TREE_VEC: Containers. (line 6) 50425* TREE_VEC_ELT: Containers. (line 6) 50426* TREE_VEC_LENGTH: Containers. (line 6) 50427* TRULY_NOOP_TRUNCATION: Misc. (line 162) 50428* truncate: Conversions. (line 38) 50429* truncMN2 instruction pattern: Standard Names. (line 965) 50430* TRUNC_DIV_EXPR: Unary and Binary Expressions. 50431 (line 6) 50432* TRUNC_MOD_EXPR: Unary and Binary Expressions. 50433 (line 6) 50434* TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 50435 (line 6) 50436* TRUTH_AND_EXPR: Unary and Binary Expressions. 50437 (line 6) 50438* TRUTH_NOT_EXPR: Unary and Binary Expressions. 50439 (line 6) 50440* TRUTH_ORIF_EXPR: Unary and Binary Expressions. 50441 (line 6) 50442* TRUTH_OR_EXPR: Unary and Binary Expressions. 50443 (line 6) 50444* TRUTH_XOR_EXPR: Unary and Binary Expressions. 50445 (line 6) 50446* TRY_BLOCK: Statements for C++. (line 6) 50447* TRY_HANDLERS: Statements for C++. (line 6) 50448* TRY_STMTS: Statements for C++. (line 6) 50449* Tuple specific accessors: Tuple specific accessors. 50450 (line 6) 50451* tuples: Tuple representation. 50452 (line 6) 50453* type: Types. (line 6) 50454* type declaration: Declarations. (line 6) 50455* TYPENAME_TYPE: Types for C++. (line 6) 50456* TYPENAME_TYPE_FULLNAME: Types. (line 6) 50457* TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 50458* TYPEOF_TYPE: Types for C++. (line 6) 50459* TYPE_ALIGN: Types. (line 6) 50460* TYPE_ALIGN <1>: Types. (line 30) 50461* TYPE_ALIGN <2>: Types for C++. (line 6) 50462* TYPE_ALIGN <3>: Types for C++. (line 44) 50463* TYPE_ARG_TYPES: Types. (line 6) 50464* TYPE_ARG_TYPES <1>: Types for C++. (line 6) 50465* TYPE_ASM_OP: Label Output. (line 76) 50466* TYPE_ATTRIBUTES: Attributes. (line 24) 50467* TYPE_BINFO: Classes. (line 6) 50468* TYPE_BUILT_IN: Types for C++. (line 66) 50469* TYPE_CANONICAL: Types. (line 6) 50470* TYPE_CANONICAL <1>: Types. (line 41) 50471* TYPE_CONTEXT: Types. (line 6) 50472* TYPE_CONTEXT <1>: Types for C++. (line 6) 50473* TYPE_DECL: Declarations. (line 6) 50474* TYPE_FIELDS: Types. (line 6) 50475* TYPE_FIELDS <1>: Types for C++. (line 6) 50476* TYPE_FIELDS <2>: Classes. (line 6) 50477* TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96) 50478* TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81) 50479* TYPE_HAS_MUTABLE_P: Classes. (line 86) 50480* TYPE_HAS_NEW_OPERATOR: Classes. (line 93) 50481* TYPE_MAIN_VARIANT: Types. (line 6) 50482* TYPE_MAIN_VARIANT <1>: Types. (line 19) 50483* TYPE_MAIN_VARIANT <2>: Types for C++. (line 6) 50484* TYPE_MAX_VALUE: Types. (line 6) 50485* TYPE_METHODS: Classes. (line 6) 50486* TYPE_METHOD_BASETYPE: Types. (line 6) 50487* TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 50488* TYPE_MIN_VALUE: Types. (line 6) 50489* TYPE_NAME: Types. (line 6) 50490* TYPE_NAME <1>: Types. (line 33) 50491* TYPE_NAME <2>: Types for C++. (line 6) 50492* TYPE_NAME <3>: Types for C++. (line 47) 50493* TYPE_NOTHROW_P: Functions for C++. (line 154) 50494* TYPE_OFFSET_BASETYPE: Types. (line 6) 50495* TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 50496* TYPE_OPERAND_FMT: Label Output. (line 87) 50497* TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104) 50498* TYPE_OVERLOADS_ARROW: Classes. (line 107) 50499* TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100) 50500* TYPE_POLYMORPHIC_P: Classes. (line 77) 50501* TYPE_PRECISION: Types. (line 6) 50502* TYPE_PRECISION <1>: Types for C++. (line 6) 50503* TYPE_PTRDATAMEM_P: Types for C++. (line 6) 50504* TYPE_PTRDATAMEM_P <1>: Types for C++. (line 69) 50505* TYPE_PTRFN_P: Types for C++. (line 76) 50506* TYPE_PTROBV_P: Types for C++. (line 6) 50507* TYPE_PTROB_P: Types for C++. (line 79) 50508* TYPE_PTR_P: Types for C++. (line 72) 50509* TYPE_QUAL_CONST: Types. (line 6) 50510* TYPE_QUAL_CONST <1>: Types for C++. (line 6) 50511* TYPE_QUAL_RESTRICT: Types. (line 6) 50512* TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 50513* TYPE_QUAL_VOLATILE: Types. (line 6) 50514* TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 50515* TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 50516* TYPE_SIZE: Types. (line 6) 50517* TYPE_SIZE <1>: Types. (line 25) 50518* TYPE_SIZE <2>: Types for C++. (line 6) 50519* TYPE_SIZE <3>: Types for C++. (line 39) 50520* TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 50521* TYPE_STRUCTURAL_EQUALITY_P <1>: Types. (line 77) 50522* TYPE_UNQUALIFIED: Types. (line 6) 50523* TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 50524* TYPE_VFIELD: Classes. (line 6) 50525* UDAmode: Machine Modes. (line 170) 50526* udiv: Arithmetic. (line 130) 50527* udivM3 instruction pattern: Standard Names. (line 266) 50528* udivmodM4 instruction pattern: Standard Names. (line 550) 50529* udot_prodM instruction pattern: Standard Names. (line 370) 50530* UDQmode: Machine Modes. (line 138) 50531* UHAmode: Machine Modes. (line 162) 50532* UHQmode: Machine Modes. (line 130) 50533* UINT16_TYPE: Type Layout. (line 220) 50534* UINT32_TYPE: Type Layout. (line 221) 50535* UINT64_TYPE: Type Layout. (line 222) 50536* UINT8_TYPE: Type Layout. (line 219) 50537* UINTMAX_TYPE: Type Layout. (line 203) 50538* UINTPTR_TYPE: Type Layout. (line 240) 50539* UINT_FAST16_TYPE: Type Layout. (line 236) 50540* UINT_FAST32_TYPE: Type Layout. (line 237) 50541* UINT_FAST64_TYPE: Type Layout. (line 238) 50542* UINT_FAST8_TYPE: Type Layout. (line 235) 50543* UINT_LEAST16_TYPE: Type Layout. (line 228) 50544* UINT_LEAST32_TYPE: Type Layout. (line 229) 50545* UINT_LEAST64_TYPE: Type Layout. (line 230) 50546* UINT_LEAST8_TYPE: Type Layout. (line 227) 50547* umaddMN4 instruction pattern: Standard Names. (line 497) 50548* umax: Arithmetic. (line 149) 50549* umaxM3 instruction pattern: Standard Names. (line 266) 50550* umin: Arithmetic. (line 149) 50551* uminM3 instruction pattern: Standard Names. (line 266) 50552* umod: Arithmetic. (line 136) 50553* umodM3 instruction pattern: Standard Names. (line 266) 50554* umsubMN4 instruction pattern: Standard Names. (line 521) 50555* umulhisi3 instruction pattern: Standard Names. (line 469) 50556* umulM3_highpart instruction pattern: Standard Names. (line 483) 50557* umulqihi3 instruction pattern: Standard Names. (line 469) 50558* umulsidi3 instruction pattern: Standard Names. (line 469) 50559* umulvM4 instruction pattern: Standard Names. (line 285) 50560* unchanging: Flags. (line 296) 50561* unchanging, in call_insn: Flags. (line 19) 50562* unchanging, in jump_insn, call_insn and insn: Flags. (line 39) 50563* unchanging, in mem: Flags. (line 134) 50564* unchanging, in subreg: Flags. (line 170) 50565* unchanging, in subreg <1>: Flags. (line 180) 50566* unchanging, in symbol_ref: Flags. (line 10) 50567* UNEQ_EXPR: Unary and Binary Expressions. 50568 (line 6) 50569* UNGE_EXPR: Unary and Binary Expressions. 50570 (line 6) 50571* UNGT_EXPR: Unary and Binary Expressions. 50572 (line 6) 50573* unions, returning: Interface. (line 10) 50574* UNION_TYPE: Types. (line 6) 50575* UNION_TYPE <1>: Classes. (line 6) 50576* UNITS_PER_WORD: Storage Layout. (line 60) 50577* UNKNOWN_TYPE: Types. (line 6) 50578* UNKNOWN_TYPE <1>: Types for C++. (line 6) 50579* UNLE_EXPR: Unary and Binary Expressions. 50580 (line 6) 50581* UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 48) 50582* UNLT_EXPR: Unary and Binary Expressions. 50583 (line 6) 50584* UNORDERED_EXPR: Unary and Binary Expressions. 50585 (line 6) 50586* unshare_all_rtl: Sharing. (line 58) 50587* unsigned division: Arithmetic. (line 130) 50588* unsigned division with unsigned saturation: Arithmetic. (line 130) 50589* unsigned greater than: Comparisons. (line 64) 50590* unsigned greater than <1>: Comparisons. (line 72) 50591* unsigned less than: Comparisons. (line 68) 50592* unsigned less than <1>: Comparisons. (line 76) 50593* unsigned minimum and maximum: Arithmetic. (line 149) 50594* unsigned_fix: Conversions. (line 77) 50595* unsigned_float: Conversions. (line 62) 50596* unsigned_fract_convert: Conversions. (line 97) 50597* unsigned_sat_fract: Conversions. (line 103) 50598* unspec: Side Effects. (line 299) 50599* unspec <1>: Constant Definitions. 50600 (line 111) 50601* unspec_volatile: Side Effects. (line 299) 50602* unspec_volatile <1>: Constant Definitions. 50603 (line 99) 50604* untyped_call instruction pattern: Standard Names. (line 1207) 50605* untyped_return instruction pattern: Standard Names. (line 1270) 50606* UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 50607* update_ssa: SSA. (line 74) 50608* update_stmt: Manipulating GIMPLE statements. 50609 (line 140) 50610* update_stmt <1>: SSA Operands. (line 6) 50611* update_stmt_if_modified: Manipulating GIMPLE statements. 50612 (line 143) 50613* UQQmode: Machine Modes. (line 126) 50614* usaddM3 instruction pattern: Standard Names. (line 266) 50615* usadM instruction pattern: Standard Names. (line 379) 50616* USAmode: Machine Modes. (line 166) 50617* usashlM3 instruction pattern: Standard Names. (line 553) 50618* usdivM3 instruction pattern: Standard Names. (line 266) 50619* use: Side Effects. (line 168) 50620* used: Flags. (line 314) 50621* used, in symbol_ref: Flags. (line 197) 50622* user: GTY Options. (line 252) 50623* user gc: User GC. (line 6) 50624* USER_LABEL_PREFIX: Instruction Output. (line 152) 50625* USE_C_ALLOCA: Host Misc. (line 19) 50626* USE_LD_AS_NEEDED: Driver. (line 135) 50627* USE_LOAD_POST_DECREMENT: Costs. (line 233) 50628* USE_LOAD_POST_INCREMENT: Costs. (line 228) 50629* USE_LOAD_PRE_DECREMENT: Costs. (line 243) 50630* USE_LOAD_PRE_INCREMENT: Costs. (line 238) 50631* USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 193) 50632* USE_STORE_POST_DECREMENT: Costs. (line 253) 50633* USE_STORE_POST_INCREMENT: Costs. (line 248) 50634* USE_STORE_PRE_DECREMENT: Costs. (line 263) 50635* USE_STORE_PRE_INCREMENT: Costs. (line 258) 50636* USING_STMT: Statements for C++. (line 6) 50637* usmaddMN4 instruction pattern: Standard Names. (line 505) 50638* usmsubMN4 instruction pattern: Standard Names. (line 529) 50639* usmulhisi3 instruction pattern: Standard Names. (line 473) 50640* usmulM3 instruction pattern: Standard Names. (line 266) 50641* usmulqihi3 instruction pattern: Standard Names. (line 473) 50642* usmulsidi3 instruction pattern: Standard Names. (line 473) 50643* usnegM2 instruction pattern: Standard Names. (line 575) 50644* USQmode: Machine Modes. (line 134) 50645* ussubM3 instruction pattern: Standard Names. (line 266) 50646* usum_widenM3 instruction pattern: Standard Names. (line 388) 50647* us_ashift: Arithmetic. (line 173) 50648* us_minus: Arithmetic. (line 38) 50649* us_mult: Arithmetic. (line 93) 50650* us_neg: Arithmetic. (line 82) 50651* us_plus: Arithmetic. (line 14) 50652* us_truncate: Conversions. (line 48) 50653* UTAmode: Machine Modes. (line 174) 50654* UTQmode: Machine Modes. (line 142) 50655* V in constraint: Simple Constraints. (line 43) 50656* values, returned by functions: Scalar Return. (line 6) 50657* varargs implementation: Varargs. (line 6) 50658* variable: Declarations. (line 6) 50659* Variable Location Debug Information in RTL: Debug Information. 50660 (line 6) 50661* VAR_DECL: Declarations. (line 6) 50662* var_location: Debug Information. (line 14) 50663* vashlM3 instruction pattern: Standard Names. (line 567) 50664* vashrM3 instruction pattern: Standard Names. (line 567) 50665* VA_ARG_EXPR: Unary and Binary Expressions. 50666 (line 6) 50667* vcondMN instruction pattern: Standard Names. (line 213) 50668* vector: Containers. (line 6) 50669* vector operations: Vector Operations. (line 6) 50670* VECTOR_CST: Constant expressions. 50671 (line 6) 50672* VECTOR_STORE_FLAG_VALUE: Misc. (line 293) 50673* vec_concat: Vector Operations. (line 28) 50674* vec_duplicate: Vector Operations. (line 33) 50675* vec_extractM instruction pattern: Standard Names. (line 203) 50676* vec_initM instruction pattern: Standard Names. (line 208) 50677* vec_load_lanesMN instruction pattern: Standard Names. (line 165) 50678* VEC_LSHIFT_EXPR: Vectors. (line 6) 50679* vec_merge: Vector Operations. (line 11) 50680* VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 50681* VEC_PACK_SAT_EXPR: Vectors. (line 6) 50682* vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 414) 50683* vec_pack_ssat_M instruction pattern: Standard Names. (line 407) 50684* VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 50685* vec_pack_trunc_M instruction pattern: Standard Names. (line 400) 50686* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 414) 50687* vec_pack_usat_M instruction pattern: Standard Names. (line 407) 50688* vec_permM instruction pattern: Standard Names. (line 223) 50689* vec_perm_constM instruction pattern: Standard Names. (line 239) 50690* VEC_RSHIFT_EXPR: Vectors. (line 6) 50691* vec_select: Vector Operations. (line 19) 50692* vec_setM instruction pattern: Standard Names. (line 198) 50693* vec_shr_M instruction pattern: Standard Names. (line 394) 50694* vec_store_lanesMN instruction pattern: Standard Names. (line 187) 50695* vec_unpacks_float_hi_M instruction pattern: Standard Names. 50696 (line 435) 50697* vec_unpacks_float_lo_M instruction pattern: Standard Names. 50698 (line 435) 50699* vec_unpacks_hi_M instruction pattern: Standard Names. (line 421) 50700* vec_unpacks_lo_M instruction pattern: Standard Names. (line 421) 50701* vec_unpacku_float_hi_M instruction pattern: Standard Names. 50702 (line 435) 50703* vec_unpacku_float_lo_M instruction pattern: Standard Names. 50704 (line 435) 50705* vec_unpacku_hi_M instruction pattern: Standard Names. (line 428) 50706* vec_unpacku_lo_M instruction pattern: Standard Names. (line 428) 50707* VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 50708* VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 50709* VEC_UNPACK_HI_EXPR: Vectors. (line 6) 50710* VEC_UNPACK_LO_EXPR: Vectors. (line 6) 50711* VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 50712* VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 50713* vec_widen_smult_even_M instruction pattern: Standard Names. 50714 (line 444) 50715* vec_widen_smult_hi_M instruction pattern: Standard Names. (line 444) 50716* vec_widen_smult_lo_M instruction pattern: Standard Names. (line 444) 50717* vec_widen_smult_odd_M instruction pattern: Standard Names. (line 444) 50718* vec_widen_sshiftl_hi_M instruction pattern: Standard Names. 50719 (line 455) 50720* vec_widen_sshiftl_lo_M instruction pattern: Standard Names. 50721 (line 455) 50722* vec_widen_umult_even_M instruction pattern: Standard Names. 50723 (line 444) 50724* vec_widen_umult_hi_M instruction pattern: Standard Names. (line 444) 50725* vec_widen_umult_lo_M instruction pattern: Standard Names. (line 444) 50726* vec_widen_umult_odd_M instruction pattern: Standard Names. (line 444) 50727* vec_widen_ushiftl_hi_M instruction pattern: Standard Names. 50728 (line 455) 50729* vec_widen_ushiftl_lo_M instruction pattern: Standard Names. 50730 (line 455) 50731* verify_flow_info: Maintaining the CFG. 50732 (line 117) 50733* virtual operands: SSA Operands. (line 6) 50734* VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 50735* VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 50736* VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 50737* VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 50738* VLIW: Processor pipeline description. 50739 (line 6) 50740* VLIW <1>: Processor pipeline description. 50741 (line 223) 50742* vlshrM3 instruction pattern: Standard Names. (line 567) 50743* VMS: Filesystem. (line 37) 50744* VMS_DEBUGGING_INFO: VMS Debug. (line 8) 50745* void: Misc. (line 685) 50746* void <1>: Misc. (line 690) 50747* VOIDmode: Machine Modes. (line 192) 50748* VOID_TYPE: Types. (line 6) 50749* volatil: Flags. (line 328) 50750* volatil, in insn, call_insn, jump_insn, code_label, jump_table_data, barrier, and note: Flags. 50751 (line 44) 50752* volatil, in label_ref and reg_label: Flags. (line 65) 50753* volatil, in mem, asm_operands, and asm_input: Flags. (line 76) 50754* volatil, in reg: Flags. (line 98) 50755* volatil, in subreg: Flags. (line 170) 50756* volatil, in subreg <1>: Flags. (line 180) 50757* volatil, in symbol_ref: Flags. (line 206) 50758* volatile memory references: Flags. (line 329) 50759* volatile, in prefetch: Flags. (line 214) 50760* voting between constraint alternatives: Class Preferences. (line 6) 50761* vrotlM3 instruction pattern: Standard Names. (line 567) 50762* vrotrM3 instruction pattern: Standard Names. (line 567) 50763* walk_dominator_tree: SSA. (line 227) 50764* walk_gimple_op: Statement and operand traversals. 50765 (line 30) 50766* walk_gimple_seq: Statement and operand traversals. 50767 (line 47) 50768* walk_gimple_stmt: Statement and operand traversals. 50769 (line 10) 50770* WCHAR_TYPE: Type Layout. (line 171) 50771* WCHAR_TYPE_SIZE: Type Layout. (line 179) 50772* which_alternative: Output Statement. (line 58) 50773* WHILE_BODY: Statements for C++. (line 6) 50774* WHILE_COND: Statements for C++. (line 6) 50775* WHILE_STMT: Statements for C++. (line 6) 50776* whopr: LTO. (line 6) 50777* WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 116) 50778* window_save instruction pattern: Standard Names. (line 1562) 50779* WINT_TYPE: Type Layout. (line 184) 50780* WORDS_BIG_ENDIAN: Storage Layout. (line 28) 50781* WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 215) 50782* word_mode: Machine Modes. (line 367) 50783* WORD_REGISTER_OPERATIONS: Misc. (line 53) 50784* wpa: LTO. (line 6) 50785* X in constraint: Simple Constraints. (line 122) 50786* x-HOST: Host Fragment. (line 6) 50787* XCmode: Machine Modes. (line 199) 50788* XCOFF_DEBUGGING_INFO: DBX Options. (line 12) 50789* XEXP: Accessors. (line 6) 50790* XFmode: Machine Modes. (line 82) 50791* XImode: Machine Modes. (line 54) 50792* XINT: Accessors. (line 6) 50793* xm-MACHINE.h: Filesystem. (line 6) 50794* xm-MACHINE.h <1>: Host Misc. (line 6) 50795* xor: Arithmetic. (line 168) 50796* xor, canonicalization of: Insn Canonicalizations. 50797 (line 78) 50798* xorM3 instruction pattern: Standard Names. (line 266) 50799* XSTR: Accessors. (line 6) 50800* XVEC: Accessors. (line 41) 50801* XVECEXP: Accessors. (line 48) 50802* XVECLEN: Accessors. (line 44) 50803* XWINT: Accessors. (line 6) 50804* zero_extend: Conversions. (line 28) 50805* zero_extendMN2 instruction pattern: Standard Names. (line 975) 50806* zero_extract: Bit-Fields. (line 30) 50807* zero_extract, canonicalization of: Insn Canonicalizations. 50808 (line 87) 50809 50810 50811 50812Tag Table: 50813Node: Top1789 50814Node: Contributing4971 50815Node: Portability5700 50816Node: Interface7488 50817Node: Libgcc10529 50818Node: Integer library routines12356 50819Node: Soft float library routines19324 50820Node: Decimal float library routines31262 50821Node: Fixed-point fractional library routines47020 50822Node: Exception handling routines147416 50823Node: Miscellaneous routines148523 50824Node: Languages150643 50825Node: Source Tree152190 50826Node: Configure Terms152772 50827Node: Top Level155728 50828Node: gcc Directory159215 50829Node: Subdirectories160167 50830Node: Configuration162335 50831Node: Config Fragments163055 50832Node: System Config164280 50833Node: Configuration Files165216 50834Node: Build168033 50835Node: Makefile168445 50836Ref: Makefile-Footnote-1175249 50837Ref: Makefile-Footnote-2175396 50838Node: Library Files175470 50839Node: Headers176032 50840Node: Documentation178115 50841Node: Texinfo Manuals178974 50842Node: Man Page Generation181303 50843Node: Miscellaneous Docs183216 50844Node: Front End184603 50845Node: Front End Directory188277 50846Node: Front End Config189593 50847Node: Front End Makefile192409 50848Node: Back End196177 50849Node: Testsuites199958 50850Node: Test Idioms200889 50851Node: Test Directives204287 50852Node: Directives204814 50853Node: Selectors215111 50854Node: Effective-Target Keywords216467 50855Ref: arm_neon_ok224330 50856Ref: arm_neonv2_ok224488 50857Ref: arm_neon_fp16_ok224660 50858Ref: arm_vfp3_ok225100 50859Node: Add Options235632 50860Node: Require Support236949 50861Node: Final Actions239456 50862Node: Ada Tests244621 50863Node: C Tests245952 50864Node: libgcj Tests250347 50865Node: LTO Testing251474 50866Node: gcov Testing253122 50867Node: profopt Testing256112 50868Node: compat Testing257827 50869Node: Torture Tests262067 50870Node: Options263682 50871Node: Option file format264123 50872Node: Option properties271112 50873Node: Passes284662 50874Node: Parsing pass285552 50875Node: Cilk Plus Transformation289085 50876Node: Gimplification pass292467 50877Node: Pass manager294312 50878Node: Tree SSA passes296158 50879Node: RTL passes317343 50880Node: Optimization info329647 50881Node: Dump setup330466 50882Node: Optimization groups331595 50883Node: Dump files and streams332484 50884Node: Dump output verbosity333682 50885Node: Dump types334738 50886Node: Dump examples336228 50887Node: GENERIC337574 50888Node: Deficiencies339450 50889Node: Tree overview339691 50890Node: Macros and Functions343815 50891Node: Identifiers344640 50892Node: Containers346249 50893Node: Types347406 50894Node: Declarations359480 50895Node: Working with declarations359975 50896Node: Internal structure365579 50897Node: Current structure hierarchy365963 50898Node: Adding new DECL node types368056 50899Node: Attributes372340 50900Node: Expression trees373584 50901Node: Constant expressions375338 50902Node: Storage References378634 50903Node: Unary and Binary Expressions382153 50904Node: Vectors402301 50905Node: Statements407496 50906Node: Basic Statements408028 50907Node: Blocks412535 50908Node: Statement Sequences413939 50909Node: Empty Statements414272 50910Node: Jumps414846 50911Node: Cleanups415499 50912Node: OpenMP417266 50913Node: OpenACC423111 50914Node: Functions424152 50915Node: Function Basics424623 50916Node: Function Properties428307 50917Node: Language-dependent trees431088 50918Node: C and C++ Trees431975 50919Node: Types for C++434879 50920Node: Namespaces439849 50921Node: Classes442955 50922Node: Functions for C++448032 50923Node: Statements for C++454283 50924Node: C++ Expressions463060 50925Node: Java Trees464565 50926Node: GIMPLE464678 50927Node: Tuple representation468343 50928Node: Class hierarchy of GIMPLE statements475348 50929Node: GIMPLE instruction set480351 50930Node: GIMPLE Exception Handling481983 50931Node: Temporaries483895 50932Ref: Temporaries-Footnote-1485213 50933Node: Operands485278 50934Node: Compound Expressions486039 50935Node: Compound Lvalues486273 50936Node: Conditional Expressions487035 50937Node: Logical Operators487694 50938Node: Manipulating GIMPLE statements494558 50939Node: Tuple specific accessors500494 50940Node: GIMPLE_ASM501273 50941Node: GIMPLE_ASSIGN503656 50942Node: GIMPLE_BIND508360 50943Node: GIMPLE_CALL510174 50944Node: GIMPLE_CATCH514202 50945Node: GIMPLE_COND515352 50946Node: GIMPLE_DEBUG518147 50947Node: GIMPLE_EH_FILTER521520 50948Node: GIMPLE_LABEL523083 50949Node: GIMPLE_GOTO523696 50950Node: GIMPLE_NOP524219 50951Node: GIMPLE_OMP_ATOMIC_LOAD524581 50952Node: GIMPLE_OMP_ATOMIC_STORE525577 50953Node: GIMPLE_OMP_CONTINUE526276 50954Node: GIMPLE_OMP_CRITICAL527755 50955Node: GIMPLE_OMP_FOR528749 50956Node: GIMPLE_OMP_MASTER532165 50957Node: GIMPLE_OMP_ORDERED532543 50958Node: GIMPLE_OMP_PARALLEL532937 50959Node: GIMPLE_OMP_RETURN535706 50960Node: GIMPLE_OMP_SECTION536351 50961Node: GIMPLE_OMP_SECTIONS537011 50962Node: GIMPLE_OMP_SINGLE538621 50963Node: GIMPLE_PHI539567 50964Node: GIMPLE_RESX540846 50965Node: GIMPLE_RETURN541565 50966Node: GIMPLE_SWITCH542139 50967Node: GIMPLE_TRY544014 50968Node: GIMPLE_WITH_CLEANUP_EXPR545786 50969Node: GIMPLE sequences546665 50970Node: Sequence iterators549871 50971Node: Adding a new GIMPLE statement code558328 50972Node: Statement and operand traversals559703 50973Node: Tree SSA562295 50974Node: Annotations564083 50975Node: SSA Operands564488 50976Node: SSA578562 50977Node: Alias analysis589594 50978Node: Memory model593368 50979Node: RTL594727 50980Node: RTL Objects596915 50981Node: RTL Classes600789 50982Node: Accessors605835 50983Node: Special Accessors608229 50984Node: Flags614016 50985Node: Machine Modes628780 50986Node: Constants642428 50987Node: Regs and Memory650515 50988Node: Arithmetic668403 50989Node: Comparisons678448 50990Node: Bit-Fields682740 50991Node: Vector Operations684292 50992Node: Conversions686173 50993Node: RTL Declarations690671 50994Node: Side Effects691492 50995Node: Incdec708503 50996Node: Assembler711839 50997Node: Debug Information713384 50998Node: Insns714581 50999Node: Calls740978 51000Node: Sharing743571 51001Node: Reading RTL746682 51002Node: Control Flow747673 51003Node: Basic Blocks749442 51004Node: Edges754896 51005Node: Profile information763525 51006Node: Maintaining the CFG768209 51007Node: Liveness information774071 51008Node: Loop Analysis and Representation776197 51009Node: Loop representation777307 51010Node: Loop querying784870 51011Node: Loop manipulation787686 51012Node: LCSSA790047 51013Node: Scalar evolutions792116 51014Node: loop-iv795360 51015Node: Number of iterations797282 51016Node: Dependency analysis800088 51017Node: Omega806452 51018Node: Machine Desc808028 51019Node: Overview810591 51020Node: Patterns812631 51021Node: Example816139 51022Node: RTL Template817600 51023Node: Output Template828256 51024Node: Output Statement832219 51025Node: Predicates836558 51026Node: Machine-Independent Predicates839476 51027Node: Defining Predicates844420 51028Node: Constraints850383 51029Node: Simple Constraints851852 51030Node: Multi-Alternative864692 51031Node: Class Preferences867819 51032Node: Modifiers868711 51033Node: Machine Constraints873444 51034Node: Disable Insn Alternatives931734 51035Node: Define Constraints935226 51036Node: C Constraint Interface942011 51037Node: Standard Names945160 51038Ref: shift patterns970043 51039Ref: prologue instruction pattern1015303 51040Ref: window_save instruction pattern1015796 51041Ref: epilogue instruction pattern1016073 51042Node: Pattern Ordering1033643 51043Node: Dependent Patterns1034879 51044Node: Jump Patterns1036499 51045Ref: Jump Patterns-Footnote-11038646 51046Node: Looping Patterns1038694 51047Node: Insn Canonicalizations1043423 51048Node: Expander Definitions1048008 51049Node: Insn Splitting1056222 51050Node: Including Patterns1065825 51051Node: Peephole Definitions1067609 51052Node: define_peephole1068862 51053Node: define_peephole21075192 51054Node: Insn Attributes1078258 51055Node: Defining Attributes1079440 51056Ref: define_enum_attr1082933 51057Node: Expressions1083969 51058Node: Tagging Insns1090719 51059Node: Attr Example1095072 51060Node: Insn Lengths1097445 51061Node: Constant Attributes1100853 51062Node: Mnemonic Attribute1102029 51063Node: Delay Slots1103548 51064Node: Processor pipeline description1106771 51065Ref: Processor pipeline description-Footnote-11125589 51066Node: Conditional Execution1125913 51067Node: Define Subst1129396 51068Node: Define Subst Example1131432 51069Node: Define Subst Pattern Matching1134426 51070Node: Define Subst Output Template1135652 51071Node: Constant Definitions1137722 51072Ref: define_enum1141504 51073Node: Iterators1141992 51074Node: Mode Iterators1142570 51075Node: Defining Mode Iterators1143548 51076Node: Substitutions1145042 51077Node: Examples1147284 51078Node: Code Iterators1148732 51079Node: Int Iterators1151011 51080Node: Subst Iterators1153457 51081Node: Target Macros1155149 51082Node: Target Structure1158161 51083Node: Driver1160277 51084Node: Run-time Target1179089 51085Node: Per-Function Data1188800 51086Node: Storage Layout1191564 51087Node: Type Layout1217321 51088Node: Registers1230947 51089Node: Register Basics1231921 51090Node: Allocation Order1237359 51091Node: Values in Registers1239843 51092Node: Leaf Functions1247321 51093Node: Stack Registers1250180 51094Node: Register Classes1251452 51095Node: Stack and Calling1283805 51096Node: Frame Layout1284371 51097Node: Exception Handling1295339 51098Node: Stack Checking1301549 51099Node: Frame Registers1306361 51100Node: Elimination1314626 51101Node: Stack Arguments1318854 51102Node: Register Arguments1326036 51103Node: Scalar Return1347081 51104Node: Aggregate Return1353538 51105Node: Caller Saves1357727 51106Node: Function Entry1358469 51107Node: Profiling1369561 51108Node: Tail Calls1371671 51109Node: Stack Smashing Protection1373572 51110Node: Miscellaneous Register Hooks1375235 51111Node: Varargs1376101 51112Node: Trampolines1386210 51113Node: Library Calls1392253 51114Node: Addressing Modes1396937 51115Node: Anchored Addresses1417860 51116Node: Condition Code1420503 51117Node: CC0 Condition Codes1422830 51118Node: MODE_CC Condition Codes1426076 51119Node: Costs1432884 51120Node: Scheduling1449746 51121Node: Sections1472924 51122Node: PIC1488617 51123Node: Assembler Format1490676 51124Node: File Framework1491814 51125Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1498746 51126Node: Data Output1502016 51127Node: Uninitialized Data1509962 51128Node: Label Output1514973 51129Node: Initialization1538319 51130Node: Macros for Initialization1544280 51131Node: Instruction Output1550999 51132Node: Dispatch Tables1561628 51133Node: Exception Region Output1566028 51134Node: Alignment Output1573051 51135Node: Debugging Info1577654 51136Node: All Debuggers1578324 51137Node: DBX Options1581179 51138Node: DBX Hooks1586617 51139Node: File Names and DBX1587926 51140Node: SDB and DWARF1590038 51141Node: VMS Debug1596297 51142Node: Floating Point1596884 51143Node: Mode Switching1600776 51144Node: Target Attributes1605212 51145Node: Emulated TLS1613922 51146Node: MIPS Coprocessors1617312 51147Node: PCH Target1618471 51148Node: C++ ABI1620313 51149Node: Named Address Spaces1625107 51150Node: Misc1630016 51151Ref: TARGET_SHIFT_TRUNCATION_MASK1636753 51152Node: Host Config1693410 51153Node: Host Common1694478 51154Node: Filesystem1696852 51155Node: Host Misc1700967 51156Node: Fragments1703416 51157Node: Target Fragment1704611 51158Node: Host Fragment1715239 51159Node: Collect21715479 51160Node: Header Dirs1718115 51161Node: Type Information1719538 51162Node: GTY Options1722814 51163Node: Inheritance and GTY1734466 51164Ref: Inheritance and GTY-Footnote-11736029 51165Node: User GC1736299 51166Node: GGC Roots1740038 51167Node: Files1740751 51168Node: Invoking the garbage collector1743458 51169Node: Troubleshooting1744963 51170Node: Plugins1746038 51171Node: Plugins loading1747167 51172Node: Plugin API1748037 51173Node: Plugins pass1755595 51174Node: Plugins GC1757566 51175Node: Plugins description1759284 51176Node: Plugins attr1759820 51177Node: Plugins recording1762094 51178Node: Plugins gate1762944 51179Node: Plugins tracking1763535 51180Node: Plugins building1764123 51181Node: LTO1765913 51182Node: LTO Overview1766785 51183Node: LTO object file layout1772612 51184Node: IPA1777242 51185Node: WHOPR1786207 51186Node: Internal flags1790896 51187Node: Match and Simplify1792307 51188Node: GIMPLE API1793261 51189Node: The Language1795883 51190Node: Funding1804726 51191Node: GNU Project1807225 51192Node: Copying1807874 51193Node: GNU Free Documentation License1845386 51194Node: Contributors1870507 51195Node: Option Index1909275 51196Node: Concept Index1910152 51197 51198End Tag Table 51199