1This is gccint.info, produced by makeinfo version 5.1 from gccint.texi. 2 3Copyright (C) 1988-2020 Free Software Foundation, Inc. 4 5 Permission is granted to copy, distribute and/or modify this document 6under the terms of the GNU Free Documentation License, Version 1.3 or 7any later version published by the Free Software Foundation; with the 8Invariant Sections being "Funding Free Software", the Front-Cover Texts 9being (a) (see below), and with the Back-Cover Texts being (b) (see 10below). A copy of the license is included in the section entitled "GNU 11Free Documentation License". 12 13 (a) The FSF's Front-Cover Text is: 14 15 A GNU Manual 16 17 (b) The FSF's Back-Cover Text is: 18 19 You have freedom to copy and modify this GNU Manual, like GNU software. 20Copies published by the Free Software Foundation raise funds for GNU 21development. 22INFO-DIR-SECTION Software development 23START-INFO-DIR-ENTRY 24* gccint: (gccint). Internals of the GNU Compiler Collection. 25END-INFO-DIR-ENTRY 26 27 This file documents the internals of the GNU compilers. 28 29 Copyright (C) 1988-2020 Free Software Foundation, Inc. 30 31 Permission is granted to copy, distribute and/or modify this document 32under the terms of the GNU Free Documentation License, Version 1.3 or 33any later version published by the Free Software Foundation; with the 34Invariant Sections being "Funding Free Software", the Front-Cover Texts 35being (a) (see below), and with the Back-Cover Texts being (b) (see 36below). A copy of the license is included in the section entitled "GNU 37Free Documentation License". 38 39 (a) The FSF's Front-Cover Text is: 40 41 A GNU Manual 42 43 (b) The FSF's Back-Cover Text is: 44 45 You have freedom to copy and modify this GNU Manual, like GNU software. 46Copies published by the Free Software Foundation raise funds for GNU 47development. 48 49 50File: gccint.info, Node: Top, Next: Contributing 51 52Introduction 53************ 54 55This manual documents the internals of the GNU compilers, including how 56to port them to new targets and some information about how to write 57front ends for new languages. It corresponds to the compilers (GNU 58Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)) 59version 10.3.1. The use of the GNU compilers is documented in a 60separate manual. *Note Introduction: (gcc)Top. 61 62 This manual is mainly a reference manual rather than a tutorial. It 63discusses how to contribute to GCC (*note Contributing::), the 64characteristics of the machines supported by GCC as hosts and targets 65(*note Portability::), how GCC relates to the ABIs on such systems 66(*note Interface::), and the characteristics of the languages for which 67GCC front ends are written (*note Languages::). It then describes the 68GCC source tree structure and build system, some of the interfaces to 69GCC front ends, and how support for a target system is implemented in 70GCC. 71 72 Additional tutorial information is linked to from 73<http://gcc.gnu.org/readings.html>. 74 75* Menu: 76 77* Contributing:: How to contribute to testing and developing GCC. 78* Portability:: Goals of GCC's portability features. 79* Interface:: Function-call interface of GCC output. 80* Libgcc:: Low-level runtime library used by GCC. 81* Languages:: Languages for which GCC front ends are written. 82* Source Tree:: GCC source tree structure and build system. 83* Testsuites:: GCC testsuites. 84* Options:: Option specification files. 85* Passes:: Order of passes, what they do, and what each file is for. 86* poly_int:: Representation of runtime sizes and offsets. 87* GENERIC:: Language-independent representation generated by Front Ends 88* GIMPLE:: Tuple representation used by Tree SSA optimizers 89* Tree SSA:: Analysis and optimization of GIMPLE 90* RTL:: Machine-dependent low-level intermediate representation. 91* Control Flow:: Maintaining and manipulating the control flow graph. 92* Loop Analysis and Representation:: Analysis and representation of loops 93* Machine Desc:: How to write machine description instruction patterns. 94* Target Macros:: How to write the machine description C macros and functions. 95* Host Config:: Writing the 'xm-MACHINE.h' file. 96* Fragments:: Writing the 't-TARGET' and 'x-HOST' files. 97* Collect2:: How 'collect2' works; how it finds 'ld'. 98* Header Dirs:: Understanding the standard header file directories. 99* Type Information:: GCC's memory management; generating type information. 100* Plugins:: Extending the compiler with plugins. 101* LTO:: Using Link-Time Optimization. 102 103* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC 104* Static Analyzer:: Working with the static analyzer. 105* User Experience Guidelines:: Guidelines for implementing diagnostics and options. 106* Funding:: How to help assure funding for free software. 107* GNU Project:: The GNU Project and GNU/Linux. 108 109* Copying:: GNU General Public License says 110 how you can copy and share GCC. 111* GNU Free Documentation License:: How you can copy and share this manual. 112* Contributors:: People who have contributed to GCC. 113 114* Option Index:: Index to command line options. 115* Concept Index:: Index of concepts and symbol names. 116 117 118File: gccint.info, Node: Contributing, Next: Portability, Up: Top 119 1201 Contributing to GCC Development 121********************************* 122 123If you would like to help pretest GCC releases to assure they work well, 124current development sources are available via Git (see 125<http://gcc.gnu.org/git.html>). Source and binary snapshots are also 126available for FTP; see <http://gcc.gnu.org/snapshots.html>. 127 128 If you would like to work on improvements to GCC, please read the 129advice at these URLs: 130 131 <http://gcc.gnu.org/contribute.html> 132 <http://gcc.gnu.org/contributewhy.html> 133 134for information on how to make useful contributions and avoid 135duplication of effort. Suggested projects are listed at 136<http://gcc.gnu.org/projects/>. 137 138 139File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 140 1412 GCC and Portability 142********************* 143 144GCC itself aims to be portable to any machine where 'int' is at least a 14532-bit type. It aims to target machines with a flat (non-segmented) 146byte addressed data address space (the code address space can be 147separate). Target ABIs may have 8, 16, 32 or 64-bit 'int' type. 'char' 148can be wider than 8 bits. 149 150 GCC gets most of the information about the target machine from a 151machine description which gives an algebraic formula for each of the 152machine's instructions. This is a very clean way to describe the 153target. But when the compiler needs information that is difficult to 154express in this fashion, ad-hoc parameters have been defined for machine 155descriptions. The purpose of portability is to reduce the total work 156needed on the compiler; it was not of interest for its own sake. 157 158 GCC does not contain machine dependent code, but it does contain code 159that depends on machine parameters such as endianness (whether the most 160significant byte has the highest or lowest address of the bytes in a 161word) and the availability of autoincrement addressing. In the 162RTL-generation pass, it is often necessary to have multiple strategies 163for generating code for a particular kind of syntax tree, strategies 164that are usable for different combinations of parameters. Often, not 165all possible cases have been addressed, but only the common ones or only 166the ones that have been encountered. As a result, a new target may 167require additional strategies. You will know if this happens because 168the compiler will call 'abort'. Fortunately, the new strategies can be 169added in a machine-independent fashion, and will affect only the target 170machines that need them. 171 172 173File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 174 1753 Interfacing to GCC Output 176*************************** 177 178GCC is normally configured to use the same function calling convention 179normally in use on the target system. This is done with the 180machine-description macros described (*note Target Macros::). 181 182 However, returning of structure and union values is done differently on 183some target machines. As a result, functions compiled with PCC 184returning such types cannot be called from code compiled with GCC, and 185vice versa. This does not cause trouble often because few Unix library 186routines return structures or unions. 187 188 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long 189in the same registers used for 'int' or 'double' return values. (GCC 190typically allocates variables of such types in registers also.) 191Structures and unions of other sizes are returned by storing them into 192an address passed by the caller (usually in a register). The target 193hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 194 195 By contrast, PCC on most target machines returns structures and unions 196of any size by copying the data into an area of static storage, and then 197returning the address of that storage as if it were a pointer value. 198The caller must copy the data from that memory area to the place where 199the value is wanted. This is slower than the method used by GCC, and 200fails to be reentrant. 201 202 On some target machines, such as RISC machines and the 80386, the 203standard system convention is to pass to the subroutine the address of 204where to return the value. On these machines, GCC has been configured 205to be compatible with the standard compiler, when this method is used. 206It may not be compatible for structures of 1, 2, 4 or 8 bytes. 207 208 GCC uses the system's standard convention for passing arguments. On 209some machines, the first few arguments are passed in registers; in 210others, all are passed on the stack. It would be possible to use 211registers for argument passing on any machine, and this would probably 212result in a significant speedup. But the result would be complete 213incompatibility with code that follows the standard convention. So this 214change is practical only if you are switching to GCC as the sole C 215compiler for the system. We may implement register argument passing on 216certain machines once we have a complete GNU system so that we can 217compile the libraries with GCC. 218 219 On some machines (particularly the SPARC), certain types of arguments 220are passed "by invisible reference". This means that the value is 221stored in memory, and the address of the memory location is passed to 222the subroutine. 223 224 If you use 'longjmp', beware of automatic variables. ISO C says that 225automatic variables that are not declared 'volatile' have undefined 226values after a 'longjmp'. And this is all GCC promises to do, because 227it is very difficult to restore register variables correctly, and one of 228GCC's features is that it can put variables in registers without your 229asking it to. 230 231 232File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 233 2344 The GCC low-level runtime library 235*********************************** 236 237GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1' 238on some platforms. GCC generates calls to routines in this library 239automatically, whenever it needs to perform some operation that is too 240complicated to emit inline code for. 241 242 Most of the routines in 'libgcc' handle arithmetic operations that the 243target processor cannot perform directly. This includes integer 244multiply and divide on some machines, and all floating-point and 245fixed-point operations on other machines. 'libgcc' also includes 246routines for exception handling, and a handful of miscellaneous 247operations. 248 249 Some of these routines can be defined in mostly machine-independent C. 250Others must be hand-written in assembly language for each processor that 251needs them. 252 253 GCC will also generate calls to C library routines, such as 'memcpy' 254and 'memset', in some cases. The set of routines that GCC may possibly 255use is documented in *note (gcc)Other Builtins::. 256 257 These routines take arguments and return values of a specific machine 258mode, not a specific C type. *Note Machine Modes::, for an explanation 259of this concept. For illustrative purposes, in this chapter the 260floating point type 'float' is assumed to correspond to 'SFmode'; 261'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'. 262Similarly, the integer types 'int' and 'unsigned int' correspond to 263'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and 264'unsigned long long' to 'TImode'. 265 266* Menu: 267 268* Integer library routines:: 269* Soft float library routines:: 270* Decimal float library routines:: 271* Fixed-point fractional library routines:: 272* Exception handling routines:: 273* Miscellaneous routines:: 274 275 276File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 277 2784.1 Routines for integer arithmetic 279=================================== 280 281The integer arithmetic routines are used on platforms that don't provide 282hardware support for arithmetic operations on some modes. 283 2844.1.1 Arithmetic functions 285-------------------------- 286 287 -- Runtime Function: int __ashlsi3 (int A, int B) 288 -- Runtime Function: long __ashldi3 (long A, int B) 289 -- Runtime Function: long long __ashlti3 (long long A, int B) 290 These functions return the result of shifting A left by B bits. 291 292 -- Runtime Function: int __ashrsi3 (int A, int B) 293 -- Runtime Function: long __ashrdi3 (long A, int B) 294 -- Runtime Function: long long __ashrti3 (long long A, int B) 295 These functions return the result of arithmetically shifting A 296 right by B bits. 297 298 -- Runtime Function: int __divsi3 (int A, int B) 299 -- Runtime Function: long __divdi3 (long A, long B) 300 -- Runtime Function: long long __divti3 (long long A, long long B) 301 These functions return the quotient of the signed division of A and 302 B. 303 304 -- Runtime Function: int __lshrsi3 (int A, int B) 305 -- Runtime Function: long __lshrdi3 (long A, int B) 306 -- Runtime Function: long long __lshrti3 (long long A, int B) 307 These functions return the result of logically shifting A right by 308 B bits. 309 310 -- Runtime Function: int __modsi3 (int A, int B) 311 -- Runtime Function: long __moddi3 (long A, long B) 312 -- Runtime Function: long long __modti3 (long long A, long long B) 313 These functions return the remainder of the signed division of A 314 and B. 315 316 -- Runtime Function: int __mulsi3 (int A, int B) 317 -- Runtime Function: long __muldi3 (long A, long B) 318 -- Runtime Function: long long __multi3 (long long A, long long B) 319 These functions return the product of A and B. 320 321 -- Runtime Function: long __negdi2 (long A) 322 -- Runtime Function: long long __negti2 (long long A) 323 These functions return the negation of A. 324 325 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 326 int B) 327 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned 328 long B) 329 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 330 A, unsigned long long B) 331 These functions return the quotient of the unsigned division of A 332 and B. 333 334 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, 335 unsigned long B, unsigned long *C) 336 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long 337 long A, unsigned long long B, unsigned long long *C) 338 These functions calculate both the quotient and remainder of the 339 unsigned division of A and B. The return value is the quotient, 340 and the remainder is placed in variable pointed to by C. 341 342 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 343 int B) 344 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned 345 long B) 346 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 347 A, unsigned long long B) 348 These functions return the remainder of the unsigned division of A 349 and B. 350 3514.1.2 Comparison functions 352-------------------------- 353 354The following functions implement integral comparisons. These functions 355implement a low-level compare, upon which the higher level comparison 356operators (such as less than and greater than or equal to) can be 357constructed. The returned values lie in the range zero to two, to allow 358the high-level operators to be implemented by testing the returned 359result using either signed or unsigned comparison. 360 361 -- Runtime Function: int __cmpdi2 (long A, long B) 362 -- Runtime Function: int __cmpti2 (long long A, long long B) 363 These functions perform a signed comparison of A and B. If A is 364 less than B, they return 0; if A is greater than B, they return 2; 365 and if A and B are equal they return 1. 366 367 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 368 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long 369 long B) 370 These functions perform an unsigned comparison of A and B. If A is 371 less than B, they return 0; if A is greater than B, they return 2; 372 and if A and B are equal they return 1. 373 3744.1.3 Trapping arithmetic functions 375----------------------------------- 376 377The following functions implement trapping arithmetic. These functions 378call the libc function 'abort' upon signed arithmetic overflow. 379 380 -- Runtime Function: int __absvsi2 (int A) 381 -- Runtime Function: long __absvdi2 (long A) 382 These functions return the absolute value of A. 383 384 -- Runtime Function: int __addvsi3 (int A, int B) 385 -- Runtime Function: long __addvdi3 (long A, long B) 386 These functions return the sum of A and B; that is 'A + B'. 387 388 -- Runtime Function: int __mulvsi3 (int A, int B) 389 -- Runtime Function: long __mulvdi3 (long A, long B) 390 The functions return the product of A and B; that is 'A * B'. 391 392 -- Runtime Function: int __negvsi2 (int A) 393 -- Runtime Function: long __negvdi2 (long A) 394 These functions return the negation of A; that is '-A'. 395 396 -- Runtime Function: int __subvsi3 (int A, int B) 397 -- Runtime Function: long __subvdi3 (long A, long B) 398 These functions return the difference between B and A; that is 'A - 399 B'. 400 4014.1.4 Bit operations 402-------------------- 403 404 -- Runtime Function: int __clzsi2 (unsigned int A) 405 -- Runtime Function: int __clzdi2 (unsigned long A) 406 -- Runtime Function: int __clzti2 (unsigned long long A) 407 These functions return the number of leading 0-bits in A, starting 408 at the most significant bit position. If A is zero, the result is 409 undefined. 410 411 -- Runtime Function: int __ctzsi2 (unsigned int A) 412 -- Runtime Function: int __ctzdi2 (unsigned long A) 413 -- Runtime Function: int __ctzti2 (unsigned long long A) 414 These functions return the number of trailing 0-bits in A, starting 415 at the least significant bit position. If A is zero, the result is 416 undefined. 417 418 -- Runtime Function: int __ffsdi2 (unsigned long A) 419 -- Runtime Function: int __ffsti2 (unsigned long long A) 420 These functions return the index of the least significant 1-bit in 421 A, or the value zero if A is zero. The least significant bit is 422 index one. 423 424 -- Runtime Function: int __paritysi2 (unsigned int A) 425 -- Runtime Function: int __paritydi2 (unsigned long A) 426 -- Runtime Function: int __parityti2 (unsigned long long A) 427 These functions return the value zero if the number of bits set in 428 A is even, and the value one otherwise. 429 430 -- Runtime Function: int __popcountsi2 (unsigned int A) 431 -- Runtime Function: int __popcountdi2 (unsigned long A) 432 -- Runtime Function: int __popcountti2 (unsigned long long A) 433 These functions return the number of bits set in A. 434 435 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 436 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 437 These functions return the A byteswapped. 438 439 440File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 441 4424.2 Routines for floating point emulation 443========================================= 444 445The software floating point library is used on machines which do not 446have hardware support for floating point. It is also used whenever 447'-msoft-float' is used to disable generation of floating point 448instructions. (Not all targets support this switch.) 449 450 For compatibility with other compilers, the floating point emulation 451routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note 452Library Calls::). In this section, the default names are used. 453 454 Presently the library does not support 'XFmode', which is used for 455'long double' on some architectures. 456 4574.2.1 Arithmetic functions 458-------------------------- 459 460 -- Runtime Function: float __addsf3 (float A, float B) 461 -- Runtime Function: double __adddf3 (double A, double B) 462 -- Runtime Function: long double __addtf3 (long double A, long double 463 B) 464 -- Runtime Function: long double __addxf3 (long double A, long double 465 B) 466 These functions return the sum of A and B. 467 468 -- Runtime Function: float __subsf3 (float A, float B) 469 -- Runtime Function: double __subdf3 (double A, double B) 470 -- Runtime Function: long double __subtf3 (long double A, long double 471 B) 472 -- Runtime Function: long double __subxf3 (long double A, long double 473 B) 474 These functions return the difference between B and A; that is, 475 A - B. 476 477 -- Runtime Function: float __mulsf3 (float A, float B) 478 -- Runtime Function: double __muldf3 (double A, double B) 479 -- Runtime Function: long double __multf3 (long double A, long double 480 B) 481 -- Runtime Function: long double __mulxf3 (long double A, long double 482 B) 483 These functions return the product of A and B. 484 485 -- Runtime Function: float __divsf3 (float A, float B) 486 -- Runtime Function: double __divdf3 (double A, double B) 487 -- Runtime Function: long double __divtf3 (long double A, long double 488 B) 489 -- Runtime Function: long double __divxf3 (long double A, long double 490 B) 491 These functions return the quotient of A and B; that is, A / B. 492 493 -- Runtime Function: float __negsf2 (float A) 494 -- Runtime Function: double __negdf2 (double A) 495 -- Runtime Function: long double __negtf2 (long double A) 496 -- Runtime Function: long double __negxf2 (long double A) 497 These functions return the negation of A. They simply flip the 498 sign bit, so they can produce negative zero and negative NaN. 499 5004.2.2 Conversion functions 501-------------------------- 502 503 -- Runtime Function: double __extendsfdf2 (float A) 504 -- Runtime Function: long double __extendsftf2 (float A) 505 -- Runtime Function: long double __extendsfxf2 (float A) 506 -- Runtime Function: long double __extenddftf2 (double A) 507 -- Runtime Function: long double __extenddfxf2 (double A) 508 These functions extend A to the wider mode of their return type. 509 510 -- Runtime Function: double __truncxfdf2 (long double A) 511 -- Runtime Function: double __trunctfdf2 (long double A) 512 -- Runtime Function: float __truncxfsf2 (long double A) 513 -- Runtime Function: float __trunctfsf2 (long double A) 514 -- Runtime Function: float __truncdfsf2 (double A) 515 These functions truncate A to the narrower mode of their return 516 type, rounding toward zero. 517 518 -- Runtime Function: int __fixsfsi (float A) 519 -- Runtime Function: int __fixdfsi (double A) 520 -- Runtime Function: int __fixtfsi (long double A) 521 -- Runtime Function: int __fixxfsi (long double A) 522 These functions convert A to a signed integer, rounding toward 523 zero. 524 525 -- Runtime Function: long __fixsfdi (float A) 526 -- Runtime Function: long __fixdfdi (double A) 527 -- Runtime Function: long __fixtfdi (long double A) 528 -- Runtime Function: long __fixxfdi (long double A) 529 These functions convert A to a signed long, rounding toward zero. 530 531 -- Runtime Function: long long __fixsfti (float A) 532 -- Runtime Function: long long __fixdfti (double A) 533 -- Runtime Function: long long __fixtfti (long double A) 534 -- Runtime Function: long long __fixxfti (long double A) 535 These functions convert A to a signed long long, rounding toward 536 zero. 537 538 -- Runtime Function: unsigned int __fixunssfsi (float A) 539 -- Runtime Function: unsigned int __fixunsdfsi (double A) 540 -- Runtime Function: unsigned int __fixunstfsi (long double A) 541 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 542 These functions convert A to an unsigned integer, rounding toward 543 zero. Negative values all become zero. 544 545 -- Runtime Function: unsigned long __fixunssfdi (float A) 546 -- Runtime Function: unsigned long __fixunsdfdi (double A) 547 -- Runtime Function: unsigned long __fixunstfdi (long double A) 548 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 549 These functions convert A to an unsigned long, rounding toward 550 zero. Negative values all become zero. 551 552 -- Runtime Function: unsigned long long __fixunssfti (float A) 553 -- Runtime Function: unsigned long long __fixunsdfti (double A) 554 -- Runtime Function: unsigned long long __fixunstfti (long double A) 555 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 556 These functions convert A to an unsigned long long, rounding toward 557 zero. Negative values all become zero. 558 559 -- Runtime Function: float __floatsisf (int I) 560 -- Runtime Function: double __floatsidf (int I) 561 -- Runtime Function: long double __floatsitf (int I) 562 -- Runtime Function: long double __floatsixf (int I) 563 These functions convert I, a signed integer, to floating point. 564 565 -- Runtime Function: float __floatdisf (long I) 566 -- Runtime Function: double __floatdidf (long I) 567 -- Runtime Function: long double __floatditf (long I) 568 -- Runtime Function: long double __floatdixf (long I) 569 These functions convert I, a signed long, to floating point. 570 571 -- Runtime Function: float __floattisf (long long I) 572 -- Runtime Function: double __floattidf (long long I) 573 -- Runtime Function: long double __floattitf (long long I) 574 -- Runtime Function: long double __floattixf (long long I) 575 These functions convert I, a signed long long, to floating point. 576 577 -- Runtime Function: float __floatunsisf (unsigned int I) 578 -- Runtime Function: double __floatunsidf (unsigned int I) 579 -- Runtime Function: long double __floatunsitf (unsigned int I) 580 -- Runtime Function: long double __floatunsixf (unsigned int I) 581 These functions convert I, an unsigned integer, to floating point. 582 583 -- Runtime Function: float __floatundisf (unsigned long I) 584 -- Runtime Function: double __floatundidf (unsigned long I) 585 -- Runtime Function: long double __floatunditf (unsigned long I) 586 -- Runtime Function: long double __floatundixf (unsigned long I) 587 These functions convert I, an unsigned long, to floating point. 588 589 -- Runtime Function: float __floatuntisf (unsigned long long I) 590 -- Runtime Function: double __floatuntidf (unsigned long long I) 591 -- Runtime Function: long double __floatuntitf (unsigned long long I) 592 -- Runtime Function: long double __floatuntixf (unsigned long long I) 593 These functions convert I, an unsigned long long, to floating 594 point. 595 5964.2.3 Comparison functions 597-------------------------- 598 599There are two sets of basic comparison functions. 600 601 -- Runtime Function: int __cmpsf2 (float A, float B) 602 -- Runtime Function: int __cmpdf2 (double A, double B) 603 -- Runtime Function: int __cmptf2 (long double A, long double B) 604 These functions calculate a <=> b. That is, if A is less than B, 605 they return -1; if A is greater than B, they return 1; and if A and 606 B are equal they return 0. If either argument is NaN they return 607 1, but you should not rely on this; if NaN is a possibility, use 608 one of the higher-level comparison functions. 609 610 -- Runtime Function: int __unordsf2 (float A, float B) 611 -- Runtime Function: int __unorddf2 (double A, double B) 612 -- Runtime Function: int __unordtf2 (long double A, long double B) 613 These functions return a nonzero value if either argument is NaN, 614 otherwise 0. 615 616 There is also a complete group of higher level functions which 617correspond directly to comparison operators. They implement the ISO C 618semantics for floating-point comparisons, taking NaN into account. Pay 619careful attention to the return values defined for each set. Under the 620hood, all of these routines are implemented as 621 622 if (__unordXf2 (a, b)) 623 return E; 624 return __cmpXf2 (a, b); 625 626where E is a constant chosen to give the proper behavior for NaN. Thus, 627the meaning of the return value is different for each set. Do not rely 628on this implementation; only the semantics documented below are 629guaranteed. 630 631 -- Runtime Function: int __eqsf2 (float A, float B) 632 -- Runtime Function: int __eqdf2 (double A, double B) 633 -- Runtime Function: int __eqtf2 (long double A, long double B) 634 These functions return zero if neither argument is NaN, and A and B 635 are equal. 636 637 -- Runtime Function: int __nesf2 (float A, float B) 638 -- Runtime Function: int __nedf2 (double A, double B) 639 -- Runtime Function: int __netf2 (long double A, long double B) 640 These functions return a nonzero value if either argument is NaN, 641 or if A and B are unequal. 642 643 -- Runtime Function: int __gesf2 (float A, float B) 644 -- Runtime Function: int __gedf2 (double A, double B) 645 -- Runtime Function: int __getf2 (long double A, long double B) 646 These functions return a value greater than or equal to zero if 647 neither argument is NaN, and A is greater than or equal to B. 648 649 -- Runtime Function: int __ltsf2 (float A, float B) 650 -- Runtime Function: int __ltdf2 (double A, double B) 651 -- Runtime Function: int __lttf2 (long double A, long double B) 652 These functions return a value less than zero if neither argument 653 is NaN, and A is strictly less than B. 654 655 -- Runtime Function: int __lesf2 (float A, float B) 656 -- Runtime Function: int __ledf2 (double A, double B) 657 -- Runtime Function: int __letf2 (long double A, long double B) 658 These functions return a value less than or equal to zero if 659 neither argument is NaN, and A is less than or equal to B. 660 661 -- Runtime Function: int __gtsf2 (float A, float B) 662 -- Runtime Function: int __gtdf2 (double A, double B) 663 -- Runtime Function: int __gttf2 (long double A, long double B) 664 These functions return a value greater than zero if neither 665 argument is NaN, and A is strictly greater than B. 666 6674.2.4 Other floating-point functions 668------------------------------------ 669 670 -- Runtime Function: float __powisf2 (float A, int B) 671 -- Runtime Function: double __powidf2 (double A, int B) 672 -- Runtime Function: long double __powitf2 (long double A, int B) 673 -- Runtime Function: long double __powixf2 (long double A, int B) 674 These functions convert raise A to the power B. 675 676 -- Runtime Function: complex float __mulsc3 (float A, float B, float C, 677 float D) 678 -- Runtime Function: complex double __muldc3 (double A, double B, 679 double C, double D) 680 -- Runtime Function: complex long double __multc3 (long double A, long 681 double B, long double C, long double D) 682 -- Runtime Function: complex long double __mulxc3 (long double A, long 683 double B, long double C, long double D) 684 These functions return the product of A + iB and C + iD, following 685 the rules of C99 Annex G. 686 687 -- Runtime Function: complex float __divsc3 (float A, float B, float C, 688 float D) 689 -- Runtime Function: complex double __divdc3 (double A, double B, 690 double C, double D) 691 -- Runtime Function: complex long double __divtc3 (long double A, long 692 double B, long double C, long double D) 693 -- Runtime Function: complex long double __divxc3 (long double A, long 694 double B, long double C, long double D) 695 These functions return the quotient of A + iB and C + iD (i.e., (A 696 + iB) / (C + iD)), following the rules of C99 Annex G. 697 698 699File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 700 7014.3 Routines for decimal floating point emulation 702================================================= 703 704The software decimal floating point library implements IEEE 754-2008 705decimal floating point arithmetic and is only activated on selected 706targets. 707 708 The software decimal floating point library supports either DPD 709(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 710selected at configure time. 711 7124.3.1 Arithmetic functions 713-------------------------- 714 715 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 716 B) 717 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 718 B) 719 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 720 B) 721 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 722 B) 723 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 724 _Decimal128 B) 725 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 726 _Decimal128 B) 727 These functions return the sum of A and B. 728 729 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 730 B) 731 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 732 B) 733 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 734 B) 735 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 736 B) 737 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 738 _Decimal128 B) 739 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 740 _Decimal128 B) 741 These functions return the difference between B and A; that is, 742 A - B. 743 744 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 745 B) 746 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 747 B) 748 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 749 B) 750 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 751 B) 752 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 753 _Decimal128 B) 754 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 755 _Decimal128 B) 756 These functions return the product of A and B. 757 758 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 759 B) 760 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 761 B) 762 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 763 B) 764 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 765 B) 766 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 767 _Decimal128 B) 768 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 769 _Decimal128 B) 770 These functions return the quotient of A and B; that is, A / B. 771 772 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 773 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 774 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 775 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 776 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 777 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 778 These functions return the negation of A. They simply flip the 779 sign bit, so they can produce negative zero and negative NaN. 780 7814.3.2 Conversion functions 782-------------------------- 783 784 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 785 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 786 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 787 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 788 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 789 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 790 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 791 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 792 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 793 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 794 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 795 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 796 These functions convert the value A from one decimal floating type 797 to another. 798 799 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 800 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 801 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 802 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 803 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 804 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 805 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 806 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 807 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 808 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 809 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 810 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 811 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 812 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 813 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 814 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 815 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 816 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 817 These functions convert the value of A from a binary floating type 818 to a decimal floating type of a different size. 819 820 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 821 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 822 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 823 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 824 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 825 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 826 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 827 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 828 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 829 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 830 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 831 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 832 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 833 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 834 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 835 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 836 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 837 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 838 These functions convert the value of A from a decimal floating type 839 to a binary floating type of a different size. 840 841 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 842 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 843 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 844 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 845 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 846 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 847 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 848 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 849 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 850 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 851 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 852 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 853 These functions convert the value of A between decimal and binary 854 floating types of the same size. 855 856 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 857 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 858 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 859 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 860 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 861 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 862 These functions convert A to a signed integer. 863 864 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 865 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 866 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 867 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 868 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 869 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 870 These functions convert A to a signed long. 871 872 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 873 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 874 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 875 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 876 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 877 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 878 These functions convert A to an unsigned integer. Negative values 879 all become zero. 880 881 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 882 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 883 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 884 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 885 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 886 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 887 These functions convert A to an unsigned long. Negative values all 888 become zero. 889 890 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 891 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 892 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 893 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 894 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 895 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 896 These functions convert I, a signed integer, to decimal floating 897 point. 898 899 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 900 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 901 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 902 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 903 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 904 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 905 These functions convert I, a signed long, to decimal floating 906 point. 907 908 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 909 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 910 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 911 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 912 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 913 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 914 These functions convert I, an unsigned integer, to decimal floating 915 point. 916 917 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 918 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 919 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 920 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 921 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 922 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 923 These functions convert I, an unsigned long, to decimal floating 924 point. 925 9264.3.3 Comparison functions 927-------------------------- 928 929 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 930 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 931 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 932 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 933 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 934 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 935 These functions return a nonzero value if either argument is NaN, 936 otherwise 0. 937 938 There is also a complete group of higher level functions which 939correspond directly to comparison operators. They implement the ISO C 940semantics for floating-point comparisons, taking NaN into account. Pay 941careful attention to the return values defined for each set. Under the 942hood, all of these routines are implemented as 943 944 if (__bid_unordXd2 (a, b)) 945 return E; 946 return __bid_cmpXd2 (a, b); 947 948where E is a constant chosen to give the proper behavior for NaN. Thus, 949the meaning of the return value is different for each set. Do not rely 950on this implementation; only the semantics documented below are 951guaranteed. 952 953 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 954 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 955 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 956 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 957 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 958 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 959 These functions return zero if neither argument is NaN, and A and B 960 are equal. 961 962 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 963 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 964 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 965 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 966 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 967 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 968 These functions return a nonzero value if either argument is NaN, 969 or if A and B are unequal. 970 971 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 972 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 973 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 974 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 975 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 976 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 977 These functions return a value greater than or equal to zero if 978 neither argument is NaN, and A is greater than or equal to B. 979 980 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 981 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 982 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 983 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 984 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 985 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 986 These functions return a value less than zero if neither argument 987 is NaN, and A is strictly less than B. 988 989 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 990 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 991 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 992 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 993 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 994 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 995 These functions return a value less than or equal to zero if 996 neither argument is NaN, and A is less than or equal to B. 997 998 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 999 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 1000 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 1001 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 1002 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 1003 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 1004 These functions return a value greater than zero if neither 1005 argument is NaN, and A is strictly greater than B. 1006 1007 1008File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1009 10104.4 Routines for fixed-point fractional emulation 1011================================================= 1012 1013The software fixed-point library implements fixed-point fractional 1014arithmetic, and is only activated on selected targets. 1015 1016 For ease of comprehension 'fract' is an alias for the '_Fract' type, 1017'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'. 1018 1019 For illustrative purposes, in this section the fixed-point fractional 1020type 'short fract' is assumed to correspond to machine mode 'QQmode'; 1021'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode'; 1022'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode'; 1023'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and 1024'unsigned long long fract' to 'UDQmode'. Similarly the fixed-point 1025accumulator type 'short accum' corresponds to 'HAmode'; 1026'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode'; 1027'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode'; 1028'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and 1029'unsigned long long accum' to 'UTAmode'. 1030 10314.4.1 Arithmetic functions 1032-------------------------- 1033 1034 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1035 B) 1036 -- Runtime Function: fract __addhq3 (fract A, fract B) 1037 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1038 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1039 long fract B) 1040 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1041 fract A, unsigned short fract B) 1042 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1043 unsigned fract B) 1044 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract 1045 A, unsigned long fract B) 1046 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1047 long fract A, unsigned long long fract B) 1048 -- Runtime Function: short accum __addha3 (short accum A, short accum 1049 B) 1050 -- Runtime Function: accum __addsa3 (accum A, accum B) 1051 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1052 -- Runtime Function: long long accum __addta3 (long long accum A, long 1053 long accum B) 1054 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1055 accum A, unsigned short accum B) 1056 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1057 unsigned accum B) 1058 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum 1059 A, unsigned long accum B) 1060 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1061 long accum A, unsigned long long accum B) 1062 These functions return the sum of A and B. 1063 1064 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract 1065 B) 1066 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1067 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1068 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1069 long long fract B) 1070 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum 1071 B) 1072 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1073 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1074 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1075 long long accum B) 1076 These functions return the sum of A and B with signed saturation. 1077 1078 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1079 fract A, unsigned short fract B) 1080 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1081 unsigned fract B) 1082 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1083 fract A, unsigned long fract B) 1084 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1085 long long fract A, unsigned long long fract B) 1086 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1087 accum A, unsigned short accum B) 1088 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1089 unsigned accum B) 1090 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1091 accum A, unsigned long accum B) 1092 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1093 long long accum A, unsigned long long accum B) 1094 These functions return the sum of A and B with unsigned saturation. 1095 1096 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1097 B) 1098 -- Runtime Function: fract __subhq3 (fract A, fract B) 1099 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1100 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1101 long fract B) 1102 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1103 fract A, unsigned short fract B) 1104 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1105 unsigned fract B) 1106 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract 1107 A, unsigned long fract B) 1108 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1109 long fract A, unsigned long long fract B) 1110 -- Runtime Function: short accum __subha3 (short accum A, short accum 1111 B) 1112 -- Runtime Function: accum __subsa3 (accum A, accum B) 1113 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1114 -- Runtime Function: long long accum __subta3 (long long accum A, long 1115 long accum B) 1116 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1117 accum A, unsigned short accum B) 1118 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1119 unsigned accum B) 1120 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum 1121 A, unsigned long accum B) 1122 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1123 long accum A, unsigned long long accum B) 1124 These functions return the difference of A and B; that is, 'A - B'. 1125 1126 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract 1127 B) 1128 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1129 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1130 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1131 long long fract B) 1132 -- Runtime Function: short accum __sssubha3 (short accum A, short accum 1133 B) 1134 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1135 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1136 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1137 long long accum B) 1138 These functions return the difference of A and B with signed 1139 saturation; that is, 'A - B'. 1140 1141 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1142 fract A, unsigned short fract B) 1143 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1144 unsigned fract B) 1145 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1146 fract A, unsigned long fract B) 1147 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1148 long long fract A, unsigned long long fract B) 1149 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1150 accum A, unsigned short accum B) 1151 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1152 unsigned accum B) 1153 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1154 accum A, unsigned long accum B) 1155 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1156 long long accum A, unsigned long long accum B) 1157 These functions return the difference of A and B with unsigned 1158 saturation; that is, 'A - B'. 1159 1160 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1161 B) 1162 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1163 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1164 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1165 long fract B) 1166 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1167 fract A, unsigned short fract B) 1168 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1169 unsigned fract B) 1170 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract 1171 A, unsigned long fract B) 1172 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1173 long fract A, unsigned long long fract B) 1174 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1175 B) 1176 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1177 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1178 -- Runtime Function: long long accum __multa3 (long long accum A, long 1179 long accum B) 1180 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1181 accum A, unsigned short accum B) 1182 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1183 unsigned accum B) 1184 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum 1185 A, unsigned long accum B) 1186 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1187 long accum A, unsigned long long accum B) 1188 These functions return the product of A and B. 1189 1190 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract 1191 B) 1192 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1193 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1194 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1195 long long fract B) 1196 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum 1197 B) 1198 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1199 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1200 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1201 long long accum B) 1202 These functions return the product of A and B with signed 1203 saturation. 1204 1205 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1206 fract A, unsigned short fract B) 1207 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1208 unsigned fract B) 1209 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1210 fract A, unsigned long fract B) 1211 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1212 long long fract A, unsigned long long fract B) 1213 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1214 accum A, unsigned short accum B) 1215 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1216 unsigned accum B) 1217 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1218 accum A, unsigned long accum B) 1219 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1220 long long accum A, unsigned long long accum B) 1221 These functions return the product of A and B with unsigned 1222 saturation. 1223 1224 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1225 B) 1226 -- Runtime Function: fract __divhq3 (fract A, fract B) 1227 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1228 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1229 long fract B) 1230 -- Runtime Function: short accum __divha3 (short accum A, short accum 1231 B) 1232 -- Runtime Function: accum __divsa3 (accum A, accum B) 1233 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1234 -- Runtime Function: long long accum __divta3 (long long accum A, long 1235 long accum B) 1236 These functions return the quotient of the signed division of A and 1237 B. 1238 1239 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1240 fract A, unsigned short fract B) 1241 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1242 unsigned fract B) 1243 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1244 fract A, unsigned long fract B) 1245 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long 1246 long fract A, unsigned long long fract B) 1247 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1248 accum A, unsigned short accum B) 1249 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1250 unsigned accum B) 1251 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1252 accum A, unsigned long accum B) 1253 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long 1254 long accum A, unsigned long long accum B) 1255 These functions return the quotient of the unsigned division of A 1256 and B. 1257 1258 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract 1259 B) 1260 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1261 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1262 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1263 long long fract B) 1264 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum 1265 B) 1266 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1267 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1268 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1269 long long accum B) 1270 These functions return the quotient of the signed division of A and 1271 B with signed saturation. 1272 1273 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1274 fract A, unsigned short fract B) 1275 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1276 unsigned fract B) 1277 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1278 fract A, unsigned long fract B) 1279 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1280 long long fract A, unsigned long long fract B) 1281 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1282 accum A, unsigned short accum B) 1283 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1284 unsigned accum B) 1285 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1286 accum A, unsigned long accum B) 1287 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1288 long long accum A, unsigned long long accum B) 1289 These functions return the quotient of the unsigned division of A 1290 and B with unsigned saturation. 1291 1292 -- Runtime Function: short fract __negqq2 (short fract A) 1293 -- Runtime Function: fract __neghq2 (fract A) 1294 -- Runtime Function: long fract __negsq2 (long fract A) 1295 -- Runtime Function: long long fract __negdq2 (long long fract A) 1296 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1297 fract A) 1298 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1299 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract 1300 A) 1301 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1302 long fract A) 1303 -- Runtime Function: short accum __negha2 (short accum A) 1304 -- Runtime Function: accum __negsa2 (accum A) 1305 -- Runtime Function: long accum __negda2 (long accum A) 1306 -- Runtime Function: long long accum __negta2 (long long accum A) 1307 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1308 accum A) 1309 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1310 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum 1311 A) 1312 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1313 long accum A) 1314 These functions return the negation of A. 1315 1316 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1317 -- Runtime Function: fract __ssneghq2 (fract A) 1318 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1319 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1320 -- Runtime Function: short accum __ssnegha2 (short accum A) 1321 -- Runtime Function: accum __ssnegsa2 (accum A) 1322 -- Runtime Function: long accum __ssnegda2 (long accum A) 1323 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1324 These functions return the negation of A with signed saturation. 1325 1326 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1327 fract A) 1328 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1329 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1330 fract A) 1331 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1332 long long fract A) 1333 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1334 accum A) 1335 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1336 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1337 accum A) 1338 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1339 long long accum A) 1340 These functions return the negation of A with unsigned saturation. 1341 1342 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1343 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1344 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1345 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1346 B) 1347 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1348 fract A, int B) 1349 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1350 B) 1351 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1352 fract A, int B) 1353 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long 1354 long fract A, int B) 1355 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1356 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1357 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1358 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1359 B) 1360 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1361 accum A, int B) 1362 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1363 B) 1364 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1365 accum A, int B) 1366 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long 1367 long accum A, int B) 1368 These functions return the result of shifting A left by B bits. 1369 1370 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1371 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1372 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1373 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1374 B) 1375 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1376 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1377 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1378 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1379 B) 1380 These functions return the result of arithmetically shifting A 1381 right by B bits. 1382 1383 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1384 fract A, int B) 1385 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1386 B) 1387 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1388 fract A, int B) 1389 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long 1390 long fract A, int B) 1391 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1392 accum A, int B) 1393 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1394 B) 1395 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1396 accum A, int B) 1397 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long 1398 long accum A, int B) 1399 These functions return the result of logically shifting A right by 1400 B bits. 1401 1402 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1403 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1404 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1405 int B) 1406 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1407 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1408 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1409 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1410 int B) 1411 These functions return the result of shifting A left by B bits with 1412 signed saturation. 1413 1414 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1415 fract A, int B) 1416 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int 1417 B) 1418 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1419 fract A, int B) 1420 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1421 long long fract A, int B) 1422 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1423 accum A, int B) 1424 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int 1425 B) 1426 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1427 accum A, int B) 1428 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1429 long long accum A, int B) 1430 These functions return the result of shifting A left by B bits with 1431 unsigned saturation. 1432 14334.4.2 Comparison functions 1434-------------------------- 1435 1436The following functions implement fixed-point comparisons. These 1437functions implement a low-level compare, upon which the higher level 1438comparison operators (such as less than and greater than or equal to) 1439can be constructed. The returned values lie in the range zero to two, 1440to allow the high-level operators to be implemented by testing the 1441returned result using either signed or unsigned comparison. 1442 1443 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1444 -- Runtime Function: int __cmphq2 (fract A, fract B) 1445 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1446 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1447 B) 1448 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1449 short fract B) 1450 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1451 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1452 long fract B) 1453 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1454 unsigned long long fract B) 1455 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1456 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1457 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1458 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1459 B) 1460 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1461 short accum B) 1462 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1463 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1464 long accum B) 1465 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1466 unsigned long long accum B) 1467 These functions perform a signed or unsigned comparison of A and B 1468 (depending on the selected machine mode). If A is less than B, 1469 they return 0; if A is greater than B, they return 2; and if A and 1470 B are equal they return 1. 1471 14724.4.3 Conversion functions 1473-------------------------- 1474 1475 -- Runtime Function: fract __fractqqhq2 (short fract A) 1476 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1477 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1478 -- Runtime Function: short accum __fractqqha (short fract A) 1479 -- Runtime Function: accum __fractqqsa (short fract A) 1480 -- Runtime Function: long accum __fractqqda (short fract A) 1481 -- Runtime Function: long long accum __fractqqta (short fract A) 1482 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1483 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1484 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1485 -- Runtime Function: unsigned long long fract __fractqqudq (short fract 1486 A) 1487 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1488 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1489 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1490 -- Runtime Function: unsigned long long accum __fractqquta (short fract 1491 A) 1492 -- Runtime Function: signed char __fractqqqi (short fract A) 1493 -- Runtime Function: short __fractqqhi (short fract A) 1494 -- Runtime Function: int __fractqqsi (short fract A) 1495 -- Runtime Function: long __fractqqdi (short fract A) 1496 -- Runtime Function: long long __fractqqti (short fract A) 1497 -- Runtime Function: float __fractqqsf (short fract A) 1498 -- Runtime Function: double __fractqqdf (short fract A) 1499 -- Runtime Function: short fract __fracthqqq2 (fract A) 1500 -- Runtime Function: long fract __fracthqsq2 (fract A) 1501 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1502 -- Runtime Function: short accum __fracthqha (fract A) 1503 -- Runtime Function: accum __fracthqsa (fract A) 1504 -- Runtime Function: long accum __fracthqda (fract A) 1505 -- Runtime Function: long long accum __fracthqta (fract A) 1506 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1507 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1508 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1509 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1510 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1511 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1512 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1513 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1514 -- Runtime Function: signed char __fracthqqi (fract A) 1515 -- Runtime Function: short __fracthqhi (fract A) 1516 -- Runtime Function: int __fracthqsi (fract A) 1517 -- Runtime Function: long __fracthqdi (fract A) 1518 -- Runtime Function: long long __fracthqti (fract A) 1519 -- Runtime Function: float __fracthqsf (fract A) 1520 -- Runtime Function: double __fracthqdf (fract A) 1521 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1522 -- Runtime Function: fract __fractsqhq2 (long fract A) 1523 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1524 -- Runtime Function: short accum __fractsqha (long fract A) 1525 -- Runtime Function: accum __fractsqsa (long fract A) 1526 -- Runtime Function: long accum __fractsqda (long fract A) 1527 -- Runtime Function: long long accum __fractsqta (long fract A) 1528 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1529 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1530 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1531 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1532 A) 1533 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1534 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1535 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1536 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1537 A) 1538 -- Runtime Function: signed char __fractsqqi (long fract A) 1539 -- Runtime Function: short __fractsqhi (long fract A) 1540 -- Runtime Function: int __fractsqsi (long fract A) 1541 -- Runtime Function: long __fractsqdi (long fract A) 1542 -- Runtime Function: long long __fractsqti (long fract A) 1543 -- Runtime Function: float __fractsqsf (long fract A) 1544 -- Runtime Function: double __fractsqdf (long fract A) 1545 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1546 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1547 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1548 -- Runtime Function: short accum __fractdqha (long long fract A) 1549 -- Runtime Function: accum __fractdqsa (long long fract A) 1550 -- Runtime Function: long accum __fractdqda (long long fract A) 1551 -- Runtime Function: long long accum __fractdqta (long long fract A) 1552 -- Runtime Function: unsigned short fract __fractdquqq (long long fract 1553 A) 1554 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1555 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1556 A) 1557 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1558 fract A) 1559 -- Runtime Function: unsigned short accum __fractdquha (long long fract 1560 A) 1561 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1562 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1563 A) 1564 -- Runtime Function: unsigned long long accum __fractdquta (long long 1565 fract A) 1566 -- Runtime Function: signed char __fractdqqi (long long fract A) 1567 -- Runtime Function: short __fractdqhi (long long fract A) 1568 -- Runtime Function: int __fractdqsi (long long fract A) 1569 -- Runtime Function: long __fractdqdi (long long fract A) 1570 -- Runtime Function: long long __fractdqti (long long fract A) 1571 -- Runtime Function: float __fractdqsf (long long fract A) 1572 -- Runtime Function: double __fractdqdf (long long fract A) 1573 -- Runtime Function: short fract __fracthaqq (short accum A) 1574 -- Runtime Function: fract __fracthahq (short accum A) 1575 -- Runtime Function: long fract __fracthasq (short accum A) 1576 -- Runtime Function: long long fract __fracthadq (short accum A) 1577 -- Runtime Function: accum __fracthasa2 (short accum A) 1578 -- Runtime Function: long accum __fracthada2 (short accum A) 1579 -- Runtime Function: long long accum __fracthata2 (short accum A) 1580 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1581 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1582 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1583 -- Runtime Function: unsigned long long fract __fracthaudq (short accum 1584 A) 1585 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1586 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1587 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1588 -- Runtime Function: unsigned long long accum __fracthauta (short accum 1589 A) 1590 -- Runtime Function: signed char __fracthaqi (short accum A) 1591 -- Runtime Function: short __fracthahi (short accum A) 1592 -- Runtime Function: int __fracthasi (short accum A) 1593 -- Runtime Function: long __fracthadi (short accum A) 1594 -- Runtime Function: long long __fracthati (short accum A) 1595 -- Runtime Function: float __fracthasf (short accum A) 1596 -- Runtime Function: double __fracthadf (short accum A) 1597 -- Runtime Function: short fract __fractsaqq (accum A) 1598 -- Runtime Function: fract __fractsahq (accum A) 1599 -- Runtime Function: long fract __fractsasq (accum A) 1600 -- Runtime Function: long long fract __fractsadq (accum A) 1601 -- Runtime Function: short accum __fractsaha2 (accum A) 1602 -- Runtime Function: long accum __fractsada2 (accum A) 1603 -- Runtime Function: long long accum __fractsata2 (accum A) 1604 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1605 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1606 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1607 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1608 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1609 -- Runtime Function: unsigned accum __fractsausa (accum A) 1610 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1611 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1612 -- Runtime Function: signed char __fractsaqi (accum A) 1613 -- Runtime Function: short __fractsahi (accum A) 1614 -- Runtime Function: int __fractsasi (accum A) 1615 -- Runtime Function: long __fractsadi (accum A) 1616 -- Runtime Function: long long __fractsati (accum A) 1617 -- Runtime Function: float __fractsasf (accum A) 1618 -- Runtime Function: double __fractsadf (accum A) 1619 -- Runtime Function: short fract __fractdaqq (long accum A) 1620 -- Runtime Function: fract __fractdahq (long accum A) 1621 -- Runtime Function: long fract __fractdasq (long accum A) 1622 -- Runtime Function: long long fract __fractdadq (long accum A) 1623 -- Runtime Function: short accum __fractdaha2 (long accum A) 1624 -- Runtime Function: accum __fractdasa2 (long accum A) 1625 -- Runtime Function: long long accum __fractdata2 (long accum A) 1626 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1627 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1628 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1629 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1630 A) 1631 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1632 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1633 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1634 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1635 A) 1636 -- Runtime Function: signed char __fractdaqi (long accum A) 1637 -- Runtime Function: short __fractdahi (long accum A) 1638 -- Runtime Function: int __fractdasi (long accum A) 1639 -- Runtime Function: long __fractdadi (long accum A) 1640 -- Runtime Function: long long __fractdati (long accum A) 1641 -- Runtime Function: float __fractdasf (long accum A) 1642 -- Runtime Function: double __fractdadf (long accum A) 1643 -- Runtime Function: short fract __fracttaqq (long long accum A) 1644 -- Runtime Function: fract __fracttahq (long long accum A) 1645 -- Runtime Function: long fract __fracttasq (long long accum A) 1646 -- Runtime Function: long long fract __fracttadq (long long accum A) 1647 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1648 -- Runtime Function: accum __fracttasa2 (long long accum A) 1649 -- Runtime Function: long accum __fracttada2 (long long accum A) 1650 -- Runtime Function: unsigned short fract __fracttauqq (long long accum 1651 A) 1652 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1653 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1654 A) 1655 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1656 accum A) 1657 -- Runtime Function: unsigned short accum __fracttauha (long long accum 1658 A) 1659 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1660 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1661 A) 1662 -- Runtime Function: unsigned long long accum __fracttauta (long long 1663 accum A) 1664 -- Runtime Function: signed char __fracttaqi (long long accum A) 1665 -- Runtime Function: short __fracttahi (long long accum A) 1666 -- Runtime Function: int __fracttasi (long long accum A) 1667 -- Runtime Function: long __fracttadi (long long accum A) 1668 -- Runtime Function: long long __fracttati (long long accum A) 1669 -- Runtime Function: float __fracttasf (long long accum A) 1670 -- Runtime Function: double __fracttadf (long long accum A) 1671 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1672 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1673 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1674 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract 1675 A) 1676 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1677 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1678 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1679 -- Runtime Function: long long accum __fractuqqta (unsigned short fract 1680 A) 1681 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1682 fract A) 1683 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short 1684 fract A) 1685 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1686 short fract A) 1687 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short 1688 fract A) 1689 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract 1690 A) 1691 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1692 fract A) 1693 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1694 short fract A) 1695 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1696 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1697 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1698 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1699 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1700 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1701 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1702 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1703 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1704 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1705 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1706 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1707 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1708 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1709 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1710 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1711 fract A) 1712 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract 1713 A) 1714 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1715 fract A) 1716 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract 1717 A) 1718 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1719 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1720 A) 1721 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1722 fract A) 1723 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1724 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1725 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1726 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1727 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1728 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1729 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1730 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1731 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1732 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1733 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1734 A) 1735 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1736 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1737 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1738 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1739 A) 1740 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long 1741 fract A) 1742 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract 1743 A) 1744 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1745 long fract A) 1746 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1747 fract A) 1748 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1749 A) 1750 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1751 fract A) 1752 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1753 long fract A) 1754 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1755 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1756 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1757 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1758 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1759 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1760 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1761 -- Runtime Function: short fract __fractudqqq (unsigned long long fract 1762 A) 1763 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1764 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1765 A) 1766 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1767 fract A) 1768 -- Runtime Function: short accum __fractudqha (unsigned long long fract 1769 A) 1770 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1771 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1772 A) 1773 -- Runtime Function: long long accum __fractudqta (unsigned long long 1774 fract A) 1775 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long 1776 long fract A) 1777 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1778 fract A) 1779 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1780 long fract A) 1781 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1782 long fract A) 1783 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1784 fract A) 1785 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1786 long fract A) 1787 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1788 long long fract A) 1789 -- Runtime Function: signed char __fractudqqi (unsigned long long fract 1790 A) 1791 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1792 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1793 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1794 -- Runtime Function: long long __fractudqti (unsigned long long fract 1795 A) 1796 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1797 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1798 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1799 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1800 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1801 -- Runtime Function: long long fract __fractuhadq (unsigned short accum 1802 A) 1803 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1804 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1805 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1806 -- Runtime Function: long long accum __fractuhata (unsigned short accum 1807 A) 1808 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short 1809 accum A) 1810 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum 1811 A) 1812 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1813 accum A) 1814 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1815 short accum A) 1816 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1817 accum A) 1818 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short 1819 accum A) 1820 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1821 short accum A) 1822 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1823 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1824 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1825 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1826 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1827 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1828 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1829 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1830 -- Runtime Function: fract __fractusahq (unsigned accum A) 1831 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1832 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1833 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1834 -- Runtime Function: accum __fractusasa (unsigned accum A) 1835 -- Runtime Function: long accum __fractusada (unsigned accum A) 1836 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1837 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum 1838 A) 1839 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1840 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1841 A) 1842 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1843 accum A) 1844 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1845 accum A) 1846 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum 1847 A) 1848 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1849 accum A) 1850 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1851 -- Runtime Function: short __fractusahi (unsigned accum A) 1852 -- Runtime Function: int __fractusasi (unsigned accum A) 1853 -- Runtime Function: long __fractusadi (unsigned accum A) 1854 -- Runtime Function: long long __fractusati (unsigned accum A) 1855 -- Runtime Function: float __fractusasf (unsigned accum A) 1856 -- Runtime Function: double __fractusadf (unsigned accum A) 1857 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1858 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1859 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1860 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1861 A) 1862 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1863 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1864 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1865 -- Runtime Function: long long accum __fractudata (unsigned long accum 1866 A) 1867 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1868 accum A) 1869 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1870 A) 1871 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1872 accum A) 1873 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1874 long accum A) 1875 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long 1876 accum A) 1877 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum 1878 A) 1879 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1880 long accum A) 1881 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1882 -- Runtime Function: short __fractudahi (unsigned long accum A) 1883 -- Runtime Function: int __fractudasi (unsigned long accum A) 1884 -- Runtime Function: long __fractudadi (unsigned long accum A) 1885 -- Runtime Function: long long __fractudati (unsigned long accum A) 1886 -- Runtime Function: float __fractudasf (unsigned long accum A) 1887 -- Runtime Function: double __fractudadf (unsigned long accum A) 1888 -- Runtime Function: short fract __fractutaqq (unsigned long long accum 1889 A) 1890 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1891 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1892 A) 1893 -- Runtime Function: long long fract __fractutadq (unsigned long long 1894 accum A) 1895 -- Runtime Function: short accum __fractutaha (unsigned long long accum 1896 A) 1897 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1898 -- Runtime Function: long accum __fractutada (unsigned long long accum 1899 A) 1900 -- Runtime Function: long long accum __fractutata (unsigned long long 1901 accum A) 1902 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1903 long accum A) 1904 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1905 accum A) 1906 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1907 long accum A) 1908 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1909 long long accum A) 1910 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long 1911 long accum A) 1912 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1913 accum A) 1914 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1915 long accum A) 1916 -- Runtime Function: signed char __fractutaqi (unsigned long long accum 1917 A) 1918 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1919 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1920 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1921 -- Runtime Function: long long __fractutati (unsigned long long accum 1922 A) 1923 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1924 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1925 -- Runtime Function: short fract __fractqiqq (signed char A) 1926 -- Runtime Function: fract __fractqihq (signed char A) 1927 -- Runtime Function: long fract __fractqisq (signed char A) 1928 -- Runtime Function: long long fract __fractqidq (signed char A) 1929 -- Runtime Function: short accum __fractqiha (signed char A) 1930 -- Runtime Function: accum __fractqisa (signed char A) 1931 -- Runtime Function: long accum __fractqida (signed char A) 1932 -- Runtime Function: long long accum __fractqita (signed char A) 1933 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1934 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1935 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1936 -- Runtime Function: unsigned long long fract __fractqiudq (signed char 1937 A) 1938 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1939 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1940 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1941 -- Runtime Function: unsigned long long accum __fractqiuta (signed char 1942 A) 1943 -- Runtime Function: short fract __fracthiqq (short A) 1944 -- Runtime Function: fract __fracthihq (short A) 1945 -- Runtime Function: long fract __fracthisq (short A) 1946 -- Runtime Function: long long fract __fracthidq (short A) 1947 -- Runtime Function: short accum __fracthiha (short A) 1948 -- Runtime Function: accum __fracthisa (short A) 1949 -- Runtime Function: long accum __fracthida (short A) 1950 -- Runtime Function: long long accum __fracthita (short A) 1951 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1952 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1953 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1954 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1955 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1956 -- Runtime Function: unsigned accum __fracthiusa (short A) 1957 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1958 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1959 -- Runtime Function: short fract __fractsiqq (int A) 1960 -- Runtime Function: fract __fractsihq (int A) 1961 -- Runtime Function: long fract __fractsisq (int A) 1962 -- Runtime Function: long long fract __fractsidq (int A) 1963 -- Runtime Function: short accum __fractsiha (int A) 1964 -- Runtime Function: accum __fractsisa (int A) 1965 -- Runtime Function: long accum __fractsida (int A) 1966 -- Runtime Function: long long accum __fractsita (int A) 1967 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1968 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1969 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1970 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1971 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1972 -- Runtime Function: unsigned accum __fractsiusa (int A) 1973 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1974 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1975 -- Runtime Function: short fract __fractdiqq (long A) 1976 -- Runtime Function: fract __fractdihq (long A) 1977 -- Runtime Function: long fract __fractdisq (long A) 1978 -- Runtime Function: long long fract __fractdidq (long A) 1979 -- Runtime Function: short accum __fractdiha (long A) 1980 -- Runtime Function: accum __fractdisa (long A) 1981 -- Runtime Function: long accum __fractdida (long A) 1982 -- Runtime Function: long long accum __fractdita (long A) 1983 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1984 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1985 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1986 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1987 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1988 -- Runtime Function: unsigned accum __fractdiusa (long A) 1989 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1990 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1991 -- Runtime Function: short fract __fracttiqq (long long A) 1992 -- Runtime Function: fract __fracttihq (long long A) 1993 -- Runtime Function: long fract __fracttisq (long long A) 1994 -- Runtime Function: long long fract __fracttidq (long long A) 1995 -- Runtime Function: short accum __fracttiha (long long A) 1996 -- Runtime Function: accum __fracttisa (long long A) 1997 -- Runtime Function: long accum __fracttida (long long A) 1998 -- Runtime Function: long long accum __fracttita (long long A) 1999 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 2000 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 2001 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 2002 -- Runtime Function: unsigned long long fract __fracttiudq (long long 2003 A) 2004 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2005 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2006 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2007 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2008 A) 2009 -- Runtime Function: short fract __fractsfqq (float A) 2010 -- Runtime Function: fract __fractsfhq (float A) 2011 -- Runtime Function: long fract __fractsfsq (float A) 2012 -- Runtime Function: long long fract __fractsfdq (float A) 2013 -- Runtime Function: short accum __fractsfha (float A) 2014 -- Runtime Function: accum __fractsfsa (float A) 2015 -- Runtime Function: long accum __fractsfda (float A) 2016 -- Runtime Function: long long accum __fractsfta (float A) 2017 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2018 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2019 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2020 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2021 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2022 -- Runtime Function: unsigned accum __fractsfusa (float A) 2023 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2024 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2025 -- Runtime Function: short fract __fractdfqq (double A) 2026 -- Runtime Function: fract __fractdfhq (double A) 2027 -- Runtime Function: long fract __fractdfsq (double A) 2028 -- Runtime Function: long long fract __fractdfdq (double A) 2029 -- Runtime Function: short accum __fractdfha (double A) 2030 -- Runtime Function: accum __fractdfsa (double A) 2031 -- Runtime Function: long accum __fractdfda (double A) 2032 -- Runtime Function: long long accum __fractdfta (double A) 2033 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2034 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2035 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2036 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2037 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2038 -- Runtime Function: unsigned accum __fractdfusa (double A) 2039 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2040 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2041 These functions convert from fractional and signed non-fractionals 2042 to fractionals and signed non-fractionals, without saturation. 2043 2044 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2045 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2046 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2047 -- Runtime Function: short accum __satfractqqha (short fract A) 2048 -- Runtime Function: accum __satfractqqsa (short fract A) 2049 -- Runtime Function: long accum __satfractqqda (short fract A) 2050 -- Runtime Function: long long accum __satfractqqta (short fract A) 2051 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2052 A) 2053 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2054 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2055 A) 2056 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2057 fract A) 2058 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2059 A) 2060 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2061 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2062 A) 2063 -- Runtime Function: unsigned long long accum __satfractqquta (short 2064 fract A) 2065 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2066 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2067 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2068 -- Runtime Function: short accum __satfracthqha (fract A) 2069 -- Runtime Function: accum __satfracthqsa (fract A) 2070 -- Runtime Function: long accum __satfracthqda (fract A) 2071 -- Runtime Function: long long accum __satfracthqta (fract A) 2072 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2073 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2074 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2075 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2076 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2077 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2078 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2079 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2080 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2081 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2082 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2083 -- Runtime Function: short accum __satfractsqha (long fract A) 2084 -- Runtime Function: accum __satfractsqsa (long fract A) 2085 -- Runtime Function: long accum __satfractsqda (long fract A) 2086 -- Runtime Function: long long accum __satfractsqta (long fract A) 2087 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2088 A) 2089 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2090 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2091 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2092 fract A) 2093 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2094 A) 2095 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2096 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2097 -- Runtime Function: unsigned long long accum __satfractsquta (long 2098 fract A) 2099 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2100 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2101 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2102 -- Runtime Function: short accum __satfractdqha (long long fract A) 2103 -- Runtime Function: accum __satfractdqsa (long long fract A) 2104 -- Runtime Function: long accum __satfractdqda (long long fract A) 2105 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2106 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2107 fract A) 2108 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2109 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2110 fract A) 2111 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2112 long fract A) 2113 -- Runtime Function: unsigned short accum __satfractdquha (long long 2114 fract A) 2115 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2116 -- Runtime Function: unsigned long accum __satfractdquda (long long 2117 fract A) 2118 -- Runtime Function: unsigned long long accum __satfractdquta (long 2119 long fract A) 2120 -- Runtime Function: short fract __satfracthaqq (short accum A) 2121 -- Runtime Function: fract __satfracthahq (short accum A) 2122 -- Runtime Function: long fract __satfracthasq (short accum A) 2123 -- Runtime Function: long long fract __satfracthadq (short accum A) 2124 -- Runtime Function: accum __satfracthasa2 (short accum A) 2125 -- Runtime Function: long accum __satfracthada2 (short accum A) 2126 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2127 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2128 A) 2129 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2130 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2131 A) 2132 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2133 accum A) 2134 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2135 A) 2136 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2137 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2138 A) 2139 -- Runtime Function: unsigned long long accum __satfracthauta (short 2140 accum A) 2141 -- Runtime Function: short fract __satfractsaqq (accum A) 2142 -- Runtime Function: fract __satfractsahq (accum A) 2143 -- Runtime Function: long fract __satfractsasq (accum A) 2144 -- Runtime Function: long long fract __satfractsadq (accum A) 2145 -- Runtime Function: short accum __satfractsaha2 (accum A) 2146 -- Runtime Function: long accum __satfractsada2 (accum A) 2147 -- Runtime Function: long long accum __satfractsata2 (accum A) 2148 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2149 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2150 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2151 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2152 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2153 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2154 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2155 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2156 -- Runtime Function: short fract __satfractdaqq (long accum A) 2157 -- Runtime Function: fract __satfractdahq (long accum A) 2158 -- Runtime Function: long fract __satfractdasq (long accum A) 2159 -- Runtime Function: long long fract __satfractdadq (long accum A) 2160 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2161 -- Runtime Function: accum __satfractdasa2 (long accum A) 2162 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2163 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2164 A) 2165 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2166 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2167 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2168 accum A) 2169 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2170 A) 2171 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2172 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2173 -- Runtime Function: unsigned long long accum __satfractdauta (long 2174 accum A) 2175 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2176 -- Runtime Function: fract __satfracttahq (long long accum A) 2177 -- Runtime Function: long fract __satfracttasq (long long accum A) 2178 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2179 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2180 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2181 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2182 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2183 accum A) 2184 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2185 -- Runtime Function: unsigned long fract __satfracttausq (long long 2186 accum A) 2187 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2188 long accum A) 2189 -- Runtime Function: unsigned short accum __satfracttauha (long long 2190 accum A) 2191 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2192 -- Runtime Function: unsigned long accum __satfracttauda (long long 2193 accum A) 2194 -- Runtime Function: unsigned long long accum __satfracttauta (long 2195 long accum A) 2196 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2197 A) 2198 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2199 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2200 A) 2201 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2202 fract A) 2203 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2204 A) 2205 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2206 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2207 A) 2208 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2209 fract A) 2210 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2211 fract A) 2212 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2213 short fract A) 2214 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2215 (unsigned short fract A) 2216 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2217 short fract A) 2218 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2219 fract A) 2220 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2221 short fract A) 2222 -- Runtime Function: unsigned long long accum __satfractuqquta 2223 (unsigned short fract A) 2224 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2225 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2226 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2227 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2228 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2229 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2230 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2231 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2232 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2233 fract A) 2234 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2235 fract A) 2236 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2237 (unsigned fract A) 2238 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2239 fract A) 2240 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2241 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2242 fract A) 2243 -- Runtime Function: unsigned long long accum __satfractuhquta 2244 (unsigned fract A) 2245 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2246 A) 2247 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2248 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2249 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2250 fract A) 2251 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2252 A) 2253 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2254 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2255 -- Runtime Function: long long accum __satfractusqta (unsigned long 2256 fract A) 2257 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2258 long fract A) 2259 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2260 fract A) 2261 -- Runtime Function: unsigned long long fract __satfractusqudq2 2262 (unsigned long fract A) 2263 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2264 long fract A) 2265 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2266 fract A) 2267 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2268 long fract A) 2269 -- Runtime Function: unsigned long long accum __satfractusquta 2270 (unsigned long fract A) 2271 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2272 fract A) 2273 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2274 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2275 fract A) 2276 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2277 long fract A) 2278 -- Runtime Function: short accum __satfractudqha (unsigned long long 2279 fract A) 2280 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2281 -- Runtime Function: long accum __satfractudqda (unsigned long long 2282 fract A) 2283 -- Runtime Function: long long accum __satfractudqta (unsigned long 2284 long fract A) 2285 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2286 long long fract A) 2287 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2288 long fract A) 2289 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2290 long long fract A) 2291 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2292 long long fract A) 2293 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2294 long fract A) 2295 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2296 long long fract A) 2297 -- Runtime Function: unsigned long long accum __satfractudquta 2298 (unsigned long long fract A) 2299 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2300 A) 2301 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2302 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2303 A) 2304 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2305 accum A) 2306 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2307 A) 2308 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2309 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2310 A) 2311 -- Runtime Function: long long accum __satfractuhata (unsigned short 2312 accum A) 2313 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2314 short accum A) 2315 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2316 accum A) 2317 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2318 short accum A) 2319 -- Runtime Function: unsigned long long fract __satfractuhaudq 2320 (unsigned short accum A) 2321 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2322 accum A) 2323 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2324 short accum A) 2325 -- Runtime Function: unsigned long long accum __satfractuhauta2 2326 (unsigned short accum A) 2327 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2328 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2329 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2330 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2331 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2332 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2333 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2334 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2335 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2336 accum A) 2337 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2338 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2339 accum A) 2340 -- Runtime Function: unsigned long long fract __satfractusaudq 2341 (unsigned accum A) 2342 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2343 accum A) 2344 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2345 accum A) 2346 -- Runtime Function: unsigned long long accum __satfractusauta2 2347 (unsigned accum A) 2348 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2349 A) 2350 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2351 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2352 -- Runtime Function: long long fract __satfractudadq (unsigned long 2353 accum A) 2354 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2355 A) 2356 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2357 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2358 -- Runtime Function: long long accum __satfractudata (unsigned long 2359 accum A) 2360 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2361 long accum A) 2362 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2363 accum A) 2364 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2365 long accum A) 2366 -- Runtime Function: unsigned long long fract __satfractudaudq 2367 (unsigned long accum A) 2368 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2369 long accum A) 2370 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2371 accum A) 2372 -- Runtime Function: unsigned long long accum __satfractudauta2 2373 (unsigned long accum A) 2374 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2375 accum A) 2376 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2377 -- Runtime Function: long fract __satfractutasq (unsigned long long 2378 accum A) 2379 -- Runtime Function: long long fract __satfractutadq (unsigned long 2380 long accum A) 2381 -- Runtime Function: short accum __satfractutaha (unsigned long long 2382 accum A) 2383 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2384 -- Runtime Function: long accum __satfractutada (unsigned long long 2385 accum A) 2386 -- Runtime Function: long long accum __satfractutata (unsigned long 2387 long accum A) 2388 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2389 long long accum A) 2390 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2391 long accum A) 2392 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2393 long long accum A) 2394 -- Runtime Function: unsigned long long fract __satfractutaudq 2395 (unsigned long long accum A) 2396 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2397 long long accum A) 2398 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2399 long accum A) 2400 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2401 long long accum A) 2402 -- Runtime Function: short fract __satfractqiqq (signed char A) 2403 -- Runtime Function: fract __satfractqihq (signed char A) 2404 -- Runtime Function: long fract __satfractqisq (signed char A) 2405 -- Runtime Function: long long fract __satfractqidq (signed char A) 2406 -- Runtime Function: short accum __satfractqiha (signed char A) 2407 -- Runtime Function: accum __satfractqisa (signed char A) 2408 -- Runtime Function: long accum __satfractqida (signed char A) 2409 -- Runtime Function: long long accum __satfractqita (signed char A) 2410 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2411 A) 2412 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2413 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2414 A) 2415 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2416 char A) 2417 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2418 A) 2419 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2420 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2421 A) 2422 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2423 char A) 2424 -- Runtime Function: short fract __satfracthiqq (short A) 2425 -- Runtime Function: fract __satfracthihq (short A) 2426 -- Runtime Function: long fract __satfracthisq (short A) 2427 -- Runtime Function: long long fract __satfracthidq (short A) 2428 -- Runtime Function: short accum __satfracthiha (short A) 2429 -- Runtime Function: accum __satfracthisa (short A) 2430 -- Runtime Function: long accum __satfracthida (short A) 2431 -- Runtime Function: long long accum __satfracthita (short A) 2432 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2433 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2434 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2435 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2436 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2437 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2438 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2439 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2440 -- Runtime Function: short fract __satfractsiqq (int A) 2441 -- Runtime Function: fract __satfractsihq (int A) 2442 -- Runtime Function: long fract __satfractsisq (int A) 2443 -- Runtime Function: long long fract __satfractsidq (int A) 2444 -- Runtime Function: short accum __satfractsiha (int A) 2445 -- Runtime Function: accum __satfractsisa (int A) 2446 -- Runtime Function: long accum __satfractsida (int A) 2447 -- Runtime Function: long long accum __satfractsita (int A) 2448 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2449 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2450 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2451 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2452 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2453 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2454 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2455 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2456 -- Runtime Function: short fract __satfractdiqq (long A) 2457 -- Runtime Function: fract __satfractdihq (long A) 2458 -- Runtime Function: long fract __satfractdisq (long A) 2459 -- Runtime Function: long long fract __satfractdidq (long A) 2460 -- Runtime Function: short accum __satfractdiha (long A) 2461 -- Runtime Function: accum __satfractdisa (long A) 2462 -- Runtime Function: long accum __satfractdida (long A) 2463 -- Runtime Function: long long accum __satfractdita (long A) 2464 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2465 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2466 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2467 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2468 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2469 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2470 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2471 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2472 -- Runtime Function: short fract __satfracttiqq (long long A) 2473 -- Runtime Function: fract __satfracttihq (long long A) 2474 -- Runtime Function: long fract __satfracttisq (long long A) 2475 -- Runtime Function: long long fract __satfracttidq (long long A) 2476 -- Runtime Function: short accum __satfracttiha (long long A) 2477 -- Runtime Function: accum __satfracttisa (long long A) 2478 -- Runtime Function: long accum __satfracttida (long long A) 2479 -- Runtime Function: long long accum __satfracttita (long long A) 2480 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2481 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2482 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2483 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2484 long A) 2485 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2486 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2487 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2488 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2489 long A) 2490 -- Runtime Function: short fract __satfractsfqq (float A) 2491 -- Runtime Function: fract __satfractsfhq (float A) 2492 -- Runtime Function: long fract __satfractsfsq (float A) 2493 -- Runtime Function: long long fract __satfractsfdq (float A) 2494 -- Runtime Function: short accum __satfractsfha (float A) 2495 -- Runtime Function: accum __satfractsfsa (float A) 2496 -- Runtime Function: long accum __satfractsfda (float A) 2497 -- Runtime Function: long long accum __satfractsfta (float A) 2498 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2499 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2500 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2501 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2502 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2503 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2504 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2505 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2506 -- Runtime Function: short fract __satfractdfqq (double A) 2507 -- Runtime Function: fract __satfractdfhq (double A) 2508 -- Runtime Function: long fract __satfractdfsq (double A) 2509 -- Runtime Function: long long fract __satfractdfdq (double A) 2510 -- Runtime Function: short accum __satfractdfha (double A) 2511 -- Runtime Function: accum __satfractdfsa (double A) 2512 -- Runtime Function: long accum __satfractdfda (double A) 2513 -- Runtime Function: long long accum __satfractdfta (double A) 2514 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2515 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2516 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2517 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2518 A) 2519 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2520 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2521 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2522 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2523 A) 2524 The functions convert from fractional and signed non-fractionals to 2525 fractionals, with saturation. 2526 2527 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2528 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2529 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2530 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2531 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2532 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2533 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2534 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2535 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2536 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2537 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2538 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2539 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2540 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2541 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2542 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2543 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2544 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2545 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2546 -- Runtime Function: unsigned long long __fractunsdqti (long long fract 2547 A) 2548 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2549 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2550 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2551 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2552 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2553 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2554 -- Runtime Function: unsigned short __fractunssahi (accum A) 2555 -- Runtime Function: unsigned int __fractunssasi (accum A) 2556 -- Runtime Function: unsigned long __fractunssadi (accum A) 2557 -- Runtime Function: unsigned long long __fractunssati (accum A) 2558 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2559 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2560 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2561 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2562 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2563 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2564 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2565 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2566 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2567 -- Runtime Function: unsigned long long __fractunstati (long long accum 2568 A) 2569 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2570 fract A) 2571 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2572 fract A) 2573 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract 2574 A) 2575 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2576 fract A) 2577 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short 2578 fract A) 2579 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2580 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2581 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2582 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2583 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract 2584 A) 2585 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract 2586 A) 2587 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2588 fract A) 2589 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2590 A) 2591 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract 2592 A) 2593 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2594 fract A) 2595 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2596 fract A) 2597 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long 2598 fract A) 2599 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2600 fract A) 2601 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2602 fract A) 2603 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2604 long fract A) 2605 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2606 accum A) 2607 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2608 accum A) 2609 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum 2610 A) 2611 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2612 accum A) 2613 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short 2614 accum A) 2615 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2616 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2617 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2618 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2619 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum 2620 A) 2621 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum 2622 A) 2623 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2624 accum A) 2625 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2626 A) 2627 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum 2628 A) 2629 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2630 accum A) 2631 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2632 accum A) 2633 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long 2634 accum A) 2635 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2636 accum A) 2637 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2638 accum A) 2639 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2640 long accum A) 2641 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2642 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2643 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2644 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2645 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2646 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2647 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2648 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2649 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2650 char A) 2651 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2652 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char 2653 A) 2654 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned 2655 char A) 2656 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2657 char A) 2658 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2659 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char 2660 A) 2661 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned 2662 char A) 2663 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2664 -- Runtime Function: fract __fractunshihq (unsigned short A) 2665 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2666 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2667 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2668 -- Runtime Function: accum __fractunshisa (unsigned short A) 2669 -- Runtime Function: long accum __fractunshida (unsigned short A) 2670 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2671 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2672 short A) 2673 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2674 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2675 short A) 2676 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned 2677 short A) 2678 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2679 short A) 2680 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2681 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2682 short A) 2683 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned 2684 short A) 2685 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2686 -- Runtime Function: fract __fractunssihq (unsigned int A) 2687 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2688 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2689 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2690 -- Runtime Function: accum __fractunssisa (unsigned int A) 2691 -- Runtime Function: long accum __fractunssida (unsigned int A) 2692 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2693 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int 2694 A) 2695 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2696 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2697 A) 2698 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned 2699 int A) 2700 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int 2701 A) 2702 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2703 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2704 A) 2705 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned 2706 int A) 2707 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2708 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2709 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2710 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2711 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2712 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2713 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2714 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2715 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2716 long A) 2717 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2718 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long 2719 A) 2720 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned 2721 long A) 2722 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2723 long A) 2724 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2725 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long 2726 A) 2727 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned 2728 long A) 2729 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2730 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2731 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2732 -- Runtime Function: long long fract __fractunstidq (unsigned long long 2733 A) 2734 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2735 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2736 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2737 -- Runtime Function: long long accum __fractunstita (unsigned long long 2738 A) 2739 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2740 long long A) 2741 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long 2742 A) 2743 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long 2744 long A) 2745 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned 2746 long long A) 2747 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2748 long long A) 2749 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long 2750 A) 2751 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long 2752 long A) 2753 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned 2754 long long A) 2755 These functions convert from fractionals to unsigned 2756 non-fractionals; and from unsigned non-fractionals to fractionals, 2757 without saturation. 2758 2759 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2760 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2761 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2762 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2763 A) 2764 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2765 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2766 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2767 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2768 A) 2769 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2770 char A) 2771 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2772 A) 2773 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2774 char A) 2775 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2776 (unsigned char A) 2777 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2778 char A) 2779 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2780 A) 2781 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2782 char A) 2783 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2784 (unsigned char A) 2785 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2786 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2787 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2788 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2789 A) 2790 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2791 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2792 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2793 -- Runtime Function: long long accum __satfractunshita (unsigned short 2794 A) 2795 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2796 short A) 2797 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2798 A) 2799 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2800 short A) 2801 -- Runtime Function: unsigned long long fract __satfractunshiudq 2802 (unsigned short A) 2803 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2804 short A) 2805 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2806 A) 2807 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2808 short A) 2809 -- Runtime Function: unsigned long long accum __satfractunshiuta 2810 (unsigned short A) 2811 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2812 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2813 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2814 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2815 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2816 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2817 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2818 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2819 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2820 int A) 2821 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2822 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2823 int A) 2824 -- Runtime Function: unsigned long long fract __satfractunssiudq 2825 (unsigned int A) 2826 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2827 int A) 2828 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2829 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2830 int A) 2831 -- Runtime Function: unsigned long long accum __satfractunssiuta 2832 (unsigned int A) 2833 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2834 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2835 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2836 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2837 A) 2838 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2839 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2840 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2841 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2842 A) 2843 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2844 long A) 2845 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2846 A) 2847 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2848 long A) 2849 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2850 (unsigned long A) 2851 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2852 long A) 2853 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2854 A) 2855 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2856 long A) 2857 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2858 (unsigned long A) 2859 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2860 A) 2861 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2862 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2863 A) 2864 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2865 long A) 2866 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2867 A) 2868 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2869 -- Runtime Function: long accum __satfractunstida (unsigned long long 2870 A) 2871 -- Runtime Function: long long accum __satfractunstita (unsigned long 2872 long A) 2873 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2874 long long A) 2875 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2876 long A) 2877 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2878 long long A) 2879 -- Runtime Function: unsigned long long fract __satfractunstiudq 2880 (unsigned long long A) 2881 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2882 long long A) 2883 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2884 long A) 2885 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2886 long long A) 2887 -- Runtime Function: unsigned long long accum __satfractunstiuta 2888 (unsigned long long A) 2889 These functions convert from unsigned non-fractionals to 2890 fractionals, with saturation. 2891 2892 2893File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2894 28954.5 Language-independent routines for exception handling 2896======================================================== 2897 2898document me! 2899 2900 _Unwind_DeleteException 2901 _Unwind_Find_FDE 2902 _Unwind_ForcedUnwind 2903 _Unwind_GetGR 2904 _Unwind_GetIP 2905 _Unwind_GetLanguageSpecificData 2906 _Unwind_GetRegionStart 2907 _Unwind_GetTextRelBase 2908 _Unwind_GetDataRelBase 2909 _Unwind_RaiseException 2910 _Unwind_Resume 2911 _Unwind_SetGR 2912 _Unwind_SetIP 2913 _Unwind_FindEnclosingFunction 2914 _Unwind_SjLj_Register 2915 _Unwind_SjLj_Unregister 2916 _Unwind_SjLj_RaiseException 2917 _Unwind_SjLj_ForcedUnwind 2918 _Unwind_SjLj_Resume 2919 __deregister_frame 2920 __deregister_frame_info 2921 __deregister_frame_info_bases 2922 __register_frame 2923 __register_frame_info 2924 __register_frame_info_bases 2925 __register_frame_info_table 2926 __register_frame_info_table_bases 2927 __register_frame_table 2928 2929 2930File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2931 29324.6 Miscellaneous runtime library routines 2933========================================== 2934 29354.6.1 Cache control functions 2936----------------------------- 2937 2938 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2939 This function clears the instruction cache between BEG and END. 2940 29414.6.2 Split stack functions and variables 2942----------------------------------------- 2943 2944 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void 2945 *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void 2946 **INITIAL_SP) 2947 When using '-fsplit-stack', this call may be used to iterate over 2948 the stack segments. It may be called like this: 2949 void *next_segment = NULL; 2950 void *next_sp = NULL; 2951 void *initial_sp = NULL; 2952 void *stack; 2953 size_t stack_size; 2954 while ((stack = __splitstack_find (next_segment, next_sp, 2955 &stack_size, &next_segment, 2956 &next_sp, &initial_sp)) 2957 != NULL) 2958 { 2959 /* Stack segment starts at stack and is 2960 stack_size bytes long. */ 2961 } 2962 2963 There is no way to iterate over the stack segments of a different 2964 thread. However, what is permitted is for one thread to call this 2965 with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, 2966 NEXT_SP, and INITIAL_SP to a different thread, and then to suspend 2967 one way or another. A different thread may run the subsequent 2968 '__splitstack_find' iterations. Of course, this will only work if 2969 the first thread is suspended while the second thread is calling 2970 '__splitstack_find'. If not, the second thread could be looking at 2971 the stack while it is changing, and anything could happen. 2972 2973 -- Variable: __morestack_segments 2974 -- Variable: __morestack_current_segment 2975 -- Variable: __morestack_initial_sp 2976 Internal variables used by the '-fsplit-stack' implementation. 2977 2978 2979File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2980 29815 Language Front Ends in GCC 2982**************************** 2983 2984The interface to front ends for languages in GCC, and in particular the 2985'tree' structure (*note GENERIC::), was initially designed for C, and 2986many aspects of it are still somewhat biased towards C and C-like 2987languages. It is, however, reasonably well suited to other procedural 2988languages, and front ends for many such languages have been written for 2989GCC. 2990 2991 Writing a compiler as a front end for GCC, rather than compiling 2992directly to assembler or generating C code which is then compiled by 2993GCC, has several advantages: 2994 2995 * GCC front ends benefit from the support for many different target 2996 machines already present in GCC. 2997 * GCC front ends benefit from all the optimizations in GCC. Some of 2998 these, such as alias analysis, may work better when GCC is 2999 compiling directly from source code then when it is compiling from 3000 generated C code. 3001 * Better debugging information is generated when compiling directly 3002 from source code than when going via intermediate generated C code. 3003 3004 Because of the advantages of writing a compiler as a GCC front end, GCC 3005front ends have also been created for languages very different from 3006those for which GCC was designed, such as the declarative 3007logic/functional language Mercury. For these reasons, it may also be 3008useful to implement compilers created for specialized purposes (for 3009example, as part of a research project) as GCC front ends. 3010 3011 3012File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 3013 30146 Source Tree Structure and Build System 3015**************************************** 3016 3017This chapter describes the structure of the GCC source tree, and how GCC 3018is built. The user documentation for building and installing GCC is in 3019a separate manual (<http://gcc.gnu.org/install/>), with which it is 3020presumed that you are familiar. 3021 3022* Menu: 3023 3024* Configure Terms:: Configuration terminology and history. 3025* Top Level:: The top level source directory. 3026* gcc Directory:: The 'gcc' subdirectory. 3027 3028 3029File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 3030 30316.1 Configure Terms and History 3032=============================== 3033 3034The configure and build process has a long and colorful history, and can 3035be confusing to anyone who doesn't know why things are the way they are. 3036While there are other documents which describe the configuration process 3037in detail, here are a few things that everyone working on GCC should 3038know. 3039 3040 There are three system names that the build knows about: the machine 3041you are building on ("build"), the machine that you are building for 3042("host"), and the machine that GCC will produce code for ("target"). 3043When you configure GCC, you specify these with '--build=', '--host=', 3044and '--target='. 3045 3046 Specifying the host without specifying the build should be avoided, as 3047'configure' may (and once did) assume that the host you specify is also 3048the build, which may not be true. 3049 3050 If build, host, and target are all the same, this is called a "native". 3051If build and host are the same but target is different, this is called a 3052"cross". If build, host, and target are all different this is called a 3053"canadian" (for obscure reasons dealing with Canada's political party 3054and the background of the person working on the build at that time). If 3055host and target are the same, but build is different, you are using a 3056cross-compiler to build a native for a different system. Some people 3057call this a "host-x-host", "crossed native", or "cross-built native". 3058If build and target are the same, but host is different, you are using a 3059cross compiler to build a cross compiler that produces code for the 3060machine you're building on. This is rare, so there is no common way of 3061describing it. There is a proposal to call this a "crossback". 3062 3063 If build and host are the same, the GCC you are building will also be 3064used to build the target libraries (like 'libstdc++'). If build and 3065host are different, you must have already built and installed a cross 3066compiler that will be used to build the target libraries (if you 3067configured with '--target=foo-bar', this compiler will be called 3068'foo-bar-gcc'). 3069 3070 In the case of target libraries, the machine you're building for is the 3071machine you specified with '--target'. So, build is the machine you're 3072building on (no change there), host is the machine you're building for 3073(the target libraries are built for the target, so host is the target 3074you specified), and target doesn't apply (because you're not building a 3075compiler, you're building libraries). The configure/make process will 3076adjust these variables as needed. It also sets '$with_cross_host' to 3077the original '--host' value in case you need it. 3078 3079 The 'libiberty' support library is built up to three times: once for 3080the host, once for the target (even if they are the same), and once for 3081the build if build and host are different. This allows it to be used by 3082all programs which are generated in the course of the build process. 3083 3084 3085File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3086 30876.2 Top Level Source Directory 3088============================== 3089 3090The top level source directory in a GCC distribution contains several 3091files and directories that are shared with other software distributions 3092such as that of GNU Binutils. It also contains several subdirectories 3093that contain parts of GCC and its runtime libraries: 3094 3095'boehm-gc' 3096 The Boehm conservative garbage collector, optionally used as part 3097 of the ObjC runtime library when configured with 3098 '--enable-objc-gc'. 3099 3100'config' 3101 Autoconf macros and Makefile fragments used throughout the tree. 3102 3103'contrib' 3104 Contributed scripts that may be found useful in conjunction with 3105 GCC. One of these, 'contrib/texi2pod.pl', is used to generate man 3106 pages from Texinfo manuals as part of the GCC build process. 3107 3108'fixincludes' 3109 The support for fixing system headers to work with GCC. See 3110 'fixincludes/README' for more information. The headers fixed by 3111 this mechanism are installed in 'LIBSUBDIR/include-fixed'. Along 3112 with those headers, 'README-fixinc' is also installed, as 3113 'LIBSUBDIR/include-fixed/README'. 3114 3115'gcc' 3116 The main sources of GCC itself (except for runtime libraries), 3117 including optimizers, support for different target architectures, 3118 language front ends, and testsuites. *Note The 'gcc' Subdirectory: 3119 gcc Directory, for details. 3120 3121'gnattools' 3122 Support tools for GNAT. 3123 3124'include' 3125 Headers for the 'libiberty' library. 3126 3127'intl' 3128 GNU 'libintl', from GNU 'gettext', for systems which do not include 3129 it in 'libc'. 3130 3131'libada' 3132 The Ada runtime library. 3133 3134'libatomic' 3135 The runtime support library for atomic operations (e.g. for 3136 '__sync' and '__atomic'). 3137 3138'libcpp' 3139 The C preprocessor library. 3140 3141'libdecnumber' 3142 The Decimal Float support library. 3143 3144'libffi' 3145 The 'libffi' library, used as part of the Go runtime library. 3146 3147'libgcc' 3148 The GCC runtime library. 3149 3150'libgfortran' 3151 The Fortran runtime library. 3152 3153'libgo' 3154 The Go runtime library. The bulk of this library is mirrored from 3155 the master Go repository (https://github.com/golang/go). 3156 3157'libgomp' 3158 The GNU Offloading and Multi Processing Runtime Library. 3159 3160'libiberty' 3161 The 'libiberty' library, used for portability and for some 3162 generally useful data structures and algorithms. *Note 3163 Introduction: (libiberty)Top, for more information about this 3164 library. 3165 3166'libitm' 3167 The runtime support library for transactional memory. 3168 3169'libobjc' 3170 The Objective-C and Objective-C++ runtime library. 3171 3172'libquadmath' 3173 The runtime support library for quad-precision math operations. 3174 3175'libphobos' 3176 The D standard and runtime library. The bulk of this library is 3177 mirrored from the master D repositories (https://github.com/dlang). 3178 3179'libssp' 3180 The Stack protector runtime library. 3181 3182'libstdc++-v3' 3183 The C++ runtime library. 3184 3185'lto-plugin' 3186 Plugin used by the linker if link-time optimizations are enabled. 3187 3188'maintainer-scripts' 3189 Scripts used by the 'gccadmin' account on 'gcc.gnu.org'. 3190 3191'zlib' 3192 The 'zlib' compression library, used for compressing and 3193 uncompressing GCC's intermediate language in LTO object files. 3194 3195 The build system in the top level directory, including how recursion 3196into subdirectories works and how building runtime libraries for 3197multilibs is handled, is documented in a separate manual, included with 3198GNU Binutils. *Note GNU configure and build system: (configure)Top, for 3199details. 3200 3201 3202File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3203 32046.3 The 'gcc' Subdirectory 3205========================== 3206 3207The 'gcc' directory contains many files that are part of the C sources 3208of GCC, other files used as part of the configuration and build process, 3209and subdirectories including documentation and a testsuite. The files 3210that are sources of GCC are documented in a separate chapter. *Note 3211Passes and Files of the Compiler: Passes. 3212 3213* Menu: 3214 3215* Subdirectories:: Subdirectories of 'gcc'. 3216* Configuration:: The configuration process, and the files it uses. 3217* Build:: The build system in the 'gcc' directory. 3218* Makefile:: Targets in 'gcc/Makefile'. 3219* Library Files:: Library source files and headers under 'gcc/'. 3220* Headers:: Headers installed by GCC. 3221* Documentation:: Building documentation in GCC. 3222* Front End:: Anatomy of a language front end. 3223* Back End:: Anatomy of a target back end. 3224 3225 3226File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3227 32286.3.1 Subdirectories of 'gcc' 3229----------------------------- 3230 3231The 'gcc' directory contains the following subdirectories: 3232 3233'LANGUAGE' 3234 Subdirectories for various languages. Directories containing a 3235 file 'config-lang.in' are language subdirectories. The contents of 3236 the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for 3237 Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are 3238 documented in this manual (*note Passes and Files of the Compiler: 3239 Passes.); those for other languages are not. *Note Anatomy of a 3240 Language Front End: Front End, for details of the files in these 3241 directories. 3242 3243'common' 3244 Source files shared between the compiler drivers (such as 'gcc') 3245 and the compilers proper (such as 'cc1'). If an architecture 3246 defines target hooks shared between those places, it also has a 3247 subdirectory in 'common/config'. *Note Target Structure::. 3248 3249'config' 3250 Configuration files for supported architectures and operating 3251 systems. *Note Anatomy of a Target Back End: Back End, for details 3252 of the files in this directory. 3253 3254'doc' 3255 Texinfo documentation for GCC, together with automatically 3256 generated man pages and support for converting the installation 3257 manual to HTML. *Note Documentation::. 3258 3259'ginclude' 3260 System headers installed by GCC, mainly those required by the C 3261 standard of freestanding implementations. *Note Headers Installed 3262 by GCC: Headers, for details of when these and other headers are 3263 installed. 3264 3265'po' 3266 Message catalogs with translations of messages produced by GCC into 3267 various languages, 'LANGUAGE.po'. This directory also contains 3268 'gcc.pot', the template for these message catalogues, 'exgettext', 3269 a wrapper around 'gettext' to extract the messages from the GCC 3270 sources and create 'gcc.pot', which is run by 'make gcc.pot', and 3271 'EXCLUDES', a list of files from which messages should not be 3272 extracted. 3273 3274'testsuite' 3275 The GCC testsuites (except for those for runtime libraries). *Note 3276 Testsuites::. 3277 3278 3279File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3280 32816.3.2 Configuration in the 'gcc' Directory 3282------------------------------------------ 3283 3284The 'gcc' directory is configured with an Autoconf-generated script 3285'configure'. The 'configure' script is generated from 'configure.ac' 3286and 'aclocal.m4'. From the files 'configure.ac' and 'acconfig.h', 3287Autoheader generates the file 'config.in'. The file 'cstamp-h.in' is 3288used as a timestamp. 3289 3290* Menu: 3291 3292* Config Fragments:: Scripts used by 'configure'. 3293* System Config:: The 'config.build', 'config.host', and 3294 'config.gcc' files. 3295* Configuration Files:: Files created by running 'configure'. 3296 3297 3298File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3299 33006.3.2.1 Scripts Used by 'configure' 3301................................... 3302 3303'configure' uses some other scripts to help in its work: 3304 3305 * The standard GNU 'config.sub' and 'config.guess' files, kept in the 3306 top level directory, are used. 3307 3308 * The file 'config.gcc' is used to handle configuration specific to 3309 the particular target machine. The file 'config.build' is used to 3310 handle configuration specific to the particular build machine. The 3311 file 'config.host' is used to handle configuration specific to the 3312 particular host machine. (In general, these should only be used 3313 for features that cannot reasonably be tested in Autoconf feature 3314 tests.) *Note The 'config.build'; 'config.host'; and 'config.gcc' 3315 Files: System Config, for details of the contents of these files. 3316 3317 * Each language subdirectory has a file 'LANGUAGE/config-lang.in' 3318 that is used for front-end-specific configuration. *Note The Front 3319 End 'config-lang.in' File: Front End Config, for details of this 3320 file. 3321 3322 * A helper script 'configure.frag' is used as part of creating the 3323 output of 'configure'. 3324 3325 3326File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3327 33286.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files 3329................................................................. 3330 3331The 'config.build' file contains specific rules for particular systems 3332which GCC is built on. This should be used as rarely as possible, as 3333the behavior of the build system can always be detected by autoconf. 3334 3335 The 'config.host' file contains specific rules for particular systems 3336which GCC will run on. This is rarely needed. 3337 3338 The 'config.gcc' file contains specific rules for particular systems 3339which GCC will generate code for. This is usually needed. 3340 3341 Each file has a list of the shell variables it sets, with descriptions, 3342at the top of the file. 3343 3344 FIXME: document the contents of these files, and what variables should 3345be set to control build, host and target configuration. 3346 3347 3348File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3349 33506.3.2.3 Files Created by 'configure' 3351.................................... 3352 3353Here we spell out what files will be set up by 'configure' in the 'gcc' 3354directory. Some other files are created as temporary files in the 3355configuration process, and are not used in the subsequent build; these 3356are not documented. 3357 3358 * 'Makefile' is constructed from 'Makefile.in', together with the 3359 host and target fragments (*note Makefile Fragments: Fragments.) 3360 't-TARGET' and 'x-HOST' from 'config', if any, and language 3361 Makefile fragments 'LANGUAGE/Make-lang.in'. 3362 * 'auto-host.h' contains information about the host machine 3363 determined by 'configure'. If the host machine is different from 3364 the build machine, then 'auto-build.h' is also created, containing 3365 such information about the build machine. 3366 * 'config.status' is a script that may be run to recreate the current 3367 configuration. 3368 * 'configargs.h' is a header containing details of the arguments 3369 passed to 'configure' to configure GCC, and of the thread model 3370 used. 3371 * 'cstamp-h' is used as a timestamp. 3372 * If a language 'config-lang.in' file (*note The Front End 3373 'config-lang.in' File: Front End Config.) sets 'outputs', then the 3374 files listed in 'outputs' there are also generated. 3375 3376 The following configuration headers are created from the Makefile, 3377using 'mkconfig.sh', rather than directly by 'configure'. 'config.h', 3378'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if 3379any, appropriate to the host, build and target machines respectively, 3380the configuration headers for the target, and some definitions; for the 3381host and build machines, these include the autoconfigured headers 3382generated by 'configure'. The other configuration headers are 3383determined by 'config.gcc'. They also contain the typedefs for 'rtx', 3384'rtvec' and 'tree'. 3385 3386 * 'config.h', for use in programs that run on the host machine. 3387 * 'bconfig.h', for use in programs that run on the build machine. 3388 * 'tconfig.h', for use in programs and libraries for the target 3389 machine. 3390 * 'tm_p.h', which includes the header 'MACHINE-protos.h' that 3391 contains prototypes for functions in the target 'MACHINE.c' file. 3392 The 'MACHINE-protos.h' header is included after the 'rtl.h' and/or 3393 'tree.h' would have been included. The 'tm_p.h' also includes the 3394 header 'tm-preds.h' which is generated by 'genpreds' program during 3395 the build to define the declarations and inline functions for the 3396 predicate functions. 3397 3398 3399File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3400 34016.3.3 Build System in the 'gcc' Directory 3402----------------------------------------- 3403 3404FIXME: describe the build system, including what is built in what 3405stages. Also list the various source files that are used in the build 3406process but aren't source files of GCC itself and so aren't documented 3407below (*note Passes::). 3408 3409 3410File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3411 34126.3.4 Makefile Targets 3413---------------------- 3414 3415These targets are available from the 'gcc' directory: 3416 3417'all' 3418 This is the default target. Depending on what your 3419 build/host/target configuration is, it coordinates all the things 3420 that need to be built. 3421 3422'doc' 3423 Produce info-formatted documentation and man pages. Essentially it 3424 calls 'make man' and 'make info'. 3425 3426'dvi' 3427 Produce DVI-formatted documentation. 3428 3429'pdf' 3430 Produce PDF-formatted documentation. 3431 3432'html' 3433 Produce HTML-formatted documentation. 3434 3435'man' 3436 Generate man pages. 3437 3438'info' 3439 Generate info-formatted pages. 3440 3441'mostlyclean' 3442 Delete the files made while building the compiler. 3443 3444'clean' 3445 That, and all the other files built by 'make all'. 3446 3447'distclean' 3448 That, and all the files created by 'configure'. 3449 3450'maintainer-clean' 3451 Distclean plus any file that can be generated from other files. 3452 Note that additional tools may be required beyond what is normally 3453 needed to build GCC. 3454 3455'srcextra' 3456 Generates files in the source directory that are not 3457 version-controlled but should go into a release tarball. 3458 3459'srcinfo' 3460'srcman' 3461 Copies the info-formatted and manpage documentation into the source 3462 directory usually for the purpose of generating a release tarball. 3463 3464'install' 3465 Installs GCC. 3466 3467'uninstall' 3468 Deletes installed files, though this is not supported. 3469 3470'check' 3471 Run the testsuite. This creates a 'testsuite' subdirectory that 3472 has various '.sum' and '.log' files containing the results of the 3473 testing. You can run subsets with, for example, 'make check-gcc'. 3474 You can specify specific tests by setting 'RUNTESTFLAGS' to be the 3475 name of the '.exp' file, optionally followed by (for some tests) an 3476 equals and a file wildcard, like: 3477 3478 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3479 3480 Note that running the testsuite may require additional tools be 3481 installed, such as Tcl or DejaGnu. 3482 3483 The toplevel tree from which you start GCC compilation is not the GCC 3484directory, but rather a complex Makefile that coordinates the various 3485steps of the build, including bootstrapping the compiler and using the 3486new compiler to build target libraries. 3487 3488 When GCC is configured for a native configuration, the default action 3489for 'make' is to do a full three-stage bootstrap. This means that GCC 3490is built three times--once with the native compiler, once with the 3491native-built compiler it just built, and once with the compiler it built 3492the second time. In theory, the last two should produce the same 3493results, which 'make compare' can check. Each stage is configured 3494separately and compiled into a separate directory, to minimize problems 3495due to ABI incompatibilities between the native compiler and GCC. 3496 3497 If you do a change, rebuilding will also start from the first stage and 3498"bubble" up the change through the three stages. Each stage is taken 3499from its build directory (if it had been built previously), rebuilt, and 3500copied to its subdirectory. This will allow you to, for example, 3501continue a bootstrap after fixing a bug which causes the stage2 build to 3502crash. It does not provide as good coverage of the compiler as 3503bootstrapping from scratch, but it ensures that the new code is 3504syntactically correct (e.g., that you did not use GCC extensions by 3505mistake), and avoids spurious bootstrap comparison failures(1). 3506 3507 Other targets available from the top level include: 3508 3509'bootstrap-lean' 3510 Like 'bootstrap', except that the various stages are removed once 3511 they're no longer needed. This saves disk space. 3512 3513'bootstrap2' 3514'bootstrap2-lean' 3515 Performs only the first two stages of bootstrap. Unlike a 3516 three-stage bootstrap, this does not perform a comparison to test 3517 that the compiler is running properly. Note that the disk space 3518 required by a "lean" bootstrap is approximately independent of the 3519 number of stages. 3520 3521'stageN-bubble (N = 1...4, profile, feedback)' 3522 Rebuild all the stages up to N, with the appropriate flags, 3523 "bubbling" the changes as described above. 3524 3525'all-stageN (N = 1...4, profile, feedback)' 3526 Assuming that stage N has already been built, rebuild it with the 3527 appropriate flags. This is rarely needed. 3528 3529'cleanstrap' 3530 Remove everything ('make clean') and rebuilds ('make bootstrap'). 3531 3532'compare' 3533 Compares the results of stages 2 and 3. This ensures that the 3534 compiler is running properly, since it should produce the same 3535 object files regardless of how it itself was compiled. 3536 3537'profiledbootstrap' 3538 Builds a compiler with profiling feedback information. In this 3539 case, the second and third stages are named 'profile' and 3540 'feedback', respectively. For more information, see the 3541 installation instructions. 3542 3543'restrap' 3544 Restart a bootstrap, so that everything that was not built with the 3545 system compiler is rebuilt. 3546 3547'stageN-start (N = 1...4, profile, feedback)' 3548 For each package that is bootstrapped, rename directories so that, 3549 for example, 'gcc' points to the stageN GCC, compiled with the 3550 stageN-1 GCC(2). 3551 3552 You will invoke this target if you need to test or debug the stageN 3553 GCC. If you only need to execute GCC (but you need not run 'make' 3554 either to rebuild it or to run test suites), you should be able to 3555 work directly in the 'stageN-gcc' directory. This makes it easier 3556 to debug multiple stages in parallel. 3557 3558'stage' 3559 For each package that is bootstrapped, relocate its build directory 3560 to indicate its stage. For example, if the 'gcc' directory points 3561 to the stage2 GCC, after invoking this target it will be renamed to 3562 'stage2-gcc'. 3563 3564 If you wish to use non-default GCC flags when compiling the stage2 and 3565stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing 3566'make'. 3567 3568 Usually, the first stage only builds the languages that the compiler is 3569written in: typically, C and maybe Ada. If you are debugging a 3570miscompilation of a different stage2 front-end (for example, of the 3571Fortran front-end), you may want to have front-ends for other languages 3572in the first stage as well. To do so, set 'STAGE1_LANGUAGES' on the 3573command line when doing 'make'. 3574 3575 For example, in the aforementioned scenario of debugging a Fortran 3576front-end miscompilation caused by the stage1 compiler, you may need a 3577command like 3578 3579 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3580 3581 Alternatively, you can use per-language targets to build and test 3582languages that are not enabled by default in stage1. For example, 'make 3583f951' will build a Fortran compiler even in the stage1 build directory. 3584 3585 ---------- Footnotes ---------- 3586 3587 (1) Except if the compiler was buggy and miscompiled some of the 3588files that were not modified. In this case, it's best to use 'make 3589restrap'. 3590 3591 (2) Customarily, the system compiler is also termed the 'stage0' GCC. 3592 3593 3594File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3595 35966.3.5 Library Source Files and Headers under the 'gcc' Directory 3597---------------------------------------------------------------- 3598 3599FIXME: list here, with explanation, all the C source files and headers 3600under the 'gcc' directory that aren't built into the GCC executable but 3601rather are part of runtime libraries and object files, such as 3602'crtstuff.c' and 'unwind-dw2.c'. *Note Headers Installed by GCC: 3603Headers, for more information about the 'ginclude' directory. 3604 3605 3606File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3607 36086.3.6 Headers Installed by GCC 3609------------------------------ 3610 3611In general, GCC expects the system C library to provide most of the 3612headers to be used with it. However, GCC will fix those headers if 3613necessary to make them work with GCC, and will install some headers 3614required of freestanding implementations. These headers are installed 3615in 'LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3616installed by GCC; these are not documented here. (FIXME: document them 3617somewhere.) 3618 3619 Several of the headers GCC installs are in the 'ginclude' directory. 3620These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are 3621installed in 'LIBSUBDIR/include', unless the target Makefile fragment 3622(*note Target Fragment::) overrides this by setting 'USER_H'. 3623 3624 In addition to these headers and those generated by fixing system 3625headers to work with GCC, some other headers may also be installed in 3626'LIBSUBDIR/include'. 'config.gcc' may set 'extra_headers'; this 3627specifies additional headers under 'config' to be installed on some 3628systems. 3629 3630 GCC installs its own version of '<float.h>', from 'ginclude/float.h'. 3631This is done to cope with command-line options that change the 3632representation of floating point numbers. 3633 3634 GCC also installs its own version of '<limits.h>'; this is generated 3635from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system 3636also has its own version of '<limits.h>'. (GCC provides its own header 3637because it is required of ISO C freestanding implementations, but needs 3638to include the system header from its own header as well because other 3639standards such as POSIX specify additional values to be defined in 3640'<limits.h>'.) The system's '<limits.h>' header is used via 3641'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if 3642it does not need fixing to work with GCC; if it needs fixing, 3643'syslimits.h' is the fixed copy. 3644 3645 GCC can also install '<tgmath.h>'. It will do this when 'config.gcc' 3646sets 'use_gcc_tgmath' to 'yes'. 3647 3648 3649File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3650 36516.3.7 Building Documentation 3652---------------------------- 3653 3654The main GCC documentation is in the form of manuals in Texinfo format. 3655These are installed in Info format; DVI versions may be generated by 3656'make dvi', PDF versions by 'make pdf', and HTML versions by 'make 3657html'. In addition, some man pages are generated from the Texinfo 3658manuals, there are some other text files with miscellaneous 3659documentation, and runtime libraries have their own documentation 3660outside the 'gcc' directory. FIXME: document the documentation for 3661runtime libraries somewhere. 3662 3663* Menu: 3664 3665* Texinfo Manuals:: GCC manuals in Texinfo format. 3666* Man Page Generation:: Generating man pages from Texinfo manuals. 3667* Miscellaneous Docs:: Miscellaneous text files with documentation. 3668 3669 3670File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3671 36726.3.7.1 Texinfo Manuals 3673....................... 3674 3675The manuals for GCC as a whole, and the C and C++ front ends, are in 3676files 'doc/*.texi'. Other front ends have their own manuals in files 3677'LANGUAGE/*.texi'. Common files 'doc/include/*.texi' are provided which 3678may be included in multiple manuals; the following files are in 3679'doc/include': 3680 3681'fdl.texi' 3682 The GNU Free Documentation License. 3683'funding.texi' 3684 The section "Funding Free Software". 3685'gcc-common.texi' 3686 Common definitions for manuals. 3687'gpl_v3.texi' 3688 The GNU General Public License. 3689'texinfo.tex' 3690 A copy of 'texinfo.tex' known to work with the GCC manuals. 3691 3692 DVI-formatted manuals are generated by 'make dvi', which uses 3693'texi2dvi' (via the Makefile macro '$(TEXI2DVI)'). PDF-formatted 3694manuals are generated by 'make pdf', which uses 'texi2pdf' (via the 3695Makefile macro '$(TEXI2PDF)'). HTML formatted manuals are generated by 3696'make html'. Info manuals are generated by 'make info' (which is run as 3697part of a bootstrap); this generates the manuals in the source 3698directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and 3699they are included in release distributions. 3700 3701 Manuals are also provided on the GCC web site, in both HTML and 3702PostScript forms. This is done via the script 3703'maintainer-scripts/update_web_docs_git'. Each manual to be provided 3704online must be listed in the definition of 'MANUALS' in that file; a 3705file 'NAME.texi' must only appear once in the source tree, and the 3706output manual must have the same name as the source file. (However, 3707other Texinfo files, included in manuals but not themselves the root 3708files of manuals, may have names that appear more than once in the 3709source tree.) The manual file 'NAME.texi' should only include other 3710files in its own directory or in 'doc/include'. HTML manuals will be 3711generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and 3712'dvips', and PDF manuals by 'texi2pdf'. All Texinfo files that are 3713parts of manuals must be version-controlled, even if they are generated 3714files, for the generation of online manuals to work. 3715 3716 The installation manual, 'doc/install.texi', is also provided on the 3717GCC web site. The HTML version is generated by the script 3718'doc/install.texi2html'. 3719 3720 3721File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3722 37236.3.7.2 Man Page Generation 3724........................... 3725 3726Because of user demand, in addition to full Texinfo manuals, man pages 3727are provided which contain extracts from those manuals. These man pages 3728are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and 3729'pod2man'. (The man page for 'g++', 'cp/g++.1', just contains a '.so' 3730reference to 'gcc.1', but all the other man pages are generated from 3731Texinfo manuals.) 3732 3733 Because many systems may not have the necessary tools installed to 3734generate the man pages, they are only generated if the 'configure' 3735script detects that recent enough tools are installed, and the Makefiles 3736allow generating man pages to fail without aborting the build. Man 3737pages are also included in release distributions. They are generated in 3738the source directory. 3739 3740 Magic comments in Texinfo files starting '@c man' control what parts of 3741a Texinfo file go into a man page. Only a subset of Texinfo is 3742supported by 'texi2pod.pl', and it may be necessary to add support for 3743more Texinfo features to this script when generating new man pages. To 3744improve the man page output, some special Texinfo macros are provided in 3745'doc/include/gcc-common.texi' which 'texi2pod.pl' understands: 3746 3747'@gcctabopt' 3748 Use in the form '@table @gcctabopt' for tables of options, where 3749 for printed output the effect of '@code' is better than that of 3750 '@option' but for man page output a different effect is wanted. 3751'@gccoptlist' 3752 Use for summary lists of options in manuals. 3753'@gol' 3754 Use at the end of each line inside '@gccoptlist'. This is 3755 necessary to avoid problems with differences in how the 3756 '@gccoptlist' macro is handled by different Texinfo formatters. 3757 3758 FIXME: describe the 'texi2pod.pl' input language and magic comments in 3759more detail. 3760 3761 3762File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3763 37646.3.7.3 Miscellaneous Documentation 3765................................... 3766 3767In addition to the formal documentation that is installed by GCC, there 3768are several other text files in the 'gcc' subdirectory with 3769miscellaneous documentation: 3770 3771'ABOUT-GCC-NLS' 3772 Notes on GCC's Native Language Support. FIXME: this should be part 3773 of this manual rather than a separate file. 3774'ABOUT-NLS' 3775 Notes on the Free Translation Project. 3776'COPYING' 3777'COPYING3' 3778 The GNU General Public License, Versions 2 and 3. 3779'COPYING.LIB' 3780'COPYING3.LIB' 3781 The GNU Lesser General Public License, Versions 2.1 and 3. 3782'*ChangeLog*' 3783'*/ChangeLog*' 3784 Change log files for various parts of GCC. 3785'LANGUAGES' 3786 Details of a few changes to the GCC front-end interface. FIXME: 3787 the information in this file should be part of general 3788 documentation of the front-end interface in this manual. 3789'ONEWS' 3790 Information about new features in old versions of GCC. (For recent 3791 versions, the information is on the GCC web site.) 3792'README.Portability' 3793 Information about portability issues when writing code in GCC. 3794 FIXME: why isn't this part of this manual or of the GCC Coding 3795 Conventions? 3796 3797 FIXME: document such files in subdirectories, at least 'config', 'c', 3798'cp', 'objc', 'testsuite'. 3799 3800 3801File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3802 38036.3.8 Anatomy of a Language Front End 3804------------------------------------- 3805 3806A front end for a language in GCC has the following parts: 3807 3808 * A directory 'LANGUAGE' under 'gcc' containing source files for that 3809 front end. *Note The Front End 'LANGUAGE' Directory: Front End 3810 Directory, for details. 3811 * A mention of the language in the list of supported languages in 3812 'gcc/doc/install.texi'. 3813 * A mention of the name under which the language's runtime library is 3814 recognized by '--enable-shared=PACKAGE' in the documentation of 3815 that option in 'gcc/doc/install.texi'. 3816 * A mention of any special prerequisites for building the front end 3817 in the documentation of prerequisites in 'gcc/doc/install.texi'. 3818 * Details of contributors to that front end in 3819 'gcc/doc/contrib.texi'. If the details are in that front end's own 3820 manual then there should be a link to that manual's list in 3821 'contrib.texi'. 3822 * Information about support for that language in 3823 'gcc/doc/frontends.texi'. 3824 * Information about standards for that language, and the front end's 3825 support for them, in 'gcc/doc/standards.texi'. This may be a link 3826 to such information in the front end's own manual. 3827 * Details of source file suffixes for that language and '-x LANG' 3828 options supported, in 'gcc/doc/invoke.texi'. 3829 * Entries in 'default_compilers' in 'gcc.c' for source file suffixes 3830 for that language. 3831 * Preferably testsuites, which may be under 'gcc/testsuite' or 3832 runtime library directories. FIXME: document somewhere how to 3833 write testsuite harnesses. 3834 * Probably a runtime library for the language, outside the 'gcc' 3835 directory. FIXME: document this further. 3836 * Details of the directories of any runtime libraries in 3837 'gcc/doc/sourcebuild.texi'. 3838 * Check targets in 'Makefile.def' for the top-level 'Makefile' to 3839 check just the compiler or the compiler and runtime library for the 3840 language. 3841 3842 If the front end is added to the official GCC source repository, the 3843following are also necessary: 3844 3845 * At least one Bugzilla component for bugs in that front end and 3846 runtime libraries. This category needs to be added to the Bugzilla 3847 database. 3848 * Normally, one or more maintainers of that front end listed in 3849 'MAINTAINERS'. 3850 * Mentions on the GCC web site in 'index.html' and 'frontends.html', 3851 with any relevant links on 'readings.html'. (Front ends that are 3852 not an official part of GCC may also be listed on 'frontends.html', 3853 with relevant links.) 3854 * A news item on 'index.html', and possibly an announcement on the 3855 <gcc-announce@gcc.gnu.org> mailing list. 3856 * The front end's manuals should be mentioned in 3857 'maintainer-scripts/update_web_docs_git' (*note Texinfo Manuals::) 3858 and the online manuals should be linked to from 3859 'onlinedocs/index.html'. 3860 * Any old releases or CVS repositories of the front end, before its 3861 inclusion in GCC, should be made available on the GCC web site at 3862 <https://gcc.gnu.org/pub/gcc/old-releases/>. 3863 * The release and snapshot script 'maintainer-scripts/gcc_release' 3864 should be updated to generate appropriate tarballs for this front 3865 end. 3866 * If this front end includes its own version files that include the 3867 current date, 'maintainer-scripts/update_version' should be updated 3868 accordingly. 3869 3870* Menu: 3871 3872* Front End Directory:: The front end 'LANGUAGE' directory. 3873* Front End Config:: The front end 'config-lang.in' file. 3874* Front End Makefile:: The front end 'Make-lang.in' file. 3875 3876 3877File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3878 38796.3.8.1 The Front End 'LANGUAGE' Directory 3880.......................................... 3881 3882A front end 'LANGUAGE' directory contains the source files of that front 3883end (but not of any runtime libraries, which should be outside the 'gcc' 3884directory). This includes documentation, and possibly some subsidiary 3885programs built alongside the front end. Certain files are special and 3886other parts of the compiler depend on their names: 3887 3888'config-lang.in' 3889 This file is required in all language subdirectories. *Note The 3890 Front End 'config-lang.in' File: Front End Config, for details of 3891 its contents 3892'Make-lang.in' 3893 This file is required in all language subdirectories. *Note The 3894 Front End 'Make-lang.in' File: Front End Makefile, for details of 3895 its contents. 3896'lang.opt' 3897 This file registers the set of switches that the front end accepts 3898 on the command line, and their '--help' text. *Note Options::. 3899'lang-specs.h' 3900 This file provides entries for 'default_compilers' in 'gcc.c' which 3901 override the default of giving an error that a compiler for that 3902 language is not installed. 3903'LANGUAGE-tree.def' 3904 This file, which need not exist, defines any language-specific tree 3905 codes. 3906 3907 3908File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3909 39106.3.8.2 The Front End 'config-lang.in' File 3911........................................... 3912 3913Each language subdirectory contains a 'config-lang.in' file. This file 3914is a shell script that may define some variables describing the 3915language: 3916 3917'language' 3918 This definition must be present, and gives the name of the language 3919 for some purposes such as arguments to '--enable-languages'. 3920'lang_requires' 3921 If defined, this variable lists (space-separated) language front 3922 ends other than C that this front end requires to be enabled (with 3923 the names given being their 'language' settings). For example, the 3924 Obj-C++ front end depends on the C++ and ObjC front ends, so sets 3925 'lang_requires="objc c++"'. 3926'subdir_requires' 3927 If defined, this variable lists (space-separated) front end 3928 directories other than C that this front end requires to be 3929 present. For example, the Objective-C++ front end uses source 3930 files from the C++ and Objective-C front ends, so sets 3931 'subdir_requires="cp objc"'. 3932'target_libs' 3933 If defined, this variable lists (space-separated) targets in the 3934 top level 'Makefile' to build the runtime libraries for this 3935 language, such as 'target-libobjc'. 3936'lang_dirs' 3937 If defined, this variable lists (space-separated) top level 3938 directories (parallel to 'gcc'), apart from the runtime libraries, 3939 that should not be configured if this front end is not built. 3940'build_by_default' 3941 If defined to 'no', this language front end is not built unless 3942 enabled in a '--enable-languages' argument. Otherwise, front ends 3943 are built by default, subject to any special logic in 3944 'configure.ac' (as is present to disable the Ada front end if the 3945 Ada compiler is not already installed). 3946'boot_language' 3947 If defined to 'yes', this front end is built in stage1 of the 3948 bootstrap. This is only relevant to front ends written in their 3949 own languages. 3950'compilers' 3951 If defined, a space-separated list of compiler executables that 3952 will be run by the driver. The names here will each end with 3953 '\$(exeext)'. 3954'outputs' 3955 If defined, a space-separated list of files that should be 3956 generated by 'configure' substituting values in them. This 3957 mechanism can be used to create a file 'LANGUAGE/Makefile' from 3958 'LANGUAGE/Makefile.in', but this is deprecated, building everything 3959 from the single 'gcc/Makefile' is preferred. 3960'gtfiles' 3961 If defined, a space-separated list of files that should be scanned 3962 by 'gengtype.c' to generate the garbage collection tables and 3963 routines for this language. This excludes the files that are 3964 common to all front ends. *Note Type Information::. 3965 3966 3967File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 3968 39696.3.8.3 The Front End 'Make-lang.in' File 3970......................................... 3971 3972Each language subdirectory contains a 'Make-lang.in' file. It contains 3973targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in 3974'config-lang.in') for the following values of 'HOOK', and any other 3975Makefile rules required to build those targets (which may if necessary 3976use other Makefiles specified in 'outputs' in 'config-lang.in', although 3977this is deprecated). It also adds any testsuite targets that can use 3978the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'. 3979 3980'all.cross' 3981'start.encap' 3982'rest.encap' 3983 FIXME: exactly what goes in each of these targets? 3984'tags' 3985 Build an 'etags' 'TAGS' file in the language subdirectory in the 3986 source tree. 3987'info' 3988 Build info documentation for the front end, in the build directory. 3989 This target is only called by 'make bootstrap' if a suitable 3990 version of 'makeinfo' is available, so does not need to check for 3991 this, and should fail if an error occurs. 3992'dvi' 3993 Build DVI documentation for the front end, in the build directory. 3994 This should be done using '$(TEXI2DVI)', with appropriate '-I' 3995 arguments pointing to directories of included files. 3996'pdf' 3997 Build PDF documentation for the front end, in the build directory. 3998 This should be done using '$(TEXI2PDF)', with appropriate '-I' 3999 arguments pointing to directories of included files. 4000'html' 4001 Build HTML documentation for the front end, in the build directory. 4002'man' 4003 Build generated man pages for the front end from Texinfo manuals 4004 (*note Man Page Generation::), in the build directory. This target 4005 is only called if the necessary tools are available, but should 4006 ignore errors so as not to stop the build if errors occur; man 4007 pages are optional and the tools involved may be installed in a 4008 broken way. 4009'install-common' 4010 Install everything that is part of the front end, apart from the 4011 compiler executables listed in 'compilers' in 'config-lang.in'. 4012'install-info' 4013 Install info documentation for the front end, if it is present in 4014 the source directory. This target should have dependencies on info 4015 files that should be installed. 4016'install-man' 4017 Install man pages for the front end. This target should ignore 4018 errors. 4019'install-plugin' 4020 Install headers needed for plugins. 4021'srcextra' 4022 Copies its dependencies into the source directory. This generally 4023 should be used for generated files such as Bison output files which 4024 are not version-controlled, but should be included in any release 4025 tarballs. This target will be executed during a bootstrap if 4026 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4027 option. 4028'srcinfo' 4029'srcman' 4030 Copies its dependencies into the source directory. These targets 4031 will be executed during a bootstrap if 4032 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4033 option. 4034'uninstall' 4035 Uninstall files installed by installing the compiler. This is 4036 currently documented not to be supported, so the hook need not do 4037 anything. 4038'mostlyclean' 4039'clean' 4040'distclean' 4041'maintainer-clean' 4042 The language parts of the standard GNU '*clean' targets. *Note 4043 Standard Targets for Users: (standards)Standard Targets, for 4044 details of the standard targets. For GCC, 'maintainer-clean' 4045 should delete all generated files in the source directory that are 4046 not version-controlled, but should not delete anything that is. 4047 4048 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of 4049host object files that are used by that language. 4050 4051 4052File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4053 40546.3.9 Anatomy of a Target Back End 4055---------------------------------- 4056 4057A back end for a target architecture in GCC has the following parts: 4058 4059 * A directory 'MACHINE' under 'gcc/config', containing a machine 4060 description 'MACHINE.md' file (*note Machine Descriptions: Machine 4061 Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a 4062 source file 'MACHINE.c' (*note Target Description Macros and 4063 Functions: Target Macros.), possibly a target Makefile fragment 4064 't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.), 4065 and maybe some other files. The names of these files may be 4066 changed from the defaults given by explicit specifications in 4067 'config.gcc'. 4068 * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE' 4069 directory, containing additional machine modes to represent 4070 condition codes. *Note Condition Code::, for further details. 4071 * An optional 'MACHINE.opt' file in the 'MACHINE' directory, 4072 containing a list of target-specific options. You can also add 4073 other option files using the 'extra_options' variable in 4074 'config.gcc'. *Note Options::. 4075 * Entries in 'config.gcc' (*note The 'config.gcc' File: System 4076 Config.) for the systems with this target architecture. 4077 * Documentation in 'gcc/doc/invoke.texi' for any command-line options 4078 supported by this target (*note Run-time Target Specification: 4079 Run-time Target.). This means both entries in the summary table of 4080 options and details of the individual options. 4081 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4082 attributes supported (*note Defining target-specific uses of 4083 '__attribute__': Target Attributes.), including where the same 4084 attribute is already supported on some targets, which are 4085 enumerated in the manual. 4086 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4087 pragmas supported. 4088 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4089 built-in functions supported. 4090 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4091 format checking styles supported. 4092 * Documentation in 'gcc/doc/md.texi' of any target-specific 4093 constraint letters (*note Constraints for Particular Machines: 4094 Machine Constraints.). 4095 * A note in 'gcc/doc/contrib.texi' under the person or people who 4096 contributed the target support. 4097 * Entries in 'gcc/doc/install.texi' for all target triplets supported 4098 with this target architecture, giving details of any special notes 4099 about installation for this target, or saying that there are no 4100 special notes if there are none. 4101 * Possibly other support outside the 'gcc' directory for runtime 4102 libraries. FIXME: reference docs for this. The 'libstdc++' 4103 porting manual needs to be installed as info for this to work, or 4104 to be a chapter of this manual. 4105 4106 The 'MACHINE.h' header is included very early in GCC's standard 4107sequence of header files, while 'MACHINE-protos.h' is included late in 4108the sequence. Thus 'MACHINE-protos.h' can include declarations 4109referencing types that are not defined when 'MACHINE.h' is included, 4110specifically including those from 'rtl.h' and 'tree.h'. Since both RTL 4111and tree types may not be available in every context where 4112'MACHINE-protos.h' is included, in this file you should guard 4113declarations using these types inside appropriate '#ifdef RTX_CODE' or 4114'#ifdef TREE_CODE' conditional code segments. 4115 4116 If the backend uses shared data structures that require 'GTY' markers 4117for garbage collection (*note Type Information::), you must declare 4118those in 'MACHINE.h' rather than 'MACHINE-protos.h'. Any definitions 4119required for building libgcc must also go in 'MACHINE.h'. 4120 4121 GCC uses the macro 'IN_TARGET_CODE' to distinguish between 4122machine-specific '.c' and '.cc' files and machine-independent '.c' and 4123'.cc' files. Machine-specific files should use the directive: 4124 4125 #define IN_TARGET_CODE 1 4126 4127 before including 'config.h'. 4128 4129 If the back end is added to the official GCC source repository, the 4130following are also necessary: 4131 4132 * An entry for the target architecture in 'readings.html' on the GCC 4133 web site, with any relevant links. 4134 * Details of the properties of the back end and target architecture 4135 in 'backends.html' on the GCC web site. 4136 * A news item about the contribution of support for that target 4137 architecture, in 'index.html' on the GCC web site. 4138 * Normally, one or more maintainers of that target listed in 4139 'MAINTAINERS'. Some existing architectures may be unmaintained, 4140 but it would be unusual to add support for a target that does not 4141 have a maintainer when support is added. 4142 * Target triplets covering all 'config.gcc' stanzas for the target, 4143 in the list in 'contrib/config-list.mk'. 4144 4145 4146File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4147 41487 Testsuites 4149************ 4150 4151GCC contains several testsuites to help maintain compiler quality. Most 4152of the runtime libraries and language front ends in GCC have testsuites. 4153Currently only the C language testsuites are documented here; FIXME: 4154document the others. 4155 4156* Menu: 4157 4158* Test Idioms:: Idioms used in testsuite code. 4159* Test Directives:: Directives used within DejaGnu tests. 4160* Ada Tests:: The Ada language testsuites. 4161* C Tests:: The C language testsuites. 4162* LTO Testing:: Support for testing link-time optimizations. 4163* gcov Testing:: Support for testing gcov. 4164* profopt Testing:: Support for testing profile-directed optimizations. 4165* compat Testing:: Support for testing binary compatibility. 4166* Torture Tests:: Support for torture testing using multiple options. 4167* GIMPLE Tests:: Support for testing GIMPLE passes. 4168* RTL Tests:: Support for testing RTL passes. 4169 4170 4171File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4172 41737.1 Idioms Used in Testsuite Code 4174================================= 4175 4176In general, C testcases have a trailing '-N.c', starting with '-1.c', in 4177case other testcases with similar names are added later. If the test is 4178a test of some well-defined feature, it should have a name referring to 4179that feature such as 'FEATURE-1.c'. If it does not test a well-defined 4180feature but just happens to exercise a bug somewhere in the compiler, 4181and a bug report has been filed for this bug in the GCC bug database, 4182'prBUG-NUMBER-1.c' is the appropriate form of name. Otherwise (for 4183miscellaneous bugs not filed in the GCC bug database), and previously 4184more generally, test cases are named after the date on which they were 4185added. This allows people to tell at a glance whether a test failure is 4186because of a recently found bug that has not yet been fixed, or whether 4187it may be a regression, but does not give any other information about 4188the bug or where discussion of it may be found. Some other language 4189testsuites follow similar conventions. 4190 4191 In the 'gcc.dg' testsuite, it is often necessary to test that an error 4192is indeed a hard error and not just a warning--for example, where it is 4193a constraint violation in the C standard, which must become an error 4194with '-pedantic-errors'. The following idiom, where the first line 4195shown is line LINE of the file and the line that generates the error, is 4196used for this: 4197 4198 /* { dg-bogus "warning" "warning in place of error" } */ 4199 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4200 4201 It may be necessary to check that an expression is an integer constant 4202expression and has a certain value. To check that 'E' has value 'V', an 4203idiom similar to the following is used: 4204 4205 char x[((E) == (V) ? 1 : -1)]; 4206 4207 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions 4208about the types of expressions. See, for example, 4209'gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4210rules for the types of conditional expressions in the C standard; see, 4211for example, 'gcc.dg/c99-intconst-1.c'. 4212 4213 It is useful to be able to test that optimizations are being made 4214properly. This cannot be done in all cases, but it can be done where 4215the optimization will lead to code being optimized away (for example, 4216where flow analysis or alias analysis should show that certain code 4217cannot be called) or to functions not being called because they have 4218been expanded as built-in functions. Such tests go in 4219'gcc.c-torture/execute'. Where code should be optimized away, a call to 4220a nonexistent function such as 'link_failure ()' may be inserted; a 4221definition 4222 4223 #ifndef __OPTIMIZE__ 4224 void 4225 link_failure (void) 4226 { 4227 abort (); 4228 } 4229 #endif 4230 4231will also be needed so that linking still succeeds when the test is run 4232without optimization. When all calls to a built-in function should have 4233been optimized and no calls to the non-built-in version of the function 4234should remain, that function may be defined as 'static' to call 'abort 4235()' (although redeclaring a function as static may not work on all 4236targets). 4237 4238 All testcases must be portable. Target-specific testcases must have 4239appropriate code to avoid causing failures on unsupported systems; 4240unfortunately, the mechanisms for this differ by directory. 4241 4242 FIXME: discuss non-C testsuites here. 4243 4244 4245File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4246 42477.2 Directives used within DejaGnu tests 4248======================================== 4249 4250* Menu: 4251 4252* Directives:: Syntax and descriptions of test directives. 4253* Selectors:: Selecting targets to which a test applies. 4254* Effective-Target Keywords:: Keywords describing target attributes. 4255* Add Options:: Features for 'dg-add-options' 4256* Require Support:: Variants of 'dg-require-SUPPORT' 4257* Final Actions:: Commands for use in 'dg-final' 4258 4259 4260File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4261 42627.2.1 Syntax and Descriptions of test directives 4263------------------------------------------------ 4264 4265Test directives appear within comments in a test source file and begin 4266with 'dg-'. Some of these are defined within DejaGnu and others are 4267local to the GCC testsuite. 4268 4269 The order in which test directives appear in a test can be important: 4270directives local to GCC sometimes override information used by the 4271DejaGnu directives, which know nothing about the GCC directives, so the 4272DejaGnu directives must precede GCC directives. 4273 4274 Several test directives include selectors (*note Selectors::) which are 4275usually preceded by the keyword 'target' or 'xfail'. 4276 42777.2.1.1 Specify how to build the test 4278..................................... 4279 4280'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4281 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4282 is executed. It is one of: 4283 4284 'preprocess' 4285 Compile with '-E' to run only the preprocessor. 4286 'compile' 4287 Compile with '-S' to produce an assembly code file. 4288 'assemble' 4289 Compile with '-c' to produce a relocatable object file. 4290 'link' 4291 Compile, assemble, and link to produce an executable file. 4292 'run' 4293 Produce and run an executable file, which is expected to 4294 return an exit code of 0. 4295 4296 The default is 'compile'. That can be overridden for a set of 4297 tests by redefining 'dg-do-what-default' within the '.exp' file for 4298 those tests. 4299 4300 If the directive includes the optional '{ target SELECTOR }' then 4301 the test is skipped unless the target system matches the SELECTOR. 4302 4303 If DO-WHAT-KEYWORD is 'run' and the directive includes the optional 4304 '{ xfail SELECTOR }' and the selector is met then the test is 4305 expected to fail. The 'xfail' clause is ignored for other values 4306 of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'. 4307 43087.2.1.2 Specify additional compiler options 4309........................................... 4310 4311'{ dg-options OPTIONS [{ target SELECTOR }] }' 4312 This DejaGnu directive provides a list of compiler options, to be 4313 used if the target system matches SELECTOR, that replace the 4314 default options used for this set of tests. 4315 4316'{ dg-add-options FEATURE ... }' 4317 Add any compiler options that are needed to access certain 4318 features. This directive does nothing on targets that enable the 4319 features by default, or that don't provide them at all. It must 4320 come after all 'dg-options' directives. For supported values of 4321 FEATURE see *note Add Options::. 4322 4323'{ dg-additional-options OPTIONS [{ target SELECTOR }] }' 4324 This directive provides a list of compiler options, to be used if 4325 the target system matches SELECTOR, that are added to the default 4326 options used for this set of tests. 4327 43287.2.1.3 Modify the test timeout value 4329..................................... 4330 4331The normal timeout limit, in seconds, is found by searching the 4332following in order: 4333 4334 * the value defined by an earlier 'dg-timeout' directive in the test 4335 4336 * variable TOOL_TIMEOUT defined by the set of tests 4337 4338 * GCC,TIMEOUT set in the target board 4339 4340 * 300 4341 4342'{ dg-timeout N [{target SELECTOR }] }' 4343 Set the time limit for the compilation and for the execution of the 4344 test to the specified number of seconds. 4345 4346'{ dg-timeout-factor X [{ target SELECTOR }] }' 4347 Multiply the normal time limit for compilation and execution of the 4348 test by the specified floating-point factor. 4349 43507.2.1.4 Skip a test for some targets 4351.................................... 4352 4353'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4354 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4355 element is a string of zero or more GCC options. Skip the test if 4356 all of the following conditions are met: 4357 * the test system is included in SELECTOR 4358 4359 * for at least one of the option strings in INCLUDE-OPTS, every 4360 option from that string is in the set of options with which 4361 the test would be compiled; use '"*"' for an INCLUDE-OPTS list 4362 that matches any options; that is the default if INCLUDE-OPTS 4363 is not specified 4364 4365 * for each of the option strings in EXCLUDE-OPTS, at least one 4366 option from that string is not in the set of options with 4367 which the test would be compiled; use '""' for an empty 4368 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4369 specified 4370 4371 For example, to skip a test if option '-Os' is present: 4372 4373 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4374 4375 To skip a test if both options '-O2' and '-g' are present: 4376 4377 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4378 4379 To skip a test if either '-O2' or '-O3' is present: 4380 4381 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4382 4383 To skip a test unless option '-Os' is present: 4384 4385 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4386 4387 To skip a test if either '-O2' or '-O3' is used with '-g' but not 4388 if '-fpic' is also present: 4389 4390 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4391 4392'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4393 Skip the test if the test target, including current multilib flags, 4394 is not covered by the effective-target keyword. If the directive 4395 includes the optional '{ SELECTOR }' then the effective-target test 4396 is only performed if the target system matches the SELECTOR. This 4397 directive must appear after any 'dg-do' directive in the test and 4398 before any 'dg-additional-sources' directive. *Note 4399 Effective-Target Keywords::. 4400 4401'{ dg-require-SUPPORT args }' 4402 Skip the test if the target does not provide the required support. 4403 These directives must appear after any 'dg-do' directive in the 4404 test and before any 'dg-additional-sources' directive. They 4405 require at least one argument, which can be an empty string if the 4406 specific procedure does not examine the argument. *Note Require 4407 Support::, for a complete list of these directives. 4408 44097.2.1.5 Expect a test to fail for some targets 4410.............................................. 4411 4412'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4413 Expect the test to fail if the conditions (which are the same as 4414 for 'dg-skip-if') are met. This does not affect the execute step. 4415 4416'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4417 Expect the execute step of a test to fail if the conditions (which 4418 are the same as for 'dg-skip-if') are met. 4419 44207.2.1.6 Expect the test executable to fail 4421.......................................... 4422 4423'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4424 Expect the test executable to return a nonzero exit status if the 4425 conditions (which are the same as for 'dg-skip-if') are met. 4426 44277.2.1.7 Verify compiler messages 4428................................ 4429 4430Where LINE is an accepted argument for these commands, a value of '0' 4431can be used if there is no line associated with the message. 4432 4433'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }' 4434 This DejaGnu directive appears on a source line that is expected to 4435 get an error message, or else specifies the source line associated 4436 with the message. If there is no message for that line or if the 4437 text of that message is not matched by REGEXP then the check fails 4438 and COMMENT is included in the 'FAIL' message. The check does not 4439 look for the string 'error' unless it is part of REGEXP. 4440 4441'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }' 4442 This DejaGnu directive appears on a source line that is expected to 4443 get a warning message, or else specifies the source line associated 4444 with the message. If there is no message for that line or if the 4445 text of that message is not matched by REGEXP then the check fails 4446 and COMMENT is included in the 'FAIL' message. The check does not 4447 look for the string 'warning' unless it is part of REGEXP. 4448 4449'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }' 4450 The line is expected to get a message other than an error or 4451 warning. If there is no message for that line or if the text of 4452 that message is not matched by REGEXP then the check fails and 4453 COMMENT is included in the 'FAIL' message. 4454 4455'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] ]] }' 4456 This DejaGnu directive appears on a source line that should not get 4457 a message matching REGEXP, or else specifies the source line 4458 associated with the bogus message. It is usually used with 'xfail' 4459 to indicate that the message is a known problem for a particular 4460 set of targets. 4461 4462'{ dg-line LINENUMVAR }' 4463 This DejaGnu directive sets the variable LINENUMVAR to the line 4464 number of the source line. The variable LINENUMVAR can then be 4465 used in subsequent 'dg-error', 'dg-warning', 'dg-message' and 4466 'dg-bogus' directives. For example: 4467 4468 int a; /* { dg-line first_def_a } */ 4469 float a; /* { dg-error "conflicting types of" } */ 4470 /* { dg-message "previous declaration of" "" { target *-*-* } first_def_a } */ 4471 4472'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4473 This DejaGnu directive indicates that the test is expected to fail 4474 due to compiler messages that are not handled by 'dg-error', 4475 'dg-warning' or 'dg-bogus'. For this directive 'xfail' has the 4476 same effect as 'target'. 4477 4478'{ dg-prune-output REGEXP }' 4479 Prune messages matching REGEXP from the test output. 4480 44817.2.1.8 Verify output of the test executable 4482............................................ 4483 4484'{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4485 This DejaGnu directive compares REGEXP to the combined output that 4486 the test executable writes to 'stdout' and 'stderr'. 4487 44887.2.1.9 Specify environment variables for a test 4489................................................ 4490 4491'{ dg-set-compiler-env-var VAR_NAME "VAR_VALUE" }' 4492 Specify that the environment variable VAR_NAME needs to be set to 4493 VAR_VALUE before invoking the compiler on the test file. 4494 4495'{ dg-set-target-env-var VAR_NAME "VAR_VALUE" }' 4496 Specify that the environment variable VAR_NAME needs to be set to 4497 VAR_VALUE before execution of the program created by the test. 4498 44997.2.1.10 Specify additional files for a test 4500............................................ 4501 4502'{ dg-additional-files "FILELIST" }' 4503 Specify additional files, other than source files, that must be 4504 copied to the system where the compiler runs. 4505 4506'{ dg-additional-sources "FILELIST" }' 4507 Specify additional source files to appear in the compile line 4508 following the main test file. 4509 45107.2.1.11 Add checks at the end of a test 4511........................................ 4512 4513'{ dg-final { LOCAL-DIRECTIVE } }' 4514 This DejaGnu directive is placed within a comment anywhere in the 4515 source file and is processed after the test has been compiled and 4516 run. Multiple 'dg-final' commands are processed in the order in 4517 which they appear in the source file. *Note Final Actions::, for a 4518 list of directives that can be used within 'dg-final'. 4519 4520 4521File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4522 45237.2.2 Selecting targets to which a test applies 4524----------------------------------------------- 4525 4526Several test directives include SELECTORs to limit the targets for which 4527a test is run or to declare that a test is expected to fail on 4528particular targets. 4529 4530 A selector is: 4531 * one or more target triplets, possibly including wildcard 4532 characters; use '*-*-*' to match any target 4533 * a single effective-target keyword (*note Effective-Target 4534 Keywords::) 4535 * a logical expression 4536 4537 Depending on the context, the selector specifies whether a test is 4538skipped and reported as unsupported or is expected to fail. A context 4539that allows either 'target' or 'xfail' also allows '{ target SELECTOR1 4540xfail SELECTOR2 }' to skip the test for targets that don't match 4541SELECTOR1 and the test to fail for targets that match SELECTOR2. 4542 4543 A selector expression appears within curly braces and uses a single 4544logical operator: one of '!', '&&', or '||'. An operand is another 4545selector expression, an effective-target keyword, a single target 4546triplet, or a list of target triplets within quotes or curly braces. 4547For example: 4548 4549 { target { ! "hppa*-*-* ia64*-*-*" } } 4550 { target { powerpc*-*-* && lp64 } } 4551 { xfail { lp64 || vect_no_align } } 4552 4553 4554File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4555 45567.2.3 Keywords describing target attributes 4557------------------------------------------- 4558 4559Effective-target keywords identify sets of targets that support 4560particular functionality. They are used to limit tests to be run only 4561for particular targets, or to specify that particular sets of targets 4562are expected to fail some tests. 4563 4564 Effective-target keywords are defined in 'lib/target-supports.exp' in 4565the GCC testsuite, with the exception of those that are documented as 4566being local to a particular test directory. 4567 4568 The 'effective target' takes into account all of the compiler options 4569with which the test will be compiled, including the multilib options. 4570By convention, keywords ending in '_nocache' can also include options 4571specified for the particular test in an earlier 'dg-options' or 4572'dg-add-options' directive. 4573 45747.2.3.1 Endianness 4575.................. 4576 4577'be' 4578 Target uses big-endian memory order for multi-byte and multi-word 4579 data. 4580 4581'le' 4582 Target uses little-endian memory order for multi-byte and 4583 multi-word data. 4584 45857.2.3.2 Data type sizes 4586....................... 4587 4588'ilp32' 4589 Target has 32-bit 'int', 'long', and pointers. 4590 4591'lp64' 4592 Target has 32-bit 'int', 64-bit 'long' and pointers. 4593 4594'llp64' 4595 Target has 32-bit 'int' and 'long', 64-bit 'long long' and 4596 pointers. 4597 4598'double64' 4599 Target has 64-bit 'double'. 4600 4601'double64plus' 4602 Target has 'double' that is 64 bits or longer. 4603 4604'longdouble128' 4605 Target has 128-bit 'long double'. 4606 4607'int32plus' 4608 Target has 'int' that is at 32 bits or longer. 4609 4610'int16' 4611 Target has 'int' that is 16 bits or shorter. 4612 4613'longlong64' 4614 Target has 64-bit 'long long'. 4615 4616'long_neq_int' 4617 Target has 'int' and 'long' with different sizes. 4618 4619'int_eq_float' 4620 Target has 'int' and 'float' with the same size. 4621 4622'ptr_eq_long' 4623 Target has pointers ('void *') and 'long' with the same size. 4624 4625'large_double' 4626 Target supports 'double' that is longer than 'float'. 4627 4628'large_long_double' 4629 Target supports 'long double' that is longer than 'double'. 4630 4631'ptr32plus' 4632 Target has pointers that are 32 bits or longer. 4633 4634'size20plus' 4635 Target has a 20-bit or larger address space, so at least supports 4636 16-bit array and structure sizes. 4637 4638'size32plus' 4639 Target has a 32-bit or larger address space, so at least supports 4640 24-bit array and structure sizes. 4641 4642'4byte_wchar_t' 4643 Target has 'wchar_t' that is at least 4 bytes. 4644 4645'floatN' 4646 Target has the '_FloatN' type. 4647 4648'floatNx' 4649 Target has the '_FloatNx' type. 4650 4651'floatN_runtime' 4652 Target has the '_FloatN' type, including runtime support for any 4653 options added with 'dg-add-options'. 4654 4655'floatNx_runtime' 4656 Target has the '_FloatNx' type, including runtime support for any 4657 options added with 'dg-add-options'. 4658 4659'floatn_nx_runtime' 4660 Target has runtime support for any options added with 4661 'dg-add-options' for any '_FloatN' or '_FloatNx' type. 4662 4663'inf' 4664 Target supports floating point infinite ('inf') for type 'double'. 4665 46667.2.3.3 Fortran-specific attributes 4667................................... 4668 4669'fortran_integer_16' 4670 Target supports Fortran 'integer' that is 16 bytes or longer. 4671 4672'fortran_real_10' 4673 Target supports Fortran 'real' that is 10 bytes or longer. 4674 4675'fortran_real_16' 4676 Target supports Fortran 'real' that is 16 bytes or longer. 4677 4678'fortran_large_int' 4679 Target supports Fortran 'integer' kinds larger than 'integer(8)'. 4680 4681'fortran_large_real' 4682 Target supports Fortran 'real' kinds larger than 'real(8)'. 4683 46847.2.3.4 Vector-specific attributes 4685.................................. 4686 4687'vect_align_stack_vars' 4688 The target's ABI allows stack variables to be aligned to the 4689 preferred vector alignment. 4690 4691'vect_avg_qi' 4692 Target supports both signed and unsigned averaging operations on 4693 vectors of bytes. 4694 4695'vect_mulhrs_hi' 4696 Target supports both signed and unsigned 4697 multiply-high-with-round-and-scale operations on vectors of 4698 half-words. 4699 4700'vect_sdiv_pow2_si' 4701 Target supports signed division by constant power-of-2 operations 4702 on vectors of 4-byte integers. 4703 4704'vect_condition' 4705 Target supports vector conditional operations. 4706 4707'vect_cond_mixed' 4708 Target supports vector conditional operations where comparison 4709 operands have different type from the value operands. 4710 4711'vect_double' 4712 Target supports hardware vectors of 'double'. 4713 4714'vect_double_cond_arith' 4715 Target supports conditional addition, subtraction, multiplication, 4716 division, minimum and maximum on vectors of 'double', via the 4717 'cond_' optabs. 4718 4719'vect_element_align_preferred' 4720 The target's preferred vector alignment is the same as the element 4721 alignment. 4722 4723'vect_float' 4724 Target supports hardware vectors of 'float' when 4725 '-funsafe-math-optimizations' is in effect. 4726 4727'vect_float_strict' 4728 Target supports hardware vectors of 'float' when 4729 '-funsafe-math-optimizations' is not in effect. This implies 4730 'vect_float'. 4731 4732'vect_int' 4733 Target supports hardware vectors of 'int'. 4734 4735'vect_long' 4736 Target supports hardware vectors of 'long'. 4737 4738'vect_long_long' 4739 Target supports hardware vectors of 'long long'. 4740 4741'vect_check_ptrs' 4742 Target supports the 'check_raw_ptrs' and 'check_war_ptrs' optabs on 4743 vectors. 4744 4745'vect_fully_masked' 4746 Target supports fully-masked (also known as fully-predicated) 4747 loops, so that vector loops can handle partial as well as full 4748 vectors. 4749 4750'vect_masked_store' 4751 Target supports vector masked stores. 4752 4753'vect_scatter_store' 4754 Target supports vector scatter stores. 4755 4756'vect_aligned_arrays' 4757 Target aligns arrays to vector alignment boundary. 4758 4759'vect_hw_misalign' 4760 Target supports a vector misalign access. 4761 4762'vect_no_align' 4763 Target does not support a vector alignment mechanism. 4764 4765'vect_peeling_profitable' 4766 Target might require to peel loops for alignment purposes. 4767 4768'vect_no_int_min_max' 4769 Target does not support a vector min and max instruction on 'int'. 4770 4771'vect_no_int_add' 4772 Target does not support a vector add instruction on 'int'. 4773 4774'vect_no_bitwise' 4775 Target does not support vector bitwise instructions. 4776 4777'vect_bool_cmp' 4778 Target supports comparison of 'bool' vectors for at least one 4779 vector length. 4780 4781'vect_char_add' 4782 Target supports addition of 'char' vectors for at least one vector 4783 length. 4784 4785'vect_char_mult' 4786 Target supports 'vector char' multiplication. 4787 4788'vect_short_mult' 4789 Target supports 'vector short' multiplication. 4790 4791'vect_int_mult' 4792 Target supports 'vector int' multiplication. 4793 4794'vect_long_mult' 4795 Target supports 64 bit 'vector long' multiplication. 4796 4797'vect_extract_even_odd' 4798 Target supports vector even/odd element extraction. 4799 4800'vect_extract_even_odd_wide' 4801 Target supports vector even/odd element extraction of vectors with 4802 elements 'SImode' or larger. 4803 4804'vect_interleave' 4805 Target supports vector interleaving. 4806 4807'vect_strided' 4808 Target supports vector interleaving and extract even/odd. 4809 4810'vect_strided_wide' 4811 Target supports vector interleaving and extract even/odd for wide 4812 element types. 4813 4814'vect_perm' 4815 Target supports vector permutation. 4816 4817'vect_perm_byte' 4818 Target supports permutation of vectors with 8-bit elements. 4819 4820'vect_perm_short' 4821 Target supports permutation of vectors with 16-bit elements. 4822 4823'vect_perm3_byte' 4824 Target supports permutation of vectors with 8-bit elements, and for 4825 the default vector length it is possible to permute: 4826 { a0, a1, a2, b0, b1, b2, ... } 4827 to: 4828 { a0, a0, a0, b0, b0, b0, ... } 4829 { a1, a1, a1, b1, b1, b1, ... } 4830 { a2, a2, a2, b2, b2, b2, ... } 4831 using only two-vector permutes, regardless of how long the sequence 4832 is. 4833 4834'vect_perm3_int' 4835 Like 'vect_perm3_byte', but for 32-bit elements. 4836 4837'vect_perm3_short' 4838 Like 'vect_perm3_byte', but for 16-bit elements. 4839 4840'vect_shift' 4841 Target supports a hardware vector shift operation. 4842 4843'vect_unaligned_possible' 4844 Target prefers vectors to have an alignment greater than element 4845 alignment, but also allows unaligned vector accesses in some 4846 circumstances. 4847 4848'vect_variable_length' 4849 Target has variable-length vectors. 4850 4851'vect_widen_sum_hi_to_si' 4852 Target supports a vector widening summation of 'short' operands 4853 into 'int' results, or can promote (unpack) from 'short' to 'int'. 4854 4855'vect_widen_sum_qi_to_hi' 4856 Target supports a vector widening summation of 'char' operands into 4857 'short' results, or can promote (unpack) from 'char' to 'short'. 4858 4859'vect_widen_sum_qi_to_si' 4860 Target supports a vector widening summation of 'char' operands into 4861 'int' results. 4862 4863'vect_widen_mult_qi_to_hi' 4864 Target supports a vector widening multiplication of 'char' operands 4865 into 'short' results, or can promote (unpack) from 'char' to 4866 'short' and perform non-widening multiplication of 'short'. 4867 4868'vect_widen_mult_hi_to_si' 4869 Target supports a vector widening multiplication of 'short' 4870 operands into 'int' results, or can promote (unpack) from 'short' 4871 to 'int' and perform non-widening multiplication of 'int'. 4872 4873'vect_widen_mult_si_to_di_pattern' 4874 Target supports a vector widening multiplication of 'int' operands 4875 into 'long' results. 4876 4877'vect_sdot_qi' 4878 Target supports a vector dot-product of 'signed char'. 4879 4880'vect_udot_qi' 4881 Target supports a vector dot-product of 'unsigned char'. 4882 4883'vect_sdot_hi' 4884 Target supports a vector dot-product of 'signed short'. 4885 4886'vect_udot_hi' 4887 Target supports a vector dot-product of 'unsigned short'. 4888 4889'vect_pack_trunc' 4890 Target supports a vector demotion (packing) of 'short' to 'char' 4891 and from 'int' to 'short' using modulo arithmetic. 4892 4893'vect_unpack' 4894 Target supports a vector promotion (unpacking) of 'char' to 'short' 4895 and from 'char' to 'int'. 4896 4897'vect_intfloat_cvt' 4898 Target supports conversion from 'signed int' to 'float'. 4899 4900'vect_uintfloat_cvt' 4901 Target supports conversion from 'unsigned int' to 'float'. 4902 4903'vect_floatint_cvt' 4904 Target supports conversion from 'float' to 'signed int'. 4905 4906'vect_floatuint_cvt' 4907 Target supports conversion from 'float' to 'unsigned int'. 4908 4909'vect_intdouble_cvt' 4910 Target supports conversion from 'signed int' to 'double'. 4911 4912'vect_doubleint_cvt' 4913 Target supports conversion from 'double' to 'signed int'. 4914 4915'vect_max_reduc' 4916 Target supports max reduction for vectors. 4917 4918'vect_sizes_16B_8B' 4919 Target supports 16- and 8-bytes vectors. 4920 4921'vect_sizes_32B_16B' 4922 Target supports 32- and 16-bytes vectors. 4923 4924'vect_logical_reduc' 4925 Target supports AND, IOR and XOR reduction on vectors. 4926 4927'vect_fold_extract_last' 4928 Target supports the 'fold_extract_last' optab. 4929 49307.2.3.5 Thread Local Storage attributes 4931....................................... 4932 4933'tls' 4934 Target supports thread-local storage. 4935 4936'tls_native' 4937 Target supports native (rather than emulated) thread-local storage. 4938 4939'tls_runtime' 4940 Test system supports executing TLS executables. 4941 49427.2.3.6 Decimal floating point attributes 4943......................................... 4944 4945'dfp' 4946 Targets supports compiling decimal floating point extension to C. 4947 4948'dfp_nocache' 4949 Including the options used to compile this particular test, the 4950 target supports compiling decimal floating point extension to C. 4951 4952'dfprt' 4953 Test system can execute decimal floating point tests. 4954 4955'dfprt_nocache' 4956 Including the options used to compile this particular test, the 4957 test system can execute decimal floating point tests. 4958 4959'hard_dfp' 4960 Target generates decimal floating point instructions with current 4961 options. 4962 49637.2.3.7 ARM-specific attributes 4964............................... 4965 4966'arm32' 4967 ARM target generates 32-bit code. 4968 4969'arm_little_endian' 4970 ARM target that generates little-endian code. 4971 4972'arm_eabi' 4973 ARM target adheres to the ABI for the ARM Architecture. 4974 4975'arm_fp_ok' 4976 ARM target defines '__ARM_FP' using '-mfloat-abi=softfp' or 4977 equivalent options. Some multilibs may be incompatible with these 4978 options. 4979 4980'arm_fp_dp_ok' 4981 ARM target defines '__ARM_FP' with double-precision support using 4982 '-mfloat-abi=softfp' or equivalent options. Some multilibs may be 4983 incompatible with these options. 4984 4985'arm_hf_eabi' 4986 ARM target adheres to the VFP and Advanced SIMD Register Arguments 4987 variant of the ABI for the ARM Architecture (as selected with 4988 '-mfloat-abi=hard'). 4989 4990'arm_softfloat' 4991 ARM target uses the soft-float ABI with no floating-point 4992 instructions used whatsoever (as selected with '-mfloat-abi=soft'). 4993 4994'arm_hard_vfp_ok' 4995 ARM target supports '-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4996 may be incompatible with these options. 4997 4998'arm_iwmmxt_ok' 4999 ARM target supports '-mcpu=iwmmxt'. Some multilibs may be 5000 incompatible with this option. 5001 5002'arm_neon' 5003 ARM target supports generating NEON instructions. 5004 5005'arm_tune_string_ops_prefer_neon' 5006 Test CPU tune supports inlining string operations with NEON 5007 instructions. 5008 5009'arm_neon_hw' 5010 Test system supports executing NEON instructions. 5011 5012'arm_neonv2_hw' 5013 Test system supports executing NEON v2 instructions. 5014 5015'arm_neon_ok' 5016 ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible 5017 options. Some multilibs may be incompatible with these options. 5018 5019'arm_neon_ok_no_float_abi' 5020 ARM Target supports NEON with '-mfpu=neon', but without any 5021 -mfloat-abi= option. Some multilibs may be incompatible with this 5022 option. 5023 5024'arm_neonv2_ok' 5025 ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or 5026 compatible options. Some multilibs may be incompatible with these 5027 options. 5028 5029'arm_fp16_ok' 5030 Target supports options to generate VFP half-precision 5031 floating-point instructions. Some multilibs may be incompatible 5032 with these options. This test is valid for ARM only. 5033 5034'arm_fp16_hw' 5035 Target supports executing VFP half-precision floating-point 5036 instructions. This test is valid for ARM only. 5037 5038'arm_neon_fp16_ok' 5039 ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or 5040 compatible options, including '-mfp16-format=ieee' if necessary to 5041 obtain the '__fp16' type. Some multilibs may be incompatible with 5042 these options. 5043 5044'arm_neon_fp16_hw' 5045 Test system supports executing Neon half-precision float 5046 instructions. (Implies previous.) 5047 5048'arm_fp16_alternative_ok' 5049 ARM target supports the ARM FP16 alternative format. Some 5050 multilibs may be incompatible with the options needed. 5051 5052'arm_fp16_none_ok' 5053 ARM target supports specifying none as the ARM FP16 format. 5054 5055'arm_thumb1_ok' 5056 ARM target generates Thumb-1 code for '-mthumb'. 5057 5058'arm_thumb2_ok' 5059 ARM target generates Thumb-2 code for '-mthumb'. 5060 5061'arm_nothumb' 5062 ARM target that is not using Thumb. 5063 5064'arm_vfp_ok' 5065 ARM target supports '-mfpu=vfp -mfloat-abi=softfp'. Some multilibs 5066 may be incompatible with these options. 5067 5068'arm_vfp3_ok' 5069 ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'. Some 5070 multilibs may be incompatible with these options. 5071 5072'arm_arch_v8a_hard_ok' 5073 The compiler is targeting 'arm*-*-*' and can compile and assemble 5074 code using the options '-march=armv8-a -mfpu=neon-fp-armv8 5075 -mfloat-abi=hard'. This is not enough to guarantee that linking 5076 works. 5077 5078'arm_arch_v8a_hard_multilib' 5079 The compiler is targeting 'arm*-*-*' and can build programs using 5080 the options '-march=armv8-a -mfpu=neon-fp-armv8 -mfloat-abi=hard'. 5081 The target can also run the resulting binaries. 5082 5083'arm_v8_vfp_ok' 5084 ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'. Some 5085 multilibs may be incompatible with these options. 5086 5087'arm_v8_neon_ok' 5088 ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'. Some 5089 multilibs may be incompatible with these options. 5090 5091'arm_v8_1a_neon_ok' 5092 ARM target supports options to generate ARMv8.1-A Adv.SIMD 5093 instructions. Some multilibs may be incompatible with these 5094 options. 5095 5096'arm_v8_1a_neon_hw' 5097 ARM target supports executing ARMv8.1-A Adv.SIMD instructions. 5098 Some multilibs may be incompatible with the options needed. 5099 Implies arm_v8_1a_neon_ok. 5100 5101'arm_acq_rel' 5102 ARM target supports acquire-release instructions. 5103 5104'arm_v8_2a_fp16_scalar_ok' 5105 ARM target supports options to generate instructions for ARMv8.2-A 5106 and scalar instructions from the FP16 extension. Some multilibs 5107 may be incompatible with these options. 5108 5109'arm_v8_2a_fp16_scalar_hw' 5110 ARM target supports executing instructions for ARMv8.2-A and scalar 5111 instructions from the FP16 extension. Some multilibs may be 5112 incompatible with these options. Implies arm_v8_2a_fp16_neon_ok. 5113 5114'arm_v8_2a_fp16_neon_ok' 5115 ARM target supports options to generate instructions from ARMv8.2-A 5116 with the FP16 extension. Some multilibs may be incompatible with 5117 these options. Implies arm_v8_2a_fp16_scalar_ok. 5118 5119'arm_v8_2a_fp16_neon_hw' 5120 ARM target supports executing instructions from ARMv8.2-A with the 5121 FP16 extension. Some multilibs may be incompatible with these 5122 options. Implies arm_v8_2a_fp16_neon_ok and 5123 arm_v8_2a_fp16_scalar_hw. 5124 5125'arm_v8_2a_dotprod_neon_ok' 5126 ARM target supports options to generate instructions from ARMv8.2-A 5127 with the Dot Product extension. Some multilibs may be incompatible 5128 with these options. 5129 5130'arm_v8_2a_dotprod_neon_hw' 5131 ARM target supports executing instructions from ARMv8.2-A with the 5132 Dot Product extension. Some multilibs may be incompatible with 5133 these options. Implies arm_v8_2a_dotprod_neon_ok. 5134 5135'arm_fp16fml_neon_ok' 5136 ARM target supports extensions to generate the 'VFMAL' and 'VFMLS' 5137 half-precision floating-point instructions available from ARMv8.2-A 5138 and onwards. Some multilibs may be incompatible with these 5139 options. 5140 5141'arm_v8_2a_bf16_neon_ok' 5142 ARM target supports options to generate instructions from ARMv8.2-A 5143 with the BFloat16 extension (bf16). Some multilibs may be 5144 incompatible with these options. 5145 5146'arm_v8_2a_i8mm_ok' 5147 ARM target supports options to generate instructions from ARMv8.2-A 5148 with the 8-Bit Integer Matrix Multiply extension (i8mm). Some 5149 multilibs may be incompatible with these options. 5150 5151'arm_v8_1m_mve_ok' 5152 ARM target supports options to generate instructions from ARMv8.1-M 5153 with the M-Profile Vector Extension (MVE). Some multilibs may be 5154 incompatible with these options. 5155 5156'arm_v8_1m_mve_fp_ok' 5157 ARM target supports options to generate instructions from ARMv8.1-M 5158 with the Half-precision floating-point instructions (HP), 5159 Floating-point Extension (FP) along with M-Profile Vector Extension 5160 (MVE). Some multilibs may be incompatible with these options. 5161 5162'arm_mve_hw' 5163 Test system supports executing MVE instructions. 5164 5165'arm_v8m_main_cde' 5166 ARM target supports options to generate instructions from ARMv8-M 5167 with the Custom Datapath Extension (CDE). Some multilibs may be 5168 incompatible with these options. 5169 5170'arm_v8m_main_cde_fp' 5171 ARM target supports options to generate instructions from ARMv8-M 5172 with the Custom Datapath Extension (CDE) and floating-point (VFP). 5173 Some multilibs may be incompatible with these options. 5174 5175'arm_v8_1m_main_cde_mve' 5176 ARM target supports options to generate instructions from ARMv8.1-M 5177 with the Custom Datapath Extension (CDE) and M-Profile Vector 5178 Extension (MVE). Some multilibs may be incompatible with these 5179 options. 5180 5181'arm_prefer_ldrd_strd' 5182 ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and 5183 'STM' instructions. 5184 5185'arm_thumb1_movt_ok' 5186 ARM target generates Thumb-1 code for '-mthumb' with 'MOVW' and 5187 'MOVT' instructions available. 5188 5189'arm_thumb1_cbz_ok' 5190 ARM target generates Thumb-1 code for '-mthumb' with 'CBZ' and 5191 'CBNZ' instructions available. 5192 5193'arm_divmod_simode' 5194 ARM target for which divmod transform is disabled, if it supports 5195 hardware div instruction. 5196 5197'arm_cmse_ok' 5198 ARM target supports ARMv8-M Security Extensions, enabled by the 5199 '-mcmse' option. 5200 5201'arm_coproc1_ok' 5202 ARM target supports the following coprocessor instructions: 'CDP', 5203 'LDC', 'STC', 'MCR' and 'MRC'. 5204 5205'arm_coproc2_ok' 5206 ARM target supports all the coprocessor instructions also listed as 5207 supported in *note arm_coproc1_ok:: in addition to the following: 5208 'CDP2', 'LDC2', 'LDC2l', 'STC2', 'STC2l', 'MCR2' and 'MRC2'. 5209 5210'arm_coproc3_ok' 5211 ARM target supports all the coprocessor instructions also listed as 5212 supported in *note arm_coproc2_ok:: in addition the following: 5213 'MCRR' and 'MRRC'. 5214 5215'arm_coproc4_ok' 5216 ARM target supports all the coprocessor instructions also listed as 5217 supported in *note arm_coproc3_ok:: in addition the following: 5218 'MCRR2' and 'MRRC2'. 5219 5220'arm_simd32_ok' 5221 ARM Target supports options suitable for accessing the SIMD32 5222 intrinsics from 'arm_acle.h'. Some multilibs may be incompatible 5223 with these options. 5224 5225'arm_qbit_ok' 5226 ARM Target supports options suitable for accessing the Q-bit 5227 manipulation intrinsics from 'arm_acle.h'. Some multilibs may be 5228 incompatible with these options. 5229 5230'arm_softfp_ok' 5231 ARM target supports the '-mfloat-abi=softfp' option. 5232 5233'arm_hard_ok' 5234 ARM target supports the '-mfloat-abi=hard' option. 5235 52367.2.3.8 AArch64-specific attributes 5237................................... 5238 5239'aarch64_asm_<ext>_ok' 5240 AArch64 assembler supports the architecture extension 'ext' via the 5241 '.arch_extension' pseudo-op. 5242'aarch64_tiny' 5243 AArch64 target which generates instruction sequences for tiny 5244 memory model. 5245'aarch64_small' 5246 AArch64 target which generates instruction sequences for small 5247 memory model. 5248'aarch64_large' 5249 AArch64 target which generates instruction sequences for large 5250 memory model. 5251'aarch64_little_endian' 5252 AArch64 target which generates instruction sequences for little 5253 endian. 5254'aarch64_big_endian' 5255 AArch64 target which generates instruction sequences for big 5256 endian. 5257'aarch64_small_fpic' 5258 Binutils installed on test system supports relocation types 5259 required by -fpic for AArch64 small memory model. 5260'aarch64_sve_hw' 5261 AArch64 target that is able to generate and execute SVE code 5262 (regardless of whether it does so by default). 5263'aarch64_sve128_hw' 5264'aarch64_sve256_hw' 5265'aarch64_sve512_hw' 5266'aarch64_sve1024_hw' 5267'aarch64_sve2048_hw' 5268 Like 'aarch64_sve_hw', but also test for an exact hardware vector 5269 length. 5270 5271'aarch64_fjcvtzs_hw' 5272 AArch64 target that is able to generate and execute armv8.3-a 5273 FJCVTZS instruction. 5274 52757.2.3.9 MIPS-specific attributes 5276................................ 5277 5278'mips64' 5279 MIPS target supports 64-bit instructions. 5280 5281'nomips16' 5282 MIPS target does not produce MIPS16 code. 5283 5284'mips16_attribute' 5285 MIPS target can generate MIPS16 code. 5286 5287'mips_loongson' 5288 MIPS target is a Loongson-2E or -2F target using an ABI that 5289 supports the Loongson vector modes. 5290 5291'mips_msa' 5292 MIPS target supports '-mmsa', MIPS SIMD Architecture (MSA). 5293 5294'mips_newabi_large_long_double' 5295 MIPS target supports 'long double' larger than 'double' when using 5296 the new ABI. 5297 5298'mpaired_single' 5299 MIPS target supports '-mpaired-single'. 5300 53017.2.3.10 PowerPC-specific attributes 5302.................................... 5303 5304'dfp_hw' 5305 PowerPC target supports executing hardware DFP instructions. 5306 5307'p8vector_hw' 5308 PowerPC target supports executing VSX instructions (ISA 2.07). 5309 5310'powerpc64' 5311 Test system supports executing 64-bit instructions. 5312 5313'powerpc_altivec' 5314 PowerPC target supports AltiVec. 5315 5316'powerpc_altivec_ok' 5317 PowerPC target supports '-maltivec'. 5318 5319'powerpc_eabi_ok' 5320 PowerPC target supports '-meabi'. 5321 5322'powerpc_elfv2' 5323 PowerPC target supports '-mabi=elfv2'. 5324 5325'powerpc_fprs' 5326 PowerPC target supports floating-point registers. 5327 5328'powerpc_hard_double' 5329 PowerPC target supports hardware double-precision floating-point. 5330 5331'powerpc_htm_ok' 5332 PowerPC target supports '-mhtm' 5333 5334'powerpc_p8vector_ok' 5335 PowerPC target supports '-mpower8-vector' 5336 5337'powerpc_popcntb_ok' 5338 PowerPC target supports the 'popcntb' instruction, indicating that 5339 this target supports '-mcpu=power5'. 5340 5341'powerpc_ppu_ok' 5342 PowerPC target supports '-mcpu=cell'. 5343 5344'powerpc_spe' 5345 PowerPC target supports PowerPC SPE. 5346 5347'powerpc_spe_nocache' 5348 Including the options used to compile this particular test, the 5349 PowerPC target supports PowerPC SPE. 5350 5351'powerpc_spu' 5352 PowerPC target supports PowerPC SPU. 5353 5354'powerpc_vsx_ok' 5355 PowerPC target supports '-mvsx'. 5356 5357'powerpc_405_nocache' 5358 Including the options used to compile this particular test, the 5359 PowerPC target supports PowerPC 405. 5360 5361'ppc_recip_hw' 5362 PowerPC target supports executing reciprocal estimate instructions. 5363 5364'vmx_hw' 5365 PowerPC target supports executing AltiVec instructions. 5366 5367'vsx_hw' 5368 PowerPC target supports executing VSX instructions (ISA 2.06). 5369 53707.2.3.11 Other hardware attributes 5371.................................. 5372 5373'autoincdec' 5374 Target supports autoincrement/decrement addressing. 5375 5376'avx' 5377 Target supports compiling 'avx' instructions. 5378 5379'avx_runtime' 5380 Target supports the execution of 'avx' instructions. 5381 5382'avx2' 5383 Target supports compiling 'avx2' instructions. 5384 5385'avx2_runtime' 5386 Target supports the execution of 'avx2' instructions. 5387 5388'avx512f' 5389 Target supports compiling 'avx512f' instructions. 5390 5391'avx512f_runtime' 5392 Target supports the execution of 'avx512f' instructions. 5393 5394'avx512vp2intersect' 5395 Target supports the execution of 'avx512vp2intersect' instructions. 5396 5397'cell_hw' 5398 Test system can execute AltiVec and Cell PPU instructions. 5399 5400'coldfire_fpu' 5401 Target uses a ColdFire FPU. 5402 5403'divmod' 5404 Target supporting hardware divmod insn or divmod libcall. 5405 5406'divmod_simode' 5407 Target supporting hardware divmod insn or divmod libcall for 5408 SImode. 5409 5410'hard_float' 5411 Target supports FPU instructions. 5412 5413'non_strict_align' 5414 Target does not require strict alignment. 5415 5416'pie_copyreloc' 5417 The x86-64 target linker supports PIE with copy reloc. 5418 5419'rdrand' 5420 Target supports x86 'rdrand' instruction. 5421 5422'sqrt_insn' 5423 Target has a square root instruction that the compiler can 5424 generate. 5425 5426'sse' 5427 Target supports compiling 'sse' instructions. 5428 5429'sse_runtime' 5430 Target supports the execution of 'sse' instructions. 5431 5432'sse2' 5433 Target supports compiling 'sse2' instructions. 5434 5435'sse2_runtime' 5436 Target supports the execution of 'sse2' instructions. 5437 5438'sync_char_short' 5439 Target supports atomic operations on 'char' and 'short'. 5440 5441'sync_int_long' 5442 Target supports atomic operations on 'int' and 'long'. 5443 5444'ultrasparc_hw' 5445 Test environment appears to run executables on a simulator that 5446 accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS' 5447 or 'EM_SPARCV9' executables. 5448 5449'vect_cmdline_needed' 5450 Target requires a command line argument to enable a SIMD 5451 instruction set. 5452 5453'xorsign' 5454 Target supports the xorsign optab expansion. 5455 54567.2.3.12 Environment attributes 5457............................... 5458 5459'c' 5460 The language for the compiler under test is C. 5461 5462'c++' 5463 The language for the compiler under test is C++. 5464 5465'c99_runtime' 5466 Target provides a full C99 runtime. 5467 5468'correct_iso_cpp_string_wchar_protos' 5469 Target 'string.h' and 'wchar.h' headers provide C++ required 5470 overloads for 'strchr' etc. functions. 5471 5472'd_runtime' 5473 Target provides the D runtime. 5474 5475'd_runtime_has_std_library' 5476 Target provides the D standard library (Phobos). 5477 5478'dummy_wcsftime' 5479 Target uses a dummy 'wcsftime' function that always returns zero. 5480 5481'fd_truncate' 5482 Target can truncate a file from a file descriptor, as used by 5483 'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'. 5484 5485'fenv' 5486 Target provides 'fenv.h' include file. 5487 5488'fenv_exceptions' 5489 Target supports 'fenv.h' with all the standard IEEE exceptions and 5490 floating-point exceptions are raised by arithmetic operations. 5491 5492'fileio' 5493 Target offers such file I/O library functions as 'fopen', 'fclose', 5494 'tmpnam', and 'remove'. This is a link-time requirement for the 5495 presence of the functions in the library; even if they fail at 5496 runtime, the requirement is still regarded as satisfied. 5497 5498'freestanding' 5499 Target is 'freestanding' as defined in section 4 of the C99 5500 standard. Effectively, it is a target which supports no extra 5501 headers or libraries other than what is considered essential. 5502 5503'gettimeofday' 5504 Target supports 'gettimeofday'. 5505 5506'init_priority' 5507 Target supports constructors with initialization priority 5508 arguments. 5509 5510'inttypes_types' 5511 Target has the basic signed and unsigned types in 'inttypes.h'. 5512 This is for tests that GCC's notions of these types agree with 5513 those in the header, as some systems have only 'inttypes.h'. 5514 5515'lax_strtofp' 5516 Target might have errors of a few ULP in string to floating-point 5517 conversion functions and overflow is not always detected correctly 5518 by those functions. 5519 5520'mempcpy' 5521 Target provides 'mempcpy' function. 5522 5523'mmap' 5524 Target supports 'mmap'. 5525 5526'newlib' 5527 Target supports Newlib. 5528 5529'newlib_nano_io' 5530 GCC was configured with '--enable-newlib-nano-formatted-io', which 5531 reduces the code size of Newlib formatted I/O functions. 5532 5533'pow10' 5534 Target provides 'pow10' function. 5535 5536'pthread' 5537 Target can compile using 'pthread.h' with no errors or warnings. 5538 5539'pthread_h' 5540 Target has 'pthread.h'. 5541 5542'run_expensive_tests' 5543 Expensive testcases (usually those that consume excessive amounts 5544 of CPU time) should be run on this target. This can be enabled by 5545 setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a 5546 non-empty string. 5547 5548'simulator' 5549 Test system runs executables on a simulator (i.e. slowly) rather 5550 than hardware (i.e. fast). 5551 5552'signal' 5553 Target has 'signal.h'. 5554 5555'stabs' 5556 Target supports the stabs debugging format. 5557 5558'stdint_types' 5559 Target has the basic signed and unsigned C types in 'stdint.h'. 5560 This will be obsolete when GCC ensures a working 'stdint.h' for all 5561 targets. 5562 5563'stpcpy' 5564 Target provides 'stpcpy' function. 5565 5566'trampolines' 5567 Target supports trampolines. 5568 5569'uclibc' 5570 Target supports uClibc. 5571 5572'unwrapped' 5573 Target does not use a status wrapper. 5574 5575'vxworks_kernel' 5576 Target is a VxWorks kernel. 5577 5578'vxworks_rtp' 5579 Target is a VxWorks RTP. 5580 5581'wchar' 5582 Target supports wide characters. 5583 55847.2.3.13 Other attributes 5585......................... 5586 5587'automatic_stack_alignment' 5588 Target supports automatic stack alignment. 5589 5590'branch_cost' 5591 Target supports '-branch-cost=N'. 5592 5593'cxa_atexit' 5594 Target uses '__cxa_atexit'. 5595 5596'default_packed' 5597 Target has packed layout of structure members by default. 5598 5599'exceptions' 5600 Target supports exceptions. 5601 5602'exceptions_enabled' 5603 Target supports exceptions and they are enabled in the current 5604 testing configuration. 5605 5606'fgraphite' 5607 Target supports Graphite optimizations. 5608 5609'fixed_point' 5610 Target supports fixed-point extension to C. 5611 5612'fopenacc' 5613 Target supports OpenACC via '-fopenacc'. 5614 5615'fopenmp' 5616 Target supports OpenMP via '-fopenmp'. 5617 5618'fpic' 5619 Target supports '-fpic' and '-fPIC'. 5620 5621'freorder' 5622 Target supports '-freorder-blocks-and-partition'. 5623 5624'fstack_protector' 5625 Target supports '-fstack-protector'. 5626 5627'gas' 5628 Target uses GNU 'as'. 5629 5630'gc_sections' 5631 Target supports '--gc-sections'. 5632 5633'gld' 5634 Target uses GNU 'ld'. 5635 5636'keeps_null_pointer_checks' 5637 Target keeps null pointer checks, either due to the use of 5638 '-fno-delete-null-pointer-checks' or hardwired into the target. 5639 5640'llvm_binutils' 5641 Target is using an LLVM assembler and/or linker, instead of GNU 5642 Binutils. 5643 5644'lto' 5645 Compiler has been configured to support link-time optimization 5646 (LTO). 5647 5648'lto_incremental' 5649 Compiler and linker support link-time optimization relocatable 5650 linking with '-r' and '-flto' options. 5651 5652'naked_functions' 5653 Target supports the 'naked' function attribute. 5654 5655'named_sections' 5656 Target supports named sections. 5657 5658'natural_alignment_32' 5659 Target uses natural alignment (aligned to type size) for types of 5660 32 bits or less. 5661 5662'target_natural_alignment_64' 5663 Target uses natural alignment (aligned to type size) for types of 5664 64 bits or less. 5665 5666'noinit' 5667 Target supports the 'noinit' variable attribute. 5668 5669'nonpic' 5670 Target does not generate PIC by default. 5671 5672'offload_gcn' 5673 Target has been configured for OpenACC/OpenMP offloading on AMD 5674 GCN. 5675 5676'pie_enabled' 5677 Target generates PIE by default. 5678 5679'pcc_bitfield_type_matters' 5680 Target defines 'PCC_BITFIELD_TYPE_MATTERS'. 5681 5682'pe_aligned_commons' 5683 Target supports '-mpe-aligned-commons'. 5684 5685'pie' 5686 Target supports '-pie', '-fpie' and '-fPIE'. 5687 5688'rdynamic' 5689 Target supports '-rdynamic'. 5690 5691'scalar_all_fma' 5692 Target supports all four fused multiply-add optabs for both 'float' 5693 and 'double'. These optabs are: 'fma_optab', 'fms_optab', 5694 'fnma_optab' and 'fnms_optab'. 5695 5696'section_anchors' 5697 Target supports section anchors. 5698 5699'short_enums' 5700 Target defaults to short enums. 5701 5702'stack_size' 5703 Target has limited stack size. The stack size limit can be 5704 obtained using the STACK_SIZE macro defined by *note 5705 'dg-add-options' feature 'stack_size': stack_size_ao. 5706 5707'static' 5708 Target supports '-static'. 5709 5710'static_libgfortran' 5711 Target supports statically linking 'libgfortran'. 5712 5713'string_merging' 5714 Target supports merging string constants at link time. 5715 5716'ucn' 5717 Target supports compiling and assembling UCN. 5718 5719'ucn_nocache' 5720 Including the options used to compile this particular test, the 5721 target supports compiling and assembling UCN. 5722 5723'unaligned_stack' 5724 Target does not guarantee that its 'STACK_BOUNDARY' is greater than 5725 or equal to the required vector alignment. 5726 5727'vector_alignment_reachable' 5728 Vector alignment is reachable for types of 32 bits or less. 5729 5730'vector_alignment_reachable_for_64bit' 5731 Vector alignment is reachable for types of 64 bits or less. 5732 5733'wchar_t_char16_t_compatible' 5734 Target supports 'wchar_t' that is compatible with 'char16_t'. 5735 5736'wchar_t_char32_t_compatible' 5737 Target supports 'wchar_t' that is compatible with 'char32_t'. 5738 5739'comdat_group' 5740 Target uses comdat groups. 5741 5742'indirect_calls' 5743 Target supports indirect calls, i.e. calls where the target is not 5744 constant. 5745 57467.2.3.14 Local to tests in 'gcc.target/i386' 5747............................................ 5748 5749'3dnow' 5750 Target supports compiling '3dnow' instructions. 5751 5752'aes' 5753 Target supports compiling 'aes' instructions. 5754 5755'fma4' 5756 Target supports compiling 'fma4' instructions. 5757 5758'mfentry' 5759 Target supports the '-mfentry' option that alters the position of 5760 profiling calls such that they precede the prologue. 5761 5762'ms_hook_prologue' 5763 Target supports attribute 'ms_hook_prologue'. 5764 5765'pclmul' 5766 Target supports compiling 'pclmul' instructions. 5767 5768'sse3' 5769 Target supports compiling 'sse3' instructions. 5770 5771'sse4' 5772 Target supports compiling 'sse4' instructions. 5773 5774'sse4a' 5775 Target supports compiling 'sse4a' instructions. 5776 5777'ssse3' 5778 Target supports compiling 'ssse3' instructions. 5779 5780'vaes' 5781 Target supports compiling 'vaes' instructions. 5782 5783'vpclmul' 5784 Target supports compiling 'vpclmul' instructions. 5785 5786'xop' 5787 Target supports compiling 'xop' instructions. 5788 57897.2.3.15 Local to tests in 'gcc.test-framework' 5790............................................... 5791 5792'no' 5793 Always returns 0. 5794 5795'yes' 5796 Always returns 1. 5797 5798 5799File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5800 58017.2.4 Features for 'dg-add-options' 5802----------------------------------- 5803 5804The supported values of FEATURE for directive 'dg-add-options' are: 5805 5806'arm_fp' 5807 '__ARM_FP' definition. Only ARM targets support this feature, and 5808 only then in certain modes; see the *note arm_fp_ok effective 5809 target keyword: arm_fp_ok. 5810 5811'arm_fp_dp' 5812 '__ARM_FP' definition with double-precision support. Only ARM 5813 targets support this feature, and only then in certain modes; see 5814 the *note arm_fp_dp_ok effective target keyword: arm_fp_dp_ok. 5815 5816'arm_neon' 5817 NEON support. Only ARM targets support this feature, and only then 5818 in certain modes; see the *note arm_neon_ok effective target 5819 keyword: arm_neon_ok. 5820 5821'arm_fp16' 5822 VFP half-precision floating point support. This does not select 5823 the FP16 format; for that, use *note arm_fp16_ieee: arm_fp16_ieee. 5824 or *note arm_fp16_alternative: arm_fp16_alternative. instead. This 5825 feature is only supported by ARM targets and then only in certain 5826 modes; see the *note arm_fp16_ok effective target keyword: 5827 arm_fp16_ok. 5828 5829'arm_fp16_ieee' 5830 ARM IEEE 754-2008 format VFP half-precision floating point support. 5831 This feature is only supported by ARM targets and then only in 5832 certain modes; see the *note arm_fp16_ok effective target keyword: 5833 arm_fp16_ok. 5834 5835'arm_fp16_alternative' 5836 ARM Alternative format VFP half-precision floating point support. 5837 This feature is only supported by ARM targets and then only in 5838 certain modes; see the *note arm_fp16_ok effective target keyword: 5839 arm_fp16_ok. 5840 5841'arm_neon_fp16' 5842 NEON and half-precision floating point support. Only ARM targets 5843 support this feature, and only then in certain modes; see the *note 5844 arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok. 5845 5846'arm_vfp3' 5847 arm vfp3 floating point support; see the *note arm_vfp3_ok 5848 effective target keyword: arm_vfp3_ok. 5849 5850'arm_arch_v8a_hard' 5851 Add options for ARMv8-A and the hard-float variant of the AAPCS, if 5852 this is supported by the compiler; see the *note 5853 arm_arch_v8a_hard_ok: arm_arch_v8a_hard_ok. effective target 5854 keyword. 5855 5856'arm_v8_1a_neon' 5857 Add options for ARMv8.1-A with Adv.SIMD support, if this is 5858 supported by the target; see the *note arm_v8_1a_neon_ok: 5859 arm_v8_1a_neon_ok. effective target keyword. 5860 5861'arm_v8_2a_fp16_scalar' 5862 Add options for ARMv8.2-A with scalar FP16 support, if this is 5863 supported by the target; see the *note arm_v8_2a_fp16_scalar_ok: 5864 arm_v8_2a_fp16_scalar_ok. effective target keyword. 5865 5866'arm_v8_2a_fp16_neon' 5867 Add options for ARMv8.2-A with Adv.SIMD FP16 support, if this is 5868 supported by the target; see the *note arm_v8_2a_fp16_neon_ok: 5869 arm_v8_2a_fp16_neon_ok. effective target keyword. 5870 5871'arm_v8_2a_dotprod_neon' 5872 Add options for ARMv8.2-A with Adv.SIMD Dot Product support, if 5873 this is supported by the target; see the *note 5874 arm_v8_2a_dotprod_neon_ok:: effective target keyword. 5875 5876'arm_fp16fml_neon' 5877 Add options to enable generation of the 'VFMAL' and 'VFMSL' 5878 instructions, if this is supported by the target; see the *note 5879 arm_fp16fml_neon_ok:: effective target keyword. 5880 5881'bind_pic_locally' 5882 Add the target-specific flags needed to enable functions to bind 5883 locally when using pic/PIC passes in the testsuite. 5884 5885'floatN' 5886 Add the target-specific flags needed to use the '_FloatN' type. 5887 5888'floatNx' 5889 Add the target-specific flags needed to use the '_FloatNx' type. 5890 5891'ieee' 5892 Add the target-specific flags needed to enable full IEEE compliance 5893 mode. 5894 5895'mips16_attribute' 5896 'mips16' function attributes. Only MIPS targets support this 5897 feature, and only then in certain modes. 5898 5899'stack_size' 5900 Add the flags needed to define macro STACK_SIZE and set it to the 5901 stack size limit associated with the *note 'stack_size' effective 5902 target: stack_size_et. 5903 5904'sqrt_insn' 5905 Add the target-specific flags needed to enable hardware square root 5906 instructions, if any. 5907 5908'tls' 5909 Add the target-specific flags needed to use thread-local storage. 5910 5911 5912File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5913 59147.2.5 Variants of 'dg-require-SUPPORT' 5915-------------------------------------- 5916 5917A few of the 'dg-require' directives take arguments. 5918 5919'dg-require-iconv CODESET' 5920 Skip the test if the target does not support iconv. CODESET is the 5921 codeset to convert to. 5922 5923'dg-require-profiling PROFOPT' 5924 Skip the test if the target does not support profiling with option 5925 PROFOPT. 5926 5927'dg-require-stack-check CHECK' 5928 Skip the test if the target does not support the '-fstack-check' 5929 option. If CHECK is '""', support for '-fstack-check' is checked, 5930 for '-fstack-check=("CHECK")' otherwise. 5931 5932'dg-require-stack-size SIZE' 5933 Skip the test if the target does not support a stack size of SIZE. 5934 5935'dg-require-visibility VIS' 5936 Skip the test if the target does not support the 'visibility' 5937 attribute. If VIS is '""', support for 'visibility("hidden")' is 5938 checked, for 'visibility("VIS")' otherwise. 5939 5940 The original 'dg-require' directives were defined before there was 5941support for effective-target keywords. The directives that do not take 5942arguments could be replaced with effective-target keywords. 5943 5944'dg-require-alias ""' 5945 Skip the test if the target does not support the 'alias' attribute. 5946 5947'dg-require-ascii-locale ""' 5948 Skip the test if the host does not support an ASCII locale. 5949 5950'dg-require-compat-dfp ""' 5951 Skip this test unless both compilers in a 'compat' testsuite 5952 support decimal floating point. 5953 5954'dg-require-cxa-atexit ""' 5955 Skip the test if the target does not support '__cxa_atexit'. This 5956 is equivalent to 'dg-require-effective-target cxa_atexit'. 5957 5958'dg-require-dll ""' 5959 Skip the test if the target does not support DLL attributes. 5960 5961'dg-require-dot ""' 5962 Skip the test if the host does not have 'dot'. 5963 5964'dg-require-fork ""' 5965 Skip the test if the target does not support 'fork'. 5966 5967'dg-require-gc-sections ""' 5968 Skip the test if the target's linker does not support the 5969 '--gc-sections' flags. This is equivalent to 5970 'dg-require-effective-target gc-sections'. 5971 5972'dg-require-host-local ""' 5973 Skip the test if the host is remote, rather than the same as the 5974 build system. Some tests are incompatible with DejaGnu's handling 5975 of remote hosts, which involves copying the source file to the host 5976 and compiling it with a relative path and "'-o a.out'". 5977 5978'dg-require-mkfifo ""' 5979 Skip the test if the target does not support 'mkfifo'. 5980 5981'dg-require-named-sections ""' 5982 Skip the test is the target does not support named sections. This 5983 is equivalent to 'dg-require-effective-target named_sections'. 5984 5985'dg-require-weak ""' 5986 Skip the test if the target does not support weak symbols. 5987 5988'dg-require-weak-override ""' 5989 Skip the test if the target does not support overriding weak 5990 symbols. 5991 5992 5993File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5994 59957.2.6 Commands for use in 'dg-final' 5996------------------------------------ 5997 5998The GCC testsuite defines the following directives to be used within 5999'dg-final'. 6000 60017.2.6.1 Scan a particular file 6002.............................. 6003 6004'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 6005 Passes if REGEXP matches text in FILENAME. 6006'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 6007 Passes if REGEXP does not match text in FILENAME. 6008'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 6009 Passes if REGEXP matches in Fortran module MODULE. 6010'dg-check-dot FILENAME' 6011 Passes if FILENAME is a valid '.dot' file (by running 'dot -Tpng' 6012 on it, and verifying the exit code is 0). 6013 60147.2.6.2 Scan the assembly output 6015................................ 6016 6017'scan-assembler REGEX [{ target/xfail SELECTOR }]' 6018 Passes if REGEX matches text in the test's assembler output. 6019 6020'scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 6021 Passes if REGEX does not match text in the test's assembler output. 6022 6023'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 6024 Passes if REGEX is matched exactly NUM times in the test's 6025 assembler output. 6026 6027'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 6028 Passes if REGEX matches text in the test's demangled assembler 6029 output. 6030 6031'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 6032 Passes if REGEX does not match text in the test's demangled 6033 assembler output. 6034 6035'scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 6036 Passes if SYMBOL is defined as a hidden symbol in the test's 6037 assembly output. 6038 6039'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 6040 Passes if SYMBOL is not defined as a hidden symbol in the test's 6041 assembly output. 6042 6043'check-function-bodies PREFIX TERMINATOR [OPTIONS [{ target/xfail SELECTOR }]]' 6044 Looks through the source file for comments that give the expected 6045 assembly output for selected functions. Each line of expected 6046 output starts with the prefix string PREFIX and the expected output 6047 for a function as a whole is followed by a line that starts with 6048 the string TERMINATOR. Specifying an empty terminator is 6049 equivalent to specifying '"*/"'. 6050 6051 OPTIONS, if specified, is a list of regular expressions, each of 6052 which matches a full command-line option. A non-empty list 6053 prevents the test from running unless all of the given options are 6054 present on the command line. This can help if a source file is 6055 compiled both with and without optimization, since it is rarely 6056 useful to check the full function body for unoptimized code. 6057 6058 The first line of the expected output for a function FN has the 6059 form: 6060 6061 PREFIX FN: [{ target/xfail SELECTOR }] 6062 6063 Subsequent lines of the expected output also start with PREFIX. In 6064 both cases, whitespace after PREFIX is not significant. 6065 6066 The test discards assembly directives such as '.cfi_startproc' and 6067 local label definitions such as '.LFB0' from the compiler's 6068 assembly output. It then matches the result against the expected 6069 output for a function as a single regular expression. This means 6070 that later lines can use backslashes to refer back to '(...)' 6071 captures on earlier lines. For example: 6072 6073 /* { dg-final { check-function-bodies "**" "" "-DCHECK_ASM" } } */ 6074 ... 6075 /* 6076 ** add_w0_s8_m: 6077 ** mov (z[0-9]+\.b), w0 6078 ** add z0\.b, p0/m, z0\.b, \1 6079 ** ret 6080 */ 6081 svint8_t add_w0_s8_m (...) { ... } 6082 ... 6083 /* 6084 ** add_b0_s8_m: 6085 ** mov (z[0-9]+\.b), b0 6086 ** add z1\.b, p0/m, z1\.b, \1 6087 ** ret 6088 */ 6089 svint8_t add_b0_s8_m (...) { ... } 6090 6091 checks whether the implementations of 'add_w0_s8_m' and 6092 'add_b0_s8_m' match the regular expressions given. The test only 6093 runs when '-DCHECK_ASM' is passed on the command line. 6094 6095 It is possible to create non-capturing multi-line regular 6096 expression groups of the form '(A|B|...)' by putting the '(', '|' 6097 and ')' on separate lines (each still using PREFIX). For example: 6098 6099 /* 6100 ** cmple_f16_tied: 6101 ** ( 6102 ** fcmge p0\.h, p0/z, z1\.h, z0\.h 6103 ** | 6104 ** fcmle p0\.h, p0/z, z0\.h, z1\.h 6105 ** ) 6106 ** ret 6107 */ 6108 svbool_t cmple_f16_tied (...) { ... } 6109 6110 checks whether 'cmple_f16_tied' is implemented by the 'fcmge' 6111 instruction followed by 'ret' or by the 'fcmle' instruction 6112 followed by 'ret'. The test is still a single regular rexpression. 6113 6114 A line containing just: 6115 6116 PREFIX ... 6117 6118 stands for zero or more unmatched lines; the whitespace after 6119 PREFIX is again not significant. 6120 61217.2.6.3 Scan optimization dump files 6122.................................... 6123 6124These commands are available for KIND of 'tree', 'ltrans-tree', 6125'offload-tree', 'rtl', 'offload-rtl', 'ipa', and 'wpa-ipa'. 6126 6127'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 6128 Passes if REGEX matches text in the dump file with suffix SUFFIX. 6129 6130'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 6131 Passes if REGEX does not match text in the dump file with suffix 6132 SUFFIX. 6133 6134'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 6135 Passes if REGEX is found exactly NUM times in the dump file with 6136 suffix SUFFIX. 6137 6138'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 6139 Passes if REGEX matches demangled text in the dump file with suffix 6140 SUFFIX. 6141 6142'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 6143 Passes if REGEX does not match demangled text in the dump file with 6144 suffix SUFFIX. 6145 61467.2.6.4 Check for output files 6147.............................. 6148 6149'output-exists [{ target/xfail SELECTOR }]' 6150 Passes if compiler output file exists. 6151 6152'output-exists-not [{ target/xfail SELECTOR }]' 6153 Passes if compiler output file does not exist. 6154 6155'scan-symbol REGEXP [{ target/xfail SELECTOR }]' 6156 Passes if the pattern is present in the final executable. 6157 6158'scan-symbol-not REGEXP [{ target/xfail SELECTOR }]' 6159 Passes if the pattern is absent from the final executable. 6160 61617.2.6.5 Checks for 'gcov' tests 6162............................... 6163 6164'run-gcov SOURCEFILE' 6165 Check line counts in 'gcov' tests. 6166 6167'run-gcov [branches] [calls] { OPTS SOURCEFILE }' 6168 Check branch and/or call counts, in addition to line counts, in 6169 'gcov' tests. 6170 61717.2.6.6 Clean up generated test files 6172..................................... 6173 6174Usually the test-framework removes files that were generated during 6175testing. If a testcase, for example, uses any dumping mechanism to 6176inspect a passes dump file, the testsuite recognized the dump option 6177passed to the tool and schedules a final cleanup to remove these files. 6178 6179 There are, however, following additional cleanup directives that can be 6180used to annotate a testcase "manually". 6181'cleanup-coverage-files' 6182 Removes coverage data files generated for this test. 6183 6184'cleanup-modules "LIST-OF-EXTRA-MODULES"' 6185 Removes Fortran module files generated for this test, excluding the 6186 module names listed in keep-modules. Cleaning up module files is 6187 usually done automatically by the testsuite by looking at the 6188 source files and removing the modules after the test has been 6189 executed. 6190 module MoD1 6191 end module MoD1 6192 module Mod2 6193 end module Mod2 6194 module moD3 6195 end module moD3 6196 module mod4 6197 end module mod4 6198 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant 6199 ! { dg-final { keep-modules "mod3 mod4" } } 6200 6201'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"' 6202 Whitespace separated list of module names that should not be 6203 deleted by cleanup-modules. If the list of modules is empty, all 6204 modules defined in this file are kept. 6205 module maybe_unneeded 6206 end module maybe_unneeded 6207 module keep1 6208 end module keep1 6209 module keep2 6210 end module keep2 6211 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two 6212 ! { dg-final { keep-modules "" } } ! keep all 6213 6214'dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"' 6215 Whitespace separated list of suffixes that should not be deleted 6216 automatically in a testcase that uses '-save-temps'. 6217 // { dg-options "-save-temps -fpch-preprocess -I." } 6218 int main() { return 0; } 6219 // { dg-keep-saved-temps ".s" } ! just keep assembler file 6220 // { dg-keep-saved-temps ".s" ".i" } ! ... and .i 6221 // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o 6222 6223'cleanup-profile-file' 6224 Removes profiling files generated for this test. 6225 6226 6227File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 6228 62297.3 Ada Language Testsuites 6230=========================== 6231 6232The Ada testsuite includes executable tests from the ACATS testsuite, 6233publicly available at <http://www.ada-auth.org/acats.html>. 6234 6235 These tests are integrated in the GCC testsuite in the 'ada/acats' 6236directory, and enabled automatically when running 'make check', assuming 6237the Ada language has been enabled when configuring GCC. 6238 6239 You can also run the Ada testsuite independently, using 'make 6240check-ada', or run a subset of the tests by specifying which chapter to 6241run, e.g.: 6242 6243 $ make check-ada CHAPTERS="c3 c9" 6244 6245 The tests are organized by directory, each directory corresponding to a 6246chapter of the Ada Reference Manual. So for example, 'c9' corresponds 6247to chapter 9, which deals with tasking features of the language. 6248 6249 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'. 6250To run the tests using a simulator or a cross target, see the small 6251customization section at the top of 'run_all.sh'. 6252 6253 These tests are run using the build tree: they can be run without doing 6254a 'make install'. 6255 6256 6257File: gccint.info, Node: C Tests, Next: LTO Testing, Prev: Ada Tests, Up: Testsuites 6258 62597.4 C Language Testsuites 6260========================= 6261 6262GCC contains the following C language testsuites, in the 'gcc/testsuite' 6263directory: 6264 6265'gcc.dg' 6266 This contains tests of particular features of the C compiler, using 6267 the more modern 'dg' harness. Correctness tests for various 6268 compiler features should go here if possible. 6269 6270 Magic comments determine whether the file is preprocessed, 6271 compiled, linked or run. In these tests, error and warning message 6272 texts are compared against expected texts or regular expressions 6273 given in comments. These tests are run with the options '-ansi 6274 -pedantic' unless other options are given in the test. Except as 6275 noted below they are not run with multiple optimization options. 6276'gcc.dg/compat' 6277 This subdirectory contains tests for binary compatibility using 6278 'lib/compat.exp', which in turn uses the language-independent 6279 support (*note Support for testing binary compatibility: compat 6280 Testing.). 6281'gcc.dg/cpp' 6282 This subdirectory contains tests of the preprocessor. 6283'gcc.dg/debug' 6284 This subdirectory contains tests for debug formats. Tests in this 6285 subdirectory are run for each debug format that the compiler 6286 supports. 6287'gcc.dg/format' 6288 This subdirectory contains tests of the '-Wformat' format checking. 6289 Tests in this directory are run with and without '-DWIDE'. 6290'gcc.dg/noncompile' 6291 This subdirectory contains tests of code that should not compile 6292 and does not need any special compilation options. They are run 6293 with multiple optimization options, since sometimes invalid code 6294 crashes the compiler with optimization. 6295'gcc.dg/special' 6296 FIXME: describe this. 6297 6298'gcc.c-torture' 6299 This contains particular code fragments which have historically 6300 broken easily. These tests are run with multiple optimization 6301 options, so tests for features which only break at some 6302 optimization levels belong here. This also contains tests to check 6303 that certain optimizations occur. It might be worthwhile to 6304 separate the correctness tests cleanly from the code quality tests, 6305 but it hasn't been done yet. 6306 6307'gcc.c-torture/compat' 6308 FIXME: describe this. 6309 6310 This directory should probably not be used for new tests. 6311'gcc.c-torture/compile' 6312 This testsuite contains test cases that should compile, but do not 6313 need to link or run. These test cases are compiled with several 6314 different combinations of optimization options. All warnings are 6315 disabled for these test cases, so this directory is not suitable if 6316 you wish to test for the presence or absence of compiler warnings. 6317 While special options can be set, and tests disabled on specific 6318 platforms, by the use of '.x' files, mostly these test cases should 6319 not contain platform dependencies. FIXME: discuss how defines such 6320 as 'STACK_SIZE' are used. 6321'gcc.c-torture/execute' 6322 This testsuite contains test cases that should compile, link and 6323 run; otherwise the same comments as for 'gcc.c-torture/compile' 6324 apply. 6325'gcc.c-torture/execute/ieee' 6326 This contains tests which are specific to IEEE floating point. 6327'gcc.c-torture/unsorted' 6328 FIXME: describe this. 6329 6330 This directory should probably not be used for new tests. 6331'gcc.misc-tests' 6332 This directory contains C tests that require special handling. 6333 Some of these tests have individual expect files, and others share 6334 special-purpose expect files: 6335 6336 'bprob*.c' 6337 Test '-fbranch-probabilities' using 6338 'gcc.misc-tests/bprob.exp', which in turn uses the generic, 6339 language-independent framework (*note Support for testing 6340 profile-directed optimizations: profopt Testing.). 6341 6342 'gcov*.c' 6343 Test 'gcov' output using 'gcov.exp', which in turn uses the 6344 language-independent support (*note Support for testing gcov: 6345 gcov Testing.). 6346 6347 'i386-pf-*.c' 6348 Test i386-specific support for data prefetch using 6349 'i386-prefetch.exp'. 6350 6351'gcc.test-framework' 6352 'dg-*.c' 6353 Test the testsuite itself using 6354 'gcc.test-framework/test-framework.exp'. 6355 6356 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test 6357cases and magic comments more. 6358 6359 6360File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: C Tests, Up: Testsuites 6361 63627.5 Support for testing link-time optimizations 6363=============================================== 6364 6365Tests for link-time optimizations usually require multiple source files 6366that are compiled separately, perhaps with different sets of options. 6367There are several special-purpose test directives used for these tests. 6368 6369'{ dg-lto-do DO-WHAT-KEYWORD }' 6370 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 6371 is executed. It is one of: 6372 6373 'assemble' 6374 Compile with '-c' to produce a relocatable object file. 6375 'link' 6376 Compile, assemble, and link to produce an executable file. 6377 'run' 6378 Produce and run an executable file, which is expected to 6379 return an exit code of 0. 6380 6381 The default is 'assemble'. That can be overridden for a set of 6382 tests by redefining 'dg-do-what-default' within the '.exp' file for 6383 those tests. 6384 6385 Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target' 6386 or 'xfail' list. Use 'dg-skip-if', 'dg-xfail-if', or 6387 'dg-xfail-run-if'. 6388 6389'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 6390 This directive provides a list of one or more sets of compiler 6391 options to override LTO_OPTIONS. Each test will be compiled and 6392 run with each of these sets of options. 6393 6394'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}' 6395 This directive adds OPTIONS to the linker options used. 6396 6397'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}' 6398 This directive removes OPTIONS from the set of linker options used. 6399 6400 6401File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 6402 64037.6 Support for testing 'gcov' 6404============================== 6405 6406Language-independent support for testing 'gcov', and for checking that 6407branch profiling produces expected values, is provided by the expect 6408file 'lib/gcov.exp'. 'gcov' tests also rely on procedures in 6409'lib/gcc-dg.exp' to compile and run the test program. A typical 'gcov' 6410test contains the following DejaGnu commands within comments: 6411 6412 { dg-options "--coverage" } 6413 { dg-do run { target native } } 6414 { dg-final { run-gcov sourcefile } } 6415 6416 Checks of 'gcov' output can include line counts, branch percentages, 6417and call return percentages. All of these checks are requested via 6418commands that appear in comments in the test's source file. Commands to 6419check line counts are processed by default. Commands to check branch 6420percentages and call return percentages are processed if the 'run-gcov' 6421command has arguments 'branches' or 'calls', respectively. For example, 6422the following specifies checking both, as well as passing '-b' to 6423'gcov': 6424 6425 { dg-final { run-gcov branches calls { -b sourcefile } } } 6426 6427 A line count command appears within a comment on the source line that 6428is expected to get the specified count and has the form 'count(CNT)'. A 6429test should only check line counts for lines that will get the same 6430count for any architecture. 6431 6432 Commands to check branch percentages ('branch') and call return 6433percentages ('returns') are very similar to each other. A beginning 6434command appears on or before the first of a range of lines that will 6435report the percentage, and the ending command follows that range of 6436lines. The beginning command can include a list of percentages, all of 6437which are expected to be found within the range. A range is terminated 6438by the next command of the same kind. A command 'branch(end)' or 6439'returns(end)' marks the end of a range without starting a new one. For 6440example: 6441 6442 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 6443 /* branch(end) */ 6444 foo (i, j); 6445 6446 For a call return percentage, the value specified is the percentage of 6447calls reported to return. For a branch percentage, the value is either 6448the expected percentage or 100 minus that value, since the direction of 6449a branch can differ depending on the target or the optimization level. 6450 6451 Not all branches and calls need to be checked. A test should not check 6452for branches that might be optimized away or replaced with predicated 6453instructions. Don't check for calls inserted by the compiler or ones 6454that might be inlined or optimized away. 6455 6456 A single test can check for combinations of line counts, branch 6457percentages, and call return percentages. The command to check a line 6458count must appear on the line that will report that count, but commands 6459to check branch percentages and call return percentages can bracket the 6460lines that report them. 6461 6462 6463File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 6464 64657.7 Support for testing profile-directed optimizations 6466====================================================== 6467 6468The file 'profopt.exp' provides language-independent support for 6469checking correct execution of a test built with profile-directed 6470optimization. This testing requires that a test program be built and 6471executed twice. The first time it is compiled to generate profile data, 6472and the second time it is compiled to use the data that was generated 6473during the first execution. The second execution is to verify that the 6474test produces the expected results. 6475 6476 To check that the optimization actually generated better code, a test 6477can be built and run a third time with normal optimizations to verify 6478that the performance is better with the profile-directed optimizations. 6479'profopt.exp' has the beginnings of this kind of support. 6480 6481 'profopt.exp' provides generic support for profile-directed 6482optimizations. Each set of tests that uses it provides information 6483about a specific optimization: 6484 6485'tool' 6486 tool being tested, e.g., 'gcc' 6487 6488'profile_option' 6489 options used to generate profile data 6490 6491'feedback_option' 6492 options used to optimize using that profile data 6493 6494'prof_ext' 6495 suffix of profile data files 6496 6497'PROFOPT_OPTIONS' 6498 list of options with which to run each test, similar to the lists 6499 for torture tests 6500 6501'{ dg-final-generate { LOCAL-DIRECTIVE } }' 6502 This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is 6503 run after the generation of profile data. 6504 6505'{ dg-final-use { LOCAL-DIRECTIVE } }' 6506 The LOCAL-DIRECTIVE is run after the profile data have been used. 6507 6508 6509File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 6510 65117.8 Support for testing binary compatibility 6512============================================ 6513 6514The file 'compat.exp' provides language-independent support for binary 6515compatibility testing. It supports testing interoperability of two 6516compilers that follow the same ABI, or of multiple sets of compiler 6517options that should not affect binary compatibility. It is intended to 6518be used for testsuites that complement ABI testsuites. 6519 6520 A test supported by this framework has three parts, each in a separate 6521source file: a main program and two pieces that interact with each other 6522to split up the functionality being tested. 6523 6524'TESTNAME_main.SUFFIX' 6525 Contains the main program, which calls a function in file 6526 'TESTNAME_x.SUFFIX'. 6527 6528'TESTNAME_x.SUFFIX' 6529 Contains at least one call to a function in 'TESTNAME_y.SUFFIX'. 6530 6531'TESTNAME_y.SUFFIX' 6532 Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'. 6533 6534 Within each test, the main program and one functional piece are 6535compiled by the GCC under test. The other piece can be compiled by an 6536alternate compiler. If no alternate compiler is specified, then all 6537three source files are all compiled by the GCC under test. You can 6538specify pairs of sets of compiler options. The first element of such a 6539pair specifies options used with the GCC under test, and the second 6540element of the pair specifies options used with the alternate compiler. 6541Each test is compiled with each pair of options. 6542 6543 'compat.exp' defines default pairs of compiler options. These can be 6544overridden by defining the environment variable 'COMPAT_OPTIONS' as: 6545 6546 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 6547 ...[list {TSTN} {ALTN}]]" 6548 6549 where TSTI and ALTI are lists of options, with TSTI used by the 6550compiler under test and ALTI used by the alternate compiler. For 6551example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 6552the test is first built with '-g -O0' by the compiler under test and 6553with '-O3' by the alternate compiler. The test is built a second time 6554using '-fpic' by the compiler under test and '-fPIC -O2' by the 6555alternate compiler. 6556 6557 An alternate compiler is specified by defining an environment variable 6558to be the full pathname of an installed compiler; for C define 6559'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'. These 6560will be written to the 'site.exp' file used by DejaGnu. The default is 6561to build each test with the compiler under test using the first of each 6562pair of compiler options from 'COMPAT_OPTIONS'. When 6563'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is 6564built using the compiler under test but with combinations of the options 6565from 'COMPAT_OPTIONS'. 6566 6567 To run only the C++ compatibility suite using the compiler under test 6568and another version of GCC using specific compiler options, do the 6569following from 'OBJDIR/gcc': 6570 6571 rm site.exp 6572 make -k \ 6573 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 6574 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 6575 check-c++ \ 6576 RUNTESTFLAGS="compat.exp" 6577 6578 A test that fails when the source files are compiled with different 6579compilers, but passes when the files are compiled with the same 6580compiler, demonstrates incompatibility of the generated code or runtime 6581support. A test that fails for the alternate compiler but passes for 6582the compiler under test probably tests for a bug that was fixed in the 6583compiler under test but is present in the alternate compiler. 6584 6585 The binary compatibility tests support a small number of test framework 6586commands that appear within comments in a test file. 6587 6588'dg-require-*' 6589 These commands can be used in 'TESTNAME_main.SUFFIX' to skip the 6590 test if specific support is not available on the target. 6591 6592'dg-options' 6593 The specified options are used for compiling this particular source 6594 file, appended to the options from 'COMPAT_OPTIONS'. When this 6595 command appears in 'TESTNAME_main.SUFFIX' the options are also used 6596 to link the test program. 6597 6598'dg-xfail-if' 6599 This command can be used in a secondary source file to specify that 6600 compilation is expected to fail for particular options on 6601 particular targets. 6602 6603 6604File: gccint.info, Node: Torture Tests, Next: GIMPLE Tests, Prev: compat Testing, Up: Testsuites 6605 66067.9 Support for torture testing using multiple options 6607====================================================== 6608 6609Throughout the compiler testsuite there are several directories whose 6610tests are run multiple times, each with a different set of options. 6611These are known as torture tests. 'lib/torture-options.exp' defines 6612procedures to set up these lists: 6613 6614'torture-init' 6615 Initialize use of torture lists. 6616'set-torture-options' 6617 Set lists of torture options to use for tests with and without 6618 loops. Optionally combine a set of torture options with a set of 6619 other options, as is done with Objective-C runtime options. 6620'torture-finish' 6621 Finalize use of torture lists. 6622 6623 The '.exp' file for a set of tests that use torture options must 6624include calls to these three procedures if: 6625 6626 * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 6627 6628 * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL 6629 is 'c', 'fortran', or 'objc'. 6630 6631 * It calls 'dg-pch'. 6632 6633 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to 6634call the torture procedures if the tests should use the list in 6635DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'. 6636 6637 Most uses of torture options can override the default lists by defining 6638TORTURE_OPTIONS or add to the default list by defining 6639ADDITIONAL_TORTURE_OPTIONS. Define these in a '.dejagnurc' file or add 6640them to the 'site.exp' file; for example 6641 6642 set ADDITIONAL_TORTURE_OPTIONS [list \ 6643 { -O2 -ftree-loop-linear } \ 6644 { -O2 -fpeel-loops } ] 6645 6646 6647File: gccint.info, Node: GIMPLE Tests, Next: RTL Tests, Prev: Torture Tests, Up: Testsuites 6648 66497.10 Support for testing GIMPLE passes 6650====================================== 6651 6652As of gcc 7, C functions can be tagged with '__GIMPLE' to indicate that 6653the function body will be GIMPLE, rather than C. The compiler requires 6654the option '-fgimple' to enable this functionality. For example: 6655 6656 /* { dg-do compile } */ 6657 /* { dg-options "-O -fgimple" } */ 6658 6659 void __GIMPLE (startwith ("dse2")) foo () 6660 { 6661 int a; 6662 6663 bb_2: 6664 if (a > 4) 6665 goto bb_3; 6666 else 6667 goto bb_4; 6668 6669 bb_3: 6670 a_2 = 10; 6671 goto bb_5; 6672 6673 bb_4: 6674 a_3 = 20; 6675 6676 bb_5: 6677 a_1 = __PHI (bb_3: a_2, bb_4: a_3); 6678 a_4 = a_1 + 4; 6679 6680 return; 6681 } 6682 6683 The 'startwith' argument indicates at which pass to begin. 6684 6685 Use the dump modifier '-gimple' (e.g. '-fdump-tree-all-gimple') to make 6686tree dumps more closely follow the format accepted by the GIMPLE parser. 6687 6688 Example DejaGnu tests of GIMPLE can be seen in the source tree at 6689'gcc/testsuite/gcc.dg/gimplefe-*.c'. 6690 6691 The '__GIMPLE' parser is integrated with the C tokenizer and 6692preprocessor, so it should be possible to use macros to build out test 6693coverage. 6694 6695 6696File: gccint.info, Node: RTL Tests, Prev: GIMPLE Tests, Up: Testsuites 6697 66987.11 Support for testing RTL passes 6699=================================== 6700 6701As of gcc 7, C functions can be tagged with '__RTL' to indicate that the 6702function body will be RTL, rather than C. For example: 6703 6704 double __RTL (startwith ("ira")) test (struct foo *f, const struct bar *b) 6705 { 6706 (function "test" 6707 [...snip; various directives go in here...] 6708 ) ;; function "test" 6709 } 6710 6711 The 'startwith' argument indicates at which pass to begin. 6712 6713 The parser expects the RTL body to be in the format emitted by this 6714dumping function: 6715 6716 DEBUG_FUNCTION void 6717 print_rtx_function (FILE *outfile, function *fn, bool compact); 6718 6719 when "compact" is true. So you can capture RTL in the correct format 6720from the debugger using: 6721 6722 (gdb) print_rtx_function (stderr, cfun, true); 6723 6724 and copy and paste the output into the body of the C function. 6725 6726 Example DejaGnu tests of RTL can be seen in the source tree under 6727'gcc/testsuite/gcc.dg/rtl'. 6728 6729 The '__RTL' parser is not integrated with the C tokenizer or 6730preprocessor, and works simply by reading the relevant lines within the 6731braces. In particular, the RTL body must be on separate lines from the 6732enclosing braces, and the preprocessor is not usable within it. 6733 6734 6735File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 6736 67378 Option specification files 6738**************************** 6739 6740Most GCC command-line options are described by special option definition 6741files, the names of which conventionally end in '.opt'. This chapter 6742describes the format of these files. 6743 6744* Menu: 6745 6746* Option file format:: The general layout of the files 6747* Option properties:: Supported option properties 6748 6749 6750File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 6751 67528.1 Option file format 6753====================== 6754 6755Option files are a simple list of records in which each field occupies 6756its own line and in which the records themselves are separated by blank 6757lines. Comments may appear on their own line anywhere within the file 6758and are preceded by semicolons. Whitespace is allowed before the 6759semicolon. 6760 6761 The files can contain the following types of record: 6762 6763 * A language definition record. These records have two fields: the 6764 string 'Language' and the name of the language. Once a language 6765 has been declared in this way, it can be used as an option 6766 property. *Note Option properties::. 6767 6768 * A target specific save record to save additional information. 6769 These records have two fields: the string 'TargetSave', and a 6770 declaration type to go in the 'cl_target_option' structure. 6771 6772 * A variable record to define a variable used to store option 6773 information. These records have two fields: the string 'Variable', 6774 and a declaration of the type and name of the variable, optionally 6775 with an initializer (but without any trailing ';'). These records 6776 may be used for variables used for many options where declaring the 6777 initializer in a single option definition record, or duplicating it 6778 in many records, would be inappropriate, or for variables set in 6779 option handlers rather than referenced by 'Var' properties. 6780 6781 * A variable record to define a variable used to store option 6782 information. These records have two fields: the string 6783 'TargetVariable', and a declaration of the type and name of the 6784 variable, optionally with an initializer (but without any trailing 6785 ';'). 'TargetVariable' is a combination of 'Variable' and 6786 'TargetSave' records in that the variable is defined in the 6787 'gcc_options' structure, but these variables are also stored in the 6788 'cl_target_option' structure. The variables are saved in the 6789 target save code and restored in the target restore code. 6790 6791 * A variable record to record any additional files that the 6792 'options.h' file should include. This is useful to provide 6793 enumeration or structure definitions needed for target variables. 6794 These records have two fields: the string 'HeaderInclude' and the 6795 name of the include file. 6796 6797 * A variable record to record any additional files that the 6798 'options.c' or 'options-save.c' file should include. This is 6799 useful to provide inline functions needed for target variables 6800 and/or '#ifdef' sequences to properly set up the initialization. 6801 These records have two fields: the string 'SourceInclude' and the 6802 name of the include file. 6803 6804 * An enumeration record to define a set of strings that may be used 6805 as arguments to an option or options. These records have three 6806 fields: the string 'Enum', a space-separated list of properties and 6807 help text used to describe the set of strings in '--help' output. 6808 Properties use the same format as option properties; the following 6809 are valid: 6810 'Name(NAME)' 6811 This property is required; NAME must be a name (suitable for 6812 use in C identifiers) used to identify the set of strings in 6813 'Enum' option properties. 6814 6815 'Type(TYPE)' 6816 This property is required; TYPE is the C type for variables 6817 set by options using this enumeration together with 'Var'. 6818 6819 'UnknownError(MESSAGE)' 6820 The message MESSAGE will be used as an error message if the 6821 argument is invalid; for enumerations without 'UnknownError', 6822 a generic error message is used. MESSAGE should contain a 6823 single '%qs' format, which will be used to format the invalid 6824 argument. 6825 6826 * An enumeration value record to define one of the strings in a set 6827 given in an 'Enum' record. These records have two fields: the 6828 string 'EnumValue' and a space-separated list of properties. 6829 Properties use the same format as option properties; the following 6830 are valid: 6831 'Enum(NAME)' 6832 This property is required; NAME says which 'Enum' record this 6833 'EnumValue' record corresponds to. 6834 6835 'String(STRING)' 6836 This property is required; STRING is the string option 6837 argument being described by this record. 6838 6839 'Value(VALUE)' 6840 This property is required; it says what value (representable 6841 as 'int') should be used for the given string. 6842 6843 'Canonical' 6844 This property is optional. If present, it says the present 6845 string is the canonical one among all those with the given 6846 value. Other strings yielding that value will be mapped to 6847 this one so specs do not need to handle them. 6848 6849 'DriverOnly' 6850 This property is optional. If present, the present string 6851 will only be accepted by the driver. This is used for cases 6852 such as '-march=native' that are processed by the driver so 6853 that 'gcc -v' shows how the options chosen depended on the 6854 system on which the compiler was run. 6855 6856 * An option definition record. These records have the following 6857 fields: 6858 1. the name of the option, with the leading "-" removed 6859 2. a space-separated list of option properties (*note Option 6860 properties::) 6861 3. the help text to use for '--help' (omitted if the second field 6862 contains the 'Undocumented' property). 6863 6864 By default, all options beginning with "f", "W" or "m" are 6865 implicitly assumed to take a "no-" form. This form should not be 6866 listed separately. If an option beginning with one of these 6867 letters does not have a "no-" form, you can use the 6868 'RejectNegative' property to reject it. 6869 6870 The help text is automatically line-wrapped before being displayed. 6871 Normally the name of the option is printed on the left-hand side of 6872 the output and the help text is printed on the right. However, if 6873 the help text contains a tab character, the text to the left of the 6874 tab is used instead of the option's name and the text to the right 6875 of the tab forms the help text. This allows you to elaborate on 6876 what type of argument the option takes. 6877 6878 * A target mask record. These records have one field of the form 6879 'Mask(X)'. The options-processing script will automatically 6880 allocate a bit in 'target_flags' (*note Run-time Target::) for each 6881 mask name X and set the macro 'MASK_X' to the appropriate bitmask. 6882 It will also declare a 'TARGET_X' macro that has the value 1 when 6883 bit 'MASK_X' is set and 0 otherwise. 6884 6885 They are primarily intended to declare target masks that are not 6886 associated with user options, either because these masks represent 6887 internal switches or because the options are not available on all 6888 configurations and yet the masks always need to be defined. 6889 6890 6891File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 6892 68938.2 Option properties 6894===================== 6895 6896The second field of an option record can specify any of the following 6897properties. When an option takes an argument, it is enclosed in 6898parentheses following the option property name. The parser that handles 6899option files is quite simplistic, and will be tricked by any nested 6900parentheses within the argument text itself; in this case, the entire 6901option argument can be wrapped in curly braces within the parentheses to 6902demarcate it, e.g.: 6903 6904 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 6905 6906'Common' 6907 The option is available for all languages and targets. 6908 6909'Target' 6910 The option is available for all languages but is target-specific. 6911 6912'Driver' 6913 The option is handled by the compiler driver using code not shared 6914 with the compilers proper ('cc1' etc.). 6915 6916'LANGUAGE' 6917 The option is available when compiling for the given language. 6918 6919 It is possible to specify several different languages for the same 6920 option. Each LANGUAGE must have been declared by an earlier 6921 'Language' record. *Note Option file format::. 6922 6923'RejectDriver' 6924 The option is only handled by the compilers proper ('cc1' etc.) and 6925 should not be accepted by the driver. 6926 6927'RejectNegative' 6928 The option does not have a "no-" form. All options beginning with 6929 "f", "W" or "m" are assumed to have a "no-" form unless this 6930 property is used. 6931 6932'Negative(OTHERNAME)' 6933 The option will turn off another option OTHERNAME, which is the 6934 option name with the leading "-" removed. This chain action will 6935 propagate through the 'Negative' property of the option to be 6936 turned off. The driver will prune options, removing those that are 6937 turned off by some later option. This pruning is not done for 6938 options with 'Joined' or 'JoinedOrMissing' properties, unless the 6939 options have either 'RejectNegative' property or the 'Negative' 6940 property mentions an option other than itself. 6941 6942 As a consequence, if you have a group of mutually-exclusive 6943 options, their 'Negative' properties should form a circular chain. 6944 For example, if options '-A', '-B' and '-C' are mutually exclusive, 6945 their respective 'Negative' properties should be 'Negative(B)', 6946 'Negative(C)' and 'Negative(A)'. 6947 6948'Joined' 6949'Separate' 6950 The option takes a mandatory argument. 'Joined' indicates that the 6951 option and argument can be included in the same 'argv' entry (as 6952 with '-mflush-func=NAME', for example). 'Separate' indicates that 6953 the option and argument can be separate 'argv' entries (as with 6954 '-o'). An option is allowed to have both of these properties. 6955 6956'JoinedOrMissing' 6957 The option takes an optional argument. If the argument is given, 6958 it will be part of the same 'argv' entry as the option itself. 6959 6960 This property cannot be used alongside 'Joined' or 'Separate'. 6961 6962'MissingArgError(MESSAGE)' 6963 For an option marked 'Joined' or 'Separate', the message MESSAGE 6964 will be used as an error message if the mandatory argument is 6965 missing; for options without 'MissingArgError', a generic error 6966 message is used. MESSAGE should contain a single '%qs' format, 6967 which will be used to format the name of the option passed. 6968 6969'Args(N)' 6970 For an option marked 'Separate', indicate that it takes N 6971 arguments. The default is 1. 6972 6973'UInteger' 6974 The option's argument is a non-negative integer consisting of 6975 either decimal or hexadecimal digits interpreted as 'int'. 6976 Hexadecimal integers may optionally start with the '0x' or '0X' 6977 prefix. The option parser validates and converts the argument 6978 before passing it to the relevant option handler. 'UInteger' 6979 should also be used with options like '-falign-loops' where both 6980 '-falign-loops' and '-falign-loops'=N are supported to make sure 6981 the saved options are given a full integer. Positive values of the 6982 argument in excess of 'INT_MAX' wrap around zero. 6983 6984'Host_Wide_Int' 6985 The option's argument is a non-negative integer consisting of 6986 either decimal or hexadecimal digits interpreted as the widest 6987 integer type on the host. As with an 'UInteger' argument, 6988 hexadecimal integers may optionally start with the '0x' or '0X' 6989 prefix. The option parser validates and converts the argument 6990 before passing it to the relevant option handler. 'Host_Wide_Int' 6991 should be used with options that need to accept very large values. 6992 Positive values of the argument in excess of 'HOST_WIDE_INT_M1U' 6993 are assigned 'HOST_WIDE_INT_M1U'. 6994 6995'IntegerRange(N, M)' 6996 The options's arguments are integers of type 'int'. The option's 6997 parser validates that the value of an option integer argument is 6998 within the closed range [N, M]. 6999 7000'ByteSize' 7001 A property applicable only to 'UInteger' or 'Host_Wide_Int' 7002 arguments. The option's integer argument is interpreted as if in 7003 infinite precision using saturation arithmetic in the corresponding 7004 type. The argument may be followed by a 'byte-size' suffix 7005 designating a multiple of bytes such as 'kB' and 'KiB' for kilobyte 7006 and kibibyte, respectively, 'MB' and 'MiB' for megabyte and 7007 mebibyte, 'GB' and 'GiB' for gigabyte and gigibyte, and so on. 7008 'ByteSize' should be used for with options that take a very large 7009 argument representing a size in bytes, such as '-Wlarger-than='. 7010 7011'ToLower' 7012 The option's argument should be converted to lowercase as part of 7013 putting it in canonical form, and before comparing with the strings 7014 indicated by any 'Enum' property. 7015 7016'NoDriverArg' 7017 For an option marked 'Separate', the option only takes an argument 7018 in the compiler proper, not in the driver. This is for 7019 compatibility with existing options that are used both directly and 7020 via '-Wp,'; new options should not have this property. 7021 7022'Var(VAR)' 7023 The state of this option should be stored in variable VAR (actually 7024 a macro for 'global_options.x_VAR'). The way that the state is 7025 stored depends on the type of option: 7026 7027'WarnRemoved' 7028 The option is removed and every usage of such option will result in 7029 a warning. We use it option backward compatibility. 7030 7031'Var(VAR, SET)' 7032 The option controls an integer variable VAR and is active when VAR 7033 equals SET. The option parser will set VAR to SET when the 7034 positive form of the option is used and '!SET' when the "no-" form 7035 is used. 7036 7037 VAR is declared in the same way as for the single-argument form 7038 described above. 7039 7040 * If the option uses the 'Mask' or 'InverseMask' properties, VAR 7041 is the integer variable that contains the mask. 7042 7043 * If the option is a normal on/off switch, VAR is an integer 7044 variable that is nonzero when the option is enabled. The 7045 options parser will set the variable to 1 when the positive 7046 form of the option is used and 0 when the "no-" form is used. 7047 7048 * If the option takes an argument and has the 'UInteger' 7049 property, VAR is an integer variable that stores the value of 7050 the argument. 7051 7052 * If the option takes an argument and has the 'Enum' property, 7053 VAR is a variable (type given in the 'Type' property of the 7054 'Enum' record whose 'Name' property has the same argument as 7055 the 'Enum' property of this option) that stores the value of 7056 the argument. 7057 7058 * If the option has the 'Defer' property, VAR is a pointer to a 7059 'VEC(cl_deferred_option,heap)' that stores the option for 7060 later processing. (VAR is declared with type 'void *' and 7061 needs to be cast to 'VEC(cl_deferred_option,heap)' before 7062 use.) 7063 7064 * Otherwise, if the option takes an argument, VAR is a pointer 7065 to the argument string. The pointer will be null if the 7066 argument is optional and wasn't given. 7067 7068 The option-processing script will usually zero-initialize VAR. You 7069 can modify this behavior using 'Init'. 7070 7071'Init(VALUE)' 7072 The variable specified by the 'Var' property should be statically 7073 initialized to VALUE. If more than one option using the same 7074 variable specifies 'Init', all must specify the same initializer. 7075 7076'Mask(NAME)' 7077 The option is associated with a bit in the 'target_flags' variable 7078 (*note Run-time Target::) and is active when that bit is set. You 7079 may also specify 'Var' to select a variable other than 7080 'target_flags'. 7081 7082 The options-processing script will automatically allocate a unique 7083 bit for the option. If the option is attached to 'target_flags', 7084 the script will set the macro 'MASK_NAME' to the appropriate 7085 bitmask. It will also declare a 'TARGET_NAME' macro that has the 7086 value 1 when the option is active and 0 otherwise. If you use 7087 'Var' to attach the option to a different variable, the bitmask 7088 macro with be called 'OPTION_MASK_NAME'. 7089 7090'InverseMask(OTHERNAME)' 7091'InverseMask(OTHERNAME, THISNAME)' 7092 The option is the inverse of another option that has the 7093 'Mask(OTHERNAME)' property. If THISNAME is given, the 7094 options-processing script will declare a 'TARGET_THISNAME' macro 7095 that is 1 when the option is active and 0 otherwise. 7096 7097'Enum(NAME)' 7098 The option's argument is a string from the set of strings 7099 associated with the corresponding 'Enum' record. The string is 7100 checked and converted to the integer specified in the corresponding 7101 'EnumValue' record before being passed to option handlers. 7102 7103'Defer' 7104 The option should be stored in a vector, specified with 'Var', for 7105 later processing. 7106 7107'Alias(OPT)' 7108'Alias(OPT, ARG)' 7109'Alias(OPT, POSARG, NEGARG)' 7110 The option is an alias for '-OPT' (or the negative form of that 7111 option, depending on 'NegativeAlias'). In the first form, any 7112 argument passed to the alias is considered to be passed to '-OPT', 7113 and '-OPT' is considered to be negated if the alias is used in 7114 negated form. In the second form, the alias may not be negated or 7115 have an argument, and POSARG is considered to be passed as an 7116 argument to '-OPT'. In the third form, the alias may not have an 7117 argument, if the alias is used in the positive form then POSARG is 7118 considered to be passed to '-OPT', and if the alias is used in the 7119 negative form then NEGARG is considered to be passed to '-OPT'. 7120 7121 Aliases should not specify 'Var' or 'Mask' or 'UInteger'. Aliases 7122 should normally specify the same languages as the target of the 7123 alias; the flags on the target will be used to determine any 7124 diagnostic for use of an option for the wrong language, while those 7125 on the alias will be used to identify what command-line text is the 7126 option and what text is any argument to that option. 7127 7128 When an 'Alias' definition is used for an option, driver specs do 7129 not need to handle it and no 'OPT_' enumeration value is defined 7130 for it; only the canonical form of the option will be seen in those 7131 places. 7132 7133'NegativeAlias' 7134 For an option marked with 'Alias(OPT)', the option is considered to 7135 be an alias for the positive form of '-OPT' if negated and for the 7136 negative form of '-OPT' if not negated. 'NegativeAlias' may not be 7137 used with the forms of 'Alias' taking more than one argument. 7138 7139'Ignore' 7140 This option is ignored apart from printing any warning specified 7141 using 'Warn'. The option will not be seen by specs and no 'OPT_' 7142 enumeration value is defined for it. 7143 7144'SeparateAlias' 7145 For an option marked with 'Joined', 'Separate' and 'Alias', the 7146 option only acts as an alias when passed a separate argument; with 7147 a joined argument it acts as a normal option, with an 'OPT_' 7148 enumeration value. This is for compatibility with the Java '-d' 7149 option and should not be used for new options. 7150 7151'Warn(MESSAGE)' 7152 If this option is used, output the warning MESSAGE. MESSAGE is a 7153 format string, either taking a single operand with a '%qs' format 7154 which is the option name, or not taking any operands, which is 7155 passed to the 'warning' function. If an alias is marked 'Warn', 7156 the target of the alias must not also be marked 'Warn'. 7157 7158'Report' 7159 The state of the option should be printed by '-fverbose-asm'. 7160 7161'Warning' 7162 This is a warning option and should be shown as such in '--help' 7163 output. This flag does not currently affect anything other than 7164 '--help'. 7165 7166'Optimization' 7167 This is an optimization option. It should be shown as such in 7168 '--help' output, and any associated variable named using 'Var' 7169 should be saved and restored when the optimization level is changed 7170 with 'optimize' attributes. 7171 7172'PerFunction' 7173 This is an option that can be overridden on a per-function basis. 7174 'Optimization' implies 'PerFunction', but options that do not 7175 affect executable code generation may use this flag instead, so 7176 that the option is not taken into account in ways that might affect 7177 executable code generation. 7178 7179'Param' 7180 This is an option that is a parameter. 7181 7182'Undocumented' 7183 The option is deliberately missing documentation and should not be 7184 included in the '--help' output. 7185 7186'Condition(COND)' 7187 The option should only be accepted if preprocessor condition COND 7188 is true. Note that any C declarations associated with the option 7189 will be present even if COND is false; COND simply controls whether 7190 the option is accepted and whether it is printed in the '--help' 7191 output. 7192 7193'Save' 7194 Build the 'cl_target_option' structure to hold a copy of the 7195 option, add the functions 'cl_target_option_save' and 7196 'cl_target_option_restore' to save and restore the options. 7197 7198'SetByCombined' 7199 The option may also be set by a combined option such as 7200 '-ffast-math'. This causes the 'gcc_options' struct to have a 7201 field 'frontend_set_NAME', where 'NAME' is the name of the field 7202 holding the value of this option (without the leading 'x_'). This 7203 gives the front end a way to indicate that the value has been set 7204 explicitly and should not be changed by the combined option. For 7205 example, some front ends use this to prevent '-ffast-math' and 7206 '-fno-fast-math' from changing the value of '-fmath-errno' for 7207 languages that do not use 'errno'. 7208 7209'EnabledBy(OPT)' 7210'EnabledBy(OPT || OPT2)' 7211'EnabledBy(OPT && OPT2)' 7212 If not explicitly set, the option is set to the value of '-OPT'; 7213 multiple options can be given, separated by '||'. The third form 7214 using '&&' specifies that the option is only set if both OPT and 7215 OPT2 are set. The options OPT and OPT2 must have the 'Common' 7216 property; otherwise, use 'LangEnabledBy'. 7217 7218'LangEnabledBy(LANGUAGE, OPT)' 7219'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)' 7220 When compiling for the given language, the option is set to the 7221 value of '-OPT', if not explicitly set. OPT can be also a list of 7222 '||' separated options. In the second form, if OPT is used in the 7223 positive form then POSARG is considered to be passed to the option, 7224 and if OPT is used in the negative form then NEGARG is considered 7225 to be passed to the option. It is possible to specify several 7226 different languages. Each LANGUAGE must have been declared by an 7227 earlier 'Language' record. *Note Option file format::. 7228 7229'NoDWARFRecord' 7230 The option is omitted from the producer string written by 7231 '-grecord-gcc-switches'. 7232 7233'PchIgnore' 7234 Even if this is a target option, this option will not be recorded / 7235 compared to determine if a precompiled header file matches. 7236 7237'CPP(VAR)' 7238 The state of this option should be kept in sync with the 7239 preprocessor option VAR. If this property is set, then properties 7240 'Var' and 'Init' must be set as well. 7241 7242'CppReason(CPP_W_ENUM)' 7243 This warning option corresponds to 'cpplib.h' warning reason code 7244 CPP_W_ENUM. This should only be used for warning options of the 7245 C-family front-ends. 7246 7247 7248File: gccint.info, Node: Passes, Next: poly_int, Prev: Options, Up: Top 7249 72509 Passes and Files of the Compiler 7251********************************** 7252 7253This chapter is dedicated to giving an overview of the optimization and 7254code generation passes of the compiler. In the process, it describes 7255some of the language front end interface, though this description is no 7256where near complete. 7257 7258* Menu: 7259 7260* Parsing pass:: The language front end turns text into bits. 7261* Gimplification pass:: The bits are turned into something we can optimize. 7262* Pass manager:: Sequencing the optimization passes. 7263* IPA passes:: Inter-procedural optimizations. 7264* Tree SSA passes:: Optimizations on a high-level representation. 7265* RTL passes:: Optimizations on a low-level representation. 7266* Optimization info:: Dumping optimization information from passes. 7267 7268 7269File: gccint.info, Node: Parsing pass, Next: Gimplification pass, Up: Passes 7270 72719.1 Parsing pass 7272================ 7273 7274The language front end is invoked only once, via 7275'lang_hooks.parse_file', to parse the entire input. The language front 7276end may use any intermediate language representation deemed appropriate. 7277The C front end uses GENERIC trees (*note GENERIC::), plus a double 7278handful of language specific tree codes defined in 'c-common.def'. The 7279Fortran front end uses a completely different private representation. 7280 7281 At some point the front end must translate the representation used in 7282the front end to a representation understood by the language-independent 7283portions of the compiler. Current practice takes one of two forms. The 7284C front end manually invokes the gimplifier (*note GIMPLE::) on each 7285function, and uses the gimplifier callbacks to convert the 7286language-specific tree nodes directly to GIMPLE before passing the 7287function off to be compiled. The Fortran front end converts from a 7288private representation to GENERIC, which is later lowered to GIMPLE when 7289the function is compiled. Which route to choose probably depends on how 7290well GENERIC (plus extensions) can be made to match up with the source 7291language and necessary parsing data structures. 7292 7293 BUG: Gimplification must occur before nested function lowering, and 7294nested function lowering must be done by the front end before passing 7295the data off to cgraph. 7296 7297 TODO: Cgraph should control nested function lowering. It would only be 7298invoked when it is certain that the outer-most function is used. 7299 7300 TODO: Cgraph needs a gimplify_function callback. It should be invoked 7301when (1) it is certain that the function is used, (2) warning flags 7302specified by the user require some amount of compilation in order to 7303honor, (3) the language indicates that semantic analysis is not complete 7304until gimplification occurs. Hum... this sounds overly complicated. 7305Perhaps we should just have the front end gimplify always; in most cases 7306it's only one function call. 7307 7308 The front end needs to pass all function definitions and top level 7309declarations off to the middle-end so that they can be compiled and 7310emitted to the object file. For a simple procedural language, it is 7311usually most convenient to do this as each top level declaration or 7312definition is seen. There is also a distinction to be made between 7313generating functional code and generating complete debug information. 7314The only thing that is absolutely required for functional code is that 7315function and data _definitions_ be passed to the middle-end. For 7316complete debug information, function, data and type declarations should 7317all be passed as well. 7318 7319 In any case, the front end needs each complete top-level function or 7320data declaration, and each data definition should be passed to 7321'rest_of_decl_compilation'. Each complete type definition should be 7322passed to 'rest_of_type_compilation'. Each function definition should 7323be passed to 'cgraph_finalize_function'. 7324 7325 TODO: I know rest_of_compilation currently has all sorts of RTL 7326generation semantics. I plan to move all code generation bits (both 7327Tree and RTL) to compile_function. Should we hide cgraph from the front 7328ends and move back to rest_of_compilation as the official interface? 7329Possibly we should rename all three interfaces such that the names match 7330in some meaningful way and that is more descriptive than "rest_of". 7331 7332 The middle-end will, at its option, emit the function and data 7333definitions immediately or queue them for later processing. 7334 7335 7336File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Parsing pass, Up: Passes 7337 73389.2 Gimplification pass 7339======================= 7340 7341"Gimplification" is a whimsical term for the process of converting the 7342intermediate representation of a function into the GIMPLE language 7343(*note GIMPLE::). The term stuck, and so words like "gimplification", 7344"gimplify", "gimplifier" and the like are sprinkled throughout this 7345section of code. 7346 7347 While a front end may certainly choose to generate GIMPLE directly if 7348it chooses, this can be a moderately complex process unless the 7349intermediate language used by the front end is already fairly simple. 7350Usually it is easier to generate GENERIC trees plus extensions and let 7351the language-independent gimplifier do most of the work. 7352 7353 The main entry point to this pass is 'gimplify_function_tree' located 7354in 'gimplify.c'. From here we process the entire function gimplifying 7355each statement in turn. The main workhorse for this pass is 7356'gimplify_expr'. Approximately everything passes through here at least 7357once, and it is from here that we invoke the 'lang_hooks.gimplify_expr' 7358callback. 7359 7360 The callback should examine the expression in question and return 7361'GS_UNHANDLED' if the expression is not a language specific construct 7362that requires attention. Otherwise it should alter the expression in 7363some way to such that forward progress is made toward producing valid 7364GIMPLE. If the callback is certain that the transformation is complete 7365and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'. 7366Otherwise it should return 'GS_OK', which will cause the expression to 7367be processed again. If the callback encounters an error during the 7368transformation (because the front end is relying on the gimplification 7369process to finish semantic checks), it should return 'GS_ERROR'. 7370 7371 7372File: gccint.info, Node: Pass manager, Next: IPA passes, Prev: Gimplification pass, Up: Passes 7373 73749.3 Pass manager 7375================ 7376 7377The pass manager is located in 'passes.c', 'tree-optimize.c' and 7378'tree-pass.h'. It processes passes as described in 'passes.def'. Its 7379job is to run all of the individual passes in the correct order, and 7380take care of standard bookkeeping that applies to every pass. 7381 7382 The theory of operation is that each pass defines a structure that 7383represents everything we need to know about that pass--when it should be 7384run, how it should be run, what intermediate language form or 7385on-the-side data structures it needs. We register the pass to be run in 7386some particular order, and the pass manager arranges for everything to 7387happen in the correct order. 7388 7389 The actuality doesn't completely live up to the theory at present. 7390Command-line switches and 'timevar_id_t' enumerations must still be 7391defined elsewhere. The pass manager validates constraints but does not 7392attempt to (re-)generate data structures or lower intermediate language 7393form based on the requirements of the next pass. Nevertheless, what is 7394present is useful, and a far sight better than nothing at all. 7395 7396 Each pass should have a unique name. Each pass may have its own dump 7397file (for GCC debugging purposes). Passes with a name starting with a 7398star do not dump anything. Sometimes passes are supposed to share a 7399dump file / option name. To still give these unique names, you can use 7400a prefix that is delimited by a space from the part that is used for the 7401dump file / option name. E.g. When the pass name is "ud dce", the name 7402used for dump file/options is "dce". 7403 7404 TODO: describe the global variables set up by the pass manager, and a 7405brief description of how a new pass should use it. I need to look at 7406what info RTL passes use first... 7407 7408 7409File: gccint.info, Node: IPA passes, Next: Tree SSA passes, Prev: Pass manager, Up: Passes 7410 74119.4 Inter-procedural optimization passes 7412======================================== 7413 7414The inter-procedural optimization (IPA) passes use call graph 7415information to perform transformations across function boundaries. IPA 7416is a critical part of link-time optimization (LTO) and whole-program 7417(WHOPR) optimization, and these passes are structured with the needs of 7418LTO and WHOPR in mind by dividing their operations into stages. For 7419detailed discussion of the LTO/WHOPR IPA pass stages and interfaces, see 7420*note IPA::. 7421 7422 The following briefly describes the inter-procedural optimization (IPA) 7423passes, which are split into small IPA passes, regular IPA passes, and 7424late IPA passes, according to the LTO/WHOPR processing model. 7425 7426* Menu: 7427 7428* Small IPA passes:: 7429* Regular IPA passes:: 7430* Late IPA passes:: 7431 7432 7433File: gccint.info, Node: Small IPA passes, Next: Regular IPA passes, Up: IPA passes 7434 74359.4.1 Small IPA passes 7436---------------------- 7437 7438A small IPA pass is a pass derived from 'simple_ipa_opt_pass'. As 7439described in *note IPA::, it does everything at once and defines only 7440the _Execute_ stage. During this stage it accesses and modifies the 7441function bodies. No 'generate_summary', 'read_summary', or 7442'write_summary' hooks are defined. 7443 7444 * IPA free lang data 7445 7446 This pass frees resources that are used by the front end but are 7447 not needed once it is done. It is located in 'tree.c' and is 7448 described by 'pass_ipa_free_lang_data'. 7449 7450 * IPA function and variable visibility 7451 7452 This is a local function pass handling visibilities of all symbols. 7453 This happens before LTO streaming, so '-fwhole-program' should be 7454 ignored at this level. It is located in 'ipa-visibility.c' and is 7455 described by 'pass_ipa_function_and_variable_visibility'. 7456 7457 * IPA remove symbols 7458 7459 This pass performs reachability analysis and reclaims all 7460 unreachable nodes. It is located in 'passes.c' and is described by 7461 'pass_ipa_remove_symbols'. 7462 7463 * IPA OpenACC 7464 7465 This is a pass group for OpenACC processing. It is located in 7466 'tree-ssa-loop.c' and is described by 'pass_ipa_oacc'. 7467 7468 * IPA points-to analysis 7469 7470 This is a tree-based points-to analysis pass. The idea behind this 7471 analyzer is to generate set constraints from the program, then 7472 solve the resulting constraints in order to generate the points-to 7473 sets. It is located in 'tree-ssa-structalias.c' and is described 7474 by 'pass_ipa_pta'. 7475 7476 * IPA OpenACC kernels 7477 7478 This is a pass group for processing OpenACC kernels regions. It is 7479 a subpass of the IPA OpenACC pass group that runs on offloaded 7480 functions containing OpenACC kernels loops. It is located in 7481 'tree-ssa-loop.c' and is described by 'pass_ipa_oacc_kernels'. 7482 7483 * Target clone 7484 7485 This is a pass for parsing functions with multiple target 7486 attributes. It is located in 'multiple_target.c' and is described 7487 by 'pass_target_clone'. 7488 7489 * IPA auto profile 7490 7491 This pass uses AutoFDO profiling data to annotate the control flow 7492 graph. It is located in 'auto-profile.c' and is described by 7493 'pass_ipa_auto_profile'. 7494 7495 * IPA tree profile 7496 7497 This pass does profiling for all functions in the call graph. It 7498 calculates branch probabilities and basic block execution counts. 7499 It is located in 'tree-profile.c' and is described by 7500 'pass_ipa_tree_profile'. 7501 7502 * IPA free function summary 7503 7504 This pass is a small IPA pass when argument 'small_p' is true. It 7505 releases inline function summaries and call summaries. It is 7506 located in 'ipa-fnsummary.c' and is described by 7507 'pass_ipa_free_free_fn_summary'. 7508 7509 * IPA increase alignment 7510 7511 This pass increases the alignment of global arrays to improve 7512 vectorization. It is located in 'tree-vectorizer.c' and is 7513 described by 'pass_ipa_increase_alignment'. 7514 7515 * IPA transactional memory 7516 7517 This pass is for transactional memory support. It is located in 7518 'trans-mem.c' and is described by 'pass_ipa_tm'. 7519 7520 * IPA lower emulated TLS 7521 7522 This pass lowers thread-local storage (TLS) operations to emulation 7523 functions provided by libgcc. It is located in 'tree-emutls.c' and 7524 is described by 'pass_ipa_lower_emutls'. 7525 7526 7527File: gccint.info, Node: Regular IPA passes, Next: Late IPA passes, Prev: Small IPA passes, Up: IPA passes 7528 75299.4.2 Regular IPA passes 7530------------------------ 7531 7532A regular IPA pass is a pass derived from 'ipa_opt_pass_d' that is 7533executed in WHOPR compilation. Regular IPA passes may have summary 7534hooks implemented in any of the LGEN, WPA or LTRANS stages (*note 7535IPA::). 7536 7537 * IPA whole program visibility 7538 7539 This pass performs various optimizations involving symbol 7540 visibility with '-fwhole-program', including symbol privatization, 7541 discovering local functions, and dismantling comdat groups. It is 7542 located in 'ipa-visibility.c' and is described by 7543 'pass_ipa_whole_program_visibility'. 7544 7545 * IPA profile 7546 7547 The IPA profile pass propagates profiling frequencies across the 7548 call graph. It is located in 'ipa-profile.c' and is described by 7549 'pass_ipa_profile'. 7550 7551 * IPA identical code folding 7552 7553 This is the inter-procedural identical code folding pass. The goal 7554 of this transformation is to discover functions and read-only 7555 variables that have exactly the same semantics. It is located in 7556 'ipa-icf.c' and is described by 'pass_ipa_icf'. 7557 7558 * IPA devirtualization 7559 7560 This pass performs speculative devirtualization based on the type 7561 inheritance graph. When a polymorphic call has only one likely 7562 target in the unit, it is turned into a speculative call. It is 7563 located in 'ipa-devirt.c' and is described by 'pass_ipa_devirt'. 7564 7565 * IPA constant propagation 7566 7567 The goal of this pass is to discover functions that are always 7568 invoked with some arguments with the same known constant values and 7569 to modify the functions accordingly. It can also do partial 7570 specialization and type-based devirtualization. It is located in 7571 'ipa-cp.c' and is described by 'pass_ipa_cp'. 7572 7573 * IPA scalar replacement of aggregates 7574 7575 This pass can replace an aggregate parameter with a set of other 7576 parameters representing part of the original, turning those passed 7577 by reference into new ones which pass the value directly. It also 7578 removes unused function return values and unused function 7579 parameters. This pass is located in 'ipa-sra.c' and is described 7580 by 'pass_ipa_sra'. 7581 7582 * IPA constructor/destructor merge 7583 7584 This pass merges multiple constructors and destructors for static 7585 objects into single functions. It's only run at LTO time unless 7586 the target doesn't support constructors and destructors natively. 7587 The pass is located in 'ipa.c' and is described by 7588 'pass_ipa_cdtor_merge'. 7589 7590 * IPA HSA 7591 7592 This pass is part of the GCC support for HSA (Heterogeneous System 7593 Architecture) accelerators. It is responsible for creation of HSA 7594 clones and emitting HSAIL instructions for them. It is located in 7595 'ipa-hsa.c' and is described by 'pass_ipa_hsa'. 7596 7597 * IPA function summary 7598 7599 This pass provides function analysis for inter-procedural passes. 7600 It collects estimates of function body size, execution time, and 7601 frame size for each function. It also estimates information about 7602 function calls: call statement size, time and how often the 7603 parameters change for each call. It is located in 7604 'ipa-fnsummary.c' and is described by 'pass_ipa_fn_summary'. 7605 7606 * IPA inline 7607 7608 The IPA inline pass handles function inlining with whole-program 7609 knowledge. Small functions that are candidates for inlining are 7610 ordered in increasing badness, bounded by unit growth parameters. 7611 Unreachable functions are removed from the call graph. Functions 7612 called once and not exported from the unit are inlined. This pass 7613 is located in 'ipa-inline.c' and is described by 'pass_ipa_inline'. 7614 7615 * IPA pure/const analysis 7616 7617 This pass marks functions as being either const ('TREE_READONLY') 7618 or pure ('DECL_PURE_P'). The per-function information is produced 7619 by 'pure_const_generate_summary', then the global information is 7620 computed by performing a transitive closure over the call graph. 7621 It is located in 'ipa-pure-const.c' and is described by 7622 'pass_ipa_pure_const'. 7623 7624 * IPA free function summary 7625 7626 This pass is a regular IPA pass when argument 'small_p' is false. 7627 It releases inline function summaries and call summaries. It is 7628 located in 'ipa-fnsummary.c' and is described by 7629 'pass_ipa_free_fn_summary'. 7630 7631 * IPA reference 7632 7633 This pass gathers information about how variables whose scope is 7634 confined to the compilation unit are used. It is located in 7635 'ipa-reference.c' and is described by 'pass_ipa_reference'. 7636 7637 * IPA single use 7638 7639 This pass checks whether variables are used by a single function. 7640 It is located in 'ipa.c' and is described by 'pass_ipa_single_use'. 7641 7642 * IPA comdats 7643 7644 This pass looks for static symbols that are used exclusively within 7645 one comdat group, and moves them into that comdat group. It is 7646 located in 'ipa-comdats.c' and is described by 'pass_ipa_comdats'. 7647 7648 7649File: gccint.info, Node: Late IPA passes, Prev: Regular IPA passes, Up: IPA passes 7650 76519.4.3 Late IPA passes 7652--------------------- 7653 7654Late IPA passes are simple IPA passes executed after the regular passes. 7655In WHOPR mode the passes are executed after partitioning and thus see 7656just parts of the compiled unit. 7657 7658 * Materialize all clones 7659 7660 Once all functions from compilation unit are in memory, produce all 7661 clones and update all calls. It is located in 'ipa.c' and is 7662 described by 'pass_materialize_all_clones'. 7663 7664 * IPA points-to analysis 7665 7666 Points-to analysis; this is the same as the points-to-analysis pass 7667 run with the small IPA passes (*note Small IPA passes::). 7668 7669 * OpenMP simd clone 7670 7671 This is the OpenMP constructs' SIMD clone pass. It creates the 7672 appropriate SIMD clones for functions tagged as elemental SIMD 7673 functions. It is located in 'omp-simd-clone.c' and is described by 7674 'pass_omp_simd_clone'. 7675 7676 7677File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: IPA passes, Up: Passes 7678 76799.5 Tree SSA passes 7680=================== 7681 7682The following briefly describes the Tree optimization passes that are 7683run after gimplification and what source files they are located in. 7684 7685 * Remove useless statements 7686 7687 This pass is an extremely simple sweep across the gimple code in 7688 which we identify obviously dead code and remove it. Here we do 7689 things like simplify 'if' statements with constant conditions, 7690 remove exception handling constructs surrounding code that 7691 obviously cannot throw, remove lexical bindings that contain no 7692 variables, and other assorted simplistic cleanups. The idea is to 7693 get rid of the obvious stuff quickly rather than wait until later 7694 when it's more work to get rid of it. This pass is located in 7695 'tree-cfg.c' and described by 'pass_remove_useless_stmts'. 7696 7697 * OpenMP lowering 7698 7699 If OpenMP generation ('-fopenmp') is enabled, this pass lowers 7700 OpenMP constructs into GIMPLE. 7701 7702 Lowering of OpenMP constructs involves creating replacement 7703 expressions for local variables that have been mapped using data 7704 sharing clauses, exposing the control flow of most synchronization 7705 directives and adding region markers to facilitate the creation of 7706 the control flow graph. The pass is located in 'omp-low.c' and is 7707 described by 'pass_lower_omp'. 7708 7709 * OpenMP expansion 7710 7711 If OpenMP generation ('-fopenmp') is enabled, this pass expands 7712 parallel regions into their own functions to be invoked by the 7713 thread library. The pass is located in 'omp-low.c' and is 7714 described by 'pass_expand_omp'. 7715 7716 * Lower control flow 7717 7718 This pass flattens 'if' statements ('COND_EXPR') and moves lexical 7719 bindings ('BIND_EXPR') out of line. After this pass, all 'if' 7720 statements will have exactly two 'goto' statements in its 'then' 7721 and 'else' arms. Lexical binding information for each statement 7722 will be found in 'TREE_BLOCK' rather than being inferred from its 7723 position under a 'BIND_EXPR'. This pass is found in 'gimple-low.c' 7724 and is described by 'pass_lower_cf'. 7725 7726 * Lower exception handling control flow 7727 7728 This pass decomposes high-level exception handling constructs 7729 ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that 7730 explicitly represents the control flow involved. After this pass, 7731 'lookup_stmt_eh_region' will return a non-negative number for any 7732 statement that may have EH control flow semantics; examine 7733 'tree_can_throw_internal' or 'tree_can_throw_external' for exact 7734 semantics. Exact control flow may be extracted from 7735 'foreach_reachable_handler'. The EH region nesting tree is defined 7736 in 'except.h' and built in 'except.c'. The lowering pass itself is 7737 in 'tree-eh.c' and is described by 'pass_lower_eh'. 7738 7739 * Build the control flow graph 7740 7741 This pass decomposes a function into basic blocks and creates all 7742 of the edges that connect them. It is located in 'tree-cfg.c' and 7743 is described by 'pass_build_cfg'. 7744 7745 * Find all referenced variables 7746 7747 This pass walks the entire function and collects an array of all 7748 variables referenced in the function, 'referenced_vars'. The index 7749 at which a variable is found in the array is used as a UID for the 7750 variable within this function. This data is needed by the SSA 7751 rewriting routines. The pass is located in 'tree-dfa.c' and is 7752 described by 'pass_referenced_vars'. 7753 7754 * Enter static single assignment form 7755 7756 This pass rewrites the function such that it is in SSA form. After 7757 this pass, all 'is_gimple_reg' variables will be referenced by 7758 'SSA_NAME', and all occurrences of other variables will be 7759 annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been 7760 inserted as necessary for each basic block. This pass is located 7761 in 'tree-ssa.c' and is described by 'pass_build_ssa'. 7762 7763 * Warn for uninitialized variables 7764 7765 This pass scans the function for uses of 'SSA_NAME's that are fed 7766 by default definition. For non-parameter variables, such uses are 7767 uninitialized. The pass is run twice, before and after 7768 optimization (if turned on). In the first pass we only warn for 7769 uses that are positively uninitialized; in the second pass we warn 7770 for uses that are possibly uninitialized. The pass is located in 7771 'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and 7772 'pass_late_warn_uninitialized'. 7773 7774 * Dead code elimination 7775 7776 This pass scans the function for statements without side effects 7777 whose result is unused. It does not do memory life analysis, so 7778 any value that is stored in memory is considered used. The pass is 7779 run multiple times throughout the optimization process. It is 7780 located in 'tree-ssa-dce.c' and is described by 'pass_dce'. 7781 7782 * Dominator optimizations 7783 7784 This pass performs trivial dominator-based copy and constant 7785 propagation, expression simplification, and jump threading. It is 7786 run multiple times throughout the optimization process. It is 7787 located in 'tree-ssa-dom.c' and is described by 'pass_dominator'. 7788 7789 * Forward propagation of single-use variables 7790 7791 This pass attempts to remove redundant computation by substituting 7792 variables that are used once into the expression that uses them and 7793 seeing if the result can be simplified. It is located in 7794 'tree-ssa-forwprop.c' and is described by 'pass_forwprop'. 7795 7796 * Copy Renaming 7797 7798 This pass attempts to change the name of compiler temporaries 7799 involved in copy operations such that SSA->normal can coalesce the 7800 copy away. When compiler temporaries are copies of user variables, 7801 it also renames the compiler temporary to the user variable 7802 resulting in better use of user symbols. It is located in 7803 'tree-ssa-copyrename.c' and is described by 'pass_copyrename'. 7804 7805 * PHI node optimizations 7806 7807 This pass recognizes forms of PHI inputs that can be represented as 7808 conditional expressions and rewrites them into straight line code. 7809 It is located in 'tree-ssa-phiopt.c' and is described by 7810 'pass_phiopt'. 7811 7812 * May-alias optimization 7813 7814 This pass performs a flow sensitive SSA-based points-to analysis. 7815 The resulting may-alias, must-alias, and escape analysis 7816 information is used to promote variables from in-memory addressable 7817 objects to non-aliased variables that can be renamed into SSA form. 7818 We also update the 'VDEF'/'VUSE' memory tags for non-renameable 7819 aggregates so that we get fewer false kills. The pass is located 7820 in 'tree-ssa-alias.c' and is described by 'pass_may_alias'. 7821 7822 Interprocedural points-to information is located in 7823 'tree-ssa-structalias.c' and described by 'pass_ipa_pta'. 7824 7825 * Profiling 7826 7827 This pass instruments the function in order to collect runtime 7828 block and value profiling data. Such data may be fed back into the 7829 compiler on a subsequent run so as to allow optimization based on 7830 expected execution frequencies. The pass is located in 7831 'tree-profile.c' and is described by 'pass_ipa_tree_profile'. 7832 7833 * Static profile estimation 7834 7835 This pass implements series of heuristics to guess propababilities 7836 of branches. The resulting predictions are turned into edge 7837 profile by propagating branches across the control flow graphs. 7838 The pass is located in 'tree-profile.c' and is described by 7839 'pass_profile'. 7840 7841 * Lower complex arithmetic 7842 7843 This pass rewrites complex arithmetic operations into their 7844 component scalar arithmetic operations. The pass is located in 7845 'tree-complex.c' and is described by 'pass_lower_complex'. 7846 7847 * Scalar replacement of aggregates 7848 7849 This pass rewrites suitable non-aliased local aggregate variables 7850 into a set of scalar variables. The resulting scalar variables are 7851 rewritten into SSA form, which allows subsequent optimization 7852 passes to do a significantly better job with them. The pass is 7853 located in 'tree-sra.c' and is described by 'pass_sra'. 7854 7855 * Dead store elimination 7856 7857 This pass eliminates stores to memory that are subsequently 7858 overwritten by another store, without any intervening loads. The 7859 pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'. 7860 7861 * Tail recursion elimination 7862 7863 This pass transforms tail recursion into a loop. It is located in 7864 'tree-tailcall.c' and is described by 'pass_tail_recursion'. 7865 7866 * Forward store motion 7867 7868 This pass sinks stores and assignments down the flowgraph closer to 7869 their use point. The pass is located in 'tree-ssa-sink.c' and is 7870 described by 'pass_sink_code'. 7871 7872 * Partial redundancy elimination 7873 7874 This pass eliminates partially redundant computations, as well as 7875 performing load motion. The pass is located in 'tree-ssa-pre.c' 7876 and is described by 'pass_pre'. 7877 7878 Just before partial redundancy elimination, if 7879 '-funsafe-math-optimizations' is on, GCC tries to convert divisions 7880 to multiplications by the reciprocal. The pass is located in 7881 'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'. 7882 7883 * Full redundancy elimination 7884 7885 This is a simpler form of PRE that only eliminates redundancies 7886 that occur on all paths. It is located in 'tree-ssa-pre.c' and 7887 described by 'pass_fre'. 7888 7889 * Loop optimization 7890 7891 The main driver of the pass is placed in 'tree-ssa-loop.c' and 7892 described by 'pass_loop'. 7893 7894 The optimizations performed by this pass are: 7895 7896 Loop invariant motion. This pass moves only invariants that would 7897 be hard to handle on RTL level (function calls, operations that 7898 expand to nontrivial sequences of insns). With '-funswitch-loops' 7899 it also moves operands of conditions that are invariant out of the 7900 loop, so that we can use just trivial invariantness analysis in 7901 loop unswitching. The pass also includes store motion. The pass 7902 is implemented in 'tree-ssa-loop-im.c'. 7903 7904 Canonical induction variable creation. This pass creates a simple 7905 counter for number of iterations of the loop and replaces the exit 7906 condition of the loop using it, in case when a complicated analysis 7907 is necessary to determine the number of iterations. Later 7908 optimizations then may determine the number easily. The pass is 7909 implemented in 'tree-ssa-loop-ivcanon.c'. 7910 7911 Induction variable optimizations. This pass performs standard 7912 induction variable optimizations, including strength reduction, 7913 induction variable merging and induction variable elimination. The 7914 pass is implemented in 'tree-ssa-loop-ivopts.c'. 7915 7916 Loop unswitching. This pass moves the conditional jumps that are 7917 invariant out of the loops. To achieve this, a duplicate of the 7918 loop is created for each possible outcome of conditional jump(s). 7919 The pass is implemented in 'tree-ssa-loop-unswitch.c'. 7920 7921 Loop splitting. If a loop contains a conditional statement that is 7922 always true for one part of the iteration space and false for the 7923 other this pass splits the loop into two, one dealing with one side 7924 the other only with the other, thereby removing one inner-loop 7925 conditional. The pass is implemented in 'tree-ssa-loop-split.c'. 7926 7927 The optimizations also use various utility functions contained in 7928 'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and 7929 'cfgloopmanip.c'. 7930 7931 Vectorization. This pass transforms loops to operate on vector 7932 types instead of scalar types. Data parallelism across loop 7933 iterations is exploited to group data elements from consecutive 7934 iterations into a vector and operate on them in parallel. 7935 Depending on available target support the loop is conceptually 7936 unrolled by a factor 'VF' (vectorization factor), which is the 7937 number of elements operated upon in parallel in each iteration, and 7938 the 'VF' copies of each scalar operation are fused to form a vector 7939 operation. Additional loop transformations such as peeling and 7940 versioning may take place to align the number of iterations, and to 7941 align the memory accesses in the loop. The pass is implemented in 7942 'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and 7943 'tree-vect-loop-manip.c' (loop specific parts and general loop 7944 utilities), 'tree-vect-slp' (loop-aware SLP functionality), 7945 'tree-vect-stmts.c' and 'tree-vect-data-refs.c'. Analysis of data 7946 references is in 'tree-data-ref.c'. 7947 7948 SLP Vectorization. This pass performs vectorization of 7949 straight-line code. The pass is implemented in 'tree-vectorizer.c' 7950 (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and 7951 'tree-vect-data-refs.c'. 7952 7953 Autoparallelization. This pass splits the loop iteration space to 7954 run into several threads. The pass is implemented in 7955 'tree-parloops.c'. 7956 7957 Graphite is a loop transformation framework based on the polyhedral 7958 model. Graphite stands for Gimple Represented as Polyhedra. The 7959 internals of this infrastructure are documented in 7960 <http://gcc.gnu.org/wiki/Graphite>. The passes working on this 7961 representation are implemented in the various 'graphite-*' files. 7962 7963 * Tree level if-conversion for vectorizer 7964 7965 This pass applies if-conversion to simple loops to help vectorizer. 7966 We identify if convertible loops, if-convert statements and merge 7967 basic blocks in one big block. The idea is to present loop in such 7968 form so that vectorizer can have one to one mapping between 7969 statements and available vector operations. This pass is located 7970 in 'tree-if-conv.c' and is described by 'pass_if_conversion'. 7971 7972 * Conditional constant propagation 7973 7974 This pass relaxes a lattice of values in order to identify those 7975 that must be constant even in the presence of conditional branches. 7976 The pass is located in 'tree-ssa-ccp.c' and is described by 7977 'pass_ccp'. 7978 7979 A related pass that works on memory loads and stores, and not just 7980 register values, is located in 'tree-ssa-ccp.c' and described by 7981 'pass_store_ccp'. 7982 7983 * Conditional copy propagation 7984 7985 This is similar to constant propagation but the lattice of values 7986 is the "copy-of" relation. It eliminates redundant copies from the 7987 code. The pass is located in 'tree-ssa-copy.c' and described by 7988 'pass_copy_prop'. 7989 7990 A related pass that works on memory copies, and not just register 7991 copies, is located in 'tree-ssa-copy.c' and described by 7992 'pass_store_copy_prop'. 7993 7994 * Value range propagation 7995 7996 This transformation is similar to constant propagation but instead 7997 of propagating single constant values, it propagates known value 7998 ranges. The implementation is based on Patterson's range 7999 propagation algorithm (Accurate Static Branch Prediction by Value 8000 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 8001 Patterson's algorithm, this implementation does not propagate 8002 branch probabilities nor it uses more than a single range per SSA 8003 name. This means that the current implementation cannot be used 8004 for branch prediction (though adapting it would not be difficult). 8005 The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'. 8006 8007 * Folding built-in functions 8008 8009 This pass simplifies built-in functions, as applicable, with 8010 constant arguments or with inferable string lengths. It is located 8011 in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'. 8012 8013 * Split critical edges 8014 8015 This pass identifies critical edges and inserts empty basic blocks 8016 such that the edge is no longer critical. The pass is located in 8017 'tree-cfg.c' and is described by 'pass_split_crit_edges'. 8018 8019 * Control dependence dead code elimination 8020 8021 This pass is a stronger form of dead code elimination that can 8022 eliminate unnecessary control flow statements. It is located in 8023 'tree-ssa-dce.c' and is described by 'pass_cd_dce'. 8024 8025 * Tail call elimination 8026 8027 This pass identifies function calls that may be rewritten into 8028 jumps. No code transformation is actually applied here, but the 8029 data and control flow problem is solved. The code transformation 8030 requires target support, and so is delayed until RTL. In the 8031 meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility. 8032 The pass is located in 'tree-tailcall.c' and is described by 8033 'pass_tail_calls'. The RTL transformation is handled by 8034 'fixup_tail_calls' in 'calls.c'. 8035 8036 * Warn for function return without value 8037 8038 For non-void functions, this pass locates return statements that do 8039 not specify a value and issues a warning. Such a statement may 8040 have been injected by falling off the end of the function. This 8041 pass is run last so that we have as much time as possible to prove 8042 that the statement is not reachable. It is located in 'tree-cfg.c' 8043 and is described by 'pass_warn_function_return'. 8044 8045 * Leave static single assignment form 8046 8047 This pass rewrites the function such that it is in normal form. At 8048 the same time, we eliminate as many single-use temporaries as 8049 possible, so the intermediate language is no longer GIMPLE, but 8050 GENERIC. The pass is located in 'tree-outof-ssa.c' and is 8051 described by 'pass_del_ssa'. 8052 8053 * Merge PHI nodes that feed into one another 8054 8055 This is part of the CFG cleanup passes. It attempts to join PHI 8056 nodes from a forwarder CFG block into another block with PHI nodes. 8057 The pass is located in 'tree-cfgcleanup.c' and is described by 8058 'pass_merge_phi'. 8059 8060 * Return value optimization 8061 8062 If a function always returns the same local variable, and that 8063 local variable is an aggregate type, then the variable is replaced 8064 with the return value for the function (i.e., the function's 8065 DECL_RESULT). This is equivalent to the C++ named return value 8066 optimization applied to GIMPLE. The pass is located in 8067 'tree-nrv.c' and is described by 'pass_nrv'. 8068 8069 * Return slot optimization 8070 8071 If a function returns a memory object and is called as 'var = 8072 foo()', this pass tries to change the call so that the address of 8073 'var' is sent to the caller to avoid an extra memory copy. This 8074 pass is located in 'tree-nrv.c' and is described by 8075 'pass_return_slot'. 8076 8077 * Optimize calls to '__builtin_object_size' 8078 8079 This is a propagation pass similar to CCP that tries to remove 8080 calls to '__builtin_object_size' when the size of the object can be 8081 computed at compile-time. This pass is located in 8082 'tree-object-size.c' and is described by 'pass_object_sizes'. 8083 8084 * Loop invariant motion 8085 8086 This pass removes expensive loop-invariant computations out of 8087 loops. The pass is located in 'tree-ssa-loop.c' and described by 8088 'pass_lim'. 8089 8090 * Loop nest optimizations 8091 8092 This is a family of loop transformations that works on loop nests. 8093 It includes loop interchange, scaling, skewing and reversal and 8094 they are all geared to the optimization of data locality in array 8095 traversals and the removal of dependencies that hamper 8096 optimizations such as loop parallelization and vectorization. The 8097 pass is located in 'tree-loop-linear.c' and described by 8098 'pass_linear_transform'. 8099 8100 * Removal of empty loops 8101 8102 This pass removes loops with no code in them. The pass is located 8103 in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'. 8104 8105 * Unrolling of small loops 8106 8107 This pass completely unrolls loops with few iterations. The pass 8108 is located in 'tree-ssa-loop-ivcanon.c' and described by 8109 'pass_complete_unroll'. 8110 8111 * Predictive commoning 8112 8113 This pass makes the code reuse the computations from the previous 8114 iterations of the loops, especially loads and stores to memory. It 8115 does so by storing the values of these computations to a bank of 8116 temporary variables that are rotated at the end of loop. To avoid 8117 the need for this rotation, the loop is then unrolled and the 8118 copies of the loop body are rewritten to use the appropriate 8119 version of the temporary variable. This pass is located in 8120 'tree-predcom.c' and described by 'pass_predcom'. 8121 8122 * Array prefetching 8123 8124 This pass issues prefetch instructions for array references inside 8125 loops. The pass is located in 'tree-ssa-loop-prefetch.c' and 8126 described by 'pass_loop_prefetch'. 8127 8128 * Reassociation 8129 8130 This pass rewrites arithmetic expressions to enable optimizations 8131 that operate on them, like redundancy elimination and 8132 vectorization. The pass is located in 'tree-ssa-reassoc.c' and 8133 described by 'pass_reassoc'. 8134 8135 * Optimization of 'stdarg' functions 8136 8137 This pass tries to avoid the saving of register arguments into the 8138 stack on entry to 'stdarg' functions. If the function doesn't use 8139 any 'va_start' macros, no registers need to be saved. If 8140 'va_start' macros are used, the 'va_list' variables don't escape 8141 the function, it is only necessary to save registers that will be 8142 used in 'va_arg' macros. For instance, if 'va_arg' is only used 8143 with integral types in the function, floating point registers don't 8144 need to be saved. This pass is located in 'tree-stdarg.c' and 8145 described by 'pass_stdarg'. 8146 8147 8148File: gccint.info, Node: RTL passes, Next: Optimization info, Prev: Tree SSA passes, Up: Passes 8149 81509.6 RTL passes 8151============== 8152 8153The following briefly describes the RTL generation and optimization 8154passes that are run after the Tree optimization passes. 8155 8156 * RTL generation 8157 8158 The source files for RTL generation include 'stmt.c', 'calls.c', 8159 'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and 8160 'emit-rtl.c'. Also, the file 'insn-emit.c', generated from the 8161 machine description by the program 'genemit', is used in this pass. 8162 The header file 'expr.h' is used for communication within this 8163 pass. 8164 8165 The header files 'insn-flags.h' and 'insn-codes.h', generated from 8166 the machine description by the programs 'genflags' and 'gencodes', 8167 tell this pass which standard names are available for use and which 8168 patterns correspond to them. 8169 8170 * Generation of exception landing pads 8171 8172 This pass generates the glue that handles communication between the 8173 exception handling library routines and the exception handlers 8174 within the function. Entry points in the function that are invoked 8175 by the exception handling library are called "landing pads". The 8176 code for this pass is located in 'except.c'. 8177 8178 * Control flow graph cleanup 8179 8180 This pass removes unreachable code, simplifies jumps to next, jumps 8181 to jump, jumps across jumps, etc. The pass is run multiple times. 8182 For historical reasons, it is occasionally referred to as the "jump 8183 optimization pass". The bulk of the code for this pass is in 8184 'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and 8185 'jump.c'. 8186 8187 * Forward propagation of single-def values 8188 8189 This pass attempts to remove redundant computation by substituting 8190 variables that come from a single definition, and seeing if the 8191 result can be simplified. It performs copy propagation and 8192 addressing mode selection. The pass is run twice, with values 8193 being propagated into loops only on the second run. The code is 8194 located in 'fwprop.c'. 8195 8196 * Common subexpression elimination 8197 8198 This pass removes redundant computation within basic blocks, and 8199 optimizes addressing modes based on cost. The pass is run twice. 8200 The code for this pass is located in 'cse.c'. 8201 8202 * Global common subexpression elimination 8203 8204 This pass performs two different types of GCSE depending on whether 8205 you are optimizing for size or not (LCM based GCSE tends to 8206 increase code size for a gain in speed, while Morel-Renvoise based 8207 GCSE does not). When optimizing for size, GCSE is done using 8208 Morel-Renvoise Partial Redundancy Elimination, with the exception 8209 that it does not try to move invariants out of loops--that is left 8210 to the loop optimization pass. If MR PRE GCSE is done, code 8211 hoisting (aka unification) is also done, as well as load motion. 8212 If you are optimizing for speed, LCM (lazy code motion) based GCSE 8213 is done. LCM is based on the work of Knoop, Ruthing, and Steffen. 8214 LCM based GCSE also does loop invariant code motion. We also 8215 perform load and store motion when optimizing for speed. 8216 Regardless of which type of GCSE is used, the GCSE pass also 8217 performs global constant and copy propagation. The source file for 8218 this pass is 'gcse.c', and the LCM routines are in 'lcm.c'. 8219 8220 * Loop optimization 8221 8222 This pass performs several loop related optimizations. The source 8223 files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop 8224 analysis and manipulation code. Initialization and finalization of 8225 loop structures is handled by 'loop-init.c'. A loop invariant 8226 motion pass is implemented in 'loop-invariant.c'. Basic block 8227 level optimizations--unrolling, and peeling loops-- are implemented 8228 in 'loop-unroll.c'. Replacing of the exit condition of loops by 8229 special machine-dependent instructions is handled by 8230 'loop-doloop.c'. 8231 8232 * Jump bypassing 8233 8234 This pass is an aggressive form of GCSE that transforms the control 8235 flow graph of a function by propagating constants into conditional 8236 branch instructions. The source file for this pass is 'gcse.c'. 8237 8238 * If conversion 8239 8240 This pass attempts to replace conditional branches and surrounding 8241 assignments with arithmetic, boolean value producing comparison 8242 instructions, and conditional move instructions. In the very last 8243 invocation after reload/LRA, it will generate predicated 8244 instructions when supported by the target. The code is located in 8245 'ifcvt.c'. 8246 8247 * Web construction 8248 8249 This pass splits independent uses of each pseudo-register. This 8250 can improve effect of the other transformation, such as CSE or 8251 register allocation. The code for this pass is located in 'web.c'. 8252 8253 * Instruction combination 8254 8255 This pass attempts to combine groups of two or three instructions 8256 that are related by data flow into single instructions. It 8257 combines the RTL expressions for the instructions by substitution, 8258 simplifies the result using algebra, and then attempts to match the 8259 result against the machine description. The code is located in 8260 'combine.c'. 8261 8262 * Mode switching optimization 8263 8264 This pass looks for instructions that require the processor to be 8265 in a specific "mode" and minimizes the number of mode changes 8266 required to satisfy all users. What these modes are, and what they 8267 apply to are completely target-specific. The code for this pass is 8268 located in 'mode-switching.c'. 8269 8270 * Modulo scheduling 8271 8272 This pass looks at innermost loops and reorders their instructions 8273 by overlapping different iterations. Modulo scheduling is 8274 performed immediately before instruction scheduling. The code for 8275 this pass is located in 'modulo-sched.c'. 8276 8277 * Instruction scheduling 8278 8279 This pass looks for instructions whose output will not be available 8280 by the time that it is used in subsequent instructions. Memory 8281 loads and floating point instructions often have this behavior on 8282 RISC machines. It re-orders instructions within a basic block to 8283 try to separate the definition and use of items that otherwise 8284 would cause pipeline stalls. This pass is performed twice, before 8285 and after register allocation. The code for this pass is located 8286 in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c' 8287 and 'sched-vis.c'. 8288 8289 * Register allocation 8290 8291 These passes make sure that all occurrences of pseudo registers are 8292 eliminated, either by allocating them to a hard register, replacing 8293 them by an equivalent expression (e.g. a constant) or by placing 8294 them on the stack. This is done in several subpasses: 8295 8296 * The integrated register allocator (IRA). It is called 8297 integrated because coalescing, register live range splitting, 8298 and hard register preferencing are done on-the-fly during 8299 coloring. It also has better integration with the reload/LRA 8300 pass. Pseudo-registers spilled by the allocator or the 8301 reload/LRA have still a chance to get hard-registers if the 8302 reload/LRA evicts some pseudo-registers from hard-registers. 8303 The allocator helps to choose better pseudos for spilling 8304 based on their live ranges and to coalesce stack slots 8305 allocated for the spilled pseudo-registers. IRA is a regional 8306 register allocator which is transformed into Chaitin-Briggs 8307 allocator if there is one region. By default, IRA chooses 8308 regions using register pressure but the user can force it to 8309 use one region or regions corresponding to all loops. 8310 8311 Source files of the allocator are 'ira.c', 'ira-build.c', 8312 'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c', 8313 'ira-lives', plus header files 'ira.h' and 'ira-int.h' used 8314 for the communication between the allocator and the rest of 8315 the compiler and between the IRA files. 8316 8317 * Reloading. This pass renumbers pseudo registers with the 8318 hardware registers numbers they were allocated. Pseudo 8319 registers that did not get hard registers are replaced with 8320 stack slots. Then it finds instructions that are invalid 8321 because a value has failed to end up in a register, or has 8322 ended up in a register of the wrong kind. It fixes up these 8323 instructions by reloading the problematical values temporarily 8324 into registers. Additional instructions are generated to do 8325 the copying. 8326 8327 The reload pass also optionally eliminates the frame pointer 8328 and inserts instructions to save and restore call-clobbered 8329 registers around calls. 8330 8331 Source files are 'reload.c' and 'reload1.c', plus the header 8332 'reload.h' used for communication between them. 8333 8334 * This pass is a modern replacement of the reload pass. Source 8335 files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c', 8336 'lra-constraints.c', 'lra-eliminations.c', 'lra-lives.c', 8337 'lra-remat.c', 'lra-spills.c', the header 'lra-int.h' used for 8338 communication between them, and the header 'lra.h' used for 8339 communication between LRA and the rest of compiler. 8340 8341 Unlike the reload pass, intermediate LRA decisions are 8342 reflected in RTL as much as possible. This reduces the number 8343 of target-dependent macros and hooks, leaving instruction 8344 constraints as the primary source of control. 8345 8346 LRA is run on targets for which TARGET_LRA_P returns true. 8347 8348 * Basic block reordering 8349 8350 This pass implements profile guided code positioning. If profile 8351 information is not available, various types of static analysis are 8352 performed to make the predictions normally coming from the profile 8353 feedback (IE execution frequency, branch probability, etc). It is 8354 implemented in the file 'bb-reorder.c', and the various prediction 8355 routines are in 'predict.c'. 8356 8357 * Variable tracking 8358 8359 This pass computes where the variables are stored at each position 8360 in code and generates notes describing the variable locations to 8361 RTL code. The location lists are then generated according to these 8362 notes to debug information if the debugging information format 8363 supports location lists. The code is located in 'var-tracking.c'. 8364 8365 * Delayed branch scheduling 8366 8367 This optional pass attempts to find instructions that can go into 8368 the delay slots of other instructions, usually jumps and calls. 8369 The code for this pass is located in 'reorg.c'. 8370 8371 * Branch shortening 8372 8373 On many RISC machines, branch instructions have a limited range. 8374 Thus, longer sequences of instructions must be used for long 8375 branches. In this pass, the compiler figures out what how far each 8376 instruction will be from each other instruction, and therefore 8377 whether the usual instructions, or the longer sequences, must be 8378 used for each branch. The code for this pass is located in 8379 'final.c'. 8380 8381 * Register-to-stack conversion 8382 8383 Conversion from usage of some hard registers to usage of a register 8384 stack may be done at this point. Currently, this is supported only 8385 for the floating-point registers of the Intel 80387 coprocessor. 8386 The code for this pass is located in 'reg-stack.c'. 8387 8388 * Final 8389 8390 This pass outputs the assembler code for the function. The source 8391 files are 'final.c' plus 'insn-output.c'; the latter is generated 8392 automatically from the machine description by the tool 'genoutput'. 8393 The header file 'conditions.h' is used for communication between 8394 these files. 8395 8396 * Debugging information output 8397 8398 This is run after final because it must output the stack slot 8399 offsets for pseudo registers that did not get hard registers. 8400 Source files are 'dbxout.c' for DBX symbol table format, 8401 'dwarfout.c' for DWARF symbol table format, files 'dwarf2out.c' and 8402 'dwarf2asm.c' for DWARF2 symbol table format, and 'vmsdbgout.c' for 8403 VMS debug symbol table format. 8404 8405 8406File: gccint.info, Node: Optimization info, Prev: RTL passes, Up: Passes 8407 84089.7 Optimization info 8409===================== 8410 8411This section is describes dump infrastructure which is common to both 8412pass dumps as well as optimization dumps. The goal for this 8413infrastructure is to provide both gcc developers and users detailed 8414information about various compiler transformations and optimizations. 8415 8416* Menu: 8417 8418* Dump setup:: Setup of optimization dumps. 8419* Optimization groups:: Groups made up of optimization passes. 8420* Dump files and streams:: Dump output file names and streams. 8421* Dump output verbosity:: How much information to dump. 8422* Dump types:: Various types of dump functions. 8423* Dump examples:: Sample usage. 8424 8425 8426File: gccint.info, Node: Dump setup, Next: Optimization groups, Up: Optimization info 8427 84289.7.1 Dump setup 8429---------------- 8430 8431A dump_manager class is defined in 'dumpfile.h'. Various passes 8432register dumping pass-specific information via 'dump_register' in 8433'passes.c'. During the registration, an optimization pass can select 8434its optimization group (*note Optimization groups::). After that 8435optimization information corresponding to the entire group (presumably 8436from multiple passes) can be output via command-line switches. Note 8437that if a pass does not fit into any of the pre-defined groups, it can 8438select 'OPTGROUP_NONE'. 8439 8440 Note that in general, a pass need not know its dump output file name, 8441whether certain flags are enabled, etc. However, for legacy reasons, 8442passes could also call 'dump_begin' which returns a stream in case the 8443particular pass has optimization dumps enabled. A pass could call 8444'dump_end' when the dump has ended. These methods should go away once 8445all the passes are converted to use the new dump infrastructure. 8446 8447 The recommended way to setup the dump output is via 'dump_start' and 8448'dump_end'. 8449 8450 8451File: gccint.info, Node: Optimization groups, Next: Dump files and streams, Prev: Dump setup, Up: Optimization info 8452 84539.7.2 Optimization groups 8454------------------------- 8455 8456The optimization passes are grouped into several categories. Currently 8457defined categories in 'dumpfile.h' are 8458 8459'OPTGROUP_IPA' 8460 IPA optimization passes. Enabled by '-ipa' 8461 8462'OPTGROUP_LOOP' 8463 Loop optimization passes. Enabled by '-loop'. 8464 8465'OPTGROUP_INLINE' 8466 Inlining passes. Enabled by '-inline'. 8467 8468'OPTGROUP_OMP' 8469 OMP (Offloading and Multi Processing) passes. Enabled by '-omp'. 8470 8471'OPTGROUP_VEC' 8472 Vectorization passes. Enabled by '-vec'. 8473 8474'OPTGROUP_OTHER' 8475 All other optimization passes which do not fall into one of the 8476 above. 8477 8478'OPTGROUP_ALL' 8479 All optimization passes. Enabled by '-optall'. 8480 8481 By using groups a user could selectively enable optimization 8482information only for a group of passes. By default, the optimization 8483information for all the passes is dumped. 8484 8485 8486File: gccint.info, Node: Dump files and streams, Next: Dump output verbosity, Prev: Optimization groups, Up: Optimization info 8487 84889.7.3 Dump files and streams 8489---------------------------- 8490 8491There are two separate output streams available for outputting 8492optimization information from passes. Note that both these streams 8493accept 'stderr' and 'stdout' as valid streams and thus it is possible to 8494dump output to standard output or error. This is specially handy for 8495outputting all available information in a single file by redirecting 8496'stderr'. 8497 8498'pstream' 8499 This stream is for pass-specific dump output. For example, 8500 '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into 8501 the given file name 'foo.v'. If the file name is not provided, the 8502 default file name is based on the source file and pass number. 8503 Note that one could also use special file names 'stdout' and 8504 'stderr' for dumping to standard output and standard error 8505 respectively. 8506 8507'alt_stream' 8508 This steam is used for printing optimization specific output in 8509 response to the '-fopt-info'. Again a file name can be given. If 8510 the file name is not given, it defaults to 'stderr'. 8511 8512 8513File: gccint.info, Node: Dump output verbosity, Next: Dump types, Prev: Dump files and streams, Up: Optimization info 8514 85159.7.4 Dump output verbosity 8516--------------------------- 8517 8518The dump verbosity has the following options 8519 8520'optimized' 8521 Print information when an optimization is successfully applied. It 8522 is up to a pass to decide which information is relevant. For 8523 example, the vectorizer passes print the source location of loops 8524 which got successfully vectorized. 8525 8526'missed' 8527 Print information about missed optimizations. Individual passes 8528 control which information to include in the output. For example, 8529 8530 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 8531 8532 will print information about missed optimization opportunities from 8533 vectorization passes on stderr. 8534 8535'note' 8536 Print verbose information about optimizations, such as certain 8537 transformations, more detailed messages about decisions etc. 8538 8539'all' 8540 Print detailed optimization information. This includes OPTIMIZED, 8541 MISSED, and NOTE. 8542 8543 8544File: gccint.info, Node: Dump types, Next: Dump examples, Prev: Dump output verbosity, Up: Optimization info 8545 85469.7.5 Dump types 8547---------------- 8548 8549'dump_printf' 8550 8551 This is a generic method for doing formatted output. It takes an 8552 additional argument 'dump_kind' which signifies the type of dump. 8553 This method outputs information only when the dumps are enabled for 8554 this particular 'dump_kind'. Note that the caller doesn't need to 8555 know if the particular dump is enabled or not, or even the file 8556 name. The caller only needs to decide which dump output 8557 information is relevant, and under what conditions. This 8558 determines the associated flags. 8559 8560 Consider the following example from 'loop-unroll.c' where an 8561 informative message about a loop (along with its location) is 8562 printed when any of the following flags is enabled 8563 8564 - optimization messages 8565 - RTL dumps 8566 - detailed dumps 8567 8568 int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS; 8569 dump_printf_loc (report_flags, insn, 8570 "loop turned into non-loop; it never loops.\n"); 8571 8572'dump_basic_block' 8573 Output basic block. 8574'dump_generic_expr' 8575 Output generic expression. 8576'dump_gimple_stmt' 8577 Output gimple statement. 8578 8579 Note that the above methods also have variants prefixed with 8580 '_loc', such as 'dump_printf_loc', which are similar except they 8581 also output the source location information. The '_loc' variants 8582 take a 'const dump_location_t &'. This class can be constructed 8583 from a 'gimple *' or from a 'rtx_insn *', and so callers can pass a 8584 'gimple *' or a 'rtx_insn *' as the '_loc' argument. The 8585 'dump_location_t' constructor will extract the source location from 8586 the statement or instruction, along with the profile count, and the 8587 location in GCC's own source code (or the plugin) from which the 8588 dump call was emitted. Only the source location is currently used. 8589 There is also a 'dump_user_location_t' class, capturing the source 8590 location and profile count, but not the dump emission location, so 8591 that locations in the user's code can be passed around. This can 8592 also be constructed from a 'gimple *' and from a 'rtx_insn *', and 8593 it too can be passed as the '_loc' argument. 8594 8595 8596File: gccint.info, Node: Dump examples, Prev: Dump types, Up: Optimization info 8597 85989.7.6 Dump examples 8599------------------- 8600 8601 gcc -O3 -fopt-info-missed=missed.all 8602 8603 outputs missed optimization report from all the passes into 8604'missed.all'. 8605 8606 As another example, 8607 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 8608 8609 will output information about missed optimizations as well as optimized 8610locations from all the inlining passes into 'inline.txt'. 8611 8612 If the FILENAME is provided, then the dumps from all the applicable 8613optimizations are concatenated into the 'filename'. Otherwise the dump 8614is output onto 'stderr'. If OPTIONS is omitted, it defaults to 8615'optimized-optall', which means dump all information about successful 8616optimizations from all the passes. In the following example, the 8617optimization information is output on to 'stderr'. 8618 8619 gcc -O3 -fopt-info 8620 8621 Note that '-fopt-info-vec-missed' behaves the same as 8622'-fopt-info-missed-vec'. The order of the optimization group names and 8623message types listed after '-fopt-info' does not matter. 8624 8625 As another example, consider 8626 8627 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 8628 8629 Here the two output file names 'vec.miss' and 'loop.opt' are in 8630conflict since only one output file is allowed. In this case, only the 8631first option takes effect and the subsequent options are ignored. Thus 8632only the 'vec.miss' is produced which containts dumps from the 8633vectorizer about missed opportunities. 8634 8635 8636File: gccint.info, Node: poly_int, Next: GENERIC, Prev: Passes, Up: Top 8637 863810 Sizes and offsets as runtime invariants 8639****************************************** 8640 8641GCC allows the size of a hardware register to be a runtime invariant 8642rather than a compile-time constant. This in turn means that various 8643sizes and offsets must also be runtime invariants rather than 8644compile-time constants, such as: 8645 8646 * the size of a general 'machine_mode' (*note Machine Modes::); 8647 8648 * the size of a spill slot; 8649 8650 * the offset of something within a stack frame; 8651 8652 * the number of elements in a vector; 8653 8654 * the size and offset of a 'mem' rtx (*note Regs and Memory::); and 8655 8656 * the byte offset in a 'subreg' rtx (*note Regs and Memory::). 8657 8658 The motivating example is the Arm SVE ISA, whose vector registers can 8659be any multiple of 128 bits between 128 and 2048 inclusive. The 8660compiler normally produces code that works for all SVE register sizes, 8661with the actual size only being known at runtime. 8662 8663 GCC's main representation of such runtime invariants is the 'poly_int' 8664class. This chapter describes what 'poly_int' does, lists the available 8665operations, and gives some general usage guidelines. 8666 8667* Menu: 8668 8669* Overview of 'poly_int':: 8670* Consequences of using 'poly_int':: 8671* Comparisons involving 'poly_int':: 8672* Arithmetic on 'poly_int's:: 8673* Alignment of 'poly_int's:: 8674* Computing bounds on 'poly_int's:: 8675* Converting 'poly_int's:: 8676* Miscellaneous 'poly_int' routines:: 8677* Guidelines for using 'poly_int':: 8678 8679 8680File: gccint.info, Node: Overview of 'poly_int', Next: Consequences of using 'poly_int', Up: poly_int 8681 868210.1 Overview of 'poly_int' 8683=========================== 8684 8685We define indeterminates X1, ..., XN whose values are only known at 8686runtime and use polynomials of the form: 8687 8688 C0 + C1 * X1 + ... + CN * XN 8689 8690 to represent a size or offset whose value might depend on some of these 8691indeterminates. The coefficients C0, ..., CN are always known at 8692compile time, with the C0 term being the "constant" part that does not 8693depend on any runtime value. 8694 8695 GCC uses the 'poly_int' class to represent these coefficients. The 8696class has two template parameters: the first specifies the number of 8697coefficients (N + 1) and the second specifies the type of the 8698coefficients. For example, 'poly_int<2, unsigned short>' represents a 8699polynomial with two coefficients (and thus one indeterminate), with each 8700coefficient having type 'unsigned short'. When N is 0, the class 8701degenerates to a single compile-time constant C0. 8702 8703 The number of coefficients needed for compilation is a fixed property 8704of each target and is specified by the configuration macro 8705'NUM_POLY_INT_COEFFS'. The default value is 1, since most targets do 8706not have such runtime invariants. Targets that need a different value 8707should '#define' the macro in their 'CPU-modes.def' file. *Note Back 8708End::. 8709 8710 'poly_int' makes the simplifying requirement that each indeterminate 8711must be a nonnegative integer. An indeterminate value of 0 should 8712usually represent the minimum possible runtime value, with C0 specifying 8713the value in that case. 8714 8715 For example, when targetting the Arm SVE ISA, the single indeterminate 8716represents the number of 128-bit blocks in a vector _beyond the minimum 8717length of 128 bits_. Thus the number of 64-bit doublewords in a vector 8718is 2 + 2 * X1. If an aggregate has a single SVE vector and 16 8719additional bytes, its total size is 32 + 16 * X1 bytes. 8720 8721 The header file 'poly-int-types.h' provides typedefs for the most 8722common forms of 'poly_int', all having 'NUM_POLY_INT_COEFFS' 8723coefficients: 8724 8725'poly_uint16' 8726 a 'poly_int' with 'unsigned short' coefficients. 8727 8728'poly_int64' 8729 a 'poly_int' with 'HOST_WIDE_INT' coefficients. 8730 8731'poly_uint64' 8732 a 'poly_int' with 'unsigned HOST_WIDE_INT' coefficients. 8733 8734'poly_offset_int' 8735 a 'poly_int' with 'offset_int' coefficients. 8736 8737'poly_wide_int' 8738 a 'poly_int' with 'wide_int' coefficients. 8739 8740'poly_widest_int' 8741 a 'poly_int' with 'widest_int' coefficients. 8742 8743 Since the main purpose of 'poly_int' is to represent sizes and offsets, 8744the last two typedefs are only rarely used. 8745 8746 8747File: gccint.info, Node: Consequences of using 'poly_int', Next: Comparisons involving 'poly_int', Prev: Overview of 'poly_int', Up: poly_int 8748 874910.2 Consequences of using 'poly_int' 8750===================================== 8751 8752The two main consequences of using polynomial sizes and offsets are 8753that: 8754 8755 * there is no total ordering between the values at compile time, and 8756 8757 * some operations might yield results that cannot be expressed as a 8758 'poly_int'. 8759 8760 For example, if X is a runtime invariant, we cannot tell at compile 8761time whether: 8762 8763 3 + 4X <= 1 + 5X 8764 8765 since the condition is false when X <= 1 and true when X >= 2. 8766 8767 Similarly, 'poly_int' cannot represent the result of: 8768 8769 (3 + 4X) * (1 + 5X) 8770 8771 since it cannot (and in practice does not need to) store powers greater 8772than one. It also cannot represent the result of: 8773 8774 (3 + 4X) / (1 + 5X) 8775 8776 The following sections describe how we deal with these restrictions. 8777 8778 As described earlier, a 'poly_int<1, T>' has no indeterminates and so 8779degenerates to a compile-time constant of type T. It would be possible 8780in that case to do all normal arithmetic on the T, and to compare the T 8781using the normal C++ operators. We deliberately prevent 8782target-independent code from doing this, since the compiler needs to 8783support other 'poly_int<N, T>' as well, regardless of the current 8784target's 'NUM_POLY_INT_COEFFS'. 8785 8786 However, it would be very artificial to force target-specific code to 8787follow these restrictions if the target has no runtime indeterminates. 8788There is therefore an implicit conversion from 'poly_int<1, T>' to T 8789when compiling target-specific translation units. 8790 8791 8792File: gccint.info, Node: Comparisons involving 'poly_int', Next: Arithmetic on 'poly_int's, Prev: Consequences of using 'poly_int', Up: poly_int 8793 879410.3 Comparisons involving 'poly_int' 8795===================================== 8796 8797In general we need to compare sizes and offsets in two situations: those 8798in which the values need to be ordered, and those in which the values 8799can be unordered. More loosely, the distinction is often between values 8800that have a definite link (usually because they refer to the same 8801underlying register or memory location) and values that have no definite 8802link. An example of the former is the relationship between the inner 8803and outer sizes of a subreg, where we must know at compile time whether 8804the subreg is paradoxical, partial, or complete. An example of the 8805latter is alias analysis: we might want to check whether two arbitrary 8806memory references overlap. 8807 8808 Referring back to the examples in the previous section, it makes sense 8809to ask whether a memory reference of size '3 + 4X' overlaps one of size 8810'1 + 5X', but it does not make sense to have a subreg in which the outer 8811mode has '3 + 4X' bytes and the inner mode has '1 + 5X' bytes (or vice 8812versa). Such subregs are always invalid and should trigger an internal 8813compiler error if formed. 8814 8815 The underlying operators are the same in both cases, but the 8816distinction affects how they are used. 8817 8818* Menu: 8819 8820* Comparison functions for 'poly_int':: 8821* Properties of the 'poly_int' comparisons:: 8822* Comparing potentially-unordered 'poly_int's:: 8823* Comparing ordered 'poly_int's:: 8824* Checking for a 'poly_int' marker value:: 8825* Range checks on 'poly_int's:: 8826* Sorting 'poly_int's:: 8827 8828 8829File: gccint.info, Node: Comparison functions for 'poly_int', Next: Properties of the 'poly_int' comparisons, Up: Comparisons involving 'poly_int' 8830 883110.3.1 Comparison functions for 'poly_int' 8832------------------------------------------ 8833 8834'poly_int' provides the following routines for checking whether a 8835particular condition "may be" (might be) true: 8836 8837 maybe_lt maybe_le maybe_eq maybe_ge maybe_gt 8838 maybe_ne 8839 8840 The functions have their natural meaning: 8841 8842'maybe_lt(A, B)' 8843 Return true if A might be less than B. 8844 8845'maybe_le(A, B)' 8846 Return true if A might be less than or equal to B. 8847 8848'maybe_eq(A, B)' 8849 Return true if A might be equal to B. 8850 8851'maybe_ne(A, B)' 8852 Return true if A might not be equal to B. 8853 8854'maybe_ge(A, B)' 8855 Return true if A might be greater than or equal to B. 8856 8857'maybe_gt(A, B)' 8858 Return true if A might be greater than B. 8859 8860 For readability, 'poly_int' also provides "known" inverses of these 8861functions: 8862 8863 known_lt (A, B) == !maybe_ge (A, B) 8864 known_le (A, B) == !maybe_gt (A, B) 8865 known_eq (A, B) == !maybe_ne (A, B) 8866 known_ge (A, B) == !maybe_lt (A, B) 8867 known_gt (A, B) == !maybe_le (A, B) 8868 known_ne (A, B) == !maybe_eq (A, B) 8869 8870 8871File: gccint.info, Node: Properties of the 'poly_int' comparisons, Next: Comparing potentially-unordered 'poly_int's, Prev: Comparison functions for 'poly_int', Up: Comparisons involving 'poly_int' 8872 887310.3.2 Properties of the 'poly_int' comparisons 8874----------------------------------------------- 8875 8876All "maybe" relations except 'maybe_ne' are transitive, so for example: 8877 8878 maybe_lt (A, B) && maybe_lt (B, C) implies maybe_lt (A, C) 8879 8880 for all A, B and C. 'maybe_lt', 'maybe_gt' and 'maybe_ne' are 8881irreflexive, so for example: 8882 8883 !maybe_lt (A, A) 8884 8885 is true for all A. 'maybe_le', 'maybe_eq' and 'maybe_ge' are 8886reflexive, so for example: 8887 8888 maybe_le (A, A) 8889 8890 is true for all A. 'maybe_eq' and 'maybe_ne' are symmetric, so: 8891 8892 maybe_eq (A, B) == maybe_eq (B, A) 8893 maybe_ne (A, B) == maybe_ne (B, A) 8894 8895 for all A and B. In addition: 8896 8897 maybe_le (A, B) == maybe_lt (A, B) || maybe_eq (A, B) 8898 maybe_ge (A, B) == maybe_gt (A, B) || maybe_eq (A, B) 8899 maybe_lt (A, B) == maybe_gt (B, A) 8900 maybe_le (A, B) == maybe_ge (B, A) 8901 8902 However: 8903 8904 maybe_le (A, B) && maybe_le (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)] 8905 maybe_ge (A, B) && maybe_ge (B, A) does not imply !maybe_ne (A, B) [== known_eq (A, B)] 8906 8907 One example is again 'A == 3 + 4X' and 'B == 1 + 5X', where 'maybe_le 8908(A, B)', 'maybe_ge (A, B)' and 'maybe_ne (A, B)' all hold. 'maybe_le' 8909and 'maybe_ge' are therefore not antisymetric and do not form a partial 8910order. 8911 8912 From the above, it follows that: 8913 8914 * All "known" relations except 'known_ne' are transitive. 8915 8916 * 'known_lt', 'known_ne' and 'known_gt' are irreflexive. 8917 8918 * 'known_le', 'known_eq' and 'known_ge' are reflexive. 8919 8920 Also: 8921 8922 known_lt (A, B) == known_gt (B, A) 8923 known_le (A, B) == known_ge (B, A) 8924 known_lt (A, B) implies !known_lt (B, A) [asymmetry] 8925 known_gt (A, B) implies !known_gt (B, A) 8926 known_le (A, B) && known_le (B, A) == known_eq (A, B) [== !maybe_ne (A, B)] 8927 known_ge (A, B) && known_ge (B, A) == known_eq (A, B) [== !maybe_ne (A, B)] 8928 8929 'known_le' and 'known_ge' are therefore antisymmetric and are partial 8930orders. However: 8931 8932 known_le (A, B) does not imply known_lt (A, B) || known_eq (A, B) 8933 known_ge (A, B) does not imply known_gt (A, B) || known_eq (A, B) 8934 8935 For example, 'known_le (4, 4 + 4X)' holds because the runtime 8936indeterminate X is a nonnegative integer, but neither 'known_lt (4, 4 + 89374X)' nor 'known_eq (4, 4 + 4X)' hold. 8938 8939 8940File: gccint.info, Node: Comparing potentially-unordered 'poly_int's, Next: Comparing ordered 'poly_int's, Prev: Properties of the 'poly_int' comparisons, Up: Comparisons involving 'poly_int' 8941 894210.3.3 Comparing potentially-unordered 'poly_int's 8943-------------------------------------------------- 8944 8945In cases where there is no definite link between two 'poly_int's, we can 8946usually make a conservatively-correct assumption. For example, the 8947conservative assumption for alias analysis is that two references 8948_might_ alias. 8949 8950 One way of checking whether [BEGIN1, END1) might overlap [BEGIN2, END2) 8951using the 'poly_int' comparisons is: 8952 8953 maybe_gt (END1, BEGIN2) && maybe_gt (END2, BEGIN1) 8954 8955 and another (equivalent) way is: 8956 8957 !(known_le (END1, BEGIN2) || known_le (END2, BEGIN1)) 8958 8959 However, in this particular example, it is better to use the range 8960helper functions instead. *Note Range checks on 'poly_int's::. 8961 8962 8963File: gccint.info, Node: Comparing ordered 'poly_int's, Next: Checking for a 'poly_int' marker value, Prev: Comparing potentially-unordered 'poly_int's, Up: Comparisons involving 'poly_int' 8964 896510.3.4 Comparing ordered 'poly_int's 8966------------------------------------ 8967 8968In cases where there is a definite link between two 'poly_int's, such as 8969the outer and inner sizes of subregs, we usually require the sizes to be 8970ordered by the 'known_le' partial order. 'poly_int' provides the 8971following utility functions for ordered values: 8972 8973'ordered_p (A, B)' 8974 Return true if A and B are ordered by the 'known_le' partial order. 8975 8976'ordered_min (A, B)' 8977 Assert that A and B are ordered by 'known_le' and return the 8978 minimum of the two. When using this function, please add a comment 8979 explaining why the values are known to be ordered. 8980 8981'ordered_max (A, B)' 8982 Assert that A and B are ordered by 'known_le' and return the 8983 maximum of the two. When using this function, please add a comment 8984 explaining why the values are known to be ordered. 8985 8986 For example, if a subreg has an outer mode of size OUTER and an inner 8987mode of size INNER: 8988 8989 * the subreg is complete if known_eq (INNER, OUTER) 8990 8991 * otherwise, the subreg is paradoxical if known_le (INNER, OUTER) 8992 8993 * otherwise, the subreg is partial if known_le (OUTER, INNER) 8994 8995 * otherwise, the subreg is ill-formed 8996 8997 Thus the subreg is only valid if 'ordered_p (OUTER, INNER)' is true. 8998If this condition is already known to be true then: 8999 9000 * the subreg is complete if known_eq (INNER, OUTER) 9001 9002 * the subreg is paradoxical if maybe_lt (INNER, OUTER) 9003 9004 * the subreg is partial if maybe_lt (OUTER, INNER) 9005 9006 with the three conditions being mutually exclusive. 9007 9008 Code that checks whether a subreg is valid would therefore generally 9009check whether 'ordered_p' holds (in addition to whatever other checks 9010are required for subreg validity). Code that is dealing with existing 9011subregs can assert that 'ordered_p' holds and use either of the 9012classifications above. 9013 9014 9015File: gccint.info, Node: Checking for a 'poly_int' marker value, Next: Range checks on 'poly_int's, Prev: Comparing ordered 'poly_int's, Up: Comparisons involving 'poly_int' 9016 901710.3.5 Checking for a 'poly_int' marker value 9018--------------------------------------------- 9019 9020It is sometimes useful to have a special "marker value" that is not 9021meant to be taken literally. For example, some code uses a size of -1 9022to represent an unknown size, rather than having to carry around a 9023separate boolean to say whether the size is known. 9024 9025 The best way of checking whether something is a marker value is 9026'known_eq'. Conversely the best way of checking whether something is 9027_not_ a marker value is 'maybe_ne'. 9028 9029 Thus in the size example just mentioned, 'known_eq (size, -1)' would 9030check for an unknown size and 'maybe_ne (size, -1)' would check for a 9031known size. 9032 9033 9034File: gccint.info, Node: Range checks on 'poly_int's, Next: Sorting 'poly_int's, Prev: Checking for a 'poly_int' marker value, Up: Comparisons involving 'poly_int' 9035 903610.3.6 Range checks on 'poly_int's 9037---------------------------------- 9038 9039As well as the core comparisons (*note Comparison functions for 9040'poly_int'::), 'poly_int' provides utilities for various kinds of range 9041check. In each case the range is represented by a start position and a 9042size rather than a start position and an end position; this is because 9043the former is used much more often than the latter in GCC. Also, the 9044sizes can be -1 (or all ones for unsigned sizes) to indicate a range 9045with a known start position but an unknown size. All other sizes must 9046be nonnegative. A range of size 0 does not contain anything or overlap 9047anything. 9048 9049'known_size_p (SIZE)' 9050 Return true if SIZE represents a known range size, false if it is 9051 -1 or all ones (for signed and unsigned types respectively). 9052 9053'ranges_maybe_overlap_p (POS1, SIZE1, POS2, SIZE2)' 9054 Return true if the range described by POS1 and SIZE1 _might_ 9055 overlap the range described by POS2 and SIZE2 (in other words, 9056 return true if we cannot prove that the ranges are disjoint). 9057 9058'ranges_known_overlap_p (POS1, SIZE1, POS2, SIZE2)' 9059 Return true if the range described by POS1 and SIZE1 is known to 9060 overlap the range described by POS2 and SIZE2. 9061 9062'known_subrange_p (POS1, SIZE1, POS2, SIZE2)' 9063 Return true if the range described by POS1 and SIZE1 is known to be 9064 contained in the range described by POS2 and SIZE2. 9065 9066'maybe_in_range_p (VALUE, POS, SIZE)' 9067 Return true if VALUE _might_ be in the range described by POS and 9068 SIZE (in other words, return true if we cannot prove that VALUE is 9069 outside that range). 9070 9071'known_in_range_p (VALUE, POS, SIZE)' 9072 Return true if VALUE is known to be in the range described by POS 9073 and SIZE. 9074 9075'endpoint_representable_p (POS, SIZE)' 9076 Return true if the range described by POS and SIZE is open-ended or 9077 if the endpoint (POS + SIZE) is representable in the same type as 9078 POS and SIZE. The function returns false if adding SIZE to POS 9079 makes conceptual sense but could overflow. 9080 9081 There is also a 'poly_int' version of the 'IN_RANGE_P' macro: 9082 9083'coeffs_in_range_p (X, LOWER, UPPER)' 9084 Return true if every coefficient of X is in the inclusive range 9085 [LOWER, UPPER]. This function can be useful when testing whether 9086 an operation would cause the values of coefficients to overflow. 9087 9088 Note that the function does not indicate whether X itself is in the 9089 given range. X can be either a constant or a 'poly_int'. 9090 9091 9092File: gccint.info, Node: Sorting 'poly_int's, Prev: Range checks on 'poly_int's, Up: Comparisons involving 'poly_int' 9093 909410.3.7 Sorting 'poly_int's 9095-------------------------- 9096 9097'poly_int' provides the following routine for sorting: 9098 9099'compare_sizes_for_sort (A, B)' 9100 Compare A and B in reverse lexicographical order (that is, compare 9101 the highest-indexed coefficients first). This can be useful when 9102 sorting data structures, since it has the effect of separating 9103 constant and non-constant values. If all values are nonnegative, 9104 the constant values come first. 9105 9106 Note that the values do not necessarily end up in numerical order. 9107 For example, '1 + 1X' would come after '100' in the sort order, but 9108 may well be less than '100' at run time. 9109 9110 9111File: gccint.info, Node: Arithmetic on 'poly_int's, Next: Alignment of 'poly_int's, Prev: Comparisons involving 'poly_int', Up: poly_int 9112 911310.4 Arithmetic on 'poly_int's 9114============================== 9115 9116Addition, subtraction, negation and bit inversion all work normally for 9117'poly_int's. Multiplication by a constant multiplier and left shifting 9118by a constant shift amount also work normally. General multiplication 9119of two 'poly_int's is not supported and is not useful in practice. 9120 9121 Other operations are only conditionally supported: the operation might 9122succeed or might fail, depending on the inputs. 9123 9124 This section describes both types of operation. 9125 9126* Menu: 9127 9128* Using 'poly_int' with C++ arithmetic operators:: 9129* 'wi' arithmetic on 'poly_int's:: 9130* Division of 'poly_int's:: 9131* Other 'poly_int' arithmetic:: 9132 9133 9134File: gccint.info, Node: Using 'poly_int' with C++ arithmetic operators, Next: 'wi' arithmetic on 'poly_int's, Up: Arithmetic on 'poly_int's 9135 913610.4.1 Using 'poly_int' with C++ arithmetic operators 9137----------------------------------------------------- 9138 9139The following C++ expressions are supported, where P1 and P2 are 9140'poly_int's and where C1 and C2 are scalars: 9141 9142 -P1 9143 ~P1 9144 9145 P1 + P2 9146 P1 + C2 9147 C1 + P2 9148 9149 P1 - P2 9150 P1 - C2 9151 C1 - P2 9152 9153 C1 * P2 9154 P1 * C2 9155 9156 P1 << C2 9157 9158 P1 += P2 9159 P1 += C2 9160 9161 P1 -= P2 9162 P1 -= C2 9163 9164 P1 *= C2 9165 P1 <<= C2 9166 9167 These arithmetic operations handle integer ranks in a similar way to 9168C++. The main difference is that every coefficient narrower than 9169'HOST_WIDE_INT' promotes to 'HOST_WIDE_INT', whereas in C++ everything 9170narrower than 'int' promotes to 'int'. For example: 9171 9172 poly_uint16 + int -> poly_int64 9173 unsigned int + poly_uint16 -> poly_int64 9174 poly_int64 + int -> poly_int64 9175 poly_int32 + poly_uint64 -> poly_uint64 9176 uint64 + poly_int64 -> poly_uint64 9177 poly_offset_int + int32 -> poly_offset_int 9178 offset_int + poly_uint16 -> poly_offset_int 9179 9180 In the first two examples, both coefficients are narrower than 9181'HOST_WIDE_INT', so the result has coefficients of type 'HOST_WIDE_INT'. 9182In the other examples, the coefficient with the highest rank "wins". 9183 9184 If one of the operands is 'wide_int' or 'poly_wide_int', the rules are 9185the same as for 'wide_int' arithmetic. 9186 9187 9188File: gccint.info, Node: 'wi' arithmetic on 'poly_int's, Next: Division of 'poly_int's, Prev: Using 'poly_int' with C++ arithmetic operators, Up: Arithmetic on 'poly_int's 9189 919010.4.2 'wi' arithmetic on 'poly_int's 9191------------------------------------- 9192 9193As well as the C++ operators, 'poly_int' supports the following 'wi' 9194routines: 9195 9196 wi::neg (P1, &OVERFLOW) 9197 9198 wi::add (P1, P2) 9199 wi::add (P1, C2) 9200 wi::add (C1, P1) 9201 wi::add (P1, P2, SIGN, &OVERFLOW) 9202 9203 wi::sub (P1, P2) 9204 wi::sub (P1, C2) 9205 wi::sub (C1, P1) 9206 wi::sub (P1, P2, SIGN, &OVERFLOW) 9207 9208 wi::mul (P1, C2) 9209 wi::mul (C1, P1) 9210 wi::mul (P1, C2, SIGN, &OVERFLOW) 9211 9212 wi::lshift (P1, C2) 9213 9214 These routines just check whether overflow occurs on any individual 9215coefficient; it is not possible to know at compile time whether the 9216final runtime value would overflow. 9217 9218 9219File: gccint.info, Node: Division of 'poly_int's, Next: Other 'poly_int' arithmetic, Prev: 'wi' arithmetic on 'poly_int's, Up: Arithmetic on 'poly_int's 9220 922110.4.3 Division of 'poly_int's 9222------------------------------ 9223 9224Division of 'poly_int's is possible for certain inputs. The functions 9225for division return true if the operation is possible and in most cases 9226return the results by pointer. The routines are: 9227 9228'multiple_p (A, B)' 9229'multiple_p (A, B, "IENT)' 9230 Return true if A is an exact multiple of B, storing the result in 9231 QUOTIENT if so. There are overloads for various combinations of 9232 polynomial and constant A, B and QUOTIENT. 9233 9234'constant_multiple_p (A, B)' 9235'constant_multiple_p (A, B, "IENT)' 9236 Like 'multiple_p', but also test whether the multiple is a 9237 compile-time constant. 9238 9239'can_div_trunc_p (A, B, "IENT)' 9240'can_div_trunc_p (A, B, "IENT, &REMAINDER)' 9241 Return true if we can calculate 'trunc (A / B)' at compile time, 9242 storing the result in QUOTIENT and REMAINDER if so. 9243 9244'can_div_away_from_zero_p (A, B, "IENT)' 9245 Return true if we can calculate 'A / B' at compile time, rounding 9246 away from zero. Store the result in QUOTIENT if so. 9247 9248 Note that this is true if and only if 'can_div_trunc_p' is true. 9249 The only difference is in the rounding of the result. 9250 9251 There is also an asserting form of division: 9252 9253'exact_div (A, B)' 9254 Assert that A is a multiple of B and return 'A / B'. The result is 9255 a 'poly_int' if A is a 'poly_int'. 9256 9257 9258File: gccint.info, Node: Other 'poly_int' arithmetic, Prev: Division of 'poly_int's, Up: Arithmetic on 'poly_int's 9259 926010.4.4 Other 'poly_int' arithmetic 9261---------------------------------- 9262 9263There are tentative routines for other operations besides division: 9264 9265'can_ior_p (A, B, &RESULT)' 9266 Return true if we can calculate 'A | B' at compile time, storing 9267 the result in RESULT if so. 9268 9269 Also, ANDs with a value '(1 << Y) - 1' or its inverse can be treated as 9270alignment operations. *Note Alignment of 'poly_int's::. 9271 9272 In addition, the following miscellaneous routines are available: 9273 9274'coeff_gcd (A)' 9275 Return the greatest common divisor of all nonzero coefficients in 9276 A, or zero if A is known to be zero. 9277 9278'common_multiple (A, B)' 9279 Return a value that is a multiple of both A and B, where one value 9280 is a 'poly_int' and the other is a scalar. The result will be the 9281 least common multiple for some indeterminate values but not 9282 necessarily for all. 9283 9284'force_common_multiple (A, B)' 9285 Return a value that is a multiple of both 'poly_int' A and 9286 'poly_int' B, asserting that such a value exists. The result will 9287 be the least common multiple for some indeterminate values but not 9288 necessarily for all. 9289 9290 When using this routine, please add a comment explaining why the 9291 assertion is known to hold. 9292 9293 Please add any other operations that you find to be useful. 9294 9295 9296File: gccint.info, Node: Alignment of 'poly_int's, Next: Computing bounds on 'poly_int's, Prev: Arithmetic on 'poly_int's, Up: poly_int 9297 929810.5 Alignment of 'poly_int's 9299============================= 9300 9301'poly_int' provides various routines for aligning values and for 9302querying misalignments. In each case the alignment must be a power of 93032. 9304 9305'can_align_p (VALUE, ALIGN)' 9306 Return true if we can align VALUE up or down to the nearest 9307 multiple of ALIGN at compile time. The answer is the same for both 9308 directions. 9309 9310'can_align_down (VALUE, ALIGN, &ALIGNED)' 9311 Return true if 'can_align_p'; if so, set ALIGNED to the greatest 9312 aligned value that is less than or equal to VALUE. 9313 9314'can_align_up (VALUE, ALIGN, &ALIGNED)' 9315 Return true if 'can_align_p'; if so, set ALIGNED to the lowest 9316 aligned value that is greater than or equal to VALUE. 9317 9318'known_equal_after_align_down (A, B, ALIGN)' 9319 Return true if we can align A and B down to the nearest ALIGN 9320 boundary at compile time and if the two results are equal. 9321 9322'known_equal_after_align_up (A, B, ALIGN)' 9323 Return true if we can align A and B up to the nearest ALIGN 9324 boundary at compile time and if the two results are equal. 9325 9326'aligned_lower_bound (VALUE, ALIGN)' 9327 Return a result that is no greater than VALUE and that is aligned 9328 to ALIGN. The result will the closest aligned value for some 9329 indeterminate values but not necessarily for all. 9330 9331 For example, suppose we are allocating an object of SIZE bytes in a 9332 downward-growing stack whose current limit is given by LIMIT. If 9333 the object requires ALIGN bytes of alignment, the new stack limit 9334 is given by: 9335 9336 aligned_lower_bound (LIMIT - SIZE, ALIGN) 9337 9338'aligned_upper_bound (VALUE, ALIGN)' 9339 Likewise return a result that is no less than VALUE and that is 9340 aligned to ALIGN. This is the routine that would be used for 9341 upward-growing stacks in the scenario just described. 9342 9343'known_misalignment (VALUE, ALIGN, &MISALIGN)' 9344 Return true if we can calculate the misalignment of VALUE with 9345 respect to ALIGN at compile time, storing the result in MISALIGN if 9346 so. 9347 9348'known_alignment (VALUE)' 9349 Return the minimum alignment that VALUE is known to have (in other 9350 words, the largest alignment that can be guaranteed whatever the 9351 values of the indeterminates turn out to be). Return 0 if VALUE is 9352 known to be 0. 9353 9354'force_align_down (VALUE, ALIGN)' 9355 Assert that VALUE can be aligned down to ALIGN at compile time and 9356 return the result. When using this routine, please add a comment 9357 explaining why the assertion is known to hold. 9358 9359'force_align_up (VALUE, ALIGN)' 9360 Likewise, but aligning up. 9361 9362'force_align_down_and_div (VALUE, ALIGN)' 9363 Divide the result of 'force_align_down' by ALIGN. Again, please 9364 add a comment explaining why the assertion in 'force_align_down' is 9365 known to hold. 9366 9367'force_align_up_and_div (VALUE, ALIGN)' 9368 Likewise for 'force_align_up'. 9369 9370'force_get_misalignment (VALUE, ALIGN)' 9371 Assert that we can calculate the misalignment of VALUE with respect 9372 to ALIGN at compile time and return the misalignment. When using 9373 this function, please add a comment explaining why the assertion is 9374 known to hold. 9375 9376 9377File: gccint.info, Node: Computing bounds on 'poly_int's, Next: Converting 'poly_int's, Prev: Alignment of 'poly_int's, Up: poly_int 9378 937910.6 Computing bounds on 'poly_int's 9380==================================== 9381 9382'poly_int' also provides routines for calculating lower and upper 9383bounds: 9384 9385'constant_lower_bound (A)' 9386 Assert that A is nonnegative and return the smallest value it can 9387 have. 9388 9389'constant_lower_bound_with_limit (A, B)' 9390 Return the least value A can have, given that the context in which 9391 A appears guarantees that the answer is no less than B. In other 9392 words, the caller is asserting that A is greater than or equal to B 9393 even if 'known_ge (A, B)' doesn't hold. 9394 9395'constant_upper_bound_with_limit (A, B)' 9396 Return the greatest value A can have, given that the context in 9397 which A appears guarantees that the answer is no greater than B. 9398 In other words, the caller is asserting that A is less than or 9399 equal to B even if 'known_le (A, B)' doesn't hold. 9400 9401'lower_bound (A, B)' 9402 Return a value that is always less than or equal to both A and B. 9403 It will be the greatest such value for some indeterminate values 9404 but necessarily for all. 9405 9406'upper_bound (A, B)' 9407 Return a value that is always greater than or equal to both A and 9408 B. It will be the least such value for some indeterminate values 9409 but necessarily for all. 9410 9411 9412File: gccint.info, Node: Converting 'poly_int's, Next: Miscellaneous 'poly_int' routines, Prev: Computing bounds on 'poly_int's, Up: poly_int 9413 941410.7 Converting 'poly_int's 9415=========================== 9416 9417A 'poly_int<N, T>' can be constructed from up to N individual T 9418coefficients, with the remaining coefficients being implicitly zero. In 9419particular, this means that every 'poly_int<N, T>' can be constructed 9420from a single scalar T, or something compatible with T. 9421 9422 Also, a 'poly_int<N, T>' can be constructed from a 'poly_int<N, U>' if 9423T can be constructed from U. 9424 9425 The following functions provide other forms of conversion, or test 9426whether such a conversion would succeed. 9427 9428'VALUE.is_constant ()' 9429 Return true if 'poly_int' VALUE is a compile-time constant. 9430 9431'VALUE.is_constant (&C1)' 9432 Return true if 'poly_int' VALUE is a compile-time constant, storing 9433 it in C1 if so. C1 must be able to hold all constant values of 9434 VALUE without loss of precision. 9435 9436'VALUE.to_constant ()' 9437 Assert that VALUE is a compile-time constant and return its value. 9438 When using this function, please add a comment explaining why the 9439 condition is known to hold (for example, because an earlier phase 9440 of analysis rejected non-constants). 9441 9442'VALUE.to_shwi (&P2)' 9443 Return true if 'poly_int<N, T>' VALUE can be represented without 9444 loss of precision as a 'poly_int<N, 'HOST_WIDE_INT'>', storing it 9445 in that form in P2 if so. 9446 9447'VALUE.to_uhwi (&P2)' 9448 Return true if 'poly_int<N, T>' VALUE can be represented without 9449 loss of precision as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>', 9450 storing it in that form in P2 if so. 9451 9452'VALUE.force_shwi ()' 9453 Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to 9454 'HOST_WIDE_INT', truncating any that are out of range. Return the 9455 result as a 'poly_int<N, 'HOST_WIDE_INT'>'. 9456 9457'VALUE.force_uhwi ()' 9458 Forcibly convert each coefficient of 'poly_int<N, T>' VALUE to 9459 'unsigned HOST_WIDE_INT', truncating any that are out of range. 9460 Return the result as a 'poly_int<N, 'unsigned HOST_WIDE_INT'>'. 9461 9462'wi::shwi (VALUE, PRECISION)' 9463 Return a 'poly_int' with the same value as VALUE, but with the 9464 coefficients converted from 'HOST_WIDE_INT' to 'wide_int'. 9465 PRECISION specifies the precision of the 'wide_int' cofficients; if 9466 this is wider than a 'HOST_WIDE_INT', the coefficients of VALUE 9467 will be sign-extended to fit. 9468 9469'wi::uhwi (VALUE, PRECISION)' 9470 Like 'wi::shwi', except that VALUE has coefficients of type 9471 'unsigned HOST_WIDE_INT'. If PRECISION is wider than a 9472 'HOST_WIDE_INT', the coefficients of VALUE will be zero-extended to 9473 fit. 9474 9475'wi::sext (VALUE, PRECISION)' 9476 Return a 'poly_int' of the same type as VALUE, sign-extending every 9477 coefficient from the low PRECISION bits. This in effect applies 9478 'wi::sext' to each coefficient individually. 9479 9480'wi::zext (VALUE, PRECISION)' 9481 Like 'wi::sext', but for zero extension. 9482 9483'poly_wide_int::from (VALUE, PRECISION, SIGN)' 9484 Convert VALUE to a 'poly_wide_int' in which each coefficient has 9485 PRECISION bits. Extend the coefficients according to SIGN if the 9486 coefficients have fewer bits. 9487 9488'poly_offset_int::from (VALUE, SIGN)' 9489 Convert VALUE to a 'poly_offset_int', extending its coefficients 9490 according to SIGN if they have fewer bits than 'offset_int'. 9491 9492'poly_widest_int::from (VALUE, SIGN)' 9493 Convert VALUE to a 'poly_widest_int', extending its coefficients 9494 according to SIGN if they have fewer bits than 'widest_int'. 9495 9496 9497File: gccint.info, Node: Miscellaneous 'poly_int' routines, Next: Guidelines for using 'poly_int', Prev: Converting 'poly_int's, Up: poly_int 9498 949910.8 Miscellaneous 'poly_int' routines 9500====================================== 9501 9502'print_dec (VALUE, FILE, SIGN)' 9503'print_dec (VALUE, FILE)' 9504 Print VALUE to FILE as a decimal value, interpreting the 9505 coefficients according to SIGN. The final argument is optional if 9506 VALUE has an inherent sign; for example, 'poly_int64' values print 9507 as signed by default and 'poly_uint64' values print as unsigned by 9508 default. 9509 9510 This is a simply a 'poly_int' version of a wide-int routine. 9511 9512 9513File: gccint.info, Node: Guidelines for using 'poly_int', Prev: Miscellaneous 'poly_int' routines, Up: poly_int 9514 951510.9 Guidelines for using 'poly_int' 9516==================================== 9517 9518One of the main design goals of 'poly_int' was to make it easy to write 9519target-independent code that handles variable-sized registers even when 9520the current target has fixed-sized registers. There are two aspects to 9521this: 9522 9523 * The set of 'poly_int' operations should be complete enough that the 9524 question in most cases becomes "Can we do this operation on these 9525 particular 'poly_int' values? If not, bail out" rather than "Are 9526 these 'poly_int' values constant? If so, do the operation, 9527 otherwise bail out". 9528 9529 * If target-independent code compiles and runs correctly on a target 9530 with one value of 'NUM_POLY_INT_COEFFS', and if the code does not 9531 use asserting functions like 'to_constant', it is reasonable to 9532 assume that the code also works on targets with other values of 9533 'NUM_POLY_INT_COEFFS'. There is no need to check this during 9534 everyday development. 9535 9536 So the general principle is: if target-independent code is dealing with 9537a 'poly_int' value, it is better to operate on it as a 'poly_int' if at 9538all possible, choosing conservatively-correct behavior if a particular 9539operation fails. For example, the following code handles an index 'pos' 9540into a sequence of vectors that each have 'nunits' elements: 9541 9542 /* Calculate which vector contains the result, and which lane of 9543 that vector we need. */ 9544 if (!can_div_trunc_p (pos, nunits, &vec_entry, &vec_index)) 9545 { 9546 if (dump_enabled_p ()) 9547 dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, 9548 "Cannot determine which vector holds the" 9549 " final result.\n"); 9550 return false; 9551 } 9552 9553 However, there are some contexts in which operating on a 'poly_int' is 9554not possible or does not make sense. One example is when handling 9555static initializers, since no current target supports the concept of a 9556variable-length static initializer. In these situations, a reasonable 9557fallback is: 9558 9559 if (POLY_VALUE.is_constant (&CONST_VALUE)) 9560 { 9561 ... 9562 /* Operate on CONST_VALUE. */ 9563 ... 9564 } 9565 else 9566 { 9567 ... 9568 /* Conservatively correct fallback. */ 9569 ... 9570 } 9571 9572 'poly_int' also provides some asserting functions like 'to_constant'. 9573Please only use these functions if there is a good theoretical reason to 9574believe that the assertion cannot fire. For example, if some work is 9575divided into an analysis phase and an implementation phase, the analysis 9576phase might reject inputs that are not 'is_constant', in which case the 9577implementation phase can reasonably use 'to_constant' on the remaining 9578inputs. The assertions should not be used to discover whether a 9579condition ever occurs "in the field"; in other words, they should not be 9580used to restrict code to constants at first, with the intention of only 9581implementing a 'poly_int' version if a user hits the assertion. 9582 9583 If a particular asserting function like 'to_constant' is needed more 9584than once for the same reason, it is probably worth adding a helper 9585function or macro for that situation, so that the justification only 9586needs to be given once. For example: 9587 9588 /* Return the size of an element in a vector of size SIZE, given that 9589 the vector has NELTS elements. The return value is in the same units 9590 as SIZE (either bits or bytes). 9591 9592 to_constant () is safe in this situation because vector elements are 9593 always constant-sized scalars. */ 9594 #define vector_element_size(SIZE, NELTS) \ 9595 (exact_div (SIZE, NELTS).to_constant ()) 9596 9597 Target-specific code in 'config/CPU' only needs to handle non-constant 9598'poly_int's if 'NUM_POLY_INT_COEFFS' is greater than one. For other 9599targets, 'poly_int' degenerates to a compile-time constant and is often 9600interchangable with a normal scalar integer. There are two main 9601exceptions: 9602 9603 * Sometimes an explicit cast to an integer type might be needed, such 9604 as to resolve ambiguities in a '?:' expression, or when passing 9605 values through '...' to things like print functions. 9606 9607 * Target macros are included in target-independent code and so do not 9608 have access to the implicit conversion to a scalar integer. If 9609 this becomes a problem for a particular target macro, the possible 9610 solutions, in order of preference, are: 9611 9612 * Convert the target macro to a target hook (for all targets). 9613 9614 * Put the target's implementation of the target macro in its 9615 'CPU.c' file and call it from the target macro in the 'CPU.h' 9616 file. 9617 9618 * Add 'to_constant ()' calls where necessary. The previous 9619 option is preferable because it will help with any future 9620 conversion of the macro to a hook. 9621 9622 9623File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: poly_int, Up: Top 9624 962511 GENERIC 9626********** 9627 9628The purpose of GENERIC is simply to provide a language-independent way 9629of representing an entire function in trees. To this end, it was 9630necessary to add a few new tree codes to the back end, but almost 9631everything was already there. If you can express it with the codes in 9632'gcc/tree.def', it's GENERIC. 9633 9634 Early on, there was a great deal of debate about how to think about 9635statements in a tree IL. In GENERIC, a statement is defined as any 9636expression whose value, if any, is ignored. A statement will always 9637have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a 9638non-statement expression may also have side effects. A 'CALL_EXPR', for 9639instance. 9640 9641 It would be possible for some local optimizations to work on the 9642GENERIC form of a function; indeed, the adapted tree inliner works fine 9643on GENERIC, but the current compiler performs inlining after lowering to 9644GIMPLE (a restricted form described in the next section). Indeed, 9645currently the frontends perform this lowering before handing off to 9646'tree_rest_of_compilation', but this seems inelegant. 9647 9648* Menu: 9649 9650* Deficiencies:: Topics net yet covered in this document. 9651* Tree overview:: All about 'tree's. 9652* Types:: Fundamental and aggregate types. 9653* Declarations:: Type declarations and variables. 9654* Attributes:: Declaration and type attributes. 9655* Expressions: Expression trees. Operating on data. 9656* Statements:: Control flow and related trees. 9657* Functions:: Function bodies, linkage, and other aspects. 9658* Language-dependent trees:: Topics and trees specific to language front ends. 9659* C and C++ Trees:: Trees specific to C and C++. 9660 9661 9662File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 9663 966411.1 Deficiencies 9665================= 9666 9667There are many places in which this document is incomplet and incorrekt. 9668It is, as of yet, only _preliminary_ documentation. 9669 9670 9671File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 9672 967311.2 Overview 9674============= 9675 9676The central data structure used by the internal representation is the 9677'tree'. These nodes, while all of the C type 'tree', are of many 9678varieties. A 'tree' is a pointer type, but the object to which it 9679points may be of a variety of types. From this point forward, we will 9680refer to trees in ordinary type, rather than in 'this font', except when 9681talking about the actual C type 'tree'. 9682 9683 You can tell what kind of node a particular tree is by using the 9684'TREE_CODE' macro. Many, many macros take trees as input and return 9685trees as output. However, most macros require a certain kind of tree 9686node as input. In other words, there is a type-system for trees, but it 9687is not reflected in the C type-system. 9688 9689 For safety, it is useful to configure GCC with '--enable-checking'. 9690Although this results in a significant performance penalty (since all 9691tree types are checked at run-time), and is therefore inappropriate in a 9692release version, it is extremely helpful during the development process. 9693 9694 Many macros behave as predicates. Many, although not all, of these 9695predicates end in '_P'. Do not rely on the result type of these macros 9696being of any particular type. You may, however, rely on the fact that 9697the type can be compared to '0', so that statements like 9698 if (TEST_P (t) && !TEST_P (y)) 9699 x = 1; 9700and 9701 int i = (TEST_P (t) != 0); 9702are legal. Macros that return 'int' values now may be changed to return 9703'tree' values, or other pointers in the future. Even those that 9704continue to return 'int' may return multiple nonzero codes where 9705previously they returned only zero and one. Therefore, you should not 9706write code like 9707 if (TEST_P (t) == 1) 9708as this code is not guaranteed to work correctly in the future. 9709 9710 You should not take the address of values returned by the macros or 9711functions described here. In particular, no guarantee is given that the 9712values are lvalues. 9713 9714 In general, the names of macros are all in uppercase, while the names 9715of functions are entirely in lowercase. There are rare exceptions to 9716this rule. You should assume that any macro or function whose name is 9717made up entirely of uppercase letters may evaluate its arguments more 9718than once. You may assume that a macro or function whose name is made 9719up entirely of lowercase letters will evaluate its arguments only once. 9720 9721 The 'error_mark_node' is a special tree. Its tree code is 9722'ERROR_MARK', but since there is only ever one node with that code, the 9723usual practice is to compare the tree against 'error_mark_node'. (This 9724test is just a test for pointer equality.) If an error has occurred 9725during front-end processing the flag 'errorcount' will be set. If the 9726front end has encountered code it cannot handle, it will issue a message 9727to the user and set 'sorrycount'. When these flags are set, any macro 9728or function which normally returns a tree of a particular kind may 9729instead return the 'error_mark_node'. Thus, if you intend to do any 9730processing of erroneous code, you must be prepared to deal with the 9731'error_mark_node'. 9732 9733 Occasionally, a particular tree slot (like an operand to an expression, 9734or a particular field in a declaration) will be referred to as "reserved 9735for the back end". These slots are used to store RTL when the tree is 9736converted to RTL for use by the GCC back end. However, if that process 9737is not taking place (e.g., if the front end is being hooked up to an 9738intelligent editor), then those slots may be used by the back end 9739presently in use. 9740 9741 If you encounter situations that do not match this documentation, such 9742as tree nodes of types not mentioned here, or macros documented to 9743return entities of a particular kind that instead return entities of 9744some different kind, you have found a bug, either in the front end or in 9745the documentation. Please report these bugs as you would any other bug. 9746 9747* Menu: 9748 9749* Macros and Functions::Macros and functions that can be used with all trees. 9750* Identifiers:: The names of things. 9751* Containers:: Lists and vectors. 9752 9753 9754File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 9755 975611.2.1 Trees 9757------------ 9758 9759All GENERIC trees have two fields in common. First, 'TREE_CHAIN' is a 9760pointer that can be used as a singly-linked list to other trees. The 9761other is 'TREE_TYPE'. Many trees store the type of an expression or 9762declaration in this field. 9763 9764 These are some other functions for handling trees: 9765 9766'tree_size' 9767 Return the number of bytes a tree takes. 9768 9769'build0' 9770'build1' 9771'build2' 9772'build3' 9773'build4' 9774'build5' 9775'build6' 9776 9777 These functions build a tree and supply values to put in each 9778 parameter. The basic signature is 'code, type, [operands]'. 9779 'code' is the 'TREE_CODE', and 'type' is a tree representing the 9780 'TREE_TYPE'. These are followed by the operands, each of which is 9781 also a tree. 9782 9783 9784File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 9785 978611.2.2 Identifiers 9787------------------ 9788 9789An 'IDENTIFIER_NODE' represents a slightly more general concept than the 9790standard C or C++ concept of identifier. In particular, an 9791'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters. 9792 9793 There are never two distinct 'IDENTIFIER_NODE's representing the same 9794identifier. Therefore, you may use pointer equality to compare 9795'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'. Use 9796'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied 9797string. 9798 9799 You can use the following macros to access identifiers: 9800'IDENTIFIER_POINTER' 9801 The string represented by the identifier, represented as a 'char*'. 9802 This string is always 'NUL'-terminated, and contains no embedded 9803 'NUL' characters. 9804 9805'IDENTIFIER_LENGTH' 9806 The length of the string returned by 'IDENTIFIER_POINTER', not 9807 including the trailing 'NUL'. This value of 'IDENTIFIER_LENGTH 9808 (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'. 9809 9810'IDENTIFIER_OPNAME_P' 9811 This predicate holds if the identifier represents the name of an 9812 overloaded operator. In this case, you should not depend on the 9813 contents of either the 'IDENTIFIER_POINTER' or the 9814 'IDENTIFIER_LENGTH'. 9815 9816'IDENTIFIER_TYPENAME_P' 9817 This predicate holds if the identifier represents the name of a 9818 user-defined conversion operator. In this case, the 'TREE_TYPE' of 9819 the 'IDENTIFIER_NODE' holds the type to which the conversion 9820 operator converts. 9821 9822 9823File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 9824 982511.2.3 Containers 9826----------------- 9827 9828Two common container data structures can be represented directly with 9829tree nodes. A 'TREE_LIST' is a singly linked list containing two trees 9830per node. These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node. 9831(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional 9832information, while the 'TREE_VALUE' contains the majority of the 9833payload. In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE', 9834while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of 9835equal stature.) Given one 'TREE_LIST' node, the next node is found by 9836following the 'TREE_CHAIN'. If the 'TREE_CHAIN' is 'NULL_TREE', then 9837you have reached the end of the list. 9838 9839 A 'TREE_VEC' is a simple vector. The 'TREE_VEC_LENGTH' is an integer 9840(not a tree) giving the number of nodes in the vector. The nodes 9841themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two 9842arguments. The first is the 'TREE_VEC' in question; the second is an 9843integer indicating which element in the vector is desired. The elements 9844are indexed from zero. 9845 9846 9847File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 9848 984911.3 Types 9850========== 9851 9852All types have corresponding tree nodes. However, you should not assume 9853that there is exactly one tree node corresponding to each type. There 9854are often multiple nodes corresponding to the same type. 9855 9856 For the most part, different kinds of types have different tree codes. 9857(For example, pointer types use a 'POINTER_TYPE' code while arrays use 9858an 'ARRAY_TYPE' code.) However, pointers to member functions use the 9859'RECORD_TYPE' code. Therefore, when writing a 'switch' statement that 9860depends on the code associated with a particular type, you should take 9861care to handle pointers to member functions under the 'RECORD_TYPE' case 9862label. 9863 9864 The following functions and macros deal with cv-qualification of types: 9865'TYPE_MAIN_VARIANT' 9866 This macro returns the unqualified version of a type. It may be 9867 applied to an unqualified type, but it is not always the identity 9868 function in that case. 9869 9870 A few other macros and functions are usable with all types: 9871'TYPE_SIZE' 9872 The number of bits required to represent the type, represented as 9873 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 9874 'NULL_TREE'. 9875 9876'TYPE_ALIGN' 9877 The alignment of the type, in bits, represented as an 'int'. 9878 9879'TYPE_NAME' 9880 This macro returns a declaration (in the form of a 'TYPE_DECL') for 9881 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 9882 as you might expect, given its name!) You can look at the 9883 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 9884 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 9885 built-in type, the result of a typedef, or a named class type. 9886 9887'TYPE_CANONICAL' 9888 This macro returns the "canonical" type for the given type node. 9889 Canonical types are used to improve performance in the C++ and 9890 Objective-C++ front ends by allowing efficient comparison between 9891 two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of 9892 the types are equal, the types are equivalent; otherwise, the types 9893 are not equivalent. The notion of equivalence for canonical types 9894 is the same as the notion of type equivalence in the language 9895 itself. For instance, 9896 9897 When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type 9898 for the given type node. In this case, comparison between this 9899 type and any other type requires the compiler to perform a deep, 9900 "structural" comparison to see if the two type nodes have the same 9901 form and properties. 9902 9903 The canonical type for a node is always the most fundamental type 9904 in the equivalence class of types. For instance, 'int' is its own 9905 canonical type. A typedef 'I' of 'int' will have 'int' as its 9906 canonical type. Similarly, 'I*' and a typedef 'IP' (defined to 9907 'I*') will has 'int*' as their canonical type. When building a new 9908 type node, be sure to set 'TYPE_CANONICAL' to the appropriate 9909 canonical type. If the new type is a compound type (built from 9910 other types), and any of those other types require structural 9911 equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new 9912 type also requires structural equality. Finally, if for some 9913 reason you cannot guarantee that 'TYPE_CANONICAL' will point to the 9914 canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure 9915 that the new type-and any type constructed based on it-requires 9916 structural equality. If you suspect that the canonical type system 9917 is miscomparing types, pass '--param verify-canonical-types=1' to 9918 the compiler or configure with '--enable-checking' to force the 9919 compiler to verify its canonical-type comparisons against the 9920 structural comparisons; the compiler will then print any warnings 9921 if the canonical types miscompare. 9922 9923'TYPE_STRUCTURAL_EQUALITY_P' 9924 This predicate holds when the node requires structural equality 9925 checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'. 9926 9927'SET_TYPE_STRUCTURAL_EQUALITY' 9928 This macro states that the type node it is given requires 9929 structural equality checks, e.g., it sets 'TYPE_CANONICAL' to 9930 'NULL_TREE'. 9931 9932'same_type_p' 9933 This predicate takes two types as input, and holds if they are the 9934 same type. For example, if one type is a 'typedef' for the other, 9935 or both are 'typedef's for the same type. This predicate also 9936 holds if the two trees given as input are simply copies of one 9937 another; i.e., there is no difference between them at the source 9938 level, but, for whatever reason, a duplicate has been made in the 9939 representation. You should never use '==' (pointer equality) to 9940 compare types; always use 'same_type_p' instead. 9941 9942 Detailed below are the various kinds of types, and the macros that can 9943be used to access them. Although other kinds of types are used 9944elsewhere in G++, the types described here are the only ones that you 9945will encounter while examining the intermediate representation. 9946 9947'VOID_TYPE' 9948 Used to represent the 'void' type. 9949 9950'INTEGER_TYPE' 9951 Used to represent the various integral types, including 'char', 9952 'short', 'int', 'long', and 'long long'. This code is not used for 9953 enumeration types, nor for the 'bool' type. The 'TYPE_PRECISION' 9954 is the number of bits used in the representation, represented as an 9955 'unsigned int'. (Note that in the general case this is not the 9956 same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer 9957 type, but that alignment requirements for the ABI required 32-bit 9958 alignment. Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32, 9959 while 'TYPE_PRECISION' would be 24.) The integer type is unsigned 9960 if 'TYPE_UNSIGNED' holds; otherwise, it is signed. 9961 9962 The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer 9963 that may be represented by this type. Similarly, the 9964 'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that 9965 may be represented by this type. 9966 9967'REAL_TYPE' 9968 Used to represent the 'float', 'double', and 'long double' types. 9969 The number of bits in the floating-point representation is given by 9970 'TYPE_PRECISION', as in the 'INTEGER_TYPE' case. 9971 9972'FIXED_POINT_TYPE' 9973 Used to represent the 'short _Fract', '_Fract', 'long _Fract', 9974 'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and 9975 'long long _Accum' types. The number of bits in the fixed-point 9976 representation is given by 'TYPE_PRECISION', as in the 9977 'INTEGER_TYPE' case. There may be padding bits, fractional bits 9978 and integral bits. The number of fractional bits is given by 9979 'TYPE_FBIT', and the number of integral bits is given by 9980 'TYPE_IBIT'. The fixed-point type is unsigned if 'TYPE_UNSIGNED' 9981 holds; otherwise, it is signed. The fixed-point type is saturating 9982 if 'TYPE_SATURATING' holds; otherwise, it is not saturating. 9983 9984'COMPLEX_TYPE' 9985 Used to represent GCC built-in '__complex__' data types. The 9986 'TREE_TYPE' is the type of the real and imaginary parts. 9987 9988'ENUMERAL_TYPE' 9989 Used to represent an enumeration type. The 'TYPE_PRECISION' gives 9990 (as an 'int'), the number of bits used to represent the type. If 9991 there are no negative enumeration constants, 'TYPE_UNSIGNED' will 9992 hold. The minimum and maximum enumeration constants may be 9993 obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively; 9994 each of these macros returns an 'INTEGER_CST'. 9995 9996 The actual enumeration constants themselves may be obtained by 9997 looking at the 'TYPE_VALUES'. This macro will return a 9998 'TREE_LIST', containing the constants. The 'TREE_PURPOSE' of each 9999 node will be an 'IDENTIFIER_NODE' giving the name of the constant; 10000 the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned 10001 to that constant. These constants will appear in the order in 10002 which they were declared. The 'TREE_TYPE' of each of these 10003 constants will be the type of enumeration type itself. 10004 10005'BOOLEAN_TYPE' 10006 Used to represent the 'bool' type. 10007 10008'POINTER_TYPE' 10009 Used to represent pointer types, and pointer to data member types. 10010 The 'TREE_TYPE' gives the type to which this type points. 10011 10012'REFERENCE_TYPE' 10013 Used to represent reference types. The 'TREE_TYPE' gives the type 10014 to which this type refers. 10015 10016'FUNCTION_TYPE' 10017 Used to represent the type of non-member functions and of static 10018 member functions. The 'TREE_TYPE' gives the return type of the 10019 function. The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument 10020 types. The 'TREE_VALUE' of each node in this list is the type of 10021 the corresponding argument; the 'TREE_PURPOSE' is an expression for 10022 the default argument value, if any. If the last node in the list 10023 is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the 10024 'void_type_node'), then functions of this type do not take variable 10025 arguments. Otherwise, they do take a variable number of arguments. 10026 10027 Note that in C (but not in C++) a function declared like 'void f()' 10028 is an unprototyped function taking a variable number of arguments; 10029 the 'TYPE_ARG_TYPES' of such a function will be 'NULL'. 10030 10031'METHOD_TYPE' 10032 Used to represent the type of a non-static member function. Like a 10033 'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'. The 10034 type of '*this', i.e., the class of which functions of this type 10035 are a member, is given by the 'TYPE_METHOD_BASETYPE'. The 10036 'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE', 10037 and includes the 'this' argument. 10038 10039'ARRAY_TYPE' 10040 Used to represent array types. The 'TREE_TYPE' gives the type of 10041 the elements in the array. If the array-bound is present in the 10042 type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE' 10043 and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the 10044 array, respectively. The 'TYPE_MIN_VALUE' will always be an 10045 'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less 10046 than the number of elements in the array, i.e., the highest value 10047 which may be used to index an element in the array. 10048 10049'RECORD_TYPE' 10050 Used to represent 'struct' and 'class' types, as well as pointers 10051 to member functions and similar constructs in other languages. 10052 'TYPE_FIELDS' contains the items contained in this type, each of 10053 which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or 10054 'TYPE_DECL'. You may not make any assumptions about the ordering 10055 of the fields in the type or whether one or more of them overlap. 10056 10057'UNION_TYPE' 10058 Used to represent 'union' types. Similar to 'RECORD_TYPE' except 10059 that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position 10060 zero. 10061 10062'QUAL_UNION_TYPE' 10063 Used to represent part of a variant record in Ada. Similar to 10064 'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER' 10065 field, which contains a boolean expression that indicates whether 10066 the field is present in the object. The type will only have one 10067 field, so each field's 'DECL_QUALIFIER' is only evaluated if none 10068 of the expressions in the previous fields in 'TYPE_FIELDS' are 10069 nonzero. Normally these expressions will reference a field in the 10070 outer object using a 'PLACEHOLDER_EXPR'. 10071 10072'LANG_TYPE' 10073 This node is used to represent a language-specific type. The front 10074 end must handle it. 10075 10076'OFFSET_TYPE' 10077 This node is used to represent a pointer-to-data member. For a 10078 data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the 10079 'TREE_TYPE' is the type of 'm'. 10080 10081 There are variables whose values represent some of the basic types. 10082These include: 10083'void_type_node' 10084 A node for 'void'. 10085 10086'integer_type_node' 10087 A node for 'int'. 10088 10089'unsigned_type_node.' 10090 A node for 'unsigned int'. 10091 10092'char_type_node.' 10093 A node for 'char'. 10094It may sometimes be useful to compare one of these variables with a type 10095in hand, using 'same_type_p'. 10096 10097 10098File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 10099 1010011.4 Declarations 10101================= 10102 10103This section covers the various kinds of declarations that appear in the 10104internal representation, except for declarations of functions 10105(represented by 'FUNCTION_DECL' nodes), which are described in *note 10106Functions::. 10107 10108* Menu: 10109 10110* Working with declarations:: Macros and functions that work on 10111declarations. 10112* Internal structure:: How declaration nodes are represented. 10113 10114 10115File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 10116 1011711.4.1 Working with declarations 10118-------------------------------- 10119 10120Some macros can be used with any kind of declaration. These include: 10121'DECL_NAME' 10122 This macro returns an 'IDENTIFIER_NODE' giving the name of the 10123 entity. 10124 10125'TREE_TYPE' 10126 This macro returns the type of the entity declared. 10127 10128'EXPR_FILENAME' 10129 This macro returns the name of the file in which the entity was 10130 declared, as a 'char*'. For an entity declared implicitly by the 10131 compiler (like '__builtin_memcpy'), this will be the string 10132 '"<internal>"'. 10133 10134'EXPR_LINENO' 10135 This macro returns the line number at which the entity was 10136 declared, as an 'int'. 10137 10138'DECL_ARTIFICIAL' 10139 This predicate holds if the declaration was implicitly generated by 10140 the compiler. For example, this predicate will hold of an 10141 implicitly declared member function, or of the 'TYPE_DECL' 10142 implicitly generated for a class type. Recall that in C++ code 10143 like: 10144 struct S {}; 10145 is roughly equivalent to C code like: 10146 struct S {}; 10147 typedef struct S S; 10148 The implicitly generated 'typedef' declaration is represented by a 10149 'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds. 10150 10151 The various kinds of declarations include: 10152'LABEL_DECL' 10153 These nodes are used to represent labels in function bodies. For 10154 more information, see *note Functions::. These nodes only appear 10155 in block scopes. 10156 10157'CONST_DECL' 10158 These nodes are used to represent enumeration constants. The value 10159 of the constant is given by 'DECL_INITIAL' which will be an 10160 'INTEGER_CST' with the same type as the 'TREE_TYPE' of the 10161 'CONST_DECL', i.e., an 'ENUMERAL_TYPE'. 10162 10163'RESULT_DECL' 10164 These nodes represent the value returned by a function. When a 10165 value is assigned to a 'RESULT_DECL', that indicates that the value 10166 should be returned, via bitwise copy, by the function. You can use 10167 'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a 10168 'VAR_DECL'. 10169 10170'TYPE_DECL' 10171 These nodes represent 'typedef' declarations. The 'TREE_TYPE' is 10172 the type declared to have the name given by 'DECL_NAME'. In some 10173 cases, there is no associated name. 10174 10175'VAR_DECL' 10176 These nodes represent variables with namespace or block scope, as 10177 well as static data members. The 'DECL_SIZE' and 'DECL_ALIGN' are 10178 analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'. For a declaration, you 10179 should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the 10180 'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since 10181 special attributes may have been applied to the variable to give it 10182 a particular size and alignment. You may use the predicates 10183 'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the 10184 storage class specifiers 'static' or 'extern' were used to declare 10185 a variable. 10186 10187 If this variable is initialized (but does not require a 10188 constructor), the 'DECL_INITIAL' will be an expression for the 10189 initializer. The initializer should be evaluated, and a bitwise 10190 copy into the variable performed. If the 'DECL_INITIAL' is the 10191 'error_mark_node', there is an initializer, but it is given by an 10192 explicit statement later in the code; no bitwise copy is required. 10193 10194 GCC provides an extension that allows either automatic variables, 10195 or global variables, to be placed in particular registers. This 10196 extension is being used for a particular 'VAR_DECL' if 10197 'DECL_REGISTER' holds for the 'VAR_DECL', and if 10198 'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'. In that case, 10199 'DECL_ASSEMBLER_NAME' is the name of the register into which the 10200 variable will be placed. 10201 10202'PARM_DECL' 10203 Used to represent a parameter to a function. Treat these nodes 10204 similarly to 'VAR_DECL' nodes. These nodes only appear in the 10205 'DECL_ARGUMENTS' for a 'FUNCTION_DECL'. 10206 10207 The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will 10208 actually be used when a value is passed to this function. It may 10209 be a wider type than the 'TREE_TYPE' of the parameter; for example, 10210 the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is 10211 'int'. 10212 10213'DEBUG_EXPR_DECL' 10214 Used to represent an anonymous debug-information temporary created 10215 to hold an expression as it is optimized away, so that its value 10216 can be referenced in debug bind statements. 10217 10218'FIELD_DECL' 10219 These nodes represent non-static data members. The 'DECL_SIZE' and 10220 'DECL_ALIGN' behave as for 'VAR_DECL' nodes. The position of the 10221 field within the parent record is specified by a combination of 10222 three attributes. 'DECL_FIELD_OFFSET' is the position, counting in 10223 bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit 10224 of the field closest to the beginning of the structure. 10225 'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 10226 field within this word; this may be nonzero even for fields that 10227 are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than 10228 the natural alignment of the field's type. 10229 10230 If 'DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 10231 bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was 10232 originally specified for it, while DECL_TYPE may be a modified type 10233 with lesser precision, according to the size of the bit field. 10234 10235'NAMESPACE_DECL' 10236 Namespaces provide a name hierarchy for other declarations. They 10237 appear in the 'DECL_CONTEXT' of other '_DECL' nodes. 10238 10239 10240File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 10241 1024211.4.2 Internal structure 10243------------------------- 10244 10245'DECL' nodes are represented internally as a hierarchy of structures. 10246 10247* Menu: 10248 10249* Current structure hierarchy:: The current DECL node structure 10250hierarchy. 10251* Adding new DECL node types:: How to add a new DECL node to a 10252frontend. 10253 10254 10255File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 10256 1025711.4.2.1 Current structure hierarchy 10258.................................... 10259 10260'struct tree_decl_minimal' 10261 This is the minimal structure to inherit from in order for common 10262 'DECL' macros to work. The fields it contains are a unique ID, 10263 source location, context, and name. 10264 10265'struct tree_decl_common' 10266 This structure inherits from 'struct tree_decl_minimal'. It 10267 contains fields that most 'DECL' nodes need, such as a field to 10268 store alignment, machine mode, size, and attributes. 10269 10270'struct tree_field_decl' 10271 This structure inherits from 'struct tree_decl_common'. It is used 10272 to represent 'FIELD_DECL'. 10273 10274'struct tree_label_decl' 10275 This structure inherits from 'struct tree_decl_common'. It is used 10276 to represent 'LABEL_DECL'. 10277 10278'struct tree_translation_unit_decl' 10279 This structure inherits from 'struct tree_decl_common'. It is used 10280 to represent 'TRANSLATION_UNIT_DECL'. 10281 10282'struct tree_decl_with_rtl' 10283 This structure inherits from 'struct tree_decl_common'. It 10284 contains a field to store the low-level RTL associated with a 10285 'DECL' node. 10286 10287'struct tree_result_decl' 10288 This structure inherits from 'struct tree_decl_with_rtl'. It is 10289 used to represent 'RESULT_DECL'. 10290 10291'struct tree_const_decl' 10292 This structure inherits from 'struct tree_decl_with_rtl'. It is 10293 used to represent 'CONST_DECL'. 10294 10295'struct tree_parm_decl' 10296 This structure inherits from 'struct tree_decl_with_rtl'. It is 10297 used to represent 'PARM_DECL'. 10298 10299'struct tree_decl_with_vis' 10300 This structure inherits from 'struct tree_decl_with_rtl'. It 10301 contains fields necessary to store visibility information, as well 10302 as a section name and assembler name. 10303 10304'struct tree_var_decl' 10305 This structure inherits from 'struct tree_decl_with_vis'. It is 10306 used to represent 'VAR_DECL'. 10307 10308'struct tree_function_decl' 10309 This structure inherits from 'struct tree_decl_with_vis'. It is 10310 used to represent 'FUNCTION_DECL'. 10311 10312 10313File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 10314 1031511.4.2.2 Adding new DECL node types 10316................................... 10317 10318Adding a new 'DECL' tree consists of the following steps 10319 10320Add a new tree code for the 'DECL' node 10321 For language specific 'DECL' nodes, there is a '.def' file in each 10322 frontend directory where the tree code should be added. For 'DECL' 10323 nodes that are part of the middle-end, the code should be added to 10324 'tree.def'. 10325 10326Create a new structure type for the 'DECL' node 10327 These structures should inherit from one of the existing structures 10328 in the language hierarchy by using that structure as the first 10329 member. 10330 10331 struct tree_foo_decl 10332 { 10333 struct tree_decl_with_vis common; 10334 } 10335 10336 Would create a structure name 'tree_foo_decl' that inherits from 10337 'struct tree_decl_with_vis'. 10338 10339 For language specific 'DECL' nodes, this new structure type should 10340 go in the appropriate '.h' file. For 'DECL' nodes that are part of 10341 the middle-end, the structure type should go in 'tree.h'. 10342 10343Add a member to the tree structure enumerator for the node 10344 For garbage collection and dynamic checking purposes, each 'DECL' 10345 node structure type is required to have a unique enumerator value 10346 specified with it. For language specific 'DECL' nodes, this new 10347 enumerator value should go in the appropriate '.def' file. For 10348 'DECL' nodes that are part of the middle-end, the enumerator values 10349 are specified in 'treestruct.def'. 10350 10351Update 'union tree_node' 10352 In order to make your new structure type usable, it must be added 10353 to 'union tree_node'. For language specific 'DECL' nodes, a new 10354 entry should be added to the appropriate '.h' file of the form 10355 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 10356 For 'DECL' nodes that are part of the middle-end, the additional 10357 member goes directly into 'union tree_node' in 'tree.h'. 10358 10359Update dynamic checking info 10360 In order to be able to check whether accessing a named portion of 10361 'union tree_node' is legal, and whether a certain 'DECL' node 10362 contains one of the enumerated 'DECL' node structures in the 10363 hierarchy, a simple lookup table is used. This lookup table needs 10364 to be kept up to date with the tree structure hierarchy, or else 10365 checking and containment macros will fail inappropriately. 10366 10367 For language specific 'DECL' nodes, their is an 'init_ts' function 10368 in an appropriate '.c' file, which initializes the lookup table. 10369 Code setting up the table for new 'DECL' nodes should be added 10370 there. For each 'DECL' tree code and enumerator value representing 10371 a member of the inheritance hierarchy, the table should contain 1 10372 if that tree code inherits (directly or indirectly) from that 10373 member. Thus, a 'FOO_DECL' node derived from 'struct 10374 decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up 10375 as follows 10376 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 10377 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 10378 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 10379 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 10380 10381 For 'DECL' nodes that are part of the middle-end, the setup code 10382 goes into 'tree.c'. 10383 10384Add macros to access any new fields and flags 10385 10386 Each added field or flag should have a macro that is used to access 10387 it, that performs appropriate checking to ensure only the right 10388 type of 'DECL' nodes access the field. 10389 10390 These macros generally take the following form 10391 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 10392 However, if the structure is simply a base class for further 10393 structures, something like the following should be used 10394 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 10395 #define BASE_STRUCT_FIELDNAME(NODE) \ 10396 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 10397 10398 Reading them from the generated 'all-tree.def' file (which in turn 10399 includes all the 'tree.def' files), 'gencheck.c' is used during 10400 GCC's build to generate the '*_CHECK' macros for all tree codes. 10401 10402 10403File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 10404 1040511.5 Attributes in trees 10406======================== 10407 10408Attributes, as specified using the '__attribute__' keyword, are 10409represented internally as a 'TREE_LIST'. The 'TREE_PURPOSE' is the name 10410of the attribute, as an 'IDENTIFIER_NODE'. The 'TREE_VALUE' is a 10411'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if 10412there are no arguments; the arguments are stored as the 'TREE_VALUE' of 10413successive entries in the list, and may be identifiers or expressions. 10414The 'TREE_CHAIN' of the attribute is the next attribute in a list of 10415attributes applying to the same declaration or type, or 'NULL_TREE' if 10416there are no further attributes in the list. 10417 10418 Attributes may be attached to declarations and to types; these 10419attributes may be accessed with the following macros. All attributes 10420are stored in this way, and many also cause other changes to the 10421declaration or type or to other internal compiler data structures. 10422 10423 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 10424 This macro returns the attributes on the declaration DECL. 10425 10426 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 10427 This macro returns the attributes on the type TYPE. 10428 10429 10430File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 10431 1043211.6 Expressions 10433================ 10434 10435The internal representation for expressions is for the most part quite 10436straightforward. However, there are a few facts that one must bear in 10437mind. In particular, the expression "tree" is actually a directed 10438acyclic graph. (For example there may be many references to the integer 10439constant zero throughout the source program; many of these will be 10440represented by the same expression node.) You should not rely on 10441certain kinds of node being shared, nor should you rely on certain kinds 10442of nodes being unshared. 10443 10444 The following macros can be used with all expression nodes: 10445 10446'TREE_TYPE' 10447 Returns the type of the expression. This value may not be 10448 precisely the same type that would be given the expression in the 10449 original program. 10450 10451 In what follows, some nodes that one might expect to always have type 10452'bool' are documented to have either integral or boolean type. At some 10453point in the future, the C front end may also make use of this same 10454intermediate representation, and at this point these nodes will 10455certainly have integral type. The previous sentence is not meant to 10456imply that the C++ front end does not or will not give these nodes 10457integral type. 10458 10459 Below, we list the various kinds of expression nodes. Except where 10460noted otherwise, the operands to an expression are accessed using the 10461'TREE_OPERAND' macro. For example, to access the first operand to a 10462binary plus expression 'expr', use: 10463 10464 TREE_OPERAND (expr, 0) 10465 10466 As this example indicates, the operands are zero-indexed. 10467 10468* Menu: 10469 10470* Constants: Constant expressions. 10471* Storage References:: 10472* Unary and Binary Expressions:: 10473* Vectors:: 10474 10475 10476File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 10477 1047811.6.1 Constant expressions 10479--------------------------- 10480 10481The table below begins with constants, moves on to unary expressions, 10482then proceeds to binary expressions, and concludes with various other 10483kinds of expressions: 10484 10485'INTEGER_CST' 10486 These nodes represent integer constants. Note that the type of 10487 these constants is obtained with 'TREE_TYPE'; they are not always 10488 of type 'int'. In particular, 'char' constants are represented 10489 with 'INTEGER_CST' nodes. The value of the integer constant 'e' is 10490 represented in an array of HOST_WIDE_INT. There are enough elements 10491 in the array to represent the value without taking extra elements 10492 for redundant 0s or -1. The number of elements used to represent 10493 'e' is available via 'TREE_INT_CST_NUNITS'. Element 'i' can be 10494 extracted by using 'TREE_INT_CST_ELT (e, i)'. 'TREE_INT_CST_LOW' 10495 is a shorthand for 'TREE_INT_CST_ELT (e, 0)'. 10496 10497 The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used 10498 to tell if the value is small enough to fit in a signed 10499 HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively. The value 10500 can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'. 10501 10502'REAL_CST' 10503 10504 FIXME: Talk about how to obtain representations of this constant, 10505 do comparisons, and so forth. 10506 10507'FIXED_CST' 10508 10509 These nodes represent fixed-point constants. The type of these 10510 constants is obtained with 'TREE_TYPE'. 'TREE_FIXED_CST_PTR' 10511 points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the 10512 structure itself. 'struct fixed_value' contains 'data' with the 10513 size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated 10514 fixed-point machine mode for 'data'. 10515 10516'COMPLEX_CST' 10517 These nodes are used to represent complex number constants, that is 10518 a '__complex__' whose parts are constant nodes. The 10519 'TREE_REALPART' and 'TREE_IMAGPART' return the real and the 10520 imaginary parts respectively. 10521 10522'VECTOR_CST' 10523 These nodes are used to represent vector constants. Each vector 10524 constant V is treated as a specific instance of an arbitrary-length 10525 sequence that itself contains 'VECTOR_CST_NPATTERNS (V)' 10526 interleaved patterns. Each pattern has the form: 10527 10528 { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... } 10529 10530 The first three elements in each pattern are enough to determine 10531 the values of the other elements. However, if all STEPs are zero, 10532 only the first two elements are needed. If in addition each BASE1 10533 is equal to the corresponding BASE0, only the first element in each 10534 pattern is needed. The number of encoded elements per pattern is 10535 given by 'VECTOR_CST_NELTS_PER_PATTERN (V)'. 10536 10537 For example, the constant: 10538 10539 { 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 } 10540 10541 is interpreted as an interleaving of the sequences: 10542 10543 { 0, 2, 3, 4, 5, 6, 7, 8 } 10544 { 1, 6, 8, 10, 12, 14, 16, 18 } 10545 10546 where the sequences are represented by the following patterns: 10547 10548 BASE0 == 0, BASE1 == 2, STEP == 1 10549 BASE0 == 1, BASE1 == 6, STEP == 2 10550 10551 In this case: 10552 10553 VECTOR_CST_NPATTERNS (V) == 2 10554 VECTOR_CST_NELTS_PER_PATTERN (V) == 3 10555 10556 The vector is therefore encoded using the first 6 elements ('{ 0, 10557 1, 2, 6, 3, 8 }'), with the remaining 10 elements being implicit 10558 extensions of them. 10559 10560 Sometimes this scheme can create two possible encodings of the same 10561 vector. For example { 0, 1 } could be seen as two patterns with 10562 one element each or one pattern with two elements (BASE0 and 10563 BASE1). The canonical encoding is always the one with the fewest 10564 patterns or (if both encodings have the same number of petterns) 10565 the one with the fewest encoded elements. 10566 10567 'vector_cst_encoding_nelts (V)' gives the total number of encoded 10568 elements in V, which is 6 in the example above. 10569 'VECTOR_CST_ENCODED_ELTS (V)' gives a pointer to the elements 10570 encoded in V and 'VECTOR_CST_ENCODED_ELT (V, I)' accesses the value 10571 of encoded element I. 10572 10573 'VECTOR_CST_DUPLICATE_P (V)' is true if V simply contains repeated 10574 instances of 'VECTOR_CST_NPATTERNS (V)' values. This is a 10575 shorthand for testing 'VECTOR_CST_NELTS_PER_PATTERN (V) == 1'. 10576 10577 'VECTOR_CST_STEPPED_P (V)' is true if at least one pattern in V has 10578 a nonzero step. This is a shorthand for testing 10579 'VECTOR_CST_NELTS_PER_PATTERN (V) == 3'. 10580 10581 The utility function 'vector_cst_elt' gives the value of an 10582 arbitrary index as a 'tree'. 'vector_cst_int_elt' gives the same 10583 value as a 'wide_int'. 10584 10585'STRING_CST' 10586 These nodes represent string-constants. The 'TREE_STRING_LENGTH' 10587 returns the length of the string, as an 'int'. The 10588 'TREE_STRING_POINTER' is a 'char*' containing the string itself. 10589 The string may not be 'NUL'-terminated, and it may contain embedded 10590 'NUL' characters. Therefore, the 'TREE_STRING_LENGTH' includes the 10591 trailing 'NUL' if it is present. 10592 10593 For wide string constants, the 'TREE_STRING_LENGTH' is the number 10594 of bytes in the string, and the 'TREE_STRING_POINTER' points to an 10595 array of the bytes of the string, as represented on the target 10596 system (that is, as integers in the target endianness). Wide and 10597 non-wide string constants are distinguished only by the 'TREE_TYPE' 10598 of the 'STRING_CST'. 10599 10600 FIXME: The formats of string constants are not well-defined when 10601 the target system bytes are not the same width as host system 10602 bytes. 10603 10604'POLY_INT_CST' 10605 These nodes represent invariants that depend on some 10606 target-specific runtime parameters. They consist of 10607 'NUM_POLY_INT_COEFFS' coefficients, with the first coefficient 10608 being the constant term and the others being multipliers that are 10609 applied to the runtime parameters. 10610 10611 'POLY_INT_CST_ELT (X, I)' references coefficient number I of 10612 'POLY_INT_CST' node X. Each coefficient is an 'INTEGER_CST'. 10613 10614 10615File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 10616 1061711.6.2 References to storage 10618---------------------------- 10619 10620'ARRAY_REF' 10621 These nodes represent array accesses. The first operand is the 10622 array; the second is the index. To calculate the address of the 10623 memory accessed, you must scale the index by the size of the type 10624 of the array elements. The type of these expressions must be the 10625 type of a component of the array. The third and fourth operands 10626 are used after gimplification to represent the lower bound and 10627 component size but should not be used directly; call 10628 'array_ref_low_bound' and 'array_ref_element_size' instead. 10629 10630'ARRAY_RANGE_REF' 10631 These nodes represent access to a range (or "slice") of an array. 10632 The operands are the same as that for 'ARRAY_REF' and have the same 10633 meanings. The type of these expressions must be an array whose 10634 component type is the same as that of the first operand. The range 10635 of that array type determines the amount of data these expressions 10636 access. 10637 10638'TARGET_MEM_REF' 10639 These nodes represent memory accesses whose address directly map to 10640 an addressing mode of the target architecture. The first argument 10641 is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed 10642 address. The second argument is 'TMR_BASE' and the third one is 10643 'TMR_INDEX'. The fourth argument is 'TMR_STEP' and must be an 10644 'INTEGER_CST'. The fifth argument is 'TMR_OFFSET' and must be an 10645 'INTEGER_CST'. Any of the arguments may be NULL if the appropriate 10646 component does not appear in the address. Address of the 10647 'TARGET_MEM_REF' is determined in the following way. 10648 10649 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 10650 10651 The sixth argument is the reference to the original memory access, 10652 which is preserved for the purposes of the RTL alias analysis. The 10653 seventh argument is a tag representing the results of tree level 10654 alias analysis. 10655 10656'ADDR_EXPR' 10657 These nodes are used to represent the address of an object. (These 10658 expressions will always have pointer or reference type.) The 10659 operand may be another expression, or it may be a declaration. 10660 10661 As an extension, GCC allows users to take the address of a label. 10662 In this case, the operand of the 'ADDR_EXPR' will be a 10663 'LABEL_DECL'. The type of such an expression is 'void*'. 10664 10665 If the object addressed is not an lvalue, a temporary is created, 10666 and the address of the temporary is used. 10667 10668'INDIRECT_REF' 10669 These nodes are used to represent the object pointed to by a 10670 pointer. The operand is the pointer being dereferenced; it will 10671 always have pointer or reference type. 10672 10673'MEM_REF' 10674 These nodes are used to represent the object pointed to by a 10675 pointer offset by a constant. The first operand is the pointer 10676 being dereferenced; it will always have pointer or reference type. 10677 The second operand is a pointer constant. Its type is specifying 10678 the type to be used for type-based alias analysis. 10679 10680'COMPONENT_REF' 10681 These nodes represent non-static data member accesses. The first 10682 operand is the object (rather than a pointer to it); the second 10683 operand is the 'FIELD_DECL' for the data member. The third operand 10684 represents the byte offset of the field, but should not be used 10685 directly; call 'component_ref_field_offset' instead. 10686 10687 10688File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 10689 1069011.6.3 Unary and Binary Expressions 10691----------------------------------- 10692 10693'NEGATE_EXPR' 10694 These nodes represent unary negation of the single operand, for 10695 both integer and floating-point types. The type of negation can be 10696 determined by looking at the type of the expression. 10697 10698 The behavior of this operation on signed arithmetic overflow is 10699 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 10700 10701'ABS_EXPR' 10702 These nodes represent the absolute value of the single operand, for 10703 both integer and floating-point types. This is typically used to 10704 implement the 'abs', 'labs' and 'llabs' builtins for integer types, 10705 and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point 10706 types. The type of abs operation can be determined by looking at 10707 the type of the expression. 10708 10709 This node is not used for complex types. To represent the modulus 10710 or complex abs of a complex value, use the 'BUILT_IN_CABS', 10711 'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement 10712 the C99 'cabs', 'cabsf' and 'cabsl' built-in functions. 10713 10714'ABSU_EXPR' 10715 These nodes represent the absolute value of the single operand in 10716 equivalent unsigned type such that 'ABSU_EXPR' of 'TYPE_MIN' is 10717 well defined. 10718 10719'BIT_NOT_EXPR' 10720 These nodes represent bitwise complement, and will always have 10721 integral type. The only operand is the value to be complemented. 10722 10723'TRUTH_NOT_EXPR' 10724 These nodes represent logical negation, and will always have 10725 integral (or boolean) type. The operand is the value being 10726 negated. The type of the operand and that of the result are always 10727 of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 10728 10729'PREDECREMENT_EXPR' 10730'PREINCREMENT_EXPR' 10731'POSTDECREMENT_EXPR' 10732'POSTINCREMENT_EXPR' 10733 These nodes represent increment and decrement expressions. The 10734 value of the single operand is computed, and the operand 10735 incremented or decremented. In the case of 'PREDECREMENT_EXPR' and 10736 'PREINCREMENT_EXPR', the value of the expression is the value 10737 resulting after the increment or decrement; in the case of 10738 'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before 10739 the increment or decrement occurs. The type of the operand, like 10740 that of the result, will be either integral, boolean, or 10741 floating-point. 10742 10743'FIX_TRUNC_EXPR' 10744 These nodes represent conversion of a floating-point value to an 10745 integer. The single operand will have a floating-point type, while 10746 the complete expression will have an integral (or boolean) type. 10747 The operand is rounded towards zero. 10748 10749'FLOAT_EXPR' 10750 These nodes represent conversion of an integral (or boolean) value 10751 to a floating-point value. The single operand will have integral 10752 type, while the complete expression will have a floating-point 10753 type. 10754 10755 FIXME: How is the operand supposed to be rounded? Is this 10756 dependent on '-mieee'? 10757 10758'COMPLEX_EXPR' 10759 These nodes are used to represent complex numbers constructed from 10760 two expressions of the same (integer or real) type. The first 10761 operand is the real part and the second operand is the imaginary 10762 part. 10763 10764'CONJ_EXPR' 10765 These nodes represent the conjugate of their operand. 10766 10767'REALPART_EXPR' 10768'IMAGPART_EXPR' 10769 These nodes represent respectively the real and the imaginary parts 10770 of complex numbers (their sole argument). 10771 10772'NON_LVALUE_EXPR' 10773 These nodes indicate that their one and only operand is not an 10774 lvalue. A back end can treat these identically to the single 10775 operand. 10776 10777'NOP_EXPR' 10778 These nodes are used to represent conversions that do not require 10779 any code-generation. For example, conversion of a 'char*' to an 10780 'int*' does not require any code be generated; such a conversion is 10781 represented by a 'NOP_EXPR'. The single operand is the expression 10782 to be converted. The conversion from a pointer to a reference is 10783 also represented with a 'NOP_EXPR'. 10784 10785'CONVERT_EXPR' 10786 These nodes are similar to 'NOP_EXPR's, but are used in those 10787 situations where code may need to be generated. For example, if an 10788 'int*' is converted to an 'int' code may need to be generated on 10789 some platforms. These nodes are never used for C++-specific 10790 conversions, like conversions between pointers to different classes 10791 in an inheritance hierarchy. Any adjustments that need to be made 10792 in such cases are always indicated explicitly. Similarly, a 10793 user-defined conversion is never represented by a 'CONVERT_EXPR'; 10794 instead, the function calls are made explicit. 10795 10796'FIXED_CONVERT_EXPR' 10797 These nodes are used to represent conversions that involve 10798 fixed-point values. For example, from a fixed-point value to 10799 another fixed-point value, from an integer to a fixed-point value, 10800 from a fixed-point value to an integer, from a floating-point value 10801 to a fixed-point value, or from a fixed-point value to a 10802 floating-point value. 10803 10804'LSHIFT_EXPR' 10805'RSHIFT_EXPR' 10806 These nodes represent left and right shifts, respectively. The 10807 first operand is the value to shift; it will always be of integral 10808 type. The second operand is an expression for the number of bits 10809 by which to shift. Right shift should be treated as arithmetic, 10810 i.e., the high-order bits should be zero-filled when the expression 10811 has unsigned type and filled with the sign bit when the expression 10812 has signed type. Note that the result is undefined if the second 10813 operand is larger than or equal to the first operand's type size. 10814 Unlike most nodes, these can have a vector as first operand and a 10815 scalar as second operand. 10816 10817'BIT_IOR_EXPR' 10818'BIT_XOR_EXPR' 10819'BIT_AND_EXPR' 10820 These nodes represent bitwise inclusive or, bitwise exclusive or, 10821 and bitwise and, respectively. Both operands will always have 10822 integral type. 10823 10824'TRUTH_ANDIF_EXPR' 10825'TRUTH_ORIF_EXPR' 10826 These nodes represent logical "and" and logical "or", respectively. 10827 These operators are not strict; i.e., the second operand is 10828 evaluated only if the value of the expression is not determined by 10829 evaluation of the first operand. The type of the operands and that 10830 of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 10831 10832'TRUTH_AND_EXPR' 10833'TRUTH_OR_EXPR' 10834'TRUTH_XOR_EXPR' 10835 These nodes represent logical and, logical or, and logical 10836 exclusive or. They are strict; both arguments are always 10837 evaluated. There are no corresponding operators in C or C++, but 10838 the front end will sometimes generate these expressions anyhow, if 10839 it can tell that strictness does not matter. The type of the 10840 operands and that of the result are always of 'BOOLEAN_TYPE' or 10841 'INTEGER_TYPE'. 10842 10843'POINTER_PLUS_EXPR' 10844 This node represents pointer arithmetic. The first operand is 10845 always a pointer/reference type. The second operand is always an 10846 unsigned integer type compatible with sizetype. This and 10847 POINTER_DIFF_EXPR are the only binary arithmetic operators that can 10848 operate on pointer types. 10849 10850'POINTER_DIFF_EXPR' 10851 This node represents pointer subtraction. The two operands always 10852 have pointer/reference type. It returns a signed integer of the 10853 same precision as the pointers. The behavior is undefined if the 10854 difference of the two pointers, seen as infinite precision 10855 non-negative integers, does not fit in the result type. The result 10856 does not depend on the pointer type, it is not divided by the size 10857 of the pointed-to type. 10858 10859'PLUS_EXPR' 10860'MINUS_EXPR' 10861'MULT_EXPR' 10862 These nodes represent various binary arithmetic operations. 10863 Respectively, these operations are addition, subtraction (of the 10864 second operand from the first) and multiplication. Their operands 10865 may have either integral or floating type, but there will never be 10866 case in which one operand is of floating type and the other is of 10867 integral type. 10868 10869 The behavior of these operations on signed arithmetic overflow is 10870 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 10871 10872'MULT_HIGHPART_EXPR' 10873 This node represents the "high-part" of a widening multiplication. 10874 For an integral type with B bits of precision, the result is the 10875 most significant B bits of the full 2B product. 10876 10877'RDIV_EXPR' 10878 This node represents a floating point division operation. 10879 10880'TRUNC_DIV_EXPR' 10881'FLOOR_DIV_EXPR' 10882'CEIL_DIV_EXPR' 10883'ROUND_DIV_EXPR' 10884 These nodes represent integer division operations that return an 10885 integer result. 'TRUNC_DIV_EXPR' rounds towards zero, 10886 'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR' 10887 rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the 10888 closest integer. Integer division in C and C++ is truncating, i.e. 10889 'TRUNC_DIV_EXPR'. 10890 10891 The behavior of these operations on signed arithmetic overflow, 10892 when dividing the minimum signed integer by minus one, is 10893 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 10894 10895'TRUNC_MOD_EXPR' 10896'FLOOR_MOD_EXPR' 10897'CEIL_MOD_EXPR' 10898'ROUND_MOD_EXPR' 10899 These nodes represent the integer remainder or modulus operation. 10900 The integer modulus of two operands 'a' and 'b' is defined as 'a - 10901 (a/b)*b' where the division calculated using the corresponding 10902 division operator. Hence for 'TRUNC_MOD_EXPR' this definition 10903 assumes division using truncation towards zero, i.e. 10904 'TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 10905 division, i.e. 'TRUNC_MOD_EXPR'. 10906 10907'EXACT_DIV_EXPR' 10908 The 'EXACT_DIV_EXPR' code is used to represent integer divisions 10909 where the numerator is known to be an exact multiple of the 10910 denominator. This allows the backend to choose between the faster 10911 of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the 10912 current target. 10913 10914'LT_EXPR' 10915'LE_EXPR' 10916'GT_EXPR' 10917'GE_EXPR' 10918'LTGT_EXPR' 10919'EQ_EXPR' 10920'NE_EXPR' 10921 These nodes represent the less than, less than or equal to, greater 10922 than, greater than or equal to, less or greater than, equal, and 10923 not equal comparison operators. The first and second operands will 10924 either be both of integral type, both of floating type or both of 10925 vector type, except for LTGT_EXPR where they will only be both of 10926 floating type. The result type of these expressions will always be 10927 of integral, boolean or signed integral vector type. These 10928 operations return the result type's zero value for false, the 10929 result type's one value for true, and a vector whose elements are 10930 zero (false) or minus one (true) for vectors. 10931 10932 For floating point comparisons, if we honor IEEE NaNs and either 10933 operand is NaN, then 'NE_EXPR' always returns true and the 10934 remaining operators always return false. On some targets, 10935 comparisons against an IEEE NaN, other than equality and 10936 inequality, may generate a floating-point exception. 10937 10938'ORDERED_EXPR' 10939'UNORDERED_EXPR' 10940 These nodes represent non-trapping ordered and unordered comparison 10941 operators. These operations take two floating point operands and 10942 determine whether they are ordered or unordered relative to each 10943 other. If either operand is an IEEE NaN, their comparison is 10944 defined to be unordered, otherwise the comparison is defined to be 10945 ordered. The result type of these expressions will always be of 10946 integral or boolean type. These operations return the result 10947 type's zero value for false, and the result type's one value for 10948 true. 10949 10950'UNLT_EXPR' 10951'UNLE_EXPR' 10952'UNGT_EXPR' 10953'UNGE_EXPR' 10954'UNEQ_EXPR' 10955 These nodes represent the unordered comparison operators. These 10956 operations take two floating point operands and determine whether 10957 the operands are unordered or are less than, less than or equal to, 10958 greater than, greater than or equal to, or equal respectively. For 10959 example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN 10960 or the first operand is less than the second. All these operations 10961 are guaranteed not to generate a floating point exception. The 10962 result type of these expressions will always be of integral or 10963 boolean type. These operations return the result type's zero value 10964 for false, and the result type's one value for true. 10965 10966'MODIFY_EXPR' 10967 These nodes represent assignment. The left-hand side is the first 10968 operand; the right-hand side is the second operand. The left-hand 10969 side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or 10970 other lvalue. 10971 10972 These nodes are used to represent not only assignment with '=' but 10973 also compound assignments (like '+='), by reduction to '=' 10974 assignment. In other words, the representation for 'i += 3' looks 10975 just like that for 'i = i + 3'. 10976 10977'INIT_EXPR' 10978 These nodes are just like 'MODIFY_EXPR', but are used only when a 10979 variable is initialized, rather than assigned to subsequently. 10980 This means that we can assume that the target of the initialization 10981 is not used in computing its own value; any reference to the lhs in 10982 computing the rhs is undefined. 10983 10984'COMPOUND_EXPR' 10985 These nodes represent comma-expressions. The first operand is an 10986 expression whose value is computed and thrown away prior to the 10987 evaluation of the second operand. The value of the entire 10988 expression is the value of the second operand. 10989 10990'COND_EXPR' 10991 These nodes represent '?:' expressions. The first operand is of 10992 boolean or integral type. If it evaluates to a nonzero value, the 10993 second operand should be evaluated, and returned as the value of 10994 the expression. Otherwise, the third operand is evaluated, and 10995 returned as the value of the expression. 10996 10997 The second operand must have the same type as the entire 10998 expression, unless it unconditionally throws an exception or calls 10999 a noreturn function, in which case it should have void type. The 11000 same constraints apply to the third operand. This allows array 11001 bounds checks to be represented conveniently as '(i >= 0 && i < 10) 11002 ? i : abort()'. 11003 11004 As a GNU extension, the C language front-ends allow the second 11005 operand of the '?:' operator may be omitted in the source. For 11006 example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x' 11007 is an expression without side effects. In the tree representation, 11008 however, the second operand is always present, possibly protected 11009 by 'SAVE_EXPR' if the first argument does cause side effects. 11010 11011'CALL_EXPR' 11012 These nodes are used to represent calls to functions, including 11013 non-static member functions. 'CALL_EXPR's are implemented as 11014 expression nodes with a variable number of operands. Rather than 11015 using 'TREE_OPERAND' to extract them, it is preferable to use the 11016 specialized accessor macros and functions that operate specifically 11017 on 'CALL_EXPR' nodes. 11018 11019 'CALL_EXPR_FN' returns a pointer to the function to call; it is 11020 always an expression whose type is a 'POINTER_TYPE'. 11021 11022 The number of arguments to the call is returned by 11023 'call_expr_nargs', while the arguments themselves can be accessed 11024 with the 'CALL_EXPR_ARG' macro. The arguments are zero-indexed and 11025 numbered left-to-right. You can iterate over the arguments using 11026 'FOR_EACH_CALL_EXPR_ARG', as in: 11027 11028 tree call, arg; 11029 call_expr_arg_iterator iter; 11030 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 11031 /* arg is bound to successive arguments of call. */ 11032 ...; 11033 11034 For non-static member functions, there will be an operand 11035 corresponding to the 'this' pointer. There will always be 11036 expressions corresponding to all of the arguments, even if the 11037 function is declared with default arguments and some arguments are 11038 not explicitly provided at the call sites. 11039 11040 'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is 11041 used to implement nested functions. This operand is otherwise 11042 null. 11043 11044'CLEANUP_POINT_EXPR' 11045 These nodes represent full-expressions. The single operand is an 11046 expression to evaluate. Any destructor calls engendered by the 11047 creation of temporaries during the evaluation of that expression 11048 should be performed immediately after the expression is evaluated. 11049 11050'CONSTRUCTOR' 11051 These nodes represent the brace-enclosed initializers for a 11052 structure or an array. They contain a sequence of component values 11053 made out of a vector of constructor_elt, which is a ('INDEX', 11054 'VALUE') pair. 11055 11056 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE', 11057 'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in 11058 the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the 11059 expression used to initialize that field. 11060 11061 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then 11062 the 'INDEX' of each node in the sequence will be an 'INTEGER_CST' 11063 or a 'RANGE_EXPR' of two 'INTEGER_CST's. A single 'INTEGER_CST' 11064 indicates which element of the array is being assigned to. A 11065 'RANGE_EXPR' indicates an inclusive range of elements to 11066 initialize. In both cases the 'VALUE' is the corresponding 11067 initializer. It is re-evaluated for each element of a 11068 'RANGE_EXPR'. If the 'INDEX' is 'NULL_TREE', then the initializer 11069 is for the next available array element. 11070 11071 In the front end, you should not depend on the fields appearing in 11072 any particular order. However, in the middle end, fields must 11073 appear in declaration order. You should not assume that all fields 11074 will be represented. Unrepresented fields will be cleared 11075 (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which 11076 case their value becomes undefined. 11077 11078'COMPOUND_LITERAL_EXPR' 11079 These nodes represent ISO C99 compound literals. The 11080 'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an 11081 anonymous 'VAR_DECL' for the unnamed object represented by the 11082 compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a 11083 'CONSTRUCTOR' representing the brace-enclosed list of initializers 11084 in the compound literal. That anonymous 'VAR_DECL' can also be 11085 accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro. 11086 11087'SAVE_EXPR' 11088 11089 A 'SAVE_EXPR' represents an expression (possibly involving side 11090 effects) that is used more than once. The side effects should 11091 occur only the first time the expression is evaluated. Subsequent 11092 uses should just reuse the computed value. The first operand to 11093 the 'SAVE_EXPR' is the expression to evaluate. The side effects 11094 should be executed where the 'SAVE_EXPR' is first encountered in a 11095 depth-first preorder traversal of the expression tree. 11096 11097'TARGET_EXPR' 11098 A 'TARGET_EXPR' represents a temporary object. The first operand 11099 is a 'VAR_DECL' for the temporary variable. The second operand is 11100 the initializer for the temporary. The initializer is evaluated 11101 and, if non-void, copied (bitwise) into the temporary. If the 11102 initializer is void, that means that it will perform the 11103 initialization itself. 11104 11105 Often, a 'TARGET_EXPR' occurs on the right-hand side of an 11106 assignment, or as the second operand to a comma-expression which is 11107 itself the right-hand side of an assignment, etc. In this case, we 11108 say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is 11109 "orphaned". For a normal 'TARGET_EXPR' the temporary variable 11110 should be treated as an alias for the left-hand side of the 11111 assignment, rather than as a new temporary variable. 11112 11113 The third operand to the 'TARGET_EXPR', if present, is a 11114 cleanup-expression (i.e., destructor call) for the temporary. If 11115 this expression is orphaned, then this expression must be executed 11116 when the statement containing this expression is complete. These 11117 cleanups must always be executed in the order opposite to that in 11118 which they were encountered. Note that if a temporary is created 11119 on one branch of a conditional operator (i.e., in the second or 11120 third operand to a 'COND_EXPR'), the cleanup must be run only if 11121 that branch is actually executed. 11122 11123'VA_ARG_EXPR' 11124 This node is used to implement support for the C/C++ variable 11125 argument-list mechanism. It represents expressions like 'va_arg 11126 (ap, type)'. Its 'TREE_TYPE' yields the tree representation for 11127 'type' and its sole argument yields the representation for 'ap'. 11128 11129'ANNOTATE_EXPR' 11130 This node is used to attach markers to an expression. The first 11131 operand is the annotated expression, the second is an 'INTEGER_CST' 11132 with a value from 'enum annot_expr_kind', the third is an 11133 'INTEGER_CST'. 11134 11135 11136File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 11137 1113811.6.4 Vectors 11139-------------- 11140 11141'VEC_DUPLICATE_EXPR' 11142 This node has a single operand and represents a vector in which 11143 every element is equal to that operand. 11144 11145'VEC_SERIES_EXPR' 11146 This node represents a vector formed from a scalar base and step, 11147 given as the first and second operands respectively. Element I of 11148 the result is equal to 'BASE + I*STEP'. 11149 11150 This node is restricted to integral types, in order to avoid 11151 specifying the rounding behavior for floating-point types. 11152 11153'VEC_LSHIFT_EXPR' 11154'VEC_RSHIFT_EXPR' 11155 These nodes represent whole vector left and right shifts, 11156 respectively. The first operand is the vector to shift; it will 11157 always be of vector type. The second operand is an expression for 11158 the number of bits by which to shift. Note that the result is 11159 undefined if the second operand is larger than or equal to the 11160 first operand's type size. 11161 11162'VEC_WIDEN_MULT_HI_EXPR' 11163'VEC_WIDEN_MULT_LO_EXPR' 11164 These nodes represent widening vector multiplication of the high 11165 and low parts of the two input vectors, respectively. Their 11166 operands are vectors that contain the same number of elements ('N') 11167 of the same integral type. The result is a vector that contains 11168 half as many elements, of an integral type whose size is twice as 11169 wide. In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2' 11170 elements of the two vector are multiplied to produce the vector of 11171 'N/2' products. In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low 11172 'N/2' elements of the two vector are multiplied to produce the 11173 vector of 'N/2' products. 11174 11175'VEC_UNPACK_HI_EXPR' 11176'VEC_UNPACK_LO_EXPR' 11177 These nodes represent unpacking of the high and low parts of the 11178 input vector, respectively. The single operand is a vector that 11179 contains 'N' elements of the same integral or floating point type. 11180 The result is a vector that contains half as many elements, of an 11181 integral or floating point type whose size is twice as wide. In 11182 the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the 11183 vector are extracted and widened (promoted). In the case of 11184 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are 11185 extracted and widened (promoted). 11186 11187'VEC_UNPACK_FLOAT_HI_EXPR' 11188'VEC_UNPACK_FLOAT_LO_EXPR' 11189 These nodes represent unpacking of the high and low parts of the 11190 input vector, where the values are converted from fixed point to 11191 floating point. The single operand is a vector that contains 'N' 11192 elements of the same integral type. The result is a vector that 11193 contains half as many elements of a floating point type whose size 11194 is twice as wide. In the case of 'VEC_UNPACK_FLOAT_HI_EXPR' the 11195 high 'N/2' elements of the vector are extracted, converted and 11196 widened. In the case of 'VEC_UNPACK_FLOAT_LO_EXPR' the low 'N/2' 11197 elements of the vector are extracted, converted and widened. 11198 11199'VEC_UNPACK_FIX_TRUNC_HI_EXPR' 11200'VEC_UNPACK_FIX_TRUNC_LO_EXPR' 11201 These nodes represent unpacking of the high and low parts of the 11202 input vector, where the values are truncated from floating point to 11203 fixed point. The single operand is a vector that contains 'N' 11204 elements of the same floating point type. The result is a vector 11205 that contains half as many elements of an integral type whose size 11206 is twice as wide. In the case of 'VEC_UNPACK_FIX_TRUNC_HI_EXPR' 11207 the high 'N/2' elements of the vector are extracted and converted 11208 with truncation. In the case of 'VEC_UNPACK_FIX_TRUNC_LO_EXPR' the 11209 low 'N/2' elements of the vector are extracted and converted with 11210 truncation. 11211 11212'VEC_PACK_TRUNC_EXPR' 11213 This node represents packing of truncated elements of the two input 11214 vectors into the output vector. Input operands are vectors that 11215 contain the same number of elements of the same integral or 11216 floating point type. The result is a vector that contains twice as 11217 many elements of an integral or floating point type whose size is 11218 half as wide. The elements of the two vectors are demoted and 11219 merged (concatenated) to form the output vector. 11220 11221'VEC_PACK_SAT_EXPR' 11222 This node represents packing of elements of the two input vectors 11223 into the output vector using saturation. Input operands are 11224 vectors that contain the same number of elements of the same 11225 integral type. The result is a vector that contains twice as many 11226 elements of an integral type whose size is half as wide. The 11227 elements of the two vectors are demoted and merged (concatenated) 11228 to form the output vector. 11229 11230'VEC_PACK_FIX_TRUNC_EXPR' 11231 This node represents packing of elements of the two input vectors 11232 into the output vector, where the values are converted from 11233 floating point to fixed point. Input operands are vectors that 11234 contain the same number of elements of a floating point type. The 11235 result is a vector that contains twice as many elements of an 11236 integral type whose size is half as wide. The elements of the two 11237 vectors are merged (concatenated) to form the output vector. 11238 11239'VEC_PACK_FLOAT_EXPR' 11240 This node represents packing of elements of the two input vectors 11241 into the output vector, where the values are converted from fixed 11242 point to floating point. Input operands are vectors that contain 11243 the same number of elements of an integral type. The result is a 11244 vector that contains twice as many elements of floating point type 11245 whose size is half as wide. The elements of the two vectors are 11246 merged (concatenated) to form the output vector. 11247 11248'VEC_COND_EXPR' 11249 These nodes represent '?:' expressions. The three operands must be 11250 vectors of the same size and number of elements. The second and 11251 third operands must have the same type as the entire expression. 11252 The first operand is of signed integral vector type. If an element 11253 of the first operand evaluates to a zero value, the corresponding 11254 element of the result is taken from the third operand. If it 11255 evaluates to a minus one value, it is taken from the second 11256 operand. It should never evaluate to any other value currently, 11257 but optimizations should not rely on that property. In contrast 11258 with a 'COND_EXPR', all operands are always evaluated. 11259 11260'SAD_EXPR' 11261 This node represents the Sum of Absolute Differences operation. 11262 The three operands must be vectors of integral types. The first 11263 and second operand must have the same type. The size of the vector 11264 element of the third operand must be at lease twice of the size of 11265 the vector element of the first and second one. The SAD is 11266 calculated between the first and second operands, added to the 11267 third operand, and returned. 11268 11269 11270File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 11271 1127211.7 Statements 11273=============== 11274 11275Most statements in GIMPLE are assignment statements, represented by 11276'GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 11277a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'. 11278 11279 There are also several varieties of complex statements. 11280 11281* Menu: 11282 11283* Basic Statements:: 11284* Blocks:: 11285* Statement Sequences:: 11286* Empty Statements:: 11287* Jumps:: 11288* Cleanups:: 11289* OpenMP:: 11290* OpenACC:: 11291 11292 11293File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 11294 1129511.7.1 Basic Statements 11296----------------------- 11297 11298'ASM_EXPR' 11299 11300 Used to represent an inline assembly statement. For an inline 11301 assembly statement like: 11302 asm ("mov x, y"); 11303 The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x, 11304 y"'. If the original statement made use of the extended-assembly 11305 syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will 11306 be the outputs, inputs, and clobbers for the statement, represented 11307 as 'STRING_CST' nodes. The extended-assembly syntax looks like: 11308 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 11309 The first string is the 'ASM_STRING', containing the instruction 11310 template. The next two strings are the output and inputs, 11311 respectively; this statement has no clobbers. As this example 11312 indicates, "plain" assembly statements are merely a special case of 11313 extended assembly statements; they have no cv-qualifiers, outputs, 11314 inputs, or clobbers. All of the strings will be 'NUL'-terminated, 11315 and will contain no embedded 'NUL'-characters. 11316 11317 If the assembly statement is declared 'volatile', or if the 11318 statement was not an extended assembly statement, and is therefore 11319 implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold 11320 of the 'ASM_EXPR'. 11321 11322'DECL_EXPR' 11323 11324 Used to represent a local declaration. The 'DECL_EXPR_DECL' macro 11325 can be used to obtain the entity declared. This declaration may be 11326 a 'LABEL_DECL', indicating that the label declared is a local 11327 label. (As an extension, GCC allows the declaration of labels with 11328 scope.) In C, this declaration may be a 'FUNCTION_DECL', 11329 indicating the use of the GCC nested function extension. For more 11330 information, *note Functions::. 11331 11332'LABEL_EXPR' 11333 11334 Used to represent a label. The 'LABEL_DECL' declared by this 11335 statement can be obtained with the 'LABEL_EXPR_LABEL' macro. The 11336 'IDENTIFIER_NODE' giving the name of the label can be obtained from 11337 the 'LABEL_DECL' with 'DECL_NAME'. 11338 11339'GOTO_EXPR' 11340 11341 Used to represent a 'goto' statement. The 'GOTO_DESTINATION' will 11342 usually be a 'LABEL_DECL'. However, if the "computed goto" 11343 extension has been used, the 'GOTO_DESTINATION' will be an 11344 arbitrary expression indicating the destination. This expression 11345 will always have pointer type. 11346 11347'RETURN_EXPR' 11348 11349 Used to represent a 'return' statement. Operand 0 represents the 11350 value to return. It should either be the 'RESULT_DECL' for the 11351 containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the 11352 function's 'RESULT_DECL'. It will be 'NULL_TREE' if the statement 11353 was just 11354 return; 11355 11356'LOOP_EXPR' 11357 These nodes represent "infinite" loops. The 'LOOP_EXPR_BODY' 11358 represents the body of the loop. It should be executed forever, 11359 unless an 'EXIT_EXPR' is encountered. 11360 11361'EXIT_EXPR' 11362 These nodes represent conditional exits from the nearest enclosing 11363 'LOOP_EXPR'. The single operand is the condition; if it is 11364 nonzero, then the loop should be exited. An 'EXIT_EXPR' will only 11365 appear within a 'LOOP_EXPR'. 11366 11367'SWITCH_STMT' 11368 11369 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 11370 the expression on which the switch is occurring. See the 11371 documentation for an 'IF_STMT' for more information on the 11372 representation used for the condition. The 'SWITCH_STMT_BODY' is 11373 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 11374 original type of switch expression as given in the source, before 11375 any compiler conversions. 11376 11377'CASE_LABEL_EXPR' 11378 11379 Use to represent a 'case' label, range of 'case' labels, or a 11380 'default' label. If 'CASE_LOW' is 'NULL_TREE', then this is a 11381 'default' label. Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then 11382 this is an ordinary 'case' label. In this case, 'CASE_LOW' is an 11383 expression giving the value of the label. Both 'CASE_LOW' and 11384 'CASE_HIGH' are 'INTEGER_CST' nodes. These values will have the 11385 same type as the condition expression in the switch statement. 11386 11387 Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the 11388 statement is a range of case labels. Such statements originate 11389 with the extension that allows users to write things of the form: 11390 case 2 ... 5: 11391 The first value will be 'CASE_LOW', while the second will be 11392 'CASE_HIGH'. 11393 11394'DEBUG_BEGIN_STMT' 11395 11396 Marks the beginning of a source statement, for purposes of debug 11397 information generation. 11398 11399 11400File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 11401 1140211.7.2 Blocks 11403------------- 11404 11405Block scopes and the variables they declare in GENERIC are expressed 11406using the 'BIND_EXPR' code, which in previous versions of GCC was 11407primarily used for the C statement-expression extension. 11408 11409 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration 11410order through their 'TREE_CHAIN' field. Any runtime initialization is 11411moved out of 'DECL_INITIAL' and into a statement in the controlled 11412block. When gimplifying from C or C++, this initialization replaces the 11413'DECL_STMT'. These variables will never require cleanups. The scope of 11414these variables is just the body 11415 11416 Variable-length arrays (VLAs) complicate this process, as their size 11417often refers to variables initialized earlier in the block and their 11418initialization involves an explicit stack allocation. To handle this, 11419we add an indirection and replace them with a pointer to stack space 11420allocated by means of 'alloca'. In most cases, we also arrange for this 11421space to be reclaimed when the enclosing 'BIND_EXPR' is exited, the 11422exception to this being when there is an explicit call to 'alloca' in 11423the source code, in which case the stack is left depressed on exit of 11424the 'BIND_EXPR'. 11425 11426 A C++ program will usually contain more 'BIND_EXPR's than there are 11427syntactic blocks in the source code, since several C++ constructs have 11428implicit scopes associated with them. On the other hand, although the 11429C++ front end uses pseudo-scopes to handle cleanups for objects with 11430destructors, these don't translate into the GIMPLE form; multiple 11431declarations at the same level use the same 'BIND_EXPR'. 11432 11433 11434File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 11435 1143611.7.3 Statement Sequences 11437-------------------------- 11438 11439Multiple statements at the same nesting level are collected into a 11440'STATEMENT_LIST'. Statement lists are modified and traversed using the 11441interface in 'tree-iterator.h'. 11442 11443 11444File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 11445 1144611.7.4 Empty Statements 11447----------------------- 11448 11449Whenever possible, statements with no effect are discarded. But if they 11450are nested within another construct which cannot be discarded for some 11451reason, they are instead replaced with an empty statement, generated by 11452'build_empty_stmt'. Initially, all empty statements were shared, after 11453the pattern of the Java front end, but this caused a lot of trouble in 11454practice. 11455 11456 An empty statement is represented as '(void)0'. 11457 11458 11459File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 11460 1146111.7.5 Jumps 11462------------ 11463 11464Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'. 11465 11466 The operand of a 'GOTO_EXPR' must be either a label or a variable 11467containing the address to jump to. 11468 11469 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or 11470a 'MODIFY_EXPR' which sets the return value. It would be nice to move 11471the 'MODIFY_EXPR' into a separate statement, but the special return 11472semantics in 'expand_return' make that difficult. It may still happen 11473in the future, perhaps by moving most of that logic into 11474'expand_assignment'. 11475 11476 11477File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 11478 1147911.7.6 Cleanups 11480--------------- 11481 11482Destructors for local C++ objects and similar dynamic cleanups are 11483represented in GIMPLE by a 'TRY_FINALLY_EXPR'. 'TRY_FINALLY_EXPR' has 11484two operands, both of which are a sequence of statements to execute. 11485The first sequence is executed. When it completes the second sequence 11486is executed. 11487 11488 The first sequence may complete in the following ways: 11489 11490 1. Execute the last statement in the sequence and fall off the end. 11491 11492 2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside 11493 the sequence. 11494 11495 3. Execute a return statement ('RETURN_EXPR'). 11496 11497 4. Throw an exception. This is currently not explicitly represented 11498 in GIMPLE. 11499 11500 The second sequence is not executed if the first sequence completes by 11501calling 'setjmp' or 'exit' or any other function that does not return. 11502The second sequence is also not executed if the first sequence completes 11503via a non-local goto or a computed goto (in general the compiler does 11504not know whether such a goto statement exits the first sequence or not, 11505so we assume that it doesn't). 11506 11507 After the second sequence is executed, if it completes normally by 11508falling off the end, execution continues wherever the first sequence 11509would have continued, by falling off the end, or doing a goto, etc. 11510 11511 If the second sequence is an 'EH_ELSE_EXPR' selector, then the sequence 11512in its first operand is used when the first sequence completes normally, 11513and that in its second operand is used for exceptional cleanups, i.e., 11514when an exception propagates out of the first sequence. 11515 11516 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 11517to appear on every edge out of the controlled block; this reduces the 11518freedom to move code across these edges. Therefore, the EH lowering 11519pass which runs before most of the optimization passes eliminates these 11520expressions by explicitly adding the cleanup to each edge. Rethrowing 11521the exception is represented using 'RESX_EXPR'. 11522 11523 11524File: gccint.info, Node: OpenMP, Next: OpenACC, Prev: Cleanups, Up: Statements 11525 1152611.7.7 OpenMP 11527------------- 11528 11529All the statements starting with 'OMP_' represent directives and clauses 11530used by the OpenMP API <https://www.openmp.org>. 11531 11532'OMP_PARALLEL' 11533 11534 Represents '#pragma omp parallel [clause1 ... clauseN]'. It has 11535 four operands: 11536 11537 Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High 11538 GIMPLE forms. It contains the body of code to be executed by all 11539 the threads. During GIMPLE lowering, this operand becomes 'NULL' 11540 and the body is emitted linearly after 'OMP_PARALLEL'. 11541 11542 Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated 11543 with the directive. 11544 11545 Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it 11546 contains the 'FUNCTION_DECL' for the function that will contain the 11547 body of the parallel region. 11548 11549 Operand 'OMP_PARALLEL_DATA_ARG' is also created by 11550 'pass_lower_omp'. If there are shared variables to be communicated 11551 to the children threads, this operand will contain the 'VAR_DECL' 11552 that contains all the shared values and variables. 11553 11554'OMP_FOR' 11555 11556 Represents '#pragma omp for [clause1 ... clauseN]'. It has six 11557 operands: 11558 11559 Operand 'OMP_FOR_BODY' contains the loop body. 11560 11561 Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with 11562 the directive. 11563 11564 Operand 'OMP_FOR_INIT' is the loop initialization code of the form 11565 'VAR = N1'. 11566 11567 Operand 'OMP_FOR_COND' is the loop conditional expression of the 11568 form 'VAR {<,>,<=,>=} N2'. 11569 11570 Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR 11571 {+=,-=} INCR'. 11572 11573 Operand 'OMP_FOR_PRE_BODY' contains side effect code from operands 11574 'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'. These side 11575 effects are part of the 'OMP_FOR' block but must be evaluated 11576 before the start of loop body. 11577 11578 The loop index variable 'VAR' must be a signed integer variable, 11579 which is implicitly private to each thread. Bounds 'N1' and 'N2' 11580 and the increment expression 'INCR' are required to be loop 11581 invariant integer expressions that are evaluated without any 11582 synchronization. The evaluation order, frequency of evaluation and 11583 side effects are unspecified by the standard. 11584 11585'OMP_SECTIONS' 11586 11587 Represents '#pragma omp sections [clause1 ... clauseN]'. 11588 11589 Operand 'OMP_SECTIONS_BODY' contains the sections body, which in 11590 turn contains a set of 'OMP_SECTION' nodes for each of the 11591 concurrent sections delimited by '#pragma omp section'. 11592 11593 Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated 11594 with the directive. 11595 11596'OMP_SECTION' 11597 11598 Section delimiter for 'OMP_SECTIONS'. 11599 11600'OMP_SINGLE' 11601 11602 Represents '#pragma omp single'. 11603 11604 Operand 'OMP_SINGLE_BODY' contains the body of code to be executed 11605 by a single thread. 11606 11607 Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with 11608 the directive. 11609 11610'OMP_MASTER' 11611 11612 Represents '#pragma omp master'. 11613 11614 Operand 'OMP_MASTER_BODY' contains the body of code to be executed 11615 by the master thread. 11616 11617'OMP_ORDERED' 11618 11619 Represents '#pragma omp ordered'. 11620 11621 Operand 'OMP_ORDERED_BODY' contains the body of code to be executed 11622 in the sequential order dictated by the loop index variable. 11623 11624'OMP_CRITICAL' 11625 11626 Represents '#pragma omp critical [name]'. 11627 11628 Operand 'OMP_CRITICAL_BODY' is the critical section. 11629 11630 Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the 11631 critical section. 11632 11633'OMP_RETURN' 11634 11635 This does not represent any OpenMP directive, it is an artificial 11636 marker to indicate the end of the body of an OpenMP. It is used by 11637 the flow graph ('tree-cfg.c') and OpenMP region building code 11638 ('omp-low.c'). 11639 11640'OMP_CONTINUE' 11641 11642 Similarly, this instruction does not represent an OpenMP directive, 11643 it is used by 'OMP_FOR' (and similar codes) as well as 11644 'OMP_SECTIONS' to mark the place where the code needs to loop to 11645 the next iteration, or the next section, respectively. 11646 11647 In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'. 11648 But if there are cleanups that need to occur right after the 11649 looping body, it will be emitted between 'OMP_CONTINUE' and 11650 'OMP_RETURN'. 11651 11652'OMP_ATOMIC' 11653 11654 Represents '#pragma omp atomic'. 11655 11656 Operand 0 is the address at which the atomic operation is to be 11657 performed. 11658 11659 Operand 1 is the expression to evaluate. The gimplifier tries 11660 three alternative code generation strategies. Whenever possible, 11661 an atomic update built-in is used. If that fails, a 11662 compare-and-swap loop is attempted. If that also fails, a regular 11663 critical section around the expression is used. 11664 11665'OMP_CLAUSE' 11666 11667 Represents clauses associated with one of the 'OMP_' directives. 11668 Clauses are represented by separate subcodes defined in 'tree.h'. 11669 Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE', 11670 'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE', 11671 'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN', 11672 'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF', 11673 'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE', 11674 'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT', 11675 'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED', 11676 'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'. Each code 11677 represents the corresponding OpenMP clause. 11678 11679 Clauses associated with the same directive are chained together via 11680 'OMP_CLAUSE_CHAIN'. Those clauses that accept a list of variables 11681 are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'. 11682 Therefore, multiple variables under the same clause 'C' need to be 11683 represented as multiple 'C' clauses chained together. This 11684 facilitates adding new clauses during compilation. 11685 11686 11687File: gccint.info, Node: OpenACC, Prev: OpenMP, Up: Statements 11688 1168911.7.8 OpenACC 11690-------------- 11691 11692All the statements starting with 'OACC_' represent directives and 11693clauses used by the OpenACC API <https://www.openacc.org>. 11694 11695'OACC_CACHE' 11696 11697 Represents '#pragma acc cache (var ...)'. 11698 11699'OACC_DATA' 11700 11701 Represents '#pragma acc data [clause1 ... clauseN]'. 11702 11703'OACC_DECLARE' 11704 11705 Represents '#pragma acc declare [clause1 ... clauseN]'. 11706 11707'OACC_ENTER_DATA' 11708 11709 Represents '#pragma acc enter data [clause1 ... clauseN]'. 11710 11711'OACC_EXIT_DATA' 11712 11713 Represents '#pragma acc exit data [clause1 ... clauseN]'. 11714 11715'OACC_HOST_DATA' 11716 11717 Represents '#pragma acc host_data [clause1 ... clauseN]'. 11718 11719'OACC_KERNELS' 11720 11721 Represents '#pragma acc kernels [clause1 ... clauseN]'. 11722 11723'OACC_LOOP' 11724 11725 Represents '#pragma acc loop [clause1 ... clauseN]'. 11726 11727 See the description of the 'OMP_FOR' code. 11728 11729'OACC_PARALLEL' 11730 11731 Represents '#pragma acc parallel [clause1 ... clauseN]'. 11732 11733'OACC_SERIAL' 11734 11735 Represents '#pragma acc serial [clause1 ... clauseN]'. 11736 11737'OACC_UPDATE' 11738 11739 Represents '#pragma acc update [clause1 ... clauseN]'. 11740 11741 11742File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 11743 1174411.8 Functions 11745============== 11746 11747A function is represented by a 'FUNCTION_DECL' node. It stores the 11748basic pieces of the function such as body, parameters, and return type 11749as well as information on the surrounding context, visibility, and 11750linkage. 11751 11752* Menu: 11753 11754* Function Basics:: Function names, body, and parameters. 11755* Function Properties:: Context, linkage, etc. 11756 11757 11758File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 11759 1176011.8.1 Function Basics 11761---------------------- 11762 11763A function has four core parts: the name, the parameters, the result, 11764and the body. The following macros and functions access these parts of 11765a 'FUNCTION_DECL' as well as other basic features: 11766'DECL_NAME' 11767 This macro returns the unqualified name of the function, as an 11768 'IDENTIFIER_NODE'. For an instantiation of a function template, 11769 the 'DECL_NAME' is the unqualified name of the template, not 11770 something like 'f<int>'. The value of 'DECL_NAME' is undefined 11771 when used on a constructor, destructor, overloaded operator, or 11772 type-conversion operator, or any function that is implicitly 11773 generated by the compiler. See below for macros that can be used 11774 to distinguish these cases. 11775 11776'DECL_ASSEMBLER_NAME' 11777 This macro returns the mangled name of the function, also an 11778 'IDENTIFIER_NODE'. This name does not contain leading underscores 11779 on systems that prefix all identifiers with underscores. The 11780 mangled name is computed in the same way on all platforms; if 11781 special processing is required to deal with the object file format 11782 used on a particular platform, it is the responsibility of the back 11783 end to perform those modifications. (Of course, the back end 11784 should not modify 'DECL_ASSEMBLER_NAME' itself.) 11785 11786 Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be 11787 allocated (for the mangled name of the entity) so it should be used 11788 only when emitting assembly code. It should not be used within the 11789 optimizers to determine whether or not two declarations are the 11790 same, even though some of the existing optimizers do use it in that 11791 way. These uses will be removed over time. 11792 11793'DECL_ARGUMENTS' 11794 This macro returns the 'PARM_DECL' for the first argument to the 11795 function. Subsequent 'PARM_DECL' nodes can be obtained by 11796 following the 'TREE_CHAIN' links. 11797 11798'DECL_RESULT' 11799 This macro returns the 'RESULT_DECL' for the function. 11800 11801'DECL_SAVED_TREE' 11802 This macro returns the complete body of the function. 11803 11804'TREE_TYPE' 11805 This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the 11806 function. 11807 11808'DECL_INITIAL' 11809 A function that has a definition in the current translation unit 11810 will have a non-'NULL' 'DECL_INITIAL'. However, back ends should 11811 not make use of the particular value given by 'DECL_INITIAL'. 11812 11813 It should contain a tree of 'BLOCK' nodes that mirrors the scopes 11814 that variables are bound in the function. Each block contains a 11815 list of decls declared in a basic block, a pointer to a chain of 11816 blocks at the next lower scope level, then a pointer to the next 11817 block at the same level and a backpointer to the parent 'BLOCK' or 11818 'FUNCTION_DECL'. So given a function as follows: 11819 11820 void foo() 11821 { 11822 int a; 11823 { 11824 int b; 11825 } 11826 int c; 11827 } 11828 11829 you would get the following: 11830 11831 tree foo = FUNCTION_DECL; 11832 tree decl_a = VAR_DECL; 11833 tree decl_b = VAR_DECL; 11834 tree decl_c = VAR_DECL; 11835 tree block_a = BLOCK; 11836 tree block_b = BLOCK; 11837 tree block_c = BLOCK; 11838 BLOCK_VARS(block_a) = decl_a; 11839 BLOCK_SUBBLOCKS(block_a) = block_b; 11840 BLOCK_CHAIN(block_a) = block_c; 11841 BLOCK_SUPERCONTEXT(block_a) = foo; 11842 BLOCK_VARS(block_b) = decl_b; 11843 BLOCK_SUPERCONTEXT(block_b) = block_a; 11844 BLOCK_VARS(block_c) = decl_c; 11845 BLOCK_SUPERCONTEXT(block_c) = foo; 11846 DECL_INITIAL(foo) = block_a; 11847 11848 11849File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 11850 1185111.8.2 Function Properties 11852-------------------------- 11853 11854To determine the scope of a function, you can use the 'DECL_CONTEXT' 11855macro. This macro will return the class (either a 'RECORD_TYPE' or a 11856'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 11857a member. For a virtual function, this macro returns the class in which 11858the function was actually defined, not the base class in which the 11859virtual declaration occurred. 11860 11861 In C, the 'DECL_CONTEXT' for a function maybe another function. This 11862representation indicates that the GNU nested function extension is in 11863use. For details on the semantics of nested functions, see the GCC 11864Manual. The nested function can refer to local variables in its 11865containing function. Such references are not explicitly marked in the 11866tree structure; back ends must look at the 'DECL_CONTEXT' for the 11867referenced 'VAR_DECL'. If the 'DECL_CONTEXT' for the referenced 11868'VAR_DECL' is not the same as the function currently being processed, 11869and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference 11870is to a local variable in a containing function, and the back end must 11871take appropriate action. 11872 11873'DECL_EXTERNAL' 11874 This predicate holds if the function is undefined. 11875 11876'TREE_PUBLIC' 11877 This predicate holds if the function has external linkage. 11878 11879'TREE_STATIC' 11880 This predicate holds if the function has been defined. 11881 11882'TREE_THIS_VOLATILE' 11883 This predicate holds if the function does not return normally. 11884 11885'TREE_READONLY' 11886 This predicate holds if the function can only read its arguments. 11887 11888'DECL_PURE_P' 11889 This predicate holds if the function can only read its arguments, 11890 but may also read global memory. 11891 11892'DECL_VIRTUAL_P' 11893 This predicate holds if the function is virtual. 11894 11895'DECL_ARTIFICIAL' 11896 This macro holds if the function was implicitly generated by the 11897 compiler, rather than explicitly declared. In addition to 11898 implicitly generated class member functions, this macro holds for 11899 the special functions created to implement static initialization 11900 and destruction, to compute run-time type information, and so 11901 forth. 11902 11903'DECL_FUNCTION_SPECIFIC_TARGET' 11904 This macro returns a tree node that holds the target options that 11905 are to be used to compile this particular function or 'NULL_TREE' 11906 if the function is to be compiled with the target options specified 11907 on the command line. 11908 11909'DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 11910 This macro returns a tree node that holds the optimization options 11911 that are to be used to compile this particular function or 11912 'NULL_TREE' if the function is to be compiled with the optimization 11913 options specified on the command line. 11914 11915 11916File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 11917 1191811.9 Language-dependent trees 11919============================= 11920 11921Front ends may wish to keep some state associated with various GENERIC 11922trees while parsing. To support this, trees provide a set of flags that 11923may be used by the front end. They are accessed using 11924'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6. 11925 11926 If necessary, a front end can use some language-dependent tree codes in 11927its GENERIC representation, so long as it provides a hook for converting 11928them to GIMPLE and doesn't expect them to work with any (hypothetical) 11929optimizers that run before the conversion to GIMPLE. The intermediate 11930representation used while parsing C and C++ looks very little like 11931GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take 11932it as input and spit out GIMPLE. 11933 11934 11935File: gccint.info, Node: C and C++ Trees, Prev: Language-dependent trees, Up: GENERIC 11936 1193711.10 C and C++ Trees 11938===================== 11939 11940This section documents the internal representation used by GCC to 11941represent C and C++ source programs. When presented with a C or C++ 11942source program, GCC parses the program, performs semantic analysis 11943(including the generation of error messages), and then produces the 11944internal representation described here. This representation contains a 11945complete representation for the entire translation unit provided as 11946input to the front end. This representation is then typically processed 11947by a code-generator in order to produce machine code, but could also be 11948used in the creation of source browsers, intelligent editors, automatic 11949documentation generators, interpreters, and any other programs needing 11950the ability to process C or C++ code. 11951 11952 This section explains the internal representation. In particular, it 11953documents the internal representation for C and C++ source constructs, 11954and the macros, functions, and variables that can be used to access 11955these constructs. The C++ representation is largely a superset of the 11956representation used in the C front end. There is only one construct 11957used in C that does not appear in the C++ front end and that is the GNU 11958"nested function" extension. Many of the macros documented here do not 11959apply in C because the corresponding language constructs do not appear 11960in C. 11961 11962 The C and C++ front ends generate a mix of GENERIC trees and ones 11963specific to C and C++. These language-specific trees are higher-level 11964constructs than the ones in GENERIC to make the parser's job easier. 11965This section describes those trees that aren't part of GENERIC as well 11966as aspects of GENERIC trees that are treated in a language-specific 11967manner. 11968 11969 If you are developing a "back end", be it is a code-generator or some 11970other tool, that uses this representation, you may occasionally find 11971that you need to ask questions not easily answered by the functions and 11972macros available here. If that situation occurs, it is quite likely 11973that GCC already supports the functionality you desire, but that the 11974interface is simply not documented here. In that case, you should ask 11975the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting 11976the functionality you require. Similarly, if you find yourself writing 11977functions that do not deal directly with your back end, but instead 11978might be useful to other people using the GCC front end, you should 11979submit your patches for inclusion in GCC. 11980 11981* Menu: 11982 11983* Types for C++:: Fundamental and aggregate types. 11984* Namespaces:: Namespaces. 11985* Classes:: Classes. 11986* Functions for C++:: Overloading and accessors for C++. 11987* Statements for C++:: Statements specific to C and C++. 11988* C++ Expressions:: From 'typeid' to 'throw'. 11989 11990 11991File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 11992 1199311.10.1 Types for C++ 11994--------------------- 11995 11996In C++, an array type is not qualified; rather the type of the array 11997elements is qualified. This situation is reflected in the intermediate 11998representation. The macros described here will always examine the 11999qualification of the underlying element type when applied to an array 12000type. (If the element type is itself an array, then the recursion 12001continues until a non-array type is found, and the qualification of this 12002type is examined.) So, for example, 'CP_TYPE_CONST_P' will hold of the 12003type 'const int ()[7]', denoting an array of seven 'int's. 12004 12005 The following functions and macros deal with cv-qualification of types: 12006'cp_type_quals' 12007 This function returns the set of type qualifiers applied to this 12008 type. This value is 'TYPE_UNQUALIFIED' if no qualifiers have been 12009 applied. The 'TYPE_QUAL_CONST' bit is set if the type is 12010 'const'-qualified. The 'TYPE_QUAL_VOLATILE' bit is set if the type 12011 is 'volatile'-qualified. The 'TYPE_QUAL_RESTRICT' bit is set if 12012 the type is 'restrict'-qualified. 12013 12014'CP_TYPE_CONST_P' 12015 This macro holds if the type is 'const'-qualified. 12016 12017'CP_TYPE_VOLATILE_P' 12018 This macro holds if the type is 'volatile'-qualified. 12019 12020'CP_TYPE_RESTRICT_P' 12021 This macro holds if the type is 'restrict'-qualified. 12022 12023'CP_TYPE_CONST_NON_VOLATILE_P' 12024 This predicate holds for a type that is 'const'-qualified, but 12025 _not_ 'volatile'-qualified; other cv-qualifiers are ignored as 12026 well: only the 'const'-ness is tested. 12027 12028 A few other macros and functions are usable with all types: 12029'TYPE_SIZE' 12030 The number of bits required to represent the type, represented as 12031 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 12032 'NULL_TREE'. 12033 12034'TYPE_ALIGN' 12035 The alignment of the type, in bits, represented as an 'int'. 12036 12037'TYPE_NAME' 12038 This macro returns a declaration (in the form of a 'TYPE_DECL') for 12039 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 12040 as you might expect, given its name!) You can look at the 12041 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 12042 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 12043 built-in type, the result of a typedef, or a named class type. 12044 12045'CP_INTEGRAL_TYPE' 12046 This predicate holds if the type is an integral type. Notice that 12047 in C++, enumerations are _not_ integral types. 12048 12049'ARITHMETIC_TYPE_P' 12050 This predicate holds if the type is an integral type (in the C++ 12051 sense) or a floating point type. 12052 12053'CLASS_TYPE_P' 12054 This predicate holds for a class-type. 12055 12056'TYPE_BUILT_IN' 12057 This predicate holds for a built-in type. 12058 12059'TYPE_PTRDATAMEM_P' 12060 This predicate holds if the type is a pointer to data member. 12061 12062'TYPE_PTR_P' 12063 This predicate holds if the type is a pointer type, and the pointee 12064 is not a data member. 12065 12066'TYPE_PTRFN_P' 12067 This predicate holds for a pointer to function type. 12068 12069'TYPE_PTROB_P' 12070 This predicate holds for a pointer to object type. Note however 12071 that it does not hold for the generic pointer to object type 'void 12072 *'. You may use 'TYPE_PTROBV_P' to test for a pointer to object 12073 type as well as 'void *'. 12074 12075 The table below describes types specific to C and C++ as well as 12076language-dependent info about GENERIC types. 12077 12078'POINTER_TYPE' 12079 Used to represent pointer types, and pointer to data member types. 12080 If 'TREE_TYPE' is a pointer to data member type, then 12081 'TYPE_PTRDATAMEM_P' will hold. For a pointer to data member type 12082 of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type 12083 'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'. 12084 12085'RECORD_TYPE' 12086 Used to represent 'struct' and 'class' types in C and C++. If 12087 'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 12088 type. In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a 12089 'POINTER_TYPE' pointing to a 'METHOD_TYPE'. The 'METHOD_TYPE' is 12090 the type of a function pointed to by the pointer-to-member 12091 function. If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a 12092 class type. For more information, *note Classes::. 12093 12094'UNKNOWN_TYPE' 12095 This node is used to represent a type the knowledge of which is 12096 insufficient for a sound processing. 12097 12098'TYPENAME_TYPE' 12099 Used to represent a construct of the form 'typename T::A'. The 12100 'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for 12101 'A'. If the type is specified via a template-id, then 12102 'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'. The 12103 'TREE_TYPE' is non-'NULL' if the node is implicitly generated in 12104 support for the implicit typename extension; in which case the 12105 'TREE_TYPE' is a type node for the base-class. 12106 12107'TYPEOF_TYPE' 12108 Used to represent the '__typeof__' extension. The 'TYPE_FIELDS' is 12109 the expression the type of which is being represented. 12110 12111 12112File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 12113 1211411.10.2 Namespaces 12115------------------ 12116 12117The root of the entire intermediate representation is the variable 12118'global_namespace'. This is the namespace specified with '::' in C++ 12119source code. All other namespaces, types, variables, functions, and so 12120forth can be found starting with this namespace. 12121 12122 However, except for the fact that it is distinguished as the root of 12123the representation, the global namespace is no different from any other 12124namespace. Thus, in what follows, we describe namespaces generally, 12125rather than the global namespace in particular. 12126 12127 A namespace is represented by a 'NAMESPACE_DECL' node. 12128 12129 The following macros and functions can be used on a 'NAMESPACE_DECL': 12130 12131'DECL_NAME' 12132 This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to 12133 the unqualified name of the name of the namespace (*note 12134 Identifiers::). The name of the global namespace is '::', even 12135 though in C++ the global namespace is unnamed. However, you should 12136 use comparison with 'global_namespace', rather than 'DECL_NAME' to 12137 determine whether or not a namespace is the global one. An unnamed 12138 namespace will have a 'DECL_NAME' equal to 12139 'anonymous_namespace_name'. Within a single translation unit, all 12140 unnamed namespaces will have the same name. 12141 12142'DECL_CONTEXT' 12143 This macro returns the enclosing namespace. The 'DECL_CONTEXT' for 12144 the 'global_namespace' is 'NULL_TREE'. 12145 12146'DECL_NAMESPACE_ALIAS' 12147 If this declaration is for a namespace alias, then 12148 'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 12149 alias. 12150 12151 Do not attempt to use 'cp_namespace_decls' for a namespace which is 12152 an alias. Instead, follow 'DECL_NAMESPACE_ALIAS' links until you 12153 reach an ordinary, non-alias, namespace, and call 12154 'cp_namespace_decls' there. 12155 12156'DECL_NAMESPACE_STD_P' 12157 This predicate holds if the namespace is the special '::std' 12158 namespace. 12159 12160'cp_namespace_decls' 12161 This function will return the declarations contained in the 12162 namespace, including types, overloaded functions, other namespaces, 12163 and so forth. If there are no declarations, this function will 12164 return 'NULL_TREE'. The declarations are connected through their 12165 'TREE_CHAIN' fields. 12166 12167 Although most entries on this list will be declarations, 12168 'TREE_LIST' nodes may also appear. In this case, the 'TREE_VALUE' 12169 will be an 'OVERLOAD'. The value of the 'TREE_PURPOSE' is 12170 unspecified; back ends should ignore this value. As with the other 12171 kinds of declarations returned by 'cp_namespace_decls', the 12172 'TREE_CHAIN' will point to the next declaration in this list. 12173 12174 For more information on the kinds of declarations that can occur on 12175 this list, *Note Declarations::. Some declarations will not appear 12176 on this list. In particular, no 'FIELD_DECL', 'LABEL_DECL', or 12177 'PARM_DECL' nodes will appear here. 12178 12179 This function cannot be used with namespaces that have 12180 'DECL_NAMESPACE_ALIAS' set. 12181 12182 12183File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 12184 1218511.10.3 Classes 12186--------------- 12187 12188Besides namespaces, the other high-level scoping construct in C++ is the 12189class. (Throughout this manual the term "class" is used to mean the 12190types referred to in the ANSI/ISO C++ Standard as classes; these include 12191types defined with the 'class', 'struct', and 'union' keywords.) 12192 12193 A class type is represented by either a 'RECORD_TYPE' or a 12194'UNION_TYPE'. A class declared with the 'union' tag is represented by a 12195'UNION_TYPE', while classes declared with either the 'struct' or the 12196'class' tag are represented by 'RECORD_TYPE's. You can use the 12197'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 12198type is a 'class' as opposed to a 'struct'. This macro will be true 12199only for classes declared with the 'class' tag. 12200 12201 Almost all members are available on the 'TYPE_FIELDS' list. Given one 12202member, the next can be found by following the 'TREE_CHAIN'. You should 12203not depend in any way on the order in which fields appear on this list. 12204All nodes on this list will be 'DECL' nodes. A 'FIELD_DECL' is used to 12205represent a non-static data member, a 'VAR_DECL' is used to represent a 12206static data member, and a 'TYPE_DECL' is used to represent a type. Note 12207that the 'CONST_DECL' for an enumeration constant will appear on this 12208list, if the enumeration type was declared in the class. (Of course, 12209the 'TYPE_DECL' for the enumeration type will appear here as well.) 12210There are no entries for base classes on this list. In particular, 12211there is no 'FIELD_DECL' for the "base-class portion" of an object. If 12212a function member is overloaded, each of the overloaded functions 12213appears; no 'OVERLOAD' nodes appear on the 'TYPE_FIELDS' list. 12214Implicitly declared functions (including default constructors, copy 12215constructors, assignment operators, and destructors) will appear on this 12216list as well. 12217 12218 The 'TYPE_VFIELD' is a compiler-generated field used to point to 12219virtual function tables. It may or may not appear on the 'TYPE_FIELDS' 12220list. However, back ends should handle the 'TYPE_VFIELD' just like all 12221the entries on the 'TYPE_FIELDS' list. 12222 12223 Every class has an associated "binfo", which can be obtained with 12224'TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 12225given by 'TYPE_BINFO' is the degenerate case, whereby every class is 12226considered to be its own base-class. The base binfos for a particular 12227binfo are held in a vector, whose length is obtained with 12228'BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 12229'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'. To add a new binfo, use 12230'BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 12231'BINFO_BASE_BINFOS', but normally you do not need to use that. The 12232class type associated with a binfo is given by 'BINFO_TYPE'. It is not 12233always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 12234and qualified types. Neither is it the case that 'TYPE_BINFO 12235(BINFO_TYPE (y))' is the same binfo as 'y'. The reason is that if 'y' 12236is a binfo representing a base-class 'B' of a derived class 'D', then 12237'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be 12238'B' as its own base-class, rather than as a base-class of 'D'. 12239 12240 The access to a base type can be found with 'BINFO_BASE_ACCESS'. This 12241will produce 'access_public_node', 'access_private_node' or 12242'access_protected_node'. If bases are always public, 12243'BINFO_BASE_ACCESSES' may be 'NULL'. 12244 12245 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 12246virtually or not. The other flags, 'BINFO_FLAG_0' to 'BINFO_FLAG_6', 12247can be used for language specific use. 12248 12249 The following macros can be used on a tree node representing a 12250class-type. 12251 12252'LOCAL_CLASS_P' 12253 This predicate holds if the class is local class _i.e._ declared 12254 inside a function body. 12255 12256'TYPE_POLYMORPHIC_P' 12257 This predicate holds if the class has at least one virtual function 12258 (declared or inherited). 12259 12260'TYPE_HAS_DEFAULT_CONSTRUCTOR' 12261 This predicate holds whenever its argument represents a class-type 12262 with default constructor. 12263 12264'CLASSTYPE_HAS_MUTABLE' 12265'TYPE_HAS_MUTABLE_P' 12266 These predicates hold for a class-type having a mutable data 12267 member. 12268 12269'CLASSTYPE_NON_POD_P' 12270 This predicate holds only for class-types that are not PODs. 12271 12272'TYPE_HAS_NEW_OPERATOR' 12273 This predicate holds for a class-type that defines 'operator new'. 12274 12275'TYPE_HAS_ARRAY_NEW_OPERATOR' 12276 This predicate holds for a class-type for which 'operator new[]' is 12277 defined. 12278 12279'TYPE_OVERLOADS_CALL_EXPR' 12280 This predicate holds for class-type for which the function call 12281 'operator()' is overloaded. 12282 12283'TYPE_OVERLOADS_ARRAY_REF' 12284 This predicate holds for a class-type that overloads 'operator[]' 12285 12286'TYPE_OVERLOADS_ARROW' 12287 This predicate holds for a class-type for which 'operator->' is 12288 overloaded. 12289 12290 12291File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 12292 1229311.10.4 Functions for C++ 12294------------------------- 12295 12296A function is represented by a 'FUNCTION_DECL' node. A set of 12297overloaded functions is sometimes represented by an 'OVERLOAD' node. 12298 12299 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros 12300should be used on an 'OVERLOAD'. An 'OVERLOAD' node is similar to a 12301'TREE_LIST'. Use 'OVL_CURRENT' to get the function associated with an 12302'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the 12303list of overloaded functions. The macros 'OVL_CURRENT' and 'OVL_NEXT' 12304are actually polymorphic; you can use them to work with 'FUNCTION_DECL' 12305nodes as well as with overloads. In the case of a 'FUNCTION_DECL', 12306'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT' 12307will always be 'NULL_TREE'. 12308 12309 To determine the scope of a function, you can use the 'DECL_CONTEXT' 12310macro. This macro will return the class (either a 'RECORD_TYPE' or a 12311'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 12312a member. For a virtual function, this macro returns the class in which 12313the function was actually defined, not the base class in which the 12314virtual declaration occurred. 12315 12316 If a friend function is defined in a class scope, the 12317'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 12318it was defined. For example, in 12319 class C { friend void f() {} }; 12320the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the 12321'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'. 12322 12323 The following macros and functions can be used on a 'FUNCTION_DECL': 12324'DECL_MAIN_P' 12325 This predicate holds for a function that is the program entry point 12326 '::code'. 12327 12328'DECL_LOCAL_FUNCTION_P' 12329 This predicate holds if the function was declared at block scope, 12330 even though it has a global scope. 12331 12332'DECL_ANTICIPATED' 12333 This predicate holds if the function is a built-in function but its 12334 prototype is not yet explicitly declared. 12335 12336'DECL_EXTERN_C_FUNCTION_P' 12337 This predicate holds if the function is declared as an ''extern 12338 "C"'' function. 12339 12340'DECL_LINKONCE_P' 12341 This macro holds if multiple copies of this function may be emitted 12342 in various translation units. It is the responsibility of the 12343 linker to merge the various copies. Template instantiations are 12344 the most common example of functions for which 'DECL_LINKONCE_P' 12345 holds; G++ instantiates needed templates in all translation units 12346 which require them, and then relies on the linker to remove 12347 duplicate instantiations. 12348 12349 FIXME: This macro is not yet implemented. 12350 12351'DECL_FUNCTION_MEMBER_P' 12352 This macro holds if the function is a member of a class, rather 12353 than a member of a namespace. 12354 12355'DECL_STATIC_FUNCTION_P' 12356 This predicate holds if the function a static member function. 12357 12358'DECL_NONSTATIC_MEMBER_FUNCTION_P' 12359 This macro holds for a non-static member function. 12360 12361'DECL_CONST_MEMFUNC_P' 12362 This predicate holds for a 'const'-member function. 12363 12364'DECL_VOLATILE_MEMFUNC_P' 12365 This predicate holds for a 'volatile'-member function. 12366 12367'DECL_CONSTRUCTOR_P' 12368 This macro holds if the function is a constructor. 12369 12370'DECL_NONCONVERTING_P' 12371 This predicate holds if the constructor is a non-converting 12372 constructor. 12373 12374'DECL_COMPLETE_CONSTRUCTOR_P' 12375 This predicate holds for a function which is a constructor for an 12376 object of a complete type. 12377 12378'DECL_BASE_CONSTRUCTOR_P' 12379 This predicate holds for a function which is a constructor for a 12380 base class sub-object. 12381 12382'DECL_COPY_CONSTRUCTOR_P' 12383 This predicate holds for a function which is a copy-constructor. 12384 12385'DECL_DESTRUCTOR_P' 12386 This macro holds if the function is a destructor. 12387 12388'DECL_COMPLETE_DESTRUCTOR_P' 12389 This predicate holds if the function is the destructor for an 12390 object a complete type. 12391 12392'DECL_OVERLOADED_OPERATOR_P' 12393 This macro holds if the function is an overloaded operator. 12394 12395'DECL_CONV_FN_P' 12396 This macro holds if the function is a type-conversion operator. 12397 12398'DECL_GLOBAL_CTOR_P' 12399 This predicate holds if the function is a file-scope initialization 12400 function. 12401 12402'DECL_GLOBAL_DTOR_P' 12403 This predicate holds if the function is a file-scope finalization 12404 function. 12405 12406'DECL_THUNK_P' 12407 This predicate holds if the function is a thunk. 12408 12409 These functions represent stub code that adjusts the 'this' pointer 12410 and then jumps to another function. When the jumped-to function 12411 returns, control is transferred directly to the caller, without 12412 returning to the thunk. The first parameter to the thunk is always 12413 the 'this' pointer; the thunk should add 'THUNK_DELTA' to this 12414 value. (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.) 12415 12416 Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the 12417 adjusted 'this' pointer must be adjusted again. The complete 12418 calculation is given by the following pseudo-code: 12419 12420 this += THUNK_DELTA 12421 if (THUNK_VCALL_OFFSET) 12422 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 12423 12424 Finally, the thunk should jump to the location given by 12425 'DECL_INITIAL'; this will always be an expression for the address 12426 of a function. 12427 12428'DECL_NON_THUNK_FUNCTION_P' 12429 This predicate holds if the function is _not_ a thunk function. 12430 12431'GLOBAL_INIT_PRIORITY' 12432 If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then 12433 this gives the initialization priority for the function. The 12434 linker will arrange that all functions for which 12435 'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 12436 before 'main' is called. When the program exits, all functions for 12437 which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 12438 12439'TYPE_RAISES_EXCEPTIONS' 12440 This macro returns the list of exceptions that a (member-)function 12441 can raise. The returned list, if non 'NULL', is comprised of nodes 12442 whose 'TREE_VALUE' represents a type. 12443 12444'TYPE_NOTHROW_P' 12445 This predicate holds when the exception-specification of its 12446 arguments is of the form ''()''. 12447 12448'DECL_ARRAY_DELETE_OPERATOR_P' 12449 This predicate holds if the function an overloaded 'operator 12450 delete[]'. 12451 12452 12453File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 12454 1245511.10.5 Statements for C++ 12456-------------------------- 12457 12458A function that has a definition in the current translation unit will 12459have a non-'NULL' 'DECL_INITIAL'. However, back ends should not make 12460use of the particular value given by 'DECL_INITIAL'. 12461 12462 The 'DECL_SAVED_TREE' macro will give the complete body of the 12463function. 12464 1246511.10.5.1 Statements 12466.................... 12467 12468There are tree nodes corresponding to all of the source-level statement 12469constructs, used within the C and C++ frontends. These are enumerated 12470here, together with a list of the various macros that can be used to 12471obtain information about them. There are a few macros that can be used 12472with all statements: 12473 12474'STMT_IS_FULL_EXPR_P' 12475 In C++, statements normally constitute "full expressions"; 12476 temporaries created during a statement are destroyed when the 12477 statement is complete. However, G++ sometimes represents 12478 expressions by statements; these statements will not have 12479 'STMT_IS_FULL_EXPR_P' set. Temporaries created during such 12480 statements should be destroyed when the innermost enclosing 12481 statement with 'STMT_IS_FULL_EXPR_P' set is exited. 12482 12483 Here is the list of the various statement nodes, and the macros used to 12484access them. This documentation describes the use of these nodes in 12485non-template functions (including instantiations of template functions). 12486In template functions, the same nodes are used, but sometimes in 12487slightly different ways. 12488 12489 Many of the statements have substatements. For example, a 'while' loop 12490will have a body, which is itself a statement. If the substatement is 12491'NULL_TREE', it is considered equivalent to a statement consisting of a 12492single ';', i.e., an expression statement in which the expression has 12493been omitted. A substatement may in fact be a list of statements, 12494connected via their 'TREE_CHAIN's. So, you should always process the 12495statement tree by looping over substatements, like this: 12496 void process_stmt (stmt) 12497 tree stmt; 12498 { 12499 while (stmt) 12500 { 12501 switch (TREE_CODE (stmt)) 12502 { 12503 case IF_STMT: 12504 process_stmt (THEN_CLAUSE (stmt)); 12505 /* More processing here. */ 12506 break; 12507 12508 ... 12509 } 12510 12511 stmt = TREE_CHAIN (stmt); 12512 } 12513 } 12514 In other words, while the 'then' clause of an 'if' statement in C++ can 12515be only one statement (although that one statement may be a compound 12516statement), the intermediate representation will sometimes use several 12517statements chained together. 12518 12519'BREAK_STMT' 12520 12521 Used to represent a 'break' statement. There are no additional 12522 fields. 12523 12524'CLEANUP_STMT' 12525 12526 Used to represent an action that should take place upon exit from 12527 the enclosing scope. Typically, these actions are calls to 12528 destructors for local objects, but back ends cannot rely on this 12529 fact. If these nodes are in fact representing such destructors, 12530 'CLEANUP_DECL' will be the 'VAR_DECL' destroyed. Otherwise, 12531 'CLEANUP_DECL' will be 'NULL_TREE'. In any case, the 12532 'CLEANUP_EXPR' is the expression to execute. The cleanups executed 12533 on exit from a scope should be run in the reverse order of the 12534 order in which the associated 'CLEANUP_STMT's were encountered. 12535 12536'CONTINUE_STMT' 12537 12538 Used to represent a 'continue' statement. There are no additional 12539 fields. 12540 12541'CTOR_STMT' 12542 12543 Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if 12544 'CTOR_END_P' holds of the main body of a constructor. See also 12545 'SUBOBJECT' for more information on how to use these nodes. 12546 12547'DO_STMT' 12548 12549 Used to represent a 'do' loop. The body of the loop is given by 12550 'DO_BODY' while the termination condition for the loop is given by 12551 'DO_COND'. The condition for a 'do'-statement is always an 12552 expression. 12553 12554'EMPTY_CLASS_EXPR' 12555 12556 Used to represent a temporary object of a class with no data whose 12557 address is never taken. (All such objects are interchangeable.) 12558 The 'TREE_TYPE' represents the type of the object. 12559 12560'EXPR_STMT' 12561 12562 Used to represent an expression statement. Use 'EXPR_STMT_EXPR' to 12563 obtain the expression. 12564 12565'FOR_STMT' 12566 12567 Used to represent a 'for' statement. The 'FOR_INIT_STMT' is the 12568 initialization statement for the loop. The 'FOR_COND' is the 12569 termination condition. The 'FOR_EXPR' is the expression executed 12570 right before the 'FOR_COND' on each loop iteration; often, this 12571 expression increments a counter. The body of the loop is given by 12572 'FOR_BODY'. Note that 'FOR_INIT_STMT' and 'FOR_BODY' return 12573 statements, while 'FOR_COND' and 'FOR_EXPR' return expressions. 12574 12575'HANDLER' 12576 12577 Used to represent a C++ 'catch' block. The 'HANDLER_TYPE' is the 12578 type of exception that will be caught by this handler; it is equal 12579 (by pointer equality) to 'NULL' if this handler is for all types. 12580 'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and 12581 'HANDLER_BODY' is the code for the block itself. 12582 12583'IF_STMT' 12584 12585 Used to represent an 'if' statement. The 'IF_COND' is the 12586 expression. 12587 12588 If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a 12589 statement (usually a 'DECL_STMT'). Each time the condition is 12590 evaluated, the statement should be executed. Then, the 12591 'TREE_VALUE' should be used as the conditional expression itself. 12592 This representation is used to handle C++ code like this: 12593 12594 C++ distinguishes between this and 'COND_EXPR' for handling 12595 templates. 12596 12597 if (int i = 7) ... 12598 12599 where there is a new local variable (or variables) declared within 12600 the condition. 12601 12602 The 'THEN_CLAUSE' represents the statement given by the 'then' 12603 condition, while the 'ELSE_CLAUSE' represents the statement given 12604 by the 'else' condition. 12605 12606'SUBOBJECT' 12607 12608 In a constructor, these nodes are used to mark the point at which a 12609 subobject of 'this' is fully constructed. If, after this point, an 12610 exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is 12611 encountered, the 'SUBOBJECT_CLEANUP' must be executed. The 12612 cleanups must be executed in the reverse order in which they 12613 appear. 12614 12615'SWITCH_STMT' 12616 12617 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 12618 the expression on which the switch is occurring. See the 12619 documentation for an 'IF_STMT' for more information on the 12620 representation used for the condition. The 'SWITCH_STMT_BODY' is 12621 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 12622 original type of switch expression as given in the source, before 12623 any compiler conversions. 12624 12625'TRY_BLOCK' 12626 Used to represent a 'try' block. The body of the try block is 12627 given by 'TRY_STMTS'. Each of the catch blocks is a 'HANDLER' 12628 node. The first handler is given by 'TRY_HANDLERS'. Subsequent 12629 handlers are obtained by following the 'TREE_CHAIN' link from one 12630 handler to the next. The body of the handler is given by 12631 'HANDLER_BODY'. 12632 12633 If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS' 12634 will not be a 'HANDLER' node. Instead, it will be an expression 12635 that should be executed if an exception is thrown in the try block. 12636 It must rethrow the exception after executing that code. And, if 12637 an exception is thrown while the expression is executing, 12638 'terminate' must be called. 12639 12640'USING_STMT' 12641 Used to represent a 'using' directive. The namespace is given by 12642 'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 12643 is needed inside template functions, to implement using directives 12644 during instantiation. 12645 12646'WHILE_STMT' 12647 12648 Used to represent a 'while' loop. The 'WHILE_COND' is the 12649 termination condition for the loop. See the documentation for an 12650 'IF_STMT' for more information on the representation used for the 12651 condition. 12652 12653 The 'WHILE_BODY' is the body of the loop. 12654 12655 12656File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 12657 1265811.10.6 C++ Expressions 12659----------------------- 12660 12661This section describes expressions specific to the C and C++ front ends. 12662 12663'TYPEID_EXPR' 12664 12665 Used to represent a 'typeid' expression. 12666 12667'NEW_EXPR' 12668'VEC_NEW_EXPR' 12669 12670 Used to represent a call to 'new' and 'new[]' respectively. 12671 12672'DELETE_EXPR' 12673'VEC_DELETE_EXPR' 12674 12675 Used to represent a call to 'delete' and 'delete[]' respectively. 12676 12677'MEMBER_REF' 12678 12679 Represents a reference to a member of a class. 12680 12681'THROW_EXPR' 12682 12683 Represents an instance of 'throw' in the program. Operand 0, which 12684 is the expression to throw, may be 'NULL_TREE'. 12685 12686'AGGR_INIT_EXPR' 12687 An 'AGGR_INIT_EXPR' represents the initialization as the return 12688 value of a function call, or as the result of a constructor. An 12689 'AGGR_INIT_EXPR' will only appear as a full-expression, or as the 12690 second operand of a 'TARGET_EXPR'. 'AGGR_INIT_EXPR's have a 12691 representation similar to that of 'CALL_EXPR's. You can use the 12692 'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the 12693 function to call and the arguments to pass. 12694 12695 If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the 12696 initialization is via a constructor call. The address of the 12697 'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is 12698 taken, and this value replaces the first argument in the argument 12699 list. 12700 12701 In either case, the expression is void. 12702 12703 12704File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 12705 1270612 GIMPLE 12707********* 12708 12709GIMPLE is a three-address representation derived from GENERIC by 12710breaking down GENERIC expressions into tuples of no more than 3 operands 12711(with some exceptions like function calls). GIMPLE was heavily 12712influenced by the SIMPLE IL used by the McCAT compiler project at McGill 12713University, though we have made some different choices. For one thing, 12714SIMPLE doesn't support 'goto'. 12715 12716 Temporaries are introduced to hold intermediate values needed to 12717compute complex expressions. Additionally, all the control structures 12718used in GENERIC are lowered into conditional jumps, lexical scopes are 12719removed and exception regions are converted into an on the side 12720exception region tree. 12721 12722 The compiler pass which converts GENERIC into GIMPLE is referred to as 12723the 'gimplifier'. The gimplifier works recursively, generating GIMPLE 12724tuples out of the original GENERIC expressions. 12725 12726 One of the early implementation strategies used for the GIMPLE 12727representation was to use the same internal data structures used by 12728front ends to represent parse trees. This simplified implementation 12729because we could leverage existing functionality and interfaces. 12730However, GIMPLE is a much more restrictive representation than abstract 12731syntax trees (AST), therefore it does not require the full structural 12732complexity provided by the main tree data structure. 12733 12734 The GENERIC representation of a function is stored in the 12735'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node. It 12736is converted to GIMPLE by a call to 'gimplify_function_tree'. 12737 12738 If a front end wants to include language-specific tree codes in the 12739tree representation which it provides to the back end, it must provide a 12740definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 12741front end trees to GIMPLE. Usually such a hook will involve much of the 12742same code for expanding front end trees to RTL. This function can 12743return fully lowered GIMPLE, or it can return GENERIC trees and let the 12744main gimplifier lower them the rest of the way; this is often simpler. 12745GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 12746of the IL before the pass 'pass_lower_cf'. High GIMPLE contains some 12747container statements like lexical scopes (represented by 'GIMPLE_BIND') 12748and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes 12749all of the implicit jumps for control and exception expressions directly 12750in the IL and EH region trees. 12751 12752 The C and C++ front ends currently convert directly from front end 12753trees to GIMPLE, and hand that off to the back end rather than first 12754converting to GENERIC. Their gimplifier hooks know about all the 12755'_STMT' nodes and how to convert them to GENERIC forms. There was some 12756work done on a genericization pass which would run first, but the 12757existence of 'STMT_EXPR' meant that in order to convert all of the C 12758statements into GENERIC equivalents would involve walking the entire 12759tree anyway, so it was simpler to lower all the way. This might change 12760in the future if someone writes an optimization pass which would work 12761better with higher-level trees, but currently the optimizers all expect 12762GIMPLE. 12763 12764 You can request to dump a C-like representation of the GIMPLE form with 12765the flag '-fdump-tree-gimple'. 12766 12767* Menu: 12768 12769* Tuple representation:: 12770* Class hierarchy of GIMPLE statements:: 12771* GIMPLE instruction set:: 12772* GIMPLE Exception Handling:: 12773* Temporaries:: 12774* Operands:: 12775* Manipulating GIMPLE statements:: 12776* Tuple specific accessors:: 12777* GIMPLE sequences:: 12778* Sequence iterators:: 12779* Adding a new GIMPLE statement code:: 12780* Statement and operand traversals:: 12781 12782 12783File: gccint.info, Node: Tuple representation, Next: Class hierarchy of GIMPLE statements, Up: GIMPLE 12784 1278512.1 Tuple representation 12786========================= 12787 12788GIMPLE instructions are tuples of variable size divided in two groups: a 12789header describing the instruction and its locations, and a variable 12790length body with all the operands. Tuples are organized into a 12791hierarchy with 3 main classes of tuples. 12792 1279312.1.1 'gimple' (gsbase) 12794------------------------ 12795 12796This is the root of the hierarchy, it holds basic information needed by 12797most GIMPLE statements. There are some fields that may not be relevant 12798to every GIMPLE statement, but those were moved into the base structure 12799to take advantage of holes left by other fields (thus making the 12800structure more compact). The structure takes 4 words (32 bytes) on 64 12801bit hosts: 12802 12803Field Size (bits) 12804'code' 8 12805'subcode' 16 12806'no_warning' 1 12807'visited' 1 12808'nontemporal_move' 1 12809'plf' 2 12810'modified' 1 12811'has_volatile_ops' 1 12812'references_memory_p' 1 12813'uid' 32 12814'location' 32 12815'num_ops' 32 12816'bb' 64 12817'block' 63 12818Total size 32 bytes 12819 12820 * 'code' Main identifier for a GIMPLE instruction. 12821 12822 * 'subcode' Used to distinguish different variants of the same basic 12823 instruction or provide flags applicable to a given code. The 12824 'subcode' flags field has different uses depending on the code of 12825 the instruction, but mostly it distinguishes instructions of the 12826 same family. The most prominent use of this field is in 12827 assignments, where subcode indicates the operation done on the RHS 12828 of the assignment. For example, a = b + c is encoded as 12829 'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 12830 12831 * 'no_warning' Bitflag to indicate whether a warning has already been 12832 issued on this statement. 12833 12834 * 'visited' General purpose "visited" marker. Set and cleared by 12835 each pass when needed. 12836 12837 * 'nontemporal_move' Bitflag used in assignments that represent 12838 non-temporal moves. Although this bitflag is only used in 12839 assignments, it was moved into the base to take advantage of the 12840 bit holes left by the previous fields. 12841 12842 * 'plf' Pass Local Flags. This 2-bit mask can be used as general 12843 purpose markers by any pass. Passes are responsible for clearing 12844 and setting these two flags accordingly. 12845 12846 * 'modified' Bitflag to indicate whether the statement has been 12847 modified. Used mainly by the operand scanner to determine when to 12848 re-scan a statement for operands. 12849 12850 * 'has_volatile_ops' Bitflag to indicate whether this statement 12851 contains operands that have been marked volatile. 12852 12853 * 'references_memory_p' Bitflag to indicate whether this statement 12854 contains memory references (i.e., its operands are either global 12855 variables, or pointer dereferences or anything that must reside in 12856 memory). 12857 12858 * 'uid' This is an unsigned integer used by passes that want to 12859 assign IDs to every statement. These IDs must be assigned and used 12860 by each pass. 12861 12862 * 'location' This is a 'location_t' identifier to specify source code 12863 location for this statement. It is inherited from the front end. 12864 12865 * 'num_ops' Number of operands that this statement has. This 12866 specifies the size of the operand vector embedded in the tuple. 12867 Only used in some tuples, but it is declared in the base tuple to 12868 take advantage of the 32-bit hole left by the previous fields. 12869 12870 * 'bb' Basic block holding the instruction. 12871 12872 * 'block' Lexical block holding this statement. Also used for debug 12873 information generation. 12874 1287512.1.2 'gimple_statement_with_ops' 12876---------------------------------- 12877 12878This tuple is actually split in two: 'gimple_statement_with_ops_base' 12879and 'gimple_statement_with_ops'. This is needed to accommodate the way 12880the operand vector is allocated. The operand vector is defined to be an 12881array of 1 element. So, to allocate a dynamic number of operands, the 12882memory allocator ('gimple_alloc') simply allocates enough memory to hold 12883the structure itself plus 'N - 1' operands which run "off the end" of 12884the structure. For example, to allocate space for a tuple with 3 12885operands, 'gimple_alloc' reserves 'sizeof (struct 12886gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 12887 12888 On the other hand, several fields in this tuple need to be shared with 12889the 'gimple_statement_with_memory_ops' tuple. So, these common fields 12890are placed in 'gimple_statement_with_ops_base' which is then inherited 12891from the other two tuples. 12892 12893'gsbase' 256 12894'def_ops' 64 12895'use_ops' 64 12896'op' 'num_ops' * 64 12897Total 48 + 8 * 'num_ops' bytes 12898size 12899 12900 * 'gsbase' Inherited from 'struct gimple'. 12901 12902 * 'def_ops' Array of pointers into the operand array indicating all 12903 the slots that contain a variable written-to by the statement. 12904 This array is also used for immediate use chaining. Note that it 12905 would be possible to not rely on this array, but the changes 12906 required to implement this are pretty invasive. 12907 12908 * 'use_ops' Similar to 'def_ops' but for variables read by the 12909 statement. 12910 12911 * 'op' Array of trees with 'num_ops' slots. 12912 1291312.1.3 'gimple_statement_with_memory_ops' 12914----------------------------------------- 12915 12916This tuple is essentially identical to 'gimple_statement_with_ops', 12917except that it contains 4 additional fields to hold vectors related 12918memory stores and loads. Similar to the previous case, the structure is 12919split in two to accommodate for the operand vector 12920('gimple_statement_with_memory_ops_base' and 12921'gimple_statement_with_memory_ops'). 12922 12923Field Size (bits) 12924'gsbase' 256 12925'def_ops' 64 12926'use_ops' 64 12927'vdef_ops' 64 12928'vuse_ops' 64 12929'stores' 64 12930'loads' 64 12931'op' 'num_ops' * 64 12932Total size 80 + 8 * 'num_ops' bytes 12933 12934 * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators. There is 12935 one entry per memory symbol written by this statement. This is 12936 used to maintain the memory SSA use-def and def-def chains. 12937 12938 * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators. There is 12939 one entry per memory symbol loaded by this statement. This is used 12940 to maintain the memory SSA use-def chains. 12941 12942 * 'stores' Bitset with all the UIDs for the symbols written-to by the 12943 statement. This is different than 'vdef_ops' in that all the 12944 affected symbols are mentioned in this set. If memory partitioning 12945 is enabled, the 'vdef_ops' vector will refer to memory partitions. 12946 Furthermore, no SSA information is stored in this set. 12947 12948 * 'loads' Similar to 'stores', but for memory loads. (Note that 12949 there is some amount of redundancy here, it should be possible to 12950 reduce memory utilization further by removing these sets). 12951 12952 All the other tuples are defined in terms of these three basic ones. 12953Each tuple will add some fields. 12954 12955 12956File: gccint.info, Node: Class hierarchy of GIMPLE statements, Next: GIMPLE instruction set, Prev: Tuple representation, Up: GIMPLE 12957 1295812.2 Class hierarchy of GIMPLE statements 12959========================================= 12960 12961The following diagram shows the C++ inheritance hierarchy of statement 12962kinds, along with their relationships to 'GSS_' values (layouts) and 12963'GIMPLE_' values (codes): 12964 12965 gimple 12966 | layout: GSS_BASE 12967 | used for 4 codes: GIMPLE_ERROR_MARK 12968 | GIMPLE_NOP 12969 | GIMPLE_OMP_SECTIONS_SWITCH 12970 | GIMPLE_PREDICT 12971 | 12972 + gimple_statement_with_ops_base 12973 | | (no GSS layout) 12974 | | 12975 | + gimple_statement_with_ops 12976 | | | layout: GSS_WITH_OPS 12977 | | | 12978 | | + gcond 12979 | | | code: GIMPLE_COND 12980 | | | 12981 | | + gdebug 12982 | | | code: GIMPLE_DEBUG 12983 | | | 12984 | | + ggoto 12985 | | | code: GIMPLE_GOTO 12986 | | | 12987 | | + glabel 12988 | | | code: GIMPLE_LABEL 12989 | | | 12990 | | + gswitch 12991 | | code: GIMPLE_SWITCH 12992 | | 12993 | + gimple_statement_with_memory_ops_base 12994 | | layout: GSS_WITH_MEM_OPS_BASE 12995 | | 12996 | + gimple_statement_with_memory_ops 12997 | | | layout: GSS_WITH_MEM_OPS 12998 | | | 12999 | | + gassign 13000 | | | code GIMPLE_ASSIGN 13001 | | | 13002 | | + greturn 13003 | | code GIMPLE_RETURN 13004 | | 13005 | + gcall 13006 | | layout: GSS_CALL, code: GIMPLE_CALL 13007 | | 13008 | + gasm 13009 | | layout: GSS_ASM, code: GIMPLE_ASM 13010 | | 13011 | + gtransaction 13012 | layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION 13013 | 13014 + gimple_statement_omp 13015 | | layout: GSS_OMP. Used for code GIMPLE_OMP_SECTION 13016 | | 13017 | + gomp_critical 13018 | | layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL 13019 | | 13020 | + gomp_for 13021 | | layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR 13022 | | 13023 | + gomp_parallel_layout 13024 | | | layout: GSS_OMP_PARALLEL_LAYOUT 13025 | | | 13026 | | + gimple_statement_omp_taskreg 13027 | | | | 13028 | | | + gomp_parallel 13029 | | | | code: GIMPLE_OMP_PARALLEL 13030 | | | | 13031 | | | + gomp_task 13032 | | | code: GIMPLE_OMP_TASK 13033 | | | 13034 | | + gimple_statement_omp_target 13035 | | code: GIMPLE_OMP_TARGET 13036 | | 13037 | + gomp_sections 13038 | | layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS 13039 | | 13040 | + gimple_statement_omp_single_layout 13041 | | layout: GSS_OMP_SINGLE_LAYOUT 13042 | | 13043 | + gomp_single 13044 | | code: GIMPLE_OMP_SINGLE 13045 | | 13046 | + gomp_teams 13047 | code: GIMPLE_OMP_TEAMS 13048 | 13049 + gbind 13050 | layout: GSS_BIND, code: GIMPLE_BIND 13051 | 13052 + gcatch 13053 | layout: GSS_CATCH, code: GIMPLE_CATCH 13054 | 13055 + geh_filter 13056 | layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER 13057 | 13058 + geh_else 13059 | layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE 13060 | 13061 + geh_mnt 13062 | layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW 13063 | 13064 + gphi 13065 | layout: GSS_PHI, code: GIMPLE_PHI 13066 | 13067 + gimple_statement_eh_ctrl 13068 | | layout: GSS_EH_CTRL 13069 | | 13070 | + gresx 13071 | | code: GIMPLE_RESX 13072 | | 13073 | + geh_dispatch 13074 | code: GIMPLE_EH_DISPATCH 13075 | 13076 + gtry 13077 | layout: GSS_TRY, code: GIMPLE_TRY 13078 | 13079 + gimple_statement_wce 13080 | layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR 13081 | 13082 + gomp_continue 13083 | layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE 13084 | 13085 + gomp_atomic_load 13086 | layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD 13087 | 13088 + gimple_statement_omp_atomic_store_layout 13089 | layout: GSS_OMP_ATOMIC_STORE_LAYOUT, 13090 | code: GIMPLE_OMP_ATOMIC_STORE 13091 | 13092 + gomp_atomic_store 13093 | code: GIMPLE_OMP_ATOMIC_STORE 13094 | 13095 + gomp_return 13096 code: GIMPLE_OMP_RETURN 13097 13098 13099File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Class hierarchy of GIMPLE statements, Up: GIMPLE 13100 1310112.3 GIMPLE instruction set 13102=========================== 13103 13104The following table briefly describes the GIMPLE instruction set. 13105 13106Instruction High GIMPLE Low GIMPLE 13107'GIMPLE_ASM' x x 13108'GIMPLE_ASSIGN' x x 13109'GIMPLE_BIND' x 13110'GIMPLE_CALL' x x 13111'GIMPLE_CATCH' x 13112'GIMPLE_COND' x x 13113'GIMPLE_DEBUG' x x 13114'GIMPLE_EH_FILTER' x 13115'GIMPLE_GOTO' x x 13116'GIMPLE_LABEL' x x 13117'GIMPLE_NOP' x x 13118'GIMPLE_OMP_ATOMIC_LOAD' x x 13119'GIMPLE_OMP_ATOMIC_STORE' x x 13120'GIMPLE_OMP_CONTINUE' x x 13121'GIMPLE_OMP_CRITICAL' x x 13122'GIMPLE_OMP_FOR' x x 13123'GIMPLE_OMP_MASTER' x x 13124'GIMPLE_OMP_ORDERED' x x 13125'GIMPLE_OMP_PARALLEL' x x 13126'GIMPLE_OMP_RETURN' x x 13127'GIMPLE_OMP_SECTION' x x 13128'GIMPLE_OMP_SECTIONS' x x 13129'GIMPLE_OMP_SECTIONS_SWITCH' x x 13130'GIMPLE_OMP_SINGLE' x x 13131'GIMPLE_PHI' x 13132'GIMPLE_RESX' x 13133'GIMPLE_RETURN' x x 13134'GIMPLE_SWITCH' x x 13135'GIMPLE_TRY' x 13136 13137 13138File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 13139 1314012.4 Exception Handling 13141======================= 13142 13143Other exception handling constructs are represented using 13144'GIMPLE_TRY_CATCH'. 'GIMPLE_TRY_CATCH' has two operands. The first 13145operand is a sequence of statements to execute. If executing these 13146statements does not throw an exception, then the second operand is 13147ignored. Otherwise, if an exception is thrown, then the second operand 13148of the 'GIMPLE_TRY_CATCH' is checked. The second operand may have the 13149following forms: 13150 13151 1. A sequence of statements to execute. When an exception occurs, 13152 these statements are executed, and then the exception is rethrown. 13153 13154 2. A sequence of 'GIMPLE_CATCH' statements. Each 'GIMPLE_CATCH' has a 13155 list of applicable exception types and handler code. If the thrown 13156 exception matches one of the caught types, the associated handler 13157 code is executed. If the handler code falls off the bottom, 13158 execution continues after the original 'GIMPLE_TRY_CATCH'. 13159 13160 3. A 'GIMPLE_EH_FILTER' statement. This has a list of permitted 13161 exception types, and code to handle a match failure. If the thrown 13162 exception does not match one of the allowed types, the associated 13163 match failure code is executed. If the thrown exception does 13164 match, it continues unwinding the stack looking for the next 13165 handler. 13166 13167 Currently throwing an exception is not directly represented in GIMPLE, 13168since it is implemented by calling a function. At some point in the 13169future we will want to add some way to express that the call will throw 13170an exception of a known type. 13171 13172 Just before running the optimizers, the compiler lowers the high-level 13173EH constructs above into a set of 'goto's, magic labels, and EH regions. 13174Continuing to unwind at the end of a cleanup is represented with a 13175'GIMPLE_RESX'. 13176 13177 13178File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 13179 1318012.5 Temporaries 13181================ 13182 13183When gimplification encounters a subexpression that is too complex, it 13184creates a new temporary variable to hold the value of the subexpression, 13185and adds a new statement to initialize it before the current statement. 13186These special temporaries are known as 'expression temporaries', and are 13187allocated using 'get_formal_tmp_var'. The compiler tries to always 13188evaluate identical expressions into the same temporary, to simplify 13189elimination of redundant calculations. 13190 13191 We can only use expression temporaries when we know that it will not be 13192reevaluated before its value is used, and that it will not be otherwise 13193modified(1). Other temporaries can be allocated using 13194'get_initialized_tmp_var' or 'create_tmp_var'. 13195 13196 Currently, an expression like 'a = b + 5' is not reduced any further. 13197We tried converting it to something like 13198 T1 = b + 5; 13199 a = T1; 13200 but this bloated the representation for minimal benefit. However, a 13201variable which must live in memory cannot appear in an expression; its 13202value is explicitly loaded into a temporary first. Similarly, storing 13203the value of an expression to a memory variable goes through a 13204temporary. 13205 13206 ---------- Footnotes ---------- 13207 13208 (1) These restrictions are derived from those in Morgan 4.8. 13209 13210 13211File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 13212 1321312.6 Operands 13214============= 13215 13216In general, expressions in GIMPLE consist of an operation and the 13217appropriate number of simple operands; these operands must either be a 13218GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable. 13219More complex operands are factored out into temporaries, so that 13220 a = b + c + d 13221 becomes 13222 T1 = b + c; 13223 a = T1 + d; 13224 13225 The same rule holds for arguments to a 'GIMPLE_CALL'. 13226 13227 The target of an assignment is usually a variable, but can also be a 13228'MEM_REF' or a compound lvalue as described below. 13229 13230* Menu: 13231 13232* Compound Expressions:: 13233* Compound Lvalues:: 13234* Conditional Expressions:: 13235* Logical Operators:: 13236 13237 13238File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 13239 1324012.6.1 Compound Expressions 13241--------------------------- 13242 13243The left-hand side of a C comma expression is simply moved into a 13244separate statement. 13245 13246 13247File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 13248 1324912.6.2 Compound Lvalues 13250----------------------- 13251 13252Currently compound lvalues involving array and structure field 13253references are not broken down; an expression like 'a.b[2] = 42' is not 13254reduced any further (though complex array subscripts are). This 13255restriction is a workaround for limitations in later optimizers; if we 13256were to convert this to 13257 13258 T1 = &a.b; 13259 T1[2] = 42; 13260 13261 alias analysis would not remember that the reference to 'T1[2]' came by 13262way of 'a.b', so it would think that the assignment could alias another 13263member of 'a'; this broke 'struct-alias-1.c'. Future optimizer 13264improvements may make this limitation unnecessary. 13265 13266 13267File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 13268 1326912.6.3 Conditional Expressions 13270------------------------------ 13271 13272A C '?:' expression is converted into an 'if' statement with each branch 13273assigning to the same temporary. So, 13274 13275 a = b ? c : d; 13276 becomes 13277 if (b == 1) 13278 T1 = c; 13279 else 13280 T1 = d; 13281 a = T1; 13282 13283 The GIMPLE level if-conversion pass re-introduces '?:' expression, if 13284appropriate. It is used to vectorize loops with conditions using vector 13285conditional operations. 13286 13287 Note that in GIMPLE, 'if' statements are represented using 13288'GIMPLE_COND', as described below. 13289 13290 13291File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 13292 1329312.6.4 Logical Operators 13294------------------------ 13295 13296Except when they appear in the condition operand of a 'GIMPLE_COND', 13297logical 'and' and 'or' operators are simplified as follows: 'a = b && c' 13298becomes 13299 13300 T1 = (bool)b; 13301 if (T1 == true) 13302 T1 = (bool)c; 13303 a = T1; 13304 13305 Note that 'T1' in this example cannot be an expression temporary, 13306because it has two different assignments. 13307 1330812.6.5 Manipulating operands 13309---------------------------- 13310 13311All gimple operands are of type 'tree'. But only certain types of trees 13312are allowed to be used as operand tuples. Basic validation is 13313controlled by the function 'get_gimple_rhs_class', which given a tree 13314code, returns an 'enum' with the following values of type 'enum 13315gimple_rhs_class' 13316 13317 * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 13318 13319 * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation. 13320 13321 * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 13322 13323 * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 13324 13325 * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 13326 split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL', 13327 'COMPONENT_REF', etc). 13328 13329 This operand class also acts as an escape hatch for tree nodes that 13330 may be flattened out into the operand vector, but would need more 13331 than two slots on the RHS. For instance, a 'COND_EXPR' expression 13332 of the form '(a op b) ? x : y' could be flattened out on the 13333 operand vector using 4 slots, but it would also require additional 13334 processing to distinguish 'c = a op b' from 'c = a op b ? x : y'. 13335 Something similar occurs with 'ASSERT_EXPR'. In time, these 13336 special case tree expressions should be flattened into the operand 13337 vector. 13338 13339 For tree nodes in the categories 'GIMPLE_TERNARY_RHS', 13340'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside 13341tuples directly. They first need to be flattened and separated into 13342individual components. For instance, given the GENERIC expression 13343 13344 a = b + c 13345 13346 its tree representation is: 13347 13348 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 13349 13350 In this case, the GIMPLE form for this statement is logically identical 13351to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the 13352assignment is not represented as a tree, instead the two operands are 13353taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE 13354tuple as follows: 13355 13356 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 13357 1335812.6.6 Operand vector allocation 13359-------------------------------- 13360 13361The operand vector is stored at the bottom of the three tuple structures 13362that accept operands. This means, that depending on the code of a given 13363statement, its operand vector will be at different offsets from the base 13364of the structure. To access tuple operands use the following accessors 13365 13366 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 13367 Returns the number of operands in statement G. 13368 13369 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 13370 Returns operand 'I' from statement 'G'. 13371 13372 -- GIMPLE function: tree * gimple_ops (gimple g) 13373 Returns a pointer into the operand vector for statement 'G'. This 13374 is computed using an internal table called 'gimple_ops_offset_'[]. 13375 This table is indexed by the gimple code of 'G'. 13376 13377 When the compiler is built, this table is filled-in using the sizes 13378 of the structures used by each statement code defined in 13379 gimple.def. Since the operand vector is at the bottom of the 13380 structure, for a gimple code 'C' the offset is computed as sizeof 13381 (struct-of 'C') - sizeof (tree). 13382 13383 This mechanism adds one memory indirection to every access when 13384 using 'gimple_op'(), if this becomes a bottleneck, a pass can 13385 choose to memoize the result from 'gimple_ops'() and use that to 13386 access the operands. 13387 1338812.6.7 Operand validation 13389------------------------- 13390 13391When adding a new operand to a gimple statement, the operand will be 13392validated according to what each tuple accepts in its operand vector. 13393These predicates are called by the 'gimple_NAME_set_...()'. Each tuple 13394will use one of the following predicates (Note, this list is not 13395exhaustive): 13396 13397 -- GIMPLE function: bool is_gimple_val (tree t) 13398 Returns true if t is a "GIMPLE value", which are all the 13399 non-addressable stack variables (variables for which 13400 'is_gimple_reg' returns true) and constants (expressions for which 13401 'is_gimple_min_invariant' returns true). 13402 13403 -- GIMPLE function: bool is_gimple_addressable (tree t) 13404 Returns true if t is a symbol or memory reference whose address can 13405 be taken. 13406 13407 -- GIMPLE function: bool is_gimple_asm_val (tree t) 13408 Similar to 'is_gimple_val' but it also accepts hard registers. 13409 13410 -- GIMPLE function: bool is_gimple_call_addr (tree t) 13411 Return true if t is a valid expression to use as the function 13412 called by a 'GIMPLE_CALL'. 13413 13414 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t) 13415 Return true if t is a valid expression to use as first operand of a 13416 'MEM_REF' expression. 13417 13418 -- GIMPLE function: bool is_gimple_constant (tree t) 13419 Return true if t is a valid gimple constant. 13420 13421 -- GIMPLE function: bool is_gimple_min_invariant (tree t) 13422 Return true if t is a valid minimal invariant. This is different 13423 from constants, in that the specific value of t may not be known at 13424 compile time, but it is known that it doesn't change (e.g., the 13425 address of a function local variable). 13426 13427 -- GIMPLE function: bool is_gimple_ip_invariant (tree t) 13428 Return true if t is an interprocedural invariant. This means that 13429 t is a valid invariant in all functions (e.g. it can be an address 13430 of a global variable but not of a local one). 13431 13432 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t) 13433 Return true if t is an 'ADDR_EXPR' that does not change once the 13434 program is running (and which is valid in all functions). 13435 1343612.6.8 Statement validation 13437--------------------------- 13438 13439 -- GIMPLE function: bool is_gimple_assign (gimple g) 13440 Return true if the code of g is 'GIMPLE_ASSIGN'. 13441 13442 -- GIMPLE function: bool is_gimple_call (gimple g) 13443 Return true if the code of g is 'GIMPLE_CALL'. 13444 13445 -- GIMPLE function: bool is_gimple_debug (gimple g) 13446 Return true if the code of g is 'GIMPLE_DEBUG'. 13447 13448 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g) 13449 Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast 13450 operation. 13451 13452 -- GIMPLE function: bool gimple_debug_bind_p (gimple g) 13453 Return true if g is a 'GIMPLE_DEBUG' that binds the value of an 13454 expression to a variable. 13455 13456 -- GIMPLE function: bool is_gimple_omp (gimple g) 13457 Return true if g is any of the OpenMP codes. 13458 13459 -- GIMPLE function: gimple_debug_begin_stmt_p (gimple g) 13460 Return true if g is a 'GIMPLE_DEBUG' that marks the beginning of a 13461 source statement. 13462 13463 -- GIMPLE function: gimple_debug_inline_entry_p (gimple g) 13464 Return true if g is a 'GIMPLE_DEBUG' that marks the entry point of 13465 an inlined function. 13466 13467 -- GIMPLE function: gimple_debug_nonbind_marker_p (gimple g) 13468 Return true if g is a 'GIMPLE_DEBUG' that marks a program location, 13469 without any variable binding. 13470 13471 13472File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 13473 1347412.7 Manipulating GIMPLE statements 13475=================================== 13476 13477This section documents all the functions available to handle each of the 13478GIMPLE instructions. 13479 1348012.7.1 Common accessors 13481----------------------- 13482 13483The following are common accessors for gimple statements. 13484 13485 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 13486 Return the code for statement 'G'. 13487 13488 -- GIMPLE function: basic_block gimple_bb (gimple g) 13489 Return the basic block to which statement 'G' belongs to. 13490 13491 -- GIMPLE function: tree gimple_block (gimple g) 13492 Return the lexical scope block holding statement 'G'. 13493 13494 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 13495 Return the type of the main expression computed by 'STMT'. Return 13496 'void_type_node' if 'STMT' computes nothing. This will only return 13497 something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and 13498 'GIMPLE_CALL'. For all other tuple codes, it will return 13499 'void_type_node'. 13500 13501 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 13502 Return the tree code for the expression computed by 'STMT'. This 13503 is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and 13504 'GIMPLE_COND'. If 'STMT' is 'GIMPLE_CALL', it will return 13505 'CALL_EXPR'. For 'GIMPLE_COND', it returns the code of the 13506 comparison predicate. For 'GIMPLE_ASSIGN' it returns the code of 13507 the operation performed by the 'RHS' of the assignment. 13508 13509 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 13510 Set the lexical scope block of 'G' to 'BLOCK'. 13511 13512 -- GIMPLE function: location_t gimple_locus (gimple g) 13513 Return locus information for statement 'G'. 13514 13515 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 13516 Set locus information for statement 'G'. 13517 13518 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 13519 Return true if 'G' does not have locus information. 13520 13521 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 13522 Return true if no warnings should be emitted for statement 'STMT'. 13523 13524 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 13525 visited_p) 13526 Set the visited status on statement 'STMT' to 'VISITED_P'. 13527 13528 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 13529 Return the visited status on statement 'STMT'. 13530 13531 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 13532 plf, bool val_p) 13533 Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'. 13534 13535 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask 13536 plf) 13537 Return the value of pass local flag 'PLF' on statement 'STMT'. 13538 13539 -- GIMPLE function: bool gimple_has_ops (gimple g) 13540 Return true if statement 'G' has register or memory operands. 13541 13542 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 13543 Return true if statement 'G' has memory operands. 13544 13545 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 13546 Return the number of operands for statement 'G'. 13547 13548 -- GIMPLE function: tree * gimple_ops (gimple g) 13549 Return the array of operands for statement 'G'. 13550 13551 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 13552 Return operand 'I' for statement 'G'. 13553 13554 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i) 13555 Return a pointer to operand 'I' for statement 'G'. 13556 13557 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 13558 Set operand 'I' of statement 'G' to 'OP'. 13559 13560 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 13561 Return the set of symbols that have had their address taken by 13562 'STMT'. 13563 13564 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g) 13565 Return the set of 'DEF' operands for statement 'G'. 13566 13567 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 13568 def_optype_d *def) 13569 Set 'DEF' to be the set of 'DEF' operands for statement 'G'. 13570 13571 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g) 13572 Return the set of 'USE' operands for statement 'G'. 13573 13574 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 13575 use_optype_d *use) 13576 Set 'USE' to be the set of 'USE' operands for statement 'G'. 13577 13578 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g) 13579 Return the set of 'VUSE' operands for statement 'G'. 13580 13581 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 13582 voptype_d *ops) 13583 Set 'OPS' to be the set of 'VUSE' operands for statement 'G'. 13584 13585 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g) 13586 Return the set of 'VDEF' operands for statement 'G'. 13587 13588 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 13589 voptype_d *ops) 13590 Set 'OPS' to be the set of 'VDEF' operands for statement 'G'. 13591 13592 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 13593 Return the set of symbols loaded by statement 'G'. Each element of 13594 the set is the 'DECL_UID' of the corresponding symbol. 13595 13596 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 13597 Return the set of symbols stored by statement 'G'. Each element of 13598 the set is the 'DECL_UID' of the corresponding symbol. 13599 13600 -- GIMPLE function: bool gimple_modified_p (gimple g) 13601 Return true if statement 'G' has operands and the modified field 13602 has been set. 13603 13604 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 13605 Return true if statement 'STMT' contains volatile operands. 13606 13607 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool 13608 volatilep) 13609 Return true if statement 'STMT' contains volatile operands. 13610 13611 -- GIMPLE function: void update_stmt (gimple s) 13612 Mark statement 'S' as modified, and update it. 13613 13614 -- GIMPLE function: void update_stmt_if_modified (gimple s) 13615 Update statement 'S' if it has been marked modified. 13616 13617 -- GIMPLE function: gimple gimple_copy (gimple stmt) 13618 Return a deep copy of statement 'STMT'. 13619 13620 13621File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 13622 1362312.8 Tuple specific accessors 13624============================= 13625 13626* Menu: 13627 13628* 'GIMPLE_ASM':: 13629* 'GIMPLE_ASSIGN':: 13630* 'GIMPLE_BIND':: 13631* 'GIMPLE_CALL':: 13632* 'GIMPLE_CATCH':: 13633* 'GIMPLE_COND':: 13634* 'GIMPLE_DEBUG':: 13635* 'GIMPLE_EH_FILTER':: 13636* 'GIMPLE_LABEL':: 13637* 'GIMPLE_GOTO':: 13638* 'GIMPLE_NOP':: 13639* 'GIMPLE_OMP_ATOMIC_LOAD':: 13640* 'GIMPLE_OMP_ATOMIC_STORE':: 13641* 'GIMPLE_OMP_CONTINUE':: 13642* 'GIMPLE_OMP_CRITICAL':: 13643* 'GIMPLE_OMP_FOR':: 13644* 'GIMPLE_OMP_MASTER':: 13645* 'GIMPLE_OMP_ORDERED':: 13646* 'GIMPLE_OMP_PARALLEL':: 13647* 'GIMPLE_OMP_RETURN':: 13648* 'GIMPLE_OMP_SECTION':: 13649* 'GIMPLE_OMP_SECTIONS':: 13650* 'GIMPLE_OMP_SINGLE':: 13651* 'GIMPLE_PHI':: 13652* 'GIMPLE_RESX':: 13653* 'GIMPLE_RETURN':: 13654* 'GIMPLE_SWITCH':: 13655* 'GIMPLE_TRY':: 13656* 'GIMPLE_WITH_CLEANUP_EXPR':: 13657 13658 13659File: gccint.info, Node: 'GIMPLE_ASM', Next: 'GIMPLE_ASSIGN', Up: Tuple specific accessors 13660 1366112.8.1 'GIMPLE_ASM' 13662------------------- 13663 13664 -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string, 13665 vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree, 13666 va_gc> *clobbers, vec<tree, va_gc> *labels) 13667 Build a 'GIMPLE_ASM' statement. This statement is used for 13668 building in-line assembly constructs. 'STRING' is the assembly 13669 code. 'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs, 13670 outputs, clobbered registers and labels. 13671 13672 -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g) 13673 Return the number of input operands for 'GIMPLE_ASM' 'G'. 13674 13675 -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g) 13676 Return the number of output operands for 'GIMPLE_ASM' 'G'. 13677 13678 -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g) 13679 Return the number of clobber operands for 'GIMPLE_ASM' 'G'. 13680 13681 -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned 13682 index) 13683 Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'. 13684 13685 -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned 13686 index, tree in_op) 13687 Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'. 13688 13689 -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned 13690 index) 13691 Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'. 13692 13693 -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned 13694 index, tree out_op) 13695 Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'. 13696 13697 -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned 13698 index) 13699 Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'. 13700 13701 -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned 13702 index, tree clobber_op) 13703 Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'. 13704 13705 -- GIMPLE function: const char * gimple_asm_string (const gasm *g) 13706 Return the string representing the assembly instruction in 13707 'GIMPLE_ASM' 'G'. 13708 13709 -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g) 13710 Return true if 'G' is an asm statement marked volatile. 13711 13712 -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool 13713 volatile_p) 13714 Mark asm statement 'G' as volatile or non-volatile based on 13715 'VOLATILE_P'. 13716 13717 13718File: gccint.info, Node: 'GIMPLE_ASSIGN', Next: 'GIMPLE_BIND', Prev: 'GIMPLE_ASM', Up: Tuple specific accessors 13719 1372012.8.2 'GIMPLE_ASSIGN' 13721---------------------- 13722 13723 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs) 13724 Build a 'GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 13725 passed in lhs. The right-hand side can be either a unary or binary 13726 tree expression. The expression tree rhs will be flattened and its 13727 operands assigned to the corresponding operand slots in the new 13728 statement. This function is useful when you already have a tree 13729 expression that you want to convert into a tuple. However, try to 13730 avoid building expression trees for the sole purpose of calling 13731 this function. If you already have the operands in separate trees, 13732 it is better to use 'gimple_build_assign' with 'enum tree_code' 13733 argument and separate arguments for each operand. 13734 13735 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 13736 tree_code subcode, tree op1, tree op2, tree op3) 13737 This function is similar to two operand 'gimple_build_assign', but 13738 is used to build a 'GIMPLE_ASSIGN' statement when the operands of 13739 the right-hand side of the assignment are already split into 13740 different operands. 13741 13742 The left-hand side is an lvalue passed in lhs. Subcode is the 13743 'tree_code' for the right-hand side of the assignment. Op1, op2 13744 and op3 are the operands. 13745 13746 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 13747 tree_code subcode, tree op1, tree op2) 13748 Like the above 5 operand 'gimple_build_assign', but with the last 13749 argument 'NULL' - this overload should not be used for 13750 'GIMPLE_TERNARY_RHS' assignments. 13751 13752 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 13753 tree_code subcode, tree op1) 13754 Like the above 4 operand 'gimple_build_assign', but with the last 13755 argument 'NULL' - this overload should be used only for 13756 'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments. 13757 13758 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 13759 gimple_seq *seq_p) 13760 Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of 13761 '*SEQ_P'. 13762 13763 'DST'/'SRC' are the destination and source respectively. You can pass 13764ungimplified trees in 'DST' or 'SRC', in which case they will be 13765converted to a gimple operand if necessary. 13766 13767 This function returns the newly created 'GIMPLE_ASSIGN' tuple. 13768 13769 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 13770 Return the code of the expression computed on the 'RHS' of 13771 assignment statement 'G'. 13772 13773 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 13774 (gimple g) 13775 Return the gimple rhs class of the code for the expression computed 13776 on the rhs of assignment statement 'G'. This will never return 13777 'GIMPLE_INVALID_RHS'. 13778 13779 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 13780 Return the 'LHS' of assignment statement 'G'. 13781 13782 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g) 13783 Return a pointer to the 'LHS' of assignment statement 'G'. 13784 13785 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 13786 Return the first operand on the 'RHS' of assignment statement 'G'. 13787 13788 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g) 13789 Return the address of the first operand on the 'RHS' of assignment 13790 statement 'G'. 13791 13792 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 13793 Return the second operand on the 'RHS' of assignment statement 'G'. 13794 13795 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g) 13796 Return the address of the second operand on the 'RHS' of assignment 13797 statement 'G'. 13798 13799 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g) 13800 Return the third operand on the 'RHS' of assignment statement 'G'. 13801 13802 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g) 13803 Return the address of the third operand on the 'RHS' of assignment 13804 statement 'G'. 13805 13806 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 13807 Set 'LHS' to be the 'LHS' operand of assignment statement 'G'. 13808 13809 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 13810 Set 'RHS' to be the first operand on the 'RHS' of assignment 13811 statement 'G'. 13812 13813 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 13814 Set 'RHS' to be the second operand on the 'RHS' of assignment 13815 statement 'G'. 13816 13817 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs) 13818 Set 'RHS' to be the third operand on the 'RHS' of assignment 13819 statement 'G'. 13820 13821 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s) 13822 Return true if 'S' is a type-cast assignment. 13823 13824 13825File: gccint.info, Node: 'GIMPLE_BIND', Next: 'GIMPLE_CALL', Prev: 'GIMPLE_ASSIGN', Up: Tuple specific accessors 13826 1382712.8.3 'GIMPLE_BIND' 13828-------------------- 13829 13830 -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq 13831 body) 13832 Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS' 13833 and a body of statements in sequence 'BODY'. 13834 13835 -- GIMPLE function: tree gimple_bind_vars (const gbind *g) 13836 Return the variables declared in the 'GIMPLE_BIND' statement 'G'. 13837 13838 -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars) 13839 Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND' 13840 statement 'G'. 13841 13842 -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars) 13843 Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND' 13844 statement 'G'. 13845 13846 -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g) 13847 Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement 13848 'G'. 13849 13850 -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq 13851 seq) 13852 Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement 13853 'G'. 13854 13855 -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt) 13856 Append a statement to the end of a 'GIMPLE_BIND''s body. 13857 13858 -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq 13859 seq) 13860 Append a sequence of statements to the end of a 'GIMPLE_BIND''s 13861 body. 13862 13863 -- GIMPLE function: tree gimple_bind_block (const gbind *g) 13864 Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND' 13865 statement 'G'. This is analogous to the 'BIND_EXPR_BLOCK' field in 13866 trees. 13867 13868 -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block) 13869 Set 'BLOCK' to be the 'TREE_BLOCK' node associated with 13870 'GIMPLE_BIND' statement 'G'. 13871 13872 13873File: gccint.info, Node: 'GIMPLE_CALL', Next: 'GIMPLE_CATCH', Prev: 'GIMPLE_BIND', Up: Tuple specific accessors 13874 1387512.8.4 'GIMPLE_CALL' 13876-------------------- 13877 13878 -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs, 13879 ...) 13880 Build a 'GIMPLE_CALL' statement to function 'FN'. The argument 13881 'FN' must be either a 'FUNCTION_DECL' or a gimple call address as 13882 determined by 'is_gimple_call_addr'. 'NARGS' are the number of 13883 arguments. The rest of the arguments follow the argument 'NARGS', 13884 and must be trees that are valid as rvalues in gimple (i.e., each 13885 operand is validated with 'is_gimple_operand'). 13886 13887 -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr, 13888 tree fnptrtype) 13889 Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node. The arguments and 13890 the function are taken from the expression directly. The type of 13891 the 'GIMPLE_CALL' is set from the second parameter passed by a 13892 caller. This routine assumes that 'call_expr' is already in GIMPLE 13893 form. That is, its operands are GIMPLE values and the function 13894 call needs no further simplification. All the call flags in 13895 'call_expr' are copied over to the new 'GIMPLE_CALL'. 13896 13897 -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>' 13898 args) 13899 Identical to 'gimple_build_call' but the arguments are stored in a 13900 'vec<tree>'. 13901 13902 -- GIMPLE function: tree gimple_call_lhs (gimple g) 13903 Return the 'LHS' of call statement 'G'. 13904 13905 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g) 13906 Return a pointer to the 'LHS' of call statement 'G'. 13907 13908 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 13909 Set 'LHS' to be the 'LHS' operand of call statement 'G'. 13910 13911 -- GIMPLE function: tree gimple_call_fn (gimple g) 13912 Return the tree node representing the function called by call 13913 statement 'G'. 13914 13915 -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn) 13916 Set 'FN' to be the function called by call statement 'G'. This has 13917 to be a gimple value specifying the address of the called function. 13918 13919 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 13920 If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it. 13921 Otherwise return 'NULL'. This function is analogous to 13922 'get_callee_fndecl' in 'GENERIC'. 13923 13924 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 13925 Set the called function to 'FNDECL'. 13926 13927 -- GIMPLE function: tree gimple_call_return_type (const gcall *g) 13928 Return the type returned by call statement 'G'. 13929 13930 -- GIMPLE function: tree gimple_call_chain (gimple g) 13931 Return the static chain for call statement 'G'. 13932 13933 -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain) 13934 Set 'CHAIN' to be the static chain for call statement 'G'. 13935 13936 -- GIMPLE function: unsigned gimple_call_num_args (gimple g) 13937 Return the number of arguments used by call statement 'G'. 13938 13939 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 13940 Return the argument at position 'INDEX' for call statement 'G'. 13941 The first argument is 0. 13942 13943 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned 13944 index) 13945 Return a pointer to the argument at position 'INDEX' for call 13946 statement 'G'. 13947 13948 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index, 13949 tree arg) 13950 Set 'ARG' to be the argument at position 'INDEX' for call statement 13951 'G'. 13952 13953 -- GIMPLE function: void gimple_call_set_tail (gcall *s) 13954 Mark call statement 'S' as being a tail call (i.e., a call just 13955 before the exit of a function). These calls are candidate for tail 13956 call optimization. 13957 13958 -- GIMPLE function: bool gimple_call_tail_p (gcall *s) 13959 Return true if 'GIMPLE_CALL' 'S' is marked as a tail call. 13960 13961 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 13962 Return true if 'S' is a noreturn call. 13963 13964 -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt, 13965 bitmap args_to_skip) 13966 Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the 13967 arguments in the positions marked by the set 'ARGS_TO_SKIP'. 13968 13969 13970File: gccint.info, Node: 'GIMPLE_CATCH', Next: 'GIMPLE_COND', Prev: 'GIMPLE_CALL', Up: Tuple specific accessors 13971 1397212.8.5 'GIMPLE_CATCH' 13973--------------------- 13974 13975 -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq 13976 handler) 13977 Build a 'GIMPLE_CATCH' statement. 'TYPES' are the tree types this 13978 catch handles. 'HANDLER' is a sequence of statements with the code 13979 for the handler. 13980 13981 -- GIMPLE function: tree gimple_catch_types (const gcatch *g) 13982 Return the types handled by 'GIMPLE_CATCH' statement 'G'. 13983 13984 -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g) 13985 Return a pointer to the types handled by 'GIMPLE_CATCH' statement 13986 'G'. 13987 13988 -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g) 13989 Return the GIMPLE sequence representing the body of the handler of 13990 'GIMPLE_CATCH' statement 'G'. 13991 13992 -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t) 13993 Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'. 13994 13995 -- GIMPLE function: void gimple_catch_set_handler (gcatch *g, 13996 gimple_seq handler) 13997 Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'. 13998 13999 14000File: gccint.info, Node: 'GIMPLE_COND', Next: 'GIMPLE_DEBUG', Prev: 'GIMPLE_CATCH', Up: Tuple specific accessors 14001 1400212.8.6 'GIMPLE_COND' 14003-------------------- 14004 14005 -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code 14006 pred_code, tree lhs, tree rhs, tree t_label, tree f_label) 14007 Build a 'GIMPLE_COND' statement. 'A' 'GIMPLE_COND' statement 14008 compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is 14009 true, jump to the label in 't_label', otherwise jump to the label 14010 in 'f_label'. 'PRED_CODE' are relational operator tree codes like 14011 'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc. 14012 14013 -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree 14014 t_label, tree f_label) 14015 Build a 'GIMPLE_COND' statement from the conditional expression 14016 tree 'COND'. 'T_LABEL' and 'F_LABEL' are as in 14017 'gimple_build_cond'. 14018 14019 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 14020 Return the code of the predicate computed by conditional statement 14021 'G'. 14022 14023 -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code 14024 code) 14025 Set 'CODE' to be the predicate code for the conditional statement 14026 'G'. 14027 14028 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 14029 Return the 'LHS' of the predicate computed by conditional statement 14030 'G'. 14031 14032 -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs) 14033 Set 'LHS' to be the 'LHS' operand of the predicate computed by 14034 conditional statement 'G'. 14035 14036 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 14037 Return the 'RHS' operand of the predicate computed by conditional 14038 'G'. 14039 14040 -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs) 14041 Set 'RHS' to be the 'RHS' operand of the predicate computed by 14042 conditional statement 'G'. 14043 14044 -- GIMPLE function: tree gimple_cond_true_label (const gcond *g) 14045 Return the label used by conditional statement 'G' when its 14046 predicate evaluates to true. 14047 14048 -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree 14049 label) 14050 Set 'LABEL' to be the label used by conditional statement 'G' when 14051 its predicate evaluates to true. 14052 14053 -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree 14054 label) 14055 Set 'LABEL' to be the label used by conditional statement 'G' when 14056 its predicate evaluates to false. 14057 14058 -- GIMPLE function: tree gimple_cond_false_label (const gcond *g) 14059 Return the label used by conditional statement 'G' when its 14060 predicate evaluates to false. 14061 14062 -- GIMPLE function: void gimple_cond_make_false (gcond *g) 14063 Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'. 14064 14065 -- GIMPLE function: void gimple_cond_make_true (gcond *g) 14066 Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'. 14067 14068 14069File: gccint.info, Node: 'GIMPLE_DEBUG', Next: 'GIMPLE_EH_FILTER', Prev: 'GIMPLE_COND', Up: Tuple specific accessors 14070 1407112.8.7 'GIMPLE_DEBUG' 14072--------------------- 14073 14074 -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree 14075 value, gimple stmt) 14076 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' 14077 'subcode'. The effect of this statement is to tell debug 14078 information generation machinery that the value of user variable 14079 'var' is given by 'value' at that point, and to remain with that 14080 value until 'var' runs out of scope, a dynamically-subsequent debug 14081 bind statement overrides the binding, or conflicting values reach a 14082 control flow merge point. Even if components of the 'value' 14083 expression change afterwards, the variable is supposed to retain 14084 the same value, though not necessarily the same location. 14085 14086 It is expected that 'var' be most often a tree for automatic user 14087 variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements 14088 for gimple registers, but it may also be a tree for a scalarized 14089 component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a 14090 debug temporary ('DEBUG_EXPR_DECL'). 14091 14092 As for 'value', it can be an arbitrary tree expression, but it is 14093 recommended that it be in a suitable form for a gimple assignment 14094 'RHS'. It is not expected that user variables that could appear as 14095 'var' ever appear in 'value', because in the latter we'd have their 14096 'SSA_NAME's instead, but even if they were not in SSA form, user 14097 variables appearing in 'value' are to be regarded as part of the 14098 executable code space, whereas those in 'var' are to be regarded as 14099 part of the source code space. There is no way to refer to the 14100 value bound to a user variable within a 'value' expression. 14101 14102 If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information 14103 generation machinery is informed that the variable 'var' is 14104 unbound, i.e., that its value is indeterminate, which sometimes 14105 means it is really unavailable, and other times that the compiler 14106 could not keep track of it. 14107 14108 Block and location information for the newly-created stmt are taken 14109 from 'stmt', if given. 14110 14111 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 14112 Return the user variable VAR that is bound at 'stmt'. 14113 14114 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 14115 Return the value expression that is bound to a user variable at 14116 'stmt'. 14117 14118 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple 14119 stmt) 14120 Return a pointer to the value expression that is bound to a user 14121 variable at 'stmt'. 14122 14123 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 14124 var) 14125 Modify the user variable bound at 'stmt' to VAR. 14126 14127 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree 14128 var) 14129 Modify the value bound to the user variable bound at 'stmt' to 14130 VALUE. 14131 14132 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 14133 Modify the value bound to the user variable bound at 'stmt' so that 14134 the variable becomes unbound. 14135 14136 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 14137 Return 'TRUE' if 'stmt' binds a user variable to a value, and 14138 'FALSE' if it unbinds the variable. 14139 14140 -- GIMPLE function: gimple gimple_build_debug_begin_stmt (tree block, 14141 location_t location) 14142 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BEGIN_STMT' 14143 'subcode'. The effect of this statement is to tell debug 14144 information generation machinery that the user statement at the 14145 given 'location' and 'block' starts at the point at which the 14146 statement is inserted. The intent is that side effects (e.g. 14147 variable bindings) of all prior user statements are observable, and 14148 that none of the side effects of subsequent user statements are. 14149 14150 -- GIMPLE function: gimple gimple_build_debug_inline_entry (tree block, 14151 location_t location) 14152 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_INLINE_ENTRY' 14153 'subcode'. The effect of this statement is to tell debug 14154 information generation machinery that a function call at 'location' 14155 underwent inline substitution, that 'block' is the enclosing 14156 lexical block created for the substitution, and that at the point 14157 of the program in which the stmt is inserted, all parameters for 14158 the inlined function are bound to the respective arguments, and 14159 none of the side effects of its stmts are observable. 14160 14161 14162File: gccint.info, Node: 'GIMPLE_EH_FILTER', Next: 'GIMPLE_LABEL', Prev: 'GIMPLE_DEBUG', Up: Tuple specific accessors 14163 1416412.8.8 'GIMPLE_EH_FILTER' 14165------------------------- 14166 14167 -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types, 14168 gimple_seq failure) 14169 Build a 'GIMPLE_EH_FILTER' statement. 'TYPES' are the filter's 14170 types. 'FAILURE' is a sequence with the filter's failure action. 14171 14172 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 14173 Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'. 14174 14175 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g) 14176 Return a pointer to the types handled by 'GIMPLE_EH_FILTER' 14177 statement 'G'. 14178 14179 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 14180 Return the sequence of statement to execute when 'GIMPLE_EH_FILTER' 14181 statement fails. 14182 14183 -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g, 14184 tree types) 14185 Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER' 14186 'G'. 14187 14188 -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g, 14189 gimple_seq failure) 14190 Set 'FAILURE' to be the sequence of statements to execute on 14191 failure for 'GIMPLE_EH_FILTER' 'G'. 14192 14193 -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt 14194 *eh_mnt_stmt) 14195 Get the function decl to be called by the MUST_NOT_THROW region. 14196 14197 -- GIMPLE function: void gimple_eh_must_not_throw_set_fndecl ( geh_mnt 14198 *eh_mnt_stmt, tree decl) 14199 Set the function decl to be called by GS to DECL. 14200 14201 14202File: gccint.info, Node: 'GIMPLE_LABEL', Next: 'GIMPLE_GOTO', Prev: 'GIMPLE_EH_FILTER', Up: Tuple specific accessors 14203 1420412.8.9 'GIMPLE_LABEL' 14205--------------------- 14206 14207 -- GIMPLE function: glabel *gimple_build_label (tree label) 14208 Build a 'GIMPLE_LABEL' statement with corresponding to the tree 14209 label, 'LABEL'. 14210 14211 -- GIMPLE function: tree gimple_label_label (const glabel *g) 14212 Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'. 14213 14214 -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label) 14215 Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL' 14216 statement 'G'. 14217 14218 14219File: gccint.info, Node: 'GIMPLE_GOTO', Next: 'GIMPLE_NOP', Prev: 'GIMPLE_LABEL', Up: Tuple specific accessors 14220 1422112.8.10 'GIMPLE_GOTO' 14222--------------------- 14223 14224 -- GIMPLE function: ggoto *gimple_build_goto (tree dest) 14225 Build a 'GIMPLE_GOTO' statement to label 'DEST'. 14226 14227 -- GIMPLE function: tree gimple_goto_dest (gimple g) 14228 Return the destination of the unconditional jump 'G'. 14229 14230 -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest) 14231 Set 'DEST' to be the destination of the unconditional jump 'G'. 14232 14233 14234File: gccint.info, Node: 'GIMPLE_NOP', Next: 'GIMPLE_OMP_ATOMIC_LOAD', Prev: 'GIMPLE_GOTO', Up: Tuple specific accessors 14235 1423612.8.11 'GIMPLE_NOP' 14237-------------------- 14238 14239 -- GIMPLE function: gimple gimple_build_nop (void) 14240 Build a 'GIMPLE_NOP' statement. 14241 14242 -- GIMPLE function: bool gimple_nop_p (gimple g) 14243 Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'. 14244 14245 14246File: gccint.info, Node: 'GIMPLE_OMP_ATOMIC_LOAD', Next: 'GIMPLE_OMP_ATOMIC_STORE', Prev: 'GIMPLE_NOP', Up: Tuple specific accessors 14247 1424812.8.12 'GIMPLE_OMP_ATOMIC_LOAD' 14249-------------------------------- 14250 14251 -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load ( 14252 tree lhs, tree rhs) 14253 Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement. 'LHS' is the left-hand 14254 side of the assignment. 'RHS' is the right-hand side of the 14255 assignment. 14256 14257 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs ( 14258 gomp_atomic_load *g, tree lhs) 14259 Set the 'LHS' of an atomic load. 14260 14261 -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const 14262 gomp_atomic_load *g) 14263 Get the 'LHS' of an atomic load. 14264 14265 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs ( 14266 gomp_atomic_load *g, tree rhs) 14267 Set the 'RHS' of an atomic set. 14268 14269 -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const 14270 gomp_atomic_load *g) 14271 Get the 'RHS' of an atomic set. 14272 14273 14274File: gccint.info, Node: 'GIMPLE_OMP_ATOMIC_STORE', Next: 'GIMPLE_OMP_CONTINUE', Prev: 'GIMPLE_OMP_ATOMIC_LOAD', Up: Tuple specific accessors 14275 1427612.8.13 'GIMPLE_OMP_ATOMIC_STORE' 14277--------------------------------- 14278 14279 -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store ( 14280 tree val) 14281 Build a 'GIMPLE_OMP_ATOMIC_STORE' statement. 'VAL' is the value to 14282 be stored. 14283 14284 -- GIMPLE function: void gimple_omp_atomic_store_set_val ( 14285 gomp_atomic_store *g, tree val) 14286 Set the value being stored in an atomic store. 14287 14288 -- GIMPLE function: tree gimple_omp_atomic_store_val ( const 14289 gomp_atomic_store *g) 14290 Return the value being stored in an atomic store. 14291 14292 14293File: gccint.info, Node: 'GIMPLE_OMP_CONTINUE', Next: 'GIMPLE_OMP_CRITICAL', Prev: 'GIMPLE_OMP_ATOMIC_STORE', Up: Tuple specific accessors 14294 1429512.8.14 'GIMPLE_OMP_CONTINUE' 14296----------------------------- 14297 14298 -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree 14299 control_def, tree control_use) 14300 Build a 'GIMPLE_OMP_CONTINUE' statement. 'CONTROL_DEF' is the 14301 definition of the control variable. 'CONTROL_USE' is the use of 14302 the control variable. 14303 14304 -- GIMPLE function: tree gimple_omp_continue_control_def ( const 14305 gomp_continue *s) 14306 Return the definition of the control variable on a 14307 'GIMPLE_OMP_CONTINUE' in 'S'. 14308 14309 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr ( 14310 gomp_continue *s) 14311 Same as above, but return the pointer. 14312 14313 -- GIMPLE function: tree gimple_omp_continue_set_control_def ( 14314 gomp_continue *s) 14315 Set the control variable definition for a 'GIMPLE_OMP_CONTINUE' 14316 statement in 'S'. 14317 14318 -- GIMPLE function: tree gimple_omp_continue_control_use ( const 14319 gomp_continue *s) 14320 Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE' 14321 in 'S'. 14322 14323 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr ( 14324 gomp_continue *s) 14325 Same as above, but return the pointer. 14326 14327 -- GIMPLE function: tree gimple_omp_continue_set_control_use ( 14328 gomp_continue *s) 14329 Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement 14330 in 'S'. 14331 14332 14333File: gccint.info, Node: 'GIMPLE_OMP_CRITICAL', Next: 'GIMPLE_OMP_FOR', Prev: 'GIMPLE_OMP_CONTINUE', Up: Tuple specific accessors 14334 1433512.8.15 'GIMPLE_OMP_CRITICAL' 14336----------------------------- 14337 14338 -- GIMPLE function: gomp_critical *gimple_build_omp_critical ( 14339 gimple_seq body, tree name) 14340 Build a 'GIMPLE_OMP_CRITICAL' statement. 'BODY' is the sequence of 14341 statements for which only one thread can execute. 'NAME' is an 14342 optional identifier for this critical block. 14343 14344 -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical 14345 *g) 14346 Return the name associated with 'OMP_CRITICAL' statement 'G'. 14347 14348 -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical 14349 *g) 14350 Return a pointer to the name associated with 'OMP' critical 14351 statement 'G'. 14352 14353 -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical 14354 *g, tree name) 14355 Set 'NAME' to be the name associated with 'OMP' critical statement 14356 'G'. 14357 14358 14359File: gccint.info, Node: 'GIMPLE_OMP_FOR', Next: 'GIMPLE_OMP_MASTER', Prev: 'GIMPLE_OMP_CRITICAL', Up: Tuple specific accessors 14360 1436112.8.16 'GIMPLE_OMP_FOR' 14362------------------------ 14363 14364 -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body, 14365 tree clauses, tree index, tree initial, tree final, tree incr, 14366 gimple_seq pre_body, enum tree_code omp_for_cond) 14367 Build a 'GIMPLE_OMP_FOR' statement. 'BODY' is sequence of 14368 statements inside the for loop. 'CLAUSES', are any of the loop 14369 construct's clauses. 'PRE_BODY' is the sequence of statements that 14370 are loop invariant. 'INDEX' is the index variable. 'INITIAL' is 14371 the initial value of 'INDEX'. 'FINAL' is final value of 'INDEX'. 14372 OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'. 14373 'INCR' is the increment expression. 14374 14375 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 14376 Return the clauses associated with 'OMP_FOR' 'G'. 14377 14378 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g) 14379 Return a pointer to the 'OMP_FOR' 'G'. 14380 14381 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 14382 clauses) 14383 Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR' 14384 'G'. 14385 14386 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 14387 Return the index variable for 'OMP_FOR' 'G'. 14388 14389 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g) 14390 Return a pointer to the index variable for 'OMP_FOR' 'G'. 14391 14392 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 14393 index) 14394 Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'. 14395 14396 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 14397 Return the initial value for 'OMP_FOR' 'G'. 14398 14399 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g) 14400 Return a pointer to the initial value for 'OMP_FOR' 'G'. 14401 14402 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 14403 initial) 14404 Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'. 14405 14406 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 14407 Return the final value for 'OMP_FOR' 'G'. 14408 14409 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g) 14410 turn a pointer to the final value for 'OMP_FOR' 'G'. 14411 14412 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 14413 final) 14414 Set 'FINAL' to be the final value for 'OMP_FOR' 'G'. 14415 14416 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 14417 Return the increment value for 'OMP_FOR' 'G'. 14418 14419 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g) 14420 Return a pointer to the increment value for 'OMP_FOR' 'G'. 14421 14422 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 14423 Set 'INCR' to be the increment value for 'OMP_FOR' 'G'. 14424 14425 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 14426 Return the sequence of statements to execute before the 'OMP_FOR' 14427 statement 'G' starts. 14428 14429 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 14430 gimple_seq pre_body) 14431 Set 'PRE_BODY' to be the sequence of statements to execute before 14432 the 'OMP_FOR' statement 'G' starts. 14433 14434 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 14435 tree_code cond) 14436 Set 'COND' to be the condition code for 'OMP_FOR' 'G'. 14437 14438 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 14439 Return the condition code associated with 'OMP_FOR' 'G'. 14440 14441 14442File: gccint.info, Node: 'GIMPLE_OMP_MASTER', Next: 'GIMPLE_OMP_ORDERED', Prev: 'GIMPLE_OMP_FOR', Up: Tuple specific accessors 14443 1444412.8.17 'GIMPLE_OMP_MASTER' 14445--------------------------- 14446 14447 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 14448 Build a 'GIMPLE_OMP_MASTER' statement. 'BODY' is the sequence of 14449 statements to be executed by just the master. 14450 14451 14452File: gccint.info, Node: 'GIMPLE_OMP_ORDERED', Next: 'GIMPLE_OMP_PARALLEL', Prev: 'GIMPLE_OMP_MASTER', Up: Tuple specific accessors 14453 1445412.8.18 'GIMPLE_OMP_ORDERED' 14455---------------------------- 14456 14457 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 14458 Build a 'GIMPLE_OMP_ORDERED' statement. 14459 14460 'BODY' is the sequence of statements inside a loop that will executed 14461in sequence. 14462 14463 14464File: gccint.info, Node: 'GIMPLE_OMP_PARALLEL', Next: 'GIMPLE_OMP_RETURN', Prev: 'GIMPLE_OMP_ORDERED', Up: Tuple specific accessors 14465 1446612.8.19 'GIMPLE_OMP_PARALLEL' 14467----------------------------- 14468 14469 -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel 14470 (gimple_seq body, tree clauses, tree child_fn, tree data_arg) 14471 Build a 'GIMPLE_OMP_PARALLEL' statement. 14472 14473 'BODY' is sequence of statements which are executed in parallel. 14474'CLAUSES', are the 'OMP' parallel construct's clauses. 'CHILD_FN' is 14475the function created for the parallel threads to execute. 'DATA_ARG' 14476are the shared data argument(s). 14477 14478 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 14479 Return true if 'OMP' parallel statement 'G' has the 14480 'GF_OMP_PARALLEL_COMBINED' flag set. 14481 14482 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 14483 Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel 14484 statement 'G'. 14485 14486 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 14487 Return the body for the 'OMP' statement 'G'. 14488 14489 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 14490 body) 14491 Set 'BODY' to be the body for the 'OMP' statement 'G'. 14492 14493 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 14494 Return the clauses associated with 'OMP_PARALLEL' 'G'. 14495 14496 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr ( 14497 gomp_parallel *g) 14498 Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'. 14499 14500 -- GIMPLE function: void gimple_omp_parallel_set_clauses ( 14501 gomp_parallel *g, tree clauses) 14502 Set 'CLAUSES' to be the list of clauses associated with 14503 'OMP_PARALLEL' 'G'. 14504 14505 -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const 14506 gomp_parallel *g) 14507 Return the child function used to hold the body of 'OMP_PARALLEL' 14508 'G'. 14509 14510 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr ( 14511 gomp_parallel *g) 14512 Return a pointer to the child function used to hold the body of 14513 'OMP_PARALLEL' 'G'. 14514 14515 -- GIMPLE function: void gimple_omp_parallel_set_child_fn ( 14516 gomp_parallel *g, tree child_fn) 14517 Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'. 14518 14519 -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const 14520 gomp_parallel *g) 14521 Return the artificial argument used to send variables and values 14522 from the parent to the children threads in 'OMP_PARALLEL' 'G'. 14523 14524 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr ( 14525 gomp_parallel *g) 14526 Return a pointer to the data argument for 'OMP_PARALLEL' 'G'. 14527 14528 -- GIMPLE function: void gimple_omp_parallel_set_data_arg ( 14529 gomp_parallel *g, tree data_arg) 14530 Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'. 14531 14532 14533File: gccint.info, Node: 'GIMPLE_OMP_RETURN', Next: 'GIMPLE_OMP_SECTION', Prev: 'GIMPLE_OMP_PARALLEL', Up: Tuple specific accessors 14534 1453512.8.20 'GIMPLE_OMP_RETURN' 14536--------------------------- 14537 14538 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 14539 Build a 'GIMPLE_OMP_RETURN' statement. 'WAIT_P' is true if this is 14540 a non-waiting return. 14541 14542 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 14543 Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'. 14544 14545 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 14546 Return true if 'OMP' return statement 'G' has the 14547 'GF_OMP_RETURN_NOWAIT' flag set. 14548 14549 14550File: gccint.info, Node: 'GIMPLE_OMP_SECTION', Next: 'GIMPLE_OMP_SECTIONS', Prev: 'GIMPLE_OMP_RETURN', Up: Tuple specific accessors 14551 1455212.8.21 'GIMPLE_OMP_SECTION' 14553---------------------------- 14554 14555 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 14556 Build a 'GIMPLE_OMP_SECTION' statement for a sections statement. 14557 14558 'BODY' is the sequence of statements in the section. 14559 14560 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 14561 Return true if 'OMP' section statement 'G' has the 14562 'GF_OMP_SECTION_LAST' flag set. 14563 14564 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 14565 Set the 'GF_OMP_SECTION_LAST' flag on 'G'. 14566 14567 14568File: gccint.info, Node: 'GIMPLE_OMP_SECTIONS', Next: 'GIMPLE_OMP_SINGLE', Prev: 'GIMPLE_OMP_SECTION', Up: Tuple specific accessors 14569 1457012.8.22 'GIMPLE_OMP_SECTIONS' 14571----------------------------- 14572 14573 -- GIMPLE function: gomp_sections *gimple_build_omp_sections ( 14574 gimple_seq body, tree clauses) 14575 Build a 'GIMPLE_OMP_SECTIONS' statement. 'BODY' is a sequence of 14576 section statements. 'CLAUSES' are any of the 'OMP' sections 14577 construct's clauses: private, firstprivate, lastprivate, reduction, 14578 and nowait. 14579 14580 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 14581 Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement. 14582 14583 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 14584 Return the control variable associated with the 14585 'GIMPLE_OMP_SECTIONS' in 'G'. 14586 14587 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g) 14588 Return a pointer to the clauses associated with the 14589 'GIMPLE_OMP_SECTIONS' in 'G'. 14590 14591 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 14592 tree control) 14593 Set 'CONTROL' to be the set of clauses associated with the 14594 'GIMPLE_OMP_SECTIONS' in 'G'. 14595 14596 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 14597 Return the clauses associated with 'OMP_SECTIONS' 'G'. 14598 14599 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g) 14600 Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'. 14601 14602 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 14603 tree clauses) 14604 Set 'CLAUSES' to be the set of clauses associated with 14605 'OMP_SECTIONS' 'G'. 14606 14607 14608File: gccint.info, Node: 'GIMPLE_OMP_SINGLE', Next: 'GIMPLE_PHI', Prev: 'GIMPLE_OMP_SECTIONS', Up: Tuple specific accessors 14609 1461012.8.23 'GIMPLE_OMP_SINGLE' 14611--------------------------- 14612 14613 -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq 14614 body, tree clauses) 14615 Build a 'GIMPLE_OMP_SINGLE' statement. 'BODY' is the sequence of 14616 statements that will be executed once. 'CLAUSES' are any of the 14617 'OMP' single construct's clauses: private, firstprivate, 14618 copyprivate, nowait. 14619 14620 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 14621 Return the clauses associated with 'OMP_SINGLE' 'G'. 14622 14623 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g) 14624 Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'. 14625 14626 -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single 14627 *g, tree clauses) 14628 Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'. 14629 14630 14631File: gccint.info, Node: 'GIMPLE_PHI', Next: 'GIMPLE_RESX', Prev: 'GIMPLE_OMP_SINGLE', Up: Tuple specific accessors 14632 1463312.8.24 'GIMPLE_PHI' 14634-------------------- 14635 14636 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 14637 Return the maximum number of arguments supported by 'GIMPLE_PHI' 14638 'G'. 14639 14640 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 14641 Return the number of arguments in 'GIMPLE_PHI' 'G'. This must 14642 always be exactly the number of incoming edges for the basic block 14643 holding 'G'. 14644 14645 -- GIMPLE function: tree gimple_phi_result (gimple g) 14646 Return the 'SSA' name created by 'GIMPLE_PHI' 'G'. 14647 14648 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g) 14649 Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'. 14650 14651 -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result) 14652 Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'. 14653 14654 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index) 14655 Return the 'PHI' argument corresponding to incoming edge 'INDEX' 14656 for 'GIMPLE_PHI' 'G'. 14657 14658 -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct 14659 phi_arg_d * phiarg) 14660 Set 'PHIARG' to be the argument corresponding to incoming edge 14661 'INDEX' for 'GIMPLE_PHI' 'G'. 14662 14663 14664File: gccint.info, Node: 'GIMPLE_RESX', Next: 'GIMPLE_RETURN', Prev: 'GIMPLE_PHI', Up: Tuple specific accessors 14665 1466612.8.25 'GIMPLE_RESX' 14667--------------------- 14668 14669 -- GIMPLE function: gresx *gimple_build_resx (int region) 14670 Build a 'GIMPLE_RESX' statement which is a statement. This 14671 statement is a placeholder for _Unwind_Resume before we know if a 14672 function call or a branch is needed. 'REGION' is the exception 14673 region from which control is flowing. 14674 14675 -- GIMPLE function: int gimple_resx_region (const gresx *g) 14676 Return the region number for 'GIMPLE_RESX' 'G'. 14677 14678 -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region) 14679 Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'. 14680 14681 14682File: gccint.info, Node: 'GIMPLE_RETURN', Next: 'GIMPLE_SWITCH', Prev: 'GIMPLE_RESX', Up: Tuple specific accessors 14683 1468412.8.26 'GIMPLE_RETURN' 14685----------------------- 14686 14687 -- GIMPLE function: greturn *gimple_build_return (tree retval) 14688 Build a 'GIMPLE_RETURN' statement whose return value is retval. 14689 14690 -- GIMPLE function: tree gimple_return_retval (const greturn *g) 14691 Return the return value for 'GIMPLE_RETURN' 'G'. 14692 14693 -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree 14694 retval) 14695 Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'. 14696 14697 14698File: gccint.info, Node: 'GIMPLE_SWITCH', Next: 'GIMPLE_TRY', Prev: 'GIMPLE_RETURN', Up: Tuple specific accessors 14699 1470012.8.27 'GIMPLE_SWITCH' 14701----------------------- 14702 14703 -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree 14704 default_label, 'vec'<tree> *args) 14705 Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable 14706 to switch on, and 'DEFAULT_LABEL' represents the default label. 14707 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the 14708 non-default case labels. Each label is a tree of code 14709 'CASE_LABEL_EXPR'. 14710 14711 -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch 14712 *g) 14713 Return the number of labels associated with the switch statement 14714 'G'. 14715 14716 -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g, 14717 unsigned nlabels) 14718 Set 'NLABELS' to be the number of labels for the switch statement 14719 'G'. 14720 14721 -- GIMPLE function: tree gimple_switch_index (const gswitch *g) 14722 Return the index variable used by the switch statement 'G'. 14723 14724 -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree 14725 index) 14726 Set 'INDEX' to be the index variable for switch statement 'G'. 14727 14728 -- GIMPLE function: tree gimple_switch_label (const gswitch *g, 14729 unsigned index) 14730 Return the label numbered 'INDEX'. The default label is 0, 14731 followed by any labels in a switch statement. 14732 14733 -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned 14734 index, tree label) 14735 Set the label number 'INDEX' to 'LABEL'. 0 is always the default 14736 label. 14737 14738 -- GIMPLE function: tree gimple_switch_default_label ( const gswitch 14739 *g) 14740 Return the default label for a switch statement. 14741 14742 -- GIMPLE function: void gimple_switch_set_default_label (gswitch *g, 14743 tree label) 14744 Set the default label for a switch statement. 14745 14746 14747File: gccint.info, Node: 'GIMPLE_TRY', Next: 'GIMPLE_WITH_CLEANUP_EXPR', Prev: 'GIMPLE_SWITCH', Up: Tuple specific accessors 14748 1474912.8.28 'GIMPLE_TRY' 14750-------------------- 14751 14752 -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq 14753 cleanup, unsigned int kind) 14754 Build a 'GIMPLE_TRY' statement. 'EVAL' is a sequence with the 14755 expression to evaluate. 'CLEANUP' is a sequence of statements to 14756 run at clean-up time. 'KIND' is the enumeration value 14757 'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 14758 or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 14759 construct. 14760 14761 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 14762 Return the kind of try block represented by 'GIMPLE_TRY' 'G'. This 14763 is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'. 14764 14765 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 14766 Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 14767 14768 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 14769 Return the sequence of statements used as the body for 'GIMPLE_TRY' 14770 'G'. 14771 14772 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 14773 Return the sequence of statements used as the cleanup body for 14774 'GIMPLE_TRY' 'G'. 14775 14776 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 14777 bool catch_is_cleanup) 14778 Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 14779 14780 -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval) 14781 Set 'EVAL' to be the sequence of statements to use as the body for 14782 'GIMPLE_TRY' 'G'. 14783 14784 -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq 14785 cleanup) 14786 Set 'CLEANUP' to be the sequence of statements to use as the 14787 cleanup body for 'GIMPLE_TRY' 'G'. 14788 14789 14790File: gccint.info, Node: 'GIMPLE_WITH_CLEANUP_EXPR', Prev: 'GIMPLE_TRY', Up: Tuple specific accessors 14791 1479212.8.29 'GIMPLE_WITH_CLEANUP_EXPR' 14793---------------------------------- 14794 14795 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 14796 Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement. 'CLEANUP' is the 14797 clean-up expression. 14798 14799 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 14800 Return the cleanup sequence for cleanup statement 'G'. 14801 14802 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 14803 cleanup) 14804 Set 'CLEANUP' to be the cleanup sequence for 'G'. 14805 14806 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 14807 Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 14808 14809 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool 14810 eh_only_p) 14811 Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 14812 14813 14814File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 14815 1481612.9 GIMPLE sequences 14817===================== 14818 14819GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in 14820'GENERIC'. They are used to chain statements together, and when used in 14821conjunction with sequence iterators, provide a framework for iterating 14822through statements. 14823 14824 GIMPLE sequences are of type struct 'gimple_sequence', but are more 14825commonly passed by reference to functions dealing with sequences. The 14826type for a sequence pointer is 'gimple_seq' which is the same as struct 14827'gimple_sequence' *. When declaring a local sequence, you can define a 14828local variable of type struct 'gimple_sequence'. When declaring a 14829sequence allocated on the garbage collected heap, use the function 14830'gimple_seq_alloc' documented below. 14831 14832 There are convenience functions for iterating through sequences in the 14833section entitled Sequence Iterators. 14834 14835 Below is a list of functions to manipulate and query sequences. 14836 14837 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 14838 g) 14839 Link a gimple statement to the end of the sequence *'SEQ' if 'G' is 14840 not 'NULL'. If *'SEQ' is 'NULL', allocate a sequence before 14841 linking. 14842 14843 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 14844 gimple_seq src) 14845 Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is 14846 not 'NULL'. If *'DEST' is 'NULL', allocate a new sequence before 14847 appending. 14848 14849 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 14850 Perform a deep copy of sequence 'SRC' and return the result. 14851 14852 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 14853 Reverse the order of the statements in the sequence 'SEQ'. Return 14854 'SEQ'. 14855 14856 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 14857 Return the first statement in sequence 'S'. 14858 14859 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 14860 Return the last statement in sequence 'S'. 14861 14862 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 14863 last) 14864 Set the last statement in sequence 'S' to the statement in 'LAST'. 14865 14866 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 14867 first) 14868 Set the first statement in sequence 'S' to the statement in 14869 'FIRST'. 14870 14871 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 14872 Initialize sequence 'S' to an empty sequence. 14873 14874 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 14875 Allocate a new sequence in the garbage collected store and return 14876 it. 14877 14878 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 14879 src) 14880 Copy the sequence 'SRC' into the sequence 'DEST'. 14881 14882 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 14883 Return true if the sequence 'S' is empty. 14884 14885 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 14886 Returns the sequence of statements in 'BB'. 14887 14888 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 14889 Sets the sequence of statements in 'BB' to 'SEQ'. 14890 14891 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 14892 Determine whether 'SEQ' contains exactly one statement. 14893 14894 14895File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 14896 1489712.10 Sequence iterators 14898======================== 14899 14900Sequence iterators are convenience constructs for iterating through 14901statements in a sequence. Given a sequence 'SEQ', here is a typical use 14902of gimple sequence iterators: 14903 14904 gimple_stmt_iterator gsi; 14905 14906 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 14907 { 14908 gimple g = gsi_stmt (gsi); 14909 /* Do something with gimple statement G. */ 14910 } 14911 14912 Backward iterations are possible: 14913 14914 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 14915 14916 Forward and backward iterations on basic blocks are possible with 14917'gsi_start_bb' and 'gsi_last_bb'. 14918 14919 In the documentation below we sometimes refer to enum 14920'gsi_iterator_update'. The valid options for this enumeration are: 14921 14922 * 'GSI_NEW_STMT' Only valid when a single statement is added. Move 14923 the iterator to it. 14924 14925 * 'GSI_SAME_STMT' Leave the iterator at the same statement. 14926 14927 * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is 14928 suitable for linking other statements in the same direction. 14929 14930 Below is a list of the functions used to manipulate and use statement 14931iterators. 14932 14933 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 14934 Return a new iterator pointing to the sequence 'SEQ''s first 14935 statement. If 'SEQ' is empty, the iterator's basic block is 14936 'NULL'. Use 'gsi_start_bb' instead when the iterator needs to 14937 always have the correct basic block set. 14938 14939 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 14940 Return a new iterator pointing to the first statement in basic 14941 block 'BB'. 14942 14943 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 14944 Return a new iterator initially pointing to the last statement of 14945 sequence 'SEQ'. If 'SEQ' is empty, the iterator's basic block is 14946 'NULL'. Use 'gsi_last_bb' instead when the iterator needs to 14947 always have the correct basic block set. 14948 14949 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 14950 Return a new iterator pointing to the last statement in basic block 14951 'BB'. 14952 14953 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 14954 Return 'TRUE' if at the end of 'I'. 14955 14956 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 14957 Return 'TRUE' if we're one statement before the end of 'I'. 14958 14959 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 14960 Advance the iterator to the next gimple statement. 14961 14962 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 14963 Advance the iterator to the previous gimple statement. 14964 14965 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 14966 Return the current stmt. 14967 14968 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 14969 bb) 14970 Return a block statement iterator that points to the first 14971 non-label statement in block 'BB'. 14972 14973 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i) 14974 Return a pointer to the current stmt. 14975 14976 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 14977 Return the basic block associated with this iterator. 14978 14979 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 14980 Return the sequence associated with this iterator. 14981 14982 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 14983 remove_eh_info) 14984 Remove the current stmt from the sequence. The iterator is updated 14985 to point to the next statement. When 'REMOVE_EH_INFO' is true we 14986 remove the statement pointed to by iterator 'I' from the 'EH' 14987 tables. Otherwise we do not modify the 'EH' tables. Generally, 14988 'REMOVE_EH_INFO' should be true when the statement is going to be 14989 removed from the 'IL' and not reinserted elsewhere. 14990 14991 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 14992 gimple_seq seq, enum gsi_iterator_update mode) 14993 Links the sequence of statements 'SEQ' before the statement pointed 14994 by iterator 'I'. 'MODE' indicates what to do with the iterator 14995 after insertion (see 'enum gsi_iterator_update' above). 14996 14997 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 14998 gimple g, enum gsi_iterator_update mode) 14999 Links statement 'G' before the statement pointed-to by iterator 15000 'I'. Updates iterator 'I' according to 'MODE'. 15001 15002 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 15003 gimple_seq seq, enum gsi_iterator_update mode) 15004 Links sequence 'SEQ' after the statement pointed-to by iterator 15005 'I'. 'MODE' is as in 'gsi_insert_after'. 15006 15007 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 15008 gimple g, enum gsi_iterator_update mode) 15009 Links statement 'G' after the statement pointed-to by iterator 'I'. 15010 'MODE' is as in 'gsi_insert_after'. 15011 15012 -- GIMPLE function: gimple_seq gsi_split_seq_after 15013 (gimple_stmt_iterator i) 15014 Move all statements in the sequence after 'I' to a new sequence. 15015 Return this new sequence. 15016 15017 -- GIMPLE function: gimple_seq gsi_split_seq_before 15018 (gimple_stmt_iterator *i) 15019 Move all statements in the sequence before 'I' to a new sequence. 15020 Return this new sequence. 15021 15022 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 15023 stmt, bool update_eh_info) 15024 Replace the statement pointed-to by 'I' to 'STMT'. If 15025 'UPDATE_EH_INFO' is true, the exception handling information of the 15026 original statement is moved to the new statement. 15027 15028 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 15029 gimple stmt, enum gsi_iterator_update mode) 15030 Insert statement 'STMT' before the statement pointed-to by iterator 15031 'I', update 'STMT''s basic block and scan it for new operands. 15032 'MODE' specifies how to update iterator 'I' after insertion (see 15033 enum 'gsi_iterator_update'). 15034 15035 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 15036 *i, gimple_seq seq, enum gsi_iterator_update mode) 15037 Like 'gsi_insert_before', but for all the statements in 'SEQ'. 15038 15039 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 15040 gimple stmt, enum gsi_iterator_update mode) 15041 Insert statement 'STMT' after the statement pointed-to by iterator 15042 'I', update 'STMT''s basic block and scan it for new operands. 15043 'MODE' specifies how to update iterator 'I' after insertion (see 15044 enum 'gsi_iterator_update'). 15045 15046 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i, 15047 gimple_seq seq, enum gsi_iterator_update mode) 15048 Like 'gsi_insert_after', but for all the statements in 'SEQ'. 15049 15050 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 15051 Finds iterator for 'STMT'. 15052 15053 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 15054 gimple_stmt_iterator *to) 15055 Move the statement at 'FROM' so it comes right after the statement 15056 at 'TO'. 15057 15058 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 15059 gimple_stmt_iterator *to) 15060 Move the statement at 'FROM' so it comes right before the statement 15061 at 'TO'. 15062 15063 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 15064 *from, basic_block bb) 15065 Move the statement at 'FROM' to the end of basic block 'BB'. 15066 15067 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 15068 Add 'STMT' to the pending list of edge 'E'. No actual insertion is 15069 made until a call to 'gsi_commit_edge_inserts'() is made. 15070 15071 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 15072 seq) 15073 Add the sequence of statements in 'SEQ' to the pending list of edge 15074 'E'. No actual insertion is made until a call to 15075 'gsi_commit_edge_inserts'() is made. 15076 15077 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 15078 gimple stmt) 15079 Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'. If a 15080 new block has to be created, it is returned. 15081 15082 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 15083 basic_block *new_bb) 15084 Commit insertions pending at edge 'E'. If a new block is created, 15085 set 'NEW_BB' to this block, otherwise set it to 'NULL'. 15086 15087 -- GIMPLE function: void gsi_commit_edge_inserts (void) 15088 This routine will commit all pending edge insertions, creating any 15089 new basic blocks which are necessary. 15090 15091 15092File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 15093 1509412.11 Adding a new GIMPLE statement code 15095======================================== 15096 15097The first step in adding a new GIMPLE statement code, is modifying the 15098file 'gimple.def', which contains all the GIMPLE codes. Then you must 15099add a corresponding gimple subclass located in 'gimple.h'. This in 15100turn, will require you to add a corresponding 'GTY' tag in 15101'gsstruct.def', and code to handle this tag in 'gss_for_code' which is 15102located in 'gimple.c'. 15103 15104 In order for the garbage collector to know the size of the structure 15105you created in 'gimple.h', you need to add a case to handle your new 15106GIMPLE statement in 'gimple_size' which is located in 'gimple.c'. 15107 15108 You will probably want to create a function to build the new gimple 15109statement in 'gimple.c'. The function should be called 15110'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a 15111pointer to the appropriate gimple subclass. 15112 15113 If your new statement requires accessors for any members or operands it 15114may have, put simple inline accessors in 'gimple.h' and any non-trivial 15115accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'. 15116 15117 You should add the new statement subclass to the class hierarchy 15118diagram in 'gimple.texi'. 15119 15120 15121File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 15122 1512312.12 Statement and operand traversals 15124====================================== 15125 15126There are two functions available for walking statements and sequences: 15127'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third 15128function for walking the operands in a statement: 'walk_gimple_op'. 15129 15130 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 15131 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 15132 walk_stmt_info *wi) 15133 This function is used to walk the current statement in 'GSI', 15134 optionally using traversal state stored in 'WI'. If 'WI' is 15135 'NULL', no state is kept during the traversal. 15136 15137 The callback 'CALLBACK_STMT' is called. If 'CALLBACK_STMT' returns 15138 true, it means that the callback function has handled all the 15139 operands of the statement and it is not necessary to walk its 15140 operands. 15141 15142 If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is 15143 called on each operand of the statement via 'walk_gimple_op'. If 15144 'walk_gimple_op' returns non-'NULL' for any operand, the remaining 15145 operands are not scanned. 15146 15147 The return value is that returned by the last call to 15148 'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified. 15149 15150 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 15151 callback_op, struct walk_stmt_info *wi) 15152 Use this function to walk the operands of statement 'STMT'. Every 15153 operand is walked via 'walk_tree' with optional state information 15154 in 'WI'. 15155 15156 'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'. 15157 Additional parameters to 'walk_tree' must be stored in 'WI'. For 15158 each operand 'OP', 'walk_tree' is called as: 15159 15160 walk_tree (&OP, CALLBACK_OP, WI, PSET) 15161 15162 If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining 15163 operands are not scanned. The return value is that returned by the 15164 last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is 15165 specified. 15166 15167 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 15168 callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info 15169 *wi) 15170 This function walks all the statements in the sequence 'SEQ' 15171 calling 'walk_gimple_stmt' on each one. 'WI' is as in 15172 'walk_gimple_stmt'. If 'walk_gimple_stmt' returns non-'NULL', the 15173 walk is stopped and the value returned. Otherwise, all the 15174 statements are walked and 'NULL_TREE' returned. 15175 15176 15177File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top 15178 1517913 Analysis and Optimization of GIMPLE tuples 15180********************************************* 15181 15182GCC uses three main intermediate languages to represent the program 15183during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 15184language-independent representation generated by each front end. It is 15185used to serve as an interface between the parser and optimizer. GENERIC 15186is a common representation that is able to represent programs written in 15187all the languages supported by GCC. 15188 15189 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 15190target and language independent optimizations (e.g., inlining, constant 15191propagation, tail call elimination, redundancy elimination, etc). Much 15192like GENERIC, GIMPLE is a language independent, tree based 15193representation. However, it differs from GENERIC in that the GIMPLE 15194grammar is more restrictive: expressions contain no more than 3 operands 15195(except function calls), it has no control flow structures and 15196expressions with side effects are only allowed on the right hand side of 15197assignments. See the chapter describing GENERIC and GIMPLE for more 15198details. 15199 15200 This chapter describes the data structures and functions used in the 15201GIMPLE optimizers (also known as "tree optimizers" or "middle end"). In 15202particular, it focuses on all the macros, data structures, functions and 15203programming constructs needed to implement optimization passes for 15204GIMPLE. 15205 15206* Menu: 15207 15208* Annotations:: Attributes for variables. 15209* SSA Operands:: SSA names referenced by GIMPLE statements. 15210* SSA:: Static Single Assignment representation. 15211* Alias analysis:: Representing aliased loads and stores. 15212* Memory model:: Memory model used by the middle-end. 15213 15214 15215File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 15216 1521713.1 Annotations 15218================ 15219 15220The optimizers need to associate attributes with variables during the 15221optimization process. For instance, we need to know whether a variable 15222has aliases. All these attributes are stored in data structures called 15223annotations which are then linked to the field 'ann' in 'struct 15224tree_common'. 15225 15226 15227File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 15228 1522913.2 SSA Operands 15230================= 15231 15232Almost every GIMPLE statement will contain a reference to a variable or 15233memory location. Since statements come in different shapes and sizes, 15234their operands are going to be located at various spots inside the 15235statement's tree. To facilitate access to the statement's operands, 15236they are organized into lists associated inside each statement's 15237annotation. Each element in an operand list is a pointer to a 15238'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node. This provides a very 15239convenient way of examining and replacing operands. 15240 15241 Data flow analysis and optimization is done on all tree nodes 15242representing variables. Any node for which 'SSA_VAR_P' returns nonzero 15243is considered when scanning statement operands. However, not all 15244'SSA_VAR_P' variables are processed in the same way. For the purposes 15245of optimization, we need to distinguish between references to local 15246scalar variables and references to globals, statics, structures, arrays, 15247aliased variables, etc. The reason is simple, the compiler can gather 15248complete data flow information for a local scalar. On the other hand, a 15249global variable may be modified by a function call, it may not be 15250possible to keep track of all the elements of an array or the fields of 15251a structure, etc. 15252 15253 The operand scanner gathers two kinds of operands: "real" and 15254"virtual". An operand for which 'is_gimple_reg' returns true is 15255considered real, otherwise it is a virtual operand. We also distinguish 15256between uses and definitions. An operand is used if its value is loaded 15257by the statement (e.g., the operand at the RHS of an assignment). If 15258the statement assigns a new value to the operand, the operand is 15259considered a definition (e.g., the operand at the LHS of an assignment). 15260 15261 Virtual and real operands also have very different data flow 15262properties. Real operands are unambiguous references to the full object 15263that they represent. For instance, given 15264 15265 { 15266 int a, b; 15267 a = b 15268 } 15269 15270 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will 15271have one real definition and one real use because variable 'a' is 15272completely modified with the contents of variable 'b'. Real definition 15273are also known as "killing definitions". Similarly, the use of 'b' 15274reads all its bits. 15275 15276 In contrast, virtual operands are used with variables that can have a 15277partial or ambiguous reference. This includes structures, arrays, 15278globals, and aliased variables. In these cases, we have two types of 15279definitions. For globals, structures, and arrays, we can determine from 15280a statement whether a variable of these types has a killing definition. 15281If the variable does, then the statement is marked as having a "must 15282definition" of that variable. However, if a statement is only defining 15283a part of the variable (i.e. a field in a structure), or if we know that 15284a statement might define the variable but we cannot say for sure, then 15285we mark that statement as having a "may definition". For instance, 15286given 15287 15288 { 15289 int a, b, *p; 15290 15291 if (...) 15292 p = &a; 15293 else 15294 p = &b; 15295 *p = 5; 15296 return *p; 15297 } 15298 15299 The assignment '*p = 5' may be a definition of 'a' or 'b'. If we 15300cannot determine statically where 'p' is pointing to at the time of the 15301store operation, we create virtual definitions to mark that statement as 15302a potential definition site for 'a' and 'b'. Memory loads are similarly 15303marked with virtual use operands. Virtual operands are shown in tree 15304dumps right before the statement that contains them. To request a tree 15305dump with virtual operands, use the '-vops' option to '-fdump-tree': 15306 15307 { 15308 int a, b, *p; 15309 15310 if (...) 15311 p = &a; 15312 else 15313 p = &b; 15314 # a = VDEF <a> 15315 # b = VDEF <b> 15316 *p = 5; 15317 15318 # VUSE <a> 15319 # VUSE <b> 15320 return *p; 15321 } 15322 15323 Notice that 'VDEF' operands have two copies of the referenced variable. 15324This indicates that this is not a killing definition of that variable. 15325In this case we refer to it as a "may definition" or "aliased store". 15326The presence of the second copy of the variable in the 'VDEF' operand 15327will become important when the function is converted into SSA form. 15328This will be used to link all the non-killing definitions to prevent 15329optimizations from making incorrect assumptions about them. 15330 15331 Operands are updated as soon as the statement is finished via a call to 15332'update_stmt'. If statement elements are changed via 'SET_USE' or 15333'SET_DEF', then no further action is required (i.e., those macros take 15334care of updating the statement). If changes are made by manipulating 15335the statement's tree directly, then a call must be made to 'update_stmt' 15336when complete. Calling one of the 'bsi_insert' routines or 15337'bsi_replace' performs an implicit call to 'update_stmt'. 15338 1533913.2.1 Operand Iterators And Access Routines 15340-------------------------------------------- 15341 15342Operands are collected by 'tree-ssa-operands.c'. They are stored inside 15343each statement's annotation and can be accessed through either the 15344operand iterators or an access routine. 15345 15346 The following access routines are available for examining operands: 15347 15348 1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 15349 NULL unless there is exactly one operand matching the specified 15350 flags. If there is exactly one operand, the operand is returned as 15351 either a 'tree', 'def_operand_p', or 'use_operand_p'. 15352 15353 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 15354 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 15355 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 15356 15357 2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no 15358 operands matching the specified flags. 15359 15360 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 15361 return; 15362 15363 3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands 15364 matching 'flags'. This actually executes a loop to perform the 15365 count, so only use this if it is really needed. 15366 15367 int count = NUM_SSA_OPERANDS (stmt, flags) 15368 15369 If you wish to iterate over some or all operands, use the 15370'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 15371all the operands for a statement: 15372 15373 void 15374 print_ops (tree stmt) 15375 { 15376 ssa_op_iter; 15377 tree var; 15378 15379 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 15380 print_generic_expr (stderr, var, TDF_SLIM); 15381 } 15382 15383 How to choose the appropriate iterator: 15384 15385 1. Determine whether you are need to see the operand pointers, or just 15386 the trees, and choose the appropriate macro: 15387 15388 Need Macro: 15389 ---- ------- 15390 use_operand_p FOR_EACH_SSA_USE_OPERAND 15391 def_operand_p FOR_EACH_SSA_DEF_OPERAND 15392 tree FOR_EACH_SSA_TREE_OPERAND 15393 15394 2. You need to declare a variable of the type you are interested in, 15395 and an ssa_op_iter structure which serves as the loop controlling 15396 variable. 15397 15398 3. Determine which operands you wish to use, and specify the flags of 15399 those you are interested in. They are documented in 15400 'tree-ssa-operands.h': 15401 15402 #define SSA_OP_USE 0x01 /* Real USE operands. */ 15403 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 15404 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 15405 #define SSA_OP_VDEF 0x08 /* VDEF operands. */ 15406 15407 /* These are commonly grouped operand flags. */ 15408 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE) 15409 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 15410 #define SSA_OP_ALL_VIRTUALS (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS) 15411 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 15412 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 15413 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 15414 15415 So if you want to look at the use pointers for all the 'USE' and 'VUSE' 15416operands, you would do something like: 15417 15418 use_operand_p use_p; 15419 ssa_op_iter iter; 15420 15421 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 15422 { 15423 process_use_ptr (use_p); 15424 } 15425 15426 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros, 15427only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and 15428'DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use and 15429defs flags can be mixed. 15430 15431 tree var; 15432 ssa_op_iter iter; 15433 15434 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 15435 { 15436 print_generic_expr (stderr, var, TDF_SLIM); 15437 } 15438 15439 'VDEF's are broken into two flags, one for the 'DEF' portion 15440('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE'). 15441 15442 There are many examples in the code, in addition to the documentation 15443in 'tree-ssa-operands.h' and 'ssa-iterators.h'. 15444 15445 There are also a couple of variants on the stmt iterators regarding PHI 15446nodes. 15447 15448 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND', 15449except it works over 'PHI' arguments instead of statement operands. 15450 15451 /* Look at every virtual PHI use. */ 15452 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 15453 { 15454 my_code; 15455 } 15456 15457 /* Look at every real PHI use. */ 15458 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 15459 my_code; 15460 15461 /* Look at every PHI use. */ 15462 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 15463 my_code; 15464 15465 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 15466'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 15467statement or a 'PHI' node. These should be used when it is appropriate 15468but they are not quite as efficient as the individual 'FOR_EACH_PHI' and 15469'FOR_EACH_SSA' routines. 15470 15471 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 15472 { 15473 my_code; 15474 } 15475 15476 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 15477 { 15478 my_code; 15479 } 15480 1548113.2.2 Immediate Uses 15482--------------------- 15483 15484Immediate use information is now always available. Using the immediate 15485use iterators, you may examine every use of any 'SSA_NAME'. For 15486instance, to change each use of 'ssa_var' to 'ssa_var2' and call 15487fold_stmt on each stmt after that is done: 15488 15489 use_operand_p imm_use_p; 15490 imm_use_iterator iterator; 15491 tree ssa_var, stmt; 15492 15493 15494 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 15495 { 15496 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 15497 SET_USE (imm_use_p, ssa_var_2); 15498 fold_stmt (stmt); 15499 } 15500 15501 There are 2 iterators which can be used. 'FOR_EACH_IMM_USE_FAST' is 15502used when the immediate uses are not changed, i.e., you are looking at 15503the uses, but not setting them. 15504 15505 If they do get changed, then care must be taken that things are not 15506changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and 15507'FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 15508sanity of the use list by moving all the uses for a statement into a 15509controlled position, and then iterating over those uses. Then the 15510optimization can manipulate the stmt when all the uses have been 15511processed. This is a little slower than the FAST version since it adds 15512a placeholder element and must sort through the list a bit for each 15513statement. This placeholder element must be also be removed if the loop 15514is terminated early. The macro 'BREAK_FROM_IMM_USE_STMT' is provided to 15515do this : 15516 15517 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 15518 { 15519 if (stmt == last_stmt) 15520 BREAK_FROM_IMM_USE_STMT (iterator); 15521 15522 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 15523 SET_USE (imm_use_p, ssa_var_2); 15524 fold_stmt (stmt); 15525 } 15526 15527 There are checks in 'verify_ssa' which verify that the immediate use 15528list is up to date, as well as checking that an optimization didn't 15529break from the loop without using this macro. It is safe to simply 15530'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse. 15531 15532 Some useful functions and macros: 15533 1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of 15534 'ssa_var'. 15535 2. 'has_single_use (ssa_var)' : Returns true if there is only a single 15536 use of 'ssa_var'. 15537 3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 15538 Returns true if there is only a single use of 'ssa_var', and also 15539 returns the use pointer and statement it occurs in, in the second 15540 and third parameters. 15541 4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of 15542 'ssa_var'. It is better not to use this if possible since it 15543 simply utilizes a loop to count the uses. 15544 5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node, 15545 return the index number for the use. An assert is triggered if the 15546 use isn't located in a 'PHI' node. 15547 6. 'USE_STMT (use_p)' : Return the statement a use occurs in. 15548 15549 Note that uses are not put into an immediate use list until their 15550statement is actually inserted into the instruction stream via a 'bsi_*' 15551routine. 15552 15553 It is also still possible to utilize lazy updating of statements, but 15554this should be used only when absolutely required. Both alias analysis 15555and the dominator optimizations currently do this. 15556 15557 When lazy updating is being used, the immediate use information is out 15558of date and cannot be used reliably. Lazy updating is achieved by 15559simply marking statements modified via calls to 'gimple_set_modified' 15560instead of 'update_stmt'. When lazy updating is no longer required, all 15561the modified statements must have 'update_stmt' called in order to bring 15562them up to date. This must be done before the optimization is finished, 15563or 'verify_ssa' will trigger an abort. 15564 15565 This is done with a simple loop over the instruction stream: 15566 block_stmt_iterator bsi; 15567 basic_block bb; 15568 FOR_EACH_BB (bb) 15569 { 15570 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 15571 update_stmt_if_modified (bsi_stmt (bsi)); 15572 } 15573 15574 15575File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 15576 1557713.3 Static Single Assignment 15578============================= 15579 15580Most of the tree optimizers rely on the data flow information provided 15581by the Static Single Assignment (SSA) form. We implement the SSA form 15582as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 15583Zadeck. Efficiently Computing Static Single Assignment Form and the 15584Control Dependence Graph. ACM Transactions on Programming Languages and 15585Systems, 13(4):451-490, October 1991'. 15586 15587 The SSA form is based on the premise that program variables are 15588assigned in exactly one location in the program. Multiple assignments 15589to the same variable create new versions of that variable. Naturally, 15590actual programs are seldom in SSA form initially because variables tend 15591to be assigned multiple times. The compiler modifies the program 15592representation so that every time a variable is assigned in the code, a 15593new version of the variable is created. Different versions of the same 15594variable are distinguished by subscripting the variable name with its 15595version number. Variables used in the right-hand side of expressions 15596are renamed so that their version number matches that of the most recent 15597assignment. 15598 15599 We represent variable versions using 'SSA_NAME' nodes. The renaming 15600process in 'tree-ssa.c' wraps every real and virtual operand with an 15601'SSA_NAME' node which contains the version number and the statement that 15602created the 'SSA_NAME'. Only definitions and virtual definitions may 15603create new 'SSA_NAME' nodes. 15604 15605 Sometimes, flow of control makes it impossible to determine the most 15606recent version of a variable. In these cases, the compiler inserts an 15607artificial definition for that variable called "PHI function" or "PHI 15608node". This new definition merges all the incoming versions of the 15609variable to create a new name for it. For instance, 15610 15611 if (...) 15612 a_1 = 5; 15613 else if (...) 15614 a_2 = 2; 15615 else 15616 a_3 = 13; 15617 15618 # a_4 = PHI <a_1, a_2, a_3> 15619 return a_4; 15620 15621 Since it is not possible to determine which of the three branches will 15622be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use 15623at the return statement. So, the SSA renamer creates a new version 15624'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'. 15625Hence, PHI nodes mean "one of these operands. I don't know which". 15626 15627 The following functions can be used to examine PHI nodes 15628 15629 -- Function: gimple_phi_result (PHI) 15630 Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 15631 15632 -- Function: gimple_phi_num_args (PHI) 15633 Returns the number of arguments in PHI. This number is exactly the 15634 number of incoming edges to the basic block holding PHI. 15635 15636 -- Function: gimple_phi_arg (PHI, I) 15637 Returns Ith argument of PHI. 15638 15639 -- Function: gimple_phi_arg_edge (PHI, I) 15640 Returns the incoming edge for the Ith argument of PHI. 15641 15642 -- Function: gimple_phi_arg_def (PHI, I) 15643 Returns the 'SSA_NAME' for the Ith argument of PHI. 15644 1564513.3.1 Preserving the SSA form 15646------------------------------ 15647 15648Some optimization passes make changes to the function that invalidate 15649the SSA property. This can happen when a pass has added new symbols or 15650changed the program so that variables that were previously aliased 15651aren't anymore. Whenever something like this happens, the affected 15652symbols must be renamed into SSA form again. Transformations that emit 15653new code or replicate existing statements will also need to update the 15654SSA form. 15655 15656 Since GCC implements two different SSA forms for register and virtual 15657variables, keeping the SSA form up to date depends on whether you are 15658updating register or virtual names. In both cases, the general idea 15659behind incremental SSA updates is similar: when new SSA names are 15660created, they typically are meant to replace other existing names in the 15661program. 15662 15663 For instance, given the following code: 15664 15665 1 L0: 15666 2 x_1 = PHI (0, x_5) 15667 3 if (x_1 < 10) 15668 4 if (x_1 > 7) 15669 5 y_2 = 0 15670 6 else 15671 7 y_3 = x_1 + x_7 15672 8 endif 15673 9 x_5 = x_1 + 1 15674 10 goto L0; 15675 11 endif 15676 15677 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8'). 15678 15679 1 L0: 15680 2 x_1 = PHI (0, x_5) 15681 3 if (x_1 < 10) 15682 4 x_10 = ... 15683 5 if (x_1 > 7) 15684 6 y_2 = 0 15685 7 else 15686 8 x_11 = ... 15687 9 y_3 = x_1 + x_7 15688 10 endif 15689 11 x_5 = x_1 + 1 15690 12 goto L0; 15691 13 endif 15692 15693 We want to replace all the uses of 'x_1' with the new definitions of 15694'x_10' and 'x_11'. Note that the only uses that should be replaced are 15695those at lines '5', '9' and '11'. Also, the use of 'x_7' at line '9' 15696should _not_ be replaced (this is why we cannot just mark symbol 'x' for 15697renaming). 15698 15699 Additionally, we may need to insert a PHI node at line '11' because 15700that is a merge point for 'x_10' and 'x_11'. So the use of 'x_1' at 15701line '11' will be replaced with the new PHI node. The insertion of PHI 15702nodes is optional. They are not strictly necessary to preserve the SSA 15703form, and depending on what the caller inserted, they may not even be 15704useful for the optimizers. 15705 15706 Updating the SSA form is a two step process. First, the pass has to 15707identify which names need to be updated and/or which symbols need to be 15708renamed into SSA form for the first time. When new names are introduced 15709to replace existing names in the program, the mapping between the old 15710and the new names are registered by calling 'register_new_name_mapping' 15711(note that if your pass creates new code by duplicating basic blocks, 15712the call to 'tree_duplicate_bb' will set up the necessary mappings 15713automatically). 15714 15715 After the replacement mappings have been registered and new symbols 15716marked for renaming, a call to 'update_ssa' makes the registered 15717changes. This can be done with an explicit call or by creating 'TODO' 15718flags in the 'tree_opt_pass' structure for your pass. There are several 15719'TODO' flags that control the behavior of 'update_ssa': 15720 15721 * 'TODO_update_ssa'. Update the SSA form inserting PHI nodes for 15722 newly exposed symbols and virtual names marked for updating. When 15723 updating real names, only insert PHI nodes for a real name 'O_j' in 15724 blocks reached by all the new and old definitions for 'O_j'. If 15725 the iterated dominance frontier for 'O_j' is not pruned, we may end 15726 up inserting PHI nodes in blocks that have one or more edges with 15727 no incoming definition for 'O_j'. This would lead to uninitialized 15728 warnings for 'O_j''s symbol. 15729 15730 * 'TODO_update_ssa_no_phi'. Update the SSA form without inserting 15731 any new PHI nodes at all. This is used by passes that have either 15732 inserted all the PHI nodes themselves or passes that need only to 15733 patch use-def and def-def chains for virtuals (e.g., DCE). 15734 15735 * 'TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 15736 needed. No pruning of the IDF is done. This is used by passes 15737 that need the PHI nodes for 'O_j' even if it means that some 15738 arguments will come from the default definition of 'O_j''s symbol 15739 (e.g., 'pass_linear_transform'). 15740 15741 WARNING: If you need to use this flag, chances are that your pass 15742 may be doing something wrong. Inserting PHI nodes for an old name 15743 where not all edges carry a new replacement may lead to silent 15744 codegen errors or spurious uninitialized warnings. 15745 15746 * 'TODO_update_ssa_only_virtuals'. Passes that update the SSA form 15747 on their own may want to delegate the updating of virtual names to 15748 the generic updater. Since FUD chains are easier to maintain, this 15749 simplifies the work they need to do. NOTE: If this flag is used, 15750 any OLD->NEW mappings for real names are explicitly destroyed and 15751 only the symbols marked for renaming are processed. 15752 1575313.3.2 Examining 'SSA_NAME' nodes 15754--------------------------------- 15755 15756The following macros can be used to examine 'SSA_NAME' nodes 15757 15758 -- Macro: SSA_NAME_DEF_STMT (VAR) 15759 Returns the statement S that creates the 'SSA_NAME' VAR. If S is 15760 an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it 15761 means that the first reference to this variable is a USE or a VUSE. 15762 15763 -- Macro: SSA_NAME_VERSION (VAR) 15764 Returns the version number of the 'SSA_NAME' object VAR. 15765 1576613.3.3 Walking the dominator tree 15767--------------------------------- 15768 15769 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 15770 15771 This function walks the dominator tree for the current CFG calling 15772 a set of callback functions defined in STRUCT DOM_WALK_DATA in 15773 'domwalk.h'. The call back functions you need to define give you 15774 hooks to execute custom code at various points during traversal: 15775 15776 1. Once to initialize any local data needed while processing BB 15777 and its children. This local data is pushed into an internal 15778 stack which is automatically pushed and popped as the walker 15779 traverses the dominator tree. 15780 15781 2. Once before traversing all the statements in the BB. 15782 15783 3. Once for every statement inside BB. 15784 15785 4. Once after traversing all the statements and before recursing 15786 into BB's dominator children. 15787 15788 5. It then recurses into all the dominator children of BB. 15789 15790 6. After recursing into all the dominator children of BB it can, 15791 optionally, traverse every statement in BB again (i.e., 15792 repeating steps 2 and 3). 15793 15794 7. Once after walking the statements in BB and BB's dominator 15795 children. At this stage, the block local data stack is 15796 popped. 15797 15798 15799File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 15800 1580113.4 Alias analysis 15802=================== 15803 15804Alias analysis in GIMPLE SSA form consists of two pieces. First the 15805virtual SSA web ties conflicting memory accesses and provides a SSA 15806use-def chain and SSA immediate-use chains for walking possibly 15807dependent memory accesses. Second an alias-oracle can be queried to 15808disambiguate explicit and implicit memory references. 15809 15810 1. Memory SSA form. 15811 15812 All statements that may use memory have exactly one accompanied use 15813 of a virtual SSA name that represents the state of memory at the 15814 given point in the IL. 15815 15816 All statements that may define memory have exactly one accompanied 15817 definition of a virtual SSA name using the previous state of memory 15818 and defining the new state of memory after the given point in the 15819 IL. 15820 15821 int i; 15822 int foo (void) 15823 { 15824 # .MEM_3 = VDEF <.MEM_2(D)> 15825 i = 1; 15826 # VUSE <.MEM_3> 15827 return i; 15828 } 15829 15830 The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'. 15831 The store to the global variable 'i' defines '.MEM_3' invalidating 15832 '.MEM_2(D)'. The load from 'i' uses that new state '.MEM_3'. 15833 15834 The virtual SSA web serves as constraints to SSA optimizers 15835 preventing illegitimate code-motion and optimization. It also 15836 provides a way to walk related memory statements. 15837 15838 2. Points-to and escape analysis. 15839 15840 Points-to analysis builds a set of constraints from the GIMPLE SSA 15841 IL representing all pointer operations and facts we do or do not 15842 know about pointers. Solving this set of constraints yields a 15843 conservatively correct solution for each pointer variable in the 15844 program (though we are only interested in SSA name pointers) as to 15845 what it may possibly point to. 15846 15847 This points-to solution for a given SSA name pointer is stored in 15848 the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record. 15849 The following accessor functions are available: 15850 15851 * 'pt_solution_includes' 15852 * 'pt_solutions_intersect' 15853 15854 Points-to analysis also computes the solution for two special set 15855 of pointers, 'ESCAPED' and 'CALLUSED'. Those represent all memory 15856 that has escaped the scope of analysis or that is used by pure or 15857 nested const calls. 15858 15859 3. Type-based alias analysis 15860 15861 Type-based alias analysis is frontend dependent though generic 15862 support is provided by the middle-end in 'alias.c'. TBAA code is 15863 used by both tree optimizers and RTL optimizers. 15864 15865 Every language that wishes to perform language-specific alias 15866 analysis should define a function that computes, given a 'tree' 15867 node, an alias set for the node. Nodes in different alias sets are 15868 not allowed to alias. For an example, see the C front-end function 15869 'c_get_alias_set'. 15870 15871 4. Tree alias-oracle 15872 15873 The tree alias-oracle provides means to disambiguate two memory 15874 references and memory references against statements. The following 15875 queries are available: 15876 15877 * 'refs_may_alias_p' 15878 * 'ref_maybe_used_by_stmt_p' 15879 * 'stmt_may_clobber_ref_p' 15880 15881 In addition to those two kind of statement walkers are available 15882 walking statements related to a reference ref. 15883 'walk_non_aliased_vuses' walks over dominating memory defining 15884 statements and calls back if the statement does not clobber ref 15885 providing the non-aliased VUSE. The walk stops at the first 15886 clobbering statement or if asked to. 'walk_aliased_vdefs' walks 15887 over dominating memory defining statements and calls back on each 15888 statement clobbering ref providing its aliasing VDEF. The walk 15889 stops if asked to. 15890 15891 15892File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 15893 1589413.5 Memory model 15895================= 15896 15897The memory model used by the middle-end models that of the C/C++ 15898languages. The middle-end has the notion of an effective type of a 15899memory region which is used for type-based alias analysis. 15900 15901 The following is a refinement of ISO C99 6.5/6, clarifying the block 15902copy case to follow common sense and extending the concept of a dynamic 15903effective type to objects with a declared type as required for C++. 15904 15905 The effective type of an object for an access to its stored value is 15906 the declared type of the object or the effective type determined by 15907 a previous store to it. If a value is stored into an object through 15908 an lvalue having a type that is not a character type, then the 15909 type of the lvalue becomes the effective type of the object for that 15910 access and for subsequent accesses that do not modify the stored value. 15911 If a value is copied into an object using memcpy or memmove, 15912 or is copied as an array of character type, then the effective type 15913 of the modified object for that access and for subsequent accesses that 15914 do not modify the value is undetermined. For all other accesses to an 15915 object, the effective type of the object is simply the type of the 15916 lvalue used for the access. 15917 15918 15919File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top 15920 1592114 RTL Representation 15922********************* 15923 15924The last part of the compiler work is done on a low-level intermediate 15925representation called Register Transfer Language. In this language, the 15926instructions to be output are described, pretty much one by one, in an 15927algebraic form that describes what the instruction does. 15928 15929 RTL is inspired by Lisp lists. It has both an internal form, made up 15930of structures that point at other structures, and a textual form that is 15931used in the machine description and in printed debugging dumps. The 15932textual form uses nested parentheses to indicate the pointers in the 15933internal form. 15934 15935* Menu: 15936 15937* RTL Objects:: Expressions vs vectors vs strings vs integers. 15938* RTL Classes:: Categories of RTL expression objects, and their structure. 15939* Accessors:: Macros to access expression operands or vector elts. 15940* Special Accessors:: Macros to access specific annotations on RTL. 15941* Flags:: Other flags in an RTL expression. 15942* Machine Modes:: Describing the size and format of a datum. 15943* Constants:: Expressions with constant values. 15944* Regs and Memory:: Expressions representing register contents or memory. 15945* Arithmetic:: Expressions representing arithmetic on other expressions. 15946* Comparisons:: Expressions representing comparison of expressions. 15947* Bit-Fields:: Expressions representing bit-fields in memory or reg. 15948* Vector Operations:: Expressions involving vector datatypes. 15949* Conversions:: Extending, truncating, floating or fixing. 15950* RTL Declarations:: Declaring volatility, constancy, etc. 15951* Side Effects:: Expressions for storing in registers, etc. 15952* Incdec:: Embedded side-effects for autoincrement addressing. 15953* Assembler:: Representing 'asm' with operands. 15954* Debug Information:: Expressions representing debugging information. 15955* Insns:: Expression types for entire insns. 15956* Calls:: RTL representation of function call insns. 15957* Sharing:: Some expressions are unique; others *must* be copied. 15958* Reading RTL:: Reading textual RTL from a file. 15959 15960 15961File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 15962 1596314.1 RTL Object Types 15964===================== 15965 15966RTL uses five kinds of objects: expressions, integers, wide integers, 15967strings and vectors. Expressions are the most important ones. An RTL 15968expression ("RTX", for short) is a C structure, but it is usually 15969referred to with a pointer; a type that is given the typedef name 'rtx'. 15970 15971 An integer is simply an 'int'; their written form uses decimal digits. 15972A wide integer is an integral object whose type is 'HOST_WIDE_INT'; 15973their written form uses decimal digits. 15974 15975 A string is a sequence of characters. In core it is represented as a 15976'char *' in usual C fashion, and it is written in C syntax as well. 15977However, strings in RTL may never be null. If you write an empty string 15978in a machine description, it is represented in core as a null pointer 15979rather than as a pointer to a null character. In certain contexts, 15980these null pointers instead of strings are valid. Within RTL code, 15981strings are most commonly found inside 'symbol_ref' expressions, but 15982they appear in other contexts in the RTL expressions that make up 15983machine descriptions. 15984 15985 In a machine description, strings are normally written with double 15986quotes, as you would in C. However, strings in machine descriptions may 15987extend over many lines, which is invalid C, and adjacent string 15988constants are not concatenated as they are in C. Any string constant 15989may be surrounded with a single set of parentheses. Sometimes this 15990makes the machine description easier to read. 15991 15992 There is also a special syntax for strings, which can be useful when C 15993code is embedded in a machine description. Wherever a string can 15994appear, it is also valid to write a C-style brace block. The entire 15995brace block, including the outermost pair of braces, is considered to be 15996the string constant. Double quote characters inside the braces are not 15997special. Therefore, if you write string constants in the C code, you 15998need not escape each quote character with a backslash. 15999 16000 A vector contains an arbitrary number of pointers to expressions. The 16001number of elements in the vector is explicitly present in the vector. 16002The written form of a vector consists of square brackets ('[...]') 16003surrounding the elements, in sequence and with whitespace separating 16004them. Vectors of length zero are not created; null pointers are used 16005instead. 16006 16007 Expressions are classified by "expression codes" (also called RTX 16008codes). The expression code is a name defined in 'rtl.def', which is 16009also (in uppercase) a C enumeration constant. The possible expression 16010codes and their meanings are machine-independent. The code of an RTX 16011can be extracted with the macro 'GET_CODE (X)' and altered with 16012'PUT_CODE (X, NEWCODE)'. 16013 16014 The expression code determines how many operands the expression 16015contains, and what kinds of objects they are. In RTL, unlike Lisp, you 16016cannot tell by looking at an operand what kind of object it is. 16017Instead, you must know from its context--from the expression code of the 16018containing expression. For example, in an expression of code 'subreg', 16019the first operand is to be regarded as an expression and the second 16020operand as a polynomial integer. In an expression of code 'plus', there 16021are two operands, both of which are to be regarded as expressions. In a 16022'symbol_ref' expression, there is one operand, which is to be regarded 16023as a string. 16024 16025 Expressions are written as parentheses containing the name of the 16026expression type, its flags and machine mode if any, and then the 16027operands of the expression (separated by spaces). 16028 16029 Expression code names in the 'md' file are written in lowercase, but 16030when they appear in C code they are written in uppercase. In this 16031manual, they are shown as follows: 'const_int'. 16032 16033 In a few contexts a null pointer is valid where an expression is 16034normally wanted. The written form of this is '(nil)'. 16035 16036 16037File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 16038 1603914.2 RTL Classes and Formats 16040============================ 16041 16042The various expression codes are divided into several "classes", which 16043are represented by single characters. You can determine the class of an 16044RTX code with the macro 'GET_RTX_CLASS (CODE)'. Currently, 'rtl.def' 16045defines these classes: 16046 16047'RTX_OBJ' 16048 An RTX code that represents an actual object, such as a register 16049 ('REG') or a memory location ('MEM', 'SYMBOL_REF'). 'LO_SUM') is 16050 also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in 16051 this class, but in class 'RTX_EXTRA'. 16052 16053'RTX_CONST_OBJ' 16054 An RTX code that represents a constant object. 'HIGH' is also 16055 included in this class. 16056 16057'RTX_COMPARE' 16058 An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'. 16059 16060'RTX_COMM_COMPARE' 16061 An RTX code for a symmetric (commutative) comparison, such as 'EQ' 16062 or 'ORDERED'. 16063 16064'RTX_UNARY' 16065 An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT', 16066 or 'ABS'. This category also includes value extension (sign or 16067 zero) and conversions between integer and floating point. 16068 16069'RTX_COMM_ARITH' 16070 An RTX code for a commutative binary operation, such as 'PLUS' or 16071 'AND'. 'NE' and 'EQ' are comparisons, so they have class 16072 'RTX_COMM_COMPARE'. 16073 16074'RTX_BIN_ARITH' 16075 An RTX code for a non-commutative binary operation, such as 16076 'MINUS', 'DIV', or 'ASHIFTRT'. 16077 16078'RTX_BITFIELD_OPS' 16079 An RTX code for a bit-field operation. Currently only 16080 'ZERO_EXTRACT' and 'SIGN_EXTRACT'. These have three inputs and are 16081 lvalues (so they can be used for insertion as well). *Note 16082 Bit-Fields::. 16083 16084'RTX_TERNARY' 16085 An RTX code for other three input operations. Currently only 16086 'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and 16087 'FMA'. 16088 16089'RTX_INSN' 16090 An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and 16091 'CALL_INSN'. *Note Insns::. 16092 16093'RTX_MATCH' 16094 An RTX code for something that matches in insns, such as 16095 'MATCH_DUP'. These only occur in machine descriptions. 16096 16097'RTX_AUTOINC' 16098 An RTX code for an auto-increment addressing mode, such as 16099 'POST_INC'. 'XEXP (X, 0)' gives the auto-modified register. 16100 16101'RTX_EXTRA' 16102 All other RTX codes. This category includes the remaining codes 16103 used only in machine descriptions ('DEFINE_*', etc.). It also 16104 includes all the codes describing side effects ('SET', 'USE', 16105 'CLOBBER', etc.) and the non-insns that may appear on an insn 16106 chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'. 'SUBREG' is 16107 also part of this class. 16108 16109 For each expression code, 'rtl.def' specifies the number of contained 16110objects and their kinds using a sequence of characters called the 16111"format" of the expression code. For example, the format of 'subreg' is 16112'ep'. 16113 16114 These are the most commonly used format characters: 16115 16116'e' 16117 An expression (actually a pointer to an expression). 16118 16119'i' 16120 An integer. 16121 16122'w' 16123 A wide integer. 16124 16125's' 16126 A string. 16127 16128'E' 16129 A vector of expressions. 16130 16131 A few other format characters are used occasionally: 16132 16133'u' 16134 'u' is equivalent to 'e' except that it is printed differently in 16135 debugging dumps. It is used for pointers to insns. 16136 16137'n' 16138 'n' is equivalent to 'i' except that it is printed differently in 16139 debugging dumps. It is used for the line number or code number of 16140 a 'note' insn. 16141 16142'S' 16143 'S' indicates a string which is optional. In the RTL objects in 16144 core, 'S' is equivalent to 's', but when the object is read, from 16145 an 'md' file, the string value of this operand may be omitted. An 16146 omitted string is taken to be the null string. 16147 16148'V' 16149 'V' indicates a vector which is optional. In the RTL objects in 16150 core, 'V' is equivalent to 'E', but when the object is read from an 16151 'md' file, the vector value of this operand may be omitted. An 16152 omitted vector is effectively the same as a vector of no elements. 16153 16154'B' 16155 'B' indicates a pointer to basic block structure. 16156 16157'p' 16158 A polynomial integer. At present this is used only for 16159 'SUBREG_BYTE'. 16160 16161'0' 16162 '0' means a slot whose contents do not fit any normal category. 16163 '0' slots are not printed at all in dumps, and are often used in 16164 special ways by small parts of the compiler. 16165 16166 There are macros to get the number of operands and the format of an 16167expression code: 16168 16169'GET_RTX_LENGTH (CODE)' 16170 Number of operands of an RTX of code CODE. 16171 16172'GET_RTX_FORMAT (CODE)' 16173 The format of an RTX of code CODE, as a C string. 16174 16175 Some classes of RTX codes always have the same format. For example, it 16176is safe to assume that all comparison operations have format 'ee'. 16177 16178'RTX_UNARY' 16179 All codes of this class have format 'e'. 16180 16181'RTX_BIN_ARITH' 16182'RTX_COMM_ARITH' 16183'RTX_COMM_COMPARE' 16184'RTX_COMPARE' 16185 All codes of these classes have format 'ee'. 16186 16187'RTX_BITFIELD_OPS' 16188'RTX_TERNARY' 16189 All codes of these classes have format 'eee'. 16190 16191'RTX_INSN' 16192 All codes of this class have formats that begin with 'iuueiee'. 16193 *Note Insns::. Note that not all RTL objects linked onto an insn 16194 chain are of class 'RTX_INSN'. 16195 16196'RTX_CONST_OBJ' 16197'RTX_OBJ' 16198'RTX_MATCH' 16199'RTX_EXTRA' 16200 You can make no assumptions about the format of these codes. 16201 16202 16203File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 16204 1620514.3 Access to Operands 16206======================= 16207 16208Operands of expressions are accessed using the macros 'XEXP', 'XINT', 16209'XWINT' and 'XSTR'. Each of these macros takes two arguments: an 16210expression-pointer (RTX) and an operand number (counting from zero). 16211Thus, 16212 16213 XEXP (X, 2) 16214 16215accesses operand 2 of expression X, as an expression. 16216 16217 XINT (X, 2) 16218 16219accesses the same operand as an integer. 'XSTR', used in the same 16220fashion, would access it as a string. 16221 16222 Any operand can be accessed as an integer, as an expression or as a 16223string. You must choose the correct method of access for the kind of 16224value actually stored in the operand. You would do this based on the 16225expression code of the containing expression. That is also how you 16226would know how many operands there are. 16227 16228 For example, if X is an 'int_list' expression, you know that it has two 16229operands which can be correctly accessed as 'XINT (X, 0)' and 'XEXP (X, 162301)'. Incorrect accesses like 'XEXP (X, 0)' and 'XINT (X, 1)' would 16231compile, but would trigger an internal compiler error when rtl checking 16232is enabled. Nothing stops you from writing 'XEXP (X, 28)' either, but 16233this will access memory past the end of the expression with 16234unpredictable results. 16235 16236 Access to operands which are vectors is more complicated. You can use 16237the macro 'XVEC' to get the vector-pointer itself, or the macros 16238'XVECEXP' and 'XVECLEN' to access the elements and length of a vector. 16239 16240'XVEC (EXP, IDX)' 16241 Access the vector-pointer which is operand number IDX in EXP. 16242 16243'XVECLEN (EXP, IDX)' 16244 Access the length (number of elements) in the vector which is in 16245 operand number IDX in EXP. This value is an 'int'. 16246 16247'XVECEXP (EXP, IDX, ELTNUM)' 16248 Access element number ELTNUM in the vector which is in operand 16249 number IDX in EXP. This value is an RTX. 16250 16251 It is up to you to make sure that ELTNUM is not negative and is 16252 less than 'XVECLEN (EXP, IDX)'. 16253 16254 All the macros defined in this section expand into lvalues and 16255therefore can be used to assign the operands, lengths and vector 16256elements as well as to access them. 16257 16258 16259File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 16260 1626114.4 Access to Special Operands 16262=============================== 16263 16264Some RTL nodes have special annotations associated with them. 16265 16266'MEM' 16267 'MEM_ALIAS_SET (X)' 16268 If 0, X is not in any alias set, and may alias anything. 16269 Otherwise, X can only alias 'MEM's in a conflicting alias set. 16270 This value is set in a language-dependent manner in the 16271 front-end, and should not be altered in the back-end. In some 16272 front-ends, these numbers may correspond in some way to types, 16273 or other language-level entities, but they need not, and the 16274 back-end makes no such assumptions. These set numbers are 16275 tested with 'alias_sets_conflict_p'. 16276 16277 'MEM_EXPR (X)' 16278 If this register is known to hold the value of some user-level 16279 declaration, this is that tree node. It may also be a 16280 'COMPONENT_REF', in which case this is some field reference, 16281 and 'TREE_OPERAND (X, 0)' contains the declaration, or another 16282 'COMPONENT_REF', or null if there is no compile-time object 16283 associated with the reference. 16284 16285 'MEM_OFFSET_KNOWN_P (X)' 16286 True if the offset of the memory reference from 'MEM_EXPR' is 16287 known. 'MEM_OFFSET (X)' provides the offset if so. 16288 16289 'MEM_OFFSET (X)' 16290 The offset from the start of 'MEM_EXPR'. The value is only 16291 valid if 'MEM_OFFSET_KNOWN_P (X)' is true. 16292 16293 'MEM_SIZE_KNOWN_P (X)' 16294 True if the size of the memory reference is known. 'MEM_SIZE 16295 (X)' provides its size if so. 16296 16297 'MEM_SIZE (X)' 16298 The size in bytes of the memory reference. This is mostly 16299 relevant for 'BLKmode' references as otherwise the size is 16300 implied by the mode. The value is only valid if 16301 'MEM_SIZE_KNOWN_P (X)' is true. 16302 16303 'MEM_ALIGN (X)' 16304 The known alignment in bits of the memory reference. 16305 16306 'MEM_ADDR_SPACE (X)' 16307 The address space of the memory reference. This will commonly 16308 be zero for the generic address space. 16309 16310'REG' 16311 'ORIGINAL_REGNO (X)' 16312 This field holds the number the register "originally" had; for 16313 a pseudo register turned into a hard reg this will hold the 16314 old pseudo register number. 16315 16316 'REG_EXPR (X)' 16317 If this register is known to hold the value of some user-level 16318 declaration, this is that tree node. 16319 16320 'REG_OFFSET (X)' 16321 If this register is known to hold the value of some user-level 16322 declaration, this is the offset into that logical storage. 16323 16324'SYMBOL_REF' 16325 'SYMBOL_REF_DECL (X)' 16326 If the 'symbol_ref' X was created for a 'VAR_DECL' or a 16327 'FUNCTION_DECL', that tree is recorded here. If this value is 16328 null, then X was created by back end code generation routines, 16329 and there is no associated front end symbol table entry. 16330 16331 'SYMBOL_REF_DECL' may also point to a tree of class ''c'', 16332 that is, some sort of constant. In this case, the 16333 'symbol_ref' is an entry in the per-file constant pool; again, 16334 there is no associated front end symbol table entry. 16335 16336 'SYMBOL_REF_CONSTANT (X)' 16337 If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 16338 pool entry for X. It is null otherwise. 16339 16340 'SYMBOL_REF_DATA (X)' 16341 A field of opaque type used to store 'SYMBOL_REF_DECL' or 16342 'SYMBOL_REF_CONSTANT'. 16343 16344 'SYMBOL_REF_FLAGS (X)' 16345 In a 'symbol_ref', this is used to communicate various 16346 predicates about the symbol. Some of these are common enough 16347 to be computed by common code, some are specific to the 16348 target. The common bits are: 16349 16350 'SYMBOL_FLAG_FUNCTION' 16351 Set if the symbol refers to a function. 16352 16353 'SYMBOL_FLAG_LOCAL' 16354 Set if the symbol is local to this "module". See 16355 'TARGET_BINDS_LOCAL_P'. 16356 16357 'SYMBOL_FLAG_EXTERNAL' 16358 Set if this symbol is not defined in this translation 16359 unit. Note that this is not the inverse of 16360 'SYMBOL_FLAG_LOCAL'. 16361 16362 'SYMBOL_FLAG_SMALL' 16363 Set if the symbol is located in the small data section. 16364 See 'TARGET_IN_SMALL_DATA_P'. 16365 16366 'SYMBOL_REF_TLS_MODEL (X)' 16367 This is a multi-bit field accessor that returns the 16368 'tls_model' to be used for a thread-local storage symbol. 16369 It returns zero for non-thread-local symbols. 16370 16371 'SYMBOL_FLAG_HAS_BLOCK_INFO' 16372 Set if the symbol has 'SYMBOL_REF_BLOCK' and 16373 'SYMBOL_REF_BLOCK_OFFSET' fields. 16374 16375 'SYMBOL_FLAG_ANCHOR' 16376 Set if the symbol is used as a section anchor. "Section 16377 anchors" are symbols that have a known position within an 16378 'object_block' and that can be used to access nearby 16379 members of that block. They are used to implement 16380 '-fsection-anchors'. 16381 16382 If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO' 16383 will be too. 16384 16385 Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for 16386 the target's use. 16387 16388'SYMBOL_REF_BLOCK (X)' 16389 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block' 16390 structure to which the symbol belongs, or 'NULL' if it has not been 16391 assigned a block. 16392 16393'SYMBOL_REF_BLOCK_OFFSET (X)' 16394 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 16395 the first object in 'SYMBOL_REF_BLOCK (X)'. The value is negative 16396 if X has not yet been assigned to a block, or it has not been given 16397 an offset within that block. 16398 16399 16400File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 16401 1640214.5 Flags in an RTL Expression 16403=============================== 16404 16405RTL expressions contain several flags (one-bit bit-fields) that are used 16406in certain types of expression. Most often they are accessed with the 16407following macros, which expand into lvalues. 16408 16409'CROSSING_JUMP_P (X)' 16410 Nonzero in a 'jump_insn' if it crosses between hot and cold 16411 sections, which could potentially be very far apart in the 16412 executable. The presence of this flag indicates to other 16413 optimizations that this branching instruction should not be 16414 "collapsed" into a simpler branching construct. It is used when 16415 the optimization to partition basic blocks into hot and cold 16416 sections is turned on. 16417 16418'CONSTANT_POOL_ADDRESS_P (X)' 16419 Nonzero in a 'symbol_ref' if it refers to part of the current 16420 function's constant pool. For most targets these addresses are in 16421 a '.rodata' section entirely separate from the function, but for 16422 some targets the addresses are close to the beginning of the 16423 function. In either case GCC assumes these addresses can be 16424 addressed directly, perhaps with the help of base registers. 16425 Stored in the 'unchanging' field and printed as '/u'. 16426 16427'INSN_ANNULLED_BRANCH_P (X)' 16428 In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch 16429 is an annulling one. See the discussion under 'sequence' below. 16430 Stored in the 'unchanging' field and printed as '/u'. 16431 16432'INSN_DELETED_P (X)' 16433 In an 'insn', 'call_insn', 'jump_insn', 'code_label', 16434 'jump_table_data', 'barrier', or 'note', nonzero if the insn has 16435 been deleted. Stored in the 'volatil' field and printed as '/v'. 16436 16437'INSN_FROM_TARGET_P (X)' 16438 In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a 16439 branch, indicates that the insn is from the target of the branch. 16440 If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will 16441 only be executed if the branch is taken. For annulled branches 16442 with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if 16443 the branch is not taken. When 'INSN_ANNULLED_BRANCH_P' is not set, 16444 this insn will always be executed. Stored in the 'in_struct' field 16445 and printed as '/s'. 16446 16447'LABEL_PRESERVE_P (X)' 16448 In a 'code_label' or 'note', indicates that the label is referenced 16449 by code or data not visible to the RTL of a given function. Labels 16450 referenced by a non-local goto will have this bit set. Stored in 16451 the 'in_struct' field and printed as '/s'. 16452 16453'LABEL_REF_NONLOCAL_P (X)' 16454 In 'label_ref' and 'reg_label' expressions, nonzero if this is a 16455 reference to a non-local label. Stored in the 'volatil' field and 16456 printed as '/v'. 16457 16458'MEM_KEEP_ALIAS_SET_P (X)' 16459 In 'mem' expressions, 1 if we should keep the alias set for this 16460 mem unchanged when we access a component. Set to 1, for example, 16461 when we are already in a non-addressable component of an aggregate. 16462 Stored in the 'jump' field and printed as '/j'. 16463 16464'MEM_VOLATILE_P (X)' 16465 In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for 16466 volatile memory references. Stored in the 'volatil' field and 16467 printed as '/v'. 16468 16469'MEM_NOTRAP_P (X)' 16470 In 'mem', nonzero for memory references that will not trap. Stored 16471 in the 'call' field and printed as '/c'. 16472 16473'MEM_POINTER (X)' 16474 Nonzero in a 'mem' if the memory reference holds a pointer. Stored 16475 in the 'frame_related' field and printed as '/f'. 16476 16477'MEM_READONLY_P (X)' 16478 Nonzero in a 'mem', if the memory is statically allocated and 16479 read-only. 16480 16481 Read-only in this context means never modified during the lifetime 16482 of the program, not necessarily in ROM or in write-disabled pages. 16483 A common example of the later is a shared library's global offset 16484 table. This table is initialized by the runtime loader, so the 16485 memory is technically writable, but after control is transferred 16486 from the runtime loader to the application, this memory will never 16487 be subsequently modified. 16488 16489 Stored in the 'unchanging' field and printed as '/u'. 16490 16491'PREFETCH_SCHEDULE_BARRIER_P (X)' 16492 In a 'prefetch', indicates that the prefetch is a scheduling 16493 barrier. No other INSNs will be moved over it. Stored in the 16494 'volatil' field and printed as '/v'. 16495 16496'REG_FUNCTION_VALUE_P (X)' 16497 Nonzero in a 'reg' if it is the place in which this function's 16498 value is going to be returned. (This happens only in a hard 16499 register.) Stored in the 'return_val' field and printed as '/i'. 16500 16501'REG_POINTER (X)' 16502 Nonzero in a 'reg' if the register holds a pointer. Stored in the 16503 'frame_related' field and printed as '/f'. 16504 16505'REG_USERVAR_P (X)' 16506 In a 'reg', nonzero if it corresponds to a variable present in the 16507 user's source code. Zero for temporaries generated internally by 16508 the compiler. Stored in the 'volatil' field and printed as '/v'. 16509 16510 The same hard register may be used also for collecting the values 16511 of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero 16512 in this kind of use. 16513 16514'RTL_CONST_CALL_P (X)' 16515 In a 'call_insn' indicates that the insn represents a call to a 16516 const function. Stored in the 'unchanging' field and printed as 16517 '/u'. 16518 16519'RTL_PURE_CALL_P (X)' 16520 In a 'call_insn' indicates that the insn represents a call to a 16521 pure function. Stored in the 'return_val' field and printed as 16522 '/i'. 16523 16524'RTL_CONST_OR_PURE_CALL_P (X)' 16525 In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' 16526 is true. 16527 16528'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 16529 In a 'call_insn' indicates that the insn represents a possibly 16530 infinite looping call to a const or pure function. Stored in the 16531 'call' field and printed as '/c'. Only true if one of 16532 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true. 16533 16534'RTX_FRAME_RELATED_P (X)' 16535 Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set' 16536 which is part of a function prologue and sets the stack pointer, 16537 sets the frame pointer, or saves a register. This flag should also 16538 be set on an instruction that sets up a temporary register to use 16539 in place of the frame pointer. Stored in the 'frame_related' field 16540 and printed as '/f'. 16541 16542 In particular, on RISC targets where there are limits on the sizes 16543 of immediate constants, it is sometimes impossible to reach the 16544 register save area directly from the stack pointer. In that case, 16545 a temporary register is used that is near enough to the register 16546 save area, and the Canonical Frame Address, i.e., DWARF2's logical 16547 frame pointer, register must (temporarily) be changed to be this 16548 temporary register. So, the instruction that sets this temporary 16549 register must be marked as 'RTX_FRAME_RELATED_P'. 16550 16551 If the marked instruction is overly complex (defined in terms of 16552 what 'dwarf2out_frame_debug_expr' can handle), you will also have 16553 to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the 16554 instruction. This note should contain a simple expression of the 16555 computation performed by this instruction, i.e., one that 16556 'dwarf2out_frame_debug_expr' can handle. 16557 16558 This flag is required for exception handling support on targets 16559 with RTL prologues. 16560 16561'SCHED_GROUP_P (X)' 16562 During instruction scheduling, in an 'insn', 'call_insn', 16563 'jump_insn' or 'jump_table_data', indicates that the previous insn 16564 must be scheduled together with this insn. This is used to ensure 16565 that certain groups of instructions will not be split up by the 16566 instruction scheduling pass, for example, 'use' insns before a 16567 'call_insn' may not be separated from the 'call_insn'. Stored in 16568 the 'in_struct' field and printed as '/s'. 16569 16570'SET_IS_RETURN_P (X)' 16571 For a 'set', nonzero if it is for a return. Stored in the 'jump' 16572 field and printed as '/j'. 16573 16574'SIBLING_CALL_P (X)' 16575 For a 'call_insn', nonzero if the insn is a sibling call. Stored 16576 in the 'jump' field and printed as '/j'. 16577 16578'STRING_POOL_ADDRESS_P (X)' 16579 For a 'symbol_ref' expression, nonzero if it addresses this 16580 function's string constant pool. Stored in the 'frame_related' 16581 field and printed as '/f'. 16582 16583'SUBREG_PROMOTED_UNSIGNED_P (X)' 16584 Returns a value greater then zero for a 'subreg' that has 16585 'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 16586 kept zero-extended, zero if it is kept sign-extended, and less then 16587 zero if it is extended some other way via the 'ptr_extend' 16588 instruction. Stored in the 'unchanging' field and 'volatil' field, 16589 printed as '/u' and '/v'. This macro may only be used to get the 16590 value it may not be used to change the value. Use 16591 'SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 16592 16593'SUBREG_PROMOTED_UNSIGNED_SET (X)' 16594 Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect 16595 zero, sign, or other extension. If 'volatil' is zero, then 16596 'unchanging' as nonzero means zero extension and as zero means sign 16597 extension. If 'volatil' is nonzero then some other type of 16598 extension was done via the 'ptr_extend' instruction. 16599 16600'SUBREG_PROMOTED_VAR_P (X)' 16601 Nonzero in a 'subreg' if it was made when accessing an object that 16602 was promoted to a wider mode in accord with the 'PROMOTED_MODE' 16603 machine description macro (*note Storage Layout::). In this case, 16604 the mode of the 'subreg' is the declared mode of the object and the 16605 mode of 'SUBREG_REG' is the mode of the register that holds the 16606 object. Promoted variables are always either sign- or 16607 zero-extended to the wider mode on every assignment. Stored in the 16608 'in_struct' field and printed as '/s'. 16609 16610'SYMBOL_REF_USED (X)' 16611 In a 'symbol_ref', indicates that X has been used. This is 16612 normally only used to ensure that X is only declared external once. 16613 Stored in the 'used' field. 16614 16615'SYMBOL_REF_WEAK (X)' 16616 In a 'symbol_ref', indicates that X has been declared weak. Stored 16617 in the 'return_val' field and printed as '/i'. 16618 16619'SYMBOL_REF_FLAG (X)' 16620 In a 'symbol_ref', this is used as a flag for machine-specific 16621 purposes. Stored in the 'volatil' field and printed as '/v'. 16622 16623 Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by 16624 'SYMBOL_REF_FLAGS'. Certainly use of 'SYMBOL_REF_FLAGS' is 16625 mandatory if the target requires more than one bit of storage. 16626 16627 These are the fields to which the above macros refer: 16628 16629'call' 16630 In a 'mem', 1 means that the memory reference will not trap. 16631 16632 In a 'call', 1 means that this pure or const call may possibly 16633 infinite loop. 16634 16635 In an RTL dump, this flag is represented as '/c'. 16636 16637'frame_related' 16638 In an 'insn' or 'set' expression, 1 means that it is part of a 16639 function prologue and sets the stack pointer, sets the frame 16640 pointer, saves a register, or sets up a temporary register to use 16641 in place of the frame pointer. 16642 16643 In 'reg' expressions, 1 means that the register holds a pointer. 16644 16645 In 'mem' expressions, 1 means that the memory reference holds a 16646 pointer. 16647 16648 In 'symbol_ref' expressions, 1 means that the reference addresses 16649 this function's string constant pool. 16650 16651 In an RTL dump, this flag is represented as '/f'. 16652 16653'in_struct' 16654 In 'reg' expressions, it is 1 if the register has its entire life 16655 contained within the test expression of some loop. 16656 16657 In 'subreg' expressions, 1 means that the 'subreg' is accessing an 16658 object that has had its mode promoted from a wider mode. 16659 16660 In 'label_ref' expressions, 1 means that the referenced label is 16661 outside the innermost loop containing the insn in which the 16662 'label_ref' was found. 16663 16664 In 'code_label' expressions, it is 1 if the label may never be 16665 deleted. This is used for labels which are the target of non-local 16666 gotos. Such a label that would have been deleted is replaced with 16667 a 'note' of type 'NOTE_INSN_DELETED_LABEL'. 16668 16669 In an 'insn' during dead-code elimination, 1 means that the insn is 16670 dead code. 16671 16672 In an 'insn' or 'jump_insn' during reorg for an insn in the delay 16673 slot of a branch, 1 means that this insn is from the target of the 16674 branch. 16675 16676 In an 'insn' during instruction scheduling, 1 means that this insn 16677 must be scheduled as part of a group together with the previous 16678 insn. 16679 16680 In an RTL dump, this flag is represented as '/s'. 16681 16682'return_val' 16683 In 'reg' expressions, 1 means the register contains the value to be 16684 returned by the current function. On machines that pass parameters 16685 in registers, the same register number may be used for parameters 16686 as well, but this flag is not set on such uses. 16687 16688 In 'symbol_ref' expressions, 1 means the referenced symbol is weak. 16689 16690 In 'call' expressions, 1 means the call is pure. 16691 16692 In an RTL dump, this flag is represented as '/i'. 16693 16694'jump' 16695 In a 'mem' expression, 1 means we should keep the alias set for 16696 this mem unchanged when we access a component. 16697 16698 In a 'set', 1 means it is for a return. 16699 16700 In a 'call_insn', 1 means it is a sibling call. 16701 16702 In a 'jump_insn', 1 means it is a crossing jump. 16703 16704 In an RTL dump, this flag is represented as '/j'. 16705 16706'unchanging' 16707 In 'reg' and 'mem' expressions, 1 means that the value of the 16708 expression never changes. 16709 16710 In 'subreg' expressions, it is 1 if the 'subreg' references an 16711 unsigned object whose mode has been promoted to a wider mode. 16712 16713 In an 'insn' or 'jump_insn' in the delay slot of a branch 16714 instruction, 1 means an annulling branch should be used. 16715 16716 In a 'symbol_ref' expression, 1 means that this symbol addresses 16717 something in the per-function constant pool. 16718 16719 In a 'call_insn' 1 means that this instruction is a call to a const 16720 function. 16721 16722 In an RTL dump, this flag is represented as '/u'. 16723 16724'used' 16725 This flag is used directly (without an access macro) at the end of 16726 RTL generation for a function, to count the number of times an 16727 expression appears in insns. Expressions that appear more than 16728 once are copied, according to the rules for shared structure (*note 16729 Sharing::). 16730 16731 For a 'reg', it is used directly (without an access macro) by the 16732 leaf register renumbering code to ensure that each register is only 16733 renumbered once. 16734 16735 In a 'symbol_ref', it indicates that an external declaration for 16736 the symbol has already been written. 16737 16738'volatil' 16739 In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if 16740 the memory reference is volatile. Volatile memory references may 16741 not be deleted, reordered or combined. 16742 16743 In a 'symbol_ref' expression, it is used for machine-specific 16744 purposes. 16745 16746 In a 'reg' expression, it is 1 if the value is a user-level 16747 variable. 0 indicates an internal compiler temporary. 16748 16749 In an 'insn', 1 means the insn has been deleted. 16750 16751 In 'label_ref' and 'reg_label' expressions, 1 means a reference to 16752 a non-local label. 16753 16754 In 'prefetch' expressions, 1 means that the containing insn is a 16755 scheduling barrier. 16756 16757 In an RTL dump, this flag is represented as '/v'. 16758 16759 16760File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 16761 1676214.6 Machine Modes 16763================== 16764 16765A machine mode describes a size of data object and the representation 16766used for it. In the C code, machine modes are represented by an 16767enumeration type, 'machine_mode', defined in 'machmode.def'. Each RTL 16768expression has room for a machine mode and so do certain kinds of tree 16769expressions (declarations and types, to be precise). 16770 16771 In debugging dumps and machine descriptions, the machine mode of an RTL 16772expression is written after the expression code with a colon to separate 16773them. The letters 'mode' which appear at the end of each machine mode 16774name are omitted. For example, '(reg:SI 38)' is a 'reg' expression with 16775machine mode 'SImode'. If the mode is 'VOIDmode', it is not written at 16776all. 16777 16778 Here is a table of machine modes. The term "byte" below refers to an 16779object of 'BITS_PER_UNIT' bits (*note Storage Layout::). 16780 16781'BImode' 16782 "Bit" mode represents a single bit, for predicate registers. 16783 16784'QImode' 16785 "Quarter-Integer" mode represents a single byte treated as an 16786 integer. 16787 16788'HImode' 16789 "Half-Integer" mode represents a two-byte integer. 16790 16791'PSImode' 16792 "Partial Single Integer" mode represents an integer which occupies 16793 four bytes but which doesn't really use all four. On some 16794 machines, this is the right mode to use for pointers. 16795 16796'SImode' 16797 "Single Integer" mode represents a four-byte integer. 16798 16799'PDImode' 16800 "Partial Double Integer" mode represents an integer which occupies 16801 eight bytes but which doesn't really use all eight. On some 16802 machines, this is the right mode to use for certain pointers. 16803 16804'DImode' 16805 "Double Integer" mode represents an eight-byte integer. 16806 16807'TImode' 16808 "Tetra Integer" (?) mode represents a sixteen-byte integer. 16809 16810'OImode' 16811 "Octa Integer" (?) mode represents a thirty-two-byte integer. 16812 16813'XImode' 16814 "Hexadeca Integer" (?) mode represents a sixty-four-byte integer. 16815 16816'QFmode' 16817 "Quarter-Floating" mode represents a quarter-precision (single 16818 byte) floating point number. 16819 16820'HFmode' 16821 "Half-Floating" mode represents a half-precision (two byte) 16822 floating point number. 16823 16824'TQFmode' 16825 "Three-Quarter-Floating" (?) mode represents a 16826 three-quarter-precision (three byte) floating point number. 16827 16828'SFmode' 16829 "Single Floating" mode represents a four byte floating point 16830 number. In the common case, of a processor with IEEE arithmetic 16831 and 8-bit bytes, this is a single-precision IEEE floating point 16832 number; it can also be used for double-precision (on processors 16833 with 16-bit bytes) and single-precision VAX and IBM types. 16834 16835'DFmode' 16836 "Double Floating" mode represents an eight byte floating point 16837 number. In the common case, of a processor with IEEE arithmetic 16838 and 8-bit bytes, this is a double-precision IEEE floating point 16839 number. 16840 16841'XFmode' 16842 "Extended Floating" mode represents an IEEE extended floating point 16843 number. This mode only has 80 meaningful bits (ten bytes). Some 16844 processors require such numbers to be padded to twelve bytes, 16845 others to sixteen; this mode is used for either. 16846 16847'SDmode' 16848 "Single Decimal Floating" mode represents a four byte decimal 16849 floating point number (as distinct from conventional binary 16850 floating point). 16851 16852'DDmode' 16853 "Double Decimal Floating" mode represents an eight byte decimal 16854 floating point number. 16855 16856'TDmode' 16857 "Tetra Decimal Floating" mode represents a sixteen byte decimal 16858 floating point number all 128 of whose bits are meaningful. 16859 16860'TFmode' 16861 "Tetra Floating" mode represents a sixteen byte floating point 16862 number all 128 of whose bits are meaningful. One common use is the 16863 IEEE quad-precision format. 16864 16865'QQmode' 16866 "Quarter-Fractional" mode represents a single byte treated as a 16867 signed fractional number. The default format is "s.7". 16868 16869'HQmode' 16870 "Half-Fractional" mode represents a two-byte signed fractional 16871 number. The default format is "s.15". 16872 16873'SQmode' 16874 "Single Fractional" mode represents a four-byte signed fractional 16875 number. The default format is "s.31". 16876 16877'DQmode' 16878 "Double Fractional" mode represents an eight-byte signed fractional 16879 number. The default format is "s.63". 16880 16881'TQmode' 16882 "Tetra Fractional" mode represents a sixteen-byte signed fractional 16883 number. The default format is "s.127". 16884 16885'UQQmode' 16886 "Unsigned Quarter-Fractional" mode represents a single byte treated 16887 as an unsigned fractional number. The default format is ".8". 16888 16889'UHQmode' 16890 "Unsigned Half-Fractional" mode represents a two-byte unsigned 16891 fractional number. The default format is ".16". 16892 16893'USQmode' 16894 "Unsigned Single Fractional" mode represents a four-byte unsigned 16895 fractional number. The default format is ".32". 16896 16897'UDQmode' 16898 "Unsigned Double Fractional" mode represents an eight-byte unsigned 16899 fractional number. The default format is ".64". 16900 16901'UTQmode' 16902 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 16903 fractional number. The default format is ".128". 16904 16905'HAmode' 16906 "Half-Accumulator" mode represents a two-byte signed accumulator. 16907 The default format is "s8.7". 16908 16909'SAmode' 16910 "Single Accumulator" mode represents a four-byte signed 16911 accumulator. The default format is "s16.15". 16912 16913'DAmode' 16914 "Double Accumulator" mode represents an eight-byte signed 16915 accumulator. The default format is "s32.31". 16916 16917'TAmode' 16918 "Tetra Accumulator" mode represents a sixteen-byte signed 16919 accumulator. The default format is "s64.63". 16920 16921'UHAmode' 16922 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 16923 accumulator. The default format is "8.8". 16924 16925'USAmode' 16926 "Unsigned Single Accumulator" mode represents a four-byte unsigned 16927 accumulator. The default format is "16.16". 16928 16929'UDAmode' 16930 "Unsigned Double Accumulator" mode represents an eight-byte 16931 unsigned accumulator. The default format is "32.32". 16932 16933'UTAmode' 16934 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 16935 unsigned accumulator. The default format is "64.64". 16936 16937'CCmode' 16938 "Condition Code" mode represents the value of a condition code, 16939 which is a machine-specific set of bits used to represent the 16940 result of a comparison operation. Other machine-specific modes may 16941 also be used for the condition code. These modes are not used on 16942 machines that use 'cc0' (*note Condition Code::). 16943 16944'BLKmode' 16945 "Block" mode represents values that are aggregates to which none of 16946 the other modes apply. In RTL, only memory references can have 16947 this mode, and only if they appear in string-move or vector 16948 instructions. On machines which have no such instructions, 16949 'BLKmode' will not appear in RTL. 16950 16951'VOIDmode' 16952 Void mode means the absence of a mode or an unspecified mode. For 16953 example, RTL expressions of code 'const_int' have mode 'VOIDmode' 16954 because they can be taken to have whatever mode the context 16955 requires. In debugging dumps of RTL, 'VOIDmode' is expressed by 16956 the absence of any mode. 16957 16958'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 16959 These modes stand for a complex number represented as a pair of 16960 floating point values. The floating point values are in 'QFmode', 16961 'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively. 16962 16963'CQImode, CHImode, CSImode, CDImode, CTImode, COImode, CPSImode' 16964 These modes stand for a complex number represented as a pair of 16965 integer values. The integer values are in 'QImode', 'HImode', 16966 'SImode', 'DImode', 'TImode', 'OImode', and 'PSImode', 16967 respectively. 16968 16969'BND32mode BND64mode' 16970 These modes stand for bounds for pointer of 32 and 64 bit size 16971 respectively. Mode size is double pointer mode size. 16972 16973 The machine description defines 'Pmode' as a C macro which expands into 16974the machine mode used for addresses. Normally this is the mode whose 16975size is 'BITS_PER_WORD', 'SImode' on 32-bit machines. 16976 16977 The only modes which a machine description must support are 'QImode', 16978and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and 16979'DOUBLE_TYPE_SIZE'. The compiler will attempt to use 'DImode' for 169808-byte structures and unions, but this can be prevented by overriding 16981the definition of 'MAX_FIXED_MODE_SIZE'. Alternatively, you can have 16982the compiler use 'TImode' for 16-byte structures and unions. Likewise, 16983you can arrange for the C type 'short int' to avoid using 'HImode'. 16984 16985 Very few explicit references to machine modes remain in the compiler 16986and these few references will soon be removed. Instead, the machine 16987modes are divided into mode classes. These are represented by the 16988enumeration type 'enum mode_class' defined in 'machmode.h'. The 16989possible mode classes are: 16990 16991'MODE_INT' 16992 Integer modes. By default these are 'BImode', 'QImode', 'HImode', 16993 'SImode', 'DImode', 'TImode', and 'OImode'. 16994 16995'MODE_PARTIAL_INT' 16996 The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and 16997 'PDImode'. 16998 16999'MODE_FLOAT' 17000 Floating point modes. By default these are 'QFmode', 'HFmode', 17001 'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'. 17002 17003'MODE_DECIMAL_FLOAT' 17004 Decimal floating point modes. By default these are 'SDmode', 17005 'DDmode' and 'TDmode'. 17006 17007'MODE_FRACT' 17008 Signed fractional modes. By default these are 'QQmode', 'HQmode', 17009 'SQmode', 'DQmode' and 'TQmode'. 17010 17011'MODE_UFRACT' 17012 Unsigned fractional modes. By default these are 'UQQmode', 17013 'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'. 17014 17015'MODE_ACCUM' 17016 Signed accumulator modes. By default these are 'HAmode', 'SAmode', 17017 'DAmode' and 'TAmode'. 17018 17019'MODE_UACCUM' 17020 Unsigned accumulator modes. By default these are 'UHAmode', 17021 'USAmode', 'UDAmode' and 'UTAmode'. 17022 17023'MODE_COMPLEX_INT' 17024 Complex integer modes. (These are not currently implemented). 17025 17026'MODE_COMPLEX_FLOAT' 17027 Complex floating point modes. By default these are 'QCmode', 17028 'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'. 17029 17030'MODE_CC' 17031 Modes representing condition code values. These are 'CCmode' plus 17032 any 'CC_MODE' modes listed in the 'MACHINE-modes.def'. *Note Jump 17033 Patterns::, also see *note Condition Code::. 17034 17035'MODE_POINTER_BOUNDS' 17036 Pointer bounds modes. Used to represent values of pointer bounds 17037 type. Operations in these modes may be executed as NOPs depending 17038 on hardware features and environment setup. 17039 17040'MODE_RANDOM' 17041 This is a catchall mode class for modes which don't fit into the 17042 above classes. Currently 'VOIDmode' and 'BLKmode' are in 17043 'MODE_RANDOM'. 17044 17045 'machmode.h' also defines various wrapper classes that combine a 17046'machine_mode' with a static assertion that a particular condition 17047holds. The classes are: 17048 17049'scalar_int_mode' 17050 A mode that has class 'MODE_INT' or 'MODE_PARTIAL_INT'. 17051 17052'scalar_float_mode' 17053 A mode that has class 'MODE_FLOAT' or 'MODE_DECIMAL_FLOAT'. 17054 17055'scalar_mode' 17056 A mode that holds a single numerical value. In practice this means 17057 that the mode is a 'scalar_int_mode', is a 'scalar_float_mode', or 17058 has class 'MODE_FRACT', 'MODE_UFRACT', 'MODE_ACCUM', 'MODE_UACCUM' 17059 or 'MODE_POINTER_BOUNDS'. 17060 17061'complex_mode' 17062 A mode that has class 'MODE_COMPLEX_INT' or 'MODE_COMPLEX_FLOAT'. 17063 17064'fixed_size_mode' 17065 A mode whose size is known at compile time. 17066 17067 Named modes use the most constrained of the available wrapper classes, 17068if one exists, otherwise they use 'machine_mode'. For example, 'QImode' 17069is a 'scalar_int_mode', 'SFmode' is a 'scalar_float_mode' and 'BLKmode' 17070is a plain 'machine_mode'. It is possible to refer to any mode as a raw 17071'machine_mode' by adding the 'E_' prefix, where 'E' stands for 17072"enumeration". For example, the raw 'machine_mode' names of the modes 17073just mentioned are 'E_QImode', 'E_SFmode' and 'E_BLKmode' respectively. 17074 17075 The wrapper classes implicitly convert to 'machine_mode' and to any 17076wrapper class that represents a more general condition; for example 17077'scalar_int_mode' and 'scalar_float_mode' both convert to 'scalar_mode' 17078and all three convert to 'fixed_size_mode'. The classes act like 17079'machine_mode's that accept only certain named modes. 17080 17081 'machmode.h' also defines a template class 'opt_mode<T>' that holds a 17082'T' or nothing, where 'T' can be either 'machine_mode' or one of the 17083wrapper classes above. The main operations on an 'opt_mode<T>' X are as 17084follows: 17085 17086'X.exists ()' 17087 Return true if X holds a mode rather than nothing. 17088 17089'X.exists (&Y)' 17090 Return true if X holds a mode rather than nothing, storing the mode 17091 in Y if so. Y must be assignment-compatible with T. 17092 17093'X.require ()' 17094 Assert that X holds a mode rather than nothing and return that 17095 mode. 17096 17097'X = Y' 17098 Set X to Y, where Y is a T or implicitly converts to a T. 17099 17100 The default constructor sets an 'opt_mode<T>' to nothing. There is 17101also a constructor that takes an initial value of type T. 17102 17103 It is possible to use the 'is-a.h' accessors on a 'machine_mode' or 17104machine mode wrapper X: 17105 17106'is_a <T> (X)' 17107 Return true if X meets the conditions for wrapper class T. 17108 17109'is_a <T> (X, &Y)' 17110 Return true if X meets the conditions for wrapper class T, storing 17111 it in Y if so. Y must be assignment-compatible with T. 17112 17113'as_a <T> (X)' 17114 Assert that X meets the conditions for wrapper class T and return 17115 it as a T. 17116 17117'dyn_cast <T> (X)' 17118 Return an 'opt_mode<T>' that holds X if X meets the conditions for 17119 wrapper class T and that holds nothing otherwise. 17120 17121 The purpose of these wrapper classes is to give stronger static type 17122checking. For example, if a function takes a 'scalar_int_mode', a 17123caller that has a general 'machine_mode' must either check or assert 17124that the code is indeed a scalar integer first, using one of the 17125functions above. 17126 17127 The wrapper classes are normal C++ classes, with user-defined 17128constructors. Sometimes it is useful to have a POD version of the same 17129type, particularly if the type appears in a 'union'. The template class 17130'pod_mode<T>' provides a POD version of wrapper class T. It is 17131assignment-compatible with T and implicitly converts to both 17132'machine_mode' and T. 17133 17134 Here are some C macros that relate to machine modes: 17135 17136'GET_MODE (X)' 17137 Returns the machine mode of the RTX X. 17138 17139'PUT_MODE (X, NEWMODE)' 17140 Alters the machine mode of the RTX X to be NEWMODE. 17141 17142'NUM_MACHINE_MODES' 17143 Stands for the number of machine modes available on the target 17144 machine. This is one greater than the largest numeric value of any 17145 machine mode. 17146 17147'GET_MODE_NAME (M)' 17148 Returns the name of mode M as a string. 17149 17150'GET_MODE_CLASS (M)' 17151 Returns the mode class of mode M. 17152 17153'GET_MODE_WIDER_MODE (M)' 17154 Returns the next wider natural mode. For example, the expression 17155 'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'. 17156 17157'GET_MODE_SIZE (M)' 17158 Returns the size in bytes of a datum of mode M. 17159 17160'GET_MODE_BITSIZE (M)' 17161 Returns the size in bits of a datum of mode M. 17162 17163'GET_MODE_IBIT (M)' 17164 Returns the number of integral bits of a datum of fixed-point mode 17165 M. 17166 17167'GET_MODE_FBIT (M)' 17168 Returns the number of fractional bits of a datum of fixed-point 17169 mode M. 17170 17171'GET_MODE_MASK (M)' 17172 Returns a bitmask containing 1 for all bits in a word that fit 17173 within mode M. This macro can only be used for modes whose bitsize 17174 is less than or equal to 'HOST_BITS_PER_INT'. 17175 17176'GET_MODE_ALIGNMENT (M)' 17177 Return the required alignment, in bits, for an object of mode M. 17178 17179'GET_MODE_UNIT_SIZE (M)' 17180 Returns the size in bytes of the subunits of a datum of mode M. 17181 This is the same as 'GET_MODE_SIZE' except in the case of complex 17182 modes. For them, the unit size is the size of the real or 17183 imaginary part. 17184 17185'GET_MODE_NUNITS (M)' 17186 Returns the number of units contained in a mode, i.e., 17187 'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'. 17188 17189'GET_CLASS_NARROWEST_MODE (C)' 17190 Returns the narrowest mode in mode class C. 17191 17192 The following 3 variables are defined on every target. They can be 17193used to allocate buffers that are guaranteed to be large enough to hold 17194any value that can be represented on the target. The first two can be 17195overridden by defining them in the target's mode.def file, however, the 17196value must be a constant that can determined very early in the 17197compilation process. The third symbol cannot be overridden. 17198 17199'BITS_PER_UNIT' 17200 The number of bits in an addressable storage unit (byte). If you 17201 do not define this, the default is 8. 17202 17203'MAX_BITSIZE_MODE_ANY_INT' 17204 The maximum bitsize of any mode that is used in integer math. This 17205 should be overridden by the target if it uses large integers as 17206 containers for larger vectors but otherwise never uses the contents 17207 to compute integer values. 17208 17209'MAX_BITSIZE_MODE_ANY_MODE' 17210 The bitsize of the largest mode on the target. The default value 17211 is the largest mode size given in the mode definition file, which 17212 is always correct for targets whose modes have a fixed size. 17213 Targets that might increase the size of a mode beyond this default 17214 should define 'MAX_BITSIZE_MODE_ANY_MODE' to the actual upper limit 17215 in 'MACHINE-modes.def'. 17216 17217 The global variables 'byte_mode' and 'word_mode' contain modes whose 17218classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or 17219'BITS_PER_WORD', respectively. On 32-bit machines, these are 'QImode' 17220and 'SImode', respectively. 17221 17222 17223File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 17224 1722514.7 Constant Expression Types 17226============================== 17227 17228The simplest RTL expressions are those that represent constant values. 17229 17230'(const_int I)' 17231 This type of expression represents the integer value I. I is 17232 customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)', 17233 which is equivalent to 'XWINT (EXP, 0)'. 17234 17235 Constants generated for modes with fewer bits than in 17236 'HOST_WIDE_INT' must be sign extended to full width (e.g., with 17237 'gen_int_mode'). For constants for modes with more bits than in 17238 'HOST_WIDE_INT' the implied high order bits of that constant are 17239 copies of the top bit. Note however that values are neither 17240 inherently signed nor inherently unsigned; where necessary, 17241 signedness is determined by the rtl operation instead. 17242 17243 There is only one expression object for the integer value zero; it 17244 is the value of the variable 'const0_rtx'. Likewise, the only 17245 expression for integer value one is found in 'const1_rtx', the only 17246 expression for integer value two is found in 'const2_rtx', and the 17247 only expression for integer value negative one is found in 17248 'constm1_rtx'. Any attempt to create an expression of code 17249 'const_int' and value zero, one, two or negative one will return 17250 'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as 17251 appropriate. 17252 17253 Similarly, there is only one object for the integer whose value is 17254 'STORE_FLAG_VALUE'. It is found in 'const_true_rtx'. If 17255 'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will 17256 point to the same object. If 'STORE_FLAG_VALUE' is -1, 17257 'const_true_rtx' and 'constm1_rtx' will point to the same object. 17258 17259'(const_double:M I0 I1 ...)' 17260 This represents either a floating-point constant of mode M or (on 17261 older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an 17262 integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT' 17263 bits but small enough to fit within twice that number of bits. In 17264 the latter case, M will be 'VOIDmode'. For integral values 17265 constants for modes with more bits than twice the number in 17266 'HOST_WIDE_INT' the implied high order bits of that constant are 17267 copies of the top bit of 'CONST_DOUBLE_HIGH'. Note however that 17268 integral values are neither inherently signed nor inherently 17269 unsigned; where necessary, signedness is determined by the rtl 17270 operation instead. 17271 17272 On more modern ports, 'CONST_DOUBLE' only represents floating point 17273 values. New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this 17274 designation. 17275 17276 If M is 'VOIDmode', the bits of the value are stored in I0 and I1. 17277 I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1 17278 with 'CONST_DOUBLE_HIGH'. 17279 17280 If the constant is floating point (regardless of its precision), 17281 then the number of integers used to store the value depends on the 17282 size of 'REAL_VALUE_TYPE' (*note Floating Point::). The integers 17283 represent a floating point number, but not precisely in the target 17284 machine's or host machine's floating point format. To convert them 17285 to the precise bit pattern used by the target machine, use the 17286 macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 17287 Output::). 17288 17289'(const_wide_int:M NUNITS ELT0 ...)' 17290 This contains an array of 'HOST_WIDE_INT's that is large enough to 17291 hold any constant that can be represented on the target. This form 17292 of rtl is only used on targets that define 17293 'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's 17294 are only used to hold floating-point values. If the target leaves 17295 'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not 17296 used and 'CONST_DOUBLE's are as they were before. 17297 17298 The values are stored in a compressed format. The higher-order 0s 17299 or -1s are not represented if they are just the logical sign 17300 extension of the number that is represented. 17301 17302'CONST_WIDE_INT_VEC (CODE)' 17303 Returns the entire array of 'HOST_WIDE_INT's that are used to store 17304 the value. This macro should be rarely used. 17305 17306'CONST_WIDE_INT_NUNITS (CODE)' 17307 The number of 'HOST_WIDE_INT's used to represent the number. Note 17308 that this generally is smaller than the number of 'HOST_WIDE_INT's 17309 implied by the mode size. 17310 17311'CONST_WIDE_INT_ELT (CODE,I)' 17312 Returns the 'i'th element of the array. Element 0 is contains the 17313 low order bits of the constant. 17314 17315'(const_fixed:M ...)' 17316 Represents a fixed-point constant of mode M. The operand is a data 17317 structure of type 'struct fixed_value' and is accessed with the 17318 macro 'CONST_FIXED_VALUE'. The high part of data is accessed with 17319 'CONST_FIXED_VALUE_HIGH'; the low part is accessed with 17320 'CONST_FIXED_VALUE_LOW'. 17321 17322'(const_poly_int:M [C0 C1 ...])' 17323 Represents a 'poly_int'-style polynomial integer with coefficients 17324 C0, C1, .... The coefficients are 'wide_int'-based integers rather 17325 than rtxes. 'CONST_POLY_INT_COEFFS' gives the values of individual 17326 coefficients (which is mostly only useful in low-level routines) 17327 and 'const_poly_int_value' gives the full 'poly_int' value. 17328 17329'(const_vector:M [X0 X1 ...])' 17330 Represents a vector constant. The values in square brackets are 17331 elements of the vector, which are always 'const_int', 17332 'const_wide_int', 'const_double' or 'const_fixed' expressions. 17333 17334 Each vector constant V is treated as a specific instance of an 17335 arbitrary-length sequence that itself contains 17336 'CONST_VECTOR_NPATTERNS (V)' interleaved patterns. Each pattern 17337 has the form: 17338 17339 { BASE0, BASE1, BASE1 + STEP, BASE1 + STEP * 2, ... } 17340 17341 The first three elements in each pattern are enough to determine 17342 the values of the other elements. However, if all STEPs are zero, 17343 only the first two elements are needed. If in addition each BASE1 17344 is equal to the corresponding BASE0, only the first element in each 17345 pattern is needed. The number of determining elements per pattern 17346 is given by 'CONST_VECTOR_NELTS_PER_PATTERN (V)'. 17347 17348 For example, the constant: 17349 17350 { 0, 1, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18 } 17351 17352 is interpreted as an interleaving of the sequences: 17353 17354 { 0, 2, 3, 4, 5, 6, 7, 8 } 17355 { 1, 6, 8, 10, 12, 14, 16, 18 } 17356 17357 where the sequences are represented by the following patterns: 17358 17359 BASE0 == 0, BASE1 == 2, STEP == 1 17360 BASE0 == 1, BASE1 == 6, STEP == 2 17361 17362 In this case: 17363 17364 CONST_VECTOR_NPATTERNS (V) == 2 17365 CONST_VECTOR_NELTS_PER_PATTERN (V) == 3 17366 17367 Thus the first 6 elements ('{ 0, 1, 2, 6, 3, 8 }') are enough to 17368 determine the whole sequence; we refer to them as the "encoded" 17369 elements. They are the only elements present in the square 17370 brackets for variable-length 'const_vector's (i.e. for 17371 'const_vector's whose mode M has a variable number of elements). 17372 However, as a convenience to code that needs to handle both 17373 'const_vector's and 'parallel's, all elements are present in the 17374 square brackets for fixed-length 'const_vector's; the encoding 17375 scheme simply reduces the amount of work involved in processing 17376 constants that follow a regular pattern. 17377 17378 Sometimes this scheme can create two possible encodings of the same 17379 vector. For example { 0, 1 } could be seen as two patterns with 17380 one element each or one pattern with two elements (BASE0 and 17381 BASE1). The canonical encoding is always the one with the fewest 17382 patterns or (if both encodings have the same number of petterns) 17383 the one with the fewest encoded elements. 17384 17385 'const_vector_encoding_nelts (V)' gives the total number of encoded 17386 elements in V, which is 6 in the example above. 17387 'CONST_VECTOR_ENCODED_ELT (V, I)' accesses the value of encoded 17388 element I. 17389 17390 'CONST_VECTOR_DUPLICATE_P (V)' is true if V simply contains 17391 repeated instances of 'CONST_VECTOR_NPATTERNS (V)' values. This is 17392 a shorthand for testing 'CONST_VECTOR_NELTS_PER_PATTERN (V) == 1'. 17393 17394 'CONST_VECTOR_STEPPED_P (V)' is true if at least one pattern in V 17395 has a nonzero step. This is a shorthand for testing 17396 'CONST_VECTOR_NELTS_PER_PATTERN (V) == 3'. 17397 17398 'CONST_VECTOR_NUNITS (V)' gives the total number of elements in V; 17399 it is a shorthand for getting the number of units in 'GET_MODE 17400 (V)'. 17401 17402 The utility function 'const_vector_elt' gives the value of an 17403 arbitrary element as an 'rtx'. 'const_vector_int_elt' gives the 17404 same value as a 'wide_int'. 17405 17406'(const_string STR)' 17407 Represents a constant string with value STR. Currently this is 17408 used only for insn attributes (*note Insn Attributes::) since 17409 constant strings in C are placed in memory. 17410 17411'(symbol_ref:MODE SYMBOL)' 17412 Represents the value of an assembler label for data. SYMBOL is a 17413 string that describes the name of the assembler label. If it 17414 starts with a '*', the label is the rest of SYMBOL not including 17415 the '*'. Otherwise, the label is SYMBOL, usually prefixed with 17416 '_'. 17417 17418 The 'symbol_ref' contains a mode, which is usually 'Pmode'. 17419 Usually that is the only mode for which a symbol is directly valid. 17420 17421'(label_ref:MODE LABEL)' 17422 Represents the value of an assembler label for code. It contains 17423 one operand, an expression, which must be a 'code_label' or a 17424 'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the 17425 instruction sequence to identify the place where the label should 17426 go. 17427 17428 The reason for using a distinct expression type for code label 17429 references is so that jump optimization can distinguish them. 17430 17431 The 'label_ref' contains a mode, which is usually 'Pmode'. Usually 17432 that is the only mode for which a label is directly valid. 17433 17434'(const:M EXP)' 17435 Represents a constant that is the result of an assembly-time 17436 arithmetic computation. The operand, EXP, contains only 17437 'const_int', 'symbol_ref', 'label_ref' or 'unspec' expressions, 17438 combined with 'plus' and 'minus'. Any such 'unspec's are 17439 target-specific and typically represent some form of relocation 17440 operator. M should be a valid address mode. 17441 17442'(high:M EXP)' 17443 Represents the high-order bits of EXP. The number of bits is 17444 machine-dependent and is normally the number of bits specified in 17445 an instruction that initializes the high order bits of a register. 17446 It is used with 'lo_sum' to represent the typical two-instruction 17447 sequence used in RISC machines to reference large immediate values 17448 and/or link-time constants such as global memory addresses. In the 17449 latter case, M is 'Pmode' and EXP is usually a constant expression 17450 involving 'symbol_ref'. 17451 17452 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in 17453mode MODE. If mode MODE is of mode class 'MODE_INT', it returns 17454'const0_rtx'. If mode MODE is of mode class 'MODE_FLOAT', it returns a 17455'CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 17456'CONST_VECTOR' expression in mode MODE. Similarly, the macro 17457'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 17458and similarly for 'CONST2_RTX'. The 'CONST1_RTX' and 'CONST2_RTX' 17459macros are undefined for vector modes. 17460 17461 17462File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 17463 1746414.8 Registers and Memory 17465========================= 17466 17467Here are the RTL expression types for describing access to machine 17468registers and to main memory. 17469 17470'(reg:M N)' 17471 For small values of the integer N (those that are less than 17472 'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 17473 register number N: a "hard register". For larger values of N, it 17474 stands for a temporary value or "pseudo register". The compiler's 17475 strategy is to generate code assuming an unlimited number of such 17476 pseudo registers, and later convert them into hard registers or 17477 into memory references. 17478 17479 M is the machine mode of the reference. It is necessary because 17480 machines can generally refer to each register in more than one 17481 mode. For example, a register may contain a full word but there 17482 may be instructions to refer to it as a half word or as a single 17483 byte, as well as instructions to refer to it as a floating point 17484 number of various precisions. 17485 17486 Even for a register that the machine can access in only one mode, 17487 the mode must always be specified. 17488 17489 The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine 17490 description, since the number of hard registers on the machine is 17491 an invariant characteristic of the machine. Note, however, that 17492 not all of the machine registers must be general registers. All 17493 the machine registers that can be used for storage of data are 17494 given hard register numbers, even those that can be used only in 17495 certain instructions or can hold only certain types of data. 17496 17497 A hard register may be accessed in various modes throughout one 17498 function, but each pseudo register is given a natural mode and is 17499 accessed only in that mode. When it is necessary to describe an 17500 access to a pseudo register using a nonnatural mode, a 'subreg' 17501 expression is used. 17502 17503 A 'reg' expression with a machine mode that specifies more than one 17504 word of data may actually stand for several consecutive registers. 17505 If in addition the register number specifies a hardware register, 17506 then it actually represents several consecutive hardware registers 17507 starting with the specified one. 17508 17509 Each pseudo register number used in a function's RTL code is 17510 represented by a unique 'reg' expression. 17511 17512 Some pseudo register numbers, those within the range of 17513 'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear 17514 during the RTL generation phase and are eliminated before the 17515 optimization phases. These represent locations in the stack frame 17516 that cannot be determined until RTL generation for the function has 17517 been completed. The following virtual register numbers are 17518 defined: 17519 17520 'VIRTUAL_INCOMING_ARGS_REGNUM' 17521 This points to the first word of the incoming arguments passed 17522 on the stack. Normally these arguments are placed there by 17523 the caller, but the callee may have pushed some arguments that 17524 were previously passed in registers. 17525 17526 When RTL generation is complete, this virtual register is 17527 replaced by the sum of the register given by 17528 'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'. 17529 17530 'VIRTUAL_STACK_VARS_REGNUM' 17531 If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 17532 points to immediately above the first variable on the stack. 17533 Otherwise, it points to the first variable on the stack. 17534 17535 'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 17536 register given by 'FRAME_POINTER_REGNUM' and the value 17537 'TARGET_STARTING_FRAME_OFFSET'. 17538 17539 'VIRTUAL_STACK_DYNAMIC_REGNUM' 17540 This points to the location of dynamically allocated memory on 17541 the stack immediately after the stack pointer has been 17542 adjusted by the amount of memory desired. 17543 17544 This virtual register is replaced by the sum of the register 17545 given by 'STACK_POINTER_REGNUM' and the value 17546 'STACK_DYNAMIC_OFFSET'. 17547 17548 'VIRTUAL_OUTGOING_ARGS_REGNUM' 17549 This points to the location in the stack at which outgoing 17550 arguments should be written when the stack is pre-pushed 17551 (arguments pushed using push insns should always use 17552 'STACK_POINTER_REGNUM'). 17553 17554 This virtual register is replaced by the sum of the register 17555 given by 'STACK_POINTER_REGNUM' and the value 17556 'STACK_POINTER_OFFSET'. 17557 17558'(subreg:M1 REG:M2 BYTENUM)' 17559 17560 'subreg' expressions are used to refer to a register in a machine 17561 mode other than its natural one, or to refer to one register of a 17562 multi-part 'reg' that actually refers to several registers. 17563 17564 Each pseudo register has a natural mode. If it is necessary to 17565 operate on it in a different mode, the register must be enclosed in 17566 a 'subreg'. 17567 17568 There are currently three supported types for the first operand of 17569 a 'subreg': 17570 * pseudo registers This is the most common case. Most 'subreg's 17571 have pseudo 'reg's as their first operand. 17572 17573 * mem 'subreg's of 'mem' were common in earlier versions of GCC 17574 and are still supported. During the reload pass these are 17575 replaced by plain 'mem's. On machines that do not do 17576 instruction scheduling, use of 'subreg's of 'mem' are still 17577 used, but this is no longer recommended. Such 'subreg's are 17578 considered to be 'register_operand's rather than 17579 'memory_operand's before and during reload. Because of this, 17580 the scheduling passes cannot properly schedule instructions 17581 with 'subreg's of 'mem', so for machines that do scheduling, 17582 'subreg's of 'mem' should never be used. To support this, the 17583 combine and recog passes have explicit code to inhibit the 17584 creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is 17585 defined. 17586 17587 The use of 'subreg's of 'mem' after the reload pass is an area 17588 that is not well understood and should be avoided. There is 17589 still some code in the compiler to support this, but this code 17590 has possibly rotted. This use of 'subreg's is discouraged and 17591 will most likely not be supported in the future. 17592 17593 * hard registers It is seldom necessary to wrap hard registers 17594 in 'subreg's; such registers would normally reduce to a single 17595 'reg' rtx. This use of 'subreg's is discouraged and may not 17596 be supported in the future. 17597 17598 'subreg's of 'subreg's are not supported. Using 17599 'simplify_gen_subreg' is the recommended way to avoid this problem. 17600 17601 'subreg's come in two distinct flavors, each having its own usage 17602 and rules: 17603 17604 Paradoxical subregs 17605 When M1 is strictly wider than M2, the 'subreg' expression is 17606 called "paradoxical". The canonical test for this class of 17607 'subreg' is: 17608 17609 paradoxical_subreg_p (M1, M2) 17610 17611 Paradoxical 'subreg's can be used as both lvalues and rvalues. 17612 When used as an lvalue, the low-order bits of the source value 17613 are stored in REG and the high-order bits are discarded. When 17614 used as an rvalue, the low-order bits of the 'subreg' are 17615 taken from REG while the high-order bits may or may not be 17616 defined. 17617 17618 The high-order bits of rvalues are defined in the following 17619 circumstances: 17620 17621 * 'subreg's of 'mem' When M2 is smaller than a word, the 17622 macro 'LOAD_EXTEND_OP', can control how the high-order 17623 bits are defined. 17624 17625 * 'subreg' of 'reg's The upper bits are defined when 17626 'SUBREG_PROMOTED_VAR_P' is true. 17627 'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 17628 bits hold. Such subregs usually represent local 17629 variables, register variables and parameter pseudo 17630 variables that have been promoted to a wider mode. 17631 17632 BYTENUM is always zero for a paradoxical 'subreg', even on 17633 big-endian targets. 17634 17635 For example, the paradoxical 'subreg': 17636 17637 (set (subreg:SI (reg:HI X) 0) Y) 17638 17639 stores the lower 2 bytes of Y in X and discards the upper 2 17640 bytes. A subsequent: 17641 17642 (set Z (subreg:SI (reg:HI X) 0)) 17643 17644 would set the lower two bytes of Z to Y and set the upper two 17645 bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is 17646 false. 17647 17648 Normal subregs 17649 When M1 is at least as narrow as M2 the 'subreg' expression is 17650 called "normal". 17651 17652 Normal 'subreg's restrict consideration to certain bits of 17653 REG. For this purpose, REG is divided into 17654 individually-addressable blocks in which each block has: 17655 17656 REGMODE_NATURAL_SIZE (M2) 17657 17658 bytes. Usually the value is 'UNITS_PER_WORD'; that is, most 17659 targets usually treat each word of a register as being 17660 independently addressable. 17661 17662 There are two types of normal 'subreg'. If M1 is known to be 17663 no bigger than a block, the 'subreg' refers to the 17664 least-significant part (or "lowpart") of one block of REG. If 17665 M1 is known to be larger than a block, the 'subreg' refers to 17666 two or more complete blocks. 17667 17668 When used as an lvalue, 'subreg' is a block-based accessor. 17669 Storing to a 'subreg' modifies all the blocks of REG that 17670 overlap the 'subreg', but it leaves the other blocks of REG 17671 alone. 17672 17673 When storing to a normal 'subreg' that is smaller than a 17674 block, the other bits of the referenced block are usually left 17675 in an undefined state. This laxity makes it easier to 17676 generate efficient code for such instructions. To represent 17677 an instruction that preserves all the bits outside of those in 17678 the 'subreg', use 'strict_low_part' or 'zero_extract' around 17679 the 'subreg'. 17680 17681 BYTENUM must identify the offset of the first byte of the 17682 'subreg' from the start of REG, assuming that REG is laid out 17683 in memory order. The memory order of bytes is defined by two 17684 target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN': 17685 17686 * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number 17687 zero is part of the most significant word; otherwise, it 17688 is part of the least significant word. 17689 17690 * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number 17691 zero is the most significant byte within a word; 17692 otherwise, it is the least significant byte within a 17693 word. 17694 17695 On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with 17696 'WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 17697 floating point values as if they had the same endianness as 17698 integer values. This works because they handle them solely as 17699 a collection of integer values, with no particular numerical 17700 value. Only real.c and the runtime libraries care about 17701 'FLOAT_WORDS_BIG_ENDIAN'. 17702 17703 Thus, 17704 17705 (subreg:HI (reg:SI X) 2) 17706 17707 on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the 17708 same as 17709 17710 (subreg:HI (reg:SI X) 0) 17711 17712 on a little-endian, 'UNITS_PER_WORD == 4' target. Both 17713 'subreg's access the lower two bytes of register X. 17714 17715 Note that the byte offset is a polynomial integer; it may not 17716 be a compile-time constant on targets with variable-sized 17717 modes. However, the restrictions above mean that there are 17718 only a certain set of acceptable offsets for a given 17719 combination of M1 and M2. The compiler can always tell which 17720 blocks a valid subreg occupies, and whether the subreg is a 17721 lowpart of a block. 17722 17723 A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the 17724 corresponding 'MODE_INT' mode, except that it has an unknown number 17725 of undefined bits. For example: 17726 17727 (subreg:PSI (reg:SI 0) 0) 17728 17729 accesses the whole of '(reg:SI 0)', but the exact relationship 17730 between the 'PSImode' value and the 'SImode' value is not defined. 17731 If we assume 'REGMODE_NATURAL_SIZE (DImode) <= 4', then the 17732 following two 'subreg's: 17733 17734 (subreg:PSI (reg:DI 0) 0) 17735 (subreg:PSI (reg:DI 0) 4) 17736 17737 represent independent 4-byte accesses to the two halves of '(reg:DI 17738 0)'. Both 'subreg's have an unknown number of undefined bits. 17739 17740 If 'REGMODE_NATURAL_SIZE (PSImode) <= 2' then these two 'subreg's: 17741 17742 (subreg:HI (reg:PSI 0) 0) 17743 (subreg:HI (reg:PSI 0) 2) 17744 17745 represent independent 2-byte accesses that together span the whole 17746 of '(reg:PSI 0)'. Storing to the first 'subreg' does not affect 17747 the value of the second, and vice versa. '(reg:PSI 0)' has an 17748 unknown number of undefined bits, so the assignment: 17749 17750 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 17751 17752 does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value 17753 '(reg:HI 4)'. 17754 17755 The rules above apply to both pseudo REGs and hard REGs. If the 17756 semantics are not correct for particular combinations of M1, M2 and 17757 hard REG, the target-specific code must ensure that those 17758 combinations are never used. For example: 17759 17760 TARGET_CAN_CHANGE_MODE_CLASS (M2, M1, CLASS) 17761 17762 must be false for every class CLASS that includes REG. 17763 17764 GCC must be able to determine at compile time whether a subreg is 17765 paradoxical, whether it occupies a whole number of blocks, or 17766 whether it is a lowpart of a block. This means that certain 17767 combinations of variable-sized mode are not permitted. For 17768 example, if M2 holds N 'SI' values, where N is greater than zero, 17769 it is not possible to form a 'DI' 'subreg' of it; such a 'subreg' 17770 would be paradoxical when N is 1 but not when N is greater than 1. 17771 17772 The first operand of a 'subreg' expression is customarily accessed 17773 with the 'SUBREG_REG' macro and the second operand is customarily 17774 accessed with the 'SUBREG_BYTE' macro. 17775 17776 It has been several years since a platform in which 17777 'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested. 17778 Anyone wishing to support such a platform in the future may be 17779 confronted with code rot. 17780 17781'(scratch:M)' 17782 This represents a scratch register that will be required for the 17783 execution of a single instruction and not used subsequently. It is 17784 converted into a 'reg' by either the local register allocator or 17785 the reload pass. 17786 17787 'scratch' is usually present inside a 'clobber' operation (*note 17788 Side Effects::). 17789 17790'(cc0)' 17791 This refers to the machine's condition code register. It has no 17792 operands and may not have a machine mode. There are two ways to 17793 use it: 17794 17795 * To stand for a complete set of condition code flags. This is 17796 best on most machines, where each comparison sets the entire 17797 series of flags. 17798 17799 With this technique, '(cc0)' may be validly used in only two 17800 contexts: as the destination of an assignment (in test and 17801 compare instructions) and in comparison operators comparing 17802 against zero ('const_int' with value zero; that is to say, 17803 'const0_rtx'). 17804 17805 * To stand for a single flag that is the result of a single 17806 condition. This is useful on machines that have only a single 17807 flag bit, and in which comparison instructions must specify 17808 the condition to test. 17809 17810 With this technique, '(cc0)' may be validly used in only two 17811 contexts: as the destination of an assignment (in test and 17812 compare instructions) where the source is a comparison 17813 operator, and as the first operand of 'if_then_else' (in a 17814 conditional branch). 17815 17816 There is only one expression object of code 'cc0'; it is the value 17817 of the variable 'cc0_rtx'. Any attempt to create an expression of 17818 code 'cc0' will return 'cc0_rtx'. 17819 17820 Instructions can set the condition code implicitly. On many 17821 machines, nearly all instructions set the condition code based on 17822 the value that they compute or store. It is not necessary to 17823 record these actions explicitly in the RTL because the machine 17824 description includes a prescription for recognizing the 17825 instructions that do so (by means of the macro 'NOTICE_UPDATE_CC'). 17826 *Note Condition Code::. Only instructions whose sole purpose is to 17827 set the condition code, and instructions that use the condition 17828 code, need mention '(cc0)'. 17829 17830 On some machines, the condition code register is given a register 17831 number and a 'reg' is used instead of '(cc0)'. This is usually the 17832 preferable approach if only a small subset of instructions modify 17833 the condition code. Other machines store condition codes in 17834 general registers; in such cases a pseudo register should be used. 17835 17836 Some machines, such as the SPARC and RS/6000, have two sets of 17837 arithmetic instructions, one that sets and one that does not set 17838 the condition code. This is best handled by normally generating 17839 the instruction that does not set the condition code, and making a 17840 pattern that both performs the arithmetic and sets the condition 17841 code register (which would not be '(cc0)' in this case). For 17842 examples, search for 'addcc' and 'andcc' in 'sparc.md'. 17843 17844'(pc)' 17845 This represents the machine's program counter. It has no operands 17846 and may not have a machine mode. '(pc)' may be validly used only 17847 in certain specific contexts in jump instructions. 17848 17849 There is only one expression object of code 'pc'; it is the value 17850 of the variable 'pc_rtx'. Any attempt to create an expression of 17851 code 'pc' will return 'pc_rtx'. 17852 17853 All instructions that do not jump alter the program counter 17854 implicitly by incrementing it, but there is no need to mention this 17855 in the RTL. 17856 17857'(mem:M ADDR ALIAS)' 17858 This RTX represents a reference to main memory at an address 17859 represented by the expression ADDR. M specifies how large a unit 17860 of memory is accessed. ALIAS specifies an alias set for the 17861 reference. In general two items are in different alias sets if 17862 they cannot reference the same memory address. 17863 17864 The construct '(mem:BLK (scratch))' is considered to alias all 17865 other memories. Thus it may be used as a memory barrier in 17866 epilogue stack deallocation patterns. 17867 17868'(concatM RTX RTX)' 17869 This RTX represents the concatenation of two other RTXs. This is 17870 used for complex values. It should only appear in the RTL attached 17871 to declarations and during RTL generation. It should not appear in 17872 the ordinary insn chain. 17873 17874'(concatnM [RTX ...])' 17875 This RTX represents the concatenation of all the RTX to make a 17876 single value. Like 'concat', this should only appear in 17877 declarations, and not in the insn chain. 17878 17879 17880File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 17881 1788214.9 RTL Expressions for Arithmetic 17883=================================== 17884 17885Unless otherwise specified, all the operands of arithmetic expressions 17886must be valid for mode M. An operand is valid for mode M if it has mode 17887M, or if it is a 'const_int' or 'const_double' and M is a mode of class 17888'MODE_INT'. 17889 17890 For commutative binary operations, constants should be placed in the 17891second operand. 17892 17893'(plus:M X Y)' 17894'(ss_plus:M X Y)' 17895'(us_plus:M X Y)' 17896 17897 These three expressions all represent the sum of the values 17898 represented by X and Y carried out in machine mode M. They differ 17899 in their behavior on overflow of integer modes. 'plus' wraps round 17900 modulo the width of M; 'ss_plus' saturates at the maximum signed 17901 value representable in M; 'us_plus' saturates at the maximum 17902 unsigned value. 17903 17904'(lo_sum:M X Y)' 17905 17906 This expression represents the sum of X and the low-order bits of 17907 Y. It is used with 'high' (*note Constants::) to represent the 17908 typical two-instruction sequence used in RISC machines to reference 17909 large immediate values and/or link-time constants such as global 17910 memory addresses. In the latter case, M is 'Pmode' and Y is 17911 usually a constant expression involving 'symbol_ref'. 17912 17913 The number of low order bits is machine-dependent but is normally 17914 the number of bits in mode M minus the number of bits set by 17915 'high'. 17916 17917'(minus:M X Y)' 17918'(ss_minus:M X Y)' 17919'(us_minus:M X Y)' 17920 17921 These three expressions represent the result of subtracting Y from 17922 X, carried out in mode M. Behavior on overflow is the same as for 17923 the three variants of 'plus' (see above). 17924 17925'(compare:M X Y)' 17926 Represents the result of subtracting Y from X for purposes of 17927 comparison. The result is computed without overflow, as if with 17928 infinite precision. 17929 17930 Of course, machines cannot really subtract with infinite precision. 17931 However, they can pretend to do so when only the sign of the result 17932 will be used, which is the case when the result is stored in the 17933 condition code. And that is the _only_ way this kind of expression 17934 may validly be used: as a value to be stored in the condition 17935 codes, either '(cc0)' or a register. *Note Comparisons::. 17936 17937 The mode M is not related to the modes of X and Y, but instead is 17938 the mode of the condition code value. If '(cc0)' is used, it is 17939 'VOIDmode'. Otherwise it is some mode in class 'MODE_CC', often 17940 'CCmode'. *Note Condition Code::. If M is 'VOIDmode' or 'CCmode', 17941 the operation returns sufficient information (in an unspecified 17942 format) so that any comparison operator can be applied to the 17943 result of the 'COMPARE' operation. For other modes in class 17944 'MODE_CC', the operation only returns a subset of this information. 17945 17946 Normally, X and Y must have the same mode. Otherwise, 'compare' is 17947 valid only if the mode of X is in class 'MODE_INT' and Y is a 17948 'const_int' or 'const_double' with mode 'VOIDmode'. The mode of X 17949 determines what mode the comparison is to be done in; thus it must 17950 not be 'VOIDmode'. 17951 17952 If one of the operands is a constant, it should be placed in the 17953 second operand and the comparison code adjusted as appropriate. 17954 17955 A 'compare' specifying two 'VOIDmode' constants is not valid since 17956 there is no way to know in what mode the comparison is to be 17957 performed; the comparison must either be folded during the 17958 compilation or the first operand must be loaded into a register 17959 while its mode is still known. 17960 17961'(neg:M X)' 17962'(ss_neg:M X)' 17963'(us_neg:M X)' 17964 These two expressions represent the negation (subtraction from 17965 zero) of the value represented by X, carried out in mode M. They 17966 differ in the behavior on overflow of integer modes. In the case 17967 of 'neg', the negation of the operand may be a number not 17968 representable in mode M, in which case it is truncated to M. 17969 'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates 17970 to the maximum or minimum signed or unsigned value. 17971 17972'(mult:M X Y)' 17973'(ss_mult:M X Y)' 17974'(us_mult:M X Y)' 17975 Represents the signed product of the values represented by X and Y 17976 carried out in machine mode M. 'ss_mult' and 'us_mult' ensure that 17977 an out-of-bounds result saturates to the maximum or minimum signed 17978 or unsigned value. 17979 17980 Some machines support a multiplication that generates a product 17981 wider than the operands. Write the pattern for this as 17982 17983 (mult:M (sign_extend:M X) (sign_extend:M Y)) 17984 17985 where M is wider than the modes of X and Y, which need not be the 17986 same. 17987 17988 For unsigned widening multiplication, use the same idiom, but with 17989 'zero_extend' instead of 'sign_extend'. 17990 17991'(fma:M X Y Z)' 17992 Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which 17993 compute 'X * Y + Z' without doing an intermediate rounding step. 17994 17995'(div:M X Y)' 17996'(ss_div:M X Y)' 17997 Represents the quotient in signed division of X by Y, carried out 17998 in machine mode M. If M is a floating point mode, it represents 17999 the exact quotient; otherwise, the integerized quotient. 'ss_div' 18000 ensures that an out-of-bounds result saturates to the maximum or 18001 minimum signed value. 18002 18003 Some machines have division instructions in which the operands and 18004 quotient widths are not all the same; you should represent such 18005 instructions using 'truncate' and 'sign_extend' as in, 18006 18007 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 18008 18009'(udiv:M X Y)' 18010'(us_div:M X Y)' 18011 Like 'div' but represents unsigned division. 'us_div' ensures that 18012 an out-of-bounds result saturates to the maximum or minimum 18013 unsigned value. 18014 18015'(mod:M X Y)' 18016'(umod:M X Y)' 18017 Like 'div' and 'udiv' but represent the remainder instead of the 18018 quotient. 18019 18020'(smin:M X Y)' 18021'(smax:M X Y)' 18022 Represents the smaller (for 'smin') or larger (for 'smax') of X and 18023 Y, interpreted as signed values in mode M. When used with floating 18024 point, if both operands are zeros, or if either operand is 'NaN', 18025 then it is unspecified which of the two operands is returned as the 18026 result. 18027 18028'(umin:M X Y)' 18029'(umax:M X Y)' 18030 Like 'smin' and 'smax', but the values are interpreted as unsigned 18031 integers. 18032 18033'(not:M X)' 18034 Represents the bitwise complement of the value represented by X, 18035 carried out in mode M, which must be a fixed-point machine mode. 18036 18037'(and:M X Y)' 18038 Represents the bitwise logical-and of the values represented by X 18039 and Y, carried out in machine mode M, which must be a fixed-point 18040 machine mode. 18041 18042'(ior:M X Y)' 18043 Represents the bitwise inclusive-or of the values represented by X 18044 and Y, carried out in machine mode M, which must be a fixed-point 18045 mode. 18046 18047'(xor:M X Y)' 18048 Represents the bitwise exclusive-or of the values represented by X 18049 and Y, carried out in machine mode M, which must be a fixed-point 18050 mode. 18051 18052'(ashift:M X C)' 18053'(ss_ashift:M X C)' 18054'(us_ashift:M X C)' 18055 These three expressions represent the result of arithmetically 18056 shifting X left by C places. They differ in their behavior on 18057 overflow of integer modes. An 'ashift' operation is a plain shift 18058 with no special behavior in case of a change in the sign bit; 18059 'ss_ashift' and 'us_ashift' saturates to the minimum or maximum 18060 representable value if any of the bits shifted out differs from the 18061 final sign bit. 18062 18063 X have mode M, a fixed-point machine mode. C be a fixed-point mode 18064 or be a constant with mode 'VOIDmode'; which mode is determined by 18065 the mode called for in the machine description entry for the 18066 left-shift instruction. For example, on the VAX, the mode of C is 18067 'QImode' regardless of M. 18068 18069'(lshiftrt:M X C)' 18070'(ashiftrt:M X C)' 18071 Like 'ashift' but for right shift. Unlike the case for left shift, 18072 these two operations are distinct. 18073 18074'(rotate:M X C)' 18075'(rotatert:M X C)' 18076 Similar but represent left and right rotate. If C is a constant, 18077 use 'rotate'. 18078 18079'(abs:M X)' 18080'(ss_abs:M X)' 18081 Represents the absolute value of X, computed in mode M. 'ss_abs' 18082 ensures that an out-of-bounds result saturates to the maximum 18083 signed value. 18084 18085'(sqrt:M X)' 18086 Represents the square root of X, computed in mode M. Most often M 18087 will be a floating point mode. 18088 18089'(ffs:M X)' 18090 Represents one plus the index of the least significant 1-bit in X, 18091 represented as an integer of mode M. (The value is zero if X is 18092 zero.) The mode of X must be M or 'VOIDmode'. 18093 18094'(clrsb:M X)' 18095 Represents the number of redundant leading sign bits in X, 18096 represented as an integer of mode M, starting at the most 18097 significant bit position. This is one less than the number of 18098 leading sign bits (either 0 or 1), with no special cases. The mode 18099 of X must be M or 'VOIDmode'. 18100 18101'(clz:M X)' 18102 Represents the number of leading 0-bits in X, represented as an 18103 integer of mode M, starting at the most significant bit position. 18104 If X is zero, the value is determined by 18105 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 18106 of the few expressions that is not invariant under widening. The 18107 mode of X must be M or 'VOIDmode'. 18108 18109'(ctz:M X)' 18110 Represents the number of trailing 0-bits in X, represented as an 18111 integer of mode M, starting at the least significant bit position. 18112 If X is zero, the value is determined by 18113 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 18114 'ctz(x)' is equivalent to 'ffs(X) - 1'. The mode of X must be M or 18115 'VOIDmode'. 18116 18117'(popcount:M X)' 18118 Represents the number of 1-bits in X, represented as an integer of 18119 mode M. The mode of X must be M or 'VOIDmode'. 18120 18121'(parity:M X)' 18122 Represents the number of 1-bits modulo 2 in X, represented as an 18123 integer of mode M. The mode of X must be M or 'VOIDmode'. 18124 18125'(bswap:M X)' 18126 Represents the value X with the order of bytes reversed, carried 18127 out in mode M, which must be a fixed-point machine mode. The mode 18128 of X must be M or 'VOIDmode'. 18129 18130 18131File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 18132 1813314.10 Comparison Operations 18134=========================== 18135 18136Comparison operators test a relation on two operands and are considered 18137to represent a machine-dependent nonzero value described by, but not 18138necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation 18139holds, or zero if it does not, for comparison operators whose results 18140have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 18141relation holds, or zero if it does not, for comparison operators that 18142return floating-point values, and a vector of either 18143'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 18144zeros if it does not, for comparison operators that return vector 18145results. The mode of the comparison operation is independent of the 18146mode of the data being compared. If the comparison operation is being 18147tested (e.g., the first operand of an 'if_then_else'), the mode must be 18148'VOIDmode'. 18149 18150 There are two ways that comparison operations may be used. The 18151comparison operators may be used to compare the condition codes '(cc0)' 18152against zero, as in '(eq (cc0) (const_int 0))'. Such a construct 18153actually refers to the result of the preceding instruction in which the 18154condition codes were set. The instruction setting the condition code 18155must be adjacent to the instruction using the condition code; only 18156'note' insns may separate them. 18157 18158 Alternatively, a comparison operation may directly compare two data 18159objects. The mode of the comparison is determined by the operands; they 18160must both be valid for a common machine mode. A comparison with both 18161operands constant would be invalid as the machine mode could not be 18162deduced from it, but such a comparison should never exist in RTL due to 18163constant folding. 18164 18165 In the example above, if '(cc0)' were last set to '(compare X Y)', the 18166comparison operation is identical to '(eq X Y)'. Usually only one style 18167of comparisons is supported on a particular machine, but the combine 18168pass will try to merge the operations to produce the 'eq' shown in case 18169it exists in the context of the particular insn involved. 18170 18171 Inequality comparisons come in two flavors, signed and unsigned. Thus, 18172there are distinct expression codes 'gt' and 'gtu' for signed and 18173unsigned greater-than. These can produce different results for the same 18174pair of integer values: for example, 1 is signed greater-than -1 but not 18175unsigned greater-than, because -1 when regarded as unsigned is actually 18176'0xffffffff' which is greater than 1. 18177 18178 The signed comparisons are also used for floating point values. 18179Floating point comparisons are distinguished by the machine modes of the 18180operands. 18181 18182'(eq:M X Y)' 18183 'STORE_FLAG_VALUE' if the values represented by X and Y are equal, 18184 otherwise 0. 18185 18186'(ne:M X Y)' 18187 'STORE_FLAG_VALUE' if the values represented by X and Y are not 18188 equal, otherwise 0. 18189 18190'(gt:M X Y)' 18191 'STORE_FLAG_VALUE' if the X is greater than Y. If they are 18192 fixed-point, the comparison is done in a signed sense. 18193 18194'(gtu:M X Y)' 18195 Like 'gt' but does unsigned comparison, on fixed-point numbers 18196 only. 18197 18198'(lt:M X Y)' 18199'(ltu:M X Y)' 18200 Like 'gt' and 'gtu' but test for "less than". 18201 18202'(ge:M X Y)' 18203'(geu:M X Y)' 18204 Like 'gt' and 'gtu' but test for "greater than or equal". 18205 18206'(le:M X Y)' 18207'(leu:M X Y)' 18208 Like 'gt' and 'gtu' but test for "less than or equal". 18209 18210'(if_then_else COND THEN ELSE)' 18211 This is not a comparison operation but is listed here because it is 18212 always used in conjunction with a comparison operation. To be 18213 precise, COND is a comparison expression. This expression 18214 represents a choice, according to COND, between the value 18215 represented by THEN and the one represented by ELSE. 18216 18217 On most machines, 'if_then_else' expressions are valid only to 18218 express conditional jumps. 18219 18220'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 18221 Similar to 'if_then_else', but more general. Each of TEST1, TEST2, 18222 ... is performed in turn. The result of this expression is the 18223 VALUE corresponding to the first nonzero test, or DEFAULT if none 18224 of the tests are nonzero expressions. 18225 18226 This is currently not valid for instruction patterns and is 18227 supported only for insn attributes. *Note Insn Attributes::. 18228 18229 18230File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 18231 1823214.11 Bit-Fields 18233================ 18234 18235Special expression codes exist to represent bit-field instructions. 18236 18237'(sign_extract:M LOC SIZE POS)' 18238 This represents a reference to a sign-extended bit-field contained 18239 or starting in LOC (a memory or register reference). The bit-field 18240 is SIZE bits wide and starts at bit POS. The compilation option 18241 'BITS_BIG_ENDIAN' says which end of the memory unit POS counts 18242 from. 18243 18244 If LOC is in memory, its mode must be a single-byte integer mode. 18245 If LOC is in a register, the mode to use is specified by the 18246 operand of the 'insv' or 'extv' pattern (*note Standard Names::) 18247 and is usually a full-word integer mode, which is the default if 18248 none is specified. 18249 18250 The mode of POS is machine-specific and is also specified in the 18251 'insv' or 'extv' pattern. 18252 18253 The mode M is the same as the mode that would be used for LOC if it 18254 were a register. 18255 18256 A 'sign_extract' cannot appear as an lvalue, or part thereof, in 18257 RTL. 18258 18259'(zero_extract:M LOC SIZE POS)' 18260 Like 'sign_extract' but refers to an unsigned or zero-extended 18261 bit-field. The same sequence of bits are extracted, but they are 18262 filled to an entire word with zeros instead of by sign-extension. 18263 18264 Unlike 'sign_extract', this type of expressions can be lvalues in 18265 RTL; they may appear on the left side of an assignment, indicating 18266 insertion of a value into the specified bit-field. 18267 18268 18269File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 18270 1827114.12 Vector Operations 18272======================= 18273 18274All normal RTL expressions can be used with vector modes; they are 18275interpreted as operating on each part of the vector independently. 18276Additionally, there are a few new expressions to describe specific 18277vector operations. 18278 18279'(vec_merge:M VEC1 VEC2 ITEMS)' 18280 This describes a merge operation between two vectors. The result 18281 is a vector of mode M; its elements are selected from either VEC1 18282 or VEC2. Which elements are selected is described by ITEMS, which 18283 is a bit mask represented by a 'const_int'; a zero bit indicates 18284 the corresponding element in the result vector is taken from VEC2 18285 while a set bit indicates it is taken from VEC1. 18286 18287'(vec_select:M VEC1 SELECTION)' 18288 This describes an operation that selects parts of a vector. VEC1 18289 is the source vector, and SELECTION is a 'parallel' that contains a 18290 'const_int' (or another expression, if the selection can be made at 18291 runtime) for each of the subparts of the result vector, giving the 18292 number of the source subpart that should be stored into it. The 18293 result mode M is either the submode for a single element of VEC1 18294 (if only one subpart is selected), or another vector mode with that 18295 element submode (if multiple subparts are selected). 18296 18297'(vec_concat:M X1 X2)' 18298 Describes a vector concat operation. The result is a concatenation 18299 of the vectors or scalars X1 and X2; its length is the sum of the 18300 lengths of the two inputs. 18301 18302'(vec_duplicate:M X)' 18303 This operation converts a scalar into a vector or a small vector 18304 into a larger one by duplicating the input values. The output 18305 vector mode must have the same submodes as the input vector mode or 18306 the scalar modes, and the number of output parts must be an integer 18307 multiple of the number of input parts. 18308 18309'(vec_series:M BASE STEP)' 18310 This operation creates a vector in which element I is equal to 18311 'BASE + I*STEP'. M must be a vector integer mode. 18312 18313 18314File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 18315 1831614.13 Conversions 18317================= 18318 18319All conversions between machine modes must be represented by explicit 18320conversion operations. For example, an expression which is the sum of a 18321byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI 1832280))' because the 'plus' operation requires two operands of the same 18323machine mode. Therefore, the byte-sized operand is enclosed in a 18324conversion operation, as in 18325 18326 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 18327 18328 The conversion operation is not a mere placeholder, because there may 18329be more than one way of converting from a given starting mode to the 18330desired final mode. The conversion operation code says how to do it. 18331 18332 For all conversion operations, X must not be 'VOIDmode' because the 18333mode in which to do the conversion would not be known. The conversion 18334must either be done at compile-time or X must be placed into a register. 18335 18336'(sign_extend:M X)' 18337 Represents the result of sign-extending the value X to machine mode 18338 M. M must be a fixed-point mode and X a fixed-point value of a 18339 mode narrower than M. 18340 18341'(zero_extend:M X)' 18342 Represents the result of zero-extending the value X to machine mode 18343 M. M must be a fixed-point mode and X a fixed-point value of a 18344 mode narrower than M. 18345 18346'(float_extend:M X)' 18347 Represents the result of extending the value X to machine mode M. 18348 M must be a floating point mode and X a floating point value of a 18349 mode narrower than M. 18350 18351'(truncate:M X)' 18352 Represents the result of truncating the value X to machine mode M. 18353 M must be a fixed-point mode and X a fixed-point value of a mode 18354 wider than M. 18355 18356'(ss_truncate:M X)' 18357 Represents the result of truncating the value X to machine mode M, 18358 using signed saturation in the case of overflow. Both M and the 18359 mode of X must be fixed-point modes. 18360 18361'(us_truncate:M X)' 18362 Represents the result of truncating the value X to machine mode M, 18363 using unsigned saturation in the case of overflow. Both M and the 18364 mode of X must be fixed-point modes. 18365 18366'(float_truncate:M X)' 18367 Represents the result of truncating the value X to machine mode M. 18368 M must be a floating point mode and X a floating point value of a 18369 mode wider than M. 18370 18371'(float:M X)' 18372 Represents the result of converting fixed point value X, regarded 18373 as signed, to floating point mode M. 18374 18375'(unsigned_float:M X)' 18376 Represents the result of converting fixed point value X, regarded 18377 as unsigned, to floating point mode M. 18378 18379'(fix:M X)' 18380 When M is a floating-point mode, represents the result of 18381 converting floating point value X (valid for mode M) to an integer, 18382 still represented in floating point mode M, by rounding towards 18383 zero. 18384 18385 When M is a fixed-point mode, represents the result of converting 18386 floating point value X to mode M, regarded as signed. How rounding 18387 is done is not specified, so this operation may be used validly in 18388 compiling C code only for integer-valued operands. 18389 18390'(unsigned_fix:M X)' 18391 Represents the result of converting floating point value X to fixed 18392 point mode M, regarded as unsigned. How rounding is done is not 18393 specified. 18394 18395'(fract_convert:M X)' 18396 Represents the result of converting fixed-point value X to 18397 fixed-point mode M, signed integer value X to fixed-point mode M, 18398 floating-point value X to fixed-point mode M, fixed-point value X 18399 to integer mode M regarded as signed, or fixed-point value X to 18400 floating-point mode M. When overflows or underflows happen, the 18401 results are undefined. 18402 18403'(sat_fract:M X)' 18404 Represents the result of converting fixed-point value X to 18405 fixed-point mode M, signed integer value X to fixed-point mode M, 18406 or floating-point value X to fixed-point mode M. When overflows or 18407 underflows happen, the results are saturated to the maximum or the 18408 minimum. 18409 18410'(unsigned_fract_convert:M X)' 18411 Represents the result of converting fixed-point value X to integer 18412 mode M regarded as unsigned, or unsigned integer value X to 18413 fixed-point mode M. When overflows or underflows happen, the 18414 results are undefined. 18415 18416'(unsigned_sat_fract:M X)' 18417 Represents the result of converting unsigned integer value X to 18418 fixed-point mode M. When overflows or underflows happen, the 18419 results are saturated to the maximum or the minimum. 18420 18421 18422File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 18423 1842414.14 Declarations 18425================== 18426 18427Declaration expression codes do not represent arithmetic operations but 18428rather state assertions about their operands. 18429 18430'(strict_low_part (subreg:M (reg:N R) 0))' 18431 This expression code is used in only one context: as the 18432 destination operand of a 'set' expression. In addition, the 18433 operand of this expression must be a non-paradoxical 'subreg' 18434 expression. 18435 18436 The presence of 'strict_low_part' says that the part of the 18437 register which is meaningful in mode N, but is not part of mode M, 18438 is not to be altered. Normally, an assignment to such a subreg is 18439 allowed to have undefined effects on the rest of the register when 18440 M is smaller than 'REGMODE_NATURAL_SIZE (N)'. 18441 18442 18443File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 18444 1844514.15 Side Effect Expressions 18446============================= 18447 18448The expression codes described so far represent values, not actions. 18449But machine instructions never produce values; they are meaningful only 18450for their side effects on the state of the machine. Special expression 18451codes are used to represent side effects. 18452 18453 The body of an instruction is always one of these side effect codes; 18454the codes described above, which represent values, appear only as the 18455operands of these. 18456 18457'(set LVAL X)' 18458 Represents the action of storing the value of X into the place 18459 represented by LVAL. LVAL must be an expression representing a 18460 place that can be stored in: 'reg' (or 'subreg', 'strict_low_part' 18461 or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'. 18462 18463 If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then 18464 X must be valid for that mode. 18465 18466 If LVAL is a 'reg' whose machine mode is less than the full width 18467 of the register, then it means that the part of the register 18468 specified by the machine mode is given the specified value and the 18469 rest of the register receives an undefined value. Likewise, if 18470 LVAL is a 'subreg' whose machine mode is narrower than the mode of 18471 the register, the rest of the register can be changed in an 18472 undefined way. 18473 18474 If LVAL is a 'strict_low_part' of a subreg, then the part of the 18475 register specified by the machine mode of the 'subreg' is given the 18476 value X and the rest of the register is not changed. 18477 18478 If LVAL is a 'zero_extract', then the referenced part of the 18479 bit-field (a memory or register reference) specified by the 18480 'zero_extract' is given the value X and the rest of the bit-field 18481 is not changed. Note that 'sign_extract' cannot appear in LVAL. 18482 18483 If LVAL is '(cc0)', it has no machine mode, and X may be either a 18484 'compare' expression or a value that may have any mode. The latter 18485 case represents a "test" instruction. The expression '(set (cc0) 18486 (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N) 18487 (const_int 0)))'. Use the former expression to save space during 18488 the compilation. 18489 18490 If LVAL is a 'parallel', it is used to represent the case of a 18491 function returning a structure in multiple registers. Each element 18492 of the 'parallel' is an 'expr_list' whose first operand is a 'reg' 18493 and whose second operand is a 'const_int' representing the offset 18494 (in bytes) into the structure at which the data in that register 18495 corresponds. The first element may be null to indicate that the 18496 structure is also passed partly in memory. 18497 18498 If LVAL is '(pc)', we have a jump instruction, and the 18499 possibilities for X are very limited. It may be a 'label_ref' 18500 expression (unconditional jump). It may be an 'if_then_else' 18501 (conditional jump), in which case either the second or the third 18502 operand must be '(pc)' (for the case which does not jump) and the 18503 other of the two must be a 'label_ref' (for the case which does 18504 jump). X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be 18505 a 'reg' or a 'mem'; these unusual patterns are used to represent 18506 jumps through branch tables. 18507 18508 If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be 18509 'VOIDmode' and the mode of X must be valid for the mode of LVAL. 18510 18511 LVAL is customarily accessed with the 'SET_DEST' macro and X with 18512 the 'SET_SRC' macro. 18513 18514'(return)' 18515 As the sole expression in a pattern, represents a return from the 18516 current function, on machines where this can be done with one 18517 instruction, such as VAXen. On machines where a multi-instruction 18518 "epilogue" must be executed in order to return from the function, 18519 returning is done by jumping to a label which precedes the 18520 epilogue, and the 'return' expression code is never used. 18521 18522 Inside an 'if_then_else' expression, represents the value to be 18523 placed in 'pc' to return to the caller. 18524 18525 Note that an insn pattern of '(return)' is logically equivalent to 18526 '(set (pc) (return))', but the latter form is never used. 18527 18528'(simple_return)' 18529 Like '(return)', but truly represents only a function return, while 18530 '(return)' may represent an insn that also performs other functions 18531 of the function epilogue. Like '(return)', this may also occur in 18532 conditional jumps. 18533 18534'(call FUNCTION NARGS)' 18535 Represents a function call. FUNCTION is a 'mem' expression whose 18536 address is the address of the function to be called. NARGS is an 18537 expression which can be used for two purposes: on some machines it 18538 represents the number of bytes of stack argument; on others, it 18539 represents the number of argument registers. 18540 18541 Each machine has a standard machine mode which FUNCTION must have. 18542 The machine description defines macro 'FUNCTION_MODE' to expand 18543 into the requisite mode name. The purpose of this mode is to 18544 specify what kind of addressing is allowed, on machines where the 18545 allowed kinds of addressing depend on the machine mode being 18546 addressed. 18547 18548'(clobber X)' 18549 Represents the storing or possible storing of an unpredictable, 18550 undescribed value into X, which must be a 'reg', 'scratch', 18551 'parallel' or 'mem' expression. 18552 18553 One place this is used is in string instructions that store 18554 standard values into particular hard registers. It may not be 18555 worth the trouble to describe the values that are stored, but it is 18556 essential to inform the compiler that the registers will be 18557 altered, lest it attempt to keep data in them across the string 18558 instruction. 18559 18560 If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it 18561 means that all memory locations must be presumed clobbered. If X 18562 is a 'parallel', it has the same meaning as a 'parallel' in a 'set' 18563 expression. 18564 18565 Note that the machine description classifies certain hard registers 18566 as "call-clobbered". All function call instructions are assumed by 18567 default to clobber these registers, so there is no need to use 18568 'clobber' expressions to indicate this fact. Also, each function 18569 call is assumed to have the potential to alter any memory location, 18570 unless the function is declared 'const'. 18571 18572 If the last group of expressions in a 'parallel' are each a 18573 'clobber' expression whose arguments are 'reg' or 'match_scratch' 18574 (*note RTL Template::) expressions, the combiner phase can add the 18575 appropriate 'clobber' expressions to an insn it has constructed 18576 when doing so will cause a pattern to be matched. 18577 18578 This feature can be used, for example, on a machine that whose 18579 multiply and add instructions don't use an MQ register but which 18580 has an add-accumulate instruction that does clobber the MQ 18581 register. Similarly, a combined instruction might require a 18582 temporary register while the constituent instructions might not. 18583 18584 When a 'clobber' expression for a register appears inside a 18585 'parallel' with other side effects, the register allocator 18586 guarantees that the register is unoccupied both before and after 18587 that insn if it is a hard register clobber. For pseudo-register 18588 clobber, the register allocator and the reload pass do not assign 18589 the same hard register to the clobber and the input operands if 18590 there is an insn alternative containing the '&' constraint (*note 18591 Modifiers::) for the clobber and the hard register is in register 18592 classes of the clobber in the alternative. You can clobber either 18593 a specific hard register, a pseudo register, or a 'scratch' 18594 expression; in the latter two cases, GCC will allocate a hard 18595 register that is available there for use as a temporary. 18596 18597 For instructions that require a temporary register, you should use 18598 'scratch' instead of a pseudo-register because this will allow the 18599 combiner phase to add the 'clobber' when required. You do this by 18600 coding ('clobber' ('match_scratch' ...)). If you do clobber a 18601 pseudo register, use one which appears nowhere else--generate a new 18602 one each time. Otherwise, you may confuse CSE. 18603 18604 There is one other known use for clobbering a pseudo register in a 18605 'parallel': when one of the input operands of the insn is also 18606 clobbered by the insn. In this case, using the same pseudo 18607 register in the clobber and elsewhere in the insn produces the 18608 expected results. 18609 18610'(use X)' 18611 Represents the use of the value of X. It indicates that the value 18612 in X at this point in the program is needed, even though it may not 18613 be apparent why this is so. Therefore, the compiler will not 18614 attempt to delete previous instructions whose only effect is to 18615 store a value in X. X must be a 'reg' expression. 18616 18617 In some situations, it may be tempting to add a 'use' of a register 18618 in a 'parallel' to describe a situation where the value of a 18619 special register will modify the behavior of the instruction. A 18620 hypothetical example might be a pattern for an addition that can 18621 either wrap around or use saturating addition depending on the 18622 value of a special control register: 18623 18624 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 18625 (reg:SI 4)] 0)) 18626 (use (reg:SI 1))]) 18627 18628 This will not work, several of the optimizers only look at 18629 expressions locally; it is very likely that if you have multiple 18630 insns with identical inputs to the 'unspec', they will be optimized 18631 away even if register 1 changes in between. 18632 18633 This means that 'use' can _only_ be used to describe that the 18634 register is live. You should think twice before adding 'use' 18635 statements, more often you will want to use 'unspec' instead. The 18636 'use' RTX is most commonly useful to describe that a fixed register 18637 is implicitly used in an insn. It is also safe to use in patterns 18638 where the compiler knows for other reasons that the result of the 18639 whole pattern is variable, such as 'cpymemM' or 'call' patterns. 18640 18641 During the reload phase, an insn that has a 'use' as pattern can 18642 carry a reg_equal note. These 'use' insns will be deleted before 18643 the reload phase exits. 18644 18645 During the delayed branch scheduling phase, X may be an insn. This 18646 indicates that X previously was located at this place in the code 18647 and its data dependencies need to be taken into account. These 18648 'use' insns will be deleted before the delayed branch scheduling 18649 phase exits. 18650 18651'(parallel [X0 X1 ...])' 18652 Represents several side effects performed in parallel. The square 18653 brackets stand for a vector; the operand of 'parallel' is a vector 18654 of expressions. X0, X1 and so on are individual side effect 18655 expressions--expressions of code 'set', 'call', 'return', 18656 'simple_return', 'clobber' or 'use'. 18657 18658 "In parallel" means that first all the values used in the 18659 individual side-effects are computed, and second all the actual 18660 side-effects are performed. For example, 18661 18662 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 18663 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 18664 18665 says unambiguously that the values of hard register 1 and the 18666 memory location addressed by it are interchanged. In both places 18667 where '(reg:SI 1)' appears as a memory address it refers to the 18668 value in register 1 _before_ the execution of the insn. 18669 18670 It follows that it is _incorrect_ to use 'parallel' and expect the 18671 result of one 'set' to be available for the next one. For example, 18672 people sometimes attempt to represent a jump-if-zero instruction 18673 this way: 18674 18675 (parallel [(set (cc0) (reg:SI 34)) 18676 (set (pc) (if_then_else 18677 (eq (cc0) (const_int 0)) 18678 (label_ref ...) 18679 (pc)))]) 18680 18681 But this is incorrect, because it says that the jump condition 18682 depends on the condition code value _before_ this instruction, not 18683 on the new value that is set by this instruction. 18684 18685 Peephole optimization, which takes place together with final 18686 assembly code output, can produce insns whose patterns consist of a 18687 'parallel' whose elements are the operands needed to output the 18688 resulting assembler code--often 'reg', 'mem' or constant 18689 expressions. This would not be well-formed RTL at any other stage 18690 in compilation, but it is OK then because no further optimization 18691 remains to be done. However, the definition of the macro 18692 'NOTICE_UPDATE_CC', if any, must deal with such insns if you define 18693 any peephole optimizations. 18694 18695'(cond_exec [COND EXPR])' 18696 Represents a conditionally executed expression. The EXPR is 18697 executed only if the COND is nonzero. The COND expression must not 18698 have side-effects, but the EXPR may very well have side-effects. 18699 18700'(sequence [INSNS ...])' 18701 Represents a sequence of insns. If a 'sequence' appears in the 18702 chain of insns, then each of the INSNS that appears in the sequence 18703 must be suitable for appearing in the chain of insns, i.e. must 18704 satisfy the 'INSN_P' predicate. 18705 18706 After delay-slot scheduling is completed, an insn and all the insns 18707 that reside in its delay slots are grouped together into a 18708 'sequence'. The insn requiring the delay slot is the first insn in 18709 the vector; subsequent insns are to be placed in the delay slot. 18710 18711 'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 18712 indicate that a branch insn should be used that will conditionally 18713 annul the effect of the insns in the delay slots. In such a case, 18714 'INSN_FROM_TARGET_P' indicates that the insn is from the target of 18715 the branch and should be executed only if the branch is taken; 18716 otherwise the insn should be executed only if the branch is not 18717 taken. *Note Delay Slots::. 18718 18719 Some back ends also use 'sequence' objects for purposes other than 18720 delay-slot groups. This is not supported in the common parts of 18721 the compiler, which treat such sequences as delay-slot groups. 18722 18723 DWARF2 Call Frame Address (CFA) adjustments are sometimes also 18724 expressed using 'sequence' objects as the value of a 18725 'RTX_FRAME_RELATED_P' note. This only happens if the CFA 18726 adjustments cannot be easily derived from the pattern of the 18727 instruction to which the note is attached. In such cases, the 18728 value of the note is used instead of best-guesing the semantics of 18729 the instruction. The back end can attach notes containing a 18730 'sequence' of 'set' patterns that express the effect of the parent 18731 instruction. 18732 18733 These expression codes appear in place of a side effect, as the body of 18734an insn, though strictly speaking they do not always describe side 18735effects as such: 18736 18737'(asm_input S)' 18738 Represents literal assembler code as described by the string S. 18739 18740'(unspec [OPERANDS ...] INDEX)' 18741'(unspec_volatile [OPERANDS ...] INDEX)' 18742 Represents a machine-specific operation on OPERANDS. INDEX selects 18743 between multiple machine-specific operations. 'unspec_volatile' is 18744 used for volatile operations and operations that may trap; 'unspec' 18745 is used for other operations. 18746 18747 These codes may appear inside a 'pattern' of an insn, inside a 18748 'parallel', or inside an expression. 18749 18750'(addr_vec:M [LR0 LR1 ...])' 18751 Represents a table of jump addresses. The vector elements LR0, 18752 etc., are 'label_ref' expressions. The mode M specifies how much 18753 space is given to each address; normally M would be 'Pmode'. 18754 18755'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 18756 Represents a table of jump addresses expressed as offsets from 18757 BASE. The vector elements LR0, etc., are 'label_ref' expressions 18758 and so is BASE. The mode M specifies how much space is given to 18759 each address-difference. MIN and MAX are set up by branch 18760 shortening and hold a label with a minimum and a maximum address, 18761 respectively. FLAGS indicates the relative position of BASE, MIN 18762 and MAX to the containing insn and of MIN and MAX to BASE. See 18763 rtl.def for details. 18764 18765'(prefetch:M ADDR RW LOCALITY)' 18766 Represents prefetch of memory at address ADDR. Operand RW is 1 if 18767 the prefetch is for data to be written, 0 otherwise; targets that 18768 do not support write prefetches should treat this as a normal 18769 prefetch. Operand LOCALITY specifies the amount of temporal 18770 locality; 0 if there is none or 1, 2, or 3 for increasing levels of 18771 temporal locality; targets that do not support locality hints 18772 should ignore this. 18773 18774 This insn is used to minimize cache-miss latency by moving data 18775 into a cache before it is accessed. It should use only 18776 non-faulting data prefetch instructions. 18777 18778 18779File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 18780 1878114.16 Embedded Side-Effects on Addresses 18782======================================== 18783 18784Six special side-effect expression codes appear as memory addresses. 18785 18786'(pre_dec:M X)' 18787 Represents the side effect of decrementing X by a standard amount 18788 and represents also the value that X has after being decremented. 18789 X must be a 'reg' or 'mem', but most machines allow only a 'reg'. 18790 M must be the machine mode for pointers on the machine in use. The 18791 amount X is decremented by is the length in bytes of the machine 18792 mode of the containing memory reference of which this expression 18793 serves as the address. Here is an example of its use: 18794 18795 (mem:DF (pre_dec:SI (reg:SI 39))) 18796 18797 This says to decrement pseudo register 39 by the length of a 18798 'DFmode' value and use the result to address a 'DFmode' value. 18799 18800'(pre_inc:M X)' 18801 Similar, but specifies incrementing X instead of decrementing it. 18802 18803'(post_dec:M X)' 18804 Represents the same side effect as 'pre_dec' but a different value. 18805 The value represented here is the value X has before being 18806 decremented. 18807 18808'(post_inc:M X)' 18809 Similar, but specifies incrementing X instead of decrementing it. 18810 18811'(post_modify:M X Y)' 18812 18813 Represents the side effect of setting X to Y and represents X 18814 before X is modified. X must be a 'reg' or 'mem', but most 18815 machines allow only a 'reg'. M must be the machine mode for 18816 pointers on the machine in use. 18817 18818 The expression Y must be one of three forms: '(plus:M X Z)', 18819 '(minus:M X Z)', or '(plus:M X I)', where Z is an index register 18820 and I is a constant. 18821 18822 Here is an example of its use: 18823 18824 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 18825 (reg:SI 48)))) 18826 18827 This says to modify pseudo register 42 by adding the contents of 18828 pseudo register 48 to it, after the use of what ever 42 points to. 18829 18830'(pre_modify:M X EXPR)' 18831 Similar except side effects happen before the use. 18832 18833 These embedded side effect expressions must be used with care. 18834Instruction patterns may not use them. Until the 'flow' pass of the 18835compiler, they may occur only to represent pushes onto the stack. The 18836'flow' pass finds cases where registers are incremented or decremented 18837in one instruction and used as an address shortly before or after; these 18838cases are then transformed to use pre- or post-increment or -decrement. 18839 18840 If a register used as the operand of these expressions is used in 18841another address in an insn, the original value of the register is used. 18842Uses of the register outside of an address are not permitted within the 18843same insn as a use in an embedded side effect expression because such 18844insns behave differently on different machines and hence must be treated 18845as ambiguous and disallowed. 18846 18847 An instruction that can be represented with an embedded side effect 18848could also be represented using 'parallel' containing an additional 18849'set' to describe how the address register is altered. This is not done 18850because machines that allow these operations at all typically allow them 18851wherever a memory address is called for. Describing them as additional 18852parallel stores would require doubling the number of entries in the 18853machine description. 18854 18855 18856File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 18857 1885814.17 Assembler Instructions as Expressions 18859=========================================== 18860 18861The RTX code 'asm_operands' represents a value produced by a 18862user-specified assembler instruction. It is used to represent an 'asm' 18863statement with arguments. An 'asm' statement with a single output 18864operand, like this: 18865 18866 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 18867 18868is represented using a single 'asm_operands' RTX which represents the 18869value that is stored in 'outputvar': 18870 18871 (set RTX-FOR-OUTPUTVAR 18872 (asm_operands "foo %1,%2,%0" "a" 0 18873 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 18874 [(asm_input:M1 "g") 18875 (asm_input:M2 "di")])) 18876 18877Here the operands of the 'asm_operands' RTX are the assembler template 18878string, the output-operand's constraint, the index-number of the output 18879operand among the output operands specified, a vector of input operand 18880RTX's, and a vector of input-operand modes and constraints. The mode M1 18881is the mode of the sum 'x+y'; M2 is that of '*z'. 18882 18883 When an 'asm' statement has multiple output values, its insn has 18884several such 'set' RTX's inside of a 'parallel'. Each 'set' contains an 18885'asm_operands'; all of these share the same assembler template and 18886vectors, but each contains the constraint for the respective output 18887operand. They are also distinguished by the output-operand index 18888number, which is 0, 1, ... for successive output operands. 18889 18890 18891File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 18892 1889314.18 Variable Location Debug Information in RTL 18894================================================ 18895 18896Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to 18897determine what user variables memory and register references refer to. 18898 18899 Variable tracking at assignments uses these notes only when they refer 18900to variables that live at fixed locations (e.g., addressable variables, 18901global non-automatic variables). For variables whose location may vary, 18902it relies on the following types of notes. 18903 18904'(var_location:MODE VAR EXP STAT)' 18905 Binds variable 'var', a tree, to value EXP, an RTL expression. It 18906 appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with 18907 slightly different meanings. MODE, if present, represents the mode 18908 of EXP, which is useful if it is a modeless expression. STAT is 18909 only meaningful in notes, indicating whether the variable is known 18910 to be initialized or uninitialized. 18911 18912'(debug_expr:MODE DECL)' 18913 Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that 18914 points back to it, within value expressions in 'VAR_LOCATION' 18915 nodes. 18916 18917'(debug_implicit_ptr:MODE DECL)' 18918 Stands for the location of a DECL that is no longer addressable. 18919 18920'(entry_value:MODE DECL)' 18921 Stands for the value a DECL had at the entry point of the 18922 containing function. 18923 18924'(debug_parameter_ref:MODE DECL)' 18925 Refers to a parameter that was completely optimized out. 18926 18927'(debug_marker:MODE)' 18928 Marks a program location. With 'VOIDmode', it stands for the 18929 beginning of a statement, a recommended inspection point logically 18930 after all prior side effects, and before any subsequent side 18931 effects. With 'BLKmode', it indicates an inline entry point: the 18932 lexical block encoded in the 'INSN_LOCATION' is the enclosing block 18933 that encloses the inlined function. 18934 18935 18936File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 18937 1893814.19 Insns 18939=========== 18940 18941The RTL representation of the code for a function is a doubly-linked 18942chain of objects called "insns". Insns are expressions with special 18943codes that are used for no other purpose. Some insns are actual 18944instructions; others represent dispatch tables for 'switch' statements; 18945others represent labels to jump to or various sorts of declarative 18946information. 18947 18948 In addition to its own specific data, each insn must have a unique 18949id-number that distinguishes it from all other insns in the current 18950function (after delayed branch scheduling, copies of an insn with the 18951same id-number may be present in multiple places in a function, but 18952these copies will always be identical and will only appear inside a 18953'sequence'), and chain pointers to the preceding and following insns. 18954These three fields occupy the same position in every insn, independent 18955of the expression code of the insn. They could be accessed with 'XEXP' 18956and 'XINT', but instead three special macros are always used: 18957 18958'INSN_UID (I)' 18959 Accesses the unique id of insn I. 18960 18961'PREV_INSN (I)' 18962 Accesses the chain pointer to the insn preceding I. If I is the 18963 first insn, this is a null pointer. 18964 18965'NEXT_INSN (I)' 18966 Accesses the chain pointer to the insn following I. If I is the 18967 last insn, this is a null pointer. 18968 18969 The first insn in the chain is obtained by calling 'get_insns'; the 18970last insn is the result of calling 'get_last_insn'. Within the chain 18971delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must 18972always correspond: if INSN is not the first insn, 18973 18974 NEXT_INSN (PREV_INSN (INSN)) == INSN 18975 18976is always true and if INSN is not the last insn, 18977 18978 PREV_INSN (NEXT_INSN (INSN)) == INSN 18979 18980is always true. 18981 18982 After delay slot scheduling, some of the insns in the chain might be 18983'sequence' expressions, which contain a vector of insns. The value of 18984'NEXT_INSN' in all but the last of these insns is the next insn in the 18985vector; the value of 'NEXT_INSN' of the last insn in the vector is the 18986same as the value of 'NEXT_INSN' for the 'sequence' in which it is 18987contained. Similar rules apply for 'PREV_INSN'. 18988 18989 This means that the above invariants are not necessarily true for insns 18990inside 'sequence' expressions. Specifically, if INSN is the first insn 18991in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing 18992the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN 18993(INSN))' if INSN is the last insn in the 'sequence' expression. You can 18994use these expressions to find the containing 'sequence' expression. 18995 18996 Every insn has one of the following expression codes: 18997 18998'insn' 18999 The expression code 'insn' is used for instructions that do not 19000 jump and do not do function calls. 'sequence' expressions are 19001 always contained in insns with code 'insn' even if one of those 19002 insns should jump or do function calls. 19003 19004 Insns with code 'insn' have four additional fields beyond the three 19005 mandatory ones listed above. These four are described in a table 19006 below. 19007 19008'jump_insn' 19009 The expression code 'jump_insn' is used for instructions that may 19010 jump (or, more generally, may contain 'label_ref' expressions to 19011 which 'pc' can be set in that instruction). If there is an 19012 instruction to return from the current function, it is recorded as 19013 a 'jump_insn'. 19014 19015 'jump_insn' insns have the same extra fields as 'insn' insns, 19016 accessed in the same way and in addition contain a field 19017 'JUMP_LABEL' which is defined once jump optimization has completed. 19018 19019 For simple conditional and unconditional jumps, this field contains 19020 the 'code_label' to which this insn will (possibly conditionally) 19021 branch. In a more complex jump, 'JUMP_LABEL' records one of the 19022 labels that the insn refers to; other jump target labels are 19023 recorded as 'REG_LABEL_TARGET' notes. The exception is 'addr_vec' 19024 and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only 19025 way to find the labels is to scan the entire body of the insn. 19026 19027 Return insns count as jumps, but their 'JUMP_LABEL' is 'RETURN' or 19028 'SIMPLE_RETURN'. 19029 19030'call_insn' 19031 The expression code 'call_insn' is used for instructions that may 19032 do function calls. It is important to distinguish these 19033 instructions because they imply that certain registers and memory 19034 locations may be altered unpredictably. 19035 19036 'call_insn' insns have the same extra fields as 'insn' insns, 19037 accessed in the same way and in addition contain a field 19038 'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 19039 'expr_list' expressions) containing 'use', 'clobber' and sometimes 19040 'set' expressions that denote hard registers and 'mem's used or 19041 clobbered by the called function. 19042 19043 A 'mem' generally points to a stack slot in which arguments passed 19044 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 19045 Register Arguments.) are stored. If the argument is caller-copied 19046 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 19047 will be mentioned in 'clobber' and 'use' entries; if it's 19048 callee-copied, only a 'use' will appear, and the 'mem' may point to 19049 addresses that are not stack slots. 19050 19051 Registers occurring inside a 'clobber' in this list augment 19052 registers specified in 'CALL_USED_REGISTERS' (*note Register 19053 Basics::). 19054 19055 If the list contains a 'set' involving two registers, it indicates 19056 that the function returns one of its arguments. Such a 'set' may 19057 look like a no-op if the same register holds the argument and the 19058 return value. 19059 19060'code_label' 19061 A 'code_label' insn represents a label that a jump insn can jump 19062 to. It contains two special fields of data in addition to the 19063 three standard ones. 'CODE_LABEL_NUMBER' is used to hold the 19064 "label number", a number that identifies this label uniquely among 19065 all the labels in the compilation (not just in the current 19066 function). Ultimately, the label is represented in the assembler 19067 output as an assembler label, usually of the form 'LN' where N is 19068 the label number. 19069 19070 When a 'code_label' appears in an RTL expression, it normally 19071 appears within a 'label_ref' which represents the address of the 19072 label, as a number. 19073 19074 Besides as a 'code_label', a label can also be represented as a 19075 'note' of type 'NOTE_INSN_DELETED_LABEL'. 19076 19077 The field 'LABEL_NUSES' is only defined once the jump optimization 19078 phase is completed. It contains the number of times this label is 19079 referenced in the current function. 19080 19081 The field 'LABEL_KIND' differentiates four different types of 19082 labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY', 19083 and 'LABEL_WEAK_ENTRY'. The only labels that do not have type 19084 'LABEL_NORMAL' are "alternate entry points" to the current 19085 function. These may be static (visible only in the containing 19086 translation unit), global (exposed to all translation units), or 19087 weak (global, but can be overridden by another symbol with the same 19088 name). 19089 19090 Much of the compiler treats all four kinds of label identically. 19091 Some of it needs to know whether or not a label is an alternate 19092 entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is 19093 provided. It is equivalent to testing whether 'LABEL_KIND (label) 19094 == LABEL_NORMAL'. The only place that cares about the distinction 19095 between static, global, and weak alternate entry points, besides 19096 the front-end code that creates them, is the function 19097 'output_alternate_entry_point', in 'final.c'. 19098 19099 To set the kind of a label, use the 'SET_LABEL_KIND' macro. 19100 19101'jump_table_data' 19102 A 'jump_table_data' insn is a placeholder for the jump-table data 19103 of a 'casesi' or 'tablejump' insn. They are placed after a 19104 'tablejump_p' insn. A 'jump_table_data' insn is not part o a basic 19105 blockm but it is associated with the basic block that ends with the 19106 'tablejump_p' insn. The 'PATTERN' of a 'jump_table_data' is always 19107 either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data' 19108 insn is always preceded by a 'code_label'. The 'tablejump_p' insn 19109 refers to that 'code_label' via its 'JUMP_LABEL'. 19110 19111'barrier' 19112 Barriers are placed in the instruction stream when control cannot 19113 flow past them. They are placed after unconditional jump 19114 instructions to indicate that the jumps are unconditional and after 19115 calls to 'volatile' functions, which do not return (e.g., 'exit'). 19116 They contain no information beyond the three standard fields. 19117 19118'note' 19119 'note' insns are used to represent additional debugging and 19120 declarative information. They contain two nonstandard fields, an 19121 integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a 19122 string accessed with 'NOTE_SOURCE_FILE'. 19123 19124 If 'NOTE_LINE_NUMBER' is positive, the note represents the position 19125 of a source line and 'NOTE_SOURCE_FILE' is the source file name 19126 that the line came from. These notes control generation of line 19127 number data in the assembler output. 19128 19129 Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a 19130 code with one of the following values (and 'NOTE_SOURCE_FILE' must 19131 contain a null pointer): 19132 19133 'NOTE_INSN_DELETED' 19134 Such a note is completely ignorable. Some passes of the 19135 compiler delete insns by altering them into notes of this 19136 kind. 19137 19138 'NOTE_INSN_DELETED_LABEL' 19139 This marks what used to be a 'code_label', but was not used 19140 for other purposes than taking its address and was transformed 19141 to mark that no code jumps to it. 19142 19143 'NOTE_INSN_BLOCK_BEG' 19144 'NOTE_INSN_BLOCK_END' 19145 These types of notes indicate the position of the beginning 19146 and end of a level of scoping of variable names. They control 19147 the output of debugging information. 19148 19149 'NOTE_INSN_EH_REGION_BEG' 19150 'NOTE_INSN_EH_REGION_END' 19151 These types of notes indicate the position of the beginning 19152 and end of a level of scoping for exception handling. 19153 'NOTE_EH_HANDLER' identifies which region is associated with 19154 these notes. 19155 19156 'NOTE_INSN_FUNCTION_BEG' 19157 Appears at the start of the function body, after the function 19158 prologue. 19159 19160 'NOTE_INSN_VAR_LOCATION' 19161 This note is used to generate variable location debugging 19162 information. It indicates that the user variable in its 19163 'VAR_LOCATION' operand is at the location given in the RTL 19164 expression, or holds a value that can be computed by 19165 evaluating the RTL expression from that static point in the 19166 program up to the next such note for the same user variable. 19167 19168 'NOTE_INSN_BEGIN_STMT' 19169 This note is used to generate 'is_stmt' markers in line number 19170 debuggign information. It indicates the beginning of a user 19171 statement. 19172 19173 'NOTE_INSN_INLINE_ENTRY' 19174 This note is used to generate 'entry_pc' for inlined 19175 subroutines in debugging information. It indicates an 19176 inspection point at which all arguments for the inlined 19177 function have been bound, and before its first statement. 19178 19179 These codes are printed symbolically when they appear in debugging 19180 dumps. 19181 19182'debug_insn' 19183 The expression code 'debug_insn' is used for pseudo-instructions 19184 that hold debugging information for variable tracking at 19185 assignments (see '-fvar-tracking-assignments' option). They are 19186 the RTL representation of 'GIMPLE_DEBUG' statements (*note 19187 'GIMPLE_DEBUG'::), with a 'VAR_LOCATION' operand that binds a user 19188 variable tree to an RTL representation of the 'value' in the 19189 corresponding statement. A 'DEBUG_EXPR' in it stands for the value 19190 bound to the corresponding 'DEBUG_EXPR_DECL'. 19191 19192 'GIMPLE_DEBUG_BEGIN_STMT' and 'GIMPLE_DEBUG_INLINE_ENTRY' are 19193 expanded to RTL as a 'DEBUG_INSN' with a 'DEBUG_MARKER' 'PATTERN'; 19194 the difference is the RTL mode: the former's 'DEBUG_MARKER' is 19195 'VOIDmode', whereas the latter is 'BLKmode'; information about the 19196 inlined function can be taken from the lexical block encoded in the 19197 'INSN_LOCATION'. These 'DEBUG_INSN's, that do not carry 19198 'VAR_LOCATION' information, just 'DEBUG_MARKER's, can be detected 19199 by testing 'DEBUG_MARKER_INSN_P', whereas those that do can be 19200 recognized as 'DEBUG_BIND_INSN_P'. 19201 19202 Throughout optimization passes, 'DEBUG_INSN's are not reordered 19203 with respect to each other, particularly during scheduling. 19204 Binding information is kept in pseudo-instruction form, so that, 19205 unlike notes, it gets the same treatment and adjustments that 19206 regular instructions would. It is the variable tracking pass that 19207 turns these pseudo-instructions into 'NOTE_INSN_VAR_LOCATION', 19208 'NOTE_INSN_BEGIN_STMT' and 'NOTE_INSN_INLINE_ENTRY' notes, 19209 analyzing control flow, value equivalences and changes to registers 19210 and memory referenced in value expressions, propagating the values 19211 of debug temporaries and determining expressions that can be used 19212 to compute the value of each user variable at as many points 19213 (ranges, actually) in the program as possible. 19214 19215 Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an 19216 'INSN_VAR_LOCATION' denotes a value at that specific point in the 19217 program, rather than an expression that can be evaluated at any 19218 later point before an overriding 'VAR_LOCATION' is encountered. 19219 E.g., if a user variable is bound to a 'REG' and then a subsequent 19220 insn modifies the 'REG', the note location would keep mapping the 19221 user variable to the register across the insn, whereas the insn 19222 location would keep the variable bound to the value, so that the 19223 variable tracking pass would emit another location note for the 19224 variable at the point in which the register is modified. 19225 19226 The machine mode of an insn is normally 'VOIDmode', but some phases use 19227the mode for various purposes. 19228 19229 The common subexpression elimination pass sets the mode of an insn to 19230'QImode' when it is the first insn in a block that has already been 19231processed. 19232 19233 The second Haifa scheduling pass, for targets that can multiple issue, 19234sets the mode of an insn to 'TImode' when it is believed that the 19235instruction begins an issue group. That is, when the instruction cannot 19236issue simultaneously with the previous. This may be relied on by later 19237passes, in particular machine-dependent reorg. 19238 19239 Here is a table of the extra fields of 'insn', 'jump_insn' and 19240'call_insn' insns: 19241 19242'PATTERN (I)' 19243 An expression for the side effect performed by this insn. This 19244 must be one of the following codes: 'set', 'call', 'use', 19245 'clobber', 'return', 'simple_return', 'asm_input', 'asm_output', 19246 'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec', 19247 'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'. If it 19248 is a 'parallel', each element of the 'parallel' must be one these 19249 codes, except that 'parallel' expressions cannot be nested and 19250 'addr_vec' and 'addr_diff_vec' are not permitted inside a 19251 'parallel' expression. 19252 19253'INSN_CODE (I)' 19254 An integer that says which pattern in the machine description 19255 matches this insn, or -1 if the matching has not yet been 19256 attempted. 19257 19258 Such matching is never attempted and this field remains -1 on an 19259 insn whose pattern consists of a single 'use', 'clobber', 19260 'asm_input', 'addr_vec' or 'addr_diff_vec' expression. 19261 19262 Matching is also never attempted on insns that result from an 'asm' 19263 statement. These contain at least one 'asm_operands' expression. 19264 The function 'asm_noperands' returns a non-negative value for such 19265 insns. 19266 19267 In the debugging output, this field is printed as a number followed 19268 by a symbolic representation that locates the pattern in the 'md' 19269 file as some small positive or negative offset from a named 19270 pattern. 19271 19272'LOG_LINKS (I)' 19273 A list (chain of 'insn_list' expressions) giving information about 19274 dependencies between instructions within a basic block. Neither a 19275 jump nor a label may come between the related insns. These are 19276 only used by the schedulers and by combine. This is a deprecated 19277 data structure. Def-use and use-def chains are now preferred. 19278 19279'REG_NOTES (I)' 19280 A list (chain of 'expr_list', 'insn_list' and 'int_list' 19281 expressions) giving miscellaneous information about the insn. It 19282 is often information pertaining to the registers used in this insn. 19283 19284 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions. 19285Each of these has two operands: the first is an insn, and the second is 19286another 'insn_list' expression (the next one in the chain). The last 19287'insn_list' in the chain has a null pointer as second operand. The 19288significant thing about the chain is which insns appear in it (as first 19289operands of 'insn_list' expressions). Their order is not significant. 19290 19291 This list is originally set up by the flow analysis pass; it is a null 19292pointer until then. Flow only adds links for those data dependencies 19293which can be used for instruction combination. For each insn, the flow 19294analysis pass adds a link to insns which store into registers values 19295that are used for the first time in this insn. 19296 19297 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS' 19298field but it includes 'expr_list' and 'int_list' expressions in addition 19299to 'insn_list' expressions. There are several kinds of register notes, 19300which are distinguished by the machine mode, which in a register note is 19301really understood as being an 'enum reg_note'. The first operand OP of 19302the note is data whose meaning depends on the kind of note. 19303 19304 The macro 'REG_NOTE_KIND (X)' returns the kind of register note. Its 19305counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 19306register note type of X to be NEWKIND. 19307 19308 Register notes are of three classes: They may say something about an 19309input to an insn, they may say something about an output of an insn, or 19310they may create a linkage between two insns. There are also a set of 19311values that are only used in 'LOG_LINKS'. 19312 19313 These register notes annotate inputs to an insn: 19314 19315'REG_DEAD' 19316 The value in OP dies in this insn; that is to say, altering the 19317 value immediately after this insn would not affect the future 19318 behavior of the program. 19319 19320 It does not follow that the register OP has no useful value after 19321 this insn since OP is not necessarily modified by this insn. 19322 Rather, no subsequent instruction uses the contents of OP. 19323 19324'REG_UNUSED' 19325 The register OP being set by this insn will not be used in a 19326 subsequent insn. This differs from a 'REG_DEAD' note, which 19327 indicates that the value in an input will not be used subsequently. 19328 These two notes are independent; both may be present for the same 19329 register. 19330 19331'REG_INC' 19332 The register OP is incremented (or decremented; at this level there 19333 is no distinction) by an embedded side effect inside this insn. 19334 This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or 19335 'pre_dec' expression. 19336 19337'REG_NONNEG' 19338 The register OP is known to have a nonnegative value when this insn 19339 is reached. This is used by special looping instructions that 19340 terminate when the register goes negative. 19341 19342 The 'REG_NONNEG' note is added only to 'doloop_end' insns, if its 19343 pattern uses a 'ge' condition. 19344 19345'REG_LABEL_OPERAND' 19346 This insn uses OP, a 'code_label' or a 'note' of type 19347 'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a 19348 'jump_insn' that refers to the operand as an ordinary operand. The 19349 label may still eventually be a jump target, but if so in an 19350 indirect jump in a subsequent insn. The presence of this note 19351 allows jump optimization to be aware that OP is, in fact, being 19352 used, and flow optimization to build an accurate flow graph. 19353 19354'REG_LABEL_TARGET' 19355 This insn is a 'jump_insn' but not an 'addr_vec' or 19356 'addr_diff_vec'. It uses OP, a 'code_label' as a direct or 19357 indirect jump target. Its purpose is similar to that of 19358 'REG_LABEL_OPERAND'. This note is only present if the insn has 19359 multiple targets; the last label in the insn (in the highest 19360 numbered insn-field) goes into the 'JUMP_LABEL' field and does not 19361 have a 'REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 19362 19363'REG_SETJMP' 19364 Appears attached to each 'CALL_INSN' to 'setjmp' or a related 19365 function. 19366 19367 The following notes describe attributes of outputs of an insn: 19368 19369'REG_EQUIV' 19370'REG_EQUAL' 19371 This note is only valid on an insn that sets only one register and 19372 indicates that that register will be equal to OP at run time; the 19373 scope of this equivalence differs between the two types of notes. 19374 The value which the insn explicitly copies into the register may 19375 look different from OP, but they will be equal at run time. If the 19376 output of the single 'set' is a 'strict_low_part' or 'zero_extract' 19377 expression, the note refers to the register that is contained in 19378 its first operand. 19379 19380 For 'REG_EQUIV', the register is equivalent to OP throughout the 19381 entire function, and could validly be replaced in all its 19382 occurrences by OP. ("Validly" here refers to the data flow of the 19383 program; simple replacement may make some insns invalid.) For 19384 example, when a constant is loaded into a register that is never 19385 assigned any other value, this kind of note is used. 19386 19387 When a parameter is copied into a pseudo-register at entry to a 19388 function, a note of this kind records that the register is 19389 equivalent to the stack slot where the parameter was passed. 19390 Although in this case the register may be set by other insns, it is 19391 still valid to replace the register by the stack slot throughout 19392 the function. 19393 19394 A 'REG_EQUIV' note is also used on an instruction which copies a 19395 register parameter into a pseudo-register at entry to a function, 19396 if there is a stack slot where that parameter could be stored. 19397 Although other insns may set the pseudo-register, it is valid for 19398 the compiler to replace the pseudo-register by stack slot 19399 throughout the function, provided the compiler ensures that the 19400 stack slot is properly initialized by making the replacement in the 19401 initial copy instruction as well. This is used on machines for 19402 which the calling convention allocates stack space for register 19403 parameters. See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::. 19404 19405 In the case of 'REG_EQUAL', the register that is set by this insn 19406 will be equal to OP at run time at the end of this insn but not 19407 necessarily elsewhere in the function. In this case, OP is 19408 typically an arithmetic expression. For example, when a sequence 19409 of insns such as a library call is used to perform an arithmetic 19410 operation, this kind of note is attached to the insn that produces 19411 or copies the final value. 19412 19413 These two notes are used in different ways by the compiler passes. 19414 'REG_EQUAL' is used by passes prior to register allocation (such as 19415 common subexpression elimination and loop optimization) to tell 19416 them how to think of that value. 'REG_EQUIV' notes are used by 19417 register allocation to indicate that there is an available 19418 substitute expression (either a constant or a 'mem' expression for 19419 the location of a parameter on the stack) that may be used in place 19420 of a register if insufficient registers are available. 19421 19422 Except for stack homes for parameters, which are indicated by a 19423 'REG_EQUIV' note and are not useful to the early optimization 19424 passes and pseudo registers that are equivalent to a memory 19425 location throughout their entire life, which is not detected until 19426 later in the compilation, all equivalences are initially indicated 19427 by an attached 'REG_EQUAL' note. In the early stages of register 19428 allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note 19429 if OP is a constant and the insn represents the only set of its 19430 destination register. 19431 19432 Thus, compiler passes prior to register allocation need only check 19433 for 'REG_EQUAL' notes and passes subsequent to register allocation 19434 need only check for 'REG_EQUIV' notes. 19435 19436 These notes describe linkages between insns. They occur in pairs: one 19437insn has one of a pair of notes that points to a second insn, which has 19438the inverse note pointing back to the first insn. 19439 19440'REG_CC_SETTER' 19441'REG_CC_USER' 19442 On machines that use 'cc0', the insns which set and use 'cc0' set 19443 and use 'cc0' are adjacent. However, when branch delay slot 19444 filling is done, this may no longer be true. In this case a 19445 'REG_CC_USER' note will be placed on the insn setting 'cc0' to 19446 point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be 19447 placed on the insn using 'cc0' to point to the insn setting 'cc0'. 19448 19449 These values are only used in the 'LOG_LINKS' field, and indicate the 19450type of dependency that each link represents. Links which indicate a 19451data dependence (a read after write dependence) do not use any code, 19452they simply have mode 'VOIDmode', and are printed without any 19453descriptive text. 19454 19455'REG_DEP_TRUE' 19456 This indicates a true dependence (a read after write dependence). 19457 19458'REG_DEP_OUTPUT' 19459 This indicates an output dependence (a write after write 19460 dependence). 19461 19462'REG_DEP_ANTI' 19463 This indicates an anti dependence (a write after read dependence). 19464 19465 These notes describe information gathered from gcov profile data. They 19466are stored in the 'REG_NOTES' field of an insn. 19467 19468'REG_BR_PROB' 19469 This is used to specify the ratio of branches to non-branches of a 19470 branch insn according to the profile data. The note is represented 19471 as an 'int_list' expression whose integer value is an encoding of 19472 'profile_probability' type. 'profile_probability' provide member 19473 function 'from_reg_br_prob_note' and 'to_reg_br_prob_note' to 19474 extract and store the probability into the RTL encoding. 19475 19476'REG_BR_PRED' 19477 These notes are found in JUMP insns after delayed branch scheduling 19478 has taken place. They indicate both the direction and the 19479 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 19480 values. 19481 19482'REG_FRAME_RELATED_EXPR' 19483 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 19484 expression is used in place of the actual insn pattern. This is 19485 done in cases where the pattern is either complex or misleading. 19486 19487 The note 'REG_CALL_NOCF_CHECK' is used in conjunction with the 19488'-fcf-protection=branch' option. The note is set if a 'nocf_check' 19489attribute is specified for a function type or a pointer to function 19490type. The note is stored in the 'REG_NOTES' field of an insn. 19491 19492'REG_CALL_NOCF_CHECK' 19493 Users have control through the 'nocf_check' attribute to identify 19494 which calls to a function should be skipped from control-flow 19495 instrumentation when the option '-fcf-protection=branch' is 19496 specified. The compiler puts a 'REG_CALL_NOCF_CHECK' note on each 19497 'CALL_INSN' instruction that has a function type marked with a 19498 'nocf_check' attribute. 19499 19500 For convenience, the machine mode in an 'insn_list' or 'expr_list' is 19501printed using these symbolic codes in debugging dumps. 19502 19503 The only difference between the expression codes 'insn_list' and 19504'expr_list' is that the first operand of an 'insn_list' is assumed to be 19505an insn and is printed in debugging dumps as the insn's unique id; the 19506first operand of an 'expr_list' is printed in the ordinary way as an 19507expression. 19508 19509 19510File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 19511 1951214.20 RTL Representation of Function-Call Insns 19513=============================================== 19514 19515Insns that call subroutines have the RTL expression code 'call_insn'. 19516These insns must satisfy special rules, and their bodies must use a 19517special RTL expression code, 'call'. 19518 19519 A 'call' expression has two operands, as follows: 19520 19521 (call (mem:FM ADDR) NBYTES) 19522 19523Here NBYTES is an operand that represents the number of bytes of 19524argument data being passed to the subroutine, FM is a machine mode 19525(which must equal as the definition of the 'FUNCTION_MODE' macro in the 19526machine description) and ADDR represents the address of the subroutine. 19527 19528 For a subroutine that returns no value, the 'call' expression as shown 19529above is the entire body of the insn, except that the insn might also 19530contain 'use' or 'clobber' expressions. 19531 19532 For a subroutine that returns a value whose mode is not 'BLKmode', the 19533value is returned in a hard register. If this register's number is R, 19534then the body of the call insn looks like this: 19535 19536 (set (reg:M R) 19537 (call (mem:FM ADDR) NBYTES)) 19538 19539This RTL expression makes it clear (to the optimizer passes) that the 19540appropriate register receives a useful value in this insn. 19541 19542 When a subroutine returns a 'BLKmode' value, it is handled by passing 19543to the subroutine the address of a place to store the value. So the 19544call insn itself does not "return" any value, and it has the same RTL 19545form as a call that returns nothing. 19546 19547 On some machines, the call instruction itself clobbers some register, 19548for example to contain the return address. 'call_insn' insns on these 19549machines should have a body which is a 'parallel' that contains both the 19550'call' expression and 'clobber' expressions that indicate which 19551registers are destroyed. Similarly, if the call instruction requires 19552some register other than the stack pointer that is not explicitly 19553mentioned in its RTL, a 'use' subexpression should mention that 19554register. 19555 19556 Functions that are called are assumed to modify all registers listed in 19557the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::) 19558and, with the exception of 'const' functions and library calls, to 19559modify all of memory. 19560 19561 Insns containing just 'use' expressions directly precede the 19562'call_insn' insn to indicate which registers contain inputs to the 19563function. Similarly, if registers other than those in 19564'CALL_USED_REGISTERS' are clobbered by the called function, insns 19565containing a single 'clobber' follow immediately after the call to 19566indicate which registers. 19567 19568 19569File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 19570 1957114.21 Structure Sharing Assumptions 19572=================================== 19573 19574The compiler assumes that certain kinds of RTL expressions are unique; 19575there do not exist two distinct objects representing the same value. In 19576other cases, it makes an opposite assumption: that no RTL expression 19577object of a certain kind appears in more than one place in the 19578containing structure. 19579 19580 These assumptions refer to a single function; except for the RTL 19581objects that describe global variables and external functions, and a few 19582standard objects such as small integer constants, no RTL objects are 19583common to two functions. 19584 19585 * Each pseudo-register has only a single 'reg' object to represent 19586 it, and therefore only a single machine mode. 19587 19588 * For any symbolic label, there is only one 'symbol_ref' object 19589 referring to it. 19590 19591 * All 'const_int' expressions with equal values are shared. 19592 19593 * All 'const_poly_int' expressions with equal modes and values are 19594 shared. 19595 19596 * There is only one 'pc' expression. 19597 19598 * There is only one 'cc0' expression. 19599 19600 * There is only one 'const_double' expression with value 0 for each 19601 floating point mode. Likewise for values 1 and 2. 19602 19603 * There is only one 'const_vector' expression with value 0 for each 19604 vector mode, be it an integer or a double constant vector. 19605 19606 * No 'label_ref' or 'scratch' appears in more than one place in the 19607 RTL structure; in other words, it is safe to do a tree-walk of all 19608 the insns in the function and assume that each time a 'label_ref' 19609 or 'scratch' is seen it is distinct from all others that are seen. 19610 19611 * Only one 'mem' object is normally created for each static variable 19612 or stack slot, so these objects are frequently shared in all the 19613 places they appear. However, separate but equal objects for these 19614 variables are occasionally made. 19615 19616 * When a single 'asm' statement has multiple output operands, a 19617 distinct 'asm_operands' expression is made for each output operand. 19618 However, these all share the vector which contains the sequence of 19619 input operands. This sharing is used later on to test whether two 19620 'asm_operands' expressions come from the same statement, so all 19621 optimizations must carefully preserve the sharing if they copy the 19622 vector at all. 19623 19624 * No RTL object appears in more than one place in the RTL structure 19625 except as described above. Many passes of the compiler rely on 19626 this by assuming that they can modify RTL objects in place without 19627 unwanted side-effects on other insns. 19628 19629 * During initial RTL generation, shared structure is freely 19630 introduced. After all the RTL for a function has been generated, 19631 all shared structure is copied by 'unshare_all_rtl' in 19632 'emit-rtl.c', after which the above rules are guaranteed to be 19633 followed. 19634 19635 * During the combiner pass, shared structure within an insn can exist 19636 temporarily. However, the shared structure is copied before the 19637 combiner is finished with the insn. This is done by calling 19638 'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'. 19639 19640 19641File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 19642 1964314.22 Reading RTL 19644================= 19645 19646To read an RTL object from a file, call 'read_rtx'. It takes one 19647argument, a stdio stream, and returns a single RTL object. This routine 19648is defined in 'read-rtl.c'. It is not available in the compiler itself, 19649only the various programs that generate the compiler back end from the 19650machine description. 19651 19652 People frequently have the idea of using RTL stored as text in a file 19653as an interface between a language front end and the bulk of GCC. This 19654idea is not feasible. 19655 19656 GCC was designed to use RTL internally only. Correct RTL for a given 19657program is very dependent on the particular target machine. And the RTL 19658does not contain all the information about the program. 19659 19660 The proper way to interface GCC to a new language front end is with the 19661"tree" data structure, described in the files 'tree.h' and 'tree.def'. 19662The documentation for this structure (*note GENERIC::) is incomplete. 19663 19664 19665File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top 19666 1966715 Control Flow Graph 19668********************* 19669 19670A control flow graph (CFG) is a data structure built on top of the 19671intermediate code representation (the RTL or 'GIMPLE' instruction 19672stream) abstracting the control flow behavior of a function that is 19673being compiled. The CFG is a directed graph where the vertices 19674represent basic blocks and edges represent possible transfer of control 19675flow from one basic block to another. The data structures used to 19676represent the control flow graph are defined in 'basic-block.h'. 19677 19678 In GCC, the representation of control flow is maintained throughout the 19679compilation process, from constructing the CFG early in 'pass_build_cfg' 19680to 'pass_free_cfg' (see 'passes.def'). The CFG takes various different 19681modes and may undergo extensive manipulations, but the graph is always 19682valid between its construction and its release. This way, transfer of 19683information such as data flow, a measured profile, or the loop tree, can 19684be propagated through the passes pipeline, and even from 'GIMPLE' to 19685'RTL'. 19686 19687 Often the CFG may be better viewed as integral part of instruction 19688chain, than structure built on the top of it. Updating the compiler's 19689intermediate representation for instructions cannot be easily done 19690without proper maintenance of the CFG simultaneously. 19691 19692* Menu: 19693 19694* Basic Blocks:: The definition and representation of basic blocks. 19695* Edges:: Types of edges and their representation. 19696* Profile information:: Representation of frequencies and probabilities. 19697* Maintaining the CFG:: Keeping the control flow graph and up to date. 19698* Liveness information:: Using and maintaining liveness information. 19699 19700 19701File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 19702 1970315.1 Basic Blocks 19704================= 19705 19706A basic block is a straight-line sequence of code with only one entry 19707point and only one exit. In GCC, basic blocks are represented using the 19708'basic_block' data type. 19709 19710 Special basic blocks represent possible entry and exit points of a 19711function. These blocks are called 'ENTRY_BLOCK_PTR' and 19712'EXIT_BLOCK_PTR'. These blocks do not contain any code. 19713 19714 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified 19715order. Each 'basic_block' structure has a field that holds a unique 19716integer identifier 'index' that is the index of the block in the 19717'BASIC_BLOCK' array. The total number of basic blocks in the function 19718is 'n_basic_blocks'. Both the basic block indices and the total number 19719of basic blocks may vary during the compilation process, as passes 19720reorder, create, duplicate, and destroy basic blocks. The index for any 19721block should never be greater than 'last_basic_block'. The indices 0 19722and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the 19723indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'. 19724 19725 Two pointer members of the 'basic_block' structure are the pointers 19726'next_bb' and 'prev_bb'. These are used to keep doubly linked chain of 19727basic blocks in the same order as the underlying instruction stream. 19728The chain of basic blocks is updated transparently by the provided API 19729for manipulating the CFG. The macro 'FOR_EACH_BB' can be used to visit 19730all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and 19731'EXIT_BLOCK'. The macro 'FOR_ALL_BB' also visits all basic blocks in 19732lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'. 19733 19734 The functions 'post_order_compute' and 'inverted_post_order_compute' 19735can be used to compute topological orders of the CFG. The orders are 19736stored as vectors of basic block indices. The 'BASIC_BLOCK' array can 19737be used to iterate each basic block by index. Dominator traversals are 19738also possible using 'walk_dominator_tree'. Given two basic blocks A and 19739B, block A dominates block B if A is _always_ executed before B. 19740 19741 Each 'basic_block' also contains pointers to the first instruction (the 19742"head") and the last instruction (the "tail") or "end" of the 19743instruction stream contained in a basic block. In fact, since the 19744'basic_block' data type is used to represent blocks in both major 19745intermediate representations of GCC ('GIMPLE' and RTL), there are 19746pointers to the head and end of a basic block for both representations, 19747stored in intermediate representation specific data in the 'il' field of 19748'struct basic_block_def'. 19749 19750 For RTL, these pointers are 'BB_HEAD' and 'BB_END'. 19751 19752 In the RTL representation of a function, the instruction stream 19753contains not only the "real" instructions, but also "notes" or "insn 19754notes" (to distinguish them from "reg notes"). Any function that moves 19755or duplicates the basic blocks needs to take care of updating of these 19756notes. Many of these notes expect that the instruction stream consists 19757of linear regions, so updating can sometimes be tedious. All types of 19758insn notes are defined in 'insn-notes.def'. 19759 19760 In the RTL function representation, the instructions contained in a 19761basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more 19762'CODE_LABEL' nodes can precede the block note. A basic block ends with 19763a control flow instruction or with the last instruction before the next 19764'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'. By definition, a 'CODE_LABEL' 19765cannot appear in the middle of the instruction stream of a basic block. 19766 19767 In addition to notes, the jump table vectors are also represented as 19768"pseudo-instructions" inside the insn stream. These vectors never 19769appear in the basic block and should always be placed just after the 19770table jump instructions referencing them. After removing the table-jump 19771it is often difficult to eliminate the code computing the address and 19772referencing the vector, so cleaning up these vectors is postponed until 19773after liveness analysis. Thus the jump table vectors may appear in the 19774insn stream unreferenced and without any purpose. Before any edge is 19775made "fall-thru", the existence of such construct in the way needs to be 19776checked by calling 'can_fallthru' function. 19777 19778 For the 'GIMPLE' representation, the PHI nodes and statements contained 19779in a basic block are in a 'gimple_seq' pointed to by the basic block 19780intermediate language specific pointers. Abstract containers and 19781iterators are used to access the PHI nodes and statements in a basic 19782blocks. These iterators are called "GIMPLE statement iterators" (GSIs). 19783Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files. There is 19784a 'gimple_stmt_iterator' type for iterating over all kinds of statement, 19785and a 'gphi_iterator' subclass for iterating over PHI nodes. The 19786following snippet will pretty-print all PHI nodes the statements of the 19787current function in the GIMPLE representation. 19788 19789 basic_block bb; 19790 19791 FOR_EACH_BB (bb) 19792 { 19793 gphi_iterator pi; 19794 gimple_stmt_iterator si; 19795 19796 for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi)) 19797 { 19798 gphi *phi = pi.phi (); 19799 print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); 19800 } 19801 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 19802 { 19803 gimple stmt = gsi_stmt (si); 19804 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); 19805 } 19806 } 19807 19808 19809File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 19810 1981115.2 Edges 19812========== 19813 19814Edges represent possible control flow transfers from the end of some 19815basic block A to the head of another basic block B. We say that A is a 19816predecessor of B, and B is a successor of A. Edges are represented in 19817GCC with the 'edge' data type. Each 'edge' acts as a link between two 19818basic blocks: The 'src' member of an edge points to the predecessor 19819basic block of the 'dest' basic block. The members 'preds' and 'succs' 19820of the 'basic_block' data type point to type-safe vectors of edges to 19821the predecessors and successors of the block. 19822 19823 When walking the edges in an edge vector, "edge iterators" should be 19824used. Edge iterators are constructed using the 'edge_iterator' data 19825structure and several methods are available to operate on them: 19826 19827'ei_start' 19828 This function initializes an 'edge_iterator' that points to the 19829 first edge in a vector of edges. 19830 19831'ei_last' 19832 This function initializes an 'edge_iterator' that points to the 19833 last edge in a vector of edges. 19834 19835'ei_end_p' 19836 This predicate is 'true' if an 'edge_iterator' represents the last 19837 edge in an edge vector. 19838 19839'ei_one_before_end_p' 19840 This predicate is 'true' if an 'edge_iterator' represents the 19841 second last edge in an edge vector. 19842 19843'ei_next' 19844 This function takes a pointer to an 'edge_iterator' and makes it 19845 point to the next edge in the sequence. 19846 19847'ei_prev' 19848 This function takes a pointer to an 'edge_iterator' and makes it 19849 point to the previous edge in the sequence. 19850 19851'ei_edge' 19852 This function returns the 'edge' currently pointed to by an 19853 'edge_iterator'. 19854 19855'ei_safe_safe' 19856 This function returns the 'edge' currently pointed to by an 19857 'edge_iterator', but returns 'NULL' if the iterator is pointing at 19858 the end of the sequence. This function has been provided for 19859 existing code makes the assumption that a 'NULL' edge indicates the 19860 end of the sequence. 19861 19862 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the 19863edges in a sequence of predecessor or successor edges. It must not be 19864used when an element might be removed during the traversal, otherwise 19865elements will be missed. Here is an example of how to use the macro: 19866 19867 edge e; 19868 edge_iterator ei; 19869 19870 FOR_EACH_EDGE (e, ei, bb->succs) 19871 { 19872 if (e->flags & EDGE_FALLTHRU) 19873 break; 19874 } 19875 19876 There are various reasons why control flow may transfer from one block 19877to another. One possibility is that some instruction, for example a 19878'CODE_LABEL', in a linearized instruction stream just always starts a 19879new basic block. In this case a "fall-thru" edge links the basic block 19880to the first following basic block. But there are several other reasons 19881why edges may be created. The 'flags' field of the 'edge' data type is 19882used to store information about the type of edge we are dealing with. 19883Each edge is of one of the following types: 19884 19885_jump_ 19886 No type flags are set for edges corresponding to jump instructions. 19887 These edges are used for unconditional or conditional jumps and in 19888 RTL also for table jumps. They are the easiest to manipulate as 19889 they may be freely redirected when the flow graph is not in SSA 19890 form. 19891 19892_fall-thru_ 19893 Fall-thru edges are present in case where the basic block may 19894 continue execution to the following one without branching. These 19895 edges have the 'EDGE_FALLTHRU' flag set. Unlike other types of 19896 edges, these edges must come into the basic block immediately 19897 following in the instruction stream. The function 19898 'force_nonfallthru' is available to insert an unconditional jump in 19899 the case that redirection is needed. Note that this may require 19900 creation of a new basic block. 19901 19902_exception handling_ 19903 Exception handling edges represent possible control transfers from 19904 a trapping instruction to an exception handler. The definition of 19905 "trapping" varies. In C++, only function calls can throw, but for 19906 Ada exceptions like division by zero or segmentation fault are 19907 defined and thus each instruction possibly throwing this kind of 19908 exception needs to be handled as control flow instruction. 19909 Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set. 19910 19911 When updating the instruction stream it is easy to change possibly 19912 trapping instruction to non-trapping, by simply removing the 19913 exception edge. The opposite conversion is difficult, but should 19914 not happen anyway. The edges can be eliminated via 19915 'purge_dead_edges' call. 19916 19917 In the RTL representation, the destination of an exception edge is 19918 specified by 'REG_EH_REGION' note attached to the insn. In case of 19919 a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too. In the 19920 'GIMPLE' representation, this extra flag is not set. 19921 19922 In the RTL representation, the predicate 'may_trap_p' may be used 19923 to check whether instruction still may trap or not. For the tree 19924 representation, the 'tree_could_trap_p' predicate is available, but 19925 this predicate only checks for possible memory traps, as in 19926 dereferencing an invalid pointer location. 19927 19928_sibling calls_ 19929 Sibling calls or tail calls terminate the function in a 19930 non-standard way and thus an edge to the exit must be present. 19931 'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case. These 19932 edges only exist in the RTL representation. 19933 19934_computed jumps_ 19935 Computed jumps contain edges to all labels in the function 19936 referenced from the code. All those edges have 'EDGE_ABNORMAL' 19937 flag set. The edges used to represent computed jumps often cause 19938 compile time performance problems, since functions consisting of 19939 many taken labels and many computed jumps may have _very_ dense 19940 flow graphs, so these edges need to be handled with special care. 19941 During the earlier stages of the compilation process, GCC tries to 19942 avoid such dense flow graphs by factoring computed jumps. For 19943 example, given the following series of jumps, 19944 19945 goto *x; 19946 [ ... ] 19947 19948 goto *x; 19949 [ ... ] 19950 19951 goto *x; 19952 [ ... ] 19953 19954 factoring the computed jumps results in the following code sequence 19955 which has a much simpler flow graph: 19956 19957 goto y; 19958 [ ... ] 19959 19960 goto y; 19961 [ ... ] 19962 19963 goto y; 19964 [ ... ] 19965 19966 y: 19967 goto *x; 19968 19969 However, the classic problem with this transformation is that it 19970 has a runtime cost in there resulting code: An extra jump. 19971 Therefore, the computed jumps are un-factored in the later passes 19972 of the compiler (in the pass called 19973 'pass_duplicate_computed_gotos'). Be aware of that when you work 19974 on passes in that area. There have been numerous examples already 19975 where the compile time for code with unfactored computed jumps 19976 caused some serious headaches. 19977 19978_nonlocal goto handlers_ 19979 GCC allows nested functions to return into caller using a 'goto' to 19980 a label passed to as an argument to the callee. The labels passed 19981 to nested functions contain special code to cleanup after function 19982 call. Such sections of code are referred to as "nonlocal goto 19983 receivers". If a function contains such nonlocal goto receivers, 19984 an edge from the call to the label is created with the 19985 'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set. 19986 19987_function entry points_ 19988 By definition, execution of function starts at basic block 0, so 19989 there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block 19990 0. There is no 'GIMPLE' representation for alternate entry points 19991 at this moment. In RTL, alternate entry points are specified by 19992 'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined. This feature is 19993 currently used for multiple entry point prologues and is limited to 19994 post-reload passes only. This can be used by back-ends to emit 19995 alternate prologues for functions called from different contexts. 19996 In future full support for multiple entry functions defined by 19997 Fortran 90 needs to be implemented. 19998 19999_function exits_ 20000 In the pre-reload representation a function terminates after the 20001 last instruction in the insn chain and no explicit return 20002 instructions are used. This corresponds to the fall-thru edge into 20003 exit block. After reload, optimal RTL epilogues are used that use 20004 explicit (conditional) return instructions that are represented by 20005 edges with no flags set. 20006 20007 20008File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 20009 2001015.3 Profile information 20011======================== 20012 20013In many cases a compiler must make a choice whether to trade speed in 20014one part of code for speed in another, or to trade code size for code 20015speed. In such cases it is useful to know information about how often 20016some given block will be executed. That is the purpose for maintaining 20017profile within the flow graph. GCC can handle profile information 20018obtained through "profile feedback", but it can also estimate branch 20019probabilities based on statics and heuristics. 20020 20021 The feedback based profile is produced by compiling the program with 20022instrumentation, executing it on a train run and reading the numbers of 20023executions of basic blocks and edges back to the compiler while 20024re-compiling the program to produce the final executable. This method 20025provides very accurate information about where a program spends most of 20026its time on the train run. Whether it matches the average run of course 20027depends on the choice of train data set, but several studies have shown 20028that the behavior of a program usually changes just marginally over 20029different data sets. 20030 20031 When profile feedback is not available, the compiler may be asked to 20032attempt to predict the behavior of each branch in the program using a 20033set of heuristics (see 'predict.def' for details) and compute estimated 20034frequencies of each basic block by propagating the probabilities over 20035the graph. 20036 20037 Each 'basic_block' contains two integer fields to represent profile 20038information: 'frequency' and 'count'. The 'frequency' is an estimation 20039how often is basic block executed within a function. It is represented 20040as an integer scaled in the range from 0 to 'BB_FREQ_BASE'. The most 20041frequently executed basic block in function is initially set to 20042'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 20043During optimization, the frequency of the most frequent basic block can 20044both decrease (for instance by loop unrolling) or grow (for instance by 20045cross-jumping optimization), so scaling sometimes has to be performed 20046multiple times. 20047 20048 The 'count' contains hard-counted numbers of execution measured during 20049training runs and is nonzero only when profile feedback is available. 20050This value is represented as the host's widest integer (typically a 64 20051bit integer) of the special type 'gcov_type'. 20052 20053 Most optimization passes can use only the frequency information of a 20054basic block, but a few passes may want to know hard execution counts. 20055The frequencies should always match the counts after scaling, however 20056during updating of the profile information numerical error may 20057accumulate into quite large errors. 20058 20059 Each edge also contains a branch probability field: an integer in the 20060range from 0 to 'REG_BR_PROB_BASE'. It represents probability of 20061passing control from the end of the 'src' basic block to the 'dest' 20062basic block, i.e. the probability that control will flow along this 20063edge. The 'EDGE_FREQUENCY' macro is available to compute how frequently 20064a given edge is taken. There is a 'count' field for each edge as well, 20065representing same information as for a basic block. 20066 20067 The basic block frequencies are not represented in the instruction 20068stream, but in the RTL representation the edge frequencies are 20069represented for conditional jumps (via the 'REG_BR_PROB' macro) since 20070they are used when instructions are output to the assembly file and the 20071flow graph is no longer maintained. 20072 20073 The probability that control flow arrives via a given edge to its 20074destination basic block is called "reverse probability" and is not 20075directly represented, but it may be easily computed from frequencies of 20076basic blocks. 20077 20078 Updating profile information is a delicate task that can unfortunately 20079not be easily integrated with the CFG manipulation API. Many of the 20080functions and hooks to modify the CFG, such as 20081'redirect_edge_and_branch', do not have enough information to easily 20082update the profile, so updating it is in the majority of cases left up 20083to the caller. It is difficult to uncover bugs in the profile updating 20084code, because they manifest themselves only by producing worse code, and 20085checking profile consistency is not possible because of numeric error 20086accumulation. Hence special attention needs to be given to this issue 20087in each pass that modifies the CFG. 20088 20089 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE' 20090are both set low enough to be possible to compute second power of any 20091frequency or probability in the flow graph, it is not possible to even 20092square the 'count' field, as modern CPUs are fast enough to execute 20093$2^32$ operations quickly. 20094 20095 20096File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 20097 2009815.4 Maintaining the CFG 20099======================== 20100 20101An important task of each compiler pass is to keep both the control flow 20102graph and all profile information up-to-date. Reconstruction of the 20103control flow graph after each pass is not an option, since it may be 20104very expensive and lost profile information cannot be reconstructed at 20105all. 20106 20107 GCC has two major intermediate representations, and both use the 20108'basic_block' and 'edge' data types to represent control flow. Both 20109representations share as much of the CFG maintenance code as possible. 20110For each representation, a set of "hooks" is defined so that each 20111representation can provide its own implementation of CFG manipulation 20112routines when necessary. These hooks are defined in 'cfghooks.h'. 20113There are hooks for almost all common CFG manipulations, including block 20114splitting and merging, edge redirection and creating and deleting basic 20115blocks. These hooks should provide everything you need to maintain and 20116manipulate the CFG in both the RTL and 'GIMPLE' representation. 20117 20118 At the moment, the basic block boundaries are maintained transparently 20119when modifying instructions, so there rarely is a need to move them 20120manually (such as in case someone wants to output instruction outside 20121basic block explicitly). 20122 20123 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN' 20124value that represents pointer to the basic block that contains the 20125instruction. In the 'GIMPLE' representation, the function 'gimple_bb' 20126returns a pointer to the basic block containing the queried statement. 20127 20128 When changes need to be applied to a function in its 'GIMPLE' 20129representation, "GIMPLE statement iterators" should be used. These 20130iterators provide an integrated abstraction of the flow graph and the 20131instruction stream. Block statement iterators are constructed using the 20132'gimple_stmt_iterator' data structure and several modifiers are 20133available, including the following: 20134 20135'gsi_start' 20136 This function initializes a 'gimple_stmt_iterator' that points to 20137 the first non-empty statement in a basic block. 20138 20139'gsi_last' 20140 This function initializes a 'gimple_stmt_iterator' that points to 20141 the last statement in a basic block. 20142 20143'gsi_end_p' 20144 This predicate is 'true' if a 'gimple_stmt_iterator' represents the 20145 end of a basic block. 20146 20147'gsi_next' 20148 This function takes a 'gimple_stmt_iterator' and makes it point to 20149 its successor. 20150 20151'gsi_prev' 20152 This function takes a 'gimple_stmt_iterator' and makes it point to 20153 its predecessor. 20154 20155'gsi_insert_after' 20156 This function inserts a statement after the 'gimple_stmt_iterator' 20157 passed in. The final parameter determines whether the statement 20158 iterator is updated to point to the newly inserted statement, or 20159 left pointing to the original statement. 20160 20161'gsi_insert_before' 20162 This function inserts a statement before the 'gimple_stmt_iterator' 20163 passed in. The final parameter determines whether the statement 20164 iterator is updated to point to the newly inserted statement, or 20165 left pointing to the original statement. 20166 20167'gsi_remove' 20168 This function removes the 'gimple_stmt_iterator' passed in and 20169 rechains the remaining statements in a basic block, if any. 20170 20171 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be 20172used to get the head and end 'rtx' of a basic block. No abstract 20173iterators are defined for traversing the insn chain, but you can just 20174use 'NEXT_INSN' and 'PREV_INSN' instead. *Note Insns::. 20175 20176 Usually a code manipulating pass simplifies the instruction stream and 20177the flow of control, possibly eliminating some edges. This may for 20178example happen when a conditional jump is replaced with an unconditional 20179jump. Updating of edges is not transparent and each optimization pass 20180is required to do so manually. However only few cases occur in 20181practice. The pass may call 'purge_dead_edges' on a given basic block 20182to remove superfluous edges, if any. 20183 20184 Another common scenario is redirection of branch instructions, but this 20185is best modeled as redirection of edges in the control flow graph and 20186thus use of 'redirect_edge_and_branch' is preferred over more low level 20187functions, such as 'redirect_jump' that operate on RTL chain only. The 20188CFG hooks defined in 'cfghooks.h' should provide the complete API 20189required for manipulating and maintaining the CFG. 20190 20191 It is also possible that a pass has to insert control flow instruction 20192into the middle of a basic block, thus creating an entry point in the 20193middle of the basic block, which is impossible by definition: The block 20194must be split to make sure it only has one entry point, i.e. the head of 20195the basic block. The CFG hook 'split_block' may be used when an 20196instruction in the middle of a basic block has to become the target of a 20197jump or branch instruction. 20198 20199 For a global optimizer, a common operation is to split edges in the 20200flow graph and insert instructions on them. In the RTL representation, 20201this can be easily done using the 'insert_insn_on_edge' function that 20202emits an instruction "on the edge", caching it for a later 20203'commit_edge_insertions' call that will take care of moving the inserted 20204instructions off the edge into the instruction stream contained in a 20205basic block. This includes the creation of new basic blocks where 20206needed. In the 'GIMPLE' representation, the equivalent functions are 20207'gsi_insert_on_edge' which inserts a block statement iterator on an 20208edge, and 'gsi_commit_edge_inserts' which flushes the instruction to 20209actual instruction stream. 20210 20211 While debugging the optimization pass, the 'verify_flow_info' function 20212may be useful to find bugs in the control flow graph updating code. 20213 20214 20215File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 20216 2021715.5 Liveness information 20218========================= 20219 20220Liveness information is useful to determine whether some register is 20221"live" at given point of program, i.e. that it contains a value that may 20222be used at a later point in the program. This information is used, for 20223instance, during register allocation, as the pseudo registers only need 20224to be assigned to a unique hard register or to a stack slot if they are 20225live. The hard registers and stack slots may be freely reused for other 20226values when a register is dead. 20227 20228 Liveness information is available in the back end starting with 20229'pass_df_initialize' and ending with 'pass_df_finish'. Three flavors of 20230live analysis are available: With 'LR', it is possible to determine at 20231any point 'P' in the function if the register may be used on some path 20232from 'P' to the end of the function. With 'UR', it is possible to 20233determine if there is a path from the beginning of the function to 'P' 20234that defines the variable. 'LIVE' is the intersection of the 'LR' and 20235'UR' and a variable is live at 'P' if there is both an assignment that 20236reaches it from the beginning of the function and a use that can be 20237reached on some path from 'P' to the end of the function. 20238 20239 In general 'LIVE' is the most useful of the three. The macros 20240'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 20241macros take a basic block number and return a bitmap that is indexed by 20242the register number. This information is only guaranteed to be up to 20243date after calls are made to 'df_analyze'. See the file 'df-core.c' for 20244details on using the dataflow. 20245 20246 The liveness information is stored partly in the RTL instruction stream 20247and partly in the flow graph. Local information is stored in the 20248instruction stream: Each instruction may contain 'REG_DEAD' notes 20249representing that the value of a given register is no longer needed, or 20250'REG_UNUSED' notes representing that the value computed by the 20251instruction is never used. The second is useful for instructions 20252computing multiple values at once. 20253 20254 20255File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top 20256 2025716 Analysis and Representation of Loops 20258*************************************** 20259 20260GCC provides extensive infrastructure for work with natural loops, i.e., 20261strongly connected components of CFG with only one entry block. This 20262chapter describes representation of loops in GCC, both on GIMPLE and in 20263RTL, as well as the interfaces to loop-related analyses (induction 20264variable analysis and number of iterations analysis). 20265 20266* Menu: 20267 20268* Loop representation:: Representation and analysis of loops. 20269* Loop querying:: Getting information about loops. 20270* Loop manipulation:: Loop manipulation functions. 20271* LCSSA:: Loop-closed SSA form. 20272* Scalar evolutions:: Induction variables on GIMPLE. 20273* loop-iv:: Induction variables on RTL. 20274* Number of iterations:: Number of iterations analysis. 20275* Dependency analysis:: Data dependency analysis. 20276 20277 20278File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 20279 2028016.1 Loop representation 20281======================== 20282 20283This chapter describes the representation of loops in GCC, and functions 20284that can be used to build, modify and analyze this representation. Most 20285of the interfaces and data structures are declared in 'cfgloop.h'. Loop 20286structures are analyzed and this information disposed or updated at the 20287discretion of individual passes. Still most of the generic CFG 20288manipulation routines are aware of loop structures and try to keep them 20289up-to-date. By this means an increasing part of the compilation 20290pipeline is setup to maintain loop structure across passes to allow 20291attaching meta information to individual loops for consumption by later 20292passes. 20293 20294 In general, a natural loop has one entry block (header) and possibly 20295several back edges (latches) leading to the header from the inside of 20296the loop. Loops with several latches may appear if several loops share 20297a single header, or if there is a branching in the middle of the loop. 20298The representation of loops in GCC however allows only loops with a 20299single latch. During loop analysis, headers of such loops are split and 20300forwarder blocks are created in order to disambiguate their structures. 20301Heuristic based on profile information and structure of the induction 20302variables in the loops is used to determine whether the latches 20303correspond to sub-loops or to control flow in a single loop. This means 20304that the analysis sometimes changes the CFG, and if you run it in the 20305middle of an optimization pass, you must be able to deal with the new 20306blocks. You may avoid CFG changes by passing 20307'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 20308however that most other loop manipulation functions will not work 20309correctly for loops with multiple latch edges (the functions that only 20310query membership of blocks to loops and subloop relationships, or 20311enumerate and test loop exits, can be expected to work). 20312 20313 Body of the loop is the set of blocks that are dominated by its header, 20314and reachable from its latch against the direction of edges in CFG. The 20315loops are organized in a containment hierarchy (tree) such that all the 20316loops immediately contained inside loop L are the children of L in the 20317tree. This tree is represented by the 'struct loops' structure. The 20318root of this tree is a fake loop that contains all blocks in the 20319function. Each of the loops is represented in a 'struct loop' 20320structure. Each loop is assigned an index ('num' field of the 'struct 20321loop' structure), and the pointer to the loop is stored in the 20322corresponding field of the 'larray' vector in the loops structure. The 20323indices do not have to be continuous, there may be empty ('NULL') 20324entries in the 'larray' created by deleting loops. Also, there is no 20325guarantee on the relative order of a loop and its subloops in the 20326numbering. The index of a loop never changes. 20327 20328 The entries of the 'larray' field should not be accessed directly. The 20329function 'get_loop' returns the loop description for a loop with the 20330given index. 'number_of_loops' function returns number of loops in the 20331function. To traverse all loops, use 'FOR_EACH_LOOP' macro. The 20332'flags' argument of the macro is used to determine the direction of 20333traversal and the set of loops visited. Each loop is guaranteed to be 20334visited exactly once, regardless of the changes to the loop tree, and 20335the loops may be removed during the traversal. The newly created loops 20336are never traversed, if they need to be visited, this must be done 20337separately after their creation. 20338 20339 Each basic block contains the reference to the innermost loop it 20340belongs to ('loop_father'). For this reason, it is only possible to 20341have one 'struct loops' structure initialized at the same time for each 20342CFG. The global variable 'current_loops' contains the 'struct loops' 20343structure. Many of the loop manipulation functions assume that 20344dominance information is up-to-date. 20345 20346 The loops are analyzed through 'loop_optimizer_init' function. The 20347argument of this function is a set of flags represented in an integer 20348bitmask. These flags specify what other properties of the loop 20349structures should be calculated/enforced and preserved later: 20350 20351 * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 20352 to CFG will be performed in the loop analysis, in particular, loops 20353 with multiple latch edges will not be disambiguated. If a loop has 20354 multiple latches, its latch block is set to NULL. Most of the loop 20355 manipulation functions will not work for loops in this shape. No 20356 other flags that require CFG changes can be passed to 20357 loop_optimizer_init. 20358 * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way 20359 that each loop has only one entry edge, and additionally, the 20360 source block of this entry edge has only one successor. This 20361 creates a natural place where the code can be moved out of the 20362 loop, and ensures that the entry edge of the loop leads from its 20363 immediate super-loop. 20364 * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 20365 the latch block of each loop to have only one successor. This 20366 ensures that the latch of the loop does not belong to any of its 20367 sub-loops, and makes manipulation with the loops significantly 20368 easier. Most of the loop manipulation functions assume that the 20369 loops are in this shape. Note that with this flag, the "normal" 20370 loop without any control flow inside and with one exit consists of 20371 two basic blocks. 20372 * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 20373 the strongly connected components that are not natural loops (have 20374 more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP' 20375 and 'EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 20376 and edges that belong to natural loops that are in such an 20377 irreducible region (but it is set for the entry and exit edges of 20378 such a loop, if they lead to/from this region). 20379 * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 20380 updated for each loop. This makes some functions (e.g., 20381 'get_loop_exit_edges') more efficient. Some functions (e.g., 20382 'single_exit') can be used only if the lists of exits are recorded. 20383 20384 These properties may also be computed/enforced later, using functions 20385'create_preheaders', 'force_single_succ_latches', 20386'mark_irreducible_loops' and 'record_loop_exits'. The properties can be 20387queried using 'loops_state_satisfies_p'. 20388 20389 The memory occupied by the loops structures should be freed with 20390'loop_optimizer_finalize' function. When loop structures are setup to 20391be preserved across passes this function reduces the information to be 20392kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' 20393set). 20394 20395 The CFG manipulation functions in general do not update loop 20396structures. Specialized versions that additionally do so are provided 20397for the most common tasks. On GIMPLE, 'cleanup_tree_cfg_loop' function 20398can be used to cleanup CFG while updating the loops structures if 20399'current_loops' is set. 20400 20401 At the moment loop structure is preserved from the start of GIMPLE loop 20402optimizations until the end of RTL loop optimizations. During this time 20403a loop can be tracked by its 'struct loop' and number. 20404 20405 20406File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 20407 2040816.2 Loop querying 20409================== 20410 20411The functions to query the information about loops are declared in 20412'cfgloop.h'. Some of the information can be taken directly from the 20413structures. 'loop_father' field of each basic block contains the 20414innermost loop to that the block belongs. The most useful fields of 20415loop structure (that are kept up-to-date at all times) are: 20416 20417 * 'header', 'latch': Header and latch basic blocks of the loop. 20418 * 'num_nodes': Number of basic blocks in the loop (including the 20419 basic blocks of the sub-loops). 20420 * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and 20421 the sibling of the loop in the loops tree. 20422 20423 There are other fields in the loop structures, many of them used only 20424by some of the passes, or not updated during CFG changes; in general, 20425they should not be accessed directly. 20426 20427 The most important functions to query loop structures are: 20428 20429 * 'loop_depth': The depth of the loop in the loops tree, i.e., the 20430 number of super-loops of the loop. 20431 * 'flow_loops_dump': Dumps the information about loops to a file. 20432 * 'verify_loop_structure': Checks consistency of the loop structures. 20433 * 'loop_latch_edge': Returns the latch edge of a loop. 20434 * 'loop_preheader_edge': If loops have preheaders, returns the 20435 preheader edge of a loop. 20436 * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another 20437 loop. 20438 * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a 20439 loop (including its sub-loops). 20440 * 'find_common_loop': Finds the common super-loop of two loops. 20441 * 'superloop_at_depth': Returns the super-loop of a loop with the 20442 given depth. 20443 * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of 20444 insns in the loop, on GIMPLE and on RTL. 20445 * 'loop_exit_edge_p': Tests whether edge is an exit from a loop. 20446 * 'mark_loop_exit_edges': Marks all exit edges of all loops with 20447 'EDGE_LOOP_EXIT' flag. 20448 * 'get_loop_body', 'get_loop_body_in_dom_order', 20449 'get_loop_body_in_bfs_order': Enumerates the basic blocks in the 20450 loop in depth-first search order in reversed CFG, ordered by 20451 dominance relation, and breath-first search order, respectively. 20452 * 'single_exit': Returns the single exit edge of the loop, or 'NULL' 20453 if the loop has more than one exit. You can only use this function 20454 if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 20455 * 'get_loop_exit_edges': Enumerates the exit edges of a loop. 20456 * 'just_once_each_iteration_p': Returns true if the basic block is 20457 executed exactly once during each iteration of a loop (that is, it 20458 does not belong to a sub-loop, and it dominates the latch of the 20459 loop). 20460 20461 20462File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 20463 2046416.3 Loop manipulation 20465====================== 20466 20467The loops tree can be manipulated using the following functions: 20468 20469 * 'flow_loop_tree_node_add': Adds a node to the tree. 20470 * 'flow_loop_tree_node_remove': Removes a node from the tree. 20471 * 'add_bb_to_loop': Adds a basic block to a loop. 20472 * 'remove_bb_from_loops': Removes a basic block from loops. 20473 20474 Most low-level CFG functions update loops automatically. The following 20475functions handle some more complicated cases of CFG manipulations: 20476 20477 * 'remove_path': Removes an edge and all blocks it dominates. 20478 * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that 20479 PHI node arguments remain in the loop (this ensures that 20480 loop-closed SSA form is preserved). Only useful on GIMPLE. 20481 20482 Finally, there are some higher-level loop transformations implemented. 20483While some of them are written so that they should work on non-innermost 20484loops, they are mostly untested in that case, and at the moment, they 20485are only reliable for the innermost loops: 20486 20487 * 'create_iv': Creates a new induction variable. Only works on 20488 GIMPLE. 'standard_iv_increment_position' can be used to find a 20489 suitable place for the iv increment. 20490 * 'duplicate_loop_to_header_edge', 20491 'tree_duplicate_loop_to_header_edge': These functions (on RTL and 20492 on GIMPLE) duplicate the body of the loop prescribed number of 20493 times on one of the edges entering loop header, thus performing 20494 either loop unrolling or loop peeling. 'can_duplicate_loop_p' 20495 ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated 20496 loop. 20497 * 'loop_version': This function creates a copy of a loop, and a 20498 branch before them that selects one of them depending on the 20499 prescribed condition. This is useful for optimizations that need 20500 to verify some assumptions in runtime (one of the copies of the 20501 loop is usually left unchanged, while the other one is transformed 20502 in some way). 20503 * 'tree_unroll_loop': Unrolls the loop, including peeling the extra 20504 iterations to make the number of iterations divisible by unroll 20505 factor, updating the exit condition, and removing the exits that 20506 now cannot be taken. Works only on GIMPLE. 20507 20508 20509File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 20510 2051116.4 Loop-closed SSA form 20512========================= 20513 20514Throughout the loop optimizations on tree level, one extra condition is 20515enforced on the SSA form: No SSA name is used outside of the loop in 20516that it is defined. The SSA form satisfying this condition is called 20517"loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 20518created at the exits of the loops for the SSA names that are used 20519outside of them. Only the real operands (not virtual SSA names) are 20520held in LCSSA, in order to save memory. 20521 20522 There are various benefits of LCSSA: 20523 20524 * Many optimizations (value range analysis, final value replacement) 20525 are interested in the values that are defined in the loop and used 20526 outside of it, i.e., exactly those for that we create new PHI 20527 nodes. 20528 * In induction variable analysis, it is not necessary to specify the 20529 loop in that the analysis should be performed - the scalar 20530 evolution analysis always returns the results with respect to the 20531 loop in that the SSA name is defined. 20532 * It makes updating of SSA form during loop transformations simpler. 20533 Without LCSSA, operations like loop unrolling may force creation of 20534 PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA 20535 form can be updated locally. However, since we only keep real 20536 operands in LCSSA, we cannot use this advantage (we could have 20537 local updating of real operands, but it is not much more efficient 20538 than to use generic SSA form updating for it as well; the amount of 20539 changes to SSA is the same). 20540 20541 However, it also means LCSSA must be updated. This is usually 20542straightforward, unless you create a new value in loop and use it 20543outside, or unless you manipulate loop exit edges (functions are 20544provided to make these manipulations simple). 20545'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and 20546'verify_loop_closed_ssa' to check that the invariant of LCSSA is 20547preserved. 20548 20549 20550File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 20551 2055216.5 Scalar evolutions 20553====================== 20554 20555Scalar evolutions (SCEV) are used to represent results of induction 20556variable analysis on GIMPLE. They enable us to represent variables with 20557complicated behavior in a simple and consistent way (we only use it to 20558express values of polynomial induction variables, but it is possible to 20559extend it). The interfaces to SCEV analysis are declared in 20560'tree-scalar-evolution.h'. To use scalar evolutions analysis, 20561'scev_initialize' must be used. To stop using SCEV, 'scev_finalize' 20562should be used. SCEV analysis caches results in order to save time and 20563memory. This cache however is made invalid by most of the loop 20564transformations, including removal of code. If such a transformation is 20565performed, 'scev_reset' must be called to clean the caches. 20566 20567 Given an SSA name, its behavior in loops can be analyzed using the 20568'analyze_scalar_evolution' function. The returned SCEV however does not 20569have to be fully analyzed and it may contain references to other SSA 20570names defined in the loop. To resolve these (potentially recursive) 20571references, 'instantiate_parameters' or 'resolve_mixers' functions must 20572be used. 'instantiate_parameters' is useful when you use the results of 20573SCEV only for some analysis, and when you work with whole nest of loops 20574at once. It will try replacing all SSA names by their SCEV in all 20575loops, including the super-loops of the current loop, thus providing a 20576complete information about the behavior of the variable in the loop 20577nest. 'resolve_mixers' is useful if you work with only one loop at a 20578time, and if you possibly need to create code based on the value of the 20579induction variable. It will only resolve the SSA names defined in the 20580current loop, leaving the SSA names defined outside unchanged, even if 20581their evolution in the outer loops is known. 20582 20583 The SCEV is a normal tree expression, except for the fact that it may 20584contain several special tree nodes. One of them is 'SCEV_NOT_KNOWN', 20585used for SSA names whose value cannot be expressed. The other one is 20586'POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 20587and loop (both base and step may contain further polynomial chrecs). 20588Type of the expression and of base and step must be the same. A 20589variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in 20590the specified loop) equivalent to 'x_1' in the following example 20591 20592 while (...) 20593 { 20594 x_1 = phi (base, x_2); 20595 x_2 = x_1 + step; 20596 } 20597 20598 Note that this includes the language restrictions on the operations. 20599For example, if we compile C code and 'x' has signed type, then the 20600overflow in addition would cause undefined behavior, and we may assume 20601that this does not happen. Hence, the value with this SCEV cannot 20602overflow (which restricts the number of iterations of such a loop). 20603 20604 In many cases, one wants to restrict the attention just to affine 20605induction variables. In this case, the extra expressive power of SCEV 20606is not useful, and may complicate the optimizations. In this case, 20607'simple_iv' function may be used to analyze a value - the result is a 20608loop-invariant base and step. 20609 20610 20611File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 20612 2061316.6 IV analysis on RTL 20614======================= 20615 20616The induction variable on RTL is simple and only allows analysis of 20617affine induction variables, and only in one loop at once. The interface 20618is declared in 'cfgloop.h'. Before analyzing induction variables in a 20619loop L, 'iv_analysis_loop_init' function must be called on L. After the 20620analysis (possibly calling 'iv_analysis_loop_init' for several loops) is 20621finished, 'iv_analysis_done' should be called. The following functions 20622can be used to access the results of the analysis: 20623 20624 * 'iv_analyze': Analyzes a single register used in the given insn. 20625 If no use of the register in this insn is found, the following 20626 insns are scanned, so that this function can be called on the insn 20627 returned by get_condition. 20628 * 'iv_analyze_result': Analyzes result of the assignment in the given 20629 insn. 20630 * 'iv_analyze_expr': Analyzes a more complicated expression. All its 20631 operands are analyzed by 'iv_analyze', and hence they must be used 20632 in the specified insn or one of the following insns. 20633 20634 The description of the induction variable is provided in 'struct 20635rtx_iv'. In order to handle subregs, the representation is a bit 20636complicated; if the value of the 'extend' field is not 'UNKNOWN', the 20637value of the induction variable in the i-th iteration is 20638 20639 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 20640 20641 with the following exception: if 'first_special' is true, then the 20642value in the first iteration (when 'i' is zero) is 'delta + mult * 20643base'. However, if 'extend' is equal to 'UNKNOWN', then 'first_special' 20644must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration 20645is 20646 20647 subreg_{mode} (base + i * step) 20648 20649 The function 'get_iv_value' can be used to perform these calculations. 20650 20651 20652File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 20653 2065416.7 Number of iterations analysis 20655================================== 20656 20657Both on GIMPLE and on RTL, there are functions available to determine 20658the number of iterations of a loop, with a similar interface. The 20659number of iterations of a loop in GCC is defined as the number of 20660executions of the loop latch. In many cases, it is not possible to 20661determine the number of iterations unconditionally - the determined 20662number is correct only if some assumptions are satisfied. The analysis 20663tries to verify these conditions using the information contained in the 20664program; if it fails, the conditions are returned together with the 20665result. The following information and conditions are provided by the 20666analysis: 20667 20668 * 'assumptions': If this condition is false, the rest of the 20669 information is invalid. 20670 * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this 20671 condition is true, the loop exits in the first iteration. 20672 * 'infinite': If this condition is true, the loop is infinite. This 20673 condition is only available on RTL. On GIMPLE, conditions for 20674 finiteness of the loop are included in 'assumptions'. 20675 * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives 20676 number of iterations. The number of iterations is defined as the 20677 number of executions of the loop latch. 20678 20679 Both on GIMPLE and on RTL, it necessary for the induction variable 20680analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 20681On GIMPLE, the results are stored to 'struct tree_niter_desc' structure. 20682Number of iterations before the loop is exited through a given exit can 20683be determined using 'number_of_iterations_exit' function. On RTL, the 20684results are returned in 'struct niter_desc' structure. The 20685corresponding function is named 'check_simple_exit'. There are also 20686functions that pass through all the exits of a loop and try to find one 20687with easy to determine number of iterations - 'find_loop_niter' on 20688GIMPLE and 'find_simple_exit' on RTL. Finally, there are functions that 20689provide the same information, but additionally cache it, so that 20690repeated calls to number of iterations are not so costly - 20691'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on 20692RTL. 20693 20694 Note that some of these functions may behave slightly differently than 20695others - some of them return only the expression for the number of 20696iterations, and fail if there are some assumptions. The function 20697'number_of_latch_executions' works only for single-exit loops. The 20698function 'number_of_cond_exit_executions' can be used to determine 20699number of executions of the exit condition of a single-exit loop (i.e., 20700the 'number_of_latch_executions' increased by one). 20701 20702 On GIMPLE, below constraint flags affect semantics of some APIs of 20703number of iterations analyzer: 20704 20705 * 'LOOP_C_INFINITE': If this constraint flag is set, the loop is 20706 known to be infinite. APIs like 'number_of_iterations_exit' can 20707 return false directly without doing any analysis. 20708 * 'LOOP_C_FINITE': If this constraint flag is set, the loop is known 20709 to be finite, in other words, loop's number of iterations can be 20710 computed with 'assumptions' be true. 20711 20712 Generally, the constraint flags are set/cleared by consumers which are 20713loop optimizers. It's also the consumers' responsibility to set/clear 20714constraints correctly. Failing to do that might result in hard to track 20715down bugs in scev/niter consumers. One typical use case is vectorizer: 20716it drives number of iterations analyzer by setting 'LOOP_C_FINITE' and 20717vectorizes possibly infinite loop by versioning loop with analysis 20718result. In return, constraints set by consumers can also help number of 20719iterations analyzer in following optimizers. For example, 'niter' of a 20720loop versioned under 'assumptions' is valid unconditionally. 20721 20722 Other constraints may be added in the future, for example, a constraint 20723indicating that loops' latch must roll thus 'may_be_zero' would be false 20724unconditionally. 20725 20726 20727File: gccint.info, Node: Dependency analysis, Prev: Number of iterations, Up: Loop Analysis and Representation 20728 2072916.8 Data Dependency Analysis 20730============================= 20731 20732The code for the data dependence analysis can be found in 20733'tree-data-ref.c' and its interface and data structures are described in 20734'tree-data-ref.h'. The function that computes the data dependences for 20735all the array and pointer references for a given loop is 20736'compute_data_dependences_for_loop'. This function is currently used by 20737the linear loop transform and the vectorization passes. Before calling 20738this function, one has to allocate two vectors: a first vector will 20739contain the set of data references that are contained in the analyzed 20740loop body, and the second vector will contain the dependence relations 20741between the data references. Thus if the vector of data references is 20742of size 'n', the vector containing the dependence relations will contain 20743'n*n' elements. However if the analyzed loop contains side effects, 20744such as calls that potentially can interfere with the data references in 20745the current analyzed loop, the analysis stops while scanning the loop 20746body for data references, and inserts a single 'chrec_dont_know' in the 20747dependence relation array. 20748 20749 The data references are discovered in a particular order during the 20750scanning of the loop body: the loop body is analyzed in execution order, 20751and the data references of each statement are pushed at the end of the 20752data reference array. Two data references syntactically occur in the 20753program in the same order as in the array of data references. This 20754syntactic order is important in some classical data dependence tests, 20755and mapping this order to the elements of this array avoids costly 20756queries to the loop body representation. 20757 20758 Three types of data references are currently handled: ARRAY_REF, 20759INDIRECT_REF and COMPONENT_REF. The data structure for the data 20760reference is 'data_reference', where 'data_reference_p' is a name of a 20761pointer to the data reference structure. The structure contains the 20762following elements: 20763 20764 * 'base_object_info': Provides information about the base object of 20765 the data reference and its access functions. These access 20766 functions represent the evolution of the data reference in the loop 20767 relative to its base, in keeping with the classical meaning of the 20768 data reference access function for the support of arrays. For 20769 example, for a reference 'a.b[i][j]', the base object is 'a.b' and 20770 the access functions, one for each array subscript, are: '{i_init, 20771 + i_step}_1, {j_init, +, j_step}_2'. 20772 20773 * 'first_location_in_loop': Provides information about the first 20774 location accessed by the data reference in the loop and about the 20775 access function used to represent evolution relative to this 20776 location. This data is used to support pointers, and is not used 20777 for arrays (for which we have base objects). Pointer accesses are 20778 represented as a one-dimensional access that starts from the first 20779 location accessed in the loop. For example: 20780 20781 for1 i 20782 for2 j 20783 *((int *)p + i + j) = a[i][j]; 20784 20785 The access function of the pointer access is '{0, + 4B}_for2' 20786 relative to 'p + i'. The access functions of the array are 20787 '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative 20788 to 'a'. 20789 20790 Usually, the object the pointer refers to is either unknown, or we 20791 cannot prove that the access is confined to the boundaries of a 20792 certain object. 20793 20794 Two data references can be compared only if at least one of these 20795 two representations has all its fields filled for both data 20796 references. 20797 20798 The current strategy for data dependence tests is as follows: If 20799 both 'a' and 'b' are represented as arrays, compare 'a.base_object' 20800 and 'b.base_object'; if they are equal, apply dependence tests (use 20801 access functions based on base_objects). Else if both 'a' and 'b' 20802 are represented as pointers, compare 'a.first_location' and 20803 'b.first_location'; if they are equal, apply dependence tests (use 20804 access functions based on first location). However, if 'a' and 'b' 20805 are represented differently, only try to prove that the bases are 20806 definitely different. 20807 20808 * Aliasing information. 20809 * Alignment information. 20810 20811 The structure describing the relation between two data references is 20812'data_dependence_relation' and the shorter name for a pointer to such a 20813structure is 'ddr_p'. This structure contains: 20814 20815 * a pointer to each data reference, 20816 * a tree node 'are_dependent' that is set to 'chrec_known' if the 20817 analysis has proved that there is no dependence between these two 20818 data references, 'chrec_dont_know' if the analysis was not able to 20819 determine any useful result and potentially there could exist a 20820 dependence between these data references, and 'are_dependent' is 20821 set to 'NULL_TREE' if there exist a dependence relation between the 20822 data references, and the description of this dependence relation is 20823 given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays, 20824 * a boolean that determines whether the dependence relation can be 20825 represented by a classical distance vector, 20826 * an array 'subscripts' that contains a description of each subscript 20827 of the data references. Given two array accesses a subscript is 20828 the tuple composed of the access functions for a given dimension. 20829 For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are 20830 three subscripts: '(f1, g1), (f2, g2), (f3, g3)'. 20831 * two arrays 'dir_vects' and 'dist_vects' that contain classical 20832 representations of the data dependences under the form of direction 20833 and distance dependence vectors, 20834 * an array of loops 'loop_nest' that contains the loops to which the 20835 distance and direction vectors refer to. 20836 20837 Several functions for pretty printing the information extracted by the 20838data dependence analysis are available: 'dump_ddrs' prints with a 20839maximum verbosity the details of a data dependence relations array, 20840'dump_dist_dir_vectors' prints only the classical distance and direction 20841vectors for a data dependence relations array, and 20842'dump_data_references' prints the details of the data references 20843contained in a data reference array. 20844 20845 20846File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 20847 2084817 Machine Descriptions 20849*********************** 20850 20851A machine description has two parts: a file of instruction patterns 20852('.md' file) and a C header file of macro definitions. 20853 20854 The '.md' file for a target machine contains a pattern for each 20855instruction that the target machine supports (or at least each 20856instruction that is worth telling the compiler about). It may also 20857contain comments. A semicolon causes the rest of the line to be a 20858comment, unless the semicolon is inside a quoted string. 20859 20860 See the next chapter for information on the C header file. 20861 20862* Menu: 20863 20864* Overview:: How the machine description is used. 20865* Patterns:: How to write instruction patterns. 20866* Example:: An explained example of a 'define_insn' pattern. 20867* RTL Template:: The RTL template defines what insns match a pattern. 20868* Output Template:: The output template says how to make assembler code 20869 from such an insn. 20870* Output Statement:: For more generality, write C code to output 20871 the assembler code. 20872* Predicates:: Controlling what kinds of operands can be used 20873 for an insn. 20874* Constraints:: Fine-tuning operand selection. 20875* Standard Names:: Names mark patterns to use for code generation. 20876* Pattern Ordering:: When the order of patterns makes a difference. 20877* Dependent Patterns:: Having one pattern may make you need another. 20878* Jump Patterns:: Special considerations for patterns for jump insns. 20879* Looping Patterns:: How to define patterns for special looping insns. 20880* Insn Canonicalizations::Canonicalization of Instructions 20881* Expander Definitions::Generating a sequence of several RTL insns 20882 for a standard operation. 20883* Insn Splitting:: Splitting Instructions into Multiple Instructions. 20884* Including Patterns:: Including Patterns in Machine Descriptions. 20885* Peephole Definitions::Defining machine-specific peephole optimizations. 20886* Insn Attributes:: Specifying the value of attributes for generated insns. 20887* Conditional Execution::Generating 'define_insn' patterns for 20888 predication. 20889* Define Subst:: Generating 'define_insn' and 'define_expand' 20890 patterns from other patterns. 20891* Constant Definitions::Defining symbolic constants that can be used in the 20892 md file. 20893* Iterators:: Using iterators to generate patterns from a template. 20894 20895 20896File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 20897 2089817.1 Overview of How the Machine Description is Used 20899==================================================== 20900 20901There are three main conversions that happen in the compiler: 20902 20903 1. The front end reads the source code and builds a parse tree. 20904 20905 2. The parse tree is used to generate an RTL insn list based on named 20906 instruction patterns. 20907 20908 3. The insn list is matched against the RTL templates to produce 20909 assembler code. 20910 20911 For the generate pass, only the names of the insns matter, from either 20912a named 'define_insn' or a 'define_expand'. The compiler will choose 20913the pattern with the right name and apply the operands according to the 20914documentation later in this chapter, without regard for the RTL template 20915or operand constraints. Note that the names the compiler looks for are 20916hard-coded in the compiler--it will ignore unnamed patterns and patterns 20917with names it doesn't know about, but if you don't provide a named 20918pattern it needs, it will abort. 20919 20920 If a 'define_insn' is used, the template given is inserted into the 20921insn list. If a 'define_expand' is used, one of three things happens, 20922based on the condition logic. The condition logic may manually create 20923new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'. 20924For certain named patterns, it may invoke 'FAIL' to tell the compiler to 20925use an alternate way of performing that task. If it invokes neither 20926'DONE' nor 'FAIL', the template given in the pattern is inserted, as if 20927the 'define_expand' were a 'define_insn'. 20928 20929 Once the insn list is generated, various optimization passes convert, 20930replace, and rearrange the insns in the insn list. This is where the 20931'define_split' and 'define_peephole' patterns get used, for example. 20932 20933 Finally, the insn list's RTL is matched up with the RTL templates in 20934the 'define_insn' patterns, and those patterns are used to emit the 20935final assembly code. For this purpose, each named 'define_insn' acts 20936like it's unnamed, since the names are ignored. 20937 20938 20939File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 20940 2094117.2 Everything about Instruction Patterns 20942========================================== 20943 20944A 'define_insn' expression is used to define instruction patterns to 20945which insns may be matched. A 'define_insn' expression contains an 20946incomplete RTL expression, with pieces to be filled in later, operand 20947constraints that restrict how the pieces can be filled in, and an output 20948template or C code to generate the assembler output. 20949 20950 A 'define_insn' is an RTL expression containing four or five operands: 20951 20952 1. An optional name N. When a name is present, the compiler 20953 automically generates a C++ function 'gen_N' that takes the 20954 operands of the instruction as arguments and returns the 20955 instruction's rtx pattern. The compiler also assigns the 20956 instruction a unique code 'CODE_FOR_N', with all such codes 20957 belonging to an enum called 'insn_code'. 20958 20959 These names serve one of two purposes. The first is to indicate 20960 that the instruction performs a certain standard job for the 20961 RTL-generation pass of the compiler, such as a move, an addition, 20962 or a conditional jump. The second is to help the target generate 20963 certain target-specific operations, such as when implementing 20964 target-specific intrinsic functions. 20965 20966 It is better to prefix target-specific names with the name of the 20967 target, to avoid any clash with current or future standard names. 20968 20969 The absence of a name is indicated by writing an empty string where 20970 the name should go. Nameless instruction patterns are never used 20971 for generating RTL code, but they may permit several simpler insns 20972 to be combined later on. 20973 20974 For the purpose of debugging the compiler, you may also specify a 20975 name beginning with the '*' character. Such a name is used only 20976 for identifying the instruction in RTL dumps; it is equivalent to 20977 having a nameless pattern for all other purposes. Names beginning 20978 with the '*' character are not required to be unique. 20979 20980 The name may also have the form '@N'. This has the same effect as 20981 a name 'N', but in addition tells the compiler to generate further 20982 helper functions; see *note Parameterized Names:: for details. 20983 20984 2. The "RTL template": This is a vector of incomplete RTL expressions 20985 which describe the semantics of the instruction (*note RTL 20986 Template::). It is incomplete because it may contain 20987 'match_operand', 'match_operator', and 'match_dup' expressions that 20988 stand for operands of the instruction. 20989 20990 If the vector has multiple elements, the RTL template is treated as 20991 a 'parallel' expression. 20992 20993 3. The condition: This is a string which contains a C expression. 20994 When the compiler attempts to match RTL against a pattern, the 20995 condition is evaluated. If the condition evaluates to 'true', the 20996 match is permitted. The condition may be an empty string, which is 20997 treated as always 'true'. 20998 20999 For a named pattern, the condition may not depend on the data in 21000 the insn being matched, but only the target-machine-type flags. 21001 The compiler needs to test these conditions during initialization 21002 in order to learn exactly which named instructions are available in 21003 a particular run. 21004 21005 For nameless patterns, the condition is applied only when matching 21006 an individual insn, and only after the insn has matched the 21007 pattern's recognition template. The insn's operands may be found 21008 in the vector 'operands'. 21009 21010 An instruction condition cannot become more restrictive as 21011 compilation progresses. If the condition accepts a particular RTL 21012 instruction at one stage of compilation, it must continue to accept 21013 that instruction until the final pass. For example, 21014 '!reload_completed' and 'can_create_pseudo_p ()' are both invalid 21015 instruction conditions, because they are true during the earlier 21016 RTL passes and false during the later ones. For the same reason, 21017 if a condition accepts an instruction before register allocation, 21018 it cannot later try to control register allocation by excluding 21019 certain register or value combinations. 21020 21021 Although a condition cannot become more restrictive as compilation 21022 progresses, the condition for a nameless pattern _can_ become more 21023 permissive. For example, a nameless instruction can require 21024 'reload_completed' to be true, in which case it only matches after 21025 register allocation. 21026 21027 4. The "output template" or "output statement": This is either a 21028 string, or a fragment of C code which returns a string. 21029 21030 When simple substitution isn't general enough, you can specify a 21031 piece of C code to compute the output. *Note Output Statement::. 21032 21033 5. The "insn attributes": This is an optional vector containing the 21034 values of attributes for insns matching this pattern (*note Insn 21035 Attributes::). 21036 21037 21038File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 21039 2104017.3 Example of 'define_insn' 21041============================= 21042 21043Here is an example of an instruction pattern, taken from the machine 21044description for the 68000/68020. 21045 21046 (define_insn "tstsi" 21047 [(set (cc0) 21048 (match_operand:SI 0 "general_operand" "rm"))] 21049 "" 21050 "* 21051 { 21052 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 21053 return \"tstl %0\"; 21054 return \"cmpl #0,%0\"; 21055 }") 21056 21057This can also be written using braced strings: 21058 21059 (define_insn "tstsi" 21060 [(set (cc0) 21061 (match_operand:SI 0 "general_operand" "rm"))] 21062 "" 21063 { 21064 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 21065 return "tstl %0"; 21066 return "cmpl #0,%0"; 21067 }) 21068 21069 This describes an instruction which sets the condition codes based on 21070the value of a general operand. It has no condition, so any insn with 21071an RTL description of the form shown may be matched to this pattern. 21072The name 'tstsi' means "test a 'SImode' value" and tells the RTL 21073generation pass that, when it is necessary to test such a value, an insn 21074to do so can be constructed using this pattern. 21075 21076 The output control string is a piece of C code which chooses which 21077output template to return based on the kind of operand and the specific 21078type of CPU for which code is being generated. 21079 21080 '"rm"' is an operand constraint. Its meaning is explained below. 21081 21082 21083File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 21084 2108517.4 RTL Template 21086================= 21087 21088The RTL template is used to define which insns match the particular 21089pattern and how to find their operands. For named patterns, the RTL 21090template also says how to construct an insn from specified operands. 21091 21092 Construction involves substituting specified operands into a copy of 21093the template. Matching involves determining the values that serve as 21094the operands in the insn being matched. Both of these activities are 21095controlled by special expression types that direct matching and 21096substitution of the operands. 21097 21098'(match_operand:M N PREDICATE CONSTRAINT)' 21099 This expression is a placeholder for operand number N of the insn. 21100 When constructing an insn, operand number N will be substituted at 21101 this point. When matching an insn, whatever appears at this 21102 position in the insn will be taken as operand number N; but it must 21103 satisfy PREDICATE or this instruction pattern will not match at 21104 all. 21105 21106 Operand numbers must be chosen consecutively counting from zero in 21107 each instruction pattern. There may be only one 'match_operand' 21108 expression in the pattern for each operand number. Usually 21109 operands are numbered in the order of appearance in 'match_operand' 21110 expressions. In the case of a 'define_expand', any operand numbers 21111 used only in 'match_dup' expressions have higher values than all 21112 other operand numbers. 21113 21114 PREDICATE is a string that is the name of a function that accepts 21115 two arguments, an expression and a machine mode. *Note 21116 Predicates::. During matching, the function will be called with 21117 the putative operand as the expression and M as the mode argument 21118 (if M is not specified, 'VOIDmode' will be used, which normally 21119 causes PREDICATE to accept any mode). If it returns zero, this 21120 instruction pattern fails to match. PREDICATE may be an empty 21121 string; then it means no test is to be done on the operand, so 21122 anything which occurs in this position is valid. 21123 21124 Most of the time, PREDICATE will reject modes other than M--but not 21125 always. For example, the predicate 'address_operand' uses M as the 21126 mode of memory ref that the address should be valid for. Many 21127 predicates accept 'const_int' nodes even though their mode is 21128 'VOIDmode'. 21129 21130 CONSTRAINT controls reloading and the choice of the best register 21131 class to use for a value, as explained later (*note Constraints::). 21132 If the constraint would be an empty string, it can be omitted. 21133 21134 People are often unclear on the difference between the constraint 21135 and the predicate. The predicate helps decide whether a given insn 21136 matches the pattern. The constraint plays no role in this 21137 decision; instead, it controls various decisions in the case of an 21138 insn which does match. 21139 21140'(match_scratch:M N CONSTRAINT)' 21141 This expression is also a placeholder for operand number N and 21142 indicates that operand must be a 'scratch' or 'reg' expression. 21143 21144 When matching patterns, this is equivalent to 21145 21146 (match_operand:M N "scratch_operand" CONSTRAINT) 21147 21148 but, when generating RTL, it produces a ('scratch':M) expression. 21149 21150 If the last few expressions in a 'parallel' are 'clobber' 21151 expressions whose operands are either a hard register or 21152 'match_scratch', the combiner can add or delete them when 21153 necessary. *Note Side Effects::. 21154 21155'(match_dup N)' 21156 This expression is also a placeholder for operand number N. It is 21157 used when the operand needs to appear more than once in the insn. 21158 21159 In construction, 'match_dup' acts just like 'match_operand': the 21160 operand is substituted into the insn being constructed. But in 21161 matching, 'match_dup' behaves differently. It assumes that operand 21162 number N has already been determined by a 'match_operand' appearing 21163 earlier in the recognition template, and it matches only an 21164 identical-looking expression. 21165 21166 Note that 'match_dup' should not be used to tell the compiler that 21167 a particular register is being used for two operands (example: 21168 'add' that adds one register to another; the second register is 21169 both an input operand and the output operand). Use a matching 21170 constraint (*note Simple Constraints::) for those. 'match_dup' is 21171 for the cases where one operand is used in two places in the 21172 template, such as an instruction that computes both a quotient and 21173 a remainder, where the opcode takes two input operands but the RTL 21174 template has to refer to each of those twice; once for the quotient 21175 pattern and once for the remainder pattern. 21176 21177'(match_operator:M N PREDICATE [OPERANDS...])' 21178 This pattern is a kind of placeholder for a variable RTL expression 21179 code. 21180 21181 When constructing an insn, it stands for an RTL expression whose 21182 expression code is taken from that of operand N, and whose operands 21183 are constructed from the patterns OPERANDS. 21184 21185 When matching an expression, it matches an expression if the 21186 function PREDICATE returns nonzero on that expression _and_ the 21187 patterns OPERANDS match the operands of the expression. 21188 21189 Suppose that the function 'commutative_operator' is defined as 21190 follows, to match any expression whose operator is one of the 21191 commutative arithmetic operators of RTL and whose mode is MODE: 21192 21193 int 21194 commutative_integer_operator (x, mode) 21195 rtx x; 21196 machine_mode mode; 21197 { 21198 enum rtx_code code = GET_CODE (x); 21199 if (GET_MODE (x) != mode) 21200 return 0; 21201 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 21202 || code == EQ || code == NE); 21203 } 21204 21205 Then the following pattern will match any RTL expression consisting 21206 of a commutative operator applied to two general operands: 21207 21208 (match_operator:SI 3 "commutative_operator" 21209 [(match_operand:SI 1 "general_operand" "g") 21210 (match_operand:SI 2 "general_operand" "g")]) 21211 21212 Here the vector '[OPERANDS...]' contains two patterns because the 21213 expressions to be matched all contain two operands. 21214 21215 When this pattern does match, the two operands of the commutative 21216 operator are recorded as operands 1 and 2 of the insn. (This is 21217 done by the two instances of 'match_operand'.) Operand 3 of the 21218 insn will be the entire commutative expression: use 'GET_CODE 21219 (operands[3])' to see which commutative operator was used. 21220 21221 The machine mode M of 'match_operator' works like that of 21222 'match_operand': it is passed as the second argument to the 21223 predicate function, and that function is solely responsible for 21224 deciding whether the expression to be matched "has" that mode. 21225 21226 When constructing an insn, argument 3 of the gen-function will 21227 specify the operation (i.e. the expression code) for the expression 21228 to be made. It should be an RTL expression, whose expression code 21229 is copied into a new expression whose operands are arguments 1 and 21230 2 of the gen-function. The subexpressions of argument 3 are not 21231 used; only its expression code matters. 21232 21233 When 'match_operator' is used in a pattern for matching an insn, it 21234 usually best if the operand number of the 'match_operator' is 21235 higher than that of the actual operands of the insn. This improves 21236 register allocation because the register allocator often looks at 21237 operands 1 and 2 of insns to see if it can do register tying. 21238 21239 There is no way to specify constraints in 'match_operator'. The 21240 operand of the insn which corresponds to the 'match_operator' never 21241 has any constraints because it is never reloaded as a whole. 21242 However, if parts of its OPERANDS are matched by 'match_operand' 21243 patterns, those parts may have constraints of their own. 21244 21245'(match_op_dup:M N[OPERANDS...])' 21246 Like 'match_dup', except that it applies to operators instead of 21247 operands. When constructing an insn, operand number N will be 21248 substituted at this point. But in matching, 'match_op_dup' behaves 21249 differently. It assumes that operand number N has already been 21250 determined by a 'match_operator' appearing earlier in the 21251 recognition template, and it matches only an identical-looking 21252 expression. 21253 21254'(match_parallel N PREDICATE [SUBPAT...])' 21255 This pattern is a placeholder for an insn that consists of a 21256 'parallel' expression with a variable number of elements. This 21257 expression should only appear at the top level of an insn pattern. 21258 21259 When constructing an insn, operand number N will be substituted at 21260 this point. When matching an insn, it matches if the body of the 21261 insn is a 'parallel' expression with at least as many elements as 21262 the vector of SUBPAT expressions in the 'match_parallel', if each 21263 SUBPAT matches the corresponding element of the 'parallel', _and_ 21264 the function PREDICATE returns nonzero on the 'parallel' that is 21265 the body of the insn. It is the responsibility of the predicate to 21266 validate elements of the 'parallel' beyond those listed in the 21267 'match_parallel'. 21268 21269 A typical use of 'match_parallel' is to match load and store 21270 multiple expressions, which can contain a variable number of 21271 elements in a 'parallel'. For example, 21272 21273 (define_insn "" 21274 [(match_parallel 0 "load_multiple_operation" 21275 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 21276 (match_operand:SI 2 "memory_operand" "m")) 21277 (use (reg:SI 179)) 21278 (clobber (reg:SI 179))])] 21279 "" 21280 "loadm 0,0,%1,%2") 21281 21282 This example comes from 'a29k.md'. The function 21283 'load_multiple_operation' is defined in 'a29k.c' and checks that 21284 subsequent elements in the 'parallel' are the same as the 'set' in 21285 the pattern, except that they are referencing subsequent registers 21286 and memory locations. 21287 21288 An insn that matches this pattern might look like: 21289 21290 (parallel 21291 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 21292 (use (reg:SI 179)) 21293 (clobber (reg:SI 179)) 21294 (set (reg:SI 21) 21295 (mem:SI (plus:SI (reg:SI 100) 21296 (const_int 4)))) 21297 (set (reg:SI 22) 21298 (mem:SI (plus:SI (reg:SI 100) 21299 (const_int 8))))]) 21300 21301'(match_par_dup N [SUBPAT...])' 21302 Like 'match_op_dup', but for 'match_parallel' instead of 21303 'match_operator'. 21304 21305 21306File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 21307 2130817.5 Output Templates and Operand Substitution 21309============================================== 21310 21311The "output template" is a string which specifies how to output the 21312assembler code for an instruction pattern. Most of the template is a 21313fixed string which is output literally. The character '%' is used to 21314specify where to substitute an operand; it can also be used to identify 21315places where different variants of the assembler require different 21316syntax. 21317 21318 In the simplest case, a '%' followed by a digit N says to output 21319operand N at that point in the string. 21320 21321 '%' followed by a letter and a digit says to output an operand in an 21322alternate fashion. Four letters have standard, built-in meanings 21323described below. The machine description macro 'PRINT_OPERAND' can 21324define additional letters with nonstandard meanings. 21325 21326 '%cDIGIT' can be used to substitute an operand that is a constant value 21327without the syntax that normally indicates an immediate operand. 21328 21329 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is 21330negated before printing. 21331 21332 '%aDIGIT' can be used to substitute an operand as if it were a memory 21333reference, with the actual operand treated as the address. This may be 21334useful when outputting a "load address" instruction, because often the 21335assembler syntax for such an instruction requires you to write the 21336operand as if it were a memory reference. 21337 21338 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction. 21339 21340 '%=' outputs a number which is unique to each instruction in the entire 21341compilation. This is useful for making local labels to be referred to 21342more than once in a single template that generates multiple assembler 21343instructions. 21344 21345 '%' followed by a punctuation character specifies a substitution that 21346does not use an operand. Only one case is standard: '%%' outputs a '%' 21347into the assembler code. Other nonstandard cases can be defined in the 21348'PRINT_OPERAND' macro. You must also define which punctuation 21349characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro. 21350 21351 The template may generate multiple assembler instructions. Write the 21352text for the instructions, with '\;' between them. 21353 21354 When the RTL contains two operands which are required by constraint to 21355match each other, the output template must refer only to the 21356lower-numbered operand. Matching operands are not always identical, and 21357the rest of the compiler arranges to put the proper RTL expression for 21358printing into the lower-numbered operand. 21359 21360 One use of nonstandard letters or punctuation following '%' is to 21361distinguish between different assembler languages for the same machine; 21362for example, Motorola syntax versus MIT syntax for the 68000. Motorola 21363syntax requires periods in most opcode names, while MIT syntax does not. 21364For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola 21365syntax. The same file of patterns is used for both kinds of output 21366syntax, but the character sequence '%.' is used in each place where 21367Motorola syntax wants a period. The 'PRINT_OPERAND' macro for Motorola 21368syntax defines the sequence to output a period; the macro for MIT syntax 21369defines it to do nothing. 21370 21371 As a special case, a template consisting of the single character '#' 21372instructs the compiler to first split the insn, and then output the 21373resulting instructions separately. This helps eliminate redundancy in 21374the output templates. If you have a 'define_insn' that needs to emit 21375multiple assembler instructions, and there is a matching 'define_split' 21376already defined, then you can simply use '#' as the output template 21377instead of writing an output template that emits the multiple assembler 21378instructions. 21379 21380 Note that '#' only has an effect while generating assembly code; it 21381does not affect whether a split occurs earlier. An associated 21382'define_split' must exist and it must be suitable for use after register 21383allocation. 21384 21385 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of 21386the form '{option0|option1|option2}' in the templates. These describe 21387multiple variants of assembler language syntax. *Note Instruction 21388Output::. 21389 21390 21391File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 21392 2139317.6 C Statements for Assembler Output 21394====================================== 21395 21396Often a single fixed template string cannot produce correct and 21397efficient assembler code for all the cases that are recognized by a 21398single instruction pattern. For example, the opcodes may depend on the 21399kinds of operands; or some unfortunate combinations of operands may 21400require extra machine instructions. 21401 21402 If the output control string starts with a '@', then it is actually a 21403series of templates, each on a separate line. (Blank lines and leading 21404spaces and tabs are ignored.) The templates correspond to the pattern's 21405constraint alternatives (*note Multi-Alternative::). For example, if a 21406target machine has a two-address add instruction 'addr' to add into a 21407register and another 'addm' to add a register to memory, you might write 21408this pattern: 21409 21410 (define_insn "addsi3" 21411 [(set (match_operand:SI 0 "general_operand" "=r,m") 21412 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 21413 (match_operand:SI 2 "general_operand" "g,r")))] 21414 "" 21415 "@ 21416 addr %2,%0 21417 addm %2,%0") 21418 21419 If the output control string starts with a '*', then it is not an 21420output template but rather a piece of C program that should compute a 21421template. It should execute a 'return' statement to return the 21422template-string you want. Most such templates use C string literals, 21423which require doublequote characters to delimit them. To include these 21424doublequote characters in the string, prefix each one with '\'. 21425 21426 If the output control string is written as a brace block instead of a 21427double-quoted string, it is automatically assumed to be C code. In that 21428case, it is not necessary to put in a leading asterisk, or to escape the 21429doublequotes surrounding C string literals. 21430 21431 The operands may be found in the array 'operands', whose C data type is 21432'rtx []'. 21433 21434 It is very common to select different ways of generating assembler code 21435based on whether an immediate operand is within a certain range. Be 21436careful when doing this, because the result of 'INTVAL' is an integer on 21437the host machine. If the host machine has more bits in an 'int' than 21438the target machine has in the mode in which the constant will be used, 21439then some of the bits you get from 'INTVAL' will be superfluous. For 21440proper results, you must carefully disregard the values of those bits. 21441 21442 It is possible to output an assembler instruction and then go on to 21443output or compute more of them, using the subroutine 'output_asm_insn'. 21444This receives two arguments: a template-string and a vector of operands. 21445The vector may be 'operands', or it may be another array of 'rtx' that 21446you declare locally and initialize yourself. 21447 21448 When an insn pattern has multiple alternatives in its constraints, 21449often the appearance of the assembler code is determined mostly by which 21450alternative was matched. When this is so, the C code can test the 21451variable 'which_alternative', which is the ordinal number of the 21452alternative that was actually satisfied (0 for the first, 1 for the 21453second alternative, etc.). 21454 21455 For example, suppose there are two opcodes for storing zero, 'clrreg' 21456for registers and 'clrmem' for memory locations. Here is how a pattern 21457could use 'which_alternative' to choose between them: 21458 21459 (define_insn "" 21460 [(set (match_operand:SI 0 "general_operand" "=r,m") 21461 (const_int 0))] 21462 "" 21463 { 21464 return (which_alternative == 0 21465 ? "clrreg %0" : "clrmem %0"); 21466 }) 21467 21468 The example above, where the assembler code to generate was _solely_ 21469determined by the alternative, could also have been specified as 21470follows, having the output control string start with a '@': 21471 21472 (define_insn "" 21473 [(set (match_operand:SI 0 "general_operand" "=r,m") 21474 (const_int 0))] 21475 "" 21476 "@ 21477 clrreg %0 21478 clrmem %0") 21479 21480 If you just need a little bit of C code in one (or a few) alternatives, 21481you can use '*' inside of a '@' multi-alternative template: 21482 21483 (define_insn "" 21484 [(set (match_operand:SI 0 "general_operand" "=r,<,m") 21485 (const_int 0))] 21486 "" 21487 "@ 21488 clrreg %0 21489 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\"; 21490 clrmem %0") 21491 21492 21493File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 21494 2149517.7 Predicates 21496=============== 21497 21498A predicate determines whether a 'match_operand' or 'match_operator' 21499expression matches, and therefore whether the surrounding instruction 21500pattern will be used for that combination of operands. GCC has a number 21501of machine-independent predicates, and you can define machine-specific 21502predicates as needed. By convention, predicates used with 21503'match_operand' have names that end in '_operand', and those used with 21504'match_operator' have names that end in '_operator'. 21505 21506 All predicates are boolean functions (in the mathematical sense) of two 21507arguments: the RTL expression that is being considered at that position 21508in the instruction pattern, and the machine mode that the 21509'match_operand' or 'match_operator' specifies. In this section, the 21510first argument is called OP and the second argument MODE. Predicates 21511can be called from C as ordinary two-argument functions; this can be 21512useful in output templates or other machine-specific code. 21513 21514 Operand predicates can allow operands that are not actually acceptable 21515to the hardware, as long as the constraints give reload the ability to 21516fix them up (*note Constraints::). However, GCC will usually generate 21517better code if the predicates specify the requirements of the machine 21518instructions as closely as possible. Reload cannot fix up operands that 21519must be constants ("immediate operands"); you must use a predicate that 21520allows only constants, or else enforce the requirement in the extra 21521condition. 21522 21523 Most predicates handle their MODE argument in a uniform manner. If 21524MODE is 'VOIDmode' (unspecified), then OP can have any mode. If MODE is 21525anything else, then OP must have the same mode, unless OP is a 21526'CONST_INT' or integer 'CONST_DOUBLE'. These RTL expressions always 21527have 'VOIDmode', so it would be counterproductive to check that their 21528mode matches. Instead, predicates that accept 'CONST_INT' and/or 21529integer 'CONST_DOUBLE' check that the value stored in the constant will 21530fit in the requested mode. 21531 21532 Predicates with this behavior are called "normal". 'genrecog' can 21533optimize the instruction recognizer based on knowledge of how normal 21534predicates treat modes. It can also diagnose certain kinds of common 21535errors in the use of normal predicates; for instance, it is almost 21536always an error to use a normal predicate without specifying a mode. 21537 21538 Predicates that do something different with their MODE argument are 21539called "special". The generic predicates 'address_operand' and 21540'pmode_register_operand' are special predicates. 'genrecog' does not do 21541any optimizations or diagnosis when special predicates are used. 21542 21543* Menu: 21544 21545* Machine-Independent Predicates:: Predicates available to all back ends. 21546* Defining Predicates:: How to write machine-specific predicate 21547 functions. 21548 21549 21550File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 21551 2155217.7.1 Machine-Independent Predicates 21553------------------------------------- 21554 21555These are the generic predicates available to all back ends. They are 21556defined in 'recog.c'. The first category of predicates allow only 21557constant, or "immediate", operands. 21558 21559 -- Function: immediate_operand 21560 This predicate allows any sort of constant that fits in MODE. It 21561 is an appropriate choice for instructions that take operands that 21562 must be constant. 21563 21564 -- Function: const_int_operand 21565 This predicate allows any 'CONST_INT' expression that fits in MODE. 21566 It is an appropriate choice for an immediate operand that does not 21567 allow a symbol or label. 21568 21569 -- Function: const_double_operand 21570 This predicate accepts any 'CONST_DOUBLE' expression that has 21571 exactly MODE. If MODE is 'VOIDmode', it will also accept 21572 'CONST_INT'. It is intended for immediate floating point 21573 constants. 21574 21575The second category of predicates allow only some kind of machine 21576register. 21577 21578 -- Function: register_operand 21579 This predicate allows any 'REG' or 'SUBREG' expression that is 21580 valid for MODE. It is often suitable for arithmetic instruction 21581 operands on a RISC machine. 21582 21583 -- Function: pmode_register_operand 21584 This is a slight variant on 'register_operand' which works around a 21585 limitation in the machine-description reader. 21586 21587 (match_operand N "pmode_register_operand" CONSTRAINT) 21588 21589 means exactly what 21590 21591 (match_operand:P N "register_operand" CONSTRAINT) 21592 21593 would mean, if the machine-description reader accepted ':P' mode 21594 suffixes. Unfortunately, it cannot, because 'Pmode' is an alias 21595 for some other mode, and might vary with machine-specific options. 21596 *Note Misc::. 21597 21598 -- Function: scratch_operand 21599 This predicate allows hard registers and 'SCRATCH' expressions, but 21600 not pseudo-registers. It is used internally by 'match_scratch'; it 21601 should not be used directly. 21602 21603The third category of predicates allow only some kind of memory 21604reference. 21605 21606 -- Function: memory_operand 21607 This predicate allows any valid reference to a quantity of mode 21608 MODE in memory, as determined by the weak form of 21609 'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 21610 21611 -- Function: address_operand 21612 This predicate is a little unusual; it allows any operand that is a 21613 valid expression for the _address_ of a quantity of mode MODE, 21614 again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'. 21615 To first order, if '(mem:MODE (EXP))' is acceptable to 21616 'memory_operand', then EXP is acceptable to 'address_operand'. 21617 Note that EXP does not necessarily have the mode MODE. 21618 21619 -- Function: indirect_operand 21620 This is a stricter form of 'memory_operand' which allows only 21621 memory references with a 'general_operand' as the address 21622 expression. New uses of this predicate are discouraged, because 21623 'general_operand' is very permissive, so it's hard to tell what an 21624 'indirect_operand' does or does not allow. If a target has 21625 different requirements for memory operands for different 21626 instructions, it is better to define target-specific predicates 21627 which enforce the hardware's requirements explicitly. 21628 21629 -- Function: push_operand 21630 This predicate allows a memory reference suitable for pushing a 21631 value onto the stack. This will be a 'MEM' which refers to 21632 'stack_pointer_rtx', with a side effect in its address expression 21633 (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE' 21634 macro (*note Frame Layout::). 21635 21636 -- Function: pop_operand 21637 This predicate allows a memory reference suitable for popping a 21638 value off the stack. Again, this will be a 'MEM' referring to 21639 'stack_pointer_rtx', with a side effect in its address expression. 21640 However, this time 'STACK_POP_CODE' is expected. 21641 21642The fourth category of predicates allow some combination of the above 21643operands. 21644 21645 -- Function: nonmemory_operand 21646 This predicate allows any immediate or register operand valid for 21647 MODE. 21648 21649 -- Function: nonimmediate_operand 21650 This predicate allows any register or memory operand valid for 21651 MODE. 21652 21653 -- Function: general_operand 21654 This predicate allows any immediate, register, or memory operand 21655 valid for MODE. 21656 21657Finally, there are two generic operator predicates. 21658 21659 -- Function: comparison_operator 21660 This predicate matches any expression which performs an arithmetic 21661 comparison in MODE; that is, 'COMPARISON_P' is true for the 21662 expression code. 21663 21664 -- Function: ordered_comparison_operator 21665 This predicate matches any expression which performs an arithmetic 21666 comparison in MODE and whose expression code is valid for integer 21667 modes; that is, the expression code will be one of 'eq', 'ne', 21668 'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'. 21669 21670 21671File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 21672 2167317.7.2 Defining Machine-Specific Predicates 21674------------------------------------------- 21675 21676Many machines have requirements for their operands that cannot be 21677expressed precisely using the generic predicates. You can define 21678additional predicates using 'define_predicate' and 21679'define_special_predicate' expressions. These expressions have three 21680operands: 21681 21682 * The name of the predicate, as it will be referred to in 21683 'match_operand' or 'match_operator' expressions. 21684 21685 * An RTL expression which evaluates to true if the predicate allows 21686 the operand OP, false if it does not. This expression can only use 21687 the following RTL codes: 21688 21689 'MATCH_OPERAND' 21690 When written inside a predicate expression, a 'MATCH_OPERAND' 21691 expression evaluates to true if the predicate it names would 21692 allow OP. The operand number and constraint are ignored. Due 21693 to limitations in 'genrecog', you can only refer to generic 21694 predicates and predicates that have already been defined. 21695 21696 'MATCH_CODE' 21697 This expression evaluates to true if OP or a specified 21698 subexpression of OP has one of a given list of RTX codes. 21699 21700 The first operand of this expression is a string constant 21701 containing a comma-separated list of RTX code names (in lower 21702 case). These are the codes for which the 'MATCH_CODE' will be 21703 true. 21704 21705 The second operand is a string constant which indicates what 21706 subexpression of OP to examine. If it is absent or the empty 21707 string, OP itself is examined. Otherwise, the string constant 21708 must be a sequence of digits and/or lowercase letters. Each 21709 character indicates a subexpression to extract from the 21710 current expression; for the first character this is OP, for 21711 the second and subsequent characters it is the result of the 21712 previous character. A digit N extracts 'XEXP (E, N)'; a 21713 letter L extracts 'XVECEXP (E, 0, N)' where N is the 21714 alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on). 21715 The 'MATCH_CODE' then examines the RTX code of the 21716 subexpression extracted by the complete string. It is not 21717 possible to extract components of an 'rtvec' that is not at 21718 position 0 within its RTX object. 21719 21720 'MATCH_TEST' 21721 This expression has one operand, a string constant containing 21722 a C expression. The predicate's arguments, OP and MODE, are 21723 available with those names in the C expression. The 21724 'MATCH_TEST' evaluates to true if the C expression evaluates 21725 to a nonzero value. 'MATCH_TEST' expressions must not have 21726 side effects. 21727 21728 'AND' 21729 'IOR' 21730 'NOT' 21731 'IF_THEN_ELSE' 21732 The basic 'MATCH_' expressions can be combined using these 21733 logical operators, which have the semantics of the C operators 21734 '&&', '||', '!', and '? :' respectively. As in Common Lisp, 21735 you may give an 'AND' or 'IOR' expression an arbitrary number 21736 of arguments; this has exactly the same effect as writing a 21737 chain of two-argument 'AND' or 'IOR' expressions. 21738 21739 * An optional block of C code, which should execute 'return true' if 21740 the predicate is found to match and 'return false' if it does not. 21741 It must not have any side effects. The predicate arguments, OP and 21742 MODE, are available with those names. 21743 21744 If a code block is present in a predicate definition, then the RTL 21745 expression must evaluate to true _and_ the code block must execute 21746 'return true' for the predicate to allow the operand. The RTL 21747 expression is evaluated first; do not re-check anything in the code 21748 block that was checked in the RTL expression. 21749 21750 The program 'genrecog' scans 'define_predicate' and 21751'define_special_predicate' expressions to determine which RTX codes are 21752possibly allowed. You should always make this explicit in the RTL 21753predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'. 21754 21755 Here is an example of a simple predicate definition, from the IA64 21756machine description: 21757 21758 ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section. 21759 (define_predicate "small_addr_symbolic_operand" 21760 (and (match_code "symbol_ref") 21761 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 21762 21763And here is another, showing the use of the C block. 21764 21765 ;; True if OP is a register operand that is (or could be) a GR reg. 21766 (define_predicate "gr_register_operand" 21767 (match_operand 0 "register_operand") 21768 { 21769 unsigned int regno; 21770 if (GET_CODE (op) == SUBREG) 21771 op = SUBREG_REG (op); 21772 21773 regno = REGNO (op); 21774 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 21775 }) 21776 21777 Predicates written with 'define_predicate' automatically include a test 21778that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a 21779'CONST_INT' or 'CONST_DOUBLE'. They do _not_ check specifically for 21780integer 'CONST_DOUBLE', nor do they test that the value of either kind 21781of constant fits in the requested mode. This is because target-specific 21782predicates that take constants usually have to do more stringent value 21783checks anyway. If you need the exact same treatment of 'CONST_INT' or 21784'CONST_DOUBLE' that the generic predicates provide, use a 21785'MATCH_OPERAND' subexpression to call 'const_int_operand', 21786'const_double_operand', or 'immediate_operand'. 21787 21788 Predicates written with 'define_special_predicate' do not get any 21789automatic mode checks, and are treated as having special mode handling 21790by 'genrecog'. 21791 21792 The program 'genpreds' is responsible for generating code to test 21793predicates. It also writes a header file containing function 21794declarations for all machine-specific predicates. It is not necessary 21795to declare these predicates in 'CPU-protos.h'. 21796 21797 21798File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 21799 2180017.8 Operand Constraints 21801======================== 21802 21803Each 'match_operand' in an instruction pattern can specify constraints 21804for the operands allowed. The constraints allow you to fine-tune 21805matching within the set of operands allowed by the predicate. 21806 21807 Constraints can say whether an operand may be in a register, and which 21808kinds of register; whether the operand can be a memory reference, and 21809which kinds of address; whether the operand may be an immediate 21810constant, and which possible values it may have. Constraints can also 21811require two operands to match. Side-effects aren't allowed in operands 21812of inline 'asm', unless '<' or '>' constraints are used, because there 21813is no guarantee that the side effects will happen exactly once in an 21814instruction that can update the addressing register. 21815 21816* Menu: 21817 21818* Simple Constraints:: Basic use of constraints. 21819* Multi-Alternative:: When an insn has two alternative constraint-patterns. 21820* Class Preferences:: Constraints guide which hard register to put things in. 21821* Modifiers:: More precise control over effects of constraints. 21822* Machine Constraints:: Existing constraints for some particular machines. 21823* Disable Insn Alternatives:: Disable insn alternatives using attributes. 21824* Define Constraints:: How to define machine-specific constraints. 21825* C Constraint Interface:: How to test constraints from C code. 21826 21827 21828File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 21829 2183017.8.1 Simple Constraints 21831------------------------- 21832 21833The simplest kind of constraint is a string full of letters, each of 21834which describes one kind of operand that is permitted. Here are the 21835letters that are allowed: 21836 21837whitespace 21838 Whitespace characters are ignored and can be inserted at any 21839 position except the first. This enables each alternative for 21840 different operands to be visually aligned in the machine 21841 description even if they have different number of constraints and 21842 modifiers. 21843 21844'm' 21845 A memory operand is allowed, with any kind of address that the 21846 machine supports in general. Note that the letter used for the 21847 general memory constraint can be re-defined by a back end using the 21848 'TARGET_MEM_CONSTRAINT' macro. 21849 21850'o' 21851 A memory operand is allowed, but only if the address is 21852 "offsettable". This means that adding a small integer (actually, 21853 the width in bytes of the operand, as determined by its machine 21854 mode) may be added to the address and the result is also a valid 21855 memory address. 21856 21857 For example, an address which is constant is offsettable; so is an 21858 address that is the sum of a register and a constant (as long as a 21859 slightly larger constant is also within the range of 21860 address-offsets supported by the machine); but an autoincrement or 21861 autodecrement address is not offsettable. More complicated 21862 indirect/indexed addresses may or may not be offsettable depending 21863 on the other addressing modes that the machine supports. 21864 21865 Note that in an output operand which can be matched by another 21866 operand, the constraint letter 'o' is valid only when accompanied 21867 by both '<' (if the target machine has predecrement addressing) and 21868 '>' (if the target machine has preincrement addressing). 21869 21870'V' 21871 A memory operand that is not offsettable. In other words, anything 21872 that would fit the 'm' constraint but not the 'o' constraint. 21873 21874'<' 21875 A memory operand with autodecrement addressing (either predecrement 21876 or postdecrement) is allowed. In inline 'asm' this constraint is 21877 only allowed if the operand is used exactly once in an instruction 21878 that can handle the side effects. Not using an operand with '<' in 21879 constraint string in the inline 'asm' pattern at all or using it in 21880 multiple instructions isn't valid, because the side effects 21881 wouldn't be performed or would be performed more than once. 21882 Furthermore, on some targets the operand with '<' in constraint 21883 string must be accompanied by special instruction suffixes like 21884 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 21885 21886'>' 21887 A memory operand with autoincrement addressing (either preincrement 21888 or postincrement) is allowed. In inline 'asm' the same 21889 restrictions as for '<' apply. 21890 21891'r' 21892 A register operand is allowed provided that it is in a general 21893 register. 21894 21895'i' 21896 An immediate integer operand (one with constant value) is allowed. 21897 This includes symbolic constants whose values will be known only at 21898 assembly time or later. 21899 21900'n' 21901 An immediate integer operand with a known numeric value is allowed. 21902 Many systems cannot support assembly-time constants for operands 21903 less than a word wide. Constraints for these operands should use 21904 'n' rather than 'i'. 21905 21906'I', 'J', 'K', ... 'P' 21907 Other letters in the range 'I' through 'P' may be defined in a 21908 machine-dependent fashion to permit immediate integer operands with 21909 explicit integer values in specified ranges. For example, on the 21910 68000, 'I' is defined to stand for the range of values 1 to 8. 21911 This is the range permitted as a shift count in the shift 21912 instructions. 21913 21914'E' 21915 An immediate floating operand (expression code 'const_double') is 21916 allowed, but only if the target floating point format is the same 21917 as that of the host machine (on which the compiler is running). 21918 21919'F' 21920 An immediate floating operand (expression code 'const_double' or 21921 'const_vector') is allowed. 21922 21923'G', 'H' 21924 'G' and 'H' may be defined in a machine-dependent fashion to permit 21925 immediate floating operands in particular ranges of values. 21926 21927's' 21928 An immediate integer operand whose value is not an explicit integer 21929 is allowed. 21930 21931 This might appear strange; if an insn allows a constant operand 21932 with a value not known at compile time, it certainly must allow any 21933 known value. So why use 's' instead of 'i'? Sometimes it allows 21934 better code to be generated. 21935 21936 For example, on the 68000 in a fullword instruction it is possible 21937 to use an immediate operand; but if the immediate value is between 21938 -128 and 127, better code results from loading the value into a 21939 register and using the register. This is because the load into the 21940 register can be done with a 'moveq' instruction. We arrange for 21941 this to happen by defining the letter 'K' to mean "any integer 21942 outside the range -128 to 127", and then specifying 'Ks' in the 21943 operand constraints. 21944 21945'g' 21946 Any register, memory or immediate integer operand is allowed, 21947 except for registers that are not general registers. 21948 21949'X' 21950 Any operand whatsoever is allowed, even if it does not satisfy 21951 'general_operand'. This is normally used in the constraint of a 21952 'match_scratch' when certain alternatives will not actually require 21953 a scratch register. 21954 21955'0', '1', '2', ... '9' 21956 An operand that matches the specified operand number is allowed. 21957 If a digit is used together with letters within the same 21958 alternative, the digit should come last. 21959 21960 This number is allowed to be more than a single digit. If multiple 21961 digits are encountered consecutively, they are interpreted as a 21962 single decimal integer. There is scant chance for ambiguity, since 21963 to-date it has never been desirable that '10' be interpreted as 21964 matching either operand 1 _or_ operand 0. Should this be desired, 21965 one can use multiple alternatives instead. 21966 21967 This is called a "matching constraint" and what it really means is 21968 that the assembler has only a single operand that fills two roles 21969 considered separate in the RTL insn. For example, an add insn has 21970 two input operands and one output operand in the RTL, but on most 21971 CISC machines an add instruction really has only two operands, one 21972 of them an input-output operand: 21973 21974 addl #35,r12 21975 21976 Matching constraints are used in these circumstances. More 21977 precisely, the two operands that match must include one input-only 21978 operand and one output-only operand. Moreover, the digit must be a 21979 smaller number than the number of the operand that uses it in the 21980 constraint. 21981 21982 For operands to match in a particular case usually means that they 21983 are identical-looking RTL expressions. But in a few special cases 21984 specific kinds of dissimilarity are allowed. For example, '*x' as 21985 an input operand will match '*x++' as an output operand. For 21986 proper results in such cases, the output template should always use 21987 the output-operand's number when printing the operand. 21988 21989'p' 21990 An operand that is a valid memory address is allowed. This is for 21991 "load address" and "push address" instructions. 21992 21993 'p' in the constraint must be accompanied by 'address_operand' as 21994 the predicate in the 'match_operand'. This predicate interprets 21995 the mode specified in the 'match_operand' as the mode of the memory 21996 reference for which the address would be valid. 21997 21998OTHER-LETTERS 21999 Other letters can be defined in machine-dependent fashion to stand 22000 for particular classes of registers or other arbitrary operand 22001 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 22002 for data, address and floating point registers. 22003 22004 In order to have valid assembler code, each operand must satisfy its 22005constraint. But a failure to do so does not prevent the pattern from 22006applying to an insn. Instead, it directs the compiler to modify the 22007code so that the constraint will be satisfied. Usually this is done by 22008copying an operand into a register. 22009 22010 Contrast, therefore, the two instruction patterns that follow: 22011 22012 (define_insn "" 22013 [(set (match_operand:SI 0 "general_operand" "=r") 22014 (plus:SI (match_dup 0) 22015 (match_operand:SI 1 "general_operand" "r")))] 22016 "" 22017 "...") 22018 22019which has two operands, one of which must appear in two places, and 22020 22021 (define_insn "" 22022 [(set (match_operand:SI 0 "general_operand" "=r") 22023 (plus:SI (match_operand:SI 1 "general_operand" "0") 22024 (match_operand:SI 2 "general_operand" "r")))] 22025 "" 22026 "...") 22027 22028which has three operands, two of which are required by a constraint to 22029be identical. If we are considering an insn of the form 22030 22031 (insn N PREV NEXT 22032 (set (reg:SI 3) 22033 (plus:SI (reg:SI 6) (reg:SI 109))) 22034 ...) 22035 22036the first pattern would not apply at all, because this insn does not 22037contain two identical subexpressions in the right place. The pattern 22038would say, "That does not look like an add instruction; try other 22039patterns". The second pattern would say, "Yes, that's an add 22040instruction, but there is something wrong with it". It would direct the 22041reload pass of the compiler to generate additional insns to make the 22042constraint true. The results might look like this: 22043 22044 (insn N2 PREV N 22045 (set (reg:SI 3) (reg:SI 6)) 22046 ...) 22047 22048 (insn N N2 NEXT 22049 (set (reg:SI 3) 22050 (plus:SI (reg:SI 3) (reg:SI 109))) 22051 ...) 22052 22053 It is up to you to make sure that each operand, in each pattern, has 22054constraints that can handle any RTL expression that could be present for 22055that operand. (When multiple alternatives are in use, each pattern 22056must, for each possible combination of operand expressions, have at 22057least one alternative which can handle that combination of operands.) 22058The constraints don't need to _allow_ any possible operand--when this is 22059the case, they do not constrain--but they must at least point the way to 22060reloading any possible operand so that it will fit. 22061 22062 * If the constraint accepts whatever operands the predicate permits, 22063 there is no problem: reloading is never necessary for this operand. 22064 22065 For example, an operand whose constraints permit everything except 22066 registers is safe provided its predicate rejects registers. 22067 22068 An operand whose predicate accepts only constant values is safe 22069 provided its constraints include the letter 'i'. If any possible 22070 constant value is accepted, then nothing less than 'i' will do; if 22071 the predicate is more selective, then the constraints may also be 22072 more selective. 22073 22074 * Any operand expression can be reloaded by copying it into a 22075 register. So if an operand's constraints allow some kind of 22076 register, it is certain to be safe. It need not permit all classes 22077 of registers; the compiler knows how to copy a register into 22078 another register of the proper class in order to make an 22079 instruction valid. 22080 22081 * A nonoffsettable memory reference can be reloaded by copying the 22082 address into a register. So if the constraint uses the letter 'o', 22083 all memory references are taken care of. 22084 22085 * A constant operand can be reloaded by allocating space in memory to 22086 hold it as preinitialized data. Then the memory reference can be 22087 used in place of the constant. So if the constraint uses the 22088 letters 'o' or 'm', constant operands are not a problem. 22089 22090 * If the constraint permits a constant and a pseudo register used in 22091 an insn was not allocated to a hard register and is equivalent to a 22092 constant, the register will be replaced with the constant. If the 22093 predicate does not permit a constant and the insn is re-recognized 22094 for some reason, the compiler will crash. Thus the predicate must 22095 always recognize any objects allowed by the constraint. 22096 22097 If the operand's predicate can recognize registers, but the constraint 22098does not permit them, it can make the compiler crash. When this operand 22099happens to be a register, the reload pass will be stymied, because it 22100does not know how to copy a register temporarily into memory. 22101 22102 If the predicate accepts a unary operator, the constraint applies to 22103the operand. For example, the MIPS processor at ISA level 3 supports an 22104instruction which adds two registers in 'SImode' to produce a 'DImode' 22105result, but only if the registers are correctly sign extended. This 22106predicate for the input operands accepts a 'sign_extend' of an 'SImode' 22107register. Write the constraint to indicate the type of register that is 22108required for the operand of the 'sign_extend'. 22109 22110 22111File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 22112 2211317.8.2 Multiple Alternative Constraints 22114--------------------------------------- 22115 22116Sometimes a single instruction has multiple alternative sets of possible 22117operands. For example, on the 68000, a logical-or instruction can 22118combine register or an immediate value into memory, or it can combine 22119any kind of operand into a register; but it cannot combine one memory 22120location into another. 22121 22122 These constraints are represented as multiple alternatives. An 22123alternative can be described by a series of letters for each operand. 22124The overall constraint for an operand is made from the letters for this 22125operand from the first alternative, a comma, the letters for this 22126operand from the second alternative, a comma, and so on until the last 22127alternative. All operands for a single instruction must have the same 22128number of alternatives. Here is how it is done for fullword logical-or 22129on the 68000: 22130 22131 (define_insn "iorsi3" 22132 [(set (match_operand:SI 0 "general_operand" "=m,d") 22133 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 22134 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 22135 ...) 22136 22137 The first alternative has 'm' (memory) for operand 0, '0' for operand 1 22138(meaning it must match operand 0), and 'dKs' for operand 2. The second 22139alternative has 'd' (data register) for operand 0, '0' for operand 1, 22140and 'dmKs' for operand 2. The '=' and '%' in the constraints apply to 22141all the alternatives; their meaning is explained in the next section 22142(*note Class Preferences::). 22143 22144 If all the operands fit any one alternative, the instruction is valid. 22145Otherwise, for each alternative, the compiler counts how many 22146instructions must be added to copy the operands so that that alternative 22147applies. The alternative requiring the least copying is chosen. If two 22148alternatives need the same amount of copying, the one that comes first 22149is chosen. These choices can be altered with the '?' and '!' 22150characters: 22151 22152'?' 22153 Disparage slightly the alternative that the '?' appears in, as a 22154 choice when no alternative applies exactly. The compiler regards 22155 this alternative as one unit more costly for each '?' that appears 22156 in it. 22157 22158'!' 22159 Disparage severely the alternative that the '!' appears in. This 22160 alternative can still be used if it fits without reloading, but if 22161 reloading is needed, some other alternative will be used. 22162 22163'^' 22164 This constraint is analogous to '?' but it disparages slightly the 22165 alternative only if the operand with the '^' needs a reload. 22166 22167'$' 22168 This constraint is analogous to '!' but it disparages severely the 22169 alternative only if the operand with the '$' needs a reload. 22170 22171 When an insn pattern has multiple alternatives in its constraints, 22172often the appearance of the assembler code is determined mostly by which 22173alternative was matched. When this is so, the C code for writing the 22174assembler code can use the variable 'which_alternative', which is the 22175ordinal number of the alternative that was actually satisfied (0 for the 22176first, 1 for the second alternative, etc.). *Note Output Statement::. 22177 22178 22179File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 22180 2218117.8.3 Register Class Preferences 22182--------------------------------- 22183 22184The operand constraints have another function: they enable the compiler 22185to decide which kind of hardware register a pseudo register is best 22186allocated to. The compiler examines the constraints that apply to the 22187insns that use the pseudo register, looking for the machine-dependent 22188letters such as 'd' and 'a' that specify classes of registers. The 22189pseudo register is put in whichever class gets the most "votes". The 22190constraint letters 'g' and 'r' also vote: they vote in favor of a 22191general register. The machine description says which registers are 22192considered general. 22193 22194 Of course, on some machines all registers are equivalent, and no 22195register classes are defined. Then none of this complexity is relevant. 22196 22197 22198File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 22199 2220017.8.4 Constraint Modifier Characters 22201------------------------------------- 22202 22203Here are constraint modifier characters. 22204 22205'=' 22206 Means that this operand is written to by this instruction: the 22207 previous value is discarded and replaced by new data. 22208 22209'+' 22210 Means that this operand is both read and written by the 22211 instruction. 22212 22213 When the compiler fixes up the operands to satisfy the constraints, 22214 it needs to know which operands are read by the instruction and 22215 which are written by it. '=' identifies an operand which is only 22216 written; '+' identifies an operand that is both read and written; 22217 all other operands are assumed to only be read. 22218 22219 If you specify '=' or '+' in a constraint, you put it in the first 22220 character of the constraint string. 22221 22222'&' 22223 Means (in a particular alternative) that this operand is an 22224 "earlyclobber" operand, which is written before the instruction is 22225 finished using the input operands. Therefore, this operand may not 22226 lie in a register that is read by the instruction or as part of any 22227 memory address. 22228 22229 '&' applies only to the alternative in which it is written. In 22230 constraints with multiple alternatives, sometimes one alternative 22231 requires '&' while others do not. See, for example, the 'movdf' 22232 insn of the 68000. 22233 22234 A operand which is read by the instruction can be tied to an 22235 earlyclobber operand if its only use as an input occurs before the 22236 early result is written. Adding alternatives of this form often 22237 allows GCC to produce better code when only some of the read 22238 operands can be affected by the earlyclobber. See, for example, 22239 the 'mulsi3' insn of the ARM. 22240 22241 Furthermore, if the "earlyclobber" operand is also a read/write 22242 operand, then that operand is written only after it's used. 22243 22244 '&' does not obviate the need to write '=' or '+'. As 22245 "earlyclobber" operands are always written, a read-only 22246 "earlyclobber" operand is ill-formed and will be rejected by the 22247 compiler. 22248 22249'%' 22250 Declares the instruction to be commutative for this operand and the 22251 following operand. This means that the compiler may interchange 22252 the two operands if that is the cheapest way to make all operands 22253 fit the constraints. '%' applies to all alternatives and must 22254 appear as the first character in the constraint. Only read-only 22255 operands can use '%'. 22256 22257 This is often used in patterns for addition instructions that 22258 really have only two operands: the result must go in one of the 22259 arguments. Here for example, is how the 68000 halfword-add 22260 instruction is defined: 22261 22262 (define_insn "addhi3" 22263 [(set (match_operand:HI 0 "general_operand" "=m,r") 22264 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 22265 (match_operand:HI 2 "general_operand" "di,g")))] 22266 ...) 22267 GCC can only handle one commutative pair in an asm; if you use 22268 more, the compiler may fail. Note that you need not use the 22269 modifier if the two alternatives are strictly identical; this would 22270 only waste time in the reload pass. The modifier is not 22271 operational after register allocation, so the result of 22272 'define_peephole2' and 'define_split's performed after reload 22273 cannot rely on '%' to make the intended insn match. 22274 22275'#' 22276 Says that all following characters, up to the next comma, are to be 22277 ignored as a constraint. They are significant only for choosing 22278 register preferences. 22279 22280'*' 22281 Says that the following character should be ignored when choosing 22282 register preferences. '*' has no effect on the meaning of the 22283 constraint as a constraint, and no effect on reloading. For LRA 22284 '*' additionally disparages slightly the alternative if the 22285 following character matches the operand. 22286 22287 Here is an example: the 68000 has an instruction to sign-extend a 22288 halfword in a data register, and can also sign-extend a value by 22289 copying it into an address register. While either kind of register 22290 is acceptable, the constraints on an address-register destination 22291 are less strict, so it is best if register allocation makes an 22292 address register its goal. Therefore, '*' is used so that the 'd' 22293 constraint letter (for data register) is ignored when computing 22294 register preferences. 22295 22296 (define_insn "extendhisi2" 22297 [(set (match_operand:SI 0 "general_operand" "=*d,a") 22298 (sign_extend:SI 22299 (match_operand:HI 1 "general_operand" "0,g")))] 22300 ...) 22301 22302 22303File: gccint.info, Node: Machine Constraints, Next: Disable Insn Alternatives, Prev: Modifiers, Up: Constraints 22304 2230517.8.5 Constraints for Particular Machines 22306------------------------------------------ 22307 22308Whenever possible, you should use the general-purpose constraint letters 22309in 'asm' arguments, since they will convey meaning more readily to 22310people reading your code. Failing that, use the constraint letters that 22311usually have very similar meanings across architectures. The most 22312commonly used constraints are 'm' and 'r' (for memory and 22313general-purpose registers respectively; *note Simple Constraints::), and 22314'I', usually the letter indicating the most common immediate-constant 22315format. 22316 22317 Each architecture defines additional constraints. These constraints 22318are used by the compiler itself for instruction generation, as well as 22319for 'asm' statements; therefore, some of the constraints are not 22320particularly useful for 'asm'. Here is a summary of some of the 22321machine-dependent constraints available on some particular machines; it 22322includes both constraints that are useful for 'asm' and constraints that 22323aren't. The compiler source file mentioned in the table heading for 22324each architecture is the definitive reference for the meanings of that 22325architecture's constraints. 22326 22327_AArch64 family--'config/aarch64/constraints.md'_ 22328 'k' 22329 The stack pointer register ('SP') 22330 22331 'w' 22332 Floating point register, Advanced SIMD vector register or SVE 22333 vector register 22334 22335 'x' 22336 Like 'w', but restricted to registers 0 to 15 inclusive. 22337 22338 'y' 22339 Like 'w', but restricted to registers 0 to 7 inclusive. 22340 22341 'Upl' 22342 One of the low eight SVE predicate registers ('P0' to 'P7') 22343 22344 'Upa' 22345 Any of the SVE predicate registers ('P0' to 'P15') 22346 22347 'I' 22348 Integer constant that is valid as an immediate operand in an 22349 'ADD' instruction 22350 22351 'J' 22352 Integer constant that is valid as an immediate operand in a 22353 'SUB' instruction (once negated) 22354 22355 'K' 22356 Integer constant that can be used with a 32-bit logical 22357 instruction 22358 22359 'L' 22360 Integer constant that can be used with a 64-bit logical 22361 instruction 22362 22363 'M' 22364 Integer constant that is valid as an immediate operand in a 22365 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 22366 to one of several different machine instructions depending on 22367 the value 22368 22369 'N' 22370 Integer constant that is valid as an immediate operand in a 22371 64-bit 'MOV' pseudo instruction 22372 22373 'S' 22374 An absolute symbolic address or a label reference 22375 22376 'Y' 22377 Floating point constant zero 22378 22379 'Z' 22380 Integer constant zero 22381 22382 'Ush' 22383 The high part (bits 12 and upwards) of the pc-relative address 22384 of a symbol within 4GB of the instruction 22385 22386 'Q' 22387 A memory address which uses a single base register with no 22388 offset 22389 22390 'Ump' 22391 A memory address suitable for a load/store pair instruction in 22392 SI, DI, SF and DF modes 22393 22394_AMD GCN --'config/gcn/constraints.md'_ 22395 'I' 22396 Immediate integer in the range -16 to 64 22397 22398 'J' 22399 Immediate 16-bit signed integer 22400 22401 'Kf' 22402 Immediate constant -1 22403 22404 'L' 22405 Immediate 15-bit unsigned integer 22406 22407 'A' 22408 Immediate constant that can be inlined in an instruction 22409 encoding: integer -16..64, or float 0.0, +/-0.5, +/-1.0, 22410 +/-2.0, +/-4.0, 1.0/(2.0*PI) 22411 22412 'B' 22413 Immediate 32-bit signed integer that can be attached to an 22414 instruction encoding 22415 22416 'C' 22417 Immediate 32-bit integer in range -16..4294967295 (i.e. 22418 32-bit unsigned integer or 'A' constraint) 22419 22420 'DA' 22421 Immediate 64-bit constant that can be split into two 'A' 22422 constants 22423 22424 'DB' 22425 Immediate 64-bit constant that can be split into two 'B' 22426 constants 22427 22428 'U' 22429 Any 'unspec' 22430 22431 'Y' 22432 Any 'symbol_ref' or 'label_ref' 22433 22434 'v' 22435 VGPR register 22436 22437 'Sg' 22438 SGPR register 22439 22440 'SD' 22441 SGPR registers valid for instruction destinations, including 22442 VCC, M0 and EXEC 22443 22444 'SS' 22445 SGPR registers valid for instruction sources, including VCC, 22446 M0, EXEC and SCC 22447 22448 'Sm' 22449 SGPR registers valid as a source for scalar memory 22450 instructions (excludes M0 and EXEC) 22451 22452 'Sv' 22453 SGPR registers valid as a source or destination for vector 22454 instructions (excludes EXEC) 22455 22456 'ca' 22457 All condition registers: SCC, VCCZ, EXECZ 22458 22459 'cs' 22460 Scalar condition register: SCC 22461 22462 'cV' 22463 Vector condition register: VCC, VCC_LO, VCC_HI 22464 22465 'e' 22466 EXEC register (EXEC_LO and EXEC_HI) 22467 22468 'RB' 22469 Memory operand with address space suitable for 'buffer_*' 22470 instructions 22471 22472 'RF' 22473 Memory operand with address space suitable for 'flat_*' 22474 instructions 22475 22476 'RS' 22477 Memory operand with address space suitable for 's_*' 22478 instructions 22479 22480 'RL' 22481 Memory operand with address space suitable for 'ds_*' LDS 22482 instructions 22483 22484 'RG' 22485 Memory operand with address space suitable for 'ds_*' GDS 22486 instructions 22487 22488 'RD' 22489 Memory operand with address space suitable for any 'ds_*' 22490 instructions 22491 22492 'RM' 22493 Memory operand with address space suitable for 'global_*' 22494 instructions 22495 22496_ARC --'config/arc/constraints.md'_ 22497 'q' 22498 Registers usable in ARCompact 16-bit instructions: 'r0'-'r3', 22499 'r12'-'r15'. This constraint can only match when the '-mq' 22500 option is in effect. 22501 22502 'e' 22503 Registers usable as base-regs of memory addresses in ARCompact 22504 16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'. 22505 This constraint can only match when the '-mq' option is in 22506 effect. 22507 'D' 22508 ARC FPX (dpfp) 64-bit registers. 'D0', 'D1'. 22509 22510 'I' 22511 A signed 12-bit integer constant. 22512 22513 'Cal' 22514 constant for arithmetic/logical operations. This might be any 22515 constant that can be put into a long immediate by the assmbler 22516 or linker without involving a PIC relocation. 22517 22518 'K' 22519 A 3-bit unsigned integer constant. 22520 22521 'L' 22522 A 6-bit unsigned integer constant. 22523 22524 'CnL' 22525 One's complement of a 6-bit unsigned integer constant. 22526 22527 'CmL' 22528 Two's complement of a 6-bit unsigned integer constant. 22529 22530 'M' 22531 A 5-bit unsigned integer constant. 22532 22533 'O' 22534 A 7-bit unsigned integer constant. 22535 22536 'P' 22537 A 8-bit unsigned integer constant. 22538 22539 'H' 22540 Any const_double value. 22541 22542_ARM family--'config/arm/constraints.md'_ 22543 22544 'h' 22545 In Thumb state, the core registers 'r8'-'r15'. 22546 22547 'k' 22548 The stack pointer register. 22549 22550 'l' 22551 In Thumb State the core registers 'r0'-'r7'. In ARM state 22552 this is an alias for the 'r' constraint. 22553 22554 't' 22555 VFP floating-point registers 's0'-'s31'. Used for 32 bit 22556 values. 22557 22558 'w' 22559 VFP floating-point registers 'd0'-'d31' and the appropriate 22560 subset 'd0'-'d15' based on command line options. Used for 64 22561 bit values only. Not valid for Thumb1. 22562 22563 'y' 22564 The iWMMX co-processor registers. 22565 22566 'z' 22567 The iWMMX GR registers. 22568 22569 'G' 22570 The floating-point constant 0.0 22571 22572 'I' 22573 Integer that is valid as an immediate operand in a data 22574 processing instruction. That is, an integer in the range 0 to 22575 255 rotated by a multiple of 2 22576 22577 'J' 22578 Integer in the range -4095 to 4095 22579 22580 'K' 22581 Integer that satisfies constraint 'I' when inverted (ones 22582 complement) 22583 22584 'L' 22585 Integer that satisfies constraint 'I' when negated (twos 22586 complement) 22587 22588 'M' 22589 Integer in the range 0 to 32 22590 22591 'Q' 22592 A memory reference where the exact address is in a single 22593 register (''m'' is preferable for 'asm' statements) 22594 22595 'R' 22596 An item in the constant pool 22597 22598 'S' 22599 A symbol in the text segment of the current file 22600 22601 'Uv' 22602 A memory reference suitable for VFP load/store insns 22603 (reg+constant offset) 22604 22605 'Uy' 22606 A memory reference suitable for iWMMXt load/store 22607 instructions. 22608 22609 'Uq' 22610 A memory reference suitable for the ARMv4 ldrsb instruction. 22611 22612_AVR family--'config/avr/constraints.md'_ 22613 'l' 22614 Registers from r0 to r15 22615 22616 'a' 22617 Registers from r16 to r23 22618 22619 'd' 22620 Registers from r16 to r31 22621 22622 'w' 22623 Registers from r24 to r31. These registers can be used in 22624 'adiw' command 22625 22626 'e' 22627 Pointer register (r26-r31) 22628 22629 'b' 22630 Base pointer register (r28-r31) 22631 22632 'q' 22633 Stack pointer register (SPH:SPL) 22634 22635 't' 22636 Temporary register r0 22637 22638 'x' 22639 Register pair X (r27:r26) 22640 22641 'y' 22642 Register pair Y (r29:r28) 22643 22644 'z' 22645 Register pair Z (r31:r30) 22646 22647 'I' 22648 Constant greater than -1, less than 64 22649 22650 'J' 22651 Constant greater than -64, less than 1 22652 22653 'K' 22654 Constant integer 2 22655 22656 'L' 22657 Constant integer 0 22658 22659 'M' 22660 Constant that fits in 8 bits 22661 22662 'N' 22663 Constant integer -1 22664 22665 'O' 22666 Constant integer 8, 16, or 24 22667 22668 'P' 22669 Constant integer 1 22670 22671 'G' 22672 A floating point constant 0.0 22673 22674 'Q' 22675 A memory address based on Y or Z pointer with displacement. 22676 22677_Blackfin family--'config/bfin/constraints.md'_ 22678 'a' 22679 P register 22680 22681 'd' 22682 D register 22683 22684 'z' 22685 A call clobbered P register. 22686 22687 'qN' 22688 A single register. If N is in the range 0 to 7, the 22689 corresponding D register. If it is 'A', then the register P0. 22690 22691 'D' 22692 Even-numbered D register 22693 22694 'W' 22695 Odd-numbered D register 22696 22697 'e' 22698 Accumulator register. 22699 22700 'A' 22701 Even-numbered accumulator register. 22702 22703 'B' 22704 Odd-numbered accumulator register. 22705 22706 'b' 22707 I register 22708 22709 'v' 22710 B register 22711 22712 'f' 22713 M register 22714 22715 'c' 22716 Registers used for circular buffering, i.e. I, B, or L 22717 registers. 22718 22719 'C' 22720 The CC register. 22721 22722 't' 22723 LT0 or LT1. 22724 22725 'k' 22726 LC0 or LC1. 22727 22728 'u' 22729 LB0 or LB1. 22730 22731 'x' 22732 Any D, P, B, M, I or L register. 22733 22734 'y' 22735 Additional registers typically used only in prologues and 22736 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 22737 USP. 22738 22739 'w' 22740 Any register except accumulators or CC. 22741 22742 'Ksh' 22743 Signed 16 bit integer (in the range -32768 to 32767) 22744 22745 'Kuh' 22746 Unsigned 16 bit integer (in the range 0 to 65535) 22747 22748 'Ks7' 22749 Signed 7 bit integer (in the range -64 to 63) 22750 22751 'Ku7' 22752 Unsigned 7 bit integer (in the range 0 to 127) 22753 22754 'Ku5' 22755 Unsigned 5 bit integer (in the range 0 to 31) 22756 22757 'Ks4' 22758 Signed 4 bit integer (in the range -8 to 7) 22759 22760 'Ks3' 22761 Signed 3 bit integer (in the range -3 to 4) 22762 22763 'Ku3' 22764 Unsigned 3 bit integer (in the range 0 to 7) 22765 22766 'PN' 22767 Constant N, where N is a single-digit constant in the range 0 22768 to 4. 22769 22770 'PA' 22771 An integer equal to one of the MACFLAG_XXX constants that is 22772 suitable for use with either accumulator. 22773 22774 'PB' 22775 An integer equal to one of the MACFLAG_XXX constants that is 22776 suitable for use only with accumulator A1. 22777 22778 'M1' 22779 Constant 255. 22780 22781 'M2' 22782 Constant 65535. 22783 22784 'J' 22785 An integer constant with exactly a single bit set. 22786 22787 'L' 22788 An integer constant with all bits set except exactly one. 22789 22790 'H' 22791 22792 'Q' 22793 Any SYMBOL_REF. 22794 22795_CR16 Architecture--'config/cr16/cr16.h'_ 22796 22797 'b' 22798 Registers from r0 to r14 (registers without stack pointer) 22799 22800 't' 22801 Register from r0 to r11 (all 16-bit registers) 22802 22803 'p' 22804 Register from r12 to r15 (all 32-bit registers) 22805 22806 'I' 22807 Signed constant that fits in 4 bits 22808 22809 'J' 22810 Signed constant that fits in 5 bits 22811 22812 'K' 22813 Signed constant that fits in 6 bits 22814 22815 'L' 22816 Unsigned constant that fits in 4 bits 22817 22818 'M' 22819 Signed constant that fits in 32 bits 22820 22821 'N' 22822 Check for 64 bits wide constants for add/sub instructions 22823 22824 'G' 22825 Floating point constant that is legal for store immediate 22826 22827_C-SKY--'config/csky/constraints.md'_ 22828 22829 'a' 22830 The mini registers r0 - r7. 22831 22832 'b' 22833 The low registers r0 - r15. 22834 22835 'c' 22836 C register. 22837 22838 'y' 22839 HI and LO registers. 22840 22841 'l' 22842 LO register. 22843 22844 'h' 22845 HI register. 22846 22847 'v' 22848 Vector registers. 22849 22850 'z' 22851 Stack pointer register (SP). 22852 22853 The C-SKY back end supports a large set of additional constraints 22854 that are only useful for instruction selection or splitting rather 22855 than inline asm, such as constraints representing constant integer 22856 ranges accepted by particular instruction encodings. Refer to the 22857 source code for details. 22858 22859_Epiphany--'config/epiphany/constraints.md'_ 22860 'U16' 22861 An unsigned 16-bit constant. 22862 22863 'K' 22864 An unsigned 5-bit constant. 22865 22866 'L' 22867 A signed 11-bit constant. 22868 22869 'Cm1' 22870 A signed 11-bit constant added to -1. Can only match when the 22871 '-m1reg-REG' option is active. 22872 22873 'Cl1' 22874 Left-shift of -1, i.e., a bit mask with a block of leading 22875 ones, the rest being a block of trailing zeroes. Can only 22876 match when the '-m1reg-REG' option is active. 22877 22878 'Cr1' 22879 Right-shift of -1, i.e., a bit mask with a trailing block of 22880 ones, the rest being zeroes. Or to put it another way, one 22881 less than a power of two. Can only match when the 22882 '-m1reg-REG' option is active. 22883 22884 'Cal' 22885 Constant for arithmetic/logical operations. This is like 'i', 22886 except that for position independent code, no symbols / 22887 expressions needing relocations are allowed. 22888 22889 'Csy' 22890 Symbolic constant for call/jump instruction. 22891 22892 'Rcs' 22893 The register class usable in short insns. This is a register 22894 class constraint, and can thus drive register allocation. 22895 This constraint won't match unless '-mprefer-short-insn-regs' 22896 is in effect. 22897 22898 'Rsc' 22899 The the register class of registers that can be used to hold a 22900 sibcall call address. I.e., a caller-saved register. 22901 22902 'Rct' 22903 Core control register class. 22904 22905 'Rgs' 22906 The register group usable in short insns. This constraint 22907 does not use a register class, so that it only passively 22908 matches suitable registers, and doesn't drive register 22909 allocation. 22910 22911 'Car' 22912 Constant suitable for the addsi3_r pattern. This is a valid 22913 offset For byte, halfword, or word addressing. 22914 22915 'Rra' 22916 Matches the return address if it can be replaced with the link 22917 register. 22918 22919 'Rcc' 22920 Matches the integer condition code register. 22921 22922 'Sra' 22923 Matches the return address if it is in a stack slot. 22924 22925 'Cfm' 22926 Matches control register values to switch fp mode, which are 22927 encapsulated in 'UNSPEC_FP_MODE'. 22928 22929_FRV--'config/frv/frv.h'_ 22930 'a' 22931 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 22932 22933 'b' 22934 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 22935 22936 'c' 22937 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 22938 to 'icc3'). 22939 22940 'd' 22941 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 22942 22943 'e' 22944 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 22945 registers are excluded not in the class but through the use of 22946 a machine mode larger than 4 bytes. 22947 22948 'f' 22949 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 22950 22951 'h' 22952 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 22953 registers are excluded not in the class but through the use of 22954 a machine mode larger than 4 bytes. 22955 22956 'l' 22957 Register in the class 'LR_REG' (the 'lr' register). 22958 22959 'q' 22960 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 22961 numbers not divisible by 4 are excluded not in the class but 22962 through the use of a machine mode larger than 8 bytes. 22963 22964 't' 22965 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 22966 22967 'u' 22968 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 22969 22970 'v' 22971 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 22972 22973 'w' 22974 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 22975 22976 'x' 22977 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 22978 Register numbers not divisible by 4 are excluded not in the 22979 class but through the use of a machine mode larger than 8 22980 bytes. 22981 22982 'z' 22983 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 22984 22985 'A' 22986 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 22987 22988 'B' 22989 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 22990 22991 'C' 22992 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 22993 22994 'G' 22995 Floating point constant zero 22996 22997 'I' 22998 6-bit signed integer constant 22999 23000 'J' 23001 10-bit signed integer constant 23002 23003 'L' 23004 16-bit signed integer constant 23005 23006 'M' 23007 16-bit unsigned integer constant 23008 23009 'N' 23010 12-bit signed integer constant that is negative--i.e. in the 23011 range of -2048 to -1 23012 23013 'O' 23014 Constant zero 23015 23016 'P' 23017 12-bit signed integer constant that is greater than zero--i.e. 23018 in the range of 1 to 2047. 23019 23020_FT32--'config/ft32/constraints.md'_ 23021 'A' 23022 An absolute address 23023 23024 'B' 23025 An offset address 23026 23027 'W' 23028 A register indirect memory operand 23029 23030 'e' 23031 An offset address. 23032 23033 'f' 23034 An offset address. 23035 23036 'O' 23037 The constant zero or one 23038 23039 'I' 23040 A 16-bit signed constant (-32768 ... 32767) 23041 23042 'w' 23043 A bitfield mask suitable for bext or bins 23044 23045 'x' 23046 An inverted bitfield mask suitable for bext or bins 23047 23048 'L' 23049 A 16-bit unsigned constant, multiple of 4 (0 ... 65532) 23050 23051 'S' 23052 A 20-bit signed constant (-524288 ... 524287) 23053 23054 'b' 23055 A constant for a bitfield width (1 ... 16) 23056 23057 'KA' 23058 A 10-bit signed constant (-512 ... 511) 23059 23060_Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 23061 'a' 23062 General register 1 23063 23064 'f' 23065 Floating point register 23066 23067 'q' 23068 Shift amount register 23069 23070 'x' 23071 Floating point register (deprecated) 23072 23073 'y' 23074 Upper floating point register (32-bit), floating point 23075 register (64-bit) 23076 23077 'Z' 23078 Any register 23079 23080 'I' 23081 Signed 11-bit integer constant 23082 23083 'J' 23084 Signed 14-bit integer constant 23085 23086 'K' 23087 Integer constant that can be deposited with a 'zdepi' 23088 instruction 23089 23090 'L' 23091 Signed 5-bit integer constant 23092 23093 'M' 23094 Integer constant 0 23095 23096 'N' 23097 Integer constant that can be loaded with a 'ldil' instruction 23098 23099 'O' 23100 Integer constant whose value plus one is a power of 2 23101 23102 'P' 23103 Integer constant that can be used for 'and' operations in 23104 'depi' and 'extru' instructions 23105 23106 'S' 23107 Integer constant 31 23108 23109 'U' 23110 Integer constant 63 23111 23112 'G' 23113 Floating-point constant 0.0 23114 23115 'A' 23116 A 'lo_sum' data-linkage-table memory operand 23117 23118 'Q' 23119 A memory operand that can be used as the destination operand 23120 of an integer store instruction 23121 23122 'R' 23123 A scaled or unscaled indexed memory operand 23124 23125 'T' 23126 A memory operand for floating-point loads and stores 23127 23128 'W' 23129 A register indirect memory operand 23130 23131_Intel IA-64--'config/ia64/ia64.h'_ 23132 'a' 23133 General register 'r0' to 'r3' for 'addl' instruction 23134 23135 'b' 23136 Branch register 23137 23138 'c' 23139 Predicate register ('c' as in "conditional") 23140 23141 'd' 23142 Application register residing in M-unit 23143 23144 'e' 23145 Application register residing in I-unit 23146 23147 'f' 23148 Floating-point register 23149 23150 'm' 23151 Memory operand. If used together with '<' or '>', the operand 23152 can have postincrement and postdecrement which require 23153 printing with '%Pn' on IA-64. 23154 23155 'G' 23156 Floating-point constant 0.0 or 1.0 23157 23158 'I' 23159 14-bit signed integer constant 23160 23161 'J' 23162 22-bit signed integer constant 23163 23164 'K' 23165 8-bit signed integer constant for logical instructions 23166 23167 'L' 23168 8-bit adjusted signed integer constant for compare pseudo-ops 23169 23170 'M' 23171 6-bit unsigned integer constant for shift counts 23172 23173 'N' 23174 9-bit signed integer constant for load and store 23175 postincrements 23176 23177 'O' 23178 The constant zero 23179 23180 'P' 23181 0 or -1 for 'dep' instruction 23182 23183 'Q' 23184 Non-volatile memory for floating-point loads and stores 23185 23186 'R' 23187 Integer constant in the range 1 to 4 for 'shladd' instruction 23188 23189 'S' 23190 Memory operand except postincrement and postdecrement. This 23191 is now roughly the same as 'm' when not used together with '<' 23192 or '>'. 23193 23194_M32C--'config/m32c/m32c.c'_ 23195 'Rsp' 23196 'Rfb' 23197 'Rsb' 23198 '$sp', '$fb', '$sb'. 23199 23200 'Rcr' 23201 Any control register, when they're 16 bits wide (nothing if 23202 control registers are 24 bits wide) 23203 23204 'Rcl' 23205 Any control register, when they're 24 bits wide. 23206 23207 'R0w' 23208 'R1w' 23209 'R2w' 23210 'R3w' 23211 $r0, $r1, $r2, $r3. 23212 23213 'R02' 23214 $r0 or $r2, or $r2r0 for 32 bit values. 23215 23216 'R13' 23217 $r1 or $r3, or $r3r1 for 32 bit values. 23218 23219 'Rdi' 23220 A register that can hold a 64 bit value. 23221 23222 'Rhl' 23223 $r0 or $r1 (registers with addressable high/low bytes) 23224 23225 'R23' 23226 $r2 or $r3 23227 23228 'Raa' 23229 Address registers 23230 23231 'Raw' 23232 Address registers when they're 16 bits wide. 23233 23234 'Ral' 23235 Address registers when they're 24 bits wide. 23236 23237 'Rqi' 23238 Registers that can hold QI values. 23239 23240 'Rad' 23241 Registers that can be used with displacements ($a0, $a1, $sb). 23242 23243 'Rsi' 23244 Registers that can hold 32 bit values. 23245 23246 'Rhi' 23247 Registers that can hold 16 bit values. 23248 23249 'Rhc' 23250 Registers chat can hold 16 bit values, including all control 23251 registers. 23252 23253 'Rra' 23254 $r0 through R1, plus $a0 and $a1. 23255 23256 'Rfl' 23257 The flags register. 23258 23259 'Rmm' 23260 The memory-based pseudo-registers $mem0 through $mem15. 23261 23262 'Rpi' 23263 Registers that can hold pointers (16 bit registers for r8c, 23264 m16c; 24 bit registers for m32cm, m32c). 23265 23266 'Rpa' 23267 Matches multiple registers in a PARALLEL to form a larger 23268 register. Used to match function return values. 23269 23270 'Is3' 23271 -8 ... 7 23272 23273 'IS1' 23274 -128 ... 127 23275 23276 'IS2' 23277 -32768 ... 32767 23278 23279 'IU2' 23280 0 ... 65535 23281 23282 'In4' 23283 -8 ... -1 or 1 ... 8 23284 23285 'In5' 23286 -16 ... -1 or 1 ... 16 23287 23288 'In6' 23289 -32 ... -1 or 1 ... 32 23290 23291 'IM2' 23292 -65536 ... -1 23293 23294 'Ilb' 23295 An 8 bit value with exactly one bit set. 23296 23297 'Ilw' 23298 A 16 bit value with exactly one bit set. 23299 23300 'Sd' 23301 The common src/dest memory addressing modes. 23302 23303 'Sa' 23304 Memory addressed using $a0 or $a1. 23305 23306 'Si' 23307 Memory addressed with immediate addresses. 23308 23309 'Ss' 23310 Memory addressed using the stack pointer ($sp). 23311 23312 'Sf' 23313 Memory addressed using the frame base register ($fb). 23314 23315 'Ss' 23316 Memory addressed using the small base register ($sb). 23317 23318 'S1' 23319 $r1h 23320 23321_MicroBlaze--'config/microblaze/constraints.md'_ 23322 'd' 23323 A general register ('r0' to 'r31'). 23324 23325 'z' 23326 A status register ('rmsr', '$fcc1' to '$fcc7'). 23327 23328_MIPS--'config/mips/constraints.md'_ 23329 'd' 23330 A general-purpose register. This is equivalent to 'r' unless 23331 generating MIPS16 code, in which case the MIPS16 register set 23332 is used. 23333 23334 'f' 23335 A floating-point register (if available). 23336 23337 'h' 23338 Formerly the 'hi' register. This constraint is no longer 23339 supported. 23340 23341 'l' 23342 The 'lo' register. Use this register to store values that are 23343 no bigger than a word. 23344 23345 'x' 23346 The concatenated 'hi' and 'lo' registers. Use this register 23347 to store doubleword values. 23348 23349 'c' 23350 A register suitable for use in an indirect jump. This will 23351 always be '$25' for '-mabicalls'. 23352 23353 'v' 23354 Register '$3'. Do not use this constraint in new code; it is 23355 retained only for compatibility with glibc. 23356 23357 'y' 23358 Equivalent to 'r'; retained for backwards compatibility. 23359 23360 'z' 23361 A floating-point condition code register. 23362 23363 'I' 23364 A signed 16-bit constant (for arithmetic instructions). 23365 23366 'J' 23367 Integer zero. 23368 23369 'K' 23370 An unsigned 16-bit constant (for logic instructions). 23371 23372 'L' 23373 A signed 32-bit constant in which the lower 16 bits are zero. 23374 Such constants can be loaded using 'lui'. 23375 23376 'M' 23377 A constant that cannot be loaded using 'lui', 'addiu' or 23378 'ori'. 23379 23380 'N' 23381 A constant in the range -65535 to -1 (inclusive). 23382 23383 'O' 23384 A signed 15-bit constant. 23385 23386 'P' 23387 A constant in the range 1 to 65535 (inclusive). 23388 23389 'G' 23390 Floating-point zero. 23391 23392 'R' 23393 An address that can be used in a non-macro load or store. 23394 23395 'ZC' 23396 A memory operand whose address is formed by a base register 23397 and offset that is suitable for use in instructions with the 23398 same addressing mode as 'll' and 'sc'. 23399 23400 'ZD' 23401 An address suitable for a 'prefetch' instruction, or for any 23402 other instruction with the same addressing mode as 'prefetch'. 23403 23404_Motorola 680x0--'config/m68k/constraints.md'_ 23405 'a' 23406 Address register 23407 23408 'd' 23409 Data register 23410 23411 'f' 23412 68881 floating-point register, if available 23413 23414 'I' 23415 Integer in the range 1 to 8 23416 23417 'J' 23418 16-bit signed number 23419 23420 'K' 23421 Signed number whose magnitude is greater than 0x80 23422 23423 'L' 23424 Integer in the range -8 to -1 23425 23426 'M' 23427 Signed number whose magnitude is greater than 0x100 23428 23429 'N' 23430 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 23431 23432 'O' 23433 16 (for rotate using swap) 23434 23435 'P' 23436 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 23437 23438 'R' 23439 Numbers that mov3q can handle 23440 23441 'G' 23442 Floating point constant that is not a 68881 constant 23443 23444 'S' 23445 Operands that satisfy 'm' when -mpcrel is in effect 23446 23447 'T' 23448 Operands that satisfy 's' when -mpcrel is not in effect 23449 23450 'Q' 23451 Address register indirect addressing mode 23452 23453 'U' 23454 Register offset addressing 23455 23456 'W' 23457 const_call_operand 23458 23459 'Cs' 23460 symbol_ref or const 23461 23462 'Ci' 23463 const_int 23464 23465 'C0' 23466 const_int 0 23467 23468 'Cj' 23469 Range of signed numbers that don't fit in 16 bits 23470 23471 'Cmvq' 23472 Integers valid for mvq 23473 23474 'Capsw' 23475 Integers valid for a moveq followed by a swap 23476 23477 'Cmvz' 23478 Integers valid for mvz 23479 23480 'Cmvs' 23481 Integers valid for mvs 23482 23483 'Ap' 23484 push_operand 23485 23486 'Ac' 23487 Non-register operands allowed in clr 23488 23489_Moxie--'config/moxie/constraints.md'_ 23490 'A' 23491 An absolute address 23492 23493 'B' 23494 An offset address 23495 23496 'W' 23497 A register indirect memory operand 23498 23499 'I' 23500 A constant in the range of 0 to 255. 23501 23502 'N' 23503 A constant in the range of 0 to -255. 23504 23505_MSP430-'config/msp430/constraints.md'_ 23506 23507 'R12' 23508 Register R12. 23509 23510 'R13' 23511 Register R13. 23512 23513 'K' 23514 Integer constant 1. 23515 23516 'L' 23517 Integer constant -1^20..1^19. 23518 23519 'M' 23520 Integer constant 1-4. 23521 23522 'Ya' 23523 Memory references which do not require an extended MOVX 23524 instruction. 23525 23526 'Yl' 23527 Memory reference, labels only. 23528 23529 'Ys' 23530 Memory reference, stack only. 23531 23532_NDS32--'config/nds32/constraints.md'_ 23533 'w' 23534 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 23535 'l' 23536 LOW register class $r0 to $r7. 23537 'd' 23538 MIDDLE register class $r0 to $r11, $r16 to $r19. 23539 'h' 23540 HIGH register class $r12 to $r14, $r20 to $r31. 23541 't' 23542 Temporary assist register $ta (i.e. $r15). 23543 'k' 23544 Stack register $sp. 23545 'Iu03' 23546 Unsigned immediate 3-bit value. 23547 'In03' 23548 Negative immediate 3-bit value in the range of -7-0. 23549 'Iu04' 23550 Unsigned immediate 4-bit value. 23551 'Is05' 23552 Signed immediate 5-bit value. 23553 'Iu05' 23554 Unsigned immediate 5-bit value. 23555 'In05' 23556 Negative immediate 5-bit value in the range of -31-0. 23557 'Ip05' 23558 Unsigned immediate 5-bit value for movpi45 instruction with 23559 range 16-47. 23560 'Iu06' 23561 Unsigned immediate 6-bit value constraint for addri36.sp 23562 instruction. 23563 'Iu08' 23564 Unsigned immediate 8-bit value. 23565 'Iu09' 23566 Unsigned immediate 9-bit value. 23567 'Is10' 23568 Signed immediate 10-bit value. 23569 'Is11' 23570 Signed immediate 11-bit value. 23571 'Is15' 23572 Signed immediate 15-bit value. 23573 'Iu15' 23574 Unsigned immediate 15-bit value. 23575 'Ic15' 23576 A constant which is not in the range of imm15u but ok for bclr 23577 instruction. 23578 'Ie15' 23579 A constant which is not in the range of imm15u but ok for bset 23580 instruction. 23581 'It15' 23582 A constant which is not in the range of imm15u but ok for btgl 23583 instruction. 23584 'Ii15' 23585 A constant whose compliment value is in the range of imm15u 23586 and ok for bitci instruction. 23587 'Is16' 23588 Signed immediate 16-bit value. 23589 'Is17' 23590 Signed immediate 17-bit value. 23591 'Is19' 23592 Signed immediate 19-bit value. 23593 'Is20' 23594 Signed immediate 20-bit value. 23595 'Ihig' 23596 The immediate value that can be simply set high 20-bit. 23597 'Izeb' 23598 The immediate value 0xff. 23599 'Izeh' 23600 The immediate value 0xffff. 23601 'Ixls' 23602 The immediate value 0x01. 23603 'Ix11' 23604 The immediate value 0x7ff. 23605 'Ibms' 23606 The immediate value with power of 2. 23607 'Ifex' 23608 The immediate value with power of 2 minus 1. 23609 'U33' 23610 Memory constraint for 333 format. 23611 'U45' 23612 Memory constraint for 45 format. 23613 'U37' 23614 Memory constraint for 37 format. 23615 23616_Nios II family--'config/nios2/constraints.md'_ 23617 23618 'I' 23619 Integer that is valid as an immediate operand in an 23620 instruction taking a signed 16-bit number. Range -32768 to 23621 32767. 23622 23623 'J' 23624 Integer that is valid as an immediate operand in an 23625 instruction taking an unsigned 16-bit number. Range 0 to 23626 65535. 23627 23628 'K' 23629 Integer that is valid as an immediate operand in an 23630 instruction taking only the upper 16-bits of a 32-bit number. 23631 Range 32-bit numbers with the lower 16-bits being 0. 23632 23633 'L' 23634 Integer that is valid as an immediate operand for a shift 23635 instruction. Range 0 to 31. 23636 23637 'M' 23638 Integer that is valid as an immediate operand for only the 23639 value 0. Can be used in conjunction with the format modifier 23640 'z' to use 'r0' instead of '0' in the assembly output. 23641 23642 'N' 23643 Integer that is valid as an immediate operand for a custom 23644 instruction opcode. Range 0 to 255. 23645 23646 'P' 23647 An immediate operand for R2 andchi/andci instructions. 23648 23649 'S' 23650 Matches immediates which are addresses in the small data 23651 section and therefore can be added to 'gp' as a 16-bit 23652 immediate to re-create their 32-bit value. 23653 23654 'U' 23655 Matches constants suitable as an operand for the rdprs and 23656 cache instructions. 23657 23658 'v' 23659 A memory operand suitable for Nios II R2 load/store exclusive 23660 instructions. 23661 23662 'w' 23663 A memory operand suitable for load/store IO and cache 23664 instructions. 23665 23666 'T' 23667 A 'const' wrapped 'UNSPEC' expression, representing a 23668 supported PIC or TLS relocation. 23669 23670_OpenRISC--'config/or1k/constraints.md'_ 23671 'I' 23672 Integer that is valid as an immediate operand in an 23673 instruction taking a signed 16-bit number. Range -32768 to 23674 32767. 23675 23676 'K' 23677 Integer that is valid as an immediate operand in an 23678 instruction taking an unsigned 16-bit number. Range 0 to 23679 65535. 23680 23681 'M' 23682 Signed 16-bit constant shifted left 16 bits. (Used with 23683 'l.movhi') 23684 23685 'O' 23686 Zero 23687 23688 'c' 23689 Register usable for sibcalls. 23690 23691_PDP-11--'config/pdp11/constraints.md'_ 23692 'a' 23693 Floating point registers AC0 through AC3. These can be loaded 23694 from/to memory with a single instruction. 23695 23696 'd' 23697 Odd numbered general registers (R1, R3, R5). These are used 23698 for 16-bit multiply operations. 23699 23700 'D' 23701 A memory reference that is encoded within the opcode, but not 23702 auto-increment or auto-decrement. 23703 23704 'f' 23705 Any of the floating point registers (AC0 through AC5). 23706 23707 'G' 23708 Floating point constant 0. 23709 23710 'h' 23711 Floating point registers AC4 and AC5. These cannot be loaded 23712 from/to memory with a single instruction. 23713 23714 'I' 23715 An integer constant that fits in 16 bits. 23716 23717 'J' 23718 An integer constant whose low order 16 bits are zero. 23719 23720 'K' 23721 An integer constant that does not meet the constraints for 23722 codes 'I' or 'J'. 23723 23724 'L' 23725 The integer constant 1. 23726 23727 'M' 23728 The integer constant -1. 23729 23730 'N' 23731 The integer constant 0. 23732 23733 'O' 23734 Integer constants 0 through 3; shifts by these amounts are 23735 handled as multiple single-bit shifts rather than a single 23736 variable-length shift. 23737 23738 'Q' 23739 A memory reference which requires an additional word (address 23740 or offset) after the opcode. 23741 23742 'R' 23743 A memory reference that is encoded within the opcode. 23744 23745_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 23746 'r' 23747 A general purpose register (GPR), 'r0'...'r31'. 23748 23749 'b' 23750 A base register. Like 'r', but 'r0' is not allowed, so 23751 'r1'...'r31'. 23752 23753 'f' 23754 A floating point register (FPR), 'f0'...'f31'. 23755 23756 'd' 23757 A floating point register. This is the same as 'f' nowadays; 23758 historically 'f' was for single-precision and 'd' was for 23759 double-precision floating point. 23760 23761 'v' 23762 An Altivec vector register (VR), 'v0'...'v31'. 23763 23764 'wa' 23765 A VSX register (VSR), 'vs0'...'vs63'. This is either an FPR 23766 ('vs0'...'vs31' are 'f0'...'f31') or a VR ('vs32'...'vs63' are 23767 'v0'...'v31'). 23768 23769 When using 'wa', you should use the '%x' output modifier, so 23770 that the correct register number is printed. For example: 23771 23772 asm ("xvadddp %x0,%x1,%x2" 23773 : "=wa" (v1) 23774 : "wa" (v2), "wa" (v3)); 23775 23776 You should not use '%x' for 'v' operands: 23777 23778 asm ("xsaddqp %0,%1,%2" 23779 : "=v" (v1) 23780 : "v" (v2), "v" (v3)); 23781 23782 'h' 23783 A special register ('vrsave', 'ctr', or 'lr'). 23784 23785 'c' 23786 The count register, 'ctr'. 23787 23788 'l' 23789 The link register, 'lr'. 23790 23791 'x' 23792 Condition register field 0, 'cr0'. 23793 23794 'y' 23795 Any condition register field, 'cr0'...'cr7'. 23796 23797 'z' 23798 The carry bit, 'XER[CA]'. 23799 23800 'we' 23801 Like 'wa', if '-mpower9-vector' and '-m64' are used; 23802 otherwise, 'NO_REGS'. 23803 23804 'wn' 23805 No register ('NO_REGS'). 23806 23807 'wr' 23808 Like 'r', if '-mpowerpc64' is used; otherwise, 'NO_REGS'. 23809 23810 'wx' 23811 Like 'd', if '-mpowerpc-gfxopt' is used; otherwise, 'NO_REGS'. 23812 23813 'wA' 23814 Like 'b', if '-mpowerpc64' is used; otherwise, 'NO_REGS'. 23815 23816 'wB' 23817 Signed 5-bit constant integer that can be loaded into an 23818 Altivec register. 23819 23820 'wD' 23821 Int constant that is the element number of the 64-bit scalar 23822 in a vector. 23823 23824 'wE' 23825 Vector constant that can be loaded with the XXSPLTIB 23826 instruction. 23827 23828 'wF' 23829 Memory operand suitable for power8 GPR load fusion. 23830 23831 'wL' 23832 Int constant that is the element number mfvsrld accesses in a 23833 vector. 23834 23835 'wM' 23836 Match vector constant with all 1's if the XXLORC instruction 23837 is available. 23838 23839 'wO' 23840 Memory operand suitable for the ISA 3.0 vector d-form 23841 instructions. 23842 23843 'wQ' 23844 Memory operand suitable for the load/store quad instructions. 23845 23846 'wS' 23847 Vector constant that can be loaded with XXSPLTIB & sign 23848 extension. 23849 23850 'wY' 23851 A memory operand for a DS-form instruction. 23852 23853 'wZ' 23854 An indexed or indirect memory operand, ignoring the bottom 4 23855 bits. 23856 23857 'I' 23858 A signed 16-bit constant. 23859 23860 'J' 23861 An unsigned 16-bit constant shifted left 16 bits (use 'L' 23862 instead for 'SImode' constants). 23863 23864 'K' 23865 An unsigned 16-bit constant. 23866 23867 'L' 23868 A signed 16-bit constant shifted left 16 bits. 23869 23870 'M' 23871 An integer constant greater than 31. 23872 23873 'N' 23874 An exact power of 2. 23875 23876 'O' 23877 The integer constant zero. 23878 23879 'P' 23880 A constant whose negation is a signed 16-bit constant. 23881 23882 'eI' 23883 A signed 34-bit integer constant if prefixed instructions are 23884 supported. 23885 23886 'G' 23887 A floating point constant that can be loaded into a register 23888 with one instruction per word. 23889 23890 'H' 23891 A floating point constant that can be loaded into a register 23892 using three instructions. 23893 23894 'm' 23895 A memory operand. Normally, 'm' does not allow addresses that 23896 update the base register. If the '<' or '>' constraint is 23897 also used, they are allowed and therefore on PowerPC targets 23898 in that case it is only safe to use 'm<>' in an 'asm' 23899 statement if that 'asm' statement accesses the operand exactly 23900 once. The 'asm' statement must also use '%U<OPNO>' as a 23901 placeholder for the "update" flag in the corresponding load or 23902 store instruction. For example: 23903 23904 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 23905 23906 is correct but: 23907 23908 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 23909 23910 is not. 23911 23912 'es' 23913 A "stable" memory operand; that is, one which does not include 23914 any automodification of the base register. This used to be 23915 useful when 'm' allowed automodification of the base register, 23916 but as those are now only allowed when '<' or '>' is used, 23917 'es' is basically the same as 'm' without '<' and '>'. 23918 23919 'Q' 23920 A memory operand addressed by just a base register. 23921 23922 'Y' 23923 A memory operand for a DQ-form instruction. 23924 23925 'Z' 23926 A memory operand accessed with indexed or indirect addressing. 23927 23928 'R' 23929 An AIX TOC entry. 23930 23931 'a' 23932 An indexed or indirect address. 23933 23934 'U' 23935 A V.4 small data reference. 23936 23937 'W' 23938 A vector constant that does not require memory. 23939 23940 'j' 23941 The zero vector constant. 23942 23943_PRU--'config/pru/constraints.md'_ 23944 'I' 23945 An unsigned 8-bit integer constant. 23946 23947 'J' 23948 An unsigned 16-bit integer constant. 23949 23950 'L' 23951 An unsigned 5-bit integer constant (for shift counts). 23952 23953 'T' 23954 A text segment (program memory) constant label. 23955 23956 'Z' 23957 Integer constant zero. 23958 23959_RL78--'config/rl78/constraints.md'_ 23960 23961 'Int3' 23962 An integer constant in the range 1 ... 7. 23963 'Int8' 23964 An integer constant in the range 0 ... 255. 23965 'J' 23966 An integer constant in the range -255 ... 0 23967 'K' 23968 The integer constant 1. 23969 'L' 23970 The integer constant -1. 23971 'M' 23972 The integer constant 0. 23973 'N' 23974 The integer constant 2. 23975 'O' 23976 The integer constant -2. 23977 'P' 23978 An integer constant in the range 1 ... 15. 23979 'Qbi' 23980 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 23981 'Qsc' 23982 The synthetic compare types-gt, lt, ge, and le. 23983 'Wab' 23984 A memory reference with an absolute address. 23985 'Wbc' 23986 A memory reference using 'BC' as a base register, with an 23987 optional offset. 23988 'Wca' 23989 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 23990 address, for calls. 23991 'Wcv' 23992 A memory reference using any 16-bit register pair for the 23993 address, for calls. 23994 'Wd2' 23995 A memory reference using 'DE' as a base register, with an 23996 optional offset. 23997 'Wde' 23998 A memory reference using 'DE' as a base register, without any 23999 offset. 24000 'Wfr' 24001 Any memory reference to an address in the far address space. 24002 'Wh1' 24003 A memory reference using 'HL' as a base register, with an 24004 optional one-byte offset. 24005 'Whb' 24006 A memory reference using 'HL' as a base register, with 'B' or 24007 'C' as the index register. 24008 'Whl' 24009 A memory reference using 'HL' as a base register, without any 24010 offset. 24011 'Ws1' 24012 A memory reference using 'SP' as a base register, with an 24013 optional one-byte offset. 24014 'Y' 24015 Any memory reference to an address in the near address space. 24016 'A' 24017 The 'AX' register. 24018 'B' 24019 The 'BC' register. 24020 'D' 24021 The 'DE' register. 24022 'R' 24023 'A' through 'L' registers. 24024 'S' 24025 The 'SP' register. 24026 'T' 24027 The 'HL' register. 24028 'Z08W' 24029 The 16-bit 'R8' register. 24030 'Z10W' 24031 The 16-bit 'R10' register. 24032 'Zint' 24033 The registers reserved for interrupts ('R24' to 'R31'). 24034 'a' 24035 The 'A' register. 24036 'b' 24037 The 'B' register. 24038 'c' 24039 The 'C' register. 24040 'd' 24041 The 'D' register. 24042 'e' 24043 The 'E' register. 24044 'h' 24045 The 'H' register. 24046 'l' 24047 The 'L' register. 24048 'v' 24049 The virtual registers. 24050 'w' 24051 The 'PSW' register. 24052 'x' 24053 The 'X' register. 24054 24055_RISC-V--'config/riscv/constraints.md'_ 24056 24057 'f' 24058 A floating-point register (if available). 24059 24060 'I' 24061 An I-type 12-bit signed immediate. 24062 24063 'J' 24064 Integer zero. 24065 24066 'K' 24067 A 5-bit unsigned immediate for CSR access instructions. 24068 24069 'A' 24070 An address that is held in a general-purpose register. 24071 24072_RX--'config/rx/constraints.md'_ 24073 'Q' 24074 An address which does not involve register indirect addressing 24075 or pre/post increment/decrement addressing. 24076 24077 'Symbol' 24078 A symbol reference. 24079 24080 'Int08' 24081 A constant in the range -256 to 255, inclusive. 24082 24083 'Sint08' 24084 A constant in the range -128 to 127, inclusive. 24085 24086 'Sint16' 24087 A constant in the range -32768 to 32767, inclusive. 24088 24089 'Sint24' 24090 A constant in the range -8388608 to 8388607, inclusive. 24091 24092 'Uint04' 24093 A constant in the range 0 to 15, inclusive. 24094 24095_S/390 and zSeries--'config/s390/s390.h'_ 24096 'a' 24097 Address register (general purpose register except r0) 24098 24099 'c' 24100 Condition code register 24101 24102 'd' 24103 Data register (arbitrary general purpose register) 24104 24105 'f' 24106 Floating-point register 24107 24108 'I' 24109 Unsigned 8-bit constant (0-255) 24110 24111 'J' 24112 Unsigned 12-bit constant (0-4095) 24113 24114 'K' 24115 Signed 16-bit constant (-32768-32767) 24116 24117 'L' 24118 Value appropriate as displacement. 24119 '(0..4095)' 24120 for short displacement 24121 '(-524288..524287)' 24122 for long displacement 24123 24124 'M' 24125 Constant integer with a value of 0x7fffffff. 24126 24127 'N' 24128 Multiple letter constraint followed by 4 parameter letters. 24129 '0..9:' 24130 number of the part counting from most to least 24131 significant 24132 'H,Q:' 24133 mode of the part 24134 'D,S,H:' 24135 mode of the containing operand 24136 '0,F:' 24137 value of the other parts (F--all bits set) 24138 The constraint matches if the specified part of a constant has 24139 a value different from its other parts. 24140 24141 'Q' 24142 Memory reference without index register and with short 24143 displacement. 24144 24145 'R' 24146 Memory reference with index register and short displacement. 24147 24148 'S' 24149 Memory reference without index register but with long 24150 displacement. 24151 24152 'T' 24153 Memory reference with index register and long displacement. 24154 24155 'U' 24156 Pointer with short displacement. 24157 24158 'W' 24159 Pointer with long displacement. 24160 24161 'Y' 24162 Shift count operand. 24163 24164_SPARC--'config/sparc/sparc.h'_ 24165 'f' 24166 Floating-point register on the SPARC-V8 architecture and lower 24167 floating-point register on the SPARC-V9 architecture. 24168 24169 'e' 24170 Floating-point register. It is equivalent to 'f' on the 24171 SPARC-V8 architecture and contains both lower and upper 24172 floating-point registers on the SPARC-V9 architecture. 24173 24174 'c' 24175 Floating-point condition code register. 24176 24177 'd' 24178 Lower floating-point register. It is only valid on the 24179 SPARC-V9 architecture when the Visual Instruction Set is 24180 available. 24181 24182 'b' 24183 Floating-point register. It is only valid on the SPARC-V9 24184 architecture when the Visual Instruction Set is available. 24185 24186 'h' 24187 64-bit global or out register for the SPARC-V8+ architecture. 24188 24189 'C' 24190 The constant all-ones, for floating-point. 24191 24192 'A' 24193 Signed 5-bit constant 24194 24195 'D' 24196 A vector constant 24197 24198 'I' 24199 Signed 13-bit constant 24200 24201 'J' 24202 Zero 24203 24204 'K' 24205 32-bit constant with the low 12 bits clear (a constant that 24206 can be loaded with the 'sethi' instruction) 24207 24208 'L' 24209 A constant in the range supported by 'movcc' instructions 24210 (11-bit signed immediate) 24211 24212 'M' 24213 A constant in the range supported by 'movrcc' instructions 24214 (10-bit signed immediate) 24215 24216 'N' 24217 Same as 'K', except that it verifies that bits that are not in 24218 the lower 32-bit range are all zero. Must be used instead of 24219 'K' for modes wider than 'SImode' 24220 24221 'O' 24222 The constant 4096 24223 24224 'G' 24225 Floating-point zero 24226 24227 'H' 24228 Signed 13-bit constant, sign-extended to 32 or 64 bits 24229 24230 'P' 24231 The constant -1 24232 24233 'Q' 24234 Floating-point constant whose integral representation can be 24235 moved into an integer register using a single sethi 24236 instruction 24237 24238 'R' 24239 Floating-point constant whose integral representation can be 24240 moved into an integer register using a single mov instruction 24241 24242 'S' 24243 Floating-point constant whose integral representation can be 24244 moved into an integer register using a high/lo_sum instruction 24245 sequence 24246 24247 'T' 24248 Memory address aligned to an 8-byte boundary 24249 24250 'U' 24251 Even register 24252 24253 'W' 24254 Memory address for 'e' constraint registers 24255 24256 'w' 24257 Memory address with only a base register 24258 24259 'Y' 24260 Vector zero 24261 24262_TI C6X family--'config/c6x/constraints.md'_ 24263 'a' 24264 Register file A (A0-A31). 24265 24266 'b' 24267 Register file B (B0-B31). 24268 24269 'A' 24270 Predicate registers in register file A (A0-A2 on C64X and 24271 higher, A1 and A2 otherwise). 24272 24273 'B' 24274 Predicate registers in register file B (B0-B2). 24275 24276 'C' 24277 A call-used register in register file B (B0-B9, B16-B31). 24278 24279 'Da' 24280 Register file A, excluding predicate registers (A3-A31, plus 24281 A0 if not C64X or higher). 24282 24283 'Db' 24284 Register file B, excluding predicate registers (B3-B31). 24285 24286 'Iu4' 24287 Integer constant in the range 0 ... 15. 24288 24289 'Iu5' 24290 Integer constant in the range 0 ... 31. 24291 24292 'In5' 24293 Integer constant in the range -31 ... 0. 24294 24295 'Is5' 24296 Integer constant in the range -16 ... 15. 24297 24298 'I5x' 24299 Integer constant that can be the operand of an ADDA or a SUBA 24300 insn. 24301 24302 'IuB' 24303 Integer constant in the range 0 ... 65535. 24304 24305 'IsB' 24306 Integer constant in the range -32768 ... 32767. 24307 24308 'IsC' 24309 Integer constant in the range -2^{20} ... 2^{20} - 1. 24310 24311 'Jc' 24312 Integer constant that is a valid mask for the clr instruction. 24313 24314 'Js' 24315 Integer constant that is a valid mask for the set instruction. 24316 24317 'Q' 24318 Memory location with A base register. 24319 24320 'R' 24321 Memory location with B base register. 24322 24323 'S0' 24324 On C64x+ targets, a GP-relative small data reference. 24325 24326 'S1' 24327 Any kind of 'SYMBOL_REF', for use in a call address. 24328 24329 'Si' 24330 Any kind of immediate operand, unless it matches the S0 24331 constraint. 24332 24333 'T' 24334 Memory location with B base register, but not using a long 24335 offset. 24336 24337 'W' 24338 A memory operand with an address that cannot be used in an 24339 unaligned access. 24340 24341 'Z' 24342 Register B14 (aka DP). 24343 24344_TILE-Gx--'config/tilegx/constraints.md'_ 24345 'R00' 24346 'R01' 24347 'R02' 24348 'R03' 24349 'R04' 24350 'R05' 24351 'R06' 24352 'R07' 24353 'R08' 24354 'R09' 24355 'R10' 24356 Each of these represents a register constraint for an 24357 individual register, from r0 to r10. 24358 24359 'I' 24360 Signed 8-bit integer constant. 24361 24362 'J' 24363 Signed 16-bit integer constant. 24364 24365 'K' 24366 Unsigned 16-bit integer constant. 24367 24368 'L' 24369 Integer constant that fits in one signed byte when incremented 24370 by one (-129 ... 126). 24371 24372 'm' 24373 Memory operand. If used together with '<' or '>', the operand 24374 can have postincrement which requires printing with '%In' and 24375 '%in' on TILE-Gx. For example: 24376 24377 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 24378 24379 'M' 24380 A bit mask suitable for the BFINS instruction. 24381 24382 'N' 24383 Integer constant that is a byte tiled out eight times. 24384 24385 'O' 24386 The integer zero constant. 24387 24388 'P' 24389 Integer constant that is a sign-extended byte tiled out as 24390 four shorts. 24391 24392 'Q' 24393 Integer constant that fits in one signed byte when incremented 24394 (-129 ... 126), but excluding -1. 24395 24396 'S' 24397 Integer constant that has all 1 bits consecutive and starting 24398 at bit 0. 24399 24400 'T' 24401 A 16-bit fragment of a got, tls, or pc-relative reference. 24402 24403 'U' 24404 Memory operand except postincrement. This is roughly the same 24405 as 'm' when not used together with '<' or '>'. 24406 24407 'W' 24408 An 8-element vector constant with identical elements. 24409 24410 'Y' 24411 A 4-element vector constant with identical elements. 24412 24413 'Z0' 24414 The integer constant 0xffffffff. 24415 24416 'Z1' 24417 The integer constant 0xffffffff00000000. 24418 24419_TILEPro--'config/tilepro/constraints.md'_ 24420 'R00' 24421 'R01' 24422 'R02' 24423 'R03' 24424 'R04' 24425 'R05' 24426 'R06' 24427 'R07' 24428 'R08' 24429 'R09' 24430 'R10' 24431 Each of these represents a register constraint for an 24432 individual register, from r0 to r10. 24433 24434 'I' 24435 Signed 8-bit integer constant. 24436 24437 'J' 24438 Signed 16-bit integer constant. 24439 24440 'K' 24441 Nonzero integer constant with low 16 bits zero. 24442 24443 'L' 24444 Integer constant that fits in one signed byte when incremented 24445 by one (-129 ... 126). 24446 24447 'm' 24448 Memory operand. If used together with '<' or '>', the operand 24449 can have postincrement which requires printing with '%In' and 24450 '%in' on TILEPro. For example: 24451 24452 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 24453 24454 'M' 24455 A bit mask suitable for the MM instruction. 24456 24457 'N' 24458 Integer constant that is a byte tiled out four times. 24459 24460 'O' 24461 The integer zero constant. 24462 24463 'P' 24464 Integer constant that is a sign-extended byte tiled out as two 24465 shorts. 24466 24467 'Q' 24468 Integer constant that fits in one signed byte when incremented 24469 (-129 ... 126), but excluding -1. 24470 24471 'T' 24472 A symbolic operand, or a 16-bit fragment of a got, tls, or 24473 pc-relative reference. 24474 24475 'U' 24476 Memory operand except postincrement. This is roughly the same 24477 as 'm' when not used together with '<' or '>'. 24478 24479 'W' 24480 A 4-element vector constant with identical elements. 24481 24482 'Y' 24483 A 2-element vector constant with identical elements. 24484 24485_Visium--'config/visium/constraints.md'_ 24486 'b' 24487 EAM register 'mdb' 24488 24489 'c' 24490 EAM register 'mdc' 24491 24492 'f' 24493 Floating point register 24494 24495 'k' 24496 Register for sibcall optimization 24497 24498 'l' 24499 General register, but not 'r29', 'r30' and 'r31' 24500 24501 't' 24502 Register 'r1' 24503 24504 'u' 24505 Register 'r2' 24506 24507 'v' 24508 Register 'r3' 24509 24510 'G' 24511 Floating-point constant 0.0 24512 24513 'J' 24514 Integer constant in the range 0 .. 65535 (16-bit immediate) 24515 24516 'K' 24517 Integer constant in the range 1 .. 31 (5-bit immediate) 24518 24519 'L' 24520 Integer constant in the range -65535 .. -1 (16-bit negative 24521 immediate) 24522 24523 'M' 24524 Integer constant -1 24525 24526 'O' 24527 Integer constant 0 24528 24529 'P' 24530 Integer constant 32 24531 24532_x86 family--'config/i386/constraints.md'_ 24533 'R' 24534 Legacy register--the eight integer registers available on all 24535 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 24536 24537 'q' 24538 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 24539 'c', and 'd'; in 64-bit mode, any integer register. 24540 24541 'Q' 24542 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 24543 24544 'l' 24545 Any register that can be used as the index in a base+index 24546 memory access: that is, any general register except the stack 24547 pointer. 24548 24549 'a' 24550 The 'a' register. 24551 24552 'b' 24553 The 'b' register. 24554 24555 'c' 24556 The 'c' register. 24557 24558 'd' 24559 The 'd' register. 24560 24561 'S' 24562 The 'si' register. 24563 24564 'D' 24565 The 'di' register. 24566 24567 'A' 24568 The 'a' and 'd' registers. This class is used for 24569 instructions that return double word results in the 'ax:dx' 24570 register pair. Single word values will be allocated either in 24571 'ax' or 'dx'. For example on i386 the following implements 24572 'rdtsc': 24573 24574 unsigned long long rdtsc (void) 24575 { 24576 unsigned long long tick; 24577 __asm__ __volatile__("rdtsc":"=A"(tick)); 24578 return tick; 24579 } 24580 24581 This is not correct on x86-64 as it would allocate tick in 24582 either 'ax' or 'dx'. You have to use the following variant 24583 instead: 24584 24585 unsigned long long rdtsc (void) 24586 { 24587 unsigned int tickl, tickh; 24588 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 24589 return ((unsigned long long)tickh << 32)|tickl; 24590 } 24591 24592 'U' 24593 The call-clobbered integer registers. 24594 24595 'f' 24596 Any 80387 floating-point (stack) register. 24597 24598 't' 24599 Top of 80387 floating-point stack ('%st(0)'). 24600 24601 'u' 24602 Second from top of 80387 floating-point stack ('%st(1)'). 24603 24604 'Yk' 24605 Any mask register that can be used as a predicate, i.e. 24606 'k1-k7'. 24607 24608 'k' 24609 Any mask register. 24610 24611 'y' 24612 Any MMX register. 24613 24614 'x' 24615 Any SSE register. 24616 24617 'v' 24618 Any EVEX encodable SSE register ('%xmm0-%xmm31'). 24619 24620 'w' 24621 Any bound register. 24622 24623 'Yz' 24624 First SSE register ('%xmm0'). 24625 24626 'Yi' 24627 Any SSE register, when SSE2 and inter-unit moves are enabled. 24628 24629 'Yj' 24630 Any SSE register, when SSE2 and inter-unit moves from vector 24631 registers are enabled. 24632 24633 'Ym' 24634 Any MMX register, when inter-unit moves are enabled. 24635 24636 'Yn' 24637 Any MMX register, when inter-unit moves from vector registers 24638 are enabled. 24639 24640 'Yp' 24641 Any integer register when 'TARGET_PARTIAL_REG_STALL' is 24642 disabled. 24643 24644 'Ya' 24645 Any integer register when zero extensions with 'AND' are 24646 disabled. 24647 24648 'Yb' 24649 Any register that can be used as the GOT base when calling 24650 '___tls_get_addr': that is, any general register except 'a' 24651 and 'sp' registers, for '-fno-plt' if linker supports it. 24652 Otherwise, 'b' register. 24653 24654 'Yf' 24655 Any x87 register when 80387 floating-point arithmetic is 24656 enabled. 24657 24658 'Yr' 24659 Lower SSE register when avoiding REX prefix and all SSE 24660 registers otherwise. 24661 24662 'Yv' 24663 For AVX512VL, any EVEX-encodable SSE register 24664 ('%xmm0-%xmm31'), otherwise any SSE register. 24665 24666 'Yh' 24667 Any EVEX-encodable SSE register, that has number factor of 24668 four. 24669 24670 'Bf' 24671 Flags register operand. 24672 24673 'Bg' 24674 GOT memory operand. 24675 24676 'Bm' 24677 Vector memory operand. 24678 24679 'Bc' 24680 Constant memory operand. 24681 24682 'Bn' 24683 Memory operand without REX prefix. 24684 24685 'Bs' 24686 Sibcall memory operand. 24687 24688 'Bw' 24689 Call memory operand. 24690 24691 'Bz' 24692 Constant call address operand. 24693 24694 'BC' 24695 SSE constant -1 operand. 24696 24697 'I' 24698 Integer constant in the range 0 ... 31, for 32-bit shifts. 24699 24700 'J' 24701 Integer constant in the range 0 ... 63, for 64-bit shifts. 24702 24703 'K' 24704 Signed 8-bit integer constant. 24705 24706 'L' 24707 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 24708 24709 'M' 24710 0, 1, 2, or 3 (shifts for the 'lea' instruction). 24711 24712 'N' 24713 Unsigned 8-bit integer constant (for 'in' and 'out' 24714 instructions). 24715 24716 'O' 24717 Integer constant in the range 0 ... 127, for 128-bit shifts. 24718 24719 'G' 24720 Standard 80387 floating point constant. 24721 24722 'C' 24723 SSE constant zero operand. 24724 24725 'e' 24726 32-bit signed integer constant, or a symbolic reference known 24727 to fit that range (for immediate operands in sign-extending 24728 x86-64 instructions). 24729 24730 'We' 24731 32-bit signed integer constant, or a symbolic reference known 24732 to fit that range (for sign-extending conversion operations 24733 that require non-'VOIDmode' immediate operands). 24734 24735 'Wz' 24736 32-bit unsigned integer constant, or a symbolic reference 24737 known to fit that range (for zero-extending conversion 24738 operations that require non-'VOIDmode' immediate operands). 24739 24740 'Wd' 24741 128-bit integer constant where both the high and low 64-bit 24742 word satisfy the 'e' constraint. 24743 24744 'Z' 24745 32-bit unsigned integer constant, or a symbolic reference 24746 known to fit that range (for immediate operands in 24747 zero-extending x86-64 instructions). 24748 24749 'Tv' 24750 VSIB address operand. 24751 24752 'Ts' 24753 Address operand without segment register. 24754 24755_Xstormy16--'config/stormy16/stormy16.h'_ 24756 'a' 24757 Register r0. 24758 24759 'b' 24760 Register r1. 24761 24762 'c' 24763 Register r2. 24764 24765 'd' 24766 Register r8. 24767 24768 'e' 24769 Registers r0 through r7. 24770 24771 't' 24772 Registers r0 and r1. 24773 24774 'y' 24775 The carry register. 24776 24777 'z' 24778 Registers r8 and r9. 24779 24780 'I' 24781 A constant between 0 and 3 inclusive. 24782 24783 'J' 24784 A constant that has exactly one bit set. 24785 24786 'K' 24787 A constant that has exactly one bit clear. 24788 24789 'L' 24790 A constant between 0 and 255 inclusive. 24791 24792 'M' 24793 A constant between -255 and 0 inclusive. 24794 24795 'N' 24796 A constant between -3 and 0 inclusive. 24797 24798 'O' 24799 A constant between 1 and 4 inclusive. 24800 24801 'P' 24802 A constant between -4 and -1 inclusive. 24803 24804 'Q' 24805 A memory reference that is a stack push. 24806 24807 'R' 24808 A memory reference that is a stack pop. 24809 24810 'S' 24811 A memory reference that refers to a constant address of known 24812 value. 24813 24814 'T' 24815 The register indicated by Rx (not implemented yet). 24816 24817 'U' 24818 A constant that is not between 2 and 15 inclusive. 24819 24820 'Z' 24821 The constant 0. 24822 24823_Xtensa--'config/xtensa/constraints.md'_ 24824 'a' 24825 General-purpose 32-bit register 24826 24827 'b' 24828 One-bit boolean register 24829 24830 'A' 24831 MAC16 40-bit accumulator register 24832 24833 'I' 24834 Signed 12-bit integer constant, for use in MOVI instructions 24835 24836 'J' 24837 Signed 8-bit integer constant, for use in ADDI instructions 24838 24839 'K' 24840 Integer constant valid for BccI instructions 24841 24842 'L' 24843 Unsigned constant valid for BccUI instructions 24844 24845 24846File: gccint.info, Node: Disable Insn Alternatives, Next: Define Constraints, Prev: Machine Constraints, Up: Constraints 24847 2484817.8.6 Disable insn alternatives using the 'enabled' attribute 24849-------------------------------------------------------------- 24850 24851There are three insn attributes that may be used to selectively disable 24852instruction alternatives: 24853 24854'enabled' 24855 Says whether an alternative is available on the current subtarget. 24856 24857'preferred_for_size' 24858 Says whether an enabled alternative should be used in code that is 24859 optimized for size. 24860 24861'preferred_for_speed' 24862 Says whether an enabled alternative should be used in code that is 24863 optimized for speed. 24864 24865 All these attributes should use '(const_int 1)' to allow an alternative 24866or '(const_int 0)' to disallow it. The attributes must be a static 24867property of the subtarget; they cannot for example depend on the current 24868operands, on the current optimization level, on the location of the insn 24869within the body of a loop, on whether register allocation has finished, 24870or on the current compiler pass. 24871 24872 The 'enabled' attribute is a correctness property. It tells GCC to act 24873as though the disabled alternatives were never defined in the first 24874place. This is useful when adding new instructions to an existing 24875pattern in cases where the new instructions are only available for 24876certain cpu architecture levels (typically mapped to the '-march=' 24877command-line option). 24878 24879 In contrast, the 'preferred_for_size' and 'preferred_for_speed' 24880attributes are strong optimization hints rather than correctness 24881properties. 'preferred_for_size' tells GCC which alternatives to 24882consider when adding or modifying an instruction that GCC wants to 24883optimize for size. 'preferred_for_speed' does the same thing for speed. 24884Note that things like code motion can lead to cases where code optimized 24885for size uses alternatives that are not preferred for size, and 24886similarly for speed. 24887 24888 Although 'define_insn's can in principle specify the 'enabled' 24889attribute directly, it is often clearer to have subsiduary attributes 24890for each architectural feature of interest. The 'define_insn's can then 24891use these subsiduary attributes to say which alternatives require which 24892features. The example below does this for 'cpu_facility'. 24893 24894 E.g. the following two patterns could easily be merged using the 24895'enabled' attribute: 24896 24897 24898 (define_insn "*movdi_old" 24899 [(set (match_operand:DI 0 "register_operand" "=d") 24900 (match_operand:DI 1 "register_operand" " d"))] 24901 "!TARGET_NEW" 24902 "lgr %0,%1") 24903 24904 (define_insn "*movdi_new" 24905 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 24906 (match_operand:DI 1 "register_operand" " d,d,f"))] 24907 "TARGET_NEW" 24908 "@ 24909 lgr %0,%1 24910 ldgr %0,%1 24911 lgdr %0,%1") 24912 24913 to: 24914 24915 24916 (define_insn "*movdi_combined" 24917 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 24918 (match_operand:DI 1 "register_operand" " d,d,f"))] 24919 "" 24920 "@ 24921 lgr %0,%1 24922 ldgr %0,%1 24923 lgdr %0,%1" 24924 [(set_attr "cpu_facility" "*,new,new")]) 24925 24926 with the 'enabled' attribute defined like this: 24927 24928 24929 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 24930 24931 (define_attr "enabled" "" 24932 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 24933 (and (eq_attr "cpu_facility" "new") 24934 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 24935 (const_int 1)] 24936 (const_int 0))) 24937 24938 24939File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Disable Insn Alternatives, Up: Constraints 24940 2494117.8.7 Defining Machine-Specific Constraints 24942-------------------------------------------- 24943 24944Machine-specific constraints fall into two categories: register and 24945non-register constraints. Within the latter category, constraints which 24946allow subsets of all possible memory or address operands should be 24947specially marked, to give 'reload' more information. 24948 24949 Machine-specific constraints can be given names of arbitrary length, 24950but they must be entirely composed of letters, digits, underscores 24951('_'), and angle brackets ('< >'). Like C identifiers, they must begin 24952with a letter or underscore. 24953 24954 In order to avoid ambiguity in operand constraint strings, no 24955constraint can have a name that begins with any other constraint's name. 24956For example, if 'x' is defined as a constraint name, 'xy' may not be, 24957and vice versa. As a consequence of this rule, no constraint may begin 24958with one of the generic constraint letters: 'E F V X g i m n o p r s'. 24959 24960 Register constraints correspond directly to register classes. *Note 24961Register Classes::. There is thus not much flexibility in their 24962definitions. 24963 24964 -- MD Expression: define_register_constraint name regclass docstring 24965 All three arguments are string constants. NAME is the name of the 24966 constraint, as it will appear in 'match_operand' expressions. If 24967 NAME is a multi-letter constraint its length shall be the same for 24968 all constraints starting with the same letter. REGCLASS can be 24969 either the name of the corresponding register class (*note Register 24970 Classes::), or a C expression which evaluates to the appropriate 24971 register class. If it is an expression, it must have no side 24972 effects, and it cannot look at the operand. The usual use of 24973 expressions is to map some register constraints to 'NO_REGS' when 24974 the register class is not available on a given subarchitecture. 24975 24976 DOCSTRING is a sentence documenting the meaning of the constraint. 24977 Docstrings are explained further below. 24978 24979 Non-register constraints are more like predicates: the constraint 24980definition gives a boolean expression which indicates whether the 24981constraint matches. 24982 24983 -- MD Expression: define_constraint name docstring exp 24984 The NAME and DOCSTRING arguments are the same as for 24985 'define_register_constraint', but note that the docstring comes 24986 immediately after the name for these expressions. EXP is an RTL 24987 expression, obeying the same rules as the RTL expressions in 24988 predicate definitions. *Note Defining Predicates::, for details. 24989 If it evaluates true, the constraint matches; if it evaluates 24990 false, it doesn't. Constraint expressions should indicate which 24991 RTL codes they might match, just like predicate expressions. 24992 24993 'match_test' C expressions have access to the following variables: 24994 24995 OP 24996 The RTL object defining the operand. 24997 MODE 24998 The machine mode of OP. 24999 IVAL 25000 'INTVAL (OP)', if OP is a 'const_int'. 25001 HVAL 25002 'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'. 25003 LVAL 25004 'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'. 25005 RVAL 25006 'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 25007 'const_double'. 25008 25009 The *VAL variables should only be used once another piece of the 25010 expression has verified that OP is the appropriate kind of RTL 25011 object. 25012 25013 Most non-register constraints should be defined with 25014'define_constraint'. The remaining two definition expressions are only 25015appropriate for constraints that should be handled specially by 'reload' 25016if they fail to match. 25017 25018 -- MD Expression: define_memory_constraint name docstring exp 25019 Use this expression for constraints that match a subset of all 25020 memory operands: that is, 'reload' can make them match by 25021 converting the operand to the form '(mem (reg X))', where X is a 25022 base register (from the register class specified by 25023 'BASE_REG_CLASS', *note Register Classes::). 25024 25025 For example, on the S/390, some instructions do not accept 25026 arbitrary memory references, but only those that do not make use of 25027 an index register. The constraint letter 'Q' is defined to 25028 represent a memory address of this type. If 'Q' is defined with 25029 'define_memory_constraint', a 'Q' constraint can handle any memory 25030 operand, because 'reload' knows it can simply copy the memory 25031 address into a base register if required. This is analogous to the 25032 way an 'o' constraint can handle any memory operand. 25033 25034 The syntax and semantics are otherwise identical to 25035 'define_constraint'. 25036 25037 -- MD Expression: define_special_memory_constraint name docstring exp 25038 Use this expression for constraints that match a subset of all 25039 memory operands: that is, 'reload' cannot make them match by 25040 reloading the address as it is described for 25041 'define_memory_constraint' or such address reload is undesirable 25042 with the performance point of view. 25043 25044 For example, 'define_special_memory_constraint' can be useful if 25045 specifically aligned memory is necessary or desirable for some insn 25046 operand. 25047 25048 The syntax and semantics are otherwise identical to 25049 'define_constraint'. 25050 25051 -- MD Expression: define_address_constraint name docstring exp 25052 Use this expression for constraints that match a subset of all 25053 address operands: that is, 'reload' can make the constraint match 25054 by converting the operand to the form '(reg X)', again with X a 25055 base register. 25056 25057 Constraints defined with 'define_address_constraint' can only be 25058 used with the 'address_operand' predicate, or machine-specific 25059 predicates that work the same way. They are treated analogously to 25060 the generic 'p' constraint. 25061 25062 The syntax and semantics are otherwise identical to 25063 'define_constraint'. 25064 25065 For historical reasons, names beginning with the letters 'G H' are 25066reserved for constraints that match only 'const_double's, and names 25067beginning with the letters 'I J K L M N O P' are reserved for 25068constraints that match only 'const_int's. This may change in the 25069future. For the time being, constraints with these names must be 25070written in a stylized form, so that 'genpreds' can tell you did it 25071correctly: 25072 25073 (define_constraint "[GHIJKLMNOP]..." 25074 "DOC..." 25075 (and (match_code "const_int") ; 'const_double' for G/H 25076 CONDITION...)) ; usually a 'match_test' 25077 25078 It is fine to use names beginning with other letters for constraints 25079that match 'const_double's or 'const_int's. 25080 25081 Each docstring in a constraint definition should be one or more 25082complete sentences, marked up in Texinfo format. _They are currently 25083unused._ In the future they will be copied into the GCC manual, in 25084*note Machine Constraints::, replacing the hand-maintained tables 25085currently found in that section. Also, in the future the compiler may 25086use this to give more helpful diagnostics when poor choice of 'asm' 25087constraints causes a reload failure. 25088 25089 If you put the pseudo-Texinfo directive '@internal' at the beginning of 25090a docstring, then (in the future) it will appear only in the internals 25091manual's version of the machine-specific constraint tables. Use this 25092for constraints that should not appear in 'asm' statements. 25093 25094 25095File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 25096 2509717.8.8 Testing constraints from C 25098--------------------------------- 25099 25100It is occasionally useful to test a constraint from C code rather than 25101implicitly via the constraint string in a 'match_operand'. The 25102generated file 'tm_p.h' declares a few interfaces for working with 25103constraints. At present these are defined for all constraints except 25104'g' (which is equivalent to 'general_operand'). 25105 25106 Some valid constraint names are not valid C identifiers, so there is a 25107mangling scheme for referring to them from C. Constraint names that do 25108not contain angle brackets or underscores are left unchanged. 25109Underscores are doubled, each '<' is replaced with '_l', and each '>' 25110with '_g'. Here are some examples: 25111 25112 *Original* *Mangled* 25113 x x 25114 P42x P42x 25115 P4_x P4__x 25116 P4>x P4_gx 25117 P4>> P4_g_g 25118 P4_g> P4__g_g 25119 25120 Throughout this section, the variable C is either a constraint in the 25121abstract sense, or a constant from 'enum constraint_num'; the variable M 25122is a mangled constraint name (usually as part of a larger identifier). 25123 25124 -- Enum: constraint_num 25125 For each constraint except 'g', there is a corresponding 25126 enumeration constant: 'CONSTRAINT_' plus the mangled name of the 25127 constraint. Functions that take an 'enum constraint_num' as an 25128 argument expect one of these constants. 25129 25130 -- Function: inline bool satisfies_constraint_ M (rtx EXP) 25131 For each non-register constraint M except 'g', there is one of 25132 these functions; it returns 'true' if EXP satisfies the constraint. 25133 These functions are only visible if 'rtl.h' was included before 25134 'tm_p.h'. 25135 25136 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 25137 C) 25138 Like the 'satisfies_constraint_M' functions, but the constraint to 25139 test is given as an argument, C. If C specifies a register 25140 constraint, this function will always return 'false'. 25141 25142 -- Function: enum reg_class reg_class_for_constraint (enum 25143 constraint_num C) 25144 Returns the register class associated with C. If C is not a 25145 register constraint, or those registers are not available for the 25146 currently selected subtarget, returns 'NO_REGS'. 25147 25148 Here is an example use of 'satisfies_constraint_M'. In peephole 25149optimizations (*note Peephole Definitions::), operand constraint strings 25150are ignored, so if there are relevant constraints, they must be tested 25151in the C condition. In the example, the optimization is applied if 25152operand 2 does _not_ satisfy the 'K' constraint. (This is a simplified 25153version of a peephole definition from the i386 machine description.) 25154 25155 (define_peephole2 25156 [(match_scratch:SI 3 "r") 25157 (set (match_operand:SI 0 "register_operand" "") 25158 (mult:SI (match_operand:SI 1 "memory_operand" "") 25159 (match_operand:SI 2 "immediate_operand" "")))] 25160 25161 "!satisfies_constraint_K (operands[2])" 25162 25163 [(set (match_dup 3) (match_dup 1)) 25164 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 25165 25166 "") 25167 25168 25169File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 25170 2517117.9 Standard Pattern Names For Generation 25172========================================== 25173 25174Here is a table of the instruction names that are meaningful in the RTL 25175generation pass of the compiler. Giving one of these names to an 25176instruction pattern tells the RTL generation pass that it can use the 25177pattern to accomplish a certain task. 25178 25179'movM' 25180 Here M stands for a two-letter machine mode name, in lowercase. 25181 This instruction pattern moves data with that machine mode from 25182 operand 1 to operand 0. For example, 'movsi' moves full-word data. 25183 25184 If operand 0 is a 'subreg' with mode M of a register whose own mode 25185 is wider than M, the effect of this instruction is to store the 25186 specified value in the part of the register that corresponds to 25187 mode M. Bits outside of M, but which are within the same target 25188 word as the 'subreg' are undefined. Bits which are outside the 25189 target word are left unchanged. 25190 25191 This class of patterns is special in several ways. First of all, 25192 each of these names up to and including full word size _must_ be 25193 defined, because there is no other way to copy a datum from one 25194 place to another. If there are patterns accepting operands in 25195 larger modes, 'movM' must be defined for integer modes of those 25196 sizes. 25197 25198 Second, these patterns are not used solely in the RTL generation 25199 pass. Even the reload pass can generate move insns to copy values 25200 from stack slots into temporary registers. When it does so, one of 25201 the operands is a hard register and the other is an operand that 25202 can need to be reloaded into a register. 25203 25204 Therefore, when given such a pair of operands, the pattern must 25205 generate RTL which needs no reloading and needs no temporary 25206 registers--no registers other than the operands. For example, if 25207 you support the pattern with a 'define_expand', then in such a case 25208 the 'define_expand' mustn't call 'force_reg' or any other such 25209 function which might generate new pseudo registers. 25210 25211 This requirement exists even for subword modes on a RISC machine 25212 where fetching those modes from memory normally requires several 25213 insns and some temporary registers. 25214 25215 During reload a memory reference with an invalid address may be 25216 passed as an operand. Such an address will be replaced with a 25217 valid address later in the reload pass. In this case, nothing may 25218 be done with the address except to use it as it stands. If it is 25219 copied, it will not be replaced with a valid address. No attempt 25220 should be made to make such an address into a valid address and no 25221 routine (such as 'change_address') that will do so may be called. 25222 Note that 'general_operand' will fail when applied to such an 25223 address. 25224 25225 The global variable 'reload_in_progress' (which must be explicitly 25226 declared if required) can be used to determine whether such special 25227 handling is required. 25228 25229 The variety of operands that have reloads depends on the rest of 25230 the machine description, but typically on a RISC machine these can 25231 only be pseudo registers that did not get hard registers, while on 25232 other machines explicit memory references will get optional 25233 reloads. 25234 25235 If a scratch register is required to move an object to or from 25236 memory, it can be allocated using 'gen_reg_rtx' prior to life 25237 analysis. 25238 25239 If there are cases which need scratch registers during or after 25240 reload, you must provide an appropriate secondary_reload target 25241 hook. 25242 25243 The macro 'can_create_pseudo_p' can be used to determine if it is 25244 unsafe to create new pseudo registers. If this variable is 25245 nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new 25246 pseudo. 25247 25248 The constraints on a 'movM' must permit moving any hard register to 25249 any other hard register provided that 'TARGET_HARD_REGNO_MODE_OK' 25250 permits mode M in both registers and 'TARGET_REGISTER_MOVE_COST' 25251 applied to their classes returns a value of 2. 25252 25253 It is obligatory to support floating point 'movM' instructions into 25254 and out of any registers that can hold fixed point values, because 25255 unions and structures (which have modes 'SImode' or 'DImode') can 25256 be in those registers and they may have floating point members. 25257 25258 There may also be a need to support fixed point 'movM' instructions 25259 in and out of floating point registers. Unfortunately, I have 25260 forgotten why this was so, and I don't know whether it is still 25261 true. If 'TARGET_HARD_REGNO_MODE_OK' rejects fixed point values in 25262 floating point registers, then the constraints of the fixed point 25263 'movM' instructions must be designed to avoid ever trying to reload 25264 into a floating point register. 25265 25266'reload_inM' 25267'reload_outM' 25268 These named patterns have been obsoleted by the target hook 25269 'secondary_reload'. 25270 25271 Like 'movM', but used when a scratch register is required to move 25272 between operand 0 and operand 1. Operand 2 describes the scratch 25273 register. See the discussion of the 'SECONDARY_RELOAD_CLASS' macro 25274 in *note Register Classes::. 25275 25276 There are special restrictions on the form of the 'match_operand's 25277 used in these patterns. First, only the predicate for the reload 25278 operand is examined, i.e., 'reload_in' examines operand 1, but not 25279 the predicates for operand 0 or 2. Second, there may be only one 25280 alternative in the constraints. Third, only a single register 25281 class letter may be used for the constraint; subsequent constraint 25282 letters are ignored. As a special exception, an empty constraint 25283 string matches the 'ALL_REGS' register class. This may relieve 25284 ports of the burden of defining an 'ALL_REGS' constraint letter 25285 just for these patterns. 25286 25287'movstrictM' 25288 Like 'movM' except that if operand 0 is a 'subreg' with mode M of a 25289 register whose natural mode is wider, the 'movstrictM' instruction 25290 is guaranteed not to alter any of the register except the part 25291 which belongs to mode M. 25292 25293'movmisalignM' 25294 This variant of a move pattern is designed to load or store a value 25295 from a memory address that is not naturally aligned for its mode. 25296 For a store, the memory will be in operand 0; for a load, the 25297 memory will be in operand 1. The other operand is guaranteed not 25298 to be a memory, so that it's easy to tell whether this is a load or 25299 store. 25300 25301 This pattern is used by the autovectorizer, and when expanding a 25302 'MISALIGNED_INDIRECT_REF' expression. 25303 25304'load_multiple' 25305 Load several consecutive memory locations into consecutive 25306 registers. Operand 0 is the first of the consecutive registers, 25307 operand 1 is the first memory location, and operand 2 is a 25308 constant: the number of consecutive registers. 25309 25310 Define this only if the target machine really has such an 25311 instruction; do not define this if the most efficient way of 25312 loading consecutive registers from memory is to do them one at a 25313 time. 25314 25315 On some machines, there are restrictions as to which consecutive 25316 registers can be stored into memory, such as particular starting or 25317 ending register numbers or only a range of valid counts. For those 25318 machines, use a 'define_expand' (*note Expander Definitions::) and 25319 make the pattern fail if the restrictions are not met. 25320 25321 Write the generated insn as a 'parallel' with elements being a 25322 'set' of one register from the appropriate memory location (you may 25323 also need 'use' or 'clobber' elements). Use a 'match_parallel' 25324 (*note RTL Template::) to recognize the insn. See 'rs6000.md' for 25325 examples of the use of this insn pattern. 25326 25327'store_multiple' 25328 Similar to 'load_multiple', but store several consecutive registers 25329 into consecutive memory locations. Operand 0 is the first of the 25330 consecutive memory locations, operand 1 is the first register, and 25331 operand 2 is a constant: the number of consecutive registers. 25332 25333'vec_load_lanesMN' 25334 Perform an interleaved load of several vectors from memory operand 25335 1 into register operand 0. Both operands have mode M. The 25336 register operand is viewed as holding consecutive vectors of mode 25337 N, while the memory operand is a flat array that contains the same 25338 number of elements. The operation is equivalent to: 25339 25340 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 25341 for (j = 0; j < GET_MODE_NUNITS (N); j++) 25342 for (i = 0; i < c; i++) 25343 operand0[i][j] = operand1[j * c + i]; 25344 25345 For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from 25346 memory into a register of mode 'TI'. The register contains two 25347 consecutive vectors of mode 'V4HI'. 25348 25349 This pattern can only be used if: 25350 TARGET_ARRAY_MODE_SUPPORTED_P (N, C) 25351 is true. GCC assumes that, if a target supports this kind of 25352 instruction for some mode N, it also supports unaligned loads for 25353 vectors of mode N. 25354 25355 This pattern is not allowed to 'FAIL'. 25356 25357'vec_mask_load_lanesMN' 25358 Like 'vec_load_lanesMN', but takes an additional mask operand 25359 (operand 2) that specifies which elements of the destination 25360 vectors should be loaded. Other elements of the destination 25361 vectors are set to zero. The operation is equivalent to: 25362 25363 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 25364 for (j = 0; j < GET_MODE_NUNITS (N); j++) 25365 if (operand2[j]) 25366 for (i = 0; i < c; i++) 25367 operand0[i][j] = operand1[j * c + i]; 25368 else 25369 for (i = 0; i < c; i++) 25370 operand0[i][j] = 0; 25371 25372 This pattern is not allowed to 'FAIL'. 25373 25374'vec_store_lanesMN' 25375 Equivalent to 'vec_load_lanesMN', with the memory and register 25376 operands reversed. That is, the instruction is equivalent to: 25377 25378 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 25379 for (j = 0; j < GET_MODE_NUNITS (N); j++) 25380 for (i = 0; i < c; i++) 25381 operand0[j * c + i] = operand1[i][j]; 25382 25383 for a memory operand 0 and register operand 1. 25384 25385 This pattern is not allowed to 'FAIL'. 25386 25387'vec_mask_store_lanesMN' 25388 Like 'vec_store_lanesMN', but takes an additional mask operand 25389 (operand 2) that specifies which elements of the source vectors 25390 should be stored. The operation is equivalent to: 25391 25392 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 25393 for (j = 0; j < GET_MODE_NUNITS (N); j++) 25394 if (operand2[j]) 25395 for (i = 0; i < c; i++) 25396 operand0[j * c + i] = operand1[i][j]; 25397 25398 This pattern is not allowed to 'FAIL'. 25399 25400'gather_loadMN' 25401 Load several separate memory locations into a vector of mode M. 25402 Operand 1 is a scalar base address and operand 2 is a vector of 25403 mode N containing offsets from that base. Operand 0 is a 25404 destination vector with the same number of elements as N. For each 25405 element index I: 25406 25407 * extend the offset element I to address width, using zero 25408 extension if operand 3 is 1 and sign extension if operand 3 is 25409 zero; 25410 * multiply the extended offset by operand 4; 25411 * add the result to the base; and 25412 * load the value at that address into element I of operand 0. 25413 25414 The value of operand 3 does not matter if the offsets are already 25415 address width. 25416 25417'mask_gather_loadMN' 25418 Like 'gather_loadMN', but takes an extra mask operand as operand 5. 25419 Bit I of the mask is set if element I of the result should be 25420 loaded from memory and clear if element I of the result should be 25421 set to zero. 25422 25423'scatter_storeMN' 25424 Store a vector of mode M into several distinct memory locations. 25425 Operand 0 is a scalar base address and operand 1 is a vector of 25426 mode N containing offsets from that base. Operand 4 is the vector 25427 of values that should be stored, which has the same number of 25428 elements as N. For each element index I: 25429 25430 * extend the offset element I to address width, using zero 25431 extension if operand 2 is 1 and sign extension if operand 2 is 25432 zero; 25433 * multiply the extended offset by operand 3; 25434 * add the result to the base; and 25435 * store element I of operand 4 to that address. 25436 25437 The value of operand 2 does not matter if the offsets are already 25438 address width. 25439 25440'mask_scatter_storeMN' 25441 Like 'scatter_storeMN', but takes an extra mask operand as operand 25442 5. Bit I of the mask is set if element I of the result should be 25443 stored to memory. 25444 25445'vec_setM' 25446 Set given field in the vector value. Operand 0 is the vector to 25447 modify, operand 1 is new value of field and operand 2 specify the 25448 field index. 25449 25450'vec_extractMN' 25451 Extract given field from the vector value. Operand 1 is the 25452 vector, operand 2 specify field index and operand 0 place to store 25453 value into. The N mode is the mode of the field or vector of 25454 fields that should be extracted, should be either element mode of 25455 the vector mode M, or a vector mode with the same element mode and 25456 smaller number of elements. If N is a vector mode, the index is 25457 counted in units of that mode. 25458 25459'vec_initMN' 25460 Initialize the vector to given values. Operand 0 is the vector to 25461 initialize and operand 1 is parallel containing values for 25462 individual fields. The N mode is the mode of the elements, should 25463 be either element mode of the vector mode M, or a vector mode with 25464 the same element mode and smaller number of elements. 25465 25466'vec_duplicateM' 25467 Initialize vector output operand 0 so that each element has the 25468 value given by scalar input operand 1. The vector has mode M and 25469 the scalar has the mode appropriate for one element of M. 25470 25471 This pattern only handles duplicates of non-constant inputs. 25472 Constant vectors go through the 'movM' pattern instead. 25473 25474 This pattern is not allowed to 'FAIL'. 25475 25476'vec_seriesM' 25477 Initialize vector output operand 0 so that element I is equal to 25478 operand 1 plus I times operand 2. In other words, create a linear 25479 series whose base value is operand 1 and whose step is operand 2. 25480 25481 The vector output has mode M and the scalar inputs have the mode 25482 appropriate for one element of M. This pattern is not used for 25483 floating-point vectors, in order to avoid having to specify the 25484 rounding behavior for I > 1. 25485 25486 This pattern is not allowed to 'FAIL'. 25487 25488'while_ultMN' 25489 Set operand 0 to a mask that is true while incrementing operand 1 25490 gives a value that is less than operand 2. Operand 0 has mode N 25491 and operands 1 and 2 are scalar integers of mode M. The operation 25492 is equivalent to: 25493 25494 operand0[0] = operand1 < operand2; 25495 for (i = 1; i < GET_MODE_NUNITS (N); i++) 25496 operand0[i] = operand0[i - 1] && (operand1 + i < operand2); 25497 25498'check_raw_ptrsM' 25499 Check whether, given two pointers A and B and a length LEN, a write 25500 of LEN bytes at A followed by a read of LEN bytes at B can be split 25501 into interleaved byte accesses 'A[0], B[0], A[1], B[1], ...' 25502 without affecting the dependencies between the bytes. Set operand 25503 0 to true if the split is possible and false otherwise. 25504 25505 Operands 1, 2 and 3 provide the values of A, B and LEN 25506 respectively. Operand 4 is a constant integer that provides the 25507 known common alignment of A and B. All inputs have mode M. 25508 25509 This split is possible if: 25510 25511 A == B || A + LEN <= B || B + LEN <= A 25512 25513 You should only define this pattern if the target has a way of 25514 accelerating the test without having to do the individual 25515 comparisons. 25516 25517'check_war_ptrsM' 25518 Like 'check_raw_ptrsM', but with the read and write swapped round. 25519 The split is possible in this case if: 25520 25521 B <= A || A + LEN <= B 25522 25523'vec_cmpMN' 25524 Output a vector comparison. Operand 0 of mode N is the destination 25525 for predicate in operand 1 which is a signed vector comparison with 25526 operands of mode M in operands 2 and 3. Predicate is computed by 25527 element-wise evaluation of the vector comparison with a truth value 25528 of all-ones and a false value of all-zeros. 25529 25530'vec_cmpuMN' 25531 Similar to 'vec_cmpMN' but perform unsigned vector comparison. 25532 25533'vec_cmpeqMN' 25534 Similar to 'vec_cmpMN' but perform equality or non-equality vector 25535 comparison only. If 'vec_cmpMN' or 'vec_cmpuMN' instruction 25536 pattern is supported, it will be preferred over 'vec_cmpeqMN', so 25537 there is no need to define this instruction pattern if the others 25538 are supported. 25539 25540'vcondMN' 25541 Output a conditional vector move. Operand 0 is the destination to 25542 receive a combination of operand 1 and operand 2, which are of mode 25543 M, dependent on the outcome of the predicate in operand 3 which is 25544 a signed vector comparison with operands of mode N in operands 4 25545 and 5. The modes M and N should have the same size. Operand 0 25546 will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is 25547 computed by element-wise evaluation of the vector comparison with a 25548 truth value of all-ones and a false value of all-zeros. 25549 25550'vconduMN' 25551 Similar to 'vcondMN' but performs unsigned vector comparison. 25552 25553'vcondeqMN' 25554 Similar to 'vcondMN' but performs equality or non-equality vector 25555 comparison only. If 'vcondMN' or 'vconduMN' instruction pattern is 25556 supported, it will be preferred over 'vcondeqMN', so there is no 25557 need to define this instruction pattern if the others are 25558 supported. 25559 25560'vcond_mask_MN' 25561 Similar to 'vcondMN' but operand 3 holds a pre-computed result of 25562 vector comparison. 25563 25564'maskloadMN' 25565 Perform a masked load of vector from memory operand 1 of mode M 25566 into register operand 0. Mask is provided in register operand 2 of 25567 mode N. 25568 25569 This pattern is not allowed to 'FAIL'. 25570 25571'maskstoreMN' 25572 Perform a masked store of vector from register operand 1 of mode M 25573 into memory operand 0. Mask is provided in register operand 2 of 25574 mode N. 25575 25576 This pattern is not allowed to 'FAIL'. 25577 25578'vec_permM' 25579 Output a (variable) vector permutation. Operand 0 is the 25580 destination to receive elements from operand 1 and operand 2, which 25581 are of mode M. Operand 3 is the "selector". It is an integral 25582 mode vector of the same width and number of elements as mode M. 25583 25584 The input elements are numbered from 0 in operand 1 through 2*N-1 25585 in operand 2. The elements of the selector must be computed modulo 25586 2*N. Note that if 'rtx_equal_p(operand1, operand2)', this can be 25587 implemented with just operand 1 and selector elements modulo N. 25588 25589 In order to make things easy for a number of targets, if there is 25590 no 'vec_perm' pattern for mode M, but there is for mode Q where Q 25591 is a vector of 'QImode' of the same width as M, the middle-end will 25592 lower the mode M 'VEC_PERM_EXPR' to mode Q. 25593 25594 See also 'TARGET_VECTORIZER_VEC_PERM_CONST', which performs the 25595 analogous operation for constant selectors. 25596 25597'pushM1' 25598 Output a push instruction. Operand 0 is value to push. Used only 25599 when 'PUSH_ROUNDING' is defined. For historical reason, this 25600 pattern may be missing and in such case an 'mov' expander is used 25601 instead, with a 'MEM' expression forming the push operation. The 25602 'mov' expander method is deprecated. 25603 25604'addM3' 25605 Add operand 2 and operand 1, storing the result in operand 0. All 25606 operands must have mode M. This can be used even on two-address 25607 machines, by means of constraints requiring operands 1 and 0 to be 25608 the same location. 25609 25610'ssaddM3', 'usaddM3' 25611'subM3', 'sssubM3', 'ussubM3' 25612'mulM3', 'ssmulM3', 'usmulM3' 25613'divM3', 'ssdivM3' 25614'udivM3', 'usdivM3' 25615'modM3', 'umodM3' 25616'uminM3', 'umaxM3' 25617'andM3', 'iorM3', 'xorM3' 25618 Similar, for other arithmetic operations. 25619 25620'addvM4' 25621 Like 'addM3' but takes a 'code_label' as operand 3 and emits code 25622 to jump to it if signed overflow occurs during the addition. This 25623 pattern is used to implement the built-in functions performing 25624 signed integer addition with overflow checking. 25625 25626'subvM4', 'mulvM4' 25627 Similar, for other signed arithmetic operations. 25628 25629'uaddvM4' 25630 Like 'addvM4' but for unsigned addition. That is to say, the 25631 operation is the same as signed addition but the jump is taken only 25632 on unsigned overflow. 25633 25634'usubvM4', 'umulvM4' 25635 Similar, for other unsigned arithmetic operations. 25636 25637'addptrM3' 25638 Like 'addM3' but is guaranteed to only be used for address 25639 calculations. The expanded code is not allowed to clobber the 25640 condition code. It only needs to be defined if 'addM3' sets the 25641 condition code. If adds used for address calculations and normal 25642 adds are not compatible it is required to expand a distinct pattern 25643 (e.g. using an unspec). The pattern is used by LRA to emit address 25644 calculations. 'addM3' is used if 'addptrM3' is not defined. 25645 25646'fmaM4' 25647 Multiply operand 2 and operand 1, then add operand 3, storing the 25648 result in operand 0 without doing an intermediate rounding step. 25649 All operands must have mode M. This pattern is used to implement 25650 the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99 25651 standard. 25652 25653'fmsM4' 25654 Like 'fmaM4', except operand 3 subtracted from the product instead 25655 of added to the product. This is represented in the rtl as 25656 25657 (fma:M OP1 OP2 (neg:M OP3)) 25658 25659'fnmaM4' 25660 Like 'fmaM4' except that the intermediate product is negated before 25661 being added to operand 3. This is represented in the rtl as 25662 25663 (fma:M (neg:M OP1) OP2 OP3) 25664 25665'fnmsM4' 25666 Like 'fmsM4' except that the intermediate product is negated before 25667 subtracting operand 3. This is represented in the rtl as 25668 25669 (fma:M (neg:M OP1) OP2 (neg:M OP3)) 25670 25671'sminM3', 'smaxM3' 25672 Signed minimum and maximum operations. When used with floating 25673 point, if both operands are zeros, or if either operand is 'NaN', 25674 then it is unspecified which of the two operands is returned as the 25675 result. 25676 25677'fminM3', 'fmaxM3' 25678 IEEE-conformant minimum and maximum operations. If one operand is 25679 a quiet 'NaN', then the other operand is returned. If both 25680 operands are quiet 'NaN', then a quiet 'NaN' is returned. In the 25681 case when gcc supports signaling 'NaN' (-fsignaling-nans) an 25682 invalid floating point exception is raised and a quiet 'NaN' is 25683 returned. 25684 25685 All operands have mode M, which is a scalar or vector 25686 floating-point mode. These patterns are not allowed to 'FAIL'. 25687 25688'reduc_smin_scal_M', 'reduc_smax_scal_M' 25689 Find the signed minimum/maximum of the elements of a vector. The 25690 vector is operand 1, and operand 0 is the scalar result, with mode 25691 equal to the mode of the elements of the input vector. 25692 25693'reduc_umin_scal_M', 'reduc_umax_scal_M' 25694 Find the unsigned minimum/maximum of the elements of a vector. The 25695 vector is operand 1, and operand 0 is the scalar result, with mode 25696 equal to the mode of the elements of the input vector. 25697 25698'reduc_plus_scal_M' 25699 Compute the sum of the elements of a vector. The vector is operand 25700 1, and operand 0 is the scalar result, with mode equal to the mode 25701 of the elements of the input vector. 25702 25703'reduc_and_scal_M' 25704'reduc_ior_scal_M' 25705'reduc_xor_scal_M' 25706 Compute the bitwise 'AND'/'IOR'/'XOR' reduction of the elements of 25707 a vector of mode M. Operand 1 is the vector input and operand 0 is 25708 the scalar result. The mode of the scalar result is the same as 25709 one element of M. 25710 25711'extract_last_M' 25712 Find the last set bit in mask operand 1 and extract the associated 25713 element of vector operand 2. Store the result in scalar operand 0. 25714 Operand 2 has vector mode M while operand 0 has the mode 25715 appropriate for one element of M. Operand 1 has the usual mask 25716 mode for vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'. 25717 25718'fold_extract_last_M' 25719 If any bits of mask operand 2 are set, find the last set bit, 25720 extract the associated element from vector operand 3, and store the 25721 result in operand 0. Store operand 1 in operand 0 otherwise. 25722 Operand 3 has mode M and operands 0 and 1 have the mode appropriate 25723 for one element of M. Operand 2 has the usual mask mode for 25724 vectors of mode M; see 'TARGET_VECTORIZE_GET_MASK_MODE'. 25725 25726'fold_left_plus_M' 25727 Take scalar operand 1 and successively add each element from vector 25728 operand 2. Store the result in scalar operand 0. The vector has 25729 mode M and the scalars have the mode appropriate for one element of 25730 M. The operation is strictly in-order: there is no reassociation. 25731 25732'mask_fold_left_plus_M' 25733 Like 'fold_left_plus_M', but takes an additional mask operand 25734 (operand 3) that specifies which elements of the source vector 25735 should be added. 25736 25737'sdot_prodM' 25738'udot_prodM' 25739 Compute the sum of the products of two signed/unsigned elements. 25740 Operand 1 and operand 2 are of the same mode. Their product, which 25741 is of a wider mode, is computed and added to operand 3. Operand 3 25742 is of a mode equal or wider than the mode of the product. The 25743 result is placed in operand 0, which is of the same mode as operand 25744 3. 25745 25746'ssadM' 25747'usadM' 25748 Compute the sum of absolute differences of two signed/unsigned 25749 elements. Operand 1 and operand 2 are of the same mode. Their 25750 absolute difference, which is of a wider mode, is computed and 25751 added to operand 3. Operand 3 is of a mode equal or wider than the 25752 mode of the absolute difference. The result is placed in operand 25753 0, which is of the same mode as operand 3. 25754 25755'widen_ssumM3' 25756'widen_usumM3' 25757 Operands 0 and 2 are of the same mode, which is wider than the mode 25758 of operand 1. Add operand 1 to operand 2 and place the widened 25759 result in operand 0. (This is used express accumulation of 25760 elements into an accumulator of a wider mode.) 25761 25762'smulhsM3' 25763'umulhsM3' 25764 Signed/unsigned multiply high with scale. This is equivalent to 25765 the C code: 25766 narrow op0, op1, op2; 25767 ... 25768 op0 = (narrow) (((wide) op1 * (wide) op2) >> (N / 2 - 1)); 25769 where the sign of 'narrow' determines whether this is a signed or 25770 unsigned operation, and N is the size of 'wide' in bits. 25771 25772'smulhrsM3' 25773'umulhrsM3' 25774 Signed/unsigned multiply high with round and scale. This is 25775 equivalent to the C code: 25776 narrow op0, op1, op2; 25777 ... 25778 op0 = (narrow) (((((wide) op1 * (wide) op2) >> (N / 2 - 2)) + 1) >> 1); 25779 where the sign of 'narrow' determines whether this is a signed or 25780 unsigned operation, and N is the size of 'wide' in bits. 25781 25782'sdiv_pow2M3' 25783'sdiv_pow2M3' 25784 Signed division by power-of-2 immediate. Equivalent to: 25785 signed op0, op1; 25786 ... 25787 op0 = op1 / (1 << imm); 25788 25789'vec_shl_insert_M' 25790 Shift the elements in vector input operand 1 left one element (i.e. 25791 away from element 0) and fill the vacated element 0 with the scalar 25792 in operand 2. Store the result in vector output operand 0. 25793 Operands 0 and 1 have mode M and operand 2 has the mode appropriate 25794 for one element of M. 25795 25796'vec_shl_M' 25797 Whole vector left shift in bits, i.e. away from element 0. Operand 25798 1 is a vector to be shifted. Operand 2 is an integer shift amount 25799 in bits. Operand 0 is where the resulting shifted vector is 25800 stored. The output and input vectors should have the same modes. 25801 25802'vec_shr_M' 25803 Whole vector right shift in bits, i.e. towards element 0. Operand 25804 1 is a vector to be shifted. Operand 2 is an integer shift amount 25805 in bits. Operand 0 is where the resulting shifted vector is 25806 stored. The output and input vectors should have the same modes. 25807 25808'vec_pack_trunc_M' 25809 Narrow (demote) and merge the elements of two vectors. Operands 1 25810 and 2 are vectors of the same mode having N integral or floating 25811 point elements of size S. Operand 0 is the resulting vector in 25812 which 2*N elements of size S/2 are concatenated after narrowing 25813 them down using truncation. 25814 25815'vec_pack_sbool_trunc_M' 25816 Narrow and merge the elements of two vectors. Operands 1 and 2 are 25817 vectors of the same type having N boolean elements. Operand 0 is 25818 the resulting vector in which 2*N elements are concatenated. The 25819 last operand (operand 3) is the number of elements in the output 25820 vector 2*N as a 'CONST_INT'. This instruction pattern is used when 25821 all the vector input and output operands have the same scalar mode 25822 M and thus using 'vec_pack_trunc_M' would be ambiguous. 25823 25824'vec_pack_ssat_M', 'vec_pack_usat_M' 25825 Narrow (demote) and merge the elements of two vectors. Operands 1 25826 and 2 are vectors of the same mode having N integral elements of 25827 size S. Operand 0 is the resulting vector in which the elements of 25828 the two input vectors are concatenated after narrowing them down 25829 using signed/unsigned saturating arithmetic. 25830 25831'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M' 25832 Narrow, convert to signed/unsigned integral type and merge the 25833 elements of two vectors. Operands 1 and 2 are vectors of the same 25834 mode having N floating point elements of size S. Operand 0 is the 25835 resulting vector in which 2*N elements of size S/2 are 25836 concatenated. 25837 25838'vec_packs_float_M', 'vec_packu_float_M' 25839 Narrow, convert to floating point type and merge the elements of 25840 two vectors. Operands 1 and 2 are vectors of the same mode having 25841 N signed/unsigned integral elements of size S. Operand 0 is the 25842 resulting vector in which 2*N elements of size S/2 are 25843 concatenated. 25844 25845'vec_unpacks_hi_M', 'vec_unpacks_lo_M' 25846 Extract and widen (promote) the high/low part of a vector of signed 25847 integral or floating point elements. The input vector (operand 1) 25848 has N elements of size S. Widen (promote) the high/low elements of 25849 the vector using signed or floating point extension and place the 25850 resulting N/2 values of size 2*S in the output vector (operand 0). 25851 25852'vec_unpacku_hi_M', 'vec_unpacku_lo_M' 25853 Extract and widen (promote) the high/low part of a vector of 25854 unsigned integral elements. The input vector (operand 1) has N 25855 elements of size S. Widen (promote) the high/low elements of the 25856 vector using zero extension and place the resulting N/2 values of 25857 size 2*S in the output vector (operand 0). 25858 25859'vec_unpacks_sbool_hi_M', 'vec_unpacks_sbool_lo_M' 25860 Extract the high/low part of a vector of boolean elements that have 25861 scalar mode M. The input vector (operand 1) has N elements, the 25862 output vector (operand 0) has N/2 elements. The last operand 25863 (operand 2) is the number of elements of the input vector N as a 25864 'CONST_INT'. These patterns are used if both the input and output 25865 vectors have the same scalar mode M and thus using 25866 'vec_unpacks_hi_M' or 'vec_unpacks_lo_M' would be ambiguous. 25867 25868'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M' 25869'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M' 25870 Extract, convert to floating point type and widen the high/low part 25871 of a vector of signed/unsigned integral elements. The input vector 25872 (operand 1) has N elements of size S. Convert the high/low 25873 elements of the vector using floating point conversion and place 25874 the resulting N/2 values of size 2*S in the output vector (operand 25875 0). 25876 25877'vec_unpack_sfix_trunc_hi_M', 25878'vec_unpack_sfix_trunc_lo_M' 25879'vec_unpack_ufix_trunc_hi_M' 25880'vec_unpack_ufix_trunc_lo_M' 25881 Extract, convert to signed/unsigned integer type and widen the 25882 high/low part of a vector of floating point elements. The input 25883 vector (operand 1) has N elements of size S. Convert the high/low 25884 elements of the vector to integers and place the resulting N/2 25885 values of size 2*S in the output vector (operand 0). 25886 25887'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M' 25888'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M' 25889'vec_widen_umult_even_M', 'vec_widen_umult_odd_M' 25890'vec_widen_smult_even_M', 'vec_widen_smult_odd_M' 25891 Signed/Unsigned widening multiplication. The two inputs (operands 25892 1 and 2) are vectors with N signed/unsigned elements of size S. 25893 Multiply the high/low or even/odd elements of the two vectors, and 25894 put the N/2 products of size 2*S in the output vector (operand 0). 25895 A target shouldn't implement even/odd pattern pair if it is less 25896 efficient than lo/hi one. 25897 25898'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M' 25899'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M' 25900 Signed/Unsigned widening shift left. The first input (operand 1) 25901 is a vector with N signed/unsigned elements of size S. Operand 2 25902 is a constant. Shift the high/low elements of operand 1, and put 25903 the N/2 results of size 2*S in the output vector (operand 0). 25904 25905'mulhisi3' 25906 Multiply operands 1 and 2, which have mode 'HImode', and store a 25907 'SImode' product in operand 0. 25908 25909'mulqihi3', 'mulsidi3' 25910 Similar widening-multiplication instructions of other widths. 25911 25912'umulqihi3', 'umulhisi3', 'umulsidi3' 25913 Similar widening-multiplication instructions that do unsigned 25914 multiplication. 25915 25916'usmulqihi3', 'usmulhisi3', 'usmulsidi3' 25917 Similar widening-multiplication instructions that interpret the 25918 first operand as unsigned and the second operand as signed, then do 25919 a signed multiplication. 25920 25921'smulM3_highpart' 25922 Perform a signed multiplication of operands 1 and 2, which have 25923 mode M, and store the most significant half of the product in 25924 operand 0. The least significant half of the product is discarded. 25925 25926'umulM3_highpart' 25927 Similar, but the multiplication is unsigned. 25928 25929'maddMN4' 25930 Multiply operands 1 and 2, sign-extend them to mode N, add operand 25931 3, and store the result in operand 0. Operands 1 and 2 have mode M 25932 and operands 0 and 3 have mode N. Both modes must be integer or 25933 fixed-point modes and N must be twice the size of M. 25934 25935 In other words, 'maddMN4' is like 'mulMN3' except that it also adds 25936 operand 3. 25937 25938 These instructions are not allowed to 'FAIL'. 25939 25940'umaddMN4' 25941 Like 'maddMN4', but zero-extend the multiplication operands instead 25942 of sign-extending them. 25943 25944'ssmaddMN4' 25945 Like 'maddMN4', but all involved operations must be 25946 signed-saturating. 25947 25948'usmaddMN4' 25949 Like 'umaddMN4', but all involved operations must be 25950 unsigned-saturating. 25951 25952'msubMN4' 25953 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 25954 result from operand 3, and store the result in operand 0. Operands 25955 1 and 2 have mode M and operands 0 and 3 have mode N. Both modes 25956 must be integer or fixed-point modes and N must be twice the size 25957 of M. 25958 25959 In other words, 'msubMN4' is like 'mulMN3' except that it also 25960 subtracts the result from operand 3. 25961 25962 These instructions are not allowed to 'FAIL'. 25963 25964'umsubMN4' 25965 Like 'msubMN4', but zero-extend the multiplication operands instead 25966 of sign-extending them. 25967 25968'ssmsubMN4' 25969 Like 'msubMN4', but all involved operations must be 25970 signed-saturating. 25971 25972'usmsubMN4' 25973 Like 'umsubMN4', but all involved operations must be 25974 unsigned-saturating. 25975 25976'divmodM4' 25977 Signed division that produces both a quotient and a remainder. 25978 Operand 1 is divided by operand 2 to produce a quotient stored in 25979 operand 0 and a remainder stored in operand 3. 25980 25981 For machines with an instruction that produces both a quotient and 25982 a remainder, provide a pattern for 'divmodM4' but do not provide 25983 patterns for 'divM3' and 'modM3'. This allows optimization in the 25984 relatively common case when both the quotient and remainder are 25985 computed. 25986 25987 If an instruction that just produces a quotient or just a remainder 25988 exists and is more efficient than the instruction that produces 25989 both, write the output routine of 'divmodM4' to call 25990 'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or 25991 remainder and generate the appropriate instruction. 25992 25993'udivmodM4' 25994 Similar, but does unsigned division. 25995 25996'ashlM3', 'ssashlM3', 'usashlM3' 25997 Arithmetic-shift operand 1 left by a number of bits specified by 25998 operand 2, and store the result in operand 0. Here M is the mode 25999 of operand 0 and operand 1; operand 2's mode is specified by the 26000 instruction pattern, and the compiler will convert the operand to 26001 that mode before generating the instruction. The shift or rotate 26002 expander or instruction pattern should explicitly specify the mode 26003 of the operand 2, it should never be 'VOIDmode'. The meaning of 26004 out-of-range shift counts can optionally be specified by 26005 'TARGET_SHIFT_TRUNCATION_MASK'. *Note 26006 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 26007 26008'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3' 26009 Other shift and rotate instructions, analogous to the 'ashlM3' 26010 instructions. Operand 2 is always a scalar type. 26011 26012'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3' 26013 Vector shift and rotate instructions that take vectors as operand 2 26014 instead of a scalar type. 26015 26016'avgM3_floor' 26017'uavgM3_floor' 26018 Signed and unsigned average instructions. These instructions add 26019 operands 1 and 2 without truncation, divide the result by 2, round 26020 towards -Inf, and store the result in operand 0. This is 26021 equivalent to the C code: 26022 narrow op0, op1, op2; 26023 ... 26024 op0 = (narrow) (((wide) op1 + (wide) op2) >> 1); 26025 where the sign of 'narrow' determines whether this is a signed or 26026 unsigned operation. 26027 26028'avgM3_ceil' 26029'uavgM3_ceil' 26030 Like 'avgM3_floor' and 'uavgM3_floor', but round towards +Inf. 26031 This is equivalent to the C code: 26032 narrow op0, op1, op2; 26033 ... 26034 op0 = (narrow) (((wide) op1 + (wide) op2 + 1) >> 1); 26035 26036'bswapM2' 26037 Reverse the order of bytes of operand 1 and store the result in 26038 operand 0. 26039 26040'negM2', 'ssnegM2', 'usnegM2' 26041 Negate operand 1 and store the result in operand 0. 26042 26043'negvM3' 26044 Like 'negM2' but takes a 'code_label' as operand 2 and emits code 26045 to jump to it if signed overflow occurs during the negation. 26046 26047'absM2' 26048 Store the absolute value of operand 1 into operand 0. 26049 26050'sqrtM2' 26051 Store the square root of operand 1 into operand 0. Both operands 26052 have mode M, which is a scalar or vector floating-point mode. 26053 26054 This pattern is not allowed to 'FAIL'. 26055 26056'rsqrtM2' 26057 Store the reciprocal of the square root of operand 1 into operand 26058 0. Both operands have mode M, which is a scalar or vector 26059 floating-point mode. 26060 26061 On most architectures this pattern is only approximate, so either 26062 its C condition or the 'TARGET_OPTAB_SUPPORTED_P' hook should check 26063 for the appropriate math flags. (Using the C condition is more 26064 direct, but using 'TARGET_OPTAB_SUPPORTED_P' can be useful if a 26065 target-specific built-in also uses the 'rsqrtM2' pattern.) 26066 26067 This pattern is not allowed to 'FAIL'. 26068 26069'fmodM3' 26070 Store the remainder of dividing operand 1 by operand 2 into operand 26071 0, rounded towards zero to an integer. All operands have mode M, 26072 which is a scalar or vector floating-point mode. 26073 26074 This pattern is not allowed to 'FAIL'. 26075 26076'remainderM3' 26077 Store the remainder of dividing operand 1 by operand 2 into operand 26078 0, rounded to the nearest integer. All operands have mode M, which 26079 is a scalar or vector floating-point mode. 26080 26081 This pattern is not allowed to 'FAIL'. 26082 26083'scalbM3' 26084 Raise 'FLT_RADIX' to the power of operand 2, multiply it by operand 26085 1, and store the result in operand 0. All operands have mode M, 26086 which is a scalar or vector floating-point mode. 26087 26088 This pattern is not allowed to 'FAIL'. 26089 26090'ldexpM3' 26091 Raise 2 to the power of operand 2, multiply it by operand 1, and 26092 store the result in operand 0. Operands 0 and 1 have mode M, which 26093 is a scalar or vector floating-point mode. Operand 2's mode has 26094 the same number of elements as M and each element is wide enough to 26095 store an 'int'. The integers are signed. 26096 26097 This pattern is not allowed to 'FAIL'. 26098 26099'cosM2' 26100 Store the cosine of operand 1 into operand 0. Both operands have 26101 mode M, which is a scalar or vector floating-point mode. 26102 26103 This pattern is not allowed to 'FAIL'. 26104 26105'sinM2' 26106 Store the sine of operand 1 into operand 0. Both operands have 26107 mode M, which is a scalar or vector floating-point mode. 26108 26109 This pattern is not allowed to 'FAIL'. 26110 26111'sincosM3' 26112 Store the cosine of operand 2 into operand 0 and the sine of 26113 operand 2 into operand 1. All operands have mode M, which is a 26114 scalar or vector floating-point mode. 26115 26116 Targets that can calculate the sine and cosine simultaneously can 26117 implement this pattern as opposed to implementing individual 26118 'sinM2' and 'cosM2' patterns. The 'sin' and 'cos' built-in 26119 functions will then be expanded to the 'sincosM3' pattern, with one 26120 of the output values left unused. 26121 26122'tanM2' 26123 Store the tangent of operand 1 into operand 0. Both operands have 26124 mode M, which is a scalar or vector floating-point mode. 26125 26126 This pattern is not allowed to 'FAIL'. 26127 26128'asinM2' 26129 Store the arc sine of operand 1 into operand 0. Both operands have 26130 mode M, which is a scalar or vector floating-point mode. 26131 26132 This pattern is not allowed to 'FAIL'. 26133 26134'acosM2' 26135 Store the arc cosine of operand 1 into operand 0. Both operands 26136 have mode M, which is a scalar or vector floating-point mode. 26137 26138 This pattern is not allowed to 'FAIL'. 26139 26140'atanM2' 26141 Store the arc tangent of operand 1 into operand 0. Both operands 26142 have mode M, which is a scalar or vector floating-point mode. 26143 26144 This pattern is not allowed to 'FAIL'. 26145 26146'expM2' 26147 Raise e (the base of natural logarithms) to the power of operand 1 26148 and store the result in operand 0. Both operands have mode M, 26149 which is a scalar or vector floating-point mode. 26150 26151 This pattern is not allowed to 'FAIL'. 26152 26153'expm1M2' 26154 Raise e (the base of natural logarithms) to the power of operand 1, 26155 subtract 1, and store the result in operand 0. Both operands have 26156 mode M, which is a scalar or vector floating-point mode. 26157 26158 For inputs close to zero, the pattern is expected to be more 26159 accurate than a separate 'expM2' and 'subM3' would be. 26160 26161 This pattern is not allowed to 'FAIL'. 26162 26163'exp10M2' 26164 Raise 10 to the power of operand 1 and store the result in operand 26165 0. Both operands have mode M, which is a scalar or vector 26166 floating-point mode. 26167 26168 This pattern is not allowed to 'FAIL'. 26169 26170'exp2M2' 26171 Raise 2 to the power of operand 1 and store the result in operand 26172 0. Both operands have mode M, which is a scalar or vector 26173 floating-point mode. 26174 26175 This pattern is not allowed to 'FAIL'. 26176 26177'logM2' 26178 Store the natural logarithm of operand 1 into operand 0. Both 26179 operands have mode M, which is a scalar or vector floating-point 26180 mode. 26181 26182 This pattern is not allowed to 'FAIL'. 26183 26184'log1pM2' 26185 Add 1 to operand 1, compute the natural logarithm, and store the 26186 result in operand 0. Both operands have mode M, which is a scalar 26187 or vector floating-point mode. 26188 26189 For inputs close to zero, the pattern is expected to be more 26190 accurate than a separate 'addM3' and 'logM2' would be. 26191 26192 This pattern is not allowed to 'FAIL'. 26193 26194'log10M2' 26195 Store the base-10 logarithm of operand 1 into operand 0. Both 26196 operands have mode M, which is a scalar or vector floating-point 26197 mode. 26198 26199 This pattern is not allowed to 'FAIL'. 26200 26201'log2M2' 26202 Store the base-2 logarithm of operand 1 into operand 0. Both 26203 operands have mode M, which is a scalar or vector floating-point 26204 mode. 26205 26206 This pattern is not allowed to 'FAIL'. 26207 26208'logbM2' 26209 Store the base-'FLT_RADIX' logarithm of operand 1 into operand 0. 26210 Both operands have mode M, which is a scalar or vector 26211 floating-point mode. 26212 26213 This pattern is not allowed to 'FAIL'. 26214 26215'significandM2' 26216 Store the significand of floating-point operand 1 in operand 0. 26217 Both operands have mode M, which is a scalar or vector 26218 floating-point mode. 26219 26220 This pattern is not allowed to 'FAIL'. 26221 26222'powM3' 26223 Store the value of operand 1 raised to the exponent operand 2 into 26224 operand 0. All operands have mode M, which is a scalar or vector 26225 floating-point mode. 26226 26227 This pattern is not allowed to 'FAIL'. 26228 26229'atan2M3' 26230 Store the arc tangent (inverse tangent) of operand 1 divided by 26231 operand 2 into operand 0, using the signs of both arguments to 26232 determine the quadrant of the result. All operands have mode M, 26233 which is a scalar or vector floating-point mode. 26234 26235 This pattern is not allowed to 'FAIL'. 26236 26237'floorM2' 26238 Store the largest integral value not greater than operand 1 in 26239 operand 0. Both operands have mode M, which is a scalar or vector 26240 floating-point mode. If '-ffp-int-builtin-inexact' is in effect, 26241 the "inexact" exception may be raised for noninteger operands; 26242 otherwise, it may not. 26243 26244 This pattern is not allowed to 'FAIL'. 26245 26246'btruncM2' 26247 Round operand 1 to an integer, towards zero, and store the result 26248 in operand 0. Both operands have mode M, which is a scalar or 26249 vector floating-point mode. If '-ffp-int-builtin-inexact' is in 26250 effect, the "inexact" exception may be raised for noninteger 26251 operands; otherwise, it may not. 26252 26253 This pattern is not allowed to 'FAIL'. 26254 26255'roundM2' 26256 Round operand 1 to the nearest integer, rounding away from zero in 26257 the event of a tie, and store the result in operand 0. Both 26258 operands have mode M, which is a scalar or vector floating-point 26259 mode. If '-ffp-int-builtin-inexact' is in effect, the "inexact" 26260 exception may be raised for noninteger operands; otherwise, it may 26261 not. 26262 26263 This pattern is not allowed to 'FAIL'. 26264 26265'ceilM2' 26266 Store the smallest integral value not less than operand 1 in 26267 operand 0. Both operands have mode M, which is a scalar or vector 26268 floating-point mode. If '-ffp-int-builtin-inexact' is in effect, 26269 the "inexact" exception may be raised for noninteger operands; 26270 otherwise, it may not. 26271 26272 This pattern is not allowed to 'FAIL'. 26273 26274'nearbyintM2' 26275 Round operand 1 to an integer, using the current rounding mode, and 26276 store the result in operand 0. Do not raise an inexact condition 26277 when the result is different from the argument. Both operands have 26278 mode M, which is a scalar or vector floating-point mode. 26279 26280 This pattern is not allowed to 'FAIL'. 26281 26282'rintM2' 26283 Round operand 1 to an integer, using the current rounding mode, and 26284 store the result in operand 0. Raise an inexact condition when the 26285 result is different from the argument. Both operands have mode M, 26286 which is a scalar or vector floating-point mode. 26287 26288 This pattern is not allowed to 'FAIL'. 26289 26290'lrintMN2' 26291 Convert operand 1 (valid for floating point mode M) to fixed point 26292 mode N as a signed number according to the current rounding mode 26293 and store in operand 0 (which has mode N). 26294 26295'lroundMN2' 26296 Convert operand 1 (valid for floating point mode M) to fixed point 26297 mode N as a signed number rounding to nearest and away from zero 26298 and store in operand 0 (which has mode N). 26299 26300'lfloorMN2' 26301 Convert operand 1 (valid for floating point mode M) to fixed point 26302 mode N as a signed number rounding down and store in operand 0 26303 (which has mode N). 26304 26305'lceilMN2' 26306 Convert operand 1 (valid for floating point mode M) to fixed point 26307 mode N as a signed number rounding up and store in operand 0 (which 26308 has mode N). 26309 26310'copysignM3' 26311 Store a value with the magnitude of operand 1 and the sign of 26312 operand 2 into operand 0. All operands have mode M, which is a 26313 scalar or vector floating-point mode. 26314 26315 This pattern is not allowed to 'FAIL'. 26316 26317'xorsignM3' 26318 Equivalent to 'op0 = op1 * copysign (1.0, op2)': store a value with 26319 the magnitude of operand 1 and the sign of operand 2 into operand 26320 0. All operands have mode M, which is a scalar or vector 26321 floating-point mode. 26322 26323 This pattern is not allowed to 'FAIL'. 26324 26325'ffsM2' 26326 Store into operand 0 one plus the index of the least significant 26327 1-bit of operand 1. If operand 1 is zero, store zero. 26328 26329 M is either a scalar or vector integer mode. When it is a scalar, 26330 operand 1 has mode M but operand 0 can have whatever scalar integer 26331 mode is suitable for the target. The compiler will insert 26332 conversion instructions as necessary (typically to convert the 26333 result to the same width as 'int'). When M is a vector, both 26334 operands must have mode M. 26335 26336 This pattern is not allowed to 'FAIL'. 26337 26338'clrsbM2' 26339 Count leading redundant sign bits. Store into operand 0 the number 26340 of redundant sign bits in operand 1, starting at the most 26341 significant bit position. A redundant sign bit is defined as any 26342 sign bit after the first. As such, this count will be one less 26343 than the count of leading sign bits. 26344 26345 M is either a scalar or vector integer mode. When it is a scalar, 26346 operand 1 has mode M but operand 0 can have whatever scalar integer 26347 mode is suitable for the target. The compiler will insert 26348 conversion instructions as necessary (typically to convert the 26349 result to the same width as 'int'). When M is a vector, both 26350 operands must have mode M. 26351 26352 This pattern is not allowed to 'FAIL'. 26353 26354'clzM2' 26355 Store into operand 0 the number of leading 0-bits in operand 1, 26356 starting at the most significant bit position. If operand 1 is 0, 26357 the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 26358 result is undefined or has a useful value. 26359 26360 M is either a scalar or vector integer mode. When it is a scalar, 26361 operand 1 has mode M but operand 0 can have whatever scalar integer 26362 mode is suitable for the target. The compiler will insert 26363 conversion instructions as necessary (typically to convert the 26364 result to the same width as 'int'). When M is a vector, both 26365 operands must have mode M. 26366 26367 This pattern is not allowed to 'FAIL'. 26368 26369'ctzM2' 26370 Store into operand 0 the number of trailing 0-bits in operand 1, 26371 starting at the least significant bit position. If operand 1 is 0, 26372 the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 26373 result is undefined or has a useful value. 26374 26375 M is either a scalar or vector integer mode. When it is a scalar, 26376 operand 1 has mode M but operand 0 can have whatever scalar integer 26377 mode is suitable for the target. The compiler will insert 26378 conversion instructions as necessary (typically to convert the 26379 result to the same width as 'int'). When M is a vector, both 26380 operands must have mode M. 26381 26382 This pattern is not allowed to 'FAIL'. 26383 26384'popcountM2' 26385 Store into operand 0 the number of 1-bits in operand 1. 26386 26387 M is either a scalar or vector integer mode. When it is a scalar, 26388 operand 1 has mode M but operand 0 can have whatever scalar integer 26389 mode is suitable for the target. The compiler will insert 26390 conversion instructions as necessary (typically to convert the 26391 result to the same width as 'int'). When M is a vector, both 26392 operands must have mode M. 26393 26394 This pattern is not allowed to 'FAIL'. 26395 26396'parityM2' 26397 Store into operand 0 the parity of operand 1, i.e. the number of 26398 1-bits in operand 1 modulo 2. 26399 26400 M is either a scalar or vector integer mode. When it is a scalar, 26401 operand 1 has mode M but operand 0 can have whatever scalar integer 26402 mode is suitable for the target. The compiler will insert 26403 conversion instructions as necessary (typically to convert the 26404 result to the same width as 'int'). When M is a vector, both 26405 operands must have mode M. 26406 26407 This pattern is not allowed to 'FAIL'. 26408 26409'one_cmplM2' 26410 Store the bitwise-complement of operand 1 into operand 0. 26411 26412'cpymemM' 26413 Block copy instruction. The destination and source blocks of 26414 memory are the first two operands, and both are 'mem:BLK's with an 26415 address in mode 'Pmode'. 26416 26417 The number of bytes to copy is the third operand, in mode M. 26418 Usually, you specify 'Pmode' for M. However, if you can generate 26419 better code knowing the range of valid lengths is smaller than 26420 those representable in a full Pmode pointer, you should provide a 26421 pattern with a mode corresponding to the range of values you can 26422 handle efficiently (e.g., 'QImode' for values in the range 0-127; 26423 note we avoid numbers that appear negative) and also a pattern with 26424 'Pmode'. 26425 26426 The fourth operand is the known shared alignment of the source and 26427 destination, in the form of a 'const_int' rtx. Thus, if the 26428 compiler knows that both source and destination are word-aligned, 26429 it may provide the value 4 for this operand. 26430 26431 Optional operands 5 and 6 specify expected alignment and size of 26432 block respectively. The expected alignment differs from alignment 26433 in operand 4 in a way that the blocks are not required to be 26434 aligned according to it in all cases. This expected alignment is 26435 also in bytes, just like operand 4. Expected size, when unknown, 26436 is set to '(const_int -1)'. 26437 26438 Descriptions of multiple 'cpymemM' patterns can only be beneficial 26439 if the patterns for smaller modes have fewer restrictions on their 26440 first, second and fourth operands. Note that the mode M in 26441 'cpymemM' does not impose any restriction on the mode of 26442 individually copied data units in the block. 26443 26444 The 'cpymemM' patterns need not give special consideration to the 26445 possibility that the source and destination strings might overlap. 26446 These patterns are used to do inline expansion of 26447 '__builtin_memcpy'. 26448 26449'movmemM' 26450 Block move instruction. The destination and source blocks of 26451 memory are the first two operands, and both are 'mem:BLK's with an 26452 address in mode 'Pmode'. 26453 26454 The number of bytes to copy is the third operand, in mode M. 26455 Usually, you specify 'Pmode' for M. However, if you can generate 26456 better code knowing the range of valid lengths is smaller than 26457 those representable in a full Pmode pointer, you should provide a 26458 pattern with a mode corresponding to the range of values you can 26459 handle efficiently (e.g., 'QImode' for values in the range 0-127; 26460 note we avoid numbers that appear negative) and also a pattern with 26461 'Pmode'. 26462 26463 The fourth operand is the known shared alignment of the source and 26464 destination, in the form of a 'const_int' rtx. Thus, if the 26465 compiler knows that both source and destination are word-aligned, 26466 it may provide the value 4 for this operand. 26467 26468 Optional operands 5 and 6 specify expected alignment and size of 26469 block respectively. The expected alignment differs from alignment 26470 in operand 4 in a way that the blocks are not required to be 26471 aligned according to it in all cases. This expected alignment is 26472 also in bytes, just like operand 4. Expected size, when unknown, 26473 is set to '(const_int -1)'. 26474 26475 Descriptions of multiple 'movmemM' patterns can only be beneficial 26476 if the patterns for smaller modes have fewer restrictions on their 26477 first, second and fourth operands. Note that the mode M in 26478 'movmemM' does not impose any restriction on the mode of 26479 individually copied data units in the block. 26480 26481 The 'movmemM' patterns must correctly handle the case where the 26482 source and destination strings overlap. These patterns are used to 26483 do inline expansion of '__builtin_memmove'. 26484 26485'movstr' 26486 String copy instruction, with 'stpcpy' semantics. Operand 0 is an 26487 output operand in mode 'Pmode'. The addresses of the destination 26488 and source strings are operands 1 and 2, and both are 'mem:BLK's 26489 with addresses in mode 'Pmode'. The execution of the expansion of 26490 this pattern should store in operand 0 the address in which the 26491 'NUL' terminator was stored in the destination string. 26492 26493 This pattern has also several optional operands that are same as in 26494 'setmem'. 26495 26496'setmemM' 26497 Block set instruction. The destination string is the first 26498 operand, given as a 'mem:BLK' whose address is in mode 'Pmode'. 26499 The number of bytes to set is the second operand, in mode M. The 26500 value to initialize the memory with is the third operand. Targets 26501 that only support the clearing of memory should reject any value 26502 that is not the constant 0. See 'cpymemM' for a discussion of the 26503 choice of mode. 26504 26505 The fourth operand is the known alignment of the destination, in 26506 the form of a 'const_int' rtx. Thus, if the compiler knows that 26507 the destination is word-aligned, it may provide the value 4 for 26508 this operand. 26509 26510 Optional operands 5 and 6 specify expected alignment and size of 26511 block respectively. The expected alignment differs from alignment 26512 in operand 4 in a way that the blocks are not required to be 26513 aligned according to it in all cases. This expected alignment is 26514 also in bytes, just like operand 4. Expected size, when unknown, 26515 is set to '(const_int -1)'. Operand 7 is the minimal size of the 26516 block and operand 8 is the maximal size of the block (NULL if it 26517 cannot be represented as CONST_INT). Operand 9 is the probable 26518 maximal size (i.e. we cannot rely on it for correctness, but it can 26519 be used for choosing proper code sequence for a given size). 26520 26521 The use for multiple 'setmemM' is as for 'cpymemM'. 26522 26523'cmpstrnM' 26524 String compare instruction, with five operands. Operand 0 is the 26525 output; it has mode M. The remaining four operands are like the 26526 operands of 'cpymemM'. The two memory blocks specified are 26527 compared byte by byte in lexicographic order starting at the 26528 beginning of each string. The instruction is not allowed to 26529 prefetch more than one byte at a time since either string may end 26530 in the first byte and reading past that may access an invalid page 26531 or segment and cause a fault. The comparison terminates early if 26532 the fetched bytes are different or if they are equal to zero. The 26533 effect of the instruction is to store a value in operand 0 whose 26534 sign indicates the result of the comparison. 26535 26536'cmpstrM' 26537 String compare instruction, without known maximum length. Operand 26538 0 is the output; it has mode M. The second and third operand are 26539 the blocks of memory to be compared; both are 'mem:BLK' with an 26540 address in mode 'Pmode'. 26541 26542 The fourth operand is the known shared alignment of the source and 26543 destination, in the form of a 'const_int' rtx. Thus, if the 26544 compiler knows that both source and destination are word-aligned, 26545 it may provide the value 4 for this operand. 26546 26547 The two memory blocks specified are compared byte by byte in 26548 lexicographic order starting at the beginning of each string. The 26549 instruction is not allowed to prefetch more than one byte at a time 26550 since either string may end in the first byte and reading past that 26551 may access an invalid page or segment and cause a fault. The 26552 comparison will terminate when the fetched bytes are different or 26553 if they are equal to zero. The effect of the instruction is to 26554 store a value in operand 0 whose sign indicates the result of the 26555 comparison. 26556 26557'cmpmemM' 26558 Block compare instruction, with five operands like the operands of 26559 'cmpstrM'. The two memory blocks specified are compared byte by 26560 byte in lexicographic order starting at the beginning of each 26561 block. Unlike 'cmpstrM' the instruction can prefetch any bytes in 26562 the two memory blocks. Also unlike 'cmpstrM' the comparison will 26563 not stop if both bytes are zero. The effect of the instruction is 26564 to store a value in operand 0 whose sign indicates the result of 26565 the comparison. 26566 26567'strlenM' 26568 Compute the length of a string, with three operands. Operand 0 is 26569 the result (of mode M), operand 1 is a 'mem' referring to the first 26570 character of the string, operand 2 is the character to search for 26571 (normally zero), and operand 3 is a constant describing the known 26572 alignment of the beginning of the string. 26573 26574'floatMN2' 26575 Convert signed integer operand 1 (valid for fixed point mode M) to 26576 floating point mode N and store in operand 0 (which has mode N). 26577 26578'floatunsMN2' 26579 Convert unsigned integer operand 1 (valid for fixed point mode M) 26580 to floating point mode N and store in operand 0 (which has mode N). 26581 26582'fixMN2' 26583 Convert operand 1 (valid for floating point mode M) to fixed point 26584 mode N as a signed number and store in operand 0 (which has mode 26585 N). This instruction's result is defined only when the value of 26586 operand 1 is an integer. 26587 26588 If the machine description defines this pattern, it also needs to 26589 define the 'ftrunc' pattern. 26590 26591'fixunsMN2' 26592 Convert operand 1 (valid for floating point mode M) to fixed point 26593 mode N as an unsigned number and store in operand 0 (which has mode 26594 N). This instruction's result is defined only when the value of 26595 operand 1 is an integer. 26596 26597'ftruncM2' 26598 Convert operand 1 (valid for floating point mode M) to an integer 26599 value, still represented in floating point mode M, and store it in 26600 operand 0 (valid for floating point mode M). 26601 26602'fix_truncMN2' 26603 Like 'fixMN2' but works for any floating point value of mode M by 26604 converting the value to an integer. 26605 26606'fixuns_truncMN2' 26607 Like 'fixunsMN2' but works for any floating point value of mode M 26608 by converting the value to an integer. 26609 26610'truncMN2' 26611 Truncate operand 1 (valid for mode M) to mode N and store in 26612 operand 0 (which has mode N). Both modes must be fixed point or 26613 both floating point. 26614 26615'extendMN2' 26616 Sign-extend operand 1 (valid for mode M) to mode N and store in 26617 operand 0 (which has mode N). Both modes must be fixed point or 26618 both floating point. 26619 26620'zero_extendMN2' 26621 Zero-extend operand 1 (valid for mode M) to mode N and store in 26622 operand 0 (which has mode N). Both modes must be fixed point. 26623 26624'fractMN2' 26625 Convert operand 1 of mode M to mode N and store in operand 0 (which 26626 has mode N). Mode M and mode N could be fixed-point to 26627 fixed-point, signed integer to fixed-point, fixed-point to signed 26628 integer, floating-point to fixed-point, or fixed-point to 26629 floating-point. When overflows or underflows happen, the results 26630 are undefined. 26631 26632'satfractMN2' 26633 Convert operand 1 of mode M to mode N and store in operand 0 (which 26634 has mode N). Mode M and mode N could be fixed-point to 26635 fixed-point, signed integer to fixed-point, or floating-point to 26636 fixed-point. When overflows or underflows happen, the instruction 26637 saturates the results to the maximum or the minimum. 26638 26639'fractunsMN2' 26640 Convert operand 1 of mode M to mode N and store in operand 0 (which 26641 has mode N). Mode M and mode N could be unsigned integer to 26642 fixed-point, or fixed-point to unsigned integer. When overflows or 26643 underflows happen, the results are undefined. 26644 26645'satfractunsMN2' 26646 Convert unsigned integer operand 1 of mode M to fixed-point mode N 26647 and store in operand 0 (which has mode N). When overflows or 26648 underflows happen, the instruction saturates the results to the 26649 maximum or the minimum. 26650 26651'extvM' 26652 Extract a bit-field from register operand 1, sign-extend it, and 26653 store it in operand 0. Operand 2 specifies the width of the field 26654 in bits and operand 3 the starting bit, which counts from the most 26655 significant bit if 'BITS_BIG_ENDIAN' is true and from the least 26656 significant bit otherwise. 26657 26658 Operands 0 and 1 both have mode M. Operands 2 and 3 have a 26659 target-specific mode. 26660 26661'extvmisalignM' 26662 Extract a bit-field from memory operand 1, sign extend it, and 26663 store it in operand 0. Operand 2 specifies the width in bits and 26664 operand 3 the starting bit. The starting bit is always somewhere 26665 in the first byte of operand 1; it counts from the most significant 26666 bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit 26667 otherwise. 26668 26669 Operand 0 has mode M while operand 1 has 'BLK' mode. Operands 2 26670 and 3 have a target-specific mode. 26671 26672 The instruction must not read beyond the last byte of the 26673 bit-field. 26674 26675'extzvM' 26676 Like 'extvM' except that the bit-field value is zero-extended. 26677 26678'extzvmisalignM' 26679 Like 'extvmisalignM' except that the bit-field value is 26680 zero-extended. 26681 26682'insvM' 26683 Insert operand 3 into a bit-field of register operand 0. Operand 1 26684 specifies the width of the field in bits and operand 2 the starting 26685 bit, which counts from the most significant bit if 26686 'BITS_BIG_ENDIAN' is true and from the least significant bit 26687 otherwise. 26688 26689 Operands 0 and 3 both have mode M. Operands 1 and 2 have a 26690 target-specific mode. 26691 26692'insvmisalignM' 26693 Insert operand 3 into a bit-field of memory operand 0. Operand 1 26694 specifies the width of the field in bits and operand 2 the starting 26695 bit. The starting bit is always somewhere in the first byte of 26696 operand 0; it counts from the most significant bit if 26697 'BITS_BIG_ENDIAN' is true and from the least significant bit 26698 otherwise. 26699 26700 Operand 3 has mode M while operand 0 has 'BLK' mode. Operands 1 26701 and 2 have a target-specific mode. 26702 26703 The instruction must not read or write beyond the last byte of the 26704 bit-field. 26705 26706'extv' 26707 Extract a bit-field from operand 1 (a register or memory operand), 26708 where operand 2 specifies the width in bits and operand 3 the 26709 starting bit, and store it in operand 0. Operand 0 must have mode 26710 'word_mode'. Operand 1 may have mode 'byte_mode' or 'word_mode'; 26711 often 'word_mode' is allowed only for registers. Operands 2 and 3 26712 must be valid for 'word_mode'. 26713 26714 The RTL generation pass generates this instruction only with 26715 constants for operands 2 and 3 and the constant is never zero for 26716 operand 2. 26717 26718 The bit-field value is sign-extended to a full word integer before 26719 it is stored in operand 0. 26720 26721 This pattern is deprecated; please use 'extvM' and 'extvmisalignM' 26722 instead. 26723 26724'extzv' 26725 Like 'extv' except that the bit-field value is zero-extended. 26726 26727 This pattern is deprecated; please use 'extzvM' and 26728 'extzvmisalignM' instead. 26729 26730'insv' 26731 Store operand 3 (which must be valid for 'word_mode') into a 26732 bit-field in operand 0, where operand 1 specifies the width in bits 26733 and operand 2 the starting bit. Operand 0 may have mode 26734 'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for 26735 registers. Operands 1 and 2 must be valid for 'word_mode'. 26736 26737 The RTL generation pass generates this instruction only with 26738 constants for operands 1 and 2 and the constant is never zero for 26739 operand 1. 26740 26741 This pattern is deprecated; please use 'insvM' and 'insvmisalignM' 26742 instead. 26743 26744'movMODEcc' 26745 Conditionally move operand 2 or operand 3 into operand 0 according 26746 to the comparison in operand 1. If the comparison is true, operand 26747 2 is moved into operand 0, otherwise operand 3 is moved. 26748 26749 The mode of the operands being compared need not be the same as the 26750 operands being moved. Some machines, sparc64 for example, have 26751 instructions that conditionally move an integer value based on the 26752 floating point condition codes and vice versa. 26753 26754 If the machine does not have conditional move instructions, do not 26755 define these patterns. 26756 26757'addMODEcc' 26758 Similar to 'movMODEcc' but for conditional addition. Conditionally 26759 move operand 2 or (operands 2 + operand 3) into operand 0 according 26760 to the comparison in operand 1. If the comparison is false, 26761 operand 2 is moved into operand 0, otherwise (operand 2 + operand 26762 3) is moved. 26763 26764'cond_addMODE' 26765'cond_subMODE' 26766'cond_mulMODE' 26767'cond_divMODE' 26768'cond_udivMODE' 26769'cond_modMODE' 26770'cond_umodMODE' 26771'cond_andMODE' 26772'cond_iorMODE' 26773'cond_xorMODE' 26774'cond_sminMODE' 26775'cond_smaxMODE' 26776'cond_uminMODE' 26777'cond_umaxMODE' 26778 When operand 1 is true, perform an operation on operands 2 and 3 26779 and store the result in operand 0, otherwise store operand 4 in 26780 operand 0. The operation works elementwise if the operands are 26781 vectors. 26782 26783 The scalar case is equivalent to: 26784 26785 op0 = op1 ? op2 OP op3 : op4; 26786 26787 while the vector case is equivalent to: 26788 26789 for (i = 0; i < GET_MODE_NUNITS (M); i++) 26790 op0[i] = op1[i] ? op2[i] OP op3[i] : op4[i]; 26791 26792 where, for example, OP is '+' for 'cond_addMODE'. 26793 26794 When defined for floating-point modes, the contents of 'op3[i]' are 26795 not interpreted if 'op1[i]' is false, just like they would not be 26796 in a normal C '?:' condition. 26797 26798 Operands 0, 2, 3 and 4 all have mode M. Operand 1 is a scalar 26799 integer if M is scalar, otherwise it has the mode returned by 26800 'TARGET_VECTORIZE_GET_MASK_MODE'. 26801 26802'cond_fmaMODE' 26803'cond_fmsMODE' 26804'cond_fnmaMODE' 26805'cond_fnmsMODE' 26806 Like 'cond_addM', except that the conditional operation takes 3 26807 operands rather than two. For example, the vector form of 26808 'cond_fmaMODE' is equivalent to: 26809 26810 for (i = 0; i < GET_MODE_NUNITS (M); i++) 26811 op0[i] = op1[i] ? fma (op2[i], op3[i], op4[i]) : op5[i]; 26812 26813'negMODEcc' 26814 Similar to 'movMODEcc' but for conditional negation. Conditionally 26815 move the negation of operand 2 or the unchanged operand 3 into 26816 operand 0 according to the comparison in operand 1. If the 26817 comparison is true, the negation of operand 2 is moved into operand 26818 0, otherwise operand 3 is moved. 26819 26820'notMODEcc' 26821 Similar to 'negMODEcc' but for conditional complement. 26822 Conditionally move the bitwise complement of operand 2 or the 26823 unchanged operand 3 into operand 0 according to the comparison in 26824 operand 1. If the comparison is true, the complement of operand 2 26825 is moved into operand 0, otherwise operand 3 is moved. 26826 26827'cstoreMODE4' 26828 Store zero or nonzero in operand 0 according to whether a 26829 comparison is true. Operand 1 is a comparison operator. Operand 2 26830 and operand 3 are the first and second operand of the comparison, 26831 respectively. You specify the mode that operand 0 must have when 26832 you write the 'match_operand' expression. The compiler 26833 automatically sees which mode you have used and supplies an operand 26834 of that mode. 26835 26836 The value stored for a true condition must have 1 as its low bit, 26837 or else must be negative. Otherwise the instruction is not 26838 suitable and you should omit it from the machine description. You 26839 describe to the compiler exactly which value is stored by defining 26840 the macro 'STORE_FLAG_VALUE' (*note Misc::). If a description 26841 cannot be found that can be used for all the possible comparison 26842 operators, you should pick one and use a 'define_expand' to map all 26843 results onto the one you chose. 26844 26845 These operations may 'FAIL', but should do so only in relatively 26846 uncommon cases; if they would 'FAIL' for common cases involving 26847 integer comparisons, it is best to restrict the predicates to not 26848 allow these operands. Likewise if a given comparison operator will 26849 always fail, independent of the operands (for floating-point modes, 26850 the 'ordered_comparison_operator' predicate is often useful in this 26851 case). 26852 26853 If this pattern is omitted, the compiler will generate a 26854 conditional branch--for example, it may copy a constant one to the 26855 target and branching around an assignment of zero to the target--or 26856 a libcall. If the predicate for operand 1 only rejects some 26857 operators, it will also try reordering the operands and/or 26858 inverting the result value (e.g. by an exclusive OR). These 26859 possibilities could be cheaper or equivalent to the instructions 26860 used for the 'cstoreMODE4' pattern followed by those required to 26861 convert a positive result from 'STORE_FLAG_VALUE' to 1; in this 26862 case, you can and should make operand 1's predicate reject some 26863 operators in the 'cstoreMODE4' pattern, or remove the pattern 26864 altogether from the machine description. 26865 26866'cbranchMODE4' 26867 Conditional branch instruction combined with a compare instruction. 26868 Operand 0 is a comparison operator. Operand 1 and operand 2 are 26869 the first and second operands of the comparison, respectively. 26870 Operand 3 is the 'code_label' to jump to. 26871 26872'jump' 26873 A jump inside a function; an unconditional branch. Operand 0 is 26874 the 'code_label' to jump to. This pattern name is mandatory on all 26875 machines. 26876 26877'call' 26878 Subroutine call instruction returning no value. Operand 0 is the 26879 function to call; operand 1 is the number of bytes of arguments 26880 pushed as a 'const_int'; operand 2 is the number of registers used 26881 as operands. 26882 26883 On most machines, operand 2 is not actually stored into the RTL 26884 pattern. It is supplied for the sake of some RISC machines which 26885 need to put this information into the assembler code; they can put 26886 it in the RTL instead of operand 1. 26887 26888 Operand 0 should be a 'mem' RTX whose address is the address of the 26889 function. Note, however, that this address can be a 'symbol_ref' 26890 expression even if it would not be a legitimate memory address on 26891 the target machine. If it is also not a valid argument for a call 26892 instruction, the pattern for this operation should be a 26893 'define_expand' (*note Expander Definitions::) that places the 26894 address into a register and uses that register in the call 26895 instruction. 26896 26897'call_value' 26898 Subroutine call instruction returning a value. Operand 0 is the 26899 hard register in which the value is returned. There are three more 26900 operands, the same as the three operands of the 'call' instruction 26901 (but with numbers increased by one). 26902 26903 Subroutines that return 'BLKmode' objects use the 'call' insn. 26904 26905'call_pop', 'call_value_pop' 26906 Similar to 'call' and 'call_value', except used if defined and if 26907 'RETURN_POPS_ARGS' is nonzero. They should emit a 'parallel' that 26908 contains both the function call and a 'set' to indicate the 26909 adjustment made to the frame pointer. 26910 26911 For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of 26912 these patterns increases the number of functions for which the 26913 frame pointer can be eliminated, if desired. 26914 26915'untyped_call' 26916 Subroutine call instruction returning a value of any type. Operand 26917 0 is the function to call; operand 1 is a memory location where the 26918 result of calling the function is to be stored; operand 2 is a 26919 'parallel' expression where each element is a 'set' expression that 26920 indicates the saving of a function return value into the result 26921 block. 26922 26923 This instruction pattern should be defined to support 26924 '__builtin_apply' on machines where special instructions are needed 26925 to call a subroutine with arbitrary arguments or to save the value 26926 returned. This instruction pattern is required on machines that 26927 have multiple registers that can hold a return value (i.e. 26928 'FUNCTION_VALUE_REGNO_P' is true for more than one register). 26929 26930'return' 26931 Subroutine return instruction. This instruction pattern name 26932 should be defined only if a single instruction can do all the work 26933 of returning from a function. 26934 26935 Like the 'movM' patterns, this pattern is also used after the RTL 26936 generation phase. In this case it is to support machines where 26937 multiple instructions are usually needed to return from a function, 26938 but some class of functions only requires one instruction to 26939 implement a return. Normally, the applicable functions are those 26940 which do not need to save any registers or allocate stack space. 26941 26942 It is valid for this pattern to expand to an instruction using 26943 'simple_return' if no epilogue is required. 26944 26945'simple_return' 26946 Subroutine return instruction. This instruction pattern name 26947 should be defined only if a single instruction can do all the work 26948 of returning from a function on a path where no epilogue is 26949 required. This pattern is very similar to the 'return' instruction 26950 pattern, but it is emitted only by the shrink-wrapping optimization 26951 on paths where the function prologue has not been executed, and a 26952 function return should occur without any of the effects of the 26953 epilogue. Additional uses may be introduced on paths where both 26954 the prologue and the epilogue have executed. 26955 26956 For such machines, the condition specified in this pattern should 26957 only be true when 'reload_completed' is nonzero and the function's 26958 epilogue would only be a single instruction. For machines with 26959 register windows, the routine 'leaf_function_p' may be used to 26960 determine if a register window push is required. 26961 26962 Machines that have conditional return instructions should define 26963 patterns such as 26964 26965 (define_insn "" 26966 [(set (pc) 26967 (if_then_else (match_operator 26968 0 "comparison_operator" 26969 [(cc0) (const_int 0)]) 26970 (return) 26971 (pc)))] 26972 "CONDITION" 26973 "...") 26974 26975 where CONDITION would normally be the same condition specified on 26976 the named 'return' pattern. 26977 26978'untyped_return' 26979 Untyped subroutine return instruction. This instruction pattern 26980 should be defined to support '__builtin_return' on machines where 26981 special instructions are needed to return a value of any type. 26982 26983 Operand 0 is a memory location where the result of calling a 26984 function with '__builtin_apply' is stored; operand 1 is a 26985 'parallel' expression where each element is a 'set' expression that 26986 indicates the restoring of a function return value from the result 26987 block. 26988 26989'nop' 26990 No-op instruction. This instruction pattern name should always be 26991 defined to output a no-op in assembler code. '(const_int 0)' will 26992 do as an RTL pattern. 26993 26994'indirect_jump' 26995 An instruction to jump to an address which is operand zero. This 26996 pattern name is mandatory on all machines. 26997 26998'casesi' 26999 Instruction to jump through a dispatch table, including bounds 27000 checking. This instruction takes five operands: 27001 27002 1. The index to dispatch on, which has mode 'SImode'. 27003 27004 2. The lower bound for indices in the table, an integer constant. 27005 27006 3. The total range of indices in the table--the largest index 27007 minus the smallest one (both inclusive). 27008 27009 4. A label that precedes the table itself. 27010 27011 5. A label to jump to if the index has a value outside the 27012 bounds. 27013 27014 The table is an 'addr_vec' or 'addr_diff_vec' inside of a 27015 'jump_table_data'. The number of elements in the table is one plus 27016 the difference between the upper bound and the lower bound. 27017 27018'tablejump' 27019 Instruction to jump to a variable address. This is a low-level 27020 capability which can be used to implement a dispatch table when 27021 there is no 'casesi' pattern. 27022 27023 This pattern requires two operands: the address or offset, and a 27024 label which should immediately precede the jump table. If the 27025 macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 27026 the first operand is an offset which counts from the address of the 27027 table; otherwise, it is an absolute address to jump to. In either 27028 case, the first operand has mode 'Pmode'. 27029 27030 The 'tablejump' insn is always the last insn before the jump table 27031 it uses. Its assembler code normally has no need to use the second 27032 operand, but you should incorporate it in the RTL pattern so that 27033 the jump optimizer will not delete the table as unreachable code. 27034 27035'doloop_end' 27036 Conditional branch instruction that decrements a register and jumps 27037 if the register is nonzero. Operand 0 is the register to decrement 27038 and test; operand 1 is the label to jump to if the register is 27039 nonzero. *Note Looping Patterns::. 27040 27041 This optional instruction pattern should be defined for machines 27042 with low-overhead looping instructions as the loop optimizer will 27043 try to modify suitable loops to utilize it. The target hook 27044 'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which 27045 low-overhead loops can be used. 27046 27047'doloop_begin' 27048 Companion instruction to 'doloop_end' required for machines that 27049 need to perform some initialization, such as loading a special 27050 counter register. Operand 1 is the associated 'doloop_end' pattern 27051 and operand 0 is the register that it decrements. 27052 27053 If initialization insns do not always need to be emitted, use a 27054 'define_expand' (*note Expander Definitions::) and make it fail. 27055 27056'canonicalize_funcptr_for_compare' 27057 Canonicalize the function pointer in operand 1 and store the result 27058 into operand 0. 27059 27060 Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be 27061 a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode 27062 'Pmode'. 27063 27064 Canonicalization of a function pointer usually involves computing 27065 the address of the function which would be called if the function 27066 pointer were used in an indirect call. 27067 27068 Only define this pattern if function pointers on the target machine 27069 can have different values but still call the same function when 27070 used in an indirect call. 27071 27072'save_stack_block' 27073'save_stack_function' 27074'save_stack_nonlocal' 27075'restore_stack_block' 27076'restore_stack_function' 27077'restore_stack_nonlocal' 27078 Most machines save and restore the stack pointer by copying it to 27079 or from an object of mode 'Pmode'. Do not define these patterns on 27080 such machines. 27081 27082 Some machines require special handling for stack pointer saves and 27083 restores. On those machines, define the patterns corresponding to 27084 the non-standard cases by using a 'define_expand' (*note Expander 27085 Definitions::) that produces the required insns. The three types 27086 of saves and restores are: 27087 27088 1. 'save_stack_block' saves the stack pointer at the start of a 27089 block that allocates a variable-sized object, and 27090 'restore_stack_block' restores the stack pointer when the 27091 block is exited. 27092 27093 2. 'save_stack_function' and 'restore_stack_function' do a 27094 similar job for the outermost block of a function and are used 27095 when the function allocates variable-sized objects or calls 27096 'alloca'. Only the epilogue uses the restored stack pointer, 27097 allowing a simpler save or restore sequence on some machines. 27098 27099 3. 'save_stack_nonlocal' is used in functions that contain labels 27100 branched to by nested functions. It saves the stack pointer 27101 in such a way that the inner function can use 27102 'restore_stack_nonlocal' to restore the stack pointer. The 27103 compiler generates code to restore the frame and argument 27104 pointer registers, but some machines require saving and 27105 restoring additional data such as register window information 27106 or stack backchains. Place insns in these patterns to save 27107 and restore any such required data. 27108 27109 When saving the stack pointer, operand 0 is the save area and 27110 operand 1 is the stack pointer. The mode used to allocate the save 27111 area defaults to 'Pmode' but you can override that choice by 27112 defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 27113 You must specify an integral mode, or 'VOIDmode' if no save area is 27114 needed for a particular type of save (either because no save is 27115 needed or because a machine-specific save area can be used). 27116 Operand 0 is the stack pointer and operand 1 is the save area for 27117 restore operations. If 'save_stack_block' is defined, operand 0 27118 must not be 'VOIDmode' since these saves can be arbitrarily nested. 27119 27120 A save area is a 'mem' that is at a constant offset from 27121 'virtual_stack_vars_rtx' when the stack pointer is saved for use by 27122 nonlocal gotos and a 'reg' in the other two cases. 27123 27124'allocate_stack' 27125 Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1 27126 from the stack pointer to create space for dynamically allocated 27127 data. 27128 27129 Store the resultant pointer to this space into operand 0. If you 27130 are allocating space from the main stack, do this by emitting a 27131 move insn to copy 'virtual_stack_dynamic_rtx' to operand 0. If you 27132 are allocating the space elsewhere, generate code to copy the 27133 location of the space to operand 0. In the latter case, you must 27134 ensure this space gets freed when the corresponding space on the 27135 main stack is free. 27136 27137 Do not define this pattern if all that must be done is the 27138 subtraction. Some machines require other operations such as stack 27139 probes or maintaining the back chain. Define this pattern to emit 27140 those operations in addition to updating the stack pointer. 27141 27142'check_stack' 27143 If stack checking (*note Stack Checking::) cannot be done on your 27144 system by probing the stack, define this pattern to perform the 27145 needed check and signal an error if the stack has overflowed. The 27146 single operand is the address in the stack farthest from the 27147 current stack pointer that you need to validate. Normally, on 27148 platforms where this pattern is needed, you would obtain the stack 27149 limit from a global or thread-specific variable or register. 27150 27151'probe_stack_address' 27152 If stack checking (*note Stack Checking::) can be done on your 27153 system by probing the stack but without the need to actually access 27154 it, define this pattern and signal an error if the stack has 27155 overflowed. The single operand is the memory address in the stack 27156 that needs to be probed. 27157 27158'probe_stack' 27159 If stack checking (*note Stack Checking::) can be done on your 27160 system by probing the stack but doing it with a "store zero" 27161 instruction is not valid or optimal, define this pattern to do the 27162 probing differently and signal an error if the stack has 27163 overflowed. The single operand is the memory reference in the 27164 stack that needs to be probed. 27165 27166'nonlocal_goto' 27167 Emit code to generate a non-local goto, e.g., a jump from one 27168 function to a label in an outer function. This pattern has four 27169 arguments, each representing a value to be used in the jump. The 27170 first argument is to be loaded into the frame pointer, the second 27171 is the address to branch to (code to dispatch to the actual label), 27172 the third is the address of a location where the stack is saved, 27173 and the last is the address of the label, to be placed in the 27174 location for the incoming static chain. 27175 27176 On most machines you need not define this pattern, since GCC will 27177 already generate the correct code, which is to load the frame 27178 pointer and static chain, restore the stack (using the 27179 'restore_stack_nonlocal' pattern, if defined), and jump indirectly 27180 to the dispatcher. You need only define this pattern if this code 27181 will not work on your machine. 27182 27183'nonlocal_goto_receiver' 27184 This pattern, if defined, contains code needed at the target of a 27185 nonlocal goto after the code already generated by GCC. You will 27186 not normally need to define this pattern. A typical reason why you 27187 might need this pattern is if some value, such as a pointer to a 27188 global table, must be restored when the frame pointer is restored. 27189 Note that a nonlocal goto only occurs within a unit-of-translation, 27190 so a global table pointer that is shared by all functions of a 27191 given module need not be restored. There are no arguments. 27192 27193'exception_receiver' 27194 This pattern, if defined, contains code needed at the site of an 27195 exception handler that isn't needed at the site of a nonlocal goto. 27196 You will not normally need to define this pattern. A typical 27197 reason why you might need this pattern is if some value, such as a 27198 pointer to a global table, must be restored after control flow is 27199 branched to the handler of an exception. There are no arguments. 27200 27201'builtin_setjmp_setup' 27202 This pattern, if defined, contains additional code needed to 27203 initialize the 'jmp_buf'. You will not normally need to define 27204 this pattern. A typical reason why you might need this pattern is 27205 if some value, such as a pointer to a global table, must be 27206 restored. Though it is preferred that the pointer value be 27207 recalculated if possible (given the address of a label for 27208 instance). The single argument is a pointer to the 'jmp_buf'. 27209 Note that the buffer is five words long and that the first three 27210 are normally used by the generic mechanism. 27211 27212'builtin_setjmp_receiver' 27213 This pattern, if defined, contains code needed at the site of a 27214 built-in setjmp that isn't needed at the site of a nonlocal goto. 27215 You will not normally need to define this pattern. A typical 27216 reason why you might need this pattern is if some value, such as a 27217 pointer to a global table, must be restored. It takes one 27218 argument, which is the label to which builtin_longjmp transferred 27219 control; this pattern may be emitted at a small offset from that 27220 label. 27221 27222'builtin_longjmp' 27223 This pattern, if defined, performs the entire action of the 27224 longjmp. You will not normally need to define this pattern unless 27225 you also define 'builtin_setjmp_setup'. The single argument is a 27226 pointer to the 'jmp_buf'. 27227 27228'eh_return' 27229 This pattern, if defined, affects the way '__builtin_eh_return', 27230 and thence the call frame exception handling library routines, are 27231 built. It is intended to handle non-trivial actions needed along 27232 the abnormal return path. 27233 27234 The address of the exception handler to which the function should 27235 return is passed as operand to this pattern. It will normally need 27236 to copied by the pattern to some special register or memory 27237 location. If the pattern needs to determine the location of the 27238 target call frame in order to do so, it may use 27239 'EH_RETURN_STACKADJ_RTX', if defined; it will have already been 27240 assigned. 27241 27242 If this pattern is not defined, the default action will be to 27243 simply copy the return address to 'EH_RETURN_HANDLER_RTX'. Either 27244 that macro or this pattern needs to be defined if call frame 27245 exception handling is to be used. 27246 27247'prologue' 27248 This pattern, if defined, emits RTL for entry to a function. The 27249 function entry is responsible for setting up the stack frame, 27250 initializing the frame pointer register, saving callee saved 27251 registers, etc. 27252 27253 Using a prologue pattern is generally preferred over defining 27254 'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 27255 prologue. 27256 27257 The 'prologue' pattern is particularly useful for targets which 27258 perform instruction scheduling. 27259 27260'window_save' 27261 This pattern, if defined, emits RTL for a register window save. It 27262 should be defined if the target machine has register windows but 27263 the window events are decoupled from calls to subroutines. The 27264 canonical example is the SPARC architecture. 27265 27266'epilogue' 27267 This pattern emits RTL for exit from a function. The function exit 27268 is responsible for deallocating the stack frame, restoring callee 27269 saved registers and emitting the return instruction. 27270 27271 Using an epilogue pattern is generally preferred over defining 27272 'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 27273 epilogue. 27274 27275 The 'epilogue' pattern is particularly useful for targets which 27276 perform instruction scheduling or which have delay slots for their 27277 return instruction. 27278 27279'sibcall_epilogue' 27280 This pattern, if defined, emits RTL for exit from a function 27281 without the final branch back to the calling function. This 27282 pattern will be emitted before any sibling call (aka tail call) 27283 sites. 27284 27285 The 'sibcall_epilogue' pattern must not clobber any arguments used 27286 for parameter passing or any stack slots for arguments passed to 27287 the current function. 27288 27289'trap' 27290 This pattern, if defined, signals an error, typically by causing 27291 some kind of signal to be raised. 27292 27293'ctrapMM4' 27294 Conditional trap instruction. Operand 0 is a piece of RTL which 27295 performs a comparison, and operands 1 and 2 are the arms of the 27296 comparison. Operand 3 is the trap code, an integer. 27297 27298 A typical 'ctrap' pattern looks like 27299 27300 (define_insn "ctrapsi4" 27301 [(trap_if (match_operator 0 "trap_operator" 27302 [(match_operand 1 "register_operand") 27303 (match_operand 2 "immediate_operand")]) 27304 (match_operand 3 "const_int_operand" "i"))] 27305 "" 27306 "...") 27307 27308'prefetch' 27309 This pattern, if defined, emits code for a non-faulting data 27310 prefetch instruction. Operand 0 is the address of the memory to 27311 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 27312 for a write to the memory address, or a constant 0 otherwise. 27313 Operand 2 is the expected degree of temporal locality of the data 27314 and is a value between 0 and 3, inclusive; 0 means that the data 27315 has no temporal locality, so it need not be left in the cache after 27316 the access; 3 means that the data has a high degree of temporal 27317 locality and should be left in all levels of cache possible; 1 and 27318 2 mean, respectively, a low or moderate degree of temporal 27319 locality. 27320 27321 Targets that do not support write prefetches or locality hints can 27322 ignore the values of operands 1 and 2. 27323 27324'blockage' 27325 This pattern defines a pseudo insn that prevents the instruction 27326 scheduler and other passes from moving instructions and using 27327 register equivalences across the boundary defined by the blockage 27328 insn. This needs to be an UNSPEC_VOLATILE pattern or a volatile 27329 ASM. 27330 27331'memory_blockage' 27332 This pattern, if defined, represents a compiler memory barrier, and 27333 will be placed at points across which RTL passes may not propagate 27334 memory accesses. This instruction needs to read and write volatile 27335 BLKmode memory. It does not need to generate any machine 27336 instruction. If this pattern is not defined, the compiler falls 27337 back to emitting an instruction corresponding to 'asm volatile ("" 27338 ::: "memory")'. 27339 27340'memory_barrier' 27341 If the target memory model is not fully synchronous, then this 27342 pattern should be defined to an instruction that orders both loads 27343 and stores before the instruction with respect to loads and stores 27344 after the instruction. This pattern has no operands. 27345 27346'speculation_barrier' 27347 If the target can support speculative execution, then this pattern 27348 should be defined to an instruction that will block subsequent 27349 execution until any prior speculation conditions has been resolved. 27350 The pattern must also ensure that the compiler cannot move memory 27351 operations past the barrier, so it needs to be an UNSPEC_VOLATILE 27352 pattern. The pattern has no operands. 27353 27354 If this pattern is not defined then the default expansion of 27355 '__builtin_speculation_safe_value' will emit a warning. You can 27356 suppress this warning by defining this pattern with a final 27357 condition of '0' (zero), which tells the compiler that a 27358 speculation barrier is not needed for this target. 27359 27360'sync_compare_and_swapMODE' 27361 This pattern, if defined, emits code for an atomic compare-and-swap 27362 operation. Operand 1 is the memory on which the atomic operation 27363 is performed. Operand 2 is the "old" value to be compared against 27364 the current contents of the memory location. Operand 3 is the 27365 "new" value to store in the memory if the compare succeeds. 27366 Operand 0 is the result of the operation; it should contain the 27367 contents of the memory before the operation. If the compare 27368 succeeds, this should obviously be a copy of operand 2. 27369 27370 This pattern must show that both operand 0 and operand 1 are 27371 modified. 27372 27373 This pattern must issue any memory barrier instructions such that 27374 all memory operations before the atomic operation occur before the 27375 atomic operation and all memory operations after the atomic 27376 operation occur after the atomic operation. 27377 27378 For targets where the success or failure of the compare-and-swap 27379 operation is available via the status flags, it is possible to 27380 avoid a separate compare operation and issue the subsequent branch 27381 or store-flag operation immediately after the compare-and-swap. To 27382 this end, GCC will look for a 'MODE_CC' set in the output of 27383 'sync_compare_and_swapMODE'; if the machine description includes 27384 such a set, the target should also define special 'cbranchcc4' 27385 and/or 'cstorecc4' instructions. GCC will then be able to take the 27386 destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or 27387 'cstorecc4' pattern as the first operand of the comparison (the 27388 second will be '(const_int 0)'). 27389 27390 For targets where the operating system may provide support for this 27391 operation via library calls, the 'sync_compare_and_swap_optab' may 27392 be initialized to a function with the same interface as the 27393 '__sync_val_compare_and_swap_N' built-in. If the entire set of 27394 __SYNC builtins are supported via library calls, the target can 27395 initialize all of the optabs at once with 'init_sync_libfuncs'. 27396 For the purposes of C++11 'std::atomic::is_lock_free', it is 27397 assumed that these library calls do _not_ use any kind of 27398 interruptable locking. 27399 27400'sync_addMODE', 'sync_subMODE' 27401'sync_iorMODE', 'sync_andMODE' 27402'sync_xorMODE', 'sync_nandMODE' 27403 These patterns emit code for an atomic operation on memory. 27404 Operand 0 is the memory on which the atomic operation is performed. 27405 Operand 1 is the second operand to the binary operator. 27406 27407 This pattern must issue any memory barrier instructions such that 27408 all memory operations before the atomic operation occur before the 27409 atomic operation and all memory operations after the atomic 27410 operation occur after the atomic operation. 27411 27412 If these patterns are not defined, the operation will be 27413 constructed from a compare-and-swap operation, if defined. 27414 27415'sync_old_addMODE', 'sync_old_subMODE' 27416'sync_old_iorMODE', 'sync_old_andMODE' 27417'sync_old_xorMODE', 'sync_old_nandMODE' 27418 These patterns emit code for an atomic operation on memory, and 27419 return the value that the memory contained before the operation. 27420 Operand 0 is the result value, operand 1 is the memory on which the 27421 atomic operation is performed, and operand 2 is the second operand 27422 to the binary operator. 27423 27424 This pattern must issue any memory barrier instructions such that 27425 all memory operations before the atomic operation occur before the 27426 atomic operation and all memory operations after the atomic 27427 operation occur after the atomic operation. 27428 27429 If these patterns are not defined, the operation will be 27430 constructed from a compare-and-swap operation, if defined. 27431 27432'sync_new_addMODE', 'sync_new_subMODE' 27433'sync_new_iorMODE', 'sync_new_andMODE' 27434'sync_new_xorMODE', 'sync_new_nandMODE' 27435 These patterns are like their 'sync_old_OP' counterparts, except 27436 that they return the value that exists in the memory location after 27437 the operation, rather than before the operation. 27438 27439'sync_lock_test_and_setMODE' 27440 This pattern takes two forms, based on the capabilities of the 27441 target. In either case, operand 0 is the result of the operand, 27442 operand 1 is the memory on which the atomic operation is performed, 27443 and operand 2 is the value to set in the lock. 27444 27445 In the ideal case, this operation is an atomic exchange operation, 27446 in which the previous value in memory operand is copied into the 27447 result operand, and the value operand is stored in the memory 27448 operand. 27449 27450 For less capable targets, any value operand that is not the 27451 constant 1 should be rejected with 'FAIL'. In this case the target 27452 may use an atomic test-and-set bit operation. The result operand 27453 should contain 1 if the bit was previously set and 0 if the bit was 27454 previously clear. The true contents of the memory operand are 27455 implementation defined. 27456 27457 This pattern must issue any memory barrier instructions such that 27458 the pattern as a whole acts as an acquire barrier, that is all 27459 memory operations after the pattern do not occur until the lock is 27460 acquired. 27461 27462 If this pattern is not defined, the operation will be constructed 27463 from a compare-and-swap operation, if defined. 27464 27465'sync_lock_releaseMODE' 27466 This pattern, if defined, releases a lock set by 27467 'sync_lock_test_and_setMODE'. Operand 0 is the memory that 27468 contains the lock; operand 1 is the value to store in the lock. 27469 27470 If the target doesn't implement full semantics for 27471 'sync_lock_test_and_setMODE', any value operand which is not the 27472 constant 0 should be rejected with 'FAIL', and the true contents of 27473 the memory operand are implementation defined. 27474 27475 This pattern must issue any memory barrier instructions such that 27476 the pattern as a whole acts as a release barrier, that is the lock 27477 is released only after all previous memory operations have 27478 completed. 27479 27480 If this pattern is not defined, then a 'memory_barrier' pattern 27481 will be emitted, followed by a store of the value to the memory 27482 operand. 27483 27484'atomic_compare_and_swapMODE' 27485 This pattern, if defined, emits code for an atomic compare-and-swap 27486 operation with memory model semantics. Operand 2 is the memory on 27487 which the atomic operation is performed. Operand 0 is an output 27488 operand which is set to true or false based on whether the 27489 operation succeeded. Operand 1 is an output operand which is set 27490 to the contents of the memory before the operation was attempted. 27491 Operand 3 is the value that is expected to be in memory. Operand 4 27492 is the value to put in memory if the expected value is found there. 27493 Operand 5 is set to 1 if this compare and swap is to be treated as 27494 a weak operation. Operand 6 is the memory model to be used if the 27495 operation is a success. Operand 7 is the memory model to be used 27496 if the operation fails. 27497 27498 If memory referred to in operand 2 contains the value in operand 3, 27499 then operand 4 is stored in memory pointed to by operand 2 and 27500 fencing based on the memory model in operand 6 is issued. 27501 27502 If memory referred to in operand 2 does not contain the value in 27503 operand 3, then fencing based on the memory model in operand 7 is 27504 issued. 27505 27506 If a target does not support weak compare-and-swap operations, or 27507 the port elects not to implement weak operations, the argument in 27508 operand 5 can be ignored. Note a strong implementation must be 27509 provided. 27510 27511 If this pattern is not provided, the '__atomic_compare_exchange' 27512 built-in functions will utilize the legacy 'sync_compare_and_swap' 27513 pattern with an '__ATOMIC_SEQ_CST' memory model. 27514 27515'atomic_loadMODE' 27516 This pattern implements an atomic load operation with memory model 27517 semantics. Operand 1 is the memory address being loaded from. 27518 Operand 0 is the result of the load. Operand 2 is the memory model 27519 to be used for the load operation. 27520 27521 If not present, the '__atomic_load' built-in function will either 27522 resort to a normal load with memory barriers, or a compare-and-swap 27523 operation if a normal load would not be atomic. 27524 27525'atomic_storeMODE' 27526 This pattern implements an atomic store operation with memory model 27527 semantics. Operand 0 is the memory address being stored to. 27528 Operand 1 is the value to be written. Operand 2 is the memory 27529 model to be used for the operation. 27530 27531 If not present, the '__atomic_store' built-in function will attempt 27532 to perform a normal store and surround it with any required memory 27533 fences. If the store would not be atomic, then an 27534 '__atomic_exchange' is attempted with the result being ignored. 27535 27536'atomic_exchangeMODE' 27537 This pattern implements an atomic exchange operation with memory 27538 model semantics. Operand 1 is the memory location the operation is 27539 performed on. Operand 0 is an output operand which is set to the 27540 original value contained in the memory pointed to by operand 1. 27541 Operand 2 is the value to be stored. Operand 3 is the memory model 27542 to be used. 27543 27544 If this pattern is not present, the built-in function 27545 '__atomic_exchange' will attempt to preform the operation with a 27546 compare and swap loop. 27547 27548'atomic_addMODE', 'atomic_subMODE' 27549'atomic_orMODE', 'atomic_andMODE' 27550'atomic_xorMODE', 'atomic_nandMODE' 27551 These patterns emit code for an atomic operation on memory with 27552 memory model semantics. Operand 0 is the memory on which the 27553 atomic operation is performed. Operand 1 is the second operand to 27554 the binary operator. Operand 2 is the memory model to be used by 27555 the operation. 27556 27557 If these patterns are not defined, attempts will be made to use 27558 legacy 'sync' patterns, or equivalent patterns which return a 27559 result. If none of these are available a compare-and-swap loop 27560 will be used. 27561 27562'atomic_fetch_addMODE', 'atomic_fetch_subMODE' 27563'atomic_fetch_orMODE', 'atomic_fetch_andMODE' 27564'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE' 27565 These patterns emit code for an atomic operation on memory with 27566 memory model semantics, and return the original value. Operand 0 27567 is an output operand which contains the value of the memory 27568 location before the operation was performed. Operand 1 is the 27569 memory on which the atomic operation is performed. Operand 2 is 27570 the second operand to the binary operator. Operand 3 is the memory 27571 model to be used by the operation. 27572 27573 If these patterns are not defined, attempts will be made to use 27574 legacy 'sync' patterns. If none of these are available a 27575 compare-and-swap loop will be used. 27576 27577'atomic_add_fetchMODE', 'atomic_sub_fetchMODE' 27578'atomic_or_fetchMODE', 'atomic_and_fetchMODE' 27579'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE' 27580 These patterns emit code for an atomic operation on memory with 27581 memory model semantics and return the result after the operation is 27582 performed. Operand 0 is an output operand which contains the value 27583 after the operation. Operand 1 is the memory on which the atomic 27584 operation is performed. Operand 2 is the second operand to the 27585 binary operator. Operand 3 is the memory model to be used by the 27586 operation. 27587 27588 If these patterns are not defined, attempts will be made to use 27589 legacy 'sync' patterns, or equivalent patterns which return the 27590 result before the operation followed by the arithmetic operation 27591 required to produce the result. If none of these are available a 27592 compare-and-swap loop will be used. 27593 27594'atomic_test_and_set' 27595 This pattern emits code for '__builtin_atomic_test_and_set'. 27596 Operand 0 is an output operand which is set to true if the previous 27597 previous contents of the byte was "set", and false otherwise. 27598 Operand 1 is the 'QImode' memory to be modified. Operand 2 is the 27599 memory model to be used. 27600 27601 The specific value that defines "set" is implementation defined, 27602 and is normally based on what is performed by the native atomic 27603 test and set instruction. 27604 27605'atomic_bit_test_and_setMODE' 27606'atomic_bit_test_and_complementMODE' 27607'atomic_bit_test_and_resetMODE' 27608 These patterns emit code for an atomic bitwise operation on memory 27609 with memory model semantics, and return the original value of the 27610 specified bit. Operand 0 is an output operand which contains the 27611 value of the specified bit from the memory location before the 27612 operation was performed. Operand 1 is the memory on which the 27613 atomic operation is performed. Operand 2 is the bit within the 27614 operand, starting with least significant bit. Operand 3 is the 27615 memory model to be used by the operation. Operand 4 is a flag - it 27616 is 'const1_rtx' if operand 0 should contain the original value of 27617 the specified bit in the least significant bit of the operand, and 27618 'const0_rtx' if the bit should be in its original position in the 27619 operand. 'atomic_bit_test_and_setMODE' atomically sets the 27620 specified bit after remembering its original value, 27621 'atomic_bit_test_and_complementMODE' inverts the specified bit and 27622 'atomic_bit_test_and_resetMODE' clears the specified bit. 27623 27624 If these patterns are not defined, attempts will be made to use 27625 'atomic_fetch_orMODE', 'atomic_fetch_xorMODE' or 27626 'atomic_fetch_andMODE' instruction patterns, or their 'sync' 27627 counterparts. If none of these are available a compare-and-swap 27628 loop will be used. 27629 27630'mem_thread_fence' 27631 This pattern emits code required to implement a thread fence with 27632 memory model semantics. Operand 0 is the memory model to be used. 27633 27634 For the '__ATOMIC_RELAXED' model no instructions need to be issued 27635 and this expansion is not invoked. 27636 27637 The compiler always emits a compiler memory barrier regardless of 27638 what expanding this pattern produced. 27639 27640 If this pattern is not defined, the compiler falls back to 27641 expanding the 'memory_barrier' pattern, then to emitting 27642 '__sync_synchronize' library call, and finally to just placing a 27643 compiler memory barrier. 27644 27645'get_thread_pointerMODE' 27646'set_thread_pointerMODE' 27647 These patterns emit code that reads/sets the TLS thread pointer. 27648 Currently, these are only needed if the target needs to support the 27649 '__builtin_thread_pointer' and '__builtin_set_thread_pointer' 27650 builtins. 27651 27652 The get/set patterns have a single output/input operand 27653 respectively, with MODE intended to be 'Pmode'. 27654 27655'stack_protect_combined_set' 27656 This pattern, if defined, moves a 'ptr_mode' value from an address 27657 whose declaration RTX is given in operand 1 to the memory in 27658 operand 0 without leaving the value in a register afterward. If 27659 several instructions are needed by the target to perform the 27660 operation (eg. to load the address from a GOT entry then load the 27661 'ptr_mode' value and finally store it), it is the backend's 27662 responsibility to ensure no intermediate result gets spilled. This 27663 is to avoid leaking the value some place that an attacker might use 27664 to rewrite the stack guard slot after having clobbered it. 27665 27666 If this pattern is not defined, then the address declaration is 27667 expanded first in the standard way and a 'stack_protect_set' 27668 pattern is then generated to move the value from that address to 27669 the address in operand 0. 27670 27671'stack_protect_set' 27672 This pattern, if defined, moves a 'ptr_mode' value from the valid 27673 memory location in operand 1 to the memory in operand 0 without 27674 leaving the value in a register afterward. This is to avoid 27675 leaking the value some place that an attacker might use to rewrite 27676 the stack guard slot after having clobbered it. 27677 27678 Note: on targets where the addressing modes do not allow to load 27679 directly from stack guard address, the address is expanded in a 27680 standard way first which could cause some spills. 27681 27682 If this pattern is not defined, then a plain move pattern is 27683 generated. 27684 27685'stack_protect_combined_test' 27686 This pattern, if defined, compares a 'ptr_mode' value from an 27687 address whose declaration RTX is given in operand 1 with the memory 27688 in operand 0 without leaving the value in a register afterward and 27689 branches to operand 2 if the values were equal. If several 27690 instructions are needed by the target to perform the operation (eg. 27691 to load the address from a GOT entry then load the 'ptr_mode' value 27692 and finally store it), it is the backend's responsibility to ensure 27693 no intermediate result gets spilled. This is to avoid leaking the 27694 value some place that an attacker might use to rewrite the stack 27695 guard slot after having clobbered it. 27696 27697 If this pattern is not defined, then the address declaration is 27698 expanded first in the standard way and a 'stack_protect_test' 27699 pattern is then generated to compare the value from that address to 27700 the value at the memory in operand 0. 27701 27702'stack_protect_test' 27703 This pattern, if defined, compares a 'ptr_mode' value from the 27704 valid memory location in operand 1 with the memory in operand 0 27705 without leaving the value in a register afterward and branches to 27706 operand 2 if the values were equal. 27707 27708 If this pattern is not defined, then a plain compare pattern and 27709 conditional branch pattern is used. 27710 27711'clear_cache' 27712 This pattern, if defined, flushes the instruction cache for a 27713 region of memory. The region is bounded to by the Pmode pointers 27714 in operand 0 inclusive and operand 1 exclusive. 27715 27716 If this pattern is not defined, a call to the library function 27717 '__clear_cache' is used. 27718 27719 27720File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 27721 2772217.10 When the Order of Patterns Matters 27723======================================== 27724 27725Sometimes an insn can match more than one instruction pattern. Then the 27726pattern that appears first in the machine description is the one used. 27727Therefore, more specific patterns (patterns that will match fewer 27728things) and faster instructions (those that will produce better code 27729when they do match) should usually go first in the description. 27730 27731 In some cases the effect of ordering the patterns can be used to hide a 27732pattern when it is not valid. For example, the 68000 has an instruction 27733for converting a fullword to floating point and another for converting a 27734byte to floating point. An instruction converting an integer to 27735floating point could match either one. We put the pattern to convert 27736the fullword first to make sure that one will be used rather than the 27737other. (Otherwise a large integer might be generated as a single-byte 27738immediate quantity, which would not work.) Instead of using this 27739pattern ordering it would be possible to make the pattern for 27740convert-a-byte smart enough to deal properly with any constant value. 27741 27742 27743File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 27744 2774517.11 Interdependence of Patterns 27746================================= 27747 27748In some cases machines support instructions identical except for the 27749machine mode of one or more operands. For example, there may be 27750"sign-extend halfword" and "sign-extend byte" instructions whose 27751patterns are 27752 27753 (set (match_operand:SI 0 ...) 27754 (extend:SI (match_operand:HI 1 ...))) 27755 27756 (set (match_operand:SI 0 ...) 27757 (extend:SI (match_operand:QI 1 ...))) 27758 27759Constant integers do not specify a machine mode, so an instruction to 27760extend a constant value could match either pattern. The pattern it 27761actually will match is the one that appears first in the file. For 27762correct results, this must be the one for the widest possible mode 27763('HImode', here). If the pattern matches the 'QImode' instruction, the 27764results will be incorrect if the constant value does not actually fit 27765that mode. 27766 27767 Such instructions to extend constants are rarely generated because they 27768are optimized away, but they do occasionally happen in nonoptimized 27769compilations. 27770 27771 If a constraint in a pattern allows a constant, the reload pass may 27772replace a register with a constant permitted by the constraint in some 27773cases. Similarly for memory references. Because of this substitution, 27774you should not provide separate patterns for increment and decrement 27775instructions. Instead, they should be generated from the same pattern 27776that supports register-register add insns by examining the operands and 27777generating the appropriate machine instruction. 27778 27779 27780File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 27781 2778217.12 Defining Jump Instruction Patterns 27783======================================== 27784 27785GCC does not assume anything about how the machine realizes jumps. The 27786machine description should define a single pattern, usually a 27787'define_expand', which expands to all the required insns. 27788 27789 Usually, this would be a comparison insn to set the condition code and 27790a separate branch insn testing the condition code and branching or not 27791according to its value. For many machines, however, separating compares 27792and branches is limiting, which is why the more flexible approach with 27793one 'define_expand' is used in GCC. The machine description becomes 27794clearer for architectures that have compare-and-branch instructions but 27795no condition code. It also works better when different sets of 27796comparison operators are supported by different kinds of conditional 27797branches (e.g. integer vs. floating-point), or by conditional branches 27798with respect to conditional stores. 27799 27800 Two separate insns are always used if the machine description 27801represents a condition code register using the legacy RTL expression 27802'(cc0)', and on most machines that use a separate condition code 27803register (*note Condition Code::). For machines that use '(cc0)', in 27804fact, the set and use of the condition code must be separate and 27805adjacent(1), thus allowing flags in 'cc_status' to be used (*note 27806Condition Code::) and so that the comparison and branch insns could be 27807located from each other by using the functions 'prev_cc0_setter' and 27808'next_cc0_user'. 27809 27810 Even in this case having a single entry point for conditional branches 27811is advantageous, because it handles equally well the case where a single 27812comparison instruction records the results of both signed and unsigned 27813comparison of the given operands (with the branch insns coming in 27814distinct signed and unsigned flavors) as in the x86 or SPARC, and the 27815case where there are distinct signed and unsigned compare instructions 27816and only one set of conditional branch instructions as in the PowerPC. 27817 27818 ---------- Footnotes ---------- 27819 27820 (1) 'note' insns can separate them, though. 27821 27822 27823File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 27824 2782517.13 Defining Looping Instruction Patterns 27826=========================================== 27827 27828Some machines have special jump instructions that can be utilized to 27829make loops more efficient. A common example is the 68000 'dbra' 27830instruction which performs a decrement of a register and a branch if the 27831result was greater than zero. Other machines, in particular digital 27832signal processors (DSPs), have special block repeat instructions to 27833provide low-overhead loop support. For example, the TI TMS320C3x/C4x 27834DSPs have a block repeat instruction that loads special registers to 27835mark the top and end of a loop and to count the number of loop 27836iterations. This avoids the need for fetching and executing a 27837'dbra'-like instruction and avoids pipeline stalls associated with the 27838jump. 27839 27840 GCC has two special named patterns to support low overhead looping. 27841They are 'doloop_begin' and 'doloop_end'. These are emitted by the loop 27842optimizer for certain well-behaved loops with a finite number of loop 27843iterations using information collected during strength reduction. 27844 27845 The 'doloop_end' pattern describes the actual looping instruction (or 27846the implicit looping operation) and the 'doloop_begin' pattern is an 27847optional companion pattern that can be used for initialization needed 27848for some low-overhead looping instructions. 27849 27850 Note that some machines require the actual looping instruction to be 27851emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 27852the true RTL for a looping instruction at the top of the loop can cause 27853problems with flow analysis. So instead, a dummy 'doloop' insn is 27854emitted at the end of the loop. The machine dependent reorg pass checks 27855for the presence of this 'doloop' insn and then searches back to the top 27856of the loop, where it inserts the true looping insn (provided there are 27857no instructions in the loop which would cause problems). Any additional 27858labels can be emitted at this point. In addition, if the desired 27859special iteration counter register was not allocated, this machine 27860dependent reorg pass could emit a traditional compare and jump 27861instruction pair. 27862 27863 For the 'doloop_end' pattern, the loop optimizer allocates an 27864additional pseudo register as an iteration counter. This pseudo 27865register cannot be used within the loop (i.e., general induction 27866variables cannot be derived from it), however, in many cases the loop 27867induction variable may become redundant and removed by the flow pass. 27868 27869 The 'doloop_end' pattern must have a specific structure to be handled 27870correctly by GCC. The example below is taken (slightly simplified) from 27871the PDP-11 target: 27872 27873 (define_expand "doloop_end" 27874 [(parallel [(set (pc) 27875 (if_then_else 27876 (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m") 27877 (const_int 1)) 27878 (label_ref (match_operand 1 "" "")) 27879 (pc))) 27880 (set (match_dup 0) 27881 (plus:HI (match_dup 0) 27882 (const_int -1)))])] 27883 "" 27884 "{ 27885 if (GET_MODE (operands[0]) != HImode) 27886 FAIL; 27887 }") 27888 27889 (define_insn "doloop_end_insn" 27890 [(set (pc) 27891 (if_then_else 27892 (ne (match_operand:HI 0 "nonimmediate_operand" "+r,!m") 27893 (const_int 1)) 27894 (label_ref (match_operand 1 "" "")) 27895 (pc))) 27896 (set (match_dup 0) 27897 (plus:HI (match_dup 0) 27898 (const_int -1)))] 27899 "" 27900 27901 { 27902 if (which_alternative == 0) 27903 return "sob %0,%l1"; 27904 27905 /* emulate sob */ 27906 output_asm_insn ("dec %0", operands); 27907 return "bne %l1"; 27908 }) 27909 27910 The first part of the pattern describes the branch condition. GCC 27911supports three cases for the way the target machine handles the loop 27912counter: 27913 * Loop terminates when the loop register decrements to zero. This is 27914 represented by a 'ne' comparison of the register (its old value) 27915 with constant 1 (as in the example above). 27916 * Loop terminates when the loop register decrements to -1. This is 27917 represented by a 'ne' comparison of the register with constant 27918 zero. 27919 * Loop terminates when the loop register decrements to a negative 27920 value. This is represented by a 'ge' comparison of the register 27921 with constant zero. For this case, GCC will attach a 'REG_NONNEG' 27922 note to the 'doloop_end' insn if it can determine that the register 27923 will be non-negative. 27924 27925 Since the 'doloop_end' insn is a jump insn that also has an output, the 27926reload pass does not handle the output operand. Therefore, the 27927constraint must allow for that operand to be in memory rather than a 27928register. In the example shown above, that is handled (in the 27929'doloop_end_insn' pattern) by using a loop instruction sequence that can 27930handle memory operands when the memory alternative appears. 27931 27932 GCC does not check the mode of the loop register operand when 27933generating the 'doloop_end' pattern. If the pattern is only valid for 27934some modes but not others, the pattern should be a 'define_expand' 27935pattern that checks the operand mode in the preparation code, and issues 27936'FAIL' if an unsupported mode is found. The example above does this, 27937since the machine instruction to be used only exists for 'HImode'. 27938 27939 If the 'doloop_end' pattern is a 'define_expand', there must also be a 27940'define_insn' or 'define_insn_and_split' matching the generated pattern. 27941Otherwise, the compiler will fail during loop optimization. 27942 27943 27944File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 27945 2794617.14 Canonicalization of Instructions 27947====================================== 27948 27949There are often cases where multiple RTL expressions could represent an 27950operation performed by a single machine instruction. This situation is 27951most commonly encountered with logical, branch, and multiply-accumulate 27952instructions. In such cases, the compiler attempts to convert these 27953multiple RTL expressions into a single canonical form to reduce the 27954number of insn patterns required. 27955 27956 In addition to algebraic simplifications, following canonicalizations 27957are performed: 27958 27959 * For commutative and comparison operators, a constant is always made 27960 the second operand. If a machine only supports a constant as the 27961 second operand, only patterns that match a constant in the second 27962 operand need be supplied. 27963 27964 * For associative operators, a sequence of operators will always 27965 chain to the left; for instance, only the left operand of an 27966 integer 'plus' can itself be a 'plus'. 'and', 'ior', 'xor', 27967 'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative 27968 when applied to integers, and sometimes to floating-point. 27969 27970 * For these operators, if only one operand is a 'neg', 'not', 'mult', 27971 'plus', or 'minus' expression, it will be the first operand. 27972 27973 * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg' 27974 operations (if any) will be moved inside the operations as far as 27975 possible. For instance, '(neg (mult A B))' is canonicalized as 27976 '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is 27977 canonicalized as '(minus A (mult B C))'. 27978 27979 * For the 'compare' operator, a constant is always the second operand 27980 if the first argument is a condition code register or '(cc0)'. 27981 27982 * For instructions that inherently set a condition code register, the 27983 'compare' operator is always written as the first RTL expression of 27984 the 'parallel' instruction pattern. For example, 27985 27986 (define_insn "" 27987 [(set (reg:CCZ FLAGS_REG) 27988 (compare:CCZ 27989 (plus:SI 27990 (match_operand:SI 1 "register_operand" "%r") 27991 (match_operand:SI 2 "register_operand" "r")) 27992 (const_int 0))) 27993 (set (match_operand:SI 0 "register_operand" "=r") 27994 (plus:SI (match_dup 1) (match_dup 2)))] 27995 "" 27996 "addl %0, %1, %2") 27997 27998 * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the 27999 first operand under the same conditions as above. 28000 28001 * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'. 28002 Likewise with 'geu' instead of 'ltu'. 28003 28004 * '(minus X (const_int N))' is converted to '(plus X (const_int 28005 -N))'. 28006 28007 * Within address computations (i.e., inside 'mem'), a left shift is 28008 converted into the appropriate multiplication by a power of two. 28009 28010 * De Morgan's Law is used to move bitwise negation inside a bitwise 28011 logical-and or logical-or operation. If this results in only one 28012 operand being a 'not' expression, it will be the first one. 28013 28014 A machine that has an instruction that performs a bitwise 28015 logical-and of one operand with the bitwise negation of the other 28016 should specify the pattern for that instruction as 28017 28018 (define_insn "" 28019 [(set (match_operand:M 0 ...) 28020 (and:M (not:M (match_operand:M 1 ...)) 28021 (match_operand:M 2 ...)))] 28022 "..." 28023 "...") 28024 28025 Similarly, a pattern for a "NAND" instruction should be written 28026 28027 (define_insn "" 28028 [(set (match_operand:M 0 ...) 28029 (ior:M (not:M (match_operand:M 1 ...)) 28030 (not:M (match_operand:M 2 ...))))] 28031 "..." 28032 "...") 28033 28034 In both cases, it is not necessary to include patterns for the many 28035 logically equivalent RTL expressions. 28036 28037 * The only possible RTL expressions involving both bitwise 28038 exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M 28039 (xor:M X Y))'. 28040 28041 * The sum of three items, one of which is a constant, will only 28042 appear in the form 28043 28044 (plus:M (plus:M X Y) CONSTANT) 28045 28046 * Equality comparisons of a group of bits (usually a single bit) with 28047 zero will be written using 'zero_extract' rather than the 28048 equivalent 'and' or 'sign_extract' operations. 28049 28050 * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))' 28051 is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))', 28052 and likewise for 'zero_extend'. 28053 28054 * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))' 28055 is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S)) 28056 (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend' 28057 and 'lshiftrt'. If the second operand of 'mult' is also a shift, 28058 then that is extended also. This transformation is only applied 28059 when it can be proven that the original operation had sufficient 28060 precision to prevent overflow. 28061 28062 Further canonicalization rules are defined in the function 28063'commutative_operand_precedence' in 'gcc/rtlanal.c'. 28064 28065 28066File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 28067 2806817.15 Defining RTL Sequences for Code Generation 28069================================================ 28070 28071On some target machines, some standard pattern names for RTL generation 28072cannot be handled with single insn, but a sequence of RTL insns can 28073represent them. For these target machines, you can write a 28074'define_expand' to specify how to generate the sequence of RTL. 28075 28076 A 'define_expand' is an RTL expression that looks almost like a 28077'define_insn'; but, unlike the latter, a 'define_expand' is used only 28078for RTL generation and it can produce more than one RTL insn. 28079 28080 A 'define_expand' RTX has four operands: 28081 28082 * The name. Each 'define_expand' must have a name, since the only 28083 use for it is to refer to it by name. 28084 28085 * The RTL template. This is a vector of RTL expressions representing 28086 a sequence of separate instructions. Unlike 'define_insn', there 28087 is no implicit surrounding 'PARALLEL'. 28088 28089 * The condition, a string containing a C expression. This expression 28090 is used to express how the availability of this pattern depends on 28091 subclasses of target machine, selected by command-line options when 28092 GCC is run. This is just like the condition of a 'define_insn' 28093 that has a standard name. Therefore, the condition (if present) 28094 may not depend on the data in the insn being matched, but only the 28095 target-machine-type flags. The compiler needs to test these 28096 conditions during initialization in order to learn exactly which 28097 named instructions are available in a particular run. 28098 28099 * The preparation statements, a string containing zero or more C 28100 statements which are to be executed before RTL code is generated 28101 from the RTL template. 28102 28103 Usually these statements prepare temporary registers for use as 28104 internal operands in the RTL template, but they can also generate 28105 RTL insns directly by calling routines such as 'emit_insn', etc. 28106 Any such insns precede the ones that come from the RTL template. 28107 28108 * Optionally, a vector containing the values of attributes. *Note 28109 Insn Attributes::. 28110 28111 Every RTL insn emitted by a 'define_expand' must match some 28112'define_insn' in the machine description. Otherwise, the compiler will 28113crash when trying to generate code for the insn or trying to optimize 28114it. 28115 28116 The RTL template, in addition to controlling generation of RTL insns, 28117also describes the operands that need to be specified when this pattern 28118is used. In particular, it gives a predicate for each operand. 28119 28120 A true operand, which needs to be specified in order to generate RTL 28121from the pattern, should be described with a 'match_operand' in its 28122first occurrence in the RTL template. This enters information on the 28123operand's predicate into the tables that record such things. GCC uses 28124the information to preload the operand into a register if that is 28125required for valid RTL code. If the operand is referred to more than 28126once, subsequent references should use 'match_dup'. 28127 28128 The RTL template may also refer to internal "operands" which are 28129temporary registers or labels used only within the sequence made by the 28130'define_expand'. Internal operands are substituted into the RTL 28131template with 'match_dup', never with 'match_operand'. The values of 28132the internal operands are not passed in as arguments by the compiler 28133when it requests use of this pattern. Instead, they are computed within 28134the pattern, in the preparation statements. These statements compute 28135the values and store them into the appropriate elements of 'operands' so 28136that 'match_dup' can find them. 28137 28138 There are two special macros defined for use in the preparation 28139statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 28140a statement. 28141 28142'DONE' 28143 Use the 'DONE' macro to end RTL generation for the pattern. The 28144 only RTL insns resulting from the pattern on this occasion will be 28145 those already emitted by explicit calls to 'emit_insn' within the 28146 preparation statements; the RTL template will not be generated. 28147 28148'FAIL' 28149 Make the pattern fail on this occasion. When a pattern fails, it 28150 means that the pattern was not truly available. The calling 28151 routines in the compiler will try other strategies for code 28152 generation using other patterns. 28153 28154 Failure is currently supported only for binary (addition, 28155 multiplication, shifting, etc.) and bit-field ('extv', 'extzv', 28156 and 'insv') operations. 28157 28158 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 28159then the 'define_expand' acts like a 'define_insn' in that the RTL 28160template is used to generate the insn. 28161 28162 The RTL template is not used for matching, only for generating the 28163initial insn list. If the preparation statement always invokes 'DONE' 28164or 'FAIL', the RTL template may be reduced to a simple list of operands, 28165such as this example: 28166 28167 (define_expand "addsi3" 28168 [(match_operand:SI 0 "register_operand" "") 28169 (match_operand:SI 1 "register_operand" "") 28170 (match_operand:SI 2 "register_operand" "")] 28171 "" 28172 " 28173 { 28174 handle_add (operands[0], operands[1], operands[2]); 28175 DONE; 28176 }") 28177 28178 Here is an example, the definition of left-shift for the SPUR chip: 28179 28180 (define_expand "ashlsi3" 28181 [(set (match_operand:SI 0 "register_operand" "") 28182 (ashift:SI 28183 (match_operand:SI 1 "register_operand" "") 28184 (match_operand:SI 2 "nonmemory_operand" "")))] 28185 "" 28186 " 28187 28188 { 28189 if (GET_CODE (operands[2]) != CONST_INT 28190 || (unsigned) INTVAL (operands[2]) > 3) 28191 FAIL; 28192 }") 28193 28194This example uses 'define_expand' so that it can generate an RTL insn 28195for shifting when the shift-count is in the supported range of 0 to 3 28196but fail in other cases where machine insns aren't available. When it 28197fails, the compiler tries another strategy using different patterns 28198(such as, a library call). 28199 28200 If the compiler were able to handle nontrivial condition-strings in 28201patterns with names, then it would be possible to use a 'define_insn' in 28202that case. Here is another case (zero-extension on the 68000) which 28203makes more use of the power of 'define_expand': 28204 28205 (define_expand "zero_extendhisi2" 28206 [(set (match_operand:SI 0 "general_operand" "") 28207 (const_int 0)) 28208 (set (strict_low_part 28209 (subreg:HI 28210 (match_dup 0) 28211 0)) 28212 (match_operand:HI 1 "general_operand" ""))] 28213 "" 28214 "operands[1] = make_safe_from (operands[1], operands[0]);") 28215 28216Here two RTL insns are generated, one to clear the entire output operand 28217and the other to copy the input operand into its low half. This 28218sequence is incorrect if the input operand refers to [the old value of] 28219the output operand, so the preparation statement makes sure this isn't 28220so. The function 'make_safe_from' copies the 'operands[1]' into a 28221temporary register if it refers to 'operands[0]'. It does this by 28222emitting another RTL insn. 28223 28224 Finally, a third example shows the use of an internal operand. 28225Zero-extension on the SPUR chip is done by 'and'-ing the result against 28226a halfword mask. But this mask cannot be represented by a 'const_int' 28227because the constant value is too large to be legitimate on this 28228machine. So it must be copied into a register with 'force_reg' and then 28229the register used in the 'and'. 28230 28231 (define_expand "zero_extendhisi2" 28232 [(set (match_operand:SI 0 "register_operand" "") 28233 (and:SI (subreg:SI 28234 (match_operand:HI 1 "register_operand" "") 28235 0) 28236 (match_dup 2)))] 28237 "" 28238 "operands[2] 28239 = force_reg (SImode, GEN_INT (65535)); ") 28240 28241 _Note:_ If the 'define_expand' is used to serve a standard binary or 28242unary arithmetic operation or a bit-field operation, then the last insn 28243it generates must not be a 'code_label', 'barrier' or 'note'. It must 28244be an 'insn', 'jump_insn' or 'call_insn'. If you don't need a real insn 28245at the end, emit an insn to copy the result of the operation into 28246itself. Such an insn will generate no code, but it can avoid problems 28247in the compiler. 28248 28249 28250File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 28251 2825217.16 Defining How to Split Instructions 28253======================================== 28254 28255There are two cases where you should specify how to split a pattern into 28256multiple insns. On machines that have instructions requiring delay 28257slots (*note Delay Slots::) or that have instructions whose output is 28258not available for multiple cycles (*note Processor pipeline 28259description::), the compiler phases that optimize these cases need to be 28260able to move insns into one-instruction delay slots. However, some 28261insns may generate more than one machine instruction. These insns 28262cannot be placed into a delay slot. 28263 28264 Often you can rewrite the single insn as a list of individual insns, 28265each corresponding to one machine instruction. The disadvantage of 28266doing so is that it will cause the compilation to be slower and require 28267more space. If the resulting insns are too complex, it may also 28268suppress some optimizations. The compiler splits the insn if there is a 28269reason to believe that it might improve instruction or delay slot 28270scheduling. 28271 28272 The insn combiner phase also splits putative insns. If three insns are 28273merged into one insn with a complex expression that cannot be matched by 28274some 'define_insn' pattern, the combiner phase attempts to split the 28275complex pattern into two insns that are recognized. Usually it can 28276break the complex pattern into two patterns by splitting out some 28277subexpression. However, in some other cases, such as performing an 28278addition of a large constant in two insns on a RISC machine, the way to 28279split the addition into two insns is machine-dependent. 28280 28281 The 'define_split' definition tells the compiler how to split a complex 28282insn into several simpler insns. It looks like this: 28283 28284 (define_split 28285 [INSN-PATTERN] 28286 "CONDITION" 28287 [NEW-INSN-PATTERN-1 28288 NEW-INSN-PATTERN-2 28289 ...] 28290 "PREPARATION-STATEMENTS") 28291 28292 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 28293final condition to be tested, as in a 'define_insn'. When an insn 28294matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 28295in the insn list with the insns given by NEW-INSN-PATTERN-1, 28296NEW-INSN-PATTERN-2, etc. 28297 28298 The PREPARATION-STATEMENTS are similar to those statements that are 28299specified for 'define_expand' (*note Expander Definitions::) and are 28300executed before the new RTL is generated to prepare for the generated 28301code or emit some insns whose pattern is not fixed. Unlike those in 28302'define_expand', however, these statements must not generate any new 28303pseudo-registers. Once reload has completed, they also must not 28304allocate any space in the stack frame. 28305 28306 There are two special macros defined for use in the preparation 28307statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 28308a statement. 28309 28310'DONE' 28311 Use the 'DONE' macro to end RTL generation for the splitter. The 28312 only RTL insns generated as replacement for the matched input insn 28313 will be those already emitted by explicit calls to 'emit_insn' 28314 within the preparation statements; the replacement pattern is not 28315 used. 28316 28317'FAIL' 28318 Make the 'define_split' fail on this occasion. When a 28319 'define_split' fails, it means that the splitter was not truly 28320 available for the inputs it was given, and the input insn will not 28321 be split. 28322 28323 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 28324then the 'define_split' uses the replacement template. 28325 28326 Patterns are matched against INSN-PATTERN in two different 28327circumstances. If an insn needs to be split for delay slot scheduling 28328or insn scheduling, the insn is already known to be valid, which means 28329that it must have been matched by some 'define_insn' and, if 28330'reload_completed' is nonzero, is known to satisfy the constraints of 28331that 'define_insn'. In that case, the new insn patterns must also be 28332insns that are matched by some 'define_insn' and, if 'reload_completed' 28333is nonzero, must also satisfy the constraints of those definitions. 28334 28335 As an example of this usage of 'define_split', consider the following 28336example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to 28337'SImode' into a pair of shift insns: 28338 28339 (define_split 28340 [(set (match_operand:SI 0 "gen_reg_operand" "") 28341 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 28342 "" 28343 [(set (match_dup 0) 28344 (ashift:SI (match_dup 1) 28345 (const_int 16))) 28346 (set (match_dup 0) 28347 (ashiftrt:SI (match_dup 0) 28348 (const_int 16)))] 28349 " 28350 { operands[1] = gen_lowpart (SImode, operands[1]); }") 28351 28352 When the combiner phase tries to split an insn pattern, it is always 28353the case that the pattern is _not_ matched by any 'define_insn'. The 28354combiner pass first tries to split a single 'set' expression and then 28355the same 'set' expression inside a 'parallel', but followed by a 28356'clobber' of a pseudo-reg to use as a scratch register. In these cases, 28357the combiner expects exactly one or two new insn patterns to be 28358generated. It will verify that these patterns match some 'define_insn' 28359definitions, so you need not do this test in the 'define_split' (of 28360course, there is no point in writing a 'define_split' that will never 28361produce insns that match). 28362 28363 Here is an example of this use of 'define_split', taken from 28364'rs6000.md': 28365 28366 (define_split 28367 [(set (match_operand:SI 0 "gen_reg_operand" "") 28368 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 28369 (match_operand:SI 2 "non_add_cint_operand" "")))] 28370 "" 28371 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 28372 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 28373 " 28374 { 28375 int low = INTVAL (operands[2]) & 0xffff; 28376 int high = (unsigned) INTVAL (operands[2]) >> 16; 28377 28378 if (low & 0x8000) 28379 high++, low |= 0xffff0000; 28380 28381 operands[3] = GEN_INT (high << 16); 28382 operands[4] = GEN_INT (low); 28383 }") 28384 28385 Here the predicate 'non_add_cint_operand' matches any 'const_int' that 28386is _not_ a valid operand of a single add insn. The add with the smaller 28387displacement is written so that it can be substituted into the address 28388of a subsequent operation. 28389 28390 An example that uses a scratch register, from the same file, generates 28391an equality comparison of a register and a large constant: 28392 28393 (define_split 28394 [(set (match_operand:CC 0 "cc_reg_operand" "") 28395 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 28396 (match_operand:SI 2 "non_short_cint_operand" ""))) 28397 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 28398 "find_single_use (operands[0], insn, 0) 28399 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 28400 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 28401 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 28402 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 28403 " 28404 { 28405 /* Get the constant we are comparing against, C, and see what it 28406 looks like sign-extended to 16 bits. Then see what constant 28407 could be XOR'ed with C to get the sign-extended value. */ 28408 28409 int c = INTVAL (operands[2]); 28410 int sextc = (c << 16) >> 16; 28411 int xorv = c ^ sextc; 28412 28413 operands[4] = GEN_INT (xorv); 28414 operands[5] = GEN_INT (sextc); 28415 }") 28416 28417 To avoid confusion, don't write a single 'define_split' that accepts 28418some insns that match some 'define_insn' as well as some insns that 28419don't. Instead, write two separate 'define_split' definitions, one for 28420the insns that are valid and one for the insns that are not valid. 28421 28422 The splitter is allowed to split jump instructions into sequence of 28423jumps or create new jumps in while splitting non-jump instructions. As 28424the control flow graph and branch prediction information needs to be 28425updated, several restriction apply. 28426 28427 Splitting of jump instruction into sequence that over by another jump 28428instruction is always valid, as compiler expect identical behavior of 28429new jump. When new sequence contains multiple jump instructions or new 28430labels, more assistance is needed. Splitter is required to create only 28431unconditional jumps, or simple conditional jump instructions. 28432Additionally it must attach a 'REG_BR_PROB' note to each conditional 28433jump. A global variable 'split_branch_probability' holds the 28434probability of the original branch in case it was a simple conditional 28435jump, -1 otherwise. To simplify recomputing of edge frequencies, the 28436new sequence is required to have only forward jumps to the newly created 28437labels. 28438 28439 For the common case where the pattern of a define_split exactly matches 28440the pattern of a define_insn, use 'define_insn_and_split'. It looks 28441like this: 28442 28443 (define_insn_and_split 28444 [INSN-PATTERN] 28445 "CONDITION" 28446 "OUTPUT-TEMPLATE" 28447 "SPLIT-CONDITION" 28448 [NEW-INSN-PATTERN-1 28449 NEW-INSN-PATTERN-2 28450 ...] 28451 "PREPARATION-STATEMENTS" 28452 [INSN-ATTRIBUTES]) 28453 28454 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 28455as in 'define_insn'. The NEW-INSN-PATTERN vector and the 28456PREPARATION-STATEMENTS are used as in a 'define_split'. The 28457SPLIT-CONDITION is also used as in 'define_split', with the additional 28458behavior that if the condition starts with '&&', the condition used for 28459the split will be the constructed as a logical "and" of the split 28460condition with the insn condition. For example, from i386.md: 28461 28462 (define_insn_and_split "zero_extendhisi2_and" 28463 [(set (match_operand:SI 0 "register_operand" "=r") 28464 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 28465 (clobber (reg:CC 17))] 28466 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 28467 "#" 28468 "&& reload_completed" 28469 [(parallel [(set (match_dup 0) 28470 (and:SI (match_dup 0) (const_int 65535))) 28471 (clobber (reg:CC 17))])] 28472 "" 28473 [(set_attr "type" "alu1")]) 28474 28475 In this case, the actual split condition will be 28476'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 28477 28478 The 'define_insn_and_split' construction provides exactly the same 28479functionality as two separate 'define_insn' and 'define_split' patterns. 28480It exists for compactness, and as a maintenance tool to prevent having 28481to ensure the two patterns' templates match. 28482 28483 It is sometimes useful to have a 'define_insn_and_split' that replaces 28484specific operands of an instruction but leaves the rest of the 28485instruction pattern unchanged. You can do this directly with a 28486'define_insn_and_split', but it requires a NEW-INSN-PATTERN-1 that 28487repeats most of the original INSN-PATTERN. There is also the 28488complication that an implicit 'parallel' in INSN-PATTERN must become an 28489explicit 'parallel' in NEW-INSN-PATTERN-1, which is easy to overlook. A 28490simpler alternative is to use 'define_insn_and_rewrite', which is a form 28491of 'define_insn_and_split' that automatically generates 28492NEW-INSN-PATTERN-1 by replacing each 'match_operand' in INSN-PATTERN 28493with a corresponding 'match_dup', and each 'match_operator' in the 28494pattern with a corresponding 'match_op_dup'. The arguments are 28495otherwise identical to 'define_insn_and_split': 28496 28497 (define_insn_and_rewrite 28498 [INSN-PATTERN] 28499 "CONDITION" 28500 "OUTPUT-TEMPLATE" 28501 "SPLIT-CONDITION" 28502 "PREPARATION-STATEMENTS" 28503 [INSN-ATTRIBUTES]) 28504 28505 The 'match_dup's and 'match_op_dup's in the new instruction pattern use 28506any new operand values that the PREPARATION-STATEMENTS store in the 28507'operands' array, as for a normal 'define_insn_and_split'. 28508PREPARATION-STATEMENTS can also emit additional instructions before the 28509new instruction. They can even emit an entirely different sequence of 28510instructions and use 'DONE' to avoid emitting a new form of the original 28511instruction. 28512 28513 The split in a 'define_insn_and_rewrite' is only intended to apply to 28514existing instructions that match INSN-PATTERN. SPLIT-CONDITION must 28515therefore start with '&&', so that the split condition applies on top of 28516CONDITION. 28517 28518 Here is an example from the AArch64 SVE port, in which operand 1 is 28519known to be equivalent to an all-true constant and isn't used by the 28520output template: 28521 28522 (define_insn_and_rewrite "*while_ult<GPI:mode><PRED_ALL:mode>_cc" 28523 [(set (reg:CC CC_REGNUM) 28524 (compare:CC 28525 (unspec:SI [(match_operand:PRED_ALL 1) 28526 (unspec:PRED_ALL 28527 [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ") 28528 (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")] 28529 UNSPEC_WHILE_LO)] 28530 UNSPEC_PTEST_PTRUE) 28531 (const_int 0))) 28532 (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") 28533 (unspec:PRED_ALL [(match_dup 2) 28534 (match_dup 3)] 28535 UNSPEC_WHILE_LO))] 28536 "TARGET_SVE" 28537 "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3" 28538 ;; Force the compiler to drop the unused predicate operand, so that we 28539 ;; don't have an unnecessary PTRUE. 28540 "&& !CONSTANT_P (operands[1])" 28541 { 28542 operands[1] = CONSTM1_RTX (<MODE>mode); 28543 } 28544 ) 28545 28546 The splitter in this case simply replaces operand 1 with the constant 28547value that it is known to have. The equivalent 'define_insn_and_split' 28548would be: 28549 28550 (define_insn_and_split "*while_ult<GPI:mode><PRED_ALL:mode>_cc" 28551 [(set (reg:CC CC_REGNUM) 28552 (compare:CC 28553 (unspec:SI [(match_operand:PRED_ALL 1) 28554 (unspec:PRED_ALL 28555 [(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ") 28556 (match_operand:GPI 3 "aarch64_reg_or_zero" "rZ")] 28557 UNSPEC_WHILE_LO)] 28558 UNSPEC_PTEST_PTRUE) 28559 (const_int 0))) 28560 (set (match_operand:PRED_ALL 0 "register_operand" "=Upa") 28561 (unspec:PRED_ALL [(match_dup 2) 28562 (match_dup 3)] 28563 UNSPEC_WHILE_LO))] 28564 "TARGET_SVE" 28565 "whilelo\t%0.<PRED_ALL:Vetype>, %<w>2, %<w>3" 28566 ;; Force the compiler to drop the unused predicate operand, so that we 28567 ;; don't have an unnecessary PTRUE. 28568 "&& !CONSTANT_P (operands[1])" 28569 [(parallel 28570 [(set (reg:CC CC_REGNUM) 28571 (compare:CC 28572 (unspec:SI [(match_dup 1) 28573 (unspec:PRED_ALL [(match_dup 2) 28574 (match_dup 3)] 28575 UNSPEC_WHILE_LO)] 28576 UNSPEC_PTEST_PTRUE) 28577 (const_int 0))) 28578 (set (match_dup 0) 28579 (unspec:PRED_ALL [(match_dup 2) 28580 (match_dup 3)] 28581 UNSPEC_WHILE_LO))])] 28582 { 28583 operands[1] = CONSTM1_RTX (<MODE>mode); 28584 } 28585 ) 28586 28587 28588File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 28589 2859017.17 Including Patterns in Machine Descriptions. 28591================================================= 28592 28593The 'include' pattern tells the compiler tools where to look for 28594patterns that are in files other than in the file '.md'. This is used 28595only at build time and there is no preprocessing allowed. 28596 28597 It looks like: 28598 28599 28600 (include 28601 PATHNAME) 28602 28603 For example: 28604 28605 28606 (include "filestuff") 28607 28608 Where PATHNAME is a string that specifies the location of the file, 28609specifies the include file to be in 'gcc/config/target/filestuff'. The 28610directory 'gcc/config/target' is regarded as the default directory. 28611 28612 Machine descriptions may be split up into smaller more manageable 28613subsections and placed into subdirectories. 28614 28615 By specifying: 28616 28617 28618 (include "BOGUS/filestuff") 28619 28620 the include file is specified to be in 28621'gcc/config/TARGET/BOGUS/filestuff'. 28622 28623 Specifying an absolute path for the include file such as; 28624 28625 (include "/u2/BOGUS/filestuff") 28626 28627 is permitted but is not encouraged. 28628 2862917.17.1 RTL Generation Tool Options for Directory Search 28630-------------------------------------------------------- 28631 28632The '-IDIR' option specifies directories to search for machine 28633descriptions. For example: 28634 28635 28636 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 28637 28638 Add the directory DIR to the head of the list of directories to be 28639searched for header files. This can be used to override a system 28640machine definition file, substituting your own version, since these 28641directories are searched before the default machine description file 28642directories. If you use more than one '-I' option, the directories are 28643scanned in left-to-right order; the standard default directory come 28644after. 28645 28646 28647File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 28648 2864917.18 Machine-Specific Peephole Optimizers 28650========================================== 28651 28652In addition to instruction patterns the 'md' file may contain 28653definitions of machine-specific peephole optimizations. 28654 28655 The combiner does not notice certain peephole optimizations when the 28656data flow in the program does not suggest that it should try them. For 28657example, sometimes two consecutive insns related in purpose can be 28658combined even though the second one does not appear to use a register 28659computed in the first one. A machine-specific peephole optimizer can 28660detect such opportunities. 28661 28662 There are two forms of peephole definitions that may be used. The 28663original 'define_peephole' is run at assembly output time to match insns 28664and substitute assembly text. Use of 'define_peephole' is deprecated. 28665 28666 A newer 'define_peephole2' matches insns and substitutes new insns. 28667The 'peephole2' pass is run after register allocation but before 28668scheduling, which may result in much better code for targets that do 28669scheduling. 28670 28671* Menu: 28672 28673* define_peephole:: RTL to Text Peephole Optimizers 28674* define_peephole2:: RTL to RTL Peephole Optimizers 28675 28676 28677File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 28678 2867917.18.1 RTL to Text Peephole Optimizers 28680--------------------------------------- 28681 28682A definition looks like this: 28683 28684 (define_peephole 28685 [INSN-PATTERN-1 28686 INSN-PATTERN-2 28687 ...] 28688 "CONDITION" 28689 "TEMPLATE" 28690 "OPTIONAL-INSN-ATTRIBUTES") 28691 28692The last string operand may be omitted if you are not using any 28693machine-specific information in this machine description. If present, 28694it must obey the same rules as in a 'define_insn'. 28695 28696 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 28697consecutive insns. The optimization applies to a sequence of insns when 28698INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 28699and so on. 28700 28701 Each of the insns matched by a peephole must also match a 28702'define_insn'. Peepholes are checked only at the last stage just before 28703code generation, and only optionally. Therefore, any insn which would 28704match a peephole but no 'define_insn' will cause a crash in code 28705generation in an unoptimized compilation, or at various optimization 28706stages. 28707 28708 The operands of the insns are matched with 'match_operands', 28709'match_operator', and 'match_dup', as usual. What is not usual is that 28710the operand numbers apply to all the insn patterns in the definition. 28711So, you can check for identical operands in two insns by using 28712'match_operand' in one insn and 'match_dup' in the other. 28713 28714 The operand constraints used in 'match_operand' patterns do not have 28715any direct effect on the applicability of the peephole, but they will be 28716validated afterward, so make sure your constraints are general enough to 28717apply whenever the peephole matches. If the peephole matches but the 28718constraints are not satisfied, the compiler will crash. 28719 28720 It is safe to omit constraints in all the operands of the peephole; or 28721you can write constraints which serve as a double-check on the criteria 28722previously tested. 28723 28724 Once a sequence of insns matches the patterns, the CONDITION is 28725checked. This is a C expression which makes the final decision whether 28726to perform the optimization (we do so if the expression is nonzero). If 28727CONDITION is omitted (in other words, the string is empty) then the 28728optimization is applied to every sequence of insns that matches the 28729patterns. 28730 28731 The defined peephole optimizations are applied after register 28732allocation is complete. Therefore, the peephole definition can check 28733which operands have ended up in which kinds of registers, just by 28734looking at the operands. 28735 28736 The way to refer to the operands in CONDITION is to write 'operands[I]' 28737for operand number I (as matched by '(match_operand I ...)'). Use the 28738variable 'insn' to refer to the last of the insns being matched; use 28739'prev_active_insn' to find the preceding insns. 28740 28741 When optimizing computations with intermediate results, you can use 28742CONDITION to match only when the intermediate results are not used 28743elsewhere. Use the C expression 'dead_or_set_p (INSN, OP)', where INSN 28744is the insn in which you expect the value to be used for the last time 28745(from the value of 'insn', together with use of 'prev_nonnote_insn'), 28746and OP is the intermediate value (from 'operands[I]'). 28747 28748 Applying the optimization means replacing the sequence of insns with 28749one new insn. The TEMPLATE controls ultimate output of assembler code 28750for this combined insn. It works exactly like the template of a 28751'define_insn'. Operand numbers in this template are the same ones used 28752in matching the original sequence of insns. 28753 28754 The result of a defined peephole optimizer does not need to match any 28755of the insn patterns in the machine description; it does not even have 28756an opportunity to match them. The peephole optimizer definition itself 28757serves as the insn pattern to control how the insn is output. 28758 28759 Defined peephole optimizers are run as assembler code is being output, 28760so the insns they produce are never combined or rearranged in any way. 28761 28762 Here is an example, taken from the 68000 machine description: 28763 28764 (define_peephole 28765 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 28766 (set (match_operand:DF 0 "register_operand" "=f") 28767 (match_operand:DF 1 "register_operand" "ad"))] 28768 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 28769 { 28770 rtx xoperands[2]; 28771 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 28772 #ifdef MOTOROLA 28773 output_asm_insn ("move.l %1,(sp)", xoperands); 28774 output_asm_insn ("move.l %1,-(sp)", operands); 28775 return "fmove.d (sp)+,%0"; 28776 #else 28777 output_asm_insn ("movel %1,sp@", xoperands); 28778 output_asm_insn ("movel %1,sp@-", operands); 28779 return "fmoved sp@+,%0"; 28780 #endif 28781 }) 28782 28783 The effect of this optimization is to change 28784 28785 jbsr _foobar 28786 addql #4,sp 28787 movel d1,sp@- 28788 movel d0,sp@- 28789 fmoved sp@+,fp0 28790 28791into 28792 28793 jbsr _foobar 28794 movel d1,sp@ 28795 movel d0,sp@- 28796 fmoved sp@+,fp0 28797 28798 INSN-PATTERN-1 and so on look _almost_ like the second operand of 28799'define_insn'. There is one important difference: the second operand of 28800'define_insn' consists of one or more RTX's enclosed in square brackets. 28801Usually, there is only one: then the same action can be written as an 28802element of a 'define_peephole'. But when there are multiple actions in 28803a 'define_insn', they are implicitly enclosed in a 'parallel'. Then you 28804must explicitly write the 'parallel', and the square brackets within it, 28805in the 'define_peephole'. Thus, if an insn pattern looks like this, 28806 28807 (define_insn "divmodsi4" 28808 [(set (match_operand:SI 0 "general_operand" "=d") 28809 (div:SI (match_operand:SI 1 "general_operand" "0") 28810 (match_operand:SI 2 "general_operand" "dmsK"))) 28811 (set (match_operand:SI 3 "general_operand" "=d") 28812 (mod:SI (match_dup 1) (match_dup 2)))] 28813 "TARGET_68020" 28814 "divsl%.l %2,%3:%0") 28815 28816then the way to mention this insn in a peephole is as follows: 28817 28818 (define_peephole 28819 [... 28820 (parallel 28821 [(set (match_operand:SI 0 "general_operand" "=d") 28822 (div:SI (match_operand:SI 1 "general_operand" "0") 28823 (match_operand:SI 2 "general_operand" "dmsK"))) 28824 (set (match_operand:SI 3 "general_operand" "=d") 28825 (mod:SI (match_dup 1) (match_dup 2)))]) 28826 ...] 28827 ...) 28828 28829 28830File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 28831 2883217.18.2 RTL to RTL Peephole Optimizers 28833-------------------------------------- 28834 28835The 'define_peephole2' definition tells the compiler how to substitute 28836one sequence of instructions for another sequence, what additional 28837scratch registers may be needed and what their lifetimes must be. 28838 28839 (define_peephole2 28840 [INSN-PATTERN-1 28841 INSN-PATTERN-2 28842 ...] 28843 "CONDITION" 28844 [NEW-INSN-PATTERN-1 28845 NEW-INSN-PATTERN-2 28846 ...] 28847 "PREPARATION-STATEMENTS") 28848 28849 The definition is almost identical to 'define_split' (*note Insn 28850Splitting::) except that the pattern to match is not a single 28851instruction, but a sequence of instructions. 28852 28853 It is possible to request additional scratch registers for use in the 28854output template. If appropriate registers are not free, the pattern 28855will simply not match. 28856 28857 Scratch registers are requested with a 'match_scratch' pattern at the 28858top level of the input pattern. The allocated register (initially) will 28859be dead at the point requested within the original sequence. If the 28860scratch is used at more than a single point, a 'match_dup' pattern at 28861the top level of the input pattern marks the last position in the input 28862sequence at which the register must be available. 28863 28864 Here is an example from the IA-32 machine description: 28865 28866 (define_peephole2 28867 [(match_scratch:SI 2 "r") 28868 (parallel [(set (match_operand:SI 0 "register_operand" "") 28869 (match_operator:SI 3 "arith_or_logical_operator" 28870 [(match_dup 0) 28871 (match_operand:SI 1 "memory_operand" "")])) 28872 (clobber (reg:CC 17))])] 28873 "! optimize_size && ! TARGET_READ_MODIFY" 28874 [(set (match_dup 2) (match_dup 1)) 28875 (parallel [(set (match_dup 0) 28876 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 28877 (clobber (reg:CC 17))])] 28878 "") 28879 28880This pattern tries to split a load from its use in the hopes that we'll 28881be able to schedule around the memory load latency. It allocates a 28882single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to 28883be live only at the point just before the arithmetic. 28884 28885 A real example requiring extended scratch lifetimes is harder to come 28886by, so here's a silly made-up example: 28887 28888 (define_peephole2 28889 [(match_scratch:SI 4 "r") 28890 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 28891 (set (match_operand:SI 2 "" "") (match_dup 1)) 28892 (match_dup 4) 28893 (set (match_operand:SI 3 "" "") (match_dup 1))] 28894 "/* determine 1 does not overlap 0 and 2 */" 28895 [(set (match_dup 4) (match_dup 1)) 28896 (set (match_dup 0) (match_dup 4)) 28897 (set (match_dup 2) (match_dup 4)) 28898 (set (match_dup 3) (match_dup 4))] 28899 "") 28900 28901 There are two special macros defined for use in the preparation 28902statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 28903a statement. 28904 28905'DONE' 28906 Use the 'DONE' macro to end RTL generation for the peephole. The 28907 only RTL insns generated as replacement for the matched input insn 28908 will be those already emitted by explicit calls to 'emit_insn' 28909 within the preparation statements; the replacement pattern is not 28910 used. 28911 28912'FAIL' 28913 Make the 'define_peephole2' fail on this occasion. When a 28914 'define_peephole2' fails, it means that the replacement was not 28915 truly available for the particular inputs it was given. In that 28916 case, GCC may still apply a later 'define_peephole2' that also 28917 matches the given insn pattern. (Note that this is different from 28918 'define_split', where 'FAIL' prevents the input insn from being 28919 split at all.) 28920 28921 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 28922then the 'define_peephole2' uses the replacement template. 28923 28924If we had not added the '(match_dup 4)' in the middle of the input 28925sequence, it might have been the case that the register we chose at the 28926beginning of the sequence is killed by the first or second 'set'. 28927 28928 28929File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 28930 2893117.19 Instruction Attributes 28932============================ 28933 28934In addition to describing the instruction supported by the target 28935machine, the 'md' file also defines a group of "attributes" and a set of 28936values for each. Every generated insn is assigned a value for each 28937attribute. One possible attribute would be the effect that the insn has 28938on the machine's condition code. This attribute can then be used by 28939'NOTICE_UPDATE_CC' to track the condition codes. 28940 28941* Menu: 28942 28943* Defining Attributes:: Specifying attributes and their values. 28944* Expressions:: Valid expressions for attribute values. 28945* Tagging Insns:: Assigning attribute values to insns. 28946* Attr Example:: An example of assigning attributes. 28947* Insn Lengths:: Computing the length of insns. 28948* Constant Attributes:: Defining attributes that are constant. 28949* Mnemonic Attribute:: Obtain the instruction mnemonic as attribute value. 28950* Delay Slots:: Defining delay slots required for a machine. 28951* Processor pipeline description:: Specifying information for insn scheduling. 28952 28953 28954File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 28955 2895617.19.1 Defining Attributes and their Values 28957-------------------------------------------- 28958 28959The 'define_attr' expression is used to define each attribute required 28960by the target machine. It looks like: 28961 28962 (define_attr NAME LIST-OF-VALUES DEFAULT) 28963 28964 NAME is a string specifying the name of the attribute being defined. 28965Some attributes are used in a special way by the rest of the compiler. 28966The 'enabled' attribute can be used to conditionally enable or disable 28967insn alternatives (*note Disable Insn Alternatives::). The 'predicable' 28968attribute, together with a suitable 'define_cond_exec' (*note 28969Conditional Execution::), can be used to automatically generate 28970conditional variants of instruction patterns. The 'mnemonic' attribute 28971can be used to check for the instruction mnemonic (*note Mnemonic 28972Attribute::). The compiler internally uses the names 'ce_enabled' and 28973'nonce_enabled', so they should not be used elsewhere as alternative 28974names. 28975 28976 LIST-OF-VALUES is either a string that specifies a comma-separated list 28977of values that can be assigned to the attribute, or a null string to 28978indicate that the attribute takes numeric values. 28979 28980 DEFAULT is an attribute expression that gives the value of this 28981attribute for insns that match patterns whose definition does not 28982include an explicit value for this attribute. *Note Attr Example::, for 28983more information on the handling of defaults. *Note Constant 28984Attributes::, for information on attributes that do not depend on any 28985particular insn. 28986 28987 For each defined attribute, a number of definitions are written to the 28988'insn-attr.h' file. For cases where an explicit set of values is 28989specified for an attribute, the following are defined: 28990 28991 * A '#define' is written for the symbol 'HAVE_ATTR_NAME'. 28992 28993 * An enumerated class is defined for 'attr_NAME' with elements of the 28994 form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value 28995 are first converted to uppercase. 28996 28997 * A function 'get_attr_NAME' is defined that is passed an insn and 28998 returns the attribute value for that insn. 28999 29000 For example, if the following is present in the 'md' file: 29001 29002 (define_attr "type" "branch,fp,load,store,arith" ...) 29003 29004the following lines will be written to the file 'insn-attr.h'. 29005 29006 #define HAVE_ATTR_type 1 29007 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 29008 TYPE_STORE, TYPE_ARITH}; 29009 extern enum attr_type get_attr_type (); 29010 29011 If the attribute takes numeric values, no 'enum' type will be defined 29012and the function to obtain the attribute's value will return 'int'. 29013 29014 There are attributes which are tied to a specific meaning. These 29015attributes are not free to use for other purposes: 29016 29017'length' 29018 The 'length' attribute is used to calculate the length of emitted 29019 code chunks. This is especially important when verifying branch 29020 distances. *Note Insn Lengths::. 29021 29022'enabled' 29023 The 'enabled' attribute can be defined to prevent certain 29024 alternatives of an insn definition from being used during code 29025 generation. *Note Disable Insn Alternatives::. 29026 29027'mnemonic' 29028 The 'mnemonic' attribute can be defined to implement instruction 29029 specific checks in e.g. the pipeline description. *Note Mnemonic 29030 Attribute::. 29031 29032 For each of these special attributes, the corresponding 29033'HAVE_ATTR_NAME' '#define' is also written when the attribute is not 29034defined; in that case, it is defined as '0'. 29035 29036 Another way of defining an attribute is to use: 29037 29038 (define_enum_attr "ATTR" "ENUM" DEFAULT) 29039 29040 This works in just the same way as 'define_attr', except that the list 29041of values is taken from a separate enumeration called ENUM (*note 29042define_enum::). This form allows you to use the same list of values for 29043several attributes without having to repeat the list each time. For 29044example: 29045 29046 (define_enum "processor" [ 29047 model_a 29048 model_b 29049 ... 29050 ]) 29051 (define_enum_attr "arch" "processor" 29052 (const (symbol_ref "target_arch"))) 29053 (define_enum_attr "tune" "processor" 29054 (const (symbol_ref "target_tune"))) 29055 29056 defines the same attributes as: 29057 29058 (define_attr "arch" "model_a,model_b,..." 29059 (const (symbol_ref "target_arch"))) 29060 (define_attr "tune" "model_a,model_b,..." 29061 (const (symbol_ref "target_tune"))) 29062 29063 but without duplicating the processor list. The second example defines 29064two separate C enums ('attr_arch' and 'attr_tune') whereas the first 29065defines a single C enum ('processor'). 29066 29067 29068File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 29069 2907017.19.2 Attribute Expressions 29071----------------------------- 29072 29073RTL expressions used to define attributes use the codes described above 29074plus a few specific to attribute definitions, to be discussed below. 29075Attribute value expressions must have one of the following forms: 29076 29077'(const_int I)' 29078 The integer I specifies the value of a numeric attribute. I must 29079 be non-negative. 29080 29081 The value of a numeric attribute can be specified either with a 29082 'const_int', or as an integer represented as a string in 29083 'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple 29084 arithmetic expressions, and 'set_attr' overrides on specific 29085 instructions (*note Tagging Insns::). 29086 29087'(const_string VALUE)' 29088 The string VALUE specifies a constant attribute value. If VALUE is 29089 specified as '"*"', it means that the default value of the 29090 attribute is to be used for the insn containing this expression. 29091 '"*"' obviously cannot be used in the DEFAULT expression of a 29092 'define_attr'. 29093 29094 If the attribute whose value is being specified is numeric, VALUE 29095 must be a string containing a non-negative integer (normally 29096 'const_int' would be used in this case). Otherwise, it must 29097 contain one of the valid values for the attribute. 29098 29099'(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 29100 TEST specifies an attribute test, whose format is defined below. 29101 The value of this expression is TRUE-VALUE if TEST is true, 29102 otherwise it is FALSE-VALUE. 29103 29104'(cond [TEST1 VALUE1 ...] DEFAULT)' 29105 The first operand of this expression is a vector containing an even 29106 number of expressions and consisting of pairs of TEST and VALUE 29107 expressions. The value of the 'cond' expression is that of the 29108 VALUE corresponding to the first true TEST expression. If none of 29109 the TEST expressions are true, the value of the 'cond' expression 29110 is that of the DEFAULT expression. 29111 29112 TEST expressions can have one of the following forms: 29113 29114'(const_int I)' 29115 This test is true if I is nonzero and false otherwise. 29116 29117'(not TEST)' 29118'(ior TEST1 TEST2)' 29119'(and TEST1 TEST2)' 29120 These tests are true if the indicated logical function is true. 29121 29122'(match_operand:M N PRED CONSTRAINTS)' 29123 This test is true if operand N of the insn whose attribute value is 29124 being determined has mode M (this part of the test is ignored if M 29125 is 'VOIDmode') and the function specified by the string PRED 29126 returns a nonzero value when passed operand N and mode M (this part 29127 of the test is ignored if PRED is the null string). 29128 29129 The CONSTRAINTS operand is ignored and should be the null string. 29130 29131'(match_test C-EXPR)' 29132 The test is true if C expression C-EXPR is true. In non-constant 29133 attributes, C-EXPR has access to the following variables: 29134 29135 INSN 29136 The rtl instruction under test. 29137 WHICH_ALTERNATIVE 29138 The 'define_insn' alternative that INSN matches. *Note Output 29139 Statement::. 29140 OPERANDS 29141 An array of INSN's rtl operands. 29142 29143 C-EXPR behaves like the condition in a C 'if' statement, so there 29144 is no need to explicitly convert the expression into a boolean 0 or 29145 1 value. For example, the following two tests are equivalent: 29146 29147 (match_test "x & 2") 29148 (match_test "(x & 2) != 0") 29149 29150'(le ARITH1 ARITH2)' 29151'(leu ARITH1 ARITH2)' 29152'(lt ARITH1 ARITH2)' 29153'(ltu ARITH1 ARITH2)' 29154'(gt ARITH1 ARITH2)' 29155'(gtu ARITH1 ARITH2)' 29156'(ge ARITH1 ARITH2)' 29157'(geu ARITH1 ARITH2)' 29158'(ne ARITH1 ARITH2)' 29159'(eq ARITH1 ARITH2)' 29160 These tests are true if the indicated comparison of the two 29161 arithmetic expressions is true. Arithmetic expressions are formed 29162 with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and', 29163 'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt' 29164 expressions. 29165 29166 'const_int' and 'symbol_ref' are always valid terms (*note Insn 29167 Lengths::,for additional forms). 'symbol_ref' is a string denoting 29168 a C expression that yields an 'int' when evaluated by the 29169 'get_attr_...' routine. It should normally be a global variable. 29170 29171'(eq_attr NAME VALUE)' 29172 NAME is a string specifying the name of an attribute. 29173 29174 VALUE is a string that is either a valid value for attribute NAME, 29175 a comma-separated list of values, or '!' followed by a value or 29176 list. If VALUE does not begin with a '!', this test is true if the 29177 value of the NAME attribute of the current insn is in the list 29178 specified by VALUE. If VALUE begins with a '!', this test is true 29179 if the attribute's value is _not_ in the specified list. 29180 29181 For example, 29182 29183 (eq_attr "type" "load,store") 29184 29185 is equivalent to 29186 29187 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 29188 29189 If NAME specifies an attribute of 'alternative', it refers to the 29190 value of the compiler variable 'which_alternative' (*note Output 29191 Statement::) and the values must be small integers. For example, 29192 29193 (eq_attr "alternative" "2,3") 29194 29195 is equivalent to 29196 29197 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 29198 (eq (symbol_ref "which_alternative") (const_int 3))) 29199 29200 Note that, for most attributes, an 'eq_attr' test is simplified in 29201 cases where the value of the attribute being tested is known for 29202 all insns matching a particular pattern. This is by far the most 29203 common case. 29204 29205'(attr_flag NAME)' 29206 The value of an 'attr_flag' expression is true if the flag 29207 specified by NAME is true for the 'insn' currently being scheduled. 29208 29209 NAME is a string specifying one of a fixed set of flags to test. 29210 Test the flags 'forward' and 'backward' to determine the direction 29211 of a conditional branch. 29212 29213 This example describes a conditional branch delay slot which can be 29214 nullified for forward branches that are taken (annul-true) or for 29215 backward branches which are not taken (annul-false). 29216 29217 (define_delay (eq_attr "type" "cbranch") 29218 [(eq_attr "in_branch_delay" "true") 29219 (and (eq_attr "in_branch_delay" "true") 29220 (attr_flag "forward")) 29221 (and (eq_attr "in_branch_delay" "true") 29222 (attr_flag "backward"))]) 29223 29224 The 'forward' and 'backward' flags are false if the current 'insn' 29225 being scheduled is not a conditional branch. 29226 29227 'attr_flag' is only used during delay slot scheduling and has no 29228 meaning to other passes of the compiler. 29229 29230'(attr NAME)' 29231 The value of another attribute is returned. This is most useful 29232 for numeric attributes, as 'eq_attr' and 'attr_flag' produce more 29233 efficient code for non-numeric attributes. 29234 29235 29236File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 29237 2923817.19.3 Assigning Attribute Values to Insns 29239------------------------------------------- 29240 29241The value assigned to an attribute of an insn is primarily determined by 29242which pattern is matched by that insn (or which 'define_peephole' 29243generated it). Every 'define_insn' and 'define_peephole' can have an 29244optional last argument to specify the values of attributes for matching 29245insns. The value of any attribute not specified in a particular insn is 29246set to the default value for that attribute, as specified in its 29247'define_attr'. Extensive use of default values for attributes permits 29248the specification of the values for only one or two attributes in the 29249definition of most insn patterns, as seen in the example in the next 29250section. 29251 29252 The optional last argument of 'define_insn' and 'define_peephole' is a 29253vector of expressions, each of which defines the value for a single 29254attribute. The most general way of assigning an attribute's value is to 29255use a 'set' expression whose first operand is an 'attr' expression 29256giving the name of the attribute being set. The second operand of the 29257'set' is an attribute expression (*note Expressions::) giving the value 29258of the attribute. 29259 29260 When the attribute value depends on the 'alternative' attribute (i.e., 29261which is the applicable alternative in the constraint of the insn), the 29262'set_attr_alternative' expression can be used. It allows the 29263specification of a vector of attribute expressions, one for each 29264alternative. 29265 29266 When the generality of arbitrary attribute expressions is not required, 29267the simpler 'set_attr' expression can be used, which allows specifying a 29268string giving either a single attribute value or a list of attribute 29269values, one for each alternative. 29270 29271 The form of each of the above specifications is shown below. In each 29272case, NAME is a string specifying the attribute to be set. 29273 29274'(set_attr NAME VALUE-STRING)' 29275 VALUE-STRING is either a string giving the desired attribute value, 29276 or a string containing a comma-separated list giving the values for 29277 succeeding alternatives. The number of elements must match the 29278 number of alternatives in the constraint of the insn pattern. 29279 29280 Note that it may be useful to specify '*' for some alternative, in 29281 which case the attribute will assume its default value for insns 29282 matching that alternative. 29283 29284'(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 29285 Depending on the alternative of the insn, the value will be one of 29286 the specified values. This is a shorthand for using a 'cond' with 29287 tests on the 'alternative' attribute. 29288 29289'(set (attr NAME) VALUE)' 29290 The first operand of this 'set' must be the special RTL expression 29291 'attr', whose sole operand is a string giving the name of the 29292 attribute being set. VALUE is the value of the attribute. 29293 29294 The following shows three different ways of representing the same 29295attribute value specification: 29296 29297 (set_attr "type" "load,store,arith") 29298 29299 (set_attr_alternative "type" 29300 [(const_string "load") (const_string "store") 29301 (const_string "arith")]) 29302 29303 (set (attr "type") 29304 (cond [(eq_attr "alternative" "1") (const_string "load") 29305 (eq_attr "alternative" "2") (const_string "store")] 29306 (const_string "arith"))) 29307 29308 The 'define_asm_attributes' expression provides a mechanism to specify 29309the attributes assigned to insns produced from an 'asm' statement. It 29310has the form: 29311 29312 (define_asm_attributes [ATTR-SETS]) 29313 29314where ATTR-SETS is specified the same as for both the 'define_insn' and 29315the 'define_peephole' expressions. 29316 29317 These values will typically be the "worst case" attribute values. For 29318example, they might indicate that the condition code will be clobbered. 29319 29320 A specification for a 'length' attribute is handled specially. The way 29321to compute the length of an 'asm' insn is to multiply the length 29322specified in the expression 'define_asm_attributes' by the number of 29323machine instructions specified in the 'asm' statement, determined by 29324counting the number of semicolons and newlines in the string. 29325Therefore, the value of the 'length' attribute specified in a 29326'define_asm_attributes' should be the maximum possible length of a 29327single machine instruction. 29328 29329 29330File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 29331 2933217.19.4 Example of Attribute Specifications 29333------------------------------------------- 29334 29335The judicious use of defaulting is important in the efficient use of 29336insn attributes. Typically, insns are divided into "types" and an 29337attribute, customarily called 'type', is used to represent this value. 29338This attribute is normally used only to define the default value for 29339other attributes. An example will clarify this usage. 29340 29341 Assume we have a RISC machine with a condition code and in which only 29342full-word operations are performed in registers. Let us assume that we 29343can divide all insns into loads, stores, (integer) arithmetic 29344operations, floating point operations, and branches. 29345 29346 Here we will concern ourselves with determining the effect of an insn 29347on the condition code and will limit ourselves to the following possible 29348effects: The condition code can be set unpredictably (clobbered), not be 29349changed, be set to agree with the results of the operation, or only 29350changed if the item previously set into the condition code has been 29351modified. 29352 29353 Here is part of a sample 'md' file for such a machine: 29354 29355 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 29356 29357 (define_attr "cc" "clobber,unchanged,set,change0" 29358 (cond [(eq_attr "type" "load") 29359 (const_string "change0") 29360 (eq_attr "type" "store,branch") 29361 (const_string "unchanged") 29362 (eq_attr "type" "arith") 29363 (if_then_else (match_operand:SI 0 "" "") 29364 (const_string "set") 29365 (const_string "clobber"))] 29366 (const_string "clobber"))) 29367 29368 (define_insn "" 29369 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 29370 (match_operand:SI 1 "general_operand" "r,m,r"))] 29371 "" 29372 "@ 29373 move %0,%1 29374 load %0,%1 29375 store %0,%1" 29376 [(set_attr "type" "arith,load,store")]) 29377 29378 Note that we assume in the above example that arithmetic operations 29379performed on quantities smaller than a machine word clobber the 29380condition code since they will set the condition code to a value 29381corresponding to the full-word result. 29382 29383 29384File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 29385 2938617.19.5 Computing the Length of an Insn 29387--------------------------------------- 29388 29389For many machines, multiple types of branch instructions are provided, 29390each for different length branch displacements. In most cases, the 29391assembler will choose the correct instruction to use. However, when the 29392assembler cannot do so, GCC can when a special attribute, the 'length' 29393attribute, is defined. This attribute must be defined to have numeric 29394values by specifying a null string in its 'define_attr'. 29395 29396 In the case of the 'length' attribute, two additional forms of 29397arithmetic terms are allowed in test expressions: 29398 29399'(match_dup N)' 29400 This refers to the address of operand N of the current insn, which 29401 must be a 'label_ref'. 29402 29403'(pc)' 29404 For non-branch instructions and backward branch instructions, this 29405 refers to the address of the current insn. But for forward branch 29406 instructions, this refers to the address of the next insn, because 29407 the length of the current insn is to be computed. 29408 29409 For normal insns, the length will be determined by value of the 29410'length' attribute. In the case of 'addr_vec' and 'addr_diff_vec' insn 29411patterns, the length is computed as the number of vectors multiplied by 29412the size of each vector. 29413 29414 Lengths are measured in addressable storage units (bytes). 29415 29416 Note that it is possible to call functions via the 'symbol_ref' 29417mechanism to compute the length of an insn. However, if you use this 29418mechanism you must provide dummy clauses to express the maximum length 29419without using the function call. You can an example of this in the 'pa' 29420machine description for the 'call_symref' pattern. 29421 29422 The following macros can be used to refine the length computation: 29423 29424'ADJUST_INSN_LENGTH (INSN, LENGTH)' 29425 If defined, modifies the length assigned to instruction INSN as a 29426 function of the context in which it is used. LENGTH is an lvalue 29427 that contains the initially computed length of the insn and should 29428 be updated with the correct length of the insn. 29429 29430 This macro will normally not be required. A case in which it is 29431 required is the ROMP. On this machine, the size of an 'addr_vec' 29432 insn must be increased by two to compensate for the fact that 29433 alignment may be required. 29434 29435 The routine that returns 'get_attr_length' (the value of the 'length' 29436attribute) can be used by the output routine to determine the form of 29437the branch instruction to be written, as the example below illustrates. 29438 29439 As an example of the specification of variable-length branches, 29440consider the IBM 360. If we adopt the convention that a register will 29441be set to the starting address of a function, we can jump to labels 29442within 4k of the start using a four-byte instruction. Otherwise, we 29443need a six-byte sequence to load the address from memory and then branch 29444to it. 29445 29446 On such a machine, a pattern for a branch instruction might be 29447specified as follows: 29448 29449 (define_insn "jump" 29450 [(set (pc) 29451 (label_ref (match_operand 0 "" "")))] 29452 "" 29453 { 29454 return (get_attr_length (insn) == 4 29455 ? "b %l0" : "l r15,=a(%l0); br r15"); 29456 } 29457 [(set (attr "length") 29458 (if_then_else (lt (match_dup 0) (const_int 4096)) 29459 (const_int 4) 29460 (const_int 6)))]) 29461 29462 29463File: gccint.info, Node: Constant Attributes, Next: Mnemonic Attribute, Prev: Insn Lengths, Up: Insn Attributes 29464 2946517.19.6 Constant Attributes 29466--------------------------- 29467 29468A special form of 'define_attr', where the expression for the default 29469value is a 'const' expression, indicates an attribute that is constant 29470for a given run of the compiler. Constant attributes may be used to 29471specify which variety of processor is used. For example, 29472 29473 (define_attr "cpu" "m88100,m88110,m88000" 29474 (const 29475 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 29476 (symbol_ref "TARGET_88110") (const_string "m88110")] 29477 (const_string "m88000")))) 29478 29479 (define_attr "memory" "fast,slow" 29480 (const 29481 (if_then_else (symbol_ref "TARGET_FAST_MEM") 29482 (const_string "fast") 29483 (const_string "slow")))) 29484 29485 The routine generated for constant attributes has no parameters as it 29486does not depend on any particular insn. RTL expressions used to define 29487the value of a constant attribute may use the 'symbol_ref' form, but may 29488not use either the 'match_operand' form or 'eq_attr' forms involving 29489insn attributes. 29490 29491 29492File: gccint.info, Node: Mnemonic Attribute, Next: Delay Slots, Prev: Constant Attributes, Up: Insn Attributes 29493 2949417.19.7 Mnemonic Attribute 29495-------------------------- 29496 29497The 'mnemonic' attribute is a string type attribute holding the 29498instruction mnemonic for an insn alternative. The attribute values will 29499automatically be generated by the machine description parser if there is 29500an attribute definition in the md file: 29501 29502 (define_attr "mnemonic" "unknown" (const_string "unknown")) 29503 29504 The default value can be freely chosen as long as it does not collide 29505with any of the instruction mnemonics. This value will be used whenever 29506the machine description parser is not able to determine the mnemonic 29507string. This might be the case for output templates containing more 29508than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'. 29509 29510 The 'mnemonic' attribute set is not generated automatically if the 29511instruction string is generated via C code. 29512 29513 An existing 'mnemonic' attribute set in an insn definition will not be 29514overriden by the md file parser. That way it is possible to manually 29515set the instruction mnemonics for the cases where the md file parser 29516fails to determine it automatically. 29517 29518 The 'mnemonic' attribute is useful for dealing with instruction 29519specific properties in the pipeline description without defining 29520additional insn attributes. 29521 29522 (define_attr "ooo_expanded" "" 29523 (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr") 29524 (const_int 1)] 29525 (const_int 0))) 29526 29527 29528File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Mnemonic Attribute, Up: Insn Attributes 29529 2953017.19.8 Delay Slot Scheduling 29531----------------------------- 29532 29533The insn attribute mechanism can be used to specify the requirements for 29534delay slots, if any, on a target machine. An instruction is said to 29535require a "delay slot" if some instructions that are physically after 29536the instruction are executed as if they were located before it. Classic 29537examples are branch and call instructions, which often execute the 29538following instruction before the branch or call is performed. 29539 29540 On some machines, conditional branch instructions can optionally 29541"annul" instructions in the delay slot. This means that the instruction 29542will not be executed for certain branch outcomes. Both instructions 29543that annul if the branch is true and instructions that annul if the 29544branch is false are supported. 29545 29546 Delay slot scheduling differs from instruction scheduling in that 29547determining whether an instruction needs a delay slot is dependent only 29548on the type of instruction being generated, not on data flow between the 29549instructions. See the next section for a discussion of data-dependent 29550instruction scheduling. 29551 29552 The requirement of an insn needing one or more delay slots is indicated 29553via the 'define_delay' expression. It has the following form: 29554 29555 (define_delay TEST 29556 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 29557 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 29558 ...]) 29559 29560 TEST is an attribute test that indicates whether this 'define_delay' 29561applies to a particular insn. If so, the number of required delay slots 29562is determined by the length of the vector specified as the second 29563argument. An insn placed in delay slot N must satisfy attribute test 29564DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 29565may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 29566specifies which insns in the delay slot may be annulled if the branch is 29567false. If annulling is not supported for that delay slot, '(nil)' 29568should be coded. 29569 29570 For example, in the common case where branch and call insns require a 29571single delay slot, which may contain any insn other than a branch or 29572call, the following would be placed in the 'md' file: 29573 29574 (define_delay (eq_attr "type" "branch,call") 29575 [(eq_attr "type" "!branch,call") (nil) (nil)]) 29576 29577 Multiple 'define_delay' expressions may be specified. In this case, 29578each such expression specifies different delay slot requirements and 29579there must be no insn for which tests in two 'define_delay' expressions 29580are both true. 29581 29582 For example, if we have a machine that requires one delay slot for 29583branches but two for calls, no delay slot can contain a branch or call 29584insn, and any valid insn in the delay slot for the branch can be 29585annulled if the branch is true, we might represent this as follows: 29586 29587 (define_delay (eq_attr "type" "branch") 29588 [(eq_attr "type" "!branch,call") 29589 (eq_attr "type" "!branch,call") 29590 (nil)]) 29591 29592 (define_delay (eq_attr "type" "call") 29593 [(eq_attr "type" "!branch,call") (nil) (nil) 29594 (eq_attr "type" "!branch,call") (nil) (nil)]) 29595 29596 29597File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 29598 2959917.19.9 Specifying processor pipeline description 29600------------------------------------------------- 29601 29602To achieve better performance, most modern processors (super-pipelined, 29603superscalar RISC, and VLIW processors) have many "functional units" on 29604which several instructions can be executed simultaneously. An 29605instruction starts execution if its issue conditions are satisfied. If 29606not, the instruction is stalled until its conditions are satisfied. 29607Such "interlock (pipeline) delay" causes interruption of the fetching of 29608successor instructions (or demands nop instructions, e.g. for some MIPS 29609processors). 29610 29611 There are two major kinds of interlock delays in modern processors. 29612The first one is a data dependence delay determining "instruction 29613latency time". The instruction execution is not started until all 29614source data have been evaluated by prior instructions (there are more 29615complex cases when the instruction execution starts even when the data 29616are not available but will be ready in given time after the instruction 29617execution start). Taking the data dependence delays into account is 29618simple. The data dependence (true, output, and anti-dependence) delay 29619between two instructions is given by a constant. In most cases this 29620approach is adequate. The second kind of interlock delays is a 29621reservation delay. The reservation delay means that two instructions 29622under execution will be in need of shared processors resources, i.e. 29623buses, internal registers, and/or functional units, which are reserved 29624for some time. Taking this kind of delay into account is complex 29625especially for modern RISC processors. 29626 29627 The task of exploiting more processor parallelism is solved by an 29628instruction scheduler. For a better solution to this problem, the 29629instruction scheduler has to have an adequate description of the 29630processor parallelism (or "pipeline description"). GCC machine 29631descriptions describe processor parallelism and functional unit 29632reservations for groups of instructions with the aid of "regular 29633expressions". 29634 29635 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 29636figure out the possibility of the instruction issue by the processor on 29637a given simulated processor cycle. The pipeline hazard recognizer is 29638automatically generated from the processor pipeline description. The 29639pipeline hazard recognizer generated from the machine description is 29640based on a deterministic finite state automaton (DFA): the instruction 29641issue is possible if there is a transition from one automaton state to 29642another one. This algorithm is very fast, and furthermore, its speed is 29643not dependent on processor complexity(1). 29644 29645 The rest of this section describes the directives that constitute an 29646automaton-based processor pipeline description. The order of these 29647constructions within the machine description file is not important. 29648 29649 The following optional construction describes names of automata 29650generated and used for the pipeline hazards recognition. Sometimes the 29651generated finite state automaton used by the pipeline hazard recognizer 29652is large. If we use more than one automaton and bind functional units 29653to the automata, the total size of the automata is usually less than the 29654size of the single automaton. If there is no one such construction, 29655only one finite state automaton is generated. 29656 29657 (define_automaton AUTOMATA-NAMES) 29658 29659 AUTOMATA-NAMES is a string giving names of the automata. The names are 29660separated by commas. All the automata should have unique names. The 29661automaton name is used in the constructions 'define_cpu_unit' and 29662'define_query_cpu_unit'. 29663 29664 Each processor functional unit used in the description of instruction 29665reservations should be described by the following construction. 29666 29667 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 29668 29669 UNIT-NAMES is a string giving the names of the functional units 29670separated by commas. Don't use name 'nothing', it is reserved for other 29671goals. 29672 29673 AUTOMATON-NAME is a string giving the name of the automaton with which 29674the unit is bound. The automaton should be described in construction 29675'define_automaton'. You should give "automaton-name", if there is a 29676defined automaton. 29677 29678 The assignment of units to automata are constrained by the uses of the 29679units in insn reservations. The most important constraint is: if a unit 29680reservation is present on a particular cycle of an alternative for an 29681insn reservation, then some unit from the same automaton must be present 29682on the same cycle for the other alternatives of the insn reservation. 29683The rest of the constraints are mentioned in the description of the 29684subsequent constructions. 29685 29686 The following construction describes CPU functional units analogously 29687to 'define_cpu_unit'. The reservation of such units can be queried for 29688an automaton state. The instruction scheduler never queries reservation 29689of functional units for given automaton state. So as a rule, you don't 29690need this construction. This construction could be used for future code 29691generation goals (e.g. to generate VLIW insn templates). 29692 29693 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 29694 29695 UNIT-NAMES is a string giving names of the functional units separated 29696by commas. 29697 29698 AUTOMATON-NAME is a string giving the name of the automaton with which 29699the unit is bound. 29700 29701 The following construction is the major one to describe pipeline 29702characteristics of an instruction. 29703 29704 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 29705 CONDITION REGEXP) 29706 29707 DEFAULT_LATENCY is a number giving latency time of the instruction. 29708There is an important difference between the old description and the 29709automaton based pipeline description. The latency time is used for all 29710dependencies when we use the old description. In the automaton based 29711pipeline description, the given latency time is only used for true 29712dependencies. The cost of anti-dependencies is always zero and the cost 29713of output dependencies is the difference between latency times of the 29714producing and consuming insns (if the difference is negative, the cost 29715is considered to be zero). You can always change the default costs for 29716any description by using the target hook 'TARGET_SCHED_ADJUST_COST' 29717(*note Scheduling::). 29718 29719 INSN-NAME is a string giving the internal name of the insn. The 29720internal names are used in constructions 'define_bypass' and in the 29721automaton description file generated for debugging. The internal name 29722has nothing in common with the names in 'define_insn'. It is a good 29723practice to use insn classes described in the processor manual. 29724 29725 CONDITION defines what RTL insns are described by this construction. 29726You should remember that you will be in trouble if CONDITION for two or 29727more different 'define_insn_reservation' constructions is TRUE for an 29728insn. In this case what reservation will be used for the insn is not 29729defined. Such cases are not checked during generation of the pipeline 29730hazards recognizer because in general recognizing that two conditions 29731may have the same value is quite difficult (especially if the conditions 29732contain 'symbol_ref'). It is also not checked during the pipeline 29733hazard recognizer work because it would slow down the recognizer 29734considerably. 29735 29736 REGEXP is a string describing the reservation of the cpu's functional 29737units by the instruction. The reservations are described by a regular 29738expression according to the following syntax: 29739 29740 regexp = regexp "," oneof 29741 | oneof 29742 29743 oneof = oneof "|" allof 29744 | allof 29745 29746 allof = allof "+" repeat 29747 | repeat 29748 29749 repeat = element "*" number 29750 | element 29751 29752 element = cpu_function_unit_name 29753 | reservation_name 29754 | result_name 29755 | "nothing" 29756 | "(" regexp ")" 29757 29758 * ',' is used for describing the start of the next cycle in the 29759 reservation. 29760 29761 * '|' is used for describing a reservation described by the first 29762 regular expression *or* a reservation described by the second 29763 regular expression *or* etc. 29764 29765 * '+' is used for describing a reservation described by the first 29766 regular expression *and* a reservation described by the second 29767 regular expression *and* etc. 29768 29769 * '*' is used for convenience and simply means a sequence in which 29770 the regular expression are repeated NUMBER times with cycle 29771 advancing (see ','). 29772 29773 * 'cpu_function_unit_name' denotes reservation of the named 29774 functional unit. 29775 29776 * 'reservation_name' -- see description of construction 29777 'define_reservation'. 29778 29779 * 'nothing' denotes no unit reservations. 29780 29781 Sometimes unit reservations for different insns contain common parts. 29782In such case, you can simplify the pipeline description by describing 29783the common part by the following construction 29784 29785 (define_reservation RESERVATION-NAME REGEXP) 29786 29787 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 29788names and reservation names are in the same name space. So the 29789reservation names should be different from the functional unit names and 29790cannot be the reserved name 'nothing'. 29791 29792 The following construction is used to describe exceptions in the 29793latency time for given instruction pair. This is so called bypasses. 29794 29795 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 29796 [GUARD]) 29797 29798 NUMBER defines when the result generated by the instructions given in 29799string OUT_INSN_NAMES will be ready for the instructions given in string 29800IN_INSN_NAMES. Each of these strings is a comma-separated list of 29801filename-style globs and they refer to the names of 29802'define_insn_reservation's. For example: 29803 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*") 29804 defines a bypass between instructions that start with 'cpu1_load_' or 29805'cpu1_store_' and those that start with 'cpu1_load_'. 29806 29807 GUARD is an optional string giving the name of a C function which 29808defines an additional guard for the bypass. The function will get the 29809two insns as parameters. If the function returns zero the bypass will 29810be ignored for this case. The additional guard is necessary to 29811recognize complicated bypasses, e.g. when the consumer is only an 29812address of insn 'store' (not a stored value). 29813 29814 If there are more one bypass with the same output and input insns, the 29815chosen bypass is the first bypass with a guard in description whose 29816guard function returns nonzero. If there is no such bypass, then bypass 29817without the guard function is chosen. 29818 29819 The following five constructions are usually used to describe VLIW 29820processors, or more precisely, to describe a placement of small 29821instructions into VLIW instruction slots. They can be used for RISC 29822processors, too. 29823 29824 (exclusion_set UNIT-NAMES UNIT-NAMES) 29825 (presence_set UNIT-NAMES PATTERNS) 29826 (final_presence_set UNIT-NAMES PATTERNS) 29827 (absence_set UNIT-NAMES PATTERNS) 29828 (final_absence_set UNIT-NAMES PATTERNS) 29829 29830 UNIT-NAMES is a string giving names of functional units separated by 29831commas. 29832 29833 PATTERNS is a string giving patterns of functional units separated by 29834comma. Currently pattern is one unit or units separated by 29835white-spaces. 29836 29837 The first construction ('exclusion_set') means that each functional 29838unit in the first string cannot be reserved simultaneously with a unit 29839whose name is in the second string and vice versa. For example, the 29840construction is useful for describing processors (e.g. some SPARC 29841processors) with a fully pipelined floating point functional unit which 29842can execute simultaneously only single floating point insns or only 29843double floating point insns. 29844 29845 The second construction ('presence_set') means that each functional 29846unit in the first string cannot be reserved unless at least one of 29847pattern of units whose names are in the second string is reserved. This 29848is an asymmetric relation. For example, it is useful for description 29849that VLIW 'slot1' is reserved after 'slot0' reservation. We could 29850describe it by the following construction 29851 29852 (presence_set "slot1" "slot0") 29853 29854 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation. 29855In this case we could write 29856 29857 (presence_set "slot1" "slot0 b0") 29858 29859 The third construction ('final_presence_set') is analogous to 29860'presence_set'. The difference between them is when checking is done. 29861When an instruction is issued in given automaton state reflecting all 29862current and planned unit reservations, the automaton state is changed. 29863The first state is a source state, the second one is a result state. 29864Checking for 'presence_set' is done on the source state reservation, 29865checking for 'final_presence_set' is done on the result reservation. 29866This construction is useful to describe a reservation which is actually 29867two subsequent reservations. For example, if we use 29868 29869 (presence_set "slot1" "slot0") 29870 29871 the following insn will be never issued (because 'slot1' requires 29872'slot0' which is absent in the source state). 29873 29874 (define_reservation "insn_and_nop" "slot0 + slot1") 29875 29876 but it can be issued if we use analogous 'final_presence_set'. 29877 29878 The forth construction ('absence_set') means that each functional unit 29879in the first string can be reserved only if each pattern of units whose 29880names are in the second string is not reserved. This is an asymmetric 29881relation (actually 'exclusion_set' is analogous to this one but it is 29882symmetric). For example it might be useful in a VLIW description to say 29883that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have 29884been reserved. This can be described as: 29885 29886 (absence_set "slot0" "slot1, slot2") 29887 29888 Or 'slot2' cannot be reserved if 'slot0' and unit 'b0' are reserved or 29889'slot1' and unit 'b1' are reserved. In this case we could write 29890 29891 (absence_set "slot2" "slot0 b0, slot1 b1") 29892 29893 All functional units mentioned in a set should belong to the same 29894automaton. 29895 29896 The last construction ('final_absence_set') is analogous to 29897'absence_set' but checking is done on the result (state) reservation. 29898See comments for 'final_presence_set'. 29899 29900 You can control the generator of the pipeline hazard recognizer with 29901the following construction. 29902 29903 (automata_option OPTIONS) 29904 29905 OPTIONS is a string giving options which affect the generated code. 29906Currently there are the following options: 29907 29908 * "no-minimization" makes no minimization of the automaton. This is 29909 only worth to do when we are debugging the description and need to 29910 look more accurately at reservations of states. 29911 29912 * "time" means printing time statistics about the generation of 29913 automata. 29914 29915 * "stats" means printing statistics about the generated automata such 29916 as the number of DFA states, NDFA states and arcs. 29917 29918 * "v" means a generation of the file describing the result automata. 29919 The file has suffix '.dfa' and can be used for the description 29920 verification and debugging. 29921 29922 * "w" means a generation of warning instead of error for non-critical 29923 errors. 29924 29925 * "no-comb-vect" prevents the automaton generator from generating two 29926 data structures and comparing them for space efficiency. Using a 29927 comb vector to represent transitions may be better, but it can be 29928 very expensive to construct. This option is useful if the build 29929 process spends an unacceptably long time in genautomata. 29930 29931 * "ndfa" makes nondeterministic finite state automata. This affects 29932 the treatment of operator '|' in the regular expressions. The 29933 usual treatment of the operator is to try the first alternative 29934 and, if the reservation is not possible, the second alternative. 29935 The nondeterministic treatment means trying all alternatives, some 29936 of them may be rejected by reservations in the subsequent insns. 29937 29938 * "collapse-ndfa" modifies the behavior of the generator when 29939 producing an automaton. An additional state transition to collapse 29940 a nondeterministic NDFA state to a deterministic DFA state is 29941 generated. It can be triggered by passing 'const0_rtx' to 29942 state_transition. In such an automaton, cycle advance transitions 29943 are available only for these collapsed states. This option is 29944 useful for ports that want to use the 'ndfa' option, but also want 29945 to use 'define_query_cpu_unit' to assign units to insns issued in a 29946 cycle. 29947 29948 * "progress" means output of a progress bar showing how many states 29949 were generated so far for automaton being processed. This is 29950 useful during debugging a DFA description. If you see too many 29951 generated states, you could interrupt the generator of the pipeline 29952 hazard recognizer and try to figure out a reason for generation of 29953 the huge automaton. 29954 29955 As an example, consider a superscalar RISC machine which can issue 29956three insns (two integer insns and one floating point insn) on the cycle 29957but can finish only two insns. To describe this, we define the 29958following functional units. 29959 29960 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 29961 (define_cpu_unit "port0, port1") 29962 29963 All simple integer insns can be executed in any integer pipeline and 29964their result is ready in two cycles. The simple integer insns are 29965issued into the first pipeline unless it is reserved, otherwise they are 29966issued into the second pipeline. Integer division and multiplication 29967insns can be executed only in the second integer pipeline and their 29968results are ready correspondingly in 9 and 4 cycles. The integer 29969division is not pipelined, i.e. the subsequent integer division insn 29970cannot be issued until the current division insn finished. Floating 29971point insns are fully pipelined and their results are ready in 3 cycles. 29972Where the result of a floating point insn is used by an integer insn, an 29973additional delay of one cycle is incurred. To describe all of this we 29974could specify 29975 29976 (define_cpu_unit "div") 29977 29978 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 29979 "(i0_pipeline | i1_pipeline), (port0 | port1)") 29980 29981 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 29982 "i1_pipeline, nothing*2, (port0 | port1)") 29983 29984 (define_insn_reservation "div" 9 (eq_attr "type" "div") 29985 "i1_pipeline, div*7, div + (port0 | port1)") 29986 29987 (define_insn_reservation "float" 3 (eq_attr "type" "float") 29988 "f_pipeline, nothing, (port0 | port1)) 29989 29990 (define_bypass 4 "float" "simple,mult,div") 29991 29992 To simplify the description we could describe the following reservation 29993 29994 (define_reservation "finish" "port0|port1") 29995 29996 and use it in all 'define_insn_reservation' as in the following 29997construction 29998 29999 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 30000 "(i0_pipeline | i1_pipeline), finish") 30001 30002 ---------- Footnotes ---------- 30003 30004 (1) However, the size of the automaton depends on processor 30005complexity. To limit this effect, machine descriptions can split 30006orthogonal parts of the machine description among several automata: but 30007then, since each of these must be stepped independently, this does cause 30008a small decrease in the algorithm's performance. 30009 30010 30011File: gccint.info, Node: Conditional Execution, Next: Define Subst, Prev: Insn Attributes, Up: Machine Desc 30012 3001317.20 Conditional Execution 30014=========================== 30015 30016A number of architectures provide for some form of conditional 30017execution, or predication. The hallmark of this feature is the ability 30018to nullify most of the instructions in the instruction set. When the 30019instruction set is large and not entirely symmetric, it can be quite 30020tedious to describe these forms directly in the '.md' file. An 30021alternative is the 'define_cond_exec' template. 30022 30023 (define_cond_exec 30024 [PREDICATE-PATTERN] 30025 "CONDITION" 30026 "OUTPUT-TEMPLATE" 30027 "OPTIONAL-INSN-ATTRIBUES") 30028 30029 PREDICATE-PATTERN is the condition that must be true for the insn to be 30030executed at runtime and should match a relational operator. One can use 30031'match_operator' to match several relational operators at once. Any 30032'match_operand' operands must have no more than one alternative. 30033 30034 CONDITION is a C expression that must be true for the generated pattern 30035to match. 30036 30037 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output 30038template (*note Output Template::), except that the '*' and '@' special 30039cases do not apply. This is only useful if the assembly text for the 30040predicate is a simple prefix to the main insn. In order to handle the 30041general case, there is a global variable 'current_insn_predicate' that 30042will contain the entire predicate if the current insn is predicated, and 30043will otherwise be 'NULL'. 30044 30045 OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets 30046appended to the insn attributes of the produced cond_exec rtx. It can 30047be used to add some distinguishing attribute to cond_exec rtxs produced 30048that way. An example usage would be to use this attribute in 30049conjunction with attributes on the main pattern to disable particular 30050alternatives under certain conditions. 30051 30052 When 'define_cond_exec' is used, an implicit reference to the 30053'predicable' instruction attribute is made. *Note Insn Attributes::. 30054This attribute must be a boolean (i.e. have exactly two elements in its 30055LIST-OF-VALUES), with the possible values being 'no' and 'yes'. The 30056default and all uses in the insns must be a simple constant, not a 30057complex expressions. It may, however, depend on the alternative, by 30058using a comma-separated list of values. If that is the case, the port 30059should also define an 'enabled' attribute (*note Disable Insn 30060Alternatives::), which should also allow only 'no' and 'yes' as its 30061values. 30062 30063 For each 'define_insn' for which the 'predicable' attribute is true, a 30064new 'define_insn' pattern will be generated that matches a predicated 30065version of the instruction. For example, 30066 30067 (define_insn "addsi" 30068 [(set (match_operand:SI 0 "register_operand" "r") 30069 (plus:SI (match_operand:SI 1 "register_operand" "r") 30070 (match_operand:SI 2 "register_operand" "r")))] 30071 "TEST1" 30072 "add %2,%1,%0") 30073 30074 (define_cond_exec 30075 [(ne (match_operand:CC 0 "register_operand" "c") 30076 (const_int 0))] 30077 "TEST2" 30078 "(%0)") 30079 30080generates a new pattern 30081 30082 (define_insn "" 30083 [(cond_exec 30084 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 30085 (set (match_operand:SI 0 "register_operand" "r") 30086 (plus:SI (match_operand:SI 1 "register_operand" "r") 30087 (match_operand:SI 2 "register_operand" "r"))))] 30088 "(TEST2) && (TEST1)" 30089 "(%3) add %2,%1,%0") 30090 30091 30092File: gccint.info, Node: Define Subst, Next: Constant Definitions, Prev: Conditional Execution, Up: Machine Desc 30093 3009417.21 RTL Templates Transformations 30095=================================== 30096 30097For some hardware architectures there are common cases when the RTL 30098templates for the instructions can be derived from the other RTL 30099templates using simple transformations. E.g., 'i386.md' contains an RTL 30100template for the ordinary 'sub' instruction-- '*subsi_1', and for the 30101'sub' instruction with subsequent zero-extension--'*subsi_1_zext'. Such 30102cases can be easily implemented by a single meta-template capable of 30103generating a modified case based on the initial one: 30104 30105 (define_subst "NAME" 30106 [INPUT-TEMPLATE] 30107 "CONDITION" 30108 [OUTPUT-TEMPLATE]) 30109 INPUT-TEMPLATE is a pattern describing the source RTL template, which 30110will be transformed. 30111 30112 CONDITION is a C expression that is conjunct with the condition from 30113the input-template to generate a condition to be used in the 30114output-template. 30115 30116 OUTPUT-TEMPLATE is a pattern that will be used in the resulting 30117template. 30118 30119 'define_subst' mechanism is tightly coupled with the notion of the 30120subst attribute (*note Subst Iterators::). The use of 'define_subst' is 30121triggered by a reference to a subst attribute in the transforming RTL 30122template. This reference initiates duplication of the source RTL 30123template and substitution of the attributes with their values. The 30124source RTL template is left unchanged, while the copy is transformed by 30125'define_subst'. This transformation can fail in the case when the 30126source RTL template is not matched against the input-template of the 30127'define_subst'. In such case the copy is deleted. 30128 30129 'define_subst' can be used only in 'define_insn' and 'define_expand', 30130it cannot be used in other expressions (e.g. in 30131'define_insn_and_split'). 30132 30133* Menu: 30134 30135* Define Subst Example:: Example of 'define_subst' work. 30136* Define Subst Pattern Matching:: Process of template comparison. 30137* Define Subst Output Template:: Generation of output template. 30138 30139 30140File: gccint.info, Node: Define Subst Example, Next: Define Subst Pattern Matching, Up: Define Subst 30141 3014217.21.1 'define_subst' Example 30143------------------------------ 30144 30145To illustrate how 'define_subst' works, let us examine a simple template 30146transformation. 30147 30148 Suppose there are two kinds of instructions: one that touches flags and 30149the other that does not. The instructions of the second type could be 30150generated with the following 'define_subst': 30151 30152 (define_subst "add_clobber_subst" 30153 [(set (match_operand:SI 0 "" "") 30154 (match_operand:SI 1 "" ""))] 30155 "" 30156 [(set (match_dup 0) 30157 (match_dup 1)) 30158 (clobber (reg:CC FLAGS_REG))]) 30159 30160 This 'define_subst' can be applied to any RTL pattern containing 'set' 30161of mode SI and generates a copy with clobber when it is applied. 30162 30163 Assume there is an RTL template for a 'max' instruction to be used in 30164'define_subst' mentioned above: 30165 30166 (define_insn "maxsi" 30167 [(set (match_operand:SI 0 "register_operand" "=r") 30168 (max:SI 30169 (match_operand:SI 1 "register_operand" "r") 30170 (match_operand:SI 2 "register_operand" "r")))] 30171 "" 30172 "max\t{%2, %1, %0|%0, %1, %2}" 30173 [...]) 30174 30175 To mark the RTL template for 'define_subst' application, 30176subst-attributes are used. They should be declared in advance: 30177 30178 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber") 30179 30180 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is 30181the name of the corresponding 'define_subst', the third argument 30182('_noclobber') is the attribute value that would be substituted into the 30183unchanged version of the source RTL template, and the last argument 30184('_clobber') is the value that would be substituted into the second, 30185transformed, version of the RTL template. 30186 30187 Once the subst-attribute has been defined, it should be used in RTL 30188templates which need to be processed by the 'define_subst'. So, the 30189original RTL template should be changed: 30190 30191 (define_insn "maxsi<add_clobber_name>" 30192 [(set (match_operand:SI 0 "register_operand" "=r") 30193 (max:SI 30194 (match_operand:SI 1 "register_operand" "r") 30195 (match_operand:SI 2 "register_operand" "r")))] 30196 "" 30197 "max\t{%2, %1, %0|%0, %1, %2}" 30198 [...]) 30199 30200 The result of the 'define_subst' usage would look like the following: 30201 30202 (define_insn "maxsi_noclobber" 30203 [(set (match_operand:SI 0 "register_operand" "=r") 30204 (max:SI 30205 (match_operand:SI 1 "register_operand" "r") 30206 (match_operand:SI 2 "register_operand" "r")))] 30207 "" 30208 "max\t{%2, %1, %0|%0, %1, %2}" 30209 [...]) 30210 (define_insn "maxsi_clobber" 30211 [(set (match_operand:SI 0 "register_operand" "=r") 30212 (max:SI 30213 (match_operand:SI 1 "register_operand" "r") 30214 (match_operand:SI 2 "register_operand" "r"))) 30215 (clobber (reg:CC FLAGS_REG))] 30216 "" 30217 "max\t{%2, %1, %0|%0, %1, %2}" 30218 [...]) 30219 30220 30221File: gccint.info, Node: Define Subst Pattern Matching, Next: Define Subst Output Template, Prev: Define Subst Example, Up: Define Subst 30222 3022317.21.2 Pattern Matching in 'define_subst' 30224------------------------------------------ 30225 30226All expressions, allowed in 'define_insn' or 'define_expand', are 30227allowed in the input-template of 'define_subst', except 'match_par_dup', 30228'match_scratch', 'match_parallel'. The meanings of expressions in the 30229input-template were changed: 30230 30231 'match_operand' matches any expression (possibly, a subtree in 30232RTL-template), if modes of the 'match_operand' and this expression are 30233the same, or mode of the 'match_operand' is 'VOIDmode', or this 30234expression is 'match_dup', 'match_op_dup'. If the expression is 30235'match_operand' too, and predicate of 'match_operand' from the input 30236pattern is not empty, then the predicates are compared. That can be 30237used for more accurate filtering of accepted RTL-templates. 30238 30239 'match_operator' matches common operators (like 'plus', 'minus'), 30240'unspec', 'unspec_volatile' operators and 'match_operator's from the 30241original pattern if the modes match and 'match_operator' from the input 30242pattern has the same number of operands as the operator from the 30243original pattern. 30244 30245 30246File: gccint.info, Node: Define Subst Output Template, Prev: Define Subst Pattern Matching, Up: Define Subst 30247 3024817.21.3 Generation of output template in 'define_subst' 30249------------------------------------------------------- 30250 30251If all necessary checks for 'define_subst' application pass, a new 30252RTL-pattern, based on the output-template, is created to replace the old 30253template. Like in input-patterns, meanings of some RTL expressions are 30254changed when they are used in output-patterns of a 'define_subst'. 30255Thus, 'match_dup' is used for copying the whole expression from the 30256original pattern, which matched corresponding 'match_operand' from the 30257input pattern. 30258 30259 'match_dup N' is used in the output template to be replaced with the 30260expression from the original pattern, which matched 'match_operand N' 30261from the input pattern. As a consequence, 'match_dup' cannot be used to 30262point to 'match_operand's from the output pattern, it should always 30263refer to a 'match_operand' from the input pattern. If a 'match_dup N' 30264occurs more than once in the output template, its first occurrence is 30265replaced with the expression from the original pattern, and the 30266subsequent expressions are replaced with 'match_dup N', i.e., a 30267reference to the first expression. 30268 30269 In the output template one can refer to the expressions from the 30270original pattern and create new ones. For instance, some operands could 30271be added by means of standard 'match_operand'. 30272 30273 After replacing 'match_dup' with some RTL-subtree from the original 30274pattern, it could happen that several 'match_operand's in the output 30275pattern have the same indexes. It is unknown, how many and what indexes 30276would be used in the expression which would replace 'match_dup', so such 30277conflicts in indexes are inevitable. To overcome this issue, 30278'match_operands' and 'match_operators', which were introduced into the 30279output pattern, are renumerated when all 'match_dup's are replaced. 30280 30281 Number of alternatives in 'match_operand's introduced into the output 30282template 'M' could differ from the number of alternatives in the 30283original pattern 'N', so in the resultant pattern there would be 'N*M' 30284alternatives. Thus, constraints from the original pattern would be 30285duplicated 'N' times, constraints from the output pattern would be 30286duplicated 'M' times, producing all possible combinations. 30287 30288 30289File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Define Subst, Up: Machine Desc 30290 3029117.22 Constant Definitions 30292========================== 30293 30294Using literal constants inside instruction patterns reduces legibility 30295and can be a maintenance problem. 30296 30297 To overcome this problem, you may use the 'define_constants' 30298expression. It contains a vector of name-value pairs. From that point 30299on, wherever any of the names appears in the MD file, it is as if the 30300corresponding value had been written instead. You may use 30301'define_constants' multiple times; each appearance adds more constants 30302to the table. It is an error to redefine a constant with a different 30303value. 30304 30305 To come back to the a29k load multiple example, instead of 30306 30307 (define_insn "" 30308 [(match_parallel 0 "load_multiple_operation" 30309 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 30310 (match_operand:SI 2 "memory_operand" "m")) 30311 (use (reg:SI 179)) 30312 (clobber (reg:SI 179))])] 30313 "" 30314 "loadm 0,0,%1,%2") 30315 30316 You could write: 30317 30318 (define_constants [ 30319 (R_BP 177) 30320 (R_FC 178) 30321 (R_CR 179) 30322 (R_Q 180) 30323 ]) 30324 30325 (define_insn "" 30326 [(match_parallel 0 "load_multiple_operation" 30327 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 30328 (match_operand:SI 2 "memory_operand" "m")) 30329 (use (reg:SI R_CR)) 30330 (clobber (reg:SI R_CR))])] 30331 "" 30332 "loadm 0,0,%1,%2") 30333 30334 The constants that are defined with a define_constant are also output 30335in the insn-codes.h header file as #defines. 30336 30337 You can also use the machine description file to define enumerations. 30338Like the constants defined by 'define_constant', these enumerations are 30339visible to both the machine description file and the main C code. 30340 30341 The syntax is as follows: 30342 30343 (define_c_enum "NAME" [ 30344 VALUE0 30345 VALUE1 30346 ... 30347 VALUEN 30348 ]) 30349 30350 This definition causes the equivalent of the following C code to appear 30351in 'insn-constants.h': 30352 30353 enum NAME { 30354 VALUE0 = 0, 30355 VALUE1 = 1, 30356 ... 30357 VALUEN = N 30358 }; 30359 #define NUM_CNAME_VALUES (N + 1) 30360 30361 where CNAME is the capitalized form of NAME. It also makes each VALUEI 30362available in the machine description file, just as if it had been 30363declared with: 30364 30365 (define_constants [(VALUEI I)]) 30366 30367 Each VALUEI is usually an upper-case identifier and usually begins with 30368CNAME. 30369 30370 You can split the enumeration definition into as many statements as you 30371like. The above example is directly equivalent to: 30372 30373 (define_c_enum "NAME" [VALUE0]) 30374 (define_c_enum "NAME" [VALUE1]) 30375 ... 30376 (define_c_enum "NAME" [VALUEN]) 30377 30378 Splitting the enumeration helps to improve the modularity of each 30379individual '.md' file. For example, if a port defines its 30380synchronization instructions in a separate 'sync.md' file, it is 30381convenient to define all synchronization-specific enumeration values in 30382'sync.md' rather than in the main '.md' file. 30383 30384 Some enumeration names have special significance to GCC: 30385 30386'unspecv' 30387 If an enumeration called 'unspecv' is defined, GCC will use it when 30388 printing out 'unspec_volatile' expressions. For example: 30389 30390 (define_c_enum "unspecv" [ 30391 UNSPECV_BLOCKAGE 30392 ]) 30393 30394 causes GCC to print '(unspec_volatile ... 0)' as: 30395 30396 (unspec_volatile ... UNSPECV_BLOCKAGE) 30397 30398'unspec' 30399 If an enumeration called 'unspec' is defined, GCC will use it when 30400 printing out 'unspec' expressions. GCC will also use it when 30401 printing out 'unspec_volatile' expressions unless an 'unspecv' 30402 enumeration is also defined. You can therefore decide whether to 30403 keep separate enumerations for volatile and non-volatile 30404 expressions or whether to use the same enumeration for both. 30405 30406 Another way of defining an enumeration is to use 'define_enum': 30407 30408 (define_enum "NAME" [ 30409 VALUE0 30410 VALUE1 30411 ... 30412 VALUEN 30413 ]) 30414 30415 This directive implies: 30416 30417 (define_c_enum "NAME" [ 30418 CNAME_CVALUE0 30419 CNAME_CVALUE1 30420 ... 30421 CNAME_CVALUEN 30422 ]) 30423 30424 where CVALUEI is the capitalized form of VALUEI. However, unlike 30425'define_c_enum', the enumerations defined by 'define_enum' can be used 30426in attribute specifications (*note define_enum_attr::). 30427 30428 30429File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 30430 3043117.23 Iterators 30432=============== 30433 30434Ports often need to define similar patterns for more than one machine 30435mode or for more than one rtx code. GCC provides some simple iterator 30436facilities to make this process easier. 30437 30438* Menu: 30439 30440* Mode Iterators:: Generating variations of patterns for different modes. 30441* Code Iterators:: Doing the same for codes. 30442* Int Iterators:: Doing the same for integers. 30443* Subst Iterators:: Generating variations of patterns for define_subst. 30444* Parameterized Names:: Specifying iterator values in C++ code. 30445 30446 30447File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 30448 3044917.23.1 Mode Iterators 30450---------------------- 30451 30452Ports often need to define similar patterns for two or more different 30453modes. For example: 30454 30455 * If a processor has hardware support for both single and double 30456 floating-point arithmetic, the 'SFmode' patterns tend to be very 30457 similar to the 'DFmode' ones. 30458 30459 * If a port uses 'SImode' pointers in one configuration and 'DImode' 30460 pointers in another, it will usually have very similar 'SImode' and 30461 'DImode' patterns for manipulating pointers. 30462 30463 Mode iterators allow several patterns to be instantiated from one '.md' 30464file template. They can be used with any type of rtx-based construct, 30465such as a 'define_insn', 'define_split', or 'define_peephole2'. 30466 30467* Menu: 30468 30469* Defining Mode Iterators:: Defining a new mode iterator. 30470* Substitutions:: Combining mode iterators with substitutions 30471* Examples:: Examples 30472 30473 30474File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 30475 3047617.23.1.1 Defining Mode Iterators 30477................................. 30478 30479The syntax for defining a mode iterator is: 30480 30481 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 30482 30483 This allows subsequent '.md' file constructs to use the mode suffix 30484':NAME'. Every construct that does so will be expanded N times, once 30485with every use of ':NAME' replaced by ':MODE1', once with every use 30486replaced by ':MODE2', and so on. In the expansion for a particular 30487MODEI, every C condition will also require that CONDI be true. 30488 30489 For example: 30490 30491 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 30492 30493 defines a new mode suffix ':P'. Every construct that uses ':P' will be 30494expanded twice, once with every ':P' replaced by ':SI' and once with 30495every ':P' replaced by ':DI'. The ':SI' version will only apply if 30496'Pmode == SImode' and the ':DI' version will only apply if 'Pmode == 30497DImode'. 30498 30499 As with other '.md' conditions, an empty string is treated as "always 30500true". '(MODE "")' can also be abbreviated to 'MODE'. For example: 30501 30502 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 30503 30504 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that 30505the ':SI' expansion has no such constraint. 30506 30507 Iterators are applied in the order they are defined. This can be 30508significant if two iterators are used in a construct that requires 30509substitutions. *Note Substitutions::. 30510 30511 30512File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 30513 3051417.23.1.2 Substitution in Mode Iterators 30515........................................ 30516 30517If an '.md' file construct uses mode iterators, each version of the 30518construct will often need slightly different strings or modes. For 30519example: 30520 30521 * When a 'define_expand' defines several 'addM3' patterns (*note 30522 Standard Names::), each expander will need to use the appropriate 30523 mode name for M. 30524 30525 * When a 'define_insn' defines several instruction patterns, each 30526 instruction will often use a different assembler mnemonic. 30527 30528 * When a 'define_insn' requires operands with different modes, using 30529 an iterator for one of the operand modes usually requires a 30530 specific mode for the other operand(s). 30531 30532 GCC supports such variations through a system of "mode attributes". 30533There are two standard attributes: 'mode', which is the name of the mode 30534in lower case, and 'MODE', which is the same thing in upper case. You 30535can define other attributes using: 30536 30537 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 30538 30539 where NAME is the name of the attribute and VALUEI is the value 30540associated with MODEI. 30541 30542 When GCC replaces some :ITERATOR with :MODE, it will scan each string 30543and mode in the pattern for sequences of the form '<ITERATOR:ATTR>', 30544where ATTR is the name of a mode attribute. If the attribute is defined 30545for MODE, the whole '<...>' sequence will be replaced by the appropriate 30546attribute value. 30547 30548 For example, suppose an '.md' file has: 30549 30550 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 30551 (define_mode_attr load [(SI "lw") (DI "ld")]) 30552 30553 If one of the patterns that uses ':P' contains the string 30554'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use 30555'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'. 30556 30557 Here is an example of using an attribute for a mode: 30558 30559 (define_mode_iterator LONG [SI DI]) 30560 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 30561 (define_insn ... 30562 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 30563 30564 The 'ITERATOR:' prefix may be omitted, in which case the substitution 30565will be attempted for every iterator expansion. 30566 30567 30568File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 30569 3057017.23.1.3 Mode Iterator Examples 30571................................ 30572 30573Here is an example from the MIPS port. It defines the following modes 30574and attributes (among others): 30575 30576 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 30577 (define_mode_attr d [(SI "") (DI "d")]) 30578 30579 and uses the following template to define both 'subsi3' and 'subdi3': 30580 30581 (define_insn "sub<mode>3" 30582 [(set (match_operand:GPR 0 "register_operand" "=d") 30583 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 30584 (match_operand:GPR 2 "register_operand" "d")))] 30585 "" 30586 "<d>subu\t%0,%1,%2" 30587 [(set_attr "type" "arith") 30588 (set_attr "mode" "<MODE>")]) 30589 30590 This is exactly equivalent to: 30591 30592 (define_insn "subsi3" 30593 [(set (match_operand:SI 0 "register_operand" "=d") 30594 (minus:SI (match_operand:SI 1 "register_operand" "d") 30595 (match_operand:SI 2 "register_operand" "d")))] 30596 "" 30597 "subu\t%0,%1,%2" 30598 [(set_attr "type" "arith") 30599 (set_attr "mode" "SI")]) 30600 30601 (define_insn "subdi3" 30602 [(set (match_operand:DI 0 "register_operand" "=d") 30603 (minus:DI (match_operand:DI 1 "register_operand" "d") 30604 (match_operand:DI 2 "register_operand" "d")))] 30605 "" 30606 "dsubu\t%0,%1,%2" 30607 [(set_attr "type" "arith") 30608 (set_attr "mode" "DI")]) 30609 30610 30611File: gccint.info, Node: Code Iterators, Next: Int Iterators, Prev: Mode Iterators, Up: Iterators 30612 3061317.23.2 Code Iterators 30614---------------------- 30615 30616Code iterators operate in a similar way to mode iterators. *Note Mode 30617Iterators::. 30618 30619 The construct: 30620 30621 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 30622 30623 defines a pseudo rtx code NAME that can be instantiated as CODEI if 30624condition CONDI is true. Each CODEI must have the same rtx format. 30625*Note RTL Classes::. 30626 30627 As with mode iterators, each pattern that uses NAME will be expanded N 30628times, once with all uses of NAME replaced by CODE1, once with all uses 30629replaced by CODE2, and so on. *Note Defining Mode Iterators::. 30630 30631 It is possible to define attributes for codes as well as for modes. 30632There are two standard code attributes: 'code', the name of the code in 30633lower case, and 'CODE', the name of the code in upper case. Other 30634attributes are defined using: 30635 30636 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 30637 30638 Instruction patterns can use code attributes as rtx codes, which can be 30639useful if two sets of codes act in tandem. For example, the following 30640'define_insn' defines two patterns, one calculating a signed absolute 30641difference and another calculating an unsigned absolute difference: 30642 30643 (define_code_iterator any_max [smax umax]) 30644 (define_code_attr paired_min [(smax "smin") (umax "umin")]) 30645 (define_insn ... 30646 [(set (match_operand:SI 0 ...) 30647 (minus:SI (any_max:SI (match_operand:SI 1 ...) 30648 (match_operand:SI 2 ...)) 30649 (<paired_min>:SI (match_dup 1) (match_dup 2))))] 30650 ...) 30651 30652 The signed version of the instruction uses 'smax' and 'smin' while the 30653unsigned version uses 'umax' and 'umin'. There are no versions that 30654pair 'smax' with 'umin' or 'umax' with 'smin'. 30655 30656 Here's an example of code iterators in action, taken from the MIPS 30657port: 30658 30659 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 30660 eq ne gt ge lt le gtu geu ltu leu]) 30661 30662 (define_expand "b<code>" 30663 [(set (pc) 30664 (if_then_else (any_cond:CC (cc0) 30665 (const_int 0)) 30666 (label_ref (match_operand 0 "")) 30667 (pc)))] 30668 "" 30669 { 30670 gen_conditional_branch (operands, <CODE>); 30671 DONE; 30672 }) 30673 30674 This is equivalent to: 30675 30676 (define_expand "bunordered" 30677 [(set (pc) 30678 (if_then_else (unordered:CC (cc0) 30679 (const_int 0)) 30680 (label_ref (match_operand 0 "")) 30681 (pc)))] 30682 "" 30683 { 30684 gen_conditional_branch (operands, UNORDERED); 30685 DONE; 30686 }) 30687 30688 (define_expand "bordered" 30689 [(set (pc) 30690 (if_then_else (ordered:CC (cc0) 30691 (const_int 0)) 30692 (label_ref (match_operand 0 "")) 30693 (pc)))] 30694 "" 30695 { 30696 gen_conditional_branch (operands, ORDERED); 30697 DONE; 30698 }) 30699 30700 ... 30701 30702 30703File: gccint.info, Node: Int Iterators, Next: Subst Iterators, Prev: Code Iterators, Up: Iterators 30704 3070517.23.3 Int Iterators 30706--------------------- 30707 30708Int iterators operate in a similar way to code iterators. *Note Code 30709Iterators::. 30710 30711 The construct: 30712 30713 (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")]) 30714 30715 defines a pseudo integer constant NAME that can be instantiated as INTI 30716if condition CONDI is true. Each INT must have the same rtx format. 30717*Note RTL Classes::. Int iterators can appear in only those rtx fields 30718that have 'i' as the specifier. This means that each INT has to be a 30719constant defined using define_constant or define_c_enum. 30720 30721 As with mode and code iterators, each pattern that uses NAME will be 30722expanded N times, once with all uses of NAME replaced by INT1, once with 30723all uses replaced by INT2, and so on. *Note Defining Mode Iterators::. 30724 30725 It is possible to define attributes for ints as well as for codes and 30726modes. Attributes are defined using: 30727 30728 (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")]) 30729 30730 Here's an example of int iterators in action, taken from the ARM port: 30731 30732 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 30733 30734 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 30735 30736 (define_insn "neon_vq<absneg><mode>" 30737 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 30738 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 30739 (match_operand:SI 2 "immediate_operand" "i")] 30740 QABSNEG))] 30741 "TARGET_NEON" 30742 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 30743 [(set_attr "type" "neon_vqneg_vqabs")] 30744 ) 30745 30746 This is equivalent to: 30747 30748 (define_insn "neon_vqabs<mode>" 30749 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 30750 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 30751 (match_operand:SI 2 "immediate_operand" "i")] 30752 UNSPEC_VQABS))] 30753 "TARGET_NEON" 30754 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 30755 [(set_attr "type" "neon_vqneg_vqabs")] 30756 ) 30757 30758 (define_insn "neon_vqneg<mode>" 30759 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 30760 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 30761 (match_operand:SI 2 "immediate_operand" "i")] 30762 UNSPEC_VQNEG))] 30763 "TARGET_NEON" 30764 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 30765 [(set_attr "type" "neon_vqneg_vqabs")] 30766 ) 30767 30768 30769File: gccint.info, Node: Subst Iterators, Next: Parameterized Names, Prev: Int Iterators, Up: Iterators 30770 3077117.23.4 Subst Iterators 30772----------------------- 30773 30774Subst iterators are special type of iterators with the following 30775restrictions: they could not be declared explicitly, they always have 30776only two values, and they do not have explicit dedicated name. 30777Subst-iterators are triggered only when corresponding subst-attribute is 30778used in RTL-pattern. 30779 30780 Subst iterators transform templates in the following way: the templates 30781are duplicated, the subst-attributes in these templates are replaced 30782with the corresponding values, and a new attribute is implicitly added 30783to the given 'define_insn'/'define_expand'. The name of the added 30784attribute matches the name of 'define_subst'. Such attributes are 30785declared implicitly, and it is not allowed to have a 'define_attr' named 30786as a 'define_subst'. 30787 30788 Each subst iterator is linked to a 'define_subst'. It is declared 30789implicitly by the first appearance of the corresponding 30790'define_subst_attr', and it is not allowed to define it explicitly. 30791 30792 Declarations of subst-attributes have the following syntax: 30793 30794 (define_subst_attr "NAME" 30795 "SUBST-NAME" 30796 "NO-SUBST-VALUE" 30797 "SUBST-APPLIED-VALUE") 30798 30799 NAME is a string with which the given subst-attribute could be referred 30800to. 30801 30802 SUBST-NAME shows which 'define_subst' should be applied to an 30803RTL-template if the given subst-attribute is present in the 30804RTL-template. 30805 30806 NO-SUBST-VALUE is a value with which subst-attribute would be replaced 30807in the first copy of the original RTL-template. 30808 30809 SUBST-APPLIED-VALUE is a value with which subst-attribute would be 30810replaced in the second copy of the original RTL-template. 30811 30812 30813File: gccint.info, Node: Parameterized Names, Prev: Subst Iterators, Up: Iterators 30814 3081517.23.5 Parameterized Names 30816--------------------------- 30817 30818Ports sometimes need to apply iterators using C++ code, in order to get 30819the code or RTL pattern for a specific instruction. For example, 30820suppose we have the 'neon_vq<absneg><mode>' pattern given above: 30821 30822 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 30823 30824 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 30825 30826 (define_insn "neon_vq<absneg><mode>" 30827 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 30828 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 30829 (match_operand:SI 2 "immediate_operand" "i")] 30830 QABSNEG))] 30831 ... 30832 ) 30833 30834 A port might need to generate this pattern for a variable 'QABSNEG' 30835value and a variable 'VDQIW' mode. There are two ways of doing this. 30836The first is to build the rtx for the pattern directly from C++ code; 30837this is a valid technique and avoids any risk of combinatorial 30838explosion. The second is to prefix the instruction name with the 30839special character '@', which tells GCC to generate the four additional 30840functions below. In each case, NAME is the name of the instruction 30841without the leading '@' character, without the '<...>' placeholders, and 30842with any underscore before a '<...>' placeholder removed if keeping it 30843would lead to a double or trailing underscore. 30844 30845'insn_code maybe_code_for_NAME (I1, I2, ...)' 30846 See whether replacing the first '<...>' placeholder with iterator 30847 value I1, the second with iterator value I2, and so on, gives a 30848 valid instruction. Return its code if so, otherwise return 30849 'CODE_FOR_nothing'. 30850 30851'insn_code code_for_NAME (I1, I2, ...)' 30852 Same, but abort the compiler if the requested instruction does not 30853 exist. 30854 30855'rtx maybe_gen_NAME (I1, I2, ..., OP0, OP1, ...)' 30856 Check for a valid instruction in the same way as 30857 'maybe_code_for_NAME'. If the instruction exists, generate an 30858 instance of it using the operand values given by OP0, OP1, and so 30859 on, otherwise return null. 30860 30861'rtx gen_NAME (I1, I2, ..., OP0, OP1, ...)' 30862 Same, but abort the compiler if the requested instruction does not 30863 exist, or if the instruction generator invoked the 'FAIL' macro. 30864 30865 For example, changing the pattern above to: 30866 30867 (define_insn "@neon_vq<absneg><mode>" 30868 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 30869 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 30870 (match_operand:SI 2 "immediate_operand" "i")] 30871 QABSNEG))] 30872 ... 30873 ) 30874 30875 would define the same patterns as before, but in addition would 30876generate the four functions below: 30877 30878 insn_code maybe_code_for_neon_vq (int, machine_mode); 30879 insn_code code_for_neon_vq (int, machine_mode); 30880 rtx maybe_gen_neon_vq (int, machine_mode, rtx, rtx, rtx); 30881 rtx gen_neon_vq (int, machine_mode, rtx, rtx, rtx); 30882 30883 Calling 'code_for_neon_vq (UNSPEC_VQABS, V8QImode)' would then give 30884'CODE_FOR_neon_vqabsv8qi'. 30885 30886 It is possible to have multiple '@' patterns with the same name and 30887same types of iterator. For example: 30888 30889 (define_insn "@some_arithmetic_op<mode>" 30890 [(set (match_operand:INTEGER_MODES 0 "register_operand") ...)] 30891 ... 30892 ) 30893 30894 (define_insn "@some_arithmetic_op<mode>" 30895 [(set (match_operand:FLOAT_MODES 0 "register_operand") ...)] 30896 ... 30897 ) 30898 30899 would produce a single set of functions that handles both 30900'INTEGER_MODES' and 'FLOAT_MODES'. 30901 30902 It is also possible for these '@' patterns to have different numbers of 30903operands from each other. For example, patterns with a binary rtl code 30904might take three operands (one output and two inputs) while patterns 30905with a ternary rtl code might take four operands (one output and three 30906inputs). This combination would produce separate 'maybe_gen_NAME' and 30907'gen_NAME' functions for each operand count, but it would still produce 30908a single 'maybe_code_for_NAME' and a single 'code_for_NAME'. 30909 30910 30911File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 30912 3091318 Target Description Macros and Functions 30914****************************************** 30915 30916In addition to the file 'MACHINE.md', a machine description includes a C 30917header file conventionally given the name 'MACHINE.h' and a C source 30918file named 'MACHINE.c'. The header file defines numerous macros that 30919convey the information about the target machine that does not fit into 30920the scheme of the '.md' file. The file 'tm.h' should be a link to 30921'MACHINE.h'. The header file 'config.h' includes 'tm.h' and most 30922compiler source files include 'config.h'. The source file defines a 30923variable 'targetm', which is a structure containing pointers to 30924functions and data relating to the target machine. 'MACHINE.c' should 30925also contain their definitions, if they are not defined elsewhere in 30926GCC, and other functions called through the macros defined in the '.h' 30927file. 30928 30929* Menu: 30930 30931* Target Structure:: The 'targetm' variable. 30932* Driver:: Controlling how the driver runs the compilation passes. 30933* Run-time Target:: Defining '-m' options like '-m68000' and '-m68020'. 30934* Per-Function Data:: Defining data structures for per-function information. 30935* Storage Layout:: Defining sizes and alignments of data. 30936* Type Layout:: Defining sizes and properties of basic user data types. 30937* Registers:: Naming and describing the hardware registers. 30938* Register Classes:: Defining the classes of hardware registers. 30939* Stack and Calling:: Defining which way the stack grows and by how much. 30940* Varargs:: Defining the varargs macros. 30941* Trampolines:: Code set up at run time to enter a nested function. 30942* Library Calls:: Controlling how library routines are implicitly called. 30943* Addressing Modes:: Defining addressing modes valid for memory operands. 30944* Anchored Addresses:: Defining how '-fsection-anchors' should work. 30945* Condition Code:: Defining how insns update the condition code. 30946* Costs:: Defining relative costs of different operations. 30947* Scheduling:: Adjusting the behavior of the instruction scheduler. 30948* Sections:: Dividing storage into text, data, and other sections. 30949* PIC:: Macros for position independent code. 30950* Assembler Format:: Defining how to write insns and pseudo-ops to output. 30951* Debugging Info:: Defining the format of debugging output. 30952* Floating Point:: Handling floating point for cross-compilers. 30953* Mode Switching:: Insertion of mode-switching instructions. 30954* Target Attributes:: Defining target-specific uses of '__attribute__'. 30955* Emulated TLS:: Emulated TLS support. 30956* MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 30957* PCH Target:: Validity checking for precompiled headers. 30958* C++ ABI:: Controlling C++ ABI changes. 30959* D Language and ABI:: Controlling D ABI changes. 30960* Named Address Spaces:: Adding support for named address spaces 30961* Misc:: Everything else. 30962 30963 30964File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 30965 3096618.1 The Global 'targetm' Variable 30967================================== 30968 30969 -- Variable: struct gcc_target targetm 30970 The target '.c' file must define the global 'targetm' variable 30971 which contains pointers to functions and data relating to the 30972 target machine. The variable is declared in 'target.h'; 30973 'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used 30974 to initialize the variable, and macros for the default initializers 30975 for elements of the structure. The '.c' file should override those 30976 macros for which the default definition is inappropriate. For 30977 example: 30978 #include "target.h" 30979 #include "target-def.h" 30980 30981 /* Initialize the GCC target structure. */ 30982 30983 #undef TARGET_COMP_TYPE_ATTRIBUTES 30984 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 30985 30986 struct gcc_target targetm = TARGET_INITIALIZER; 30987 30988 Where a macro should be defined in the '.c' file in this manner to form 30989part of the 'targetm' structure, it is documented below as a "Target 30990Hook" with a prototype. Many macros will change in future from being 30991defined in the '.h' file to being part of the 'targetm' structure. 30992 30993 Similarly, there is a 'targetcm' variable for hooks that are specific 30994to front ends for C-family languages, documented as "C Target Hook". 30995This is declared in 'c-family/c-target.h', the initializer 30996'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'. If targets 30997initialize 'targetcm' themselves, they should set 30998'target_has_targetcm=yes' in 'config.gcc'; otherwise a default 30999definition is used. 31000 31001 Similarly, there is a 'targetm_common' variable for hooks that are 31002shared between the compiler driver and the compilers proper, documented 31003as "Common Target Hook". This is declared in 'common/common-target.h', 31004the initializer 'TARGETM_COMMON_INITIALIZER' in 31005'common/common-target-def.h'. If targets initialize 'targetm_common' 31006themselves, they should set 'target_has_targetm_common=yes' in 31007'config.gcc'; otherwise a default definition is used. 31008 31009 Similarly, there is a 'targetdm' variable for hooks that are specific 31010to the D language front end, documented as "D Target Hook". This is 31011declared in 'd/d-target.h', the initializer 'TARGETDM_INITIALIZER' in 31012'd/d-target-def.h'. If targets initialize 'targetdm' themselves, they 31013should set 'target_has_targetdm=yes' in 'config.gcc'; otherwise a 31014default definition is used. 31015 31016 31017File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 31018 3101918.2 Controlling the Compilation Driver, 'gcc' 31020============================================== 31021 31022You can control the compilation driver. 31023 31024 -- Macro: DRIVER_SELF_SPECS 31025 A list of specs for the driver itself. It should be a suitable 31026 initializer for an array of strings, with no surrounding braces. 31027 31028 The driver applies these specs to its own command line between 31029 loading default 'specs' files (but not command-line specified ones) 31030 and choosing the multilib directory or running any subcommands. It 31031 applies them in the order given, so each spec can depend on the 31032 options added by earlier ones. It is also possible to remove 31033 options using '%<OPTION' in the usual way. 31034 31035 This macro can be useful when a port has several interdependent 31036 target options. It provides a way of standardizing the command 31037 line so that the other specs are easier to write. 31038 31039 Do not define this macro if it does not need to do anything. 31040 31041 -- Macro: OPTION_DEFAULT_SPECS 31042 A list of specs used to support configure-time default options 31043 (i.e. '--with' options) in the driver. It should be a suitable 31044 initializer for an array of structures, each containing two 31045 strings, without the outermost pair of surrounding braces. 31046 31047 The first item in the pair is the name of the default. This must 31048 match the code in 'config.gcc' for the target. The second item is 31049 a spec to apply if a default with this name was specified. The 31050 string '%(VALUE)' in the spec will be replaced by the value of the 31051 default everywhere it occurs. 31052 31053 The driver will apply these specs to its own command line between 31054 loading default 'specs' files and processing 'DRIVER_SELF_SPECS', 31055 using the same mechanism as 'DRIVER_SELF_SPECS'. 31056 31057 Do not define this macro if it does not need to do anything. 31058 31059 -- Macro: CPP_SPEC 31060 A C string constant that tells the GCC driver program options to 31061 pass to CPP. It can also specify how to translate options you give 31062 to GCC into options for GCC to pass to the CPP. 31063 31064 Do not define this macro if it does not need to do anything. 31065 31066 -- Macro: CPLUSPLUS_CPP_SPEC 31067 This macro is just like 'CPP_SPEC', but is used for C++, rather 31068 than C. If you do not define this macro, then the value of 31069 'CPP_SPEC' (if any) will be used instead. 31070 31071 -- Macro: CC1_SPEC 31072 A C string constant that tells the GCC driver program options to 31073 pass to 'cc1', 'cc1plus', 'f771', and the other language front 31074 ends. It can also specify how to translate options you give to GCC 31075 into options for GCC to pass to front ends. 31076 31077 Do not define this macro if it does not need to do anything. 31078 31079 -- Macro: CC1PLUS_SPEC 31080 A C string constant that tells the GCC driver program options to 31081 pass to 'cc1plus'. It can also specify how to translate options 31082 you give to GCC into options for GCC to pass to the 'cc1plus'. 31083 31084 Do not define this macro if it does not need to do anything. Note 31085 that everything defined in CC1_SPEC is already passed to 'cc1plus' 31086 so there is no need to duplicate the contents of CC1_SPEC in 31087 CC1PLUS_SPEC. 31088 31089 -- Macro: ASM_SPEC 31090 A C string constant that tells the GCC driver program options to 31091 pass to the assembler. It can also specify how to translate 31092 options you give to GCC into options for GCC to pass to the 31093 assembler. See the file 'sun3.h' for an example of this. 31094 31095 Do not define this macro if it does not need to do anything. 31096 31097 -- Macro: ASM_FINAL_SPEC 31098 A C string constant that tells the GCC driver program how to run 31099 any programs which cleanup after the normal assembler. Normally, 31100 this is not needed. See the file 'mips.h' for an example of this. 31101 31102 Do not define this macro if it does not need to do anything. 31103 31104 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 31105 Define this macro, with no value, if the driver should give the 31106 assembler an argument consisting of a single dash, '-', to instruct 31107 it to read from its standard input (which will be a pipe connected 31108 to the output of the compiler proper). This argument is given 31109 after any '-o' option specifying the name of the output file. 31110 31111 If you do not define this macro, the assembler is assumed to read 31112 its standard input if given no non-option arguments. If your 31113 assembler cannot read standard input at all, use a '%{pipe:%e}' 31114 construct; see 'mips.h' for instance. 31115 31116 -- Macro: LINK_SPEC 31117 A C string constant that tells the GCC driver program options to 31118 pass to the linker. It can also specify how to translate options 31119 you give to GCC into options for GCC to pass to the linker. 31120 31121 Do not define this macro if it does not need to do anything. 31122 31123 -- Macro: LIB_SPEC 31124 Another C string constant used much like 'LINK_SPEC'. The 31125 difference between the two is that 'LIB_SPEC' is used at the end of 31126 the command given to the linker. 31127 31128 If this macro is not defined, a default is provided that loads the 31129 standard C library from the usual place. See 'gcc.c'. 31130 31131 -- Macro: LIBGCC_SPEC 31132 Another C string constant that tells the GCC driver program how and 31133 when to place a reference to 'libgcc.a' into the linker command 31134 line. This constant is placed both before and after the value of 31135 'LIB_SPEC'. 31136 31137 If this macro is not defined, the GCC driver provides a default 31138 that passes the string '-lgcc' to the linker. 31139 31140 -- Macro: REAL_LIBGCC_SPEC 31141 By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC' 31142 is not directly used by the driver program but is instead modified 31143 to refer to different versions of 'libgcc.a' depending on the 31144 values of the command line flags '-static', '-shared', 31145 '-static-libgcc', and '-shared-libgcc'. On targets where these 31146 modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead. 31147 'REAL_LIBGCC_SPEC' tells the driver how to place a reference to 31148 'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is 31149 used unmodified. 31150 31151 -- Macro: USE_LD_AS_NEEDED 31152 A macro that controls the modifications to 'LIBGCC_SPEC' mentioned 31153 in 'REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 31154 uses '--as-needed' or equivalent options and the shared 'libgcc' in 31155 place of the static exception handler library, when linking without 31156 any of '-static', '-static-libgcc', or '-shared-libgcc'. 31157 31158 -- Macro: LINK_EH_SPEC 31159 If defined, this C string constant is added to 'LINK_SPEC'. When 31160 'USE_LD_AS_NEEDED' is zero or undefined, it also affects the 31161 modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'. 31162 31163 -- Macro: STARTFILE_SPEC 31164 Another C string constant used much like 'LINK_SPEC'. The 31165 difference between the two is that 'STARTFILE_SPEC' is used at the 31166 very beginning of the command given to the linker. 31167 31168 If this macro is not defined, a default is provided that loads the 31169 standard C startup file from the usual place. See 'gcc.c'. 31170 31171 -- Macro: ENDFILE_SPEC 31172 Another C string constant used much like 'LINK_SPEC'. The 31173 difference between the two is that 'ENDFILE_SPEC' is used at the 31174 very end of the command given to the linker. 31175 31176 Do not define this macro if it does not need to do anything. 31177 31178 -- Macro: THREAD_MODEL_SPEC 31179 GCC '-v' will print the thread model GCC was configured to use. 31180 However, this doesn't work on platforms that are multilibbed on 31181 thread models, such as AIX 4.3. On such platforms, define 31182 'THREAD_MODEL_SPEC' such that it evaluates to a string without 31183 blanks that names one of the recognized thread models. '%*', the 31184 default value of this macro, will expand to the value of 31185 'thread_file' set in 'config.gcc'. 31186 31187 -- Macro: SYSROOT_SUFFIX_SPEC 31188 Define this macro to add a suffix to the target sysroot when GCC is 31189 configured with a sysroot. This will cause GCC to search for 31190 usr/lib, et al, within sysroot+suffix. 31191 31192 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 31193 Define this macro to add a headers_suffix to the target sysroot 31194 when GCC is configured with a sysroot. This will cause GCC to pass 31195 the updated sysroot+headers_suffix to CPP, causing it to search for 31196 usr/include, et al, within sysroot+headers_suffix. 31197 31198 -- Macro: EXTRA_SPECS 31199 Define this macro to provide additional specifications to put in 31200 the 'specs' file that can be used in various specifications like 31201 'CC1_SPEC'. 31202 31203 The definition should be an initializer for an array of structures, 31204 containing a string constant, that defines the specification name, 31205 and a string constant that provides the specification. 31206 31207 Do not define this macro if it does not need to do anything. 31208 31209 'EXTRA_SPECS' is useful when an architecture contains several 31210 related targets, which have various '..._SPECS' which are similar 31211 to each other, and the maintainer would like one central place to 31212 keep these definitions. 31213 31214 For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to 31215 define either '_CALL_SYSV' when the System V calling sequence is 31216 used or '_CALL_AIX' when the older AIX-based calling sequence is 31217 used. 31218 31219 The 'config/rs6000/rs6000.h' target file defines: 31220 31221 #define EXTRA_SPECS \ 31222 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 31223 31224 #define CPP_SYS_DEFAULT "" 31225 31226 The 'config/rs6000/sysv.h' target file defines: 31227 #undef CPP_SPEC 31228 #define CPP_SPEC \ 31229 "%{posix: -D_POSIX_SOURCE } \ 31230 %{mcall-sysv: -D_CALL_SYSV } \ 31231 %{!mcall-sysv: %(cpp_sysv_default) } \ 31232 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 31233 31234 #undef CPP_SYSV_DEFAULT 31235 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 31236 31237 while the 'config/rs6000/eabiaix.h' target file defines 31238 'CPP_SYSV_DEFAULT' as: 31239 31240 #undef CPP_SYSV_DEFAULT 31241 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 31242 31243 -- Macro: LINK_LIBGCC_SPECIAL_1 31244 Define this macro if the driver program should find the library 31245 'libgcc.a'. If you do not define this macro, the driver program 31246 will pass the argument '-lgcc' to tell the linker to do the search. 31247 31248 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 31249 The sequence in which libgcc and libc are specified to the linker. 31250 By default this is '%G %L %G'. 31251 31252 -- Macro: POST_LINK_SPEC 31253 Define this macro to add additional steps to be executed after 31254 linker. The default value of this macro is empty string. 31255 31256 -- Macro: LINK_COMMAND_SPEC 31257 A C string constant giving the complete command line need to 31258 execute the linker. When you do this, you will need to update your 31259 port each time a change is made to the link command line within 31260 'gcc.c'. Therefore, define this macro only if you need to 31261 completely redefine the command line for invoking the linker and 31262 there is no other way to accomplish the effect you need. 31263 Overriding this macro may be avoidable by overriding 31264 'LINK_GCC_C_SEQUENCE_SPEC' instead. 31265 31266 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT 31267 True if '..' components should always be removed from directory 31268 names computed relative to GCC's internal directories, false 31269 (default) if such components should be preserved and directory 31270 names containing them passed to other tools such as the linker. 31271 31272 -- Macro: MULTILIB_DEFAULTS 31273 Define this macro as a C expression for the initializer of an array 31274 of string to tell the driver program which options are defaults for 31275 this target and thus do not need to be handled specially when using 31276 'MULTILIB_OPTIONS'. 31277 31278 Do not define this macro if 'MULTILIB_OPTIONS' is not defined in 31279 the target makefile fragment or if none of the options listed in 31280 'MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 31281 31282 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 31283 Define this macro to tell 'gcc' that it should only translate a 31284 '-B' prefix into a '-L' linker option if the prefix indicates an 31285 absolute file name. 31286 31287 -- Macro: MD_EXEC_PREFIX 31288 If defined, this macro is an additional prefix to try after 31289 'STANDARD_EXEC_PREFIX'. 'MD_EXEC_PREFIX' is not searched when the 31290 compiler is built as a cross compiler. If you define 31291 'MD_EXEC_PREFIX', then be sure to add it to the list of directories 31292 used to find the assembler in 'configure.ac'. 31293 31294 -- Macro: STANDARD_STARTFILE_PREFIX 31295 Define this macro as a C string constant if you wish to override 31296 the standard choice of 'libdir' as the default prefix to try when 31297 searching for startup files such as 'crt0.o'. 31298 'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 31299 built as a cross compiler. 31300 31301 -- Macro: STANDARD_STARTFILE_PREFIX_1 31302 Define this macro as a C string constant if you wish to override 31303 the standard choice of '/lib' as a prefix to try after the default 31304 prefix when searching for startup files such as 'crt0.o'. 31305 'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 31306 built as a cross compiler. 31307 31308 -- Macro: STANDARD_STARTFILE_PREFIX_2 31309 Define this macro as a C string constant if you wish to override 31310 the standard choice of '/lib' as yet another prefix to try after 31311 the default prefix when searching for startup files such as 31312 'crt0.o'. 'STANDARD_STARTFILE_PREFIX_2' is not searched when the 31313 compiler is built as a cross compiler. 31314 31315 -- Macro: MD_STARTFILE_PREFIX 31316 If defined, this macro supplies an additional prefix to try after 31317 the standard prefixes. 'MD_EXEC_PREFIX' is not searched when the 31318 compiler is built as a cross compiler. 31319 31320 -- Macro: MD_STARTFILE_PREFIX_1 31321 If defined, this macro supplies yet another prefix to try after the 31322 standard prefixes. It is not searched when the compiler is built 31323 as a cross compiler. 31324 31325 -- Macro: INIT_ENVIRONMENT 31326 Define this macro as a C string constant if you wish to set 31327 environment variables for programs called by the driver, such as 31328 the assembler and loader. The driver passes the value of this 31329 macro to 'putenv' to initialize the necessary environment 31330 variables. 31331 31332 -- Macro: LOCAL_INCLUDE_DIR 31333 Define this macro as a C string constant if you wish to override 31334 the standard choice of '/usr/local/include' as the default prefix 31335 to try when searching for local header files. 'LOCAL_INCLUDE_DIR' 31336 comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc', 31337 normally '/usr/include') in the search order. 31338 31339 Cross compilers do not search either '/usr/local/include' or its 31340 replacement. 31341 31342 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT 31343 The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'. See 31344 'INCLUDE_DEFAULTS', below, for the description of components. If 31345 you do not define this macro, no component is used. 31346 31347 -- Macro: INCLUDE_DEFAULTS 31348 Define this macro if you wish to override the entire default search 31349 path for include files. For a native compiler, the default search 31350 path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR', 31351 'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'. In 31352 addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined 31353 automatically by 'Makefile', and specify private search areas for 31354 GCC. The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++ 31355 programs. 31356 31357 The definition should be an initializer for an array of structures. 31358 Each array element should have four elements: the directory name (a 31359 string constant), the component name (also a string constant), a 31360 flag for C++-only directories, and a flag showing that the includes 31361 in the directory don't need to be wrapped in 'extern 'C'' when 31362 compiling C++. Mark the end of the array with a null element. 31363 31364 The component name denotes what GNU package the include file is 31365 part of, if any, in all uppercase letters. For example, it might 31366 be 'GCC' or 'BINUTILS'. If the package is part of a 31367 vendor-supplied operating system, code the component name as '0'. 31368 31369 For example, here is the definition used for VAX/VMS: 31370 31371 #define INCLUDE_DEFAULTS \ 31372 { \ 31373 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 31374 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 31375 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 31376 { ".", 0, 0, 0}, \ 31377 { 0, 0, 0, 0} \ 31378 } 31379 31380 Here is the order of prefixes tried for exec files: 31381 31382 1. Any prefixes specified by the user with '-B'. 31383 31384 2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX' 31385 is not set and the compiler has not been installed in the 31386 configure-time PREFIX, the location in which the compiler has 31387 actually been installed. 31388 31389 3. The directories specified by the environment variable 31390 'COMPILER_PATH'. 31391 31392 4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been 31393 installed in the configured-time PREFIX. 31394 31395 5. The location '/usr/libexec/gcc/', but only if this is a native 31396 compiler. 31397 31398 6. The location '/usr/lib/gcc/', but only if this is a native 31399 compiler. 31400 31401 7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 31402 native compiler. 31403 31404 Here is the order of prefixes tried for startfiles: 31405 31406 1. Any prefixes specified by the user with '-B'. 31407 31408 2. The environment variable 'GCC_EXEC_PREFIX' or its automatically 31409 determined value based on the installed toolchain location. 31410 31411 3. The directories specified by the environment variable 31412 'LIBRARY_PATH' (or port-specific name; native only, cross compilers 31413 do not use this). 31414 31415 4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is 31416 installed in the configured PREFIX or this is a native compiler. 31417 31418 5. The location '/usr/lib/gcc/', but only if this is a native 31419 compiler. 31420 31421 6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 31422 native compiler. 31423 31424 7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a 31425 native compiler, or we have a target system root. 31426 31427 8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is 31428 a native compiler, or we have a target system root. 31429 31430 9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot 31431 modifications. If this path is relative it will be prefixed by 31432 'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX' 31433 and the machine suffix. 31434 31435 10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a 31436 native compiler, or we have a target system root. The default for 31437 this macro is '/lib/'. 31438 31439 11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a 31440 native compiler, or we have a target system root. The default for 31441 this macro is '/usr/lib/'. 31442 31443 31444File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 31445 3144618.3 Run-time Target Specification 31447================================== 31448 31449Here are run-time target specifications. 31450 31451 -- Macro: TARGET_CPU_CPP_BUILTINS () 31452 This function-like macro expands to a block of code that defines 31453 built-in preprocessor macros and assertions for the target CPU, 31454 using the functions 'builtin_define', 'builtin_define_std' and 31455 'builtin_assert'. When the front end calls this macro it provides 31456 a trailing semicolon, and since it has finished command line option 31457 processing your code can use those results freely. 31458 31459 'builtin_assert' takes a string in the form you pass to the 31460 command-line option '-A', such as 'cpu=mips', and creates the 31461 assertion. 'builtin_define' takes a string in the form accepted by 31462 option '-D' and unconditionally defines the macro. 31463 31464 'builtin_define_std' takes a string representing the name of an 31465 object-like macro. If it doesn't lie in the user's namespace, 31466 'builtin_define_std' defines it unconditionally. Otherwise, it 31467 defines a version with two leading underscores, and another version 31468 with two leading and trailing underscores, and defines the original 31469 only if an ISO standard was not requested on the command line. For 31470 example, passing 'unix' defines '__unix', '__unix__' and possibly 31471 'unix'; passing '_mips' defines '__mips', '__mips__' and possibly 31472 '_mips', and passing '_ABI64' defines only '_ABI64'. 31473 31474 You can also test for the C dialect being compiled. The variable 31475 'c_language' is set to one of 'clk_c', 'clk_cplusplus' or 31476 'clk_objective_c'. Note that if we are preprocessing assembler, 31477 this variable will be 'clk_c' but the function-like macro 31478 'preprocessing_asm_p()' will return true, so you might want to 31479 check for that first. If you need to check for strict ANSI, the 31480 variable 'flag_iso' can be used. The function-like macro 31481 'preprocessing_trad_p()' can be used to check for traditional 31482 preprocessing. 31483 31484 -- Macro: TARGET_OS_CPP_BUILTINS () 31485 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 31486 and is used for the target operating system instead. 31487 31488 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 31489 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 31490 and is used for the target object format. 'elfos.h' uses this 31491 macro to define '__ELF__', so you probably do not need to define it 31492 yourself. 31493 31494 -- Variable: extern int target_flags 31495 This variable is declared in 'options.h', which is included before 31496 any target-specific headers. 31497 31498 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 31499 This variable specifies the initial value of 'target_flags'. Its 31500 default setting is 0. 31501 31502 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options 31503 *OPTS, struct gcc_options *OPTS_SET, const struct 31504 cl_decoded_option *DECODED, location_t LOC) 31505 This hook is called whenever the user specifies one of the 31506 target-specific options described by the '.opt' definition files 31507 (*note Options::). It has the opportunity to do some 31508 option-specific processing and should return true if the option is 31509 valid. The default definition does nothing but return true. 31510 31511 DECODED specifies the option and its arguments. OPTS and OPTS_SET 31512 are the 'gcc_options' structures to be used for storing option 31513 state, and LOC is the location at which the option was passed 31514 ('UNKNOWN_LOCATION' except for options passed via attributes). 31515 31516 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 31517 *ARG, int VALUE) 31518 This target hook is called whenever the user specifies one of the 31519 target-specific C language family options described by the '.opt' 31520 definition files(*note Options::). It has the opportunity to do 31521 some option-specific processing and should return true if the 31522 option is valid. The arguments are like for 31523 'TARGET_HANDLE_OPTION'. The default definition does nothing but 31524 return false. 31525 31526 In general, you should use 'TARGET_HANDLE_OPTION' to handle 31527 options. However, if processing an option requires routines that 31528 are only available in the C (and related language) front ends, then 31529 you should use 'TARGET_HANDLE_C_OPTION' instead. 31530 31531 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 31532 STRING) 31533 Targets may provide a string object type that can be used within 31534 and between C, C++ and their respective Objective-C dialects. A 31535 string object might, for example, embed encoding and length 31536 information. These objects are considered opaque to the compiler 31537 and handled as references. An ideal implementation makes the 31538 composition of the string object match that of the Objective-C 31539 'NSString' ('NXString' for GNUStep), allowing efficient 31540 interworking between C-only and Objective-C code. If a target 31541 implements string objects then this hook should return a reference 31542 to such an object constructed from the normal 'C' string 31543 representation provided in STRING. At present, the hook is used by 31544 Objective-C only, to obtain a common-format string object when the 31545 target provides one. 31546 31547 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE 31548 (const char *CLASSNAME) 31549 Declare that Objective C class CLASSNAME is referenced by the 31550 current TU. 31551 31552 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char 31553 *CLASSNAME) 31554 Declare that Objective C class CLASSNAME is defined by the current 31555 TU. 31556 31557 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 31558 STRINGREF) 31559 If a target implements string objects then this hook should return 31560 'true' if STRINGREF is a valid reference to such an object. 31561 31562 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 31563 FORMAT_ARG, tree ARGS_LIST) 31564 If a target implements string objects then this hook should should 31565 provide a facility to check the function arguments in ARGS_LIST 31566 against the format specifiers in FORMAT_ARG where the type of 31567 FORMAT_ARG is one recognized as a valid string reference type. 31568 31569 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 31570 This target function is similar to the hook 31571 'TARGET_OPTION_OVERRIDE' but is called when the optimize level is 31572 changed via an attribute or pragma or when it is reset at the end 31573 of the code affected by the attribute or pragma. It is not called 31574 at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is 31575 called so if you want to perform these actions then, you should 31576 have 'TARGET_OPTION_OVERRIDE' call 31577 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 31578 31579 -- Macro: C_COMMON_OVERRIDE_OPTIONS 31580 This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only 31581 used in the C language frontends (C, Objective-C, C++, 31582 Objective-C++) and so can be used to alter option flag variables 31583 which only exist in those frontends. 31584 31585 -- Common Target Hook: const struct default_options * 31586 TARGET_OPTION_OPTIMIZATION_TABLE 31587 Some machines may desire to change what optimizations are performed 31588 for various optimization levels. This variable, if defined, 31589 describes options to enable at particular sets of optimization 31590 levels. These options are processed once just after the 31591 optimization level is determined and before the remainder of the 31592 command options have been parsed, so may be overridden by other 31593 options passed explicitly. 31594 31595 This processing is run once at program startup and when the 31596 optimization options are changed via '#pragma GCC optimize' or by 31597 using the 'optimize' attribute. 31598 31599 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct 31600 gcc_options *OPTS) 31601 Set target-dependent initial values of fields in OPTS. 31602 31603 -- Macro: SWITCHABLE_TARGET 31604 Some targets need to switch between substantially different 31605 subtargets during compilation. For example, the MIPS target has 31606 one subtarget for the traditional MIPS architecture and another for 31607 MIPS16. Source code can switch between these two subarchitectures 31608 using the 'mips16' and 'nomips16' attributes. 31609 31610 Such subtargets can differ in things like the set of available 31611 registers, the set of available instructions, the costs of various 31612 operations, and so on. GCC caches a lot of this type of 31613 information in global variables, and recomputing them for each 31614 subtarget takes a significant amount of time. The compiler 31615 therefore provides a facility for maintaining several versions of 31616 the global variables and quickly switching between them; see 31617 'target-globals.h' for details. 31618 31619 Define this macro to 1 if your target needs this facility. The 31620 default is 0. 31621 31622 -- Target Hook: bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P 31623 (void) 31624 Returns true if the target supports IEEE 754 floating-point 31625 exceptions and rounding modes, false otherwise. This is intended 31626 to relate to the 'float' and 'double' types, but not necessarily 31627 'long double'. By default, returns true if the 'adddf3' 31628 instruction pattern is available and false otherwise, on the 31629 assumption that hardware floating point supports exceptions and 31630 rounding modes but software floating point does not. 31631 31632 31633File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 31634 3163518.4 Defining data structures for per-function information. 31636=========================================================== 31637 31638If the target needs to store information on a per-function basis, GCC 31639provides a macro and a couple of variables to allow this. Note, just 31640using statics to store the information is a bad idea, since GCC supports 31641nested functions, so you can be halfway through encoding one function 31642when another one comes along. 31643 31644 GCC defines a data structure called 'struct function' which contains 31645all of the data specific to an individual function. This structure 31646contains a field called 'machine' whose type is 'struct machine_function 31647*', which can be used by targets to point to their own specific data. 31648 31649 If a target needs per-function specific data it should define the type 31650'struct machine_function' and also the macro 'INIT_EXPANDERS'. This 31651macro should be used to initialize the function pointer 31652'init_machine_status'. This pointer is explained below. 31653 31654 One typical use of per-function, target specific data is to create an 31655RTX to hold the register containing the function's return address. This 31656RTX can then be used to implement the '__builtin_return_address' 31657function, for level 0. 31658 31659 Note--earlier implementations of GCC used a single data area to hold 31660all of the per-function information. Thus when processing of a nested 31661function began the old per-function data had to be pushed onto a stack, 31662and when the processing was finished, it had to be popped off the stack. 31663GCC used to provide function pointers called 'save_machine_status' and 31664'restore_machine_status' to handle the saving and restoring of the 31665target specific information. Since the single data area approach is no 31666longer used, these pointers are no longer supported. 31667 31668 -- Macro: INIT_EXPANDERS 31669 Macro called to initialize any target specific information. This 31670 macro is called once per function, before generation of any RTL has 31671 begun. The intention of this macro is to allow the initialization 31672 of the function pointer 'init_machine_status'. 31673 31674 -- Variable: void (*)(struct function *) init_machine_status 31675 If this function pointer is non-'NULL' it will be called once per 31676 function, before function compilation starts, in order to allow the 31677 target to perform any target specific initialization of the 'struct 31678 function' structure. It is intended that this would be used to 31679 initialize the 'machine' of that structure. 31680 31681 'struct machine_function' structures are expected to be freed by 31682 GC. Generally, any memory that they reference must be allocated by 31683 using GC allocation, including the structure itself. 31684 31685 31686File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 31687 3168818.5 Storage Layout 31689=================== 31690 31691Note that the definitions of the macros in this table which are sizes or 31692alignments measured in bits do not need to be constant. They can be C 31693expressions that refer to static variables, such as the 'target_flags'. 31694*Note Run-time Target::. 31695 31696 -- Macro: BITS_BIG_ENDIAN 31697 Define this macro to have the value 1 if the most significant bit 31698 in a byte has the lowest number; otherwise define it to have the 31699 value zero. This means that bit-field instructions count from the 31700 most significant bit. If the machine has no bit-field 31701 instructions, then this must still be defined, but it doesn't 31702 matter which value it is defined to. This macro need not be a 31703 constant. 31704 31705 This macro does not affect the way structure fields are packed into 31706 bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'. 31707 31708 -- Macro: BYTES_BIG_ENDIAN 31709 Define this macro to have the value 1 if the most significant byte 31710 in a word has the lowest number. This macro need not be a 31711 constant. 31712 31713 -- Macro: WORDS_BIG_ENDIAN 31714 Define this macro to have the value 1 if, in a multiword object, 31715 the most significant word has the lowest number. This applies to 31716 both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if 31717 the order of words in memory is not the same as the order in 31718 registers. This macro need not be a constant. 31719 31720 -- Macro: REG_WORDS_BIG_ENDIAN 31721 On some machines, the order of words in a multiword object differs 31722 between registers in memory. In such a situation, define this 31723 macro to describe the order of words in a register. The macro 31724 'WORDS_BIG_ENDIAN' controls the order of words in memory. 31725 31726 -- Macro: FLOAT_WORDS_BIG_ENDIAN 31727 Define this macro to have the value 1 if 'DFmode', 'XFmode' or 31728 'TFmode' floating point numbers are stored in memory with the word 31729 containing the sign bit at the lowest address; otherwise define it 31730 to have the value 0. This macro need not be a constant. 31731 31732 You need not define this macro if the ordering is the same as for 31733 multi-word integers. 31734 31735 -- Macro: BITS_PER_WORD 31736 Number of bits in a word. If you do not define this macro, the 31737 default is 'BITS_PER_UNIT * UNITS_PER_WORD'. 31738 31739 -- Macro: MAX_BITS_PER_WORD 31740 Maximum number of bits in a word. If this is undefined, the 31741 default is 'BITS_PER_WORD'. Otherwise, it is the constant value 31742 that is the largest value that 'BITS_PER_WORD' can have at 31743 run-time. 31744 31745 -- Macro: UNITS_PER_WORD 31746 Number of storage units in a word; normally the size of a 31747 general-purpose register, a power of two from 1 or 8. 31748 31749 -- Macro: MIN_UNITS_PER_WORD 31750 Minimum number of units in a word. If this is undefined, the 31751 default is 'UNITS_PER_WORD'. Otherwise, it is the constant value 31752 that is the smallest value that 'UNITS_PER_WORD' can have at 31753 run-time. 31754 31755 -- Macro: POINTER_SIZE 31756 Width of a pointer, in bits. You must specify a value no wider 31757 than the width of 'Pmode'. If it is not equal to the width of 31758 'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'. If you do not 31759 specify a value the default is 'BITS_PER_WORD'. 31760 31761 -- Macro: POINTERS_EXTEND_UNSIGNED 31762 A C expression that determines how pointers should be extended from 31763 'ptr_mode' to either 'Pmode' or 'word_mode'. It is greater than 31764 zero if pointers should be zero-extended, zero if they should be 31765 sign-extended, and negative if some other sort of conversion is 31766 needed. In the last case, the extension is done by the target's 31767 'ptr_extend' instruction. 31768 31769 You need not define this macro if the 'ptr_mode', 'Pmode' and 31770 'word_mode' are all the same width. 31771 31772 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 31773 A macro to update M and UNSIGNEDP when an object whose type is TYPE 31774 and which has the specified mode and signedness is to be stored in 31775 a register. This macro is only called when TYPE is a scalar type. 31776 31777 On most RISC machines, which only have operations that operate on a 31778 full register, define this macro to set M to 'word_mode' if M is an 31779 integer mode narrower than 'BITS_PER_WORD'. In most cases, only 31780 integer modes should be widened because wider-precision 31781 floating-point operations are usually more expensive than their 31782 narrower counterparts. 31783 31784 For most machines, the macro definition does not change UNSIGNEDP. 31785 However, some machines, have instructions that preferentially 31786 handle either signed or unsigned quantities of certain modes. For 31787 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 31788 instructions sign-extend the result to 64 bits. On such machines, 31789 set UNSIGNEDP according to which kind of extension is more 31790 efficient. 31791 31792 Do not define this macro if it would never modify M. 31793 31794 -- Target Hook: enum flt_eval_method TARGET_C_EXCESS_PRECISION (enum 31795 excess_precision_type TYPE) 31796 Return a value, with the same meaning as the C99 macro 31797 'FLT_EVAL_METHOD' that describes which excess precision should be 31798 applied. TYPE is either 'EXCESS_PRECISION_TYPE_IMPLICIT', 31799 'EXCESS_PRECISION_TYPE_FAST', or 'EXCESS_PRECISION_TYPE_STANDARD'. 31800 For 'EXCESS_PRECISION_TYPE_IMPLICIT', the target should return 31801 which precision and range operations will be implictly evaluated in 31802 regardless of the excess precision explicitly added. For 31803 'EXCESS_PRECISION_TYPE_STANDARD' and 'EXCESS_PRECISION_TYPE_FAST', 31804 the target should return the explicit excess precision that should 31805 be added depending on the value set for 31806 '-fexcess-precision=[standard|fast]'. Note that unpredictable 31807 explicit excess precision does not make sense, so a target should 31808 never return 'FLT_EVAL_METHOD_UNPREDICTABLE' when TYPE is 31809 'EXCESS_PRECISION_TYPE_STANDARD' or 'EXCESS_PRECISION_TYPE_FAST'. 31810 31811 -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree 31812 TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE, 31813 int FOR_RETURN) 31814 Like 'PROMOTE_MODE', but it is applied to outgoing function 31815 arguments or function return values. The target hook should return 31816 the new mode and possibly change '*PUNSIGNEDP' if the promotion 31817 should change signedness. This function is called only for scalar 31818 _or pointer_ types. 31819 31820 FOR_RETURN allows to distinguish the promotion of arguments and 31821 return values. If it is '1', a return value is being promoted and 31822 'TARGET_FUNCTION_VALUE' must perform the same promotions done here. 31823 If it is '2', the returned mode should be that of the register in 31824 which an incoming parameter is copied, or the outgoing result is 31825 computed; then the hook should return the same mode as 31826 'promote_mode', though the signedness may be different. 31827 31828 TYPE can be NULL when promoting function arguments of libcalls. 31829 31830 The default is to not promote arguments and return values. You can 31831 also define the hook to 31832 'default_promote_function_mode_always_promote' if you would like to 31833 apply the same rules given by 'PROMOTE_MODE'. 31834 31835 -- Macro: PARM_BOUNDARY 31836 Normal alignment required for function parameters on the stack, in 31837 bits. All stack parameters receive at least this much alignment 31838 regardless of data type. On most machines, this is the same as the 31839 size of an integer. 31840 31841 -- Macro: STACK_BOUNDARY 31842 Define this macro to the minimum alignment enforced by hardware for 31843 the stack pointer on this machine. The definition is a C 31844 expression for the desired alignment (measured in bits). This 31845 value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not 31846 defined. On most machines, this should be the same as 31847 'PARM_BOUNDARY'. 31848 31849 -- Macro: PREFERRED_STACK_BOUNDARY 31850 Define this macro if you wish to preserve a certain alignment for 31851 the stack pointer, greater than what the hardware enforces. The 31852 definition is a C expression for the desired alignment (measured in 31853 bits). This macro must evaluate to a value equal to or larger than 31854 'STACK_BOUNDARY'. 31855 31856 -- Macro: INCOMING_STACK_BOUNDARY 31857 Define this macro if the incoming stack boundary may be different 31858 from 'PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 31859 value equal to or larger than 'STACK_BOUNDARY'. 31860 31861 -- Macro: FUNCTION_BOUNDARY 31862 Alignment required for a function entry point, in bits. 31863 31864 -- Macro: BIGGEST_ALIGNMENT 31865 Biggest alignment that any data type can require on this machine, 31866 in bits. Note that this is not the biggest alignment that is 31867 supported, just the biggest alignment that, when violated, may 31868 cause a fault. 31869 31870 -- Target Hook: HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT 31871 If defined, this target hook specifies the absolute biggest 31872 alignment that a type or variable can have on this machine, 31873 otherwise, 'BIGGEST_ALIGNMENT' is used. 31874 31875 -- Macro: MALLOC_ABI_ALIGNMENT 31876 Alignment, in bits, a C conformant malloc implementation has to 31877 provide. If not defined, the default value is 'BITS_PER_WORD'. 31878 31879 -- Macro: ATTRIBUTE_ALIGNED_VALUE 31880 Alignment used by the '__attribute__ ((aligned))' construct. If 31881 not defined, the default value is 'BIGGEST_ALIGNMENT'. 31882 31883 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 31884 If defined, the smallest alignment, in bits, that can be given to 31885 an object that can be referenced in one operation, without 31886 disturbing any nearby object. Normally, this is 'BITS_PER_UNIT', 31887 but may be larger on machines that don't have byte or half-word 31888 store operations. 31889 31890 -- Macro: BIGGEST_FIELD_ALIGNMENT 31891 Biggest alignment that any structure or union field can require on 31892 this machine, in bits. If defined, this overrides 31893 'BIGGEST_ALIGNMENT' for structure and union fields only, unless the 31894 field alignment has been set by the '__attribute__ ((aligned (N)))' 31895 construct. 31896 31897 -- Macro: ADJUST_FIELD_ALIGN (FIELD, TYPE, COMPUTED) 31898 An expression for the alignment of a structure field FIELD of type 31899 TYPE if the alignment computed in the usual way (including applying 31900 of 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the 31901 alignment) is COMPUTED. It overrides alignment only if the field 31902 alignment has not been set by the '__attribute__ ((aligned (N)))' 31903 construct. Note that FIELD may be 'NULL_TREE' in case we just 31904 query for the minimum alignment of a field of type TYPE in 31905 structure context. 31906 31907 -- Macro: MAX_STACK_ALIGNMENT 31908 Biggest stack alignment guaranteed by the backend. Use this macro 31909 to specify the maximum alignment of a variable on stack. 31910 31911 If not defined, the default value is 'STACK_BOUNDARY'. 31912 31913 -- Macro: MAX_OFILE_ALIGNMENT 31914 Biggest alignment supported by the object file format of this 31915 machine. Use this macro to limit the alignment which can be 31916 specified using the '__attribute__ ((aligned (N)))' construct for 31917 functions and objects with static storage duration. The alignment 31918 of automatic objects may exceed the object file format maximum up 31919 to the maximum supported by GCC. If not defined, the default value 31920 is 'BIGGEST_ALIGNMENT'. 31921 31922 On systems that use ELF, the default (in 'config/elfos.h') is the 31923 largest supported 32-bit ELF section alignment representable on a 31924 32-bit host e.g. '(((uint64_t) 1 << 28) * 8)'. On 32-bit ELF the 31925 largest supported section alignment in bits is '(0x80000000 * 8)', 31926 but this is not representable on 32-bit hosts. 31927 31928 -- Target Hook: HOST_WIDE_INT TARGET_STATIC_RTX_ALIGNMENT (machine_mode 31929 MODE) 31930 This hook returns the preferred alignment in bits for a 31931 statically-allocated rtx, such as a constant pool entry. MODE is 31932 the mode of the rtx. The default implementation returns 31933 'GET_MODE_ALIGNMENT (MODE)'. 31934 31935 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 31936 If defined, a C expression to compute the alignment for a variable 31937 in the static store. TYPE is the data type, and BASIC-ALIGN is the 31938 alignment that the object would ordinarily have. The value of this 31939 macro is used instead of that alignment to align the object. 31940 31941 If this macro is not defined, then BASIC-ALIGN is used. 31942 31943 One use of this macro is to increase alignment of medium-size data 31944 to make it all fit in fewer cache lines. Another is to cause 31945 character arrays to be word-aligned so that 'strcpy' calls that 31946 copy constants to character arrays can be done inline. 31947 31948 -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN) 31949 Similar to 'DATA_ALIGNMENT', but for the cases where the ABI 31950 mandates some alignment increase, instead of optimization only 31951 purposes. E.g. AMD x86-64 psABI says that variables with array 31952 type larger than 15 bytes must be aligned to 16 byte boundaries. 31953 31954 If this macro is not defined, then BASIC-ALIGN is used. 31955 31956 -- Target Hook: HOST_WIDE_INT TARGET_CONSTANT_ALIGNMENT (const_tree 31957 CONSTANT, HOST_WIDE_INT BASIC_ALIGN) 31958 This hook returns the alignment in bits of a constant that is being 31959 placed in memory. CONSTANT is the constant and BASIC_ALIGN is the 31960 alignment that the object would ordinarily have. 31961 31962 The default definition just returns BASIC_ALIGN. 31963 31964 The typical use of this hook is to increase alignment for string 31965 constants to be word aligned so that 'strcpy' calls that copy 31966 constants can be done inline. The function 31967 'constant_alignment_word_strings' provides such a definition. 31968 31969 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 31970 If defined, a C expression to compute the alignment for a variable 31971 in the local store. TYPE is the data type, and BASIC-ALIGN is the 31972 alignment that the object would ordinarily have. The value of this 31973 macro is used instead of that alignment to align the object. 31974 31975 If this macro is not defined, then BASIC-ALIGN is used. 31976 31977 One use of this macro is to increase alignment of medium-size data 31978 to make it all fit in fewer cache lines. 31979 31980 If the value of this macro has a type, it should be an unsigned 31981 type. 31982 31983 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE) 31984 This hook can be used to define the alignment for a vector of type 31985 TYPE, in order to comply with a platform ABI. The default is to 31986 require natural alignment for vector types. The alignment returned 31987 by this hook must be a power-of-two multiple of the default 31988 alignment of the vector element type. 31989 31990 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 31991 If defined, a C expression to compute the alignment for stack slot. 31992 TYPE is the data type, MODE is the widest mode available, and 31993 BASIC-ALIGN is the alignment that the slot would ordinarily have. 31994 The value of this macro is used instead of that alignment to align 31995 the slot. 31996 31997 If this macro is not defined, then BASIC-ALIGN is used when TYPE is 31998 'NULL'. Otherwise, 'LOCAL_ALIGNMENT' will be used. 31999 32000 This macro is to set alignment of stack slot to the maximum 32001 alignment of all possible modes which the slot may have. 32002 32003 If the value of this macro has a type, it should be an unsigned 32004 type. 32005 32006 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 32007 If defined, a C expression to compute the alignment for a local 32008 variable DECL. 32009 32010 If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE 32011 (DECL), DECL_ALIGN (DECL))' is used. 32012 32013 One use of this macro is to increase alignment of medium-size data 32014 to make it all fit in fewer cache lines. 32015 32016 If the value of this macro has a type, it should be an unsigned 32017 type. 32018 32019 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 32020 If defined, a C expression to compute the minimum required 32021 alignment for dynamic stack realignment purposes for EXP (a type or 32022 decl), MODE, assuming normal alignment ALIGN. 32023 32024 If this macro is not defined, then ALIGN will be used. 32025 32026 -- Macro: EMPTY_FIELD_BOUNDARY 32027 Alignment in bits to be given to a structure bit-field that follows 32028 an empty field such as 'int : 0;'. 32029 32030 If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 32031 32032 -- Macro: STRUCTURE_SIZE_BOUNDARY 32033 Number of bits which any structure or union's size must be a 32034 multiple of. Each structure or union's size is rounded up to a 32035 multiple of this. 32036 32037 If you do not define this macro, the default is the same as 32038 'BITS_PER_UNIT'. 32039 32040 -- Macro: STRICT_ALIGNMENT 32041 Define this macro to be the value 1 if instructions will fail to 32042 work if given data not on the nominal alignment. If instructions 32043 will merely go slower in that case, define this macro as 0. 32044 32045 -- Macro: PCC_BITFIELD_TYPE_MATTERS 32046 Define this if you wish to imitate the way many other C compilers 32047 handle alignment of bit-fields and the structures that contain 32048 them. 32049 32050 The behavior is that the type written for a named bit-field ('int', 32051 'short', or other integer type) imposes an alignment for the entire 32052 structure, as if the structure really did contain an ordinary field 32053 of that type. In addition, the bit-field is placed within the 32054 structure so that it would fit within such a field, not crossing a 32055 boundary for it. 32056 32057 Thus, on most machines, a named bit-field whose type is written as 32058 'int' would not cross a four-byte boundary, and would force 32059 four-byte alignment for the whole structure. (The alignment used 32060 may not be four bytes; it is controlled by the other alignment 32061 parameters.) 32062 32063 An unnamed bit-field will not affect the alignment of the 32064 containing structure. 32065 32066 If the macro is defined, its definition should be a C expression; a 32067 nonzero value for the expression enables this behavior. 32068 32069 Note that if this macro is not defined, or its value is zero, some 32070 bit-fields may cross more than one alignment boundary. The 32071 compiler can support such references if there are 'insv', 'extv', 32072 and 'extzv' insns that can directly reference memory. 32073 32074 The other known way of making bit-fields work is to define 32075 'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'. Then 32076 every structure can be accessed with fullwords. 32077 32078 Unless the machine has bit-field instructions or you define 32079 'STRUCTURE_SIZE_BOUNDARY' that way, you must define 32080 'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 32081 32082 If your aim is to make GCC use the same conventions for laying out 32083 bit-fields as are used by another compiler, here is how to 32084 investigate what the other compiler does. Compile and run this 32085 program: 32086 32087 struct foo1 32088 { 32089 char x; 32090 char :0; 32091 char y; 32092 }; 32093 32094 struct foo2 32095 { 32096 char x; 32097 int :0; 32098 char y; 32099 }; 32100 32101 main () 32102 { 32103 printf ("Size of foo1 is %d\n", 32104 sizeof (struct foo1)); 32105 printf ("Size of foo2 is %d\n", 32106 sizeof (struct foo2)); 32107 exit (0); 32108 } 32109 32110 If this prints 2 and 5, then the compiler's behavior is what you 32111 would get from 'PCC_BITFIELD_TYPE_MATTERS'. 32112 32113 -- Macro: BITFIELD_NBYTES_LIMITED 32114 Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 32115 to aligning a bit-field within the structure. 32116 32117 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 32118 When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 32119 whether unnamed bitfields affect the alignment of the containing 32120 structure. The hook should return true if the structure should 32121 inherit the alignment requirements of an unnamed bitfield's type. 32122 32123 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 32124 This target hook should return 'true' if accesses to volatile 32125 bitfields should use the narrowest mode possible. It should return 32126 'false' if these accesses should use the bitfield container type. 32127 32128 The default is 'false'. 32129 32130 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD, 32131 machine_mode MODE) 32132 Return true if a structure, union or array containing FIELD should 32133 be accessed using 'BLKMODE'. 32134 32135 If FIELD is the only field in the structure, MODE is its mode, 32136 otherwise MODE is VOIDmode. MODE is provided in the case where 32137 structures of one field would require the structure's mode to 32138 retain the field's mode. 32139 32140 Normally, this is not needed. 32141 32142 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 32143 Define this macro as an expression for the alignment of a type 32144 (given by TYPE as a tree node) if the alignment computed in the 32145 usual way is COMPUTED and the alignment explicitly specified was 32146 SPECIFIED. 32147 32148 The default is to use SPECIFIED if it is larger; otherwise, use the 32149 smaller of COMPUTED and 'BIGGEST_ALIGNMENT' 32150 32151 -- Macro: MAX_FIXED_MODE_SIZE 32152 An integer expression for the size in bits of the largest integer 32153 machine mode that should actually be used. All integer machine 32154 modes of this size or smaller can be used for structures and unions 32155 with the appropriate sizes. If this macro is undefined, 32156 'GET_MODE_BITSIZE (DImode)' is assumed. 32157 32158 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 32159 If defined, an expression of type 'machine_mode' that specifies the 32160 mode of the save area operand of a 'save_stack_LEVEL' named pattern 32161 (*note Standard Names::). SAVE_LEVEL is one of 'SAVE_BLOCK', 32162 'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three 32163 named patterns is having its mode specified. 32164 32165 You need not define this macro if it always returns 'Pmode'. You 32166 would most commonly define this macro if the 'save_stack_LEVEL' 32167 patterns need to support both a 32- and a 64-bit mode. 32168 32169 -- Macro: STACK_SIZE_MODE 32170 If defined, an expression of type 'machine_mode' that specifies the 32171 mode of the size increment operand of an 'allocate_stack' named 32172 pattern (*note Standard Names::). 32173 32174 You need not define this macro if it always returns 'word_mode'. 32175 You would most commonly define this macro if the 'allocate_stack' 32176 pattern needs to support both a 32- and a 64-bit mode. 32177 32178 -- Target Hook: scalar_int_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 32179 This target hook should return the mode to be used for the return 32180 value of compare instructions expanded to libgcc calls. If not 32181 defined 'word_mode' is returned which is the right choice for a 32182 majority of targets. 32183 32184 -- Target Hook: scalar_int_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 32185 This target hook should return the mode to be used for the shift 32186 count operand of shift instructions expanded to libgcc calls. If 32187 not defined 'word_mode' is returned which is the right choice for a 32188 majority of targets. 32189 32190 -- Target Hook: scalar_int_mode TARGET_UNWIND_WORD_MODE (void) 32191 Return machine mode to be used for '_Unwind_Word' type. The 32192 default is to use 'word_mode'. 32193 32194 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 32195 RECORD_TYPE) 32196 This target hook returns 'true' if bit-fields in the given 32197 RECORD_TYPE are to be laid out following the rules of Microsoft 32198 Visual C/C++, namely: (i) a bit-field won't share the same storage 32199 unit with the previous bit-field if their underlying types have 32200 different sizes, and the bit-field will be aligned to the highest 32201 alignment of the underlying types of itself and of the previous 32202 bit-field; (ii) a zero-sized bit-field will affect the alignment of 32203 the whole enclosing structure, even if it is unnamed; except that 32204 (iii) a zero-sized bit-field will be disregarded unless it follows 32205 another bit-field of nonzero size. If this hook returns 'true', 32206 other macros that control bit-field layout are ignored. 32207 32208 When a bit-field is inserted into a packed record, the whole size 32209 of the underlying type is used by one or more same-size adjacent 32210 bit-fields (that is, if its long:3, 32 bits is used in the record, 32211 and any additional adjacent long bit-fields are packed into the 32212 same chunk of 32 bits. However, if the size changes, a new field 32213 of that size is allocated). In an unpacked record, this is the 32214 same as using alignment, but not equivalent when packing. 32215 32216 If both MS bit-fields and '__attribute__((packed))' are used, the 32217 latter will take precedence. If '__attribute__((packed))' is used 32218 on a single field when MS bit-fields are in use, it will take 32219 precedence for that field, but the alignment of the rest of the 32220 structure may affect its placement. 32221 32222 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 32223 Returns true if the target supports decimal floating point. 32224 32225 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 32226 Returns true if the target supports fixed-point arithmetic. 32227 32228 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 32229 This hook is called just before expansion into rtl, allowing the 32230 target to perform additional initializations or analysis before the 32231 expansion. For example, the rs6000 port uses it to allocate a 32232 scratch stack slot for use in copying SDmode values between memory 32233 and floating point registers whenever the function being expanded 32234 has any SDmode usage. 32235 32236 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 32237 This hook allows the backend to perform additional instantiations 32238 on rtl that are not actually in any insns yet, but will be later. 32239 32240 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 32241 If your target defines any fundamental types, or any types your 32242 target uses should be mangled differently from the default, define 32243 this hook to return the appropriate encoding for these types as 32244 part of a C++ mangled name. The TYPE argument is the tree 32245 structure representing the type to be mangled. The hook may be 32246 applied to trees which are not target-specific fundamental types; 32247 it should return 'NULL' for all such types, as well as arguments it 32248 does not recognize. If the return value is not 'NULL', it must 32249 point to a statically-allocated string constant. 32250 32251 Target-specific fundamental types might be new fundamental types or 32252 qualified versions of ordinary fundamental types. Encode new 32253 fundamental types as 'u N NAME', where NAME is the name used for 32254 the type in source code, and N is the length of NAME in decimal. 32255 Encode qualified versions of ordinary types as 'U N NAME CODE', 32256 where NAME is the name used for the type qualifier in source code, 32257 N is the length of NAME as above, and CODE is the code used to 32258 represent the unqualified version of this type. (See 32259 'write_builtin_type' in 'cp/mangle.c' for the list of codes.) In 32260 both cases the spaces are for clarity; do not include any spaces in 32261 your string. 32262 32263 This hook is applied to types prior to typedef resolution. If the 32264 mangled name for a particular type depends only on that type's main 32265 variant, you can perform typedef resolution yourself using 32266 'TYPE_MAIN_VARIANT' before mangling. 32267 32268 The default version of this hook always returns 'NULL', which is 32269 appropriate for a target that does not define any new fundamental 32270 types. 32271 32272 32273File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 32274 3227518.6 Layout of Source Language Data Types 32276========================================= 32277 32278These macros define the sizes and other characteristics of the standard 32279basic data types used in programs being compiled. Unlike the macros in 32280the previous section, these apply to specific features of C and related 32281languages, rather than to fundamental aspects of storage layout. 32282 32283 -- Macro: INT_TYPE_SIZE 32284 A C expression for the size in bits of the type 'int' on the target 32285 machine. If you don't define this, the default is one word. 32286 32287 -- Macro: SHORT_TYPE_SIZE 32288 A C expression for the size in bits of the type 'short' on the 32289 target machine. If you don't define this, the default is half a 32290 word. (If this would be less than one storage unit, it is rounded 32291 up to one unit.) 32292 32293 -- Macro: LONG_TYPE_SIZE 32294 A C expression for the size in bits of the type 'long' on the 32295 target machine. If you don't define this, the default is one word. 32296 32297 -- Macro: ADA_LONG_TYPE_SIZE 32298 On some machines, the size used for the Ada equivalent of the type 32299 'long' by a native Ada compiler differs from that used by C. In 32300 that situation, define this macro to be a C expression to be used 32301 for the size of that type. If you don't define this, the default 32302 is the value of 'LONG_TYPE_SIZE'. 32303 32304 -- Macro: LONG_LONG_TYPE_SIZE 32305 A C expression for the size in bits of the type 'long long' on the 32306 target machine. If you don't define this, the default is two 32307 words. If you want to support GNU Ada on your machine, the value 32308 of this macro must be at least 64. 32309 32310 -- Macro: CHAR_TYPE_SIZE 32311 A C expression for the size in bits of the type 'char' on the 32312 target machine. If you don't define this, the default is 32313 'BITS_PER_UNIT'. 32314 32315 -- Macro: BOOL_TYPE_SIZE 32316 A C expression for the size in bits of the C++ type 'bool' and C99 32317 type '_Bool' on the target machine. If you don't define this, and 32318 you probably shouldn't, the default is 'CHAR_TYPE_SIZE'. 32319 32320 -- Macro: FLOAT_TYPE_SIZE 32321 A C expression for the size in bits of the type 'float' on the 32322 target machine. If you don't define this, the default is one word. 32323 32324 -- Macro: DOUBLE_TYPE_SIZE 32325 A C expression for the size in bits of the type 'double' on the 32326 target machine. If you don't define this, the default is two 32327 words. 32328 32329 -- Macro: LONG_DOUBLE_TYPE_SIZE 32330 A C expression for the size in bits of the type 'long double' on 32331 the target machine. If you don't define this, the default is two 32332 words. 32333 32334 -- Macro: SHORT_FRACT_TYPE_SIZE 32335 A C expression for the size in bits of the type 'short _Fract' on 32336 the target machine. If you don't define this, the default is 32337 'BITS_PER_UNIT'. 32338 32339 -- Macro: FRACT_TYPE_SIZE 32340 A C expression for the size in bits of the type '_Fract' on the 32341 target machine. If you don't define this, the default is 32342 'BITS_PER_UNIT * 2'. 32343 32344 -- Macro: LONG_FRACT_TYPE_SIZE 32345 A C expression for the size in bits of the type 'long _Fract' on 32346 the target machine. If you don't define this, the default is 32347 'BITS_PER_UNIT * 4'. 32348 32349 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 32350 A C expression for the size in bits of the type 'long long _Fract' 32351 on the target machine. If you don't define this, the default is 32352 'BITS_PER_UNIT * 8'. 32353 32354 -- Macro: SHORT_ACCUM_TYPE_SIZE 32355 A C expression for the size in bits of the type 'short _Accum' on 32356 the target machine. If you don't define this, the default is 32357 'BITS_PER_UNIT * 2'. 32358 32359 -- Macro: ACCUM_TYPE_SIZE 32360 A C expression for the size in bits of the type '_Accum' on the 32361 target machine. If you don't define this, the default is 32362 'BITS_PER_UNIT * 4'. 32363 32364 -- Macro: LONG_ACCUM_TYPE_SIZE 32365 A C expression for the size in bits of the type 'long _Accum' on 32366 the target machine. If you don't define this, the default is 32367 'BITS_PER_UNIT * 8'. 32368 32369 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 32370 A C expression for the size in bits of the type 'long long _Accum' 32371 on the target machine. If you don't define this, the default is 32372 'BITS_PER_UNIT * 16'. 32373 32374 -- Macro: LIBGCC2_GNU_PREFIX 32375 This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target 32376 hook and should be defined if that hook is overriden to be true. 32377 It causes function names in libgcc to be changed to use a '__gnu_' 32378 prefix for their name rather than the default '__'. A port which 32379 uses this macro should also arrange to use 't-gnu-prefix' in the 32380 libgcc 'config.host'. 32381 32382 -- Macro: WIDEST_HARDWARE_FP_SIZE 32383 A C expression for the size in bits of the widest floating-point 32384 format supported by the hardware. If you define this macro, you 32385 must specify a value less than or equal to the value of 32386 'LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 32387 value of 'LONG_DOUBLE_TYPE_SIZE' is the default. 32388 32389 -- Macro: DEFAULT_SIGNED_CHAR 32390 An expression whose value is 1 or 0, according to whether the type 32391 'char' should be signed or unsigned by default. The user can 32392 always override this default with the options '-fsigned-char' and 32393 '-funsigned-char'. 32394 32395 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 32396 This target hook should return true if the compiler should give an 32397 'enum' type only as many bytes as it takes to represent the range 32398 of possible values of that type. It should return false if all 32399 'enum' types should be allocated like 'int'. 32400 32401 The default is to return false. 32402 32403 -- Macro: SIZE_TYPE 32404 A C expression for a string describing the name of the data type to 32405 use for size values. The typedef name 'size_t' is defined using 32406 the contents of the string. 32407 32408 The string can contain more than one keyword. If so, separate them 32409 with spaces, and write first any length keyword, then 'unsigned' if 32410 appropriate, and finally 'int'. The string must exactly match one 32411 of the data type names defined in the function 32412 'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'. 32413 You may not omit 'int' or change the order--that would cause the 32414 compiler to crash on startup. 32415 32416 If you don't define this macro, the default is '"long unsigned 32417 int"'. 32418 32419 -- Macro: SIZETYPE 32420 GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype' 32421 and 'sbitsizetype') for expressions dealing with size. This macro 32422 is a C expression for a string describing the name of the data type 32423 from which the precision of 'sizetype' is extracted. 32424 32425 The string has the same restrictions as 'SIZE_TYPE' string. 32426 32427 If you don't define this macro, the default is 'SIZE_TYPE'. 32428 32429 -- Macro: PTRDIFF_TYPE 32430 A C expression for a string describing the name of the data type to 32431 use for the result of subtracting two pointers. The typedef name 32432 'ptrdiff_t' is defined using the contents of the string. See 32433 'SIZE_TYPE' above for more information. 32434 32435 If you don't define this macro, the default is '"long int"'. 32436 32437 -- Macro: WCHAR_TYPE 32438 A C expression for a string describing the name of the data type to 32439 use for wide characters. The typedef name 'wchar_t' is defined 32440 using the contents of the string. See 'SIZE_TYPE' above for more 32441 information. 32442 32443 If you don't define this macro, the default is '"int"'. 32444 32445 -- Macro: WCHAR_TYPE_SIZE 32446 A C expression for the size in bits of the data type for wide 32447 characters. This is used in 'cpp', which cannot make use of 32448 'WCHAR_TYPE'. 32449 32450 -- Macro: WINT_TYPE 32451 A C expression for a string describing the name of the data type to 32452 use for wide characters passed to 'printf' and returned from 32453 'getwc'. The typedef name 'wint_t' is defined using the contents 32454 of the string. See 'SIZE_TYPE' above for more information. 32455 32456 If you don't define this macro, the default is '"unsigned int"'. 32457 32458 -- Macro: INTMAX_TYPE 32459 A C expression for a string describing the name of the data type 32460 that can represent any value of any standard or extended signed 32461 integer type. The typedef name 'intmax_t' is defined using the 32462 contents of the string. See 'SIZE_TYPE' above for more 32463 information. 32464 32465 If you don't define this macro, the default is the first of 32466 '"int"', '"long int"', or '"long long int"' that has as much 32467 precision as 'long long int'. 32468 32469 -- Macro: UINTMAX_TYPE 32470 A C expression for a string describing the name of the data type 32471 that can represent any value of any standard or extended unsigned 32472 integer type. The typedef name 'uintmax_t' is defined using the 32473 contents of the string. See 'SIZE_TYPE' above for more 32474 information. 32475 32476 If you don't define this macro, the default is the first of 32477 '"unsigned int"', '"long unsigned int"', or '"long long unsigned 32478 int"' that has as much precision as 'long long unsigned int'. 32479 32480 -- Macro: SIG_ATOMIC_TYPE 32481 -- Macro: INT8_TYPE 32482 -- Macro: INT16_TYPE 32483 -- Macro: INT32_TYPE 32484 -- Macro: INT64_TYPE 32485 -- Macro: UINT8_TYPE 32486 -- Macro: UINT16_TYPE 32487 -- Macro: UINT32_TYPE 32488 -- Macro: UINT64_TYPE 32489 -- Macro: INT_LEAST8_TYPE 32490 -- Macro: INT_LEAST16_TYPE 32491 -- Macro: INT_LEAST32_TYPE 32492 -- Macro: INT_LEAST64_TYPE 32493 -- Macro: UINT_LEAST8_TYPE 32494 -- Macro: UINT_LEAST16_TYPE 32495 -- Macro: UINT_LEAST32_TYPE 32496 -- Macro: UINT_LEAST64_TYPE 32497 -- Macro: INT_FAST8_TYPE 32498 -- Macro: INT_FAST16_TYPE 32499 -- Macro: INT_FAST32_TYPE 32500 -- Macro: INT_FAST64_TYPE 32501 -- Macro: UINT_FAST8_TYPE 32502 -- Macro: UINT_FAST16_TYPE 32503 -- Macro: UINT_FAST32_TYPE 32504 -- Macro: UINT_FAST64_TYPE 32505 -- Macro: INTPTR_TYPE 32506 -- Macro: UINTPTR_TYPE 32507 C expressions for the standard types 'sig_atomic_t', 'int8_t', 32508 'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 32509 'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t', 32510 'int_least64_t', 'uint_least8_t', 'uint_least16_t', 32511 'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 32512 'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 32513 'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'. See 32514 'SIZE_TYPE' above for more information. 32515 32516 If any of these macros evaluates to a null pointer, the 32517 corresponding type is not supported; if GCC is configured to 32518 provide '<stdint.h>' in such a case, the header provided may not 32519 conform to C99, depending on the type in question. The defaults 32520 for all of these macros are null pointers. 32521 32522 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 32523 The C++ compiler represents a pointer-to-member-function with a 32524 struct that looks like: 32525 32526 struct { 32527 union { 32528 void (*fn)(); 32529 ptrdiff_t vtable_index; 32530 }; 32531 ptrdiff_t delta; 32532 }; 32533 32534 The C++ compiler must use one bit to indicate whether the function 32535 that will be called through a pointer-to-member-function is 32536 virtual. Normally, we assume that the low-order bit of a function 32537 pointer must always be zero. Then, by ensuring that the 32538 vtable_index is odd, we can distinguish which variant of the union 32539 is in use. But, on some platforms function pointers can be odd, 32540 and so this doesn't work. In that case, we use the low-order bit 32541 of the 'delta' field, and shift the remainder of the 'delta' field 32542 to the left. 32543 32544 GCC will automatically make the right selection about where to 32545 store this bit using the 'FUNCTION_BOUNDARY' setting for your 32546 platform. However, some platforms such as ARM/Thumb have 32547 'FUNCTION_BOUNDARY' set such that functions always start at even 32548 addresses, but the lowest bit of pointers to functions indicate 32549 whether the function at that address is in ARM or Thumb mode. If 32550 this is the case of your architecture, you should define this macro 32551 to 'ptrmemfunc_vbit_in_delta'. 32552 32553 In general, you should not have to define this macro. On 32554 architectures in which function addresses are always even, 32555 according to 'FUNCTION_BOUNDARY', GCC will automatically define 32556 this macro to 'ptrmemfunc_vbit_in_pfn'. 32557 32558 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 32559 Normally, the C++ compiler uses function pointers in vtables. This 32560 macro allows the target to change to use "function descriptors" 32561 instead. Function descriptors are found on targets for whom a 32562 function pointer is actually a small data structure. Normally the 32563 data structure consists of the actual code address plus a data 32564 pointer to which the function's data is relative. 32565 32566 If vtables are used, the value of this macro should be the number 32567 of words that the function descriptor occupies. 32568 32569 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 32570 By default, the vtable entries are void pointers, the so the 32571 alignment is the same as pointer alignment. The value of this 32572 macro specifies the alignment of the vtable entry in bits. It 32573 should be defined only when special alignment is necessary. */ 32574 32575 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 32576 There are a few non-descriptor entries in the vtable at offsets 32577 below zero. If these entries must be padded (say, to preserve the 32578 alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to 32579 the number of words in each data entry. 32580 32581 32582File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 32583 3258418.7 Register Usage 32585=================== 32586 32587This section explains how to describe what registers the target machine 32588has, and how (in general) they can be used. 32589 32590 The description of which registers a specific instruction can use is 32591done with register classes; see *note Register Classes::. For 32592information on using registers to access a stack frame, see *note Frame 32593Registers::. For passing values in registers, see *note Register 32594Arguments::. For returning values in registers, see *note Scalar 32595Return::. 32596 32597* Menu: 32598 32599* Register Basics:: Number and kinds of registers. 32600* Allocation Order:: Order in which registers are allocated. 32601* Values in Registers:: What kinds of values each reg can hold. 32602* Leaf Functions:: Renumbering registers for leaf functions. 32603* Stack Registers:: Handling a register stack such as 80387. 32604 32605 32606File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 32607 3260818.7.1 Basic Characteristics of Registers 32609----------------------------------------- 32610 32611Registers have various characteristics. 32612 32613 -- Macro: FIRST_PSEUDO_REGISTER 32614 Number of hardware registers known to the compiler. They receive 32615 numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo 32616 register's number really is assigned the number 32617 'FIRST_PSEUDO_REGISTER'. 32618 32619 -- Macro: FIXED_REGISTERS 32620 An initializer that says which registers are used for fixed 32621 purposes all throughout the compiled code and are therefore not 32622 available for general allocation. These would include the stack 32623 pointer, the frame pointer (except on machines where that can be 32624 used as a general register when no frame pointer is needed), the 32625 program counter on machines where that is considered one of the 32626 addressable registers, and any other numbered register with a 32627 standard use. 32628 32629 This information is expressed as a sequence of numbers, separated 32630 by commas and surrounded by braces. The Nth number is 1 if 32631 register N is fixed, 0 otherwise. 32632 32633 The table initialized from this macro, and the table initialized by 32634 the following one, may be overridden at run time either 32635 automatically, by the actions of the macro 32636 'CONDITIONAL_REGISTER_USAGE', or by the user with the command 32637 options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'. 32638 32639 -- Macro: CALL_USED_REGISTERS 32640 Like 'FIXED_REGISTERS' but has 1 for each register that is 32641 clobbered (in general) by function calls as well as for fixed 32642 registers. This macro therefore identifies the registers that are 32643 not available for general allocation of values that must live 32644 across function calls. 32645 32646 If a register has 0 in 'CALL_USED_REGISTERS', the compiler 32647 automatically saves it on function entry and restores it on 32648 function exit, if the register is used within the function. 32649 32650 Exactly one of 'CALL_USED_REGISTERS' and 32651 'CALL_REALLY_USED_REGISTERS' must be defined. Modern ports should 32652 define 'CALL_REALLY_USED_REGISTERS'. 32653 32654 -- Macro: CALL_REALLY_USED_REGISTERS 32655 Like 'CALL_USED_REGISTERS' except this macro doesn't require that 32656 the entire set of 'FIXED_REGISTERS' be included. 32657 ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS'). 32658 32659 Exactly one of 'CALL_USED_REGISTERS' and 32660 'CALL_REALLY_USED_REGISTERS' must be defined. Modern ports should 32661 define 'CALL_REALLY_USED_REGISTERS'. 32662 32663 -- Target Hook: const predefined_function_abi & TARGET_FNTYPE_ABI 32664 (const_tree TYPE) 32665 Return the ABI used by a function with type TYPE; see the 32666 definition of 'predefined_function_abi' for details of the ABI 32667 descriptor. Targets only need to define this hook if they support 32668 interoperability between several ABIs in the same translation unit. 32669 32670 -- Target Hook: const predefined_function_abi & TARGET_INSN_CALLEE_ABI 32671 (const rtx_insn *INSN) 32672 This hook returns a description of the ABI used by the target of 32673 call instruction INSN; see the definition of 32674 'predefined_function_abi' for details of the ABI descriptor. Only 32675 the global function 'insn_callee_abi' should call this hook 32676 directly. 32677 32678 Targets only need to define this hook if they support 32679 interoperability between several ABIs in the same translation unit. 32680 32681 -- Target Hook: bool TARGET_HARD_REGNO_CALL_PART_CLOBBERED (unsigned 32682 int ABI_ID, unsigned int REGNO, machine_mode MODE) 32683 ABIs usually specify that calls must preserve the full contents of 32684 a particular register, or that calls can alter any part of a 32685 particular register. This information is captured by the target 32686 macro 'CALL_REALLY_USED_REGISTERS'. However, some ABIs specify 32687 that calls must preserve certain bits of a particular register but 32688 can alter others. This hook should return true if this applies to 32689 at least one of the registers in '(reg:MODE REGNO)', and if as a 32690 result the call would alter part of the MODE value. For example, 32691 if a call preserves the low 32 bits of a 64-bit hard register REGNO 32692 but can clobber the upper 32 bits, this hook should return true for 32693 a 64-bit mode but false for a 32-bit mode. 32694 32695 The value of ABI_ID comes from the 'predefined_function_abi' 32696 structure that describes the ABI of the call; see the definition of 32697 the structure for more details. If (as is usual) the target uses 32698 the same ABI for all functions in a translation unit, ABI_ID is 32699 always 0. 32700 32701 The default implementation returns false, which is correct for 32702 targets that don't have partly call-clobbered registers. 32703 32704 -- Target Hook: const char * TARGET_GET_MULTILIB_ABI_NAME (void) 32705 This hook returns name of multilib ABI name. 32706 32707 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void) 32708 This hook may conditionally modify five variables 'fixed_regs', 32709 'call_used_regs', 'global_regs', 'reg_names', and 32710 'reg_class_contents', to take into account any dependence of these 32711 register sets on target flags. The first three of these are of 32712 type 'char []' (interpreted as boolean vectors). 'global_regs' is 32713 a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'. 32714 Before the macro is called, 'fixed_regs', 'call_used_regs', 32715 'reg_class_contents', and 'reg_names' have been initialized from 32716 'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and 32717 'REGISTER_NAMES', respectively. 'global_regs' has been cleared, 32718 and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG' 32719 command options have been applied. 32720 32721 If the usage of an entire class of registers depends on the target 32722 flags, you may indicate this to GCC by using this macro to modify 32723 'fixed_regs' and 'call_used_regs' to 1 for each of the registers in 32724 the classes which should not be used by GCC. Also make 32725 'define_register_constraint's return 'NO_REGS' for constraints that 32726 shouldn't be used. 32727 32728 (However, if this class is not included in 'GENERAL_REGS' and all 32729 of the insn patterns whose constraints permit this class are 32730 controlled by target switches, then GCC will automatically avoid 32731 using these registers when the target switches are opposed to 32732 them.) 32733 32734 -- Macro: INCOMING_REGNO (OUT) 32735 Define this macro if the target machine has register windows. This 32736 C expression returns the register number as seen by the called 32737 function corresponding to the register number OUT as seen by the 32738 calling function. Return OUT if register number OUT is not an 32739 outbound register. 32740 32741 -- Macro: OUTGOING_REGNO (IN) 32742 Define this macro if the target machine has register windows. This 32743 C expression returns the register number as seen by the calling 32744 function corresponding to the register number IN as seen by the 32745 called function. Return IN if register number IN is not an inbound 32746 register. 32747 32748 -- Macro: LOCAL_REGNO (REGNO) 32749 Define this macro if the target machine has register windows. This 32750 C expression returns true if the register is call-saved but is in 32751 the register window. Unlike most call-saved registers, such 32752 registers need not be explicitly restored on function exit or 32753 during non-local gotos. 32754 32755 -- Macro: PC_REGNUM 32756 If the program counter has a register number, define this as that 32757 register number. Otherwise, do not define it. 32758 32759 32760File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 32761 3276218.7.2 Order of Allocation of Registers 32763--------------------------------------- 32764 32765Registers are allocated in order. 32766 32767 -- Macro: REG_ALLOC_ORDER 32768 If defined, an initializer for a vector of integers, containing the 32769 numbers of hard registers in the order in which GCC should prefer 32770 to use them (from most preferred to least). 32771 32772 If this macro is not defined, registers are used lowest numbered 32773 first (all else being equal). 32774 32775 One use of this macro is on machines where the highest numbered 32776 registers must always be saved and the save-multiple-registers 32777 instruction supports only sequences of consecutive registers. On 32778 such machines, define 'REG_ALLOC_ORDER' to be an initializer that 32779 lists the highest numbered allocable register first. 32780 32781 -- Macro: ADJUST_REG_ALLOC_ORDER 32782 A C statement (sans semicolon) to choose the order in which to 32783 allocate hard registers for pseudo-registers local to a basic 32784 block. 32785 32786 Store the desired register order in the array 'reg_alloc_order'. 32787 Element 0 should be the register to allocate first; element 1, the 32788 next register; and so on. 32789 32790 The macro body should not assume anything about the contents of 32791 'reg_alloc_order' before execution of the macro. 32792 32793 On most machines, it is not necessary to define this macro. 32794 32795 -- Macro: HONOR_REG_ALLOC_ORDER 32796 Normally, IRA tries to estimate the costs for saving a register in 32797 the prologue and restoring it in the epilogue. This discourages it 32798 from using call-saved registers. If a machine wants to ensure that 32799 IRA allocates registers in the order given by REG_ALLOC_ORDER even 32800 if some call-saved registers appear earlier than call-used ones, 32801 then define this macro as a C expression to nonzero. Default is 0. 32802 32803 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 32804 In some case register allocation order is not enough for the 32805 Integrated Register Allocator (IRA) to generate a good code. If 32806 this macro is defined, it should return a floating point value 32807 based on REGNO. The cost of using REGNO for a pseudo will be 32808 increased by approximately the pseudo's usage frequency times the 32809 value returned by this macro. Not defining this macro is 32810 equivalent to having it always return '0.0'. 32811 32812 On most machines, it is not necessary to define this macro. 32813 32814 32815File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 32816 3281718.7.3 How Values Fit in Registers 32818---------------------------------- 32819 32820This section discusses the macros that describe which kinds of values 32821(specifically, which machine modes) each register can hold, and how many 32822consecutive registers are needed for a given mode. 32823 32824 -- Target Hook: unsigned int TARGET_HARD_REGNO_NREGS (unsigned int 32825 REGNO, machine_mode MODE) 32826 This hook returns the number of consecutive hard registers, 32827 starting at register number REGNO, required to hold a value of mode 32828 MODE. This hook must never return zero, even if a register cannot 32829 hold the requested mode - indicate that with 32830 'TARGET_HARD_REGNO_MODE_OK' and/or 'TARGET_CAN_CHANGE_MODE_CLASS' 32831 instead. 32832 32833 The default definition returns the number of words in MODE. 32834 32835 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 32836 A C expression that is nonzero if a value of mode MODE, stored in 32837 memory, ends with padding that causes it to take up more space than 32838 in registers starting at register number REGNO (as determined by 32839 multiplying GCC's notion of the size of the register when 32840 containing this mode by the number of registers returned by 32841 'TARGET_HARD_REGNO_NREGS'). By default this is zero. 32842 32843 For example, if a floating-point value is stored in three 32-bit 32844 registers but takes up 128 bits in memory, then this would be 32845 nonzero. 32846 32847 This macros only needs to be defined if there are cases where 32848 'subreg_get_info' would otherwise wrongly determine that a 'subreg' 32849 can be represented by an offset to the register number, when in 32850 fact such a 'subreg' would contain some of the padding not stored 32851 in registers and so not be representable. 32852 32853 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 32854 For values of REGNO and MODE for which 32855 'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 32856 returning the greater number of registers required to hold the 32857 value including any padding. In the example above, the value would 32858 be four. 32859 32860 -- Macro: REGMODE_NATURAL_SIZE (MODE) 32861 Define this macro if the natural size of registers that hold values 32862 of mode MODE is not the word size. It is a C expression that 32863 should give the natural size in bytes for the specified mode. It 32864 is used by the register allocator to try to optimize its results. 32865 This happens for example on SPARC 64-bit where the natural size of 32866 floating-point registers is still 32-bit. 32867 32868 -- Target Hook: bool TARGET_HARD_REGNO_MODE_OK (unsigned int REGNO, 32869 machine_mode MODE) 32870 This hook returns true if it is permissible to store a value of 32871 mode MODE in hard register number REGNO (or in several registers 32872 starting with that one). The default definition returns true 32873 unconditionally. 32874 32875 You need not include code to check for the numbers of fixed 32876 registers, because the allocation mechanism considers them to be 32877 always occupied. 32878 32879 On some machines, double-precision values must be kept in even/odd 32880 register pairs. You can implement that by defining this hook to 32881 reject odd register numbers for such modes. 32882 32883 The minimum requirement for a mode to be OK in a register is that 32884 the 'movMODE' instruction pattern support moves between the 32885 register and other hard register in the same class and that moving 32886 a value into the register and back out not alter it. 32887 32888 Since the same instruction used to move 'word_mode' will work for 32889 all narrower integer modes, it is not necessary on any machine for 32890 this hook to distinguish between these modes, provided you define 32891 patterns 'movhi', etc., to take advantage of this. This is useful 32892 because of the interaction between 'TARGET_HARD_REGNO_MODE_OK' and 32893 'TARGET_MODES_TIEABLE_P'; it is very desirable for all integer 32894 modes to be tieable. 32895 32896 Many machines have special registers for floating point arithmetic. 32897 Often people assume that floating point machine modes are allowed 32898 only in floating point registers. This is not true. Any registers 32899 that can hold integers can safely _hold_ a floating point machine 32900 mode, whether or not floating arithmetic can be done on it in those 32901 registers. Integer move instructions can be used to move the 32902 values. 32903 32904 On some machines, though, the converse is true: fixed-point machine 32905 modes may not go in floating registers. This is true if the 32906 floating registers normalize any value stored in them, because 32907 storing a non-floating value there would garble it. In this case, 32908 'TARGET_HARD_REGNO_MODE_OK' should reject fixed-point machine modes 32909 in floating registers. But if the floating registers do not 32910 automatically normalize, if you can store any bit pattern in one 32911 and retrieve it unchanged without a trap, then any machine mode may 32912 go in a floating register, so you can define this hook to say so. 32913 32914 The primary significance of special floating registers is rather 32915 that they are the registers acceptable in floating point arithmetic 32916 instructions. However, this is of no concern to 32917 'TARGET_HARD_REGNO_MODE_OK'. You handle it by writing the proper 32918 constraints for those instructions. 32919 32920 On some machines, the floating registers are especially slow to 32921 access, so that it is better to store a value in a stack frame than 32922 in such a register if floating point arithmetic is not being done. 32923 As long as the floating registers are not in class 'GENERAL_REGS', 32924 they will not be used unless some pattern's constraint asks for 32925 one. 32926 32927 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 32928 A C expression that is nonzero if it is OK to rename a hard 32929 register FROM to another hard register TO. 32930 32931 One common use of this macro is to prevent renaming of a register 32932 to another register that is not saved by a prologue in an interrupt 32933 handler. 32934 32935 The default is always nonzero. 32936 32937 -- Target Hook: bool TARGET_MODES_TIEABLE_P (machine_mode MODE1, 32938 machine_mode MODE2) 32939 This hook returns true if a value of mode MODE1 is accessible in 32940 mode MODE2 without copying. 32941 32942 If 'TARGET_HARD_REGNO_MODE_OK (R, MODE1)' and 32943 'TARGET_HARD_REGNO_MODE_OK (R, MODE2)' are always the same for any 32944 R, then 'TARGET_MODES_TIEABLE_P (MODE1, MODE2)' should be true. If 32945 they differ for any R, you should define this hook to return false 32946 unless some other mechanism ensures the accessibility of the value 32947 in a narrower mode. 32948 32949 You should define this hook to return true in as many cases as 32950 possible since doing so will allow GCC to perform better register 32951 allocation. The default definition returns true unconditionally. 32952 32953 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 32954 This target hook should return 'true' if it is OK to use a hard 32955 register REGNO as scratch reg in peephole2. 32956 32957 One common use of this macro is to prevent using of a register that 32958 is not saved by a prologue in an interrupt handler. 32959 32960 The default version of this hook always returns 'true'. 32961 32962 -- Macro: AVOID_CCMODE_COPIES 32963 Define this macro if the compiler should avoid copies to/from 32964 'CCmode' registers. You should only define this macro if support 32965 for copying to/from 'CCmode' is incomplete. 32966 32967 32968File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 32969 3297018.7.4 Handling Leaf Functions 32971------------------------------ 32972 32973On some machines, a leaf function (i.e., one which makes no calls) can 32974run more efficiently if it does not make its own register window. Often 32975this means it is required to receive its arguments in the registers 32976where they are passed by the caller, instead of the registers where they 32977would normally arrive. 32978 32979 The special treatment for leaf functions generally applies only when 32980other conditions are met; for example, often they may use only those 32981registers for its own variables and temporaries. We use the term "leaf 32982function" to mean a function that is suitable for this special handling, 32983so that functions with no calls are not necessarily "leaf functions". 32984 32985 GCC assigns register numbers before it knows whether the function is 32986suitable for leaf function treatment. So it needs to renumber the 32987registers in order to output a leaf function. The following macros 32988accomplish this. 32989 32990 -- Macro: LEAF_REGISTERS 32991 Name of a char vector, indexed by hard register number, which 32992 contains 1 for a register that is allowable in a candidate for leaf 32993 function treatment. 32994 32995 If leaf function treatment involves renumbering the registers, then 32996 the registers marked here should be the ones before 32997 renumbering--those that GCC would ordinarily allocate. The 32998 registers which will actually be used in the assembler code, after 32999 renumbering, should not be marked with 1 in this vector. 33000 33001 Define this macro only if the target machine offers a way to 33002 optimize the treatment of leaf functions. 33003 33004 -- Macro: LEAF_REG_REMAP (REGNO) 33005 A C expression whose value is the register number to which REGNO 33006 should be renumbered, when a function is treated as a leaf 33007 function. 33008 33009 If REGNO is a register number which should not appear in a leaf 33010 function before renumbering, then the expression should yield -1, 33011 which will cause the compiler to abort. 33012 33013 Define this macro only if the target machine offers a way to 33014 optimize the treatment of leaf functions, and registers need to be 33015 renumbered to do this. 33016 33017 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must 33018usually treat leaf functions specially. They can test the C variable 33019'current_function_is_leaf' which is nonzero for leaf functions. 33020'current_function_is_leaf' is set prior to local register allocation and 33021is valid for the remaining compiler passes. They can also test the C 33022variable 'current_function_uses_only_leaf_regs' which is nonzero for 33023leaf functions which only use leaf registers. 33024'current_function_uses_only_leaf_regs' is valid after all passes that 33025modify the instructions have been run and is only useful if 33026'LEAF_REGISTERS' is defined. 33027 33028 33029File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 33030 3303118.7.5 Registers That Form a Stack 33032---------------------------------- 33033 33034There are special features to handle computers where some of the 33035"registers" form a stack. Stack registers are normally written by 33036pushing onto the stack, and are numbered relative to the top of the 33037stack. 33038 33039 Currently, GCC can only handle one group of stack-like registers, and 33040they must be consecutively numbered. Furthermore, the existing support 33041for stack-like registers is specific to the 80387 floating point 33042coprocessor. If you have a new architecture that uses stack-like 33043registers, you will need to do substantial work on 'reg-stack.c' and 33044write your machine description to cooperate with it, as well as defining 33045these macros. 33046 33047 -- Macro: STACK_REGS 33048 Define this if the machine has any stack-like registers. 33049 33050 -- Macro: STACK_REG_COVER_CLASS 33051 This is a cover class containing the stack registers. Define this 33052 if the machine has any stack-like registers. 33053 33054 -- Macro: FIRST_STACK_REG 33055 The number of the first stack-like register. This one is the top 33056 of the stack. 33057 33058 -- Macro: LAST_STACK_REG 33059 The number of the last stack-like register. This one is the bottom 33060 of the stack. 33061 33062 33063File: gccint.info, Node: Register Classes, Next: Stack and Calling, Prev: Registers, Up: Target Macros 33064 3306518.8 Register Classes 33066===================== 33067 33068On many machines, the numbered registers are not all equivalent. For 33069example, certain registers may not be allowed for indexed addressing; 33070certain registers may not be allowed in some instructions. These 33071machine restrictions are described to the compiler using "register 33072classes". 33073 33074 You define a number of register classes, giving each one a name and 33075saying which of the registers belong to it. Then you can specify 33076register classes that are allowed as operands to particular instruction 33077patterns. 33078 33079 In general, each register will belong to several classes. In fact, one 33080class must be named 'ALL_REGS' and contain all the registers. Another 33081class must be named 'NO_REGS' and contain no registers. Often the union 33082of two classes will be another class; however, this is not required. 33083 33084 One of the classes must be named 'GENERAL_REGS'. There is nothing 33085terribly special about the name, but the operand constraint letters 'r' 33086and 'g' specify this class. If 'GENERAL_REGS' is the same as 33087'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'. 33088 33089 Order the classes so that if class X is contained in class Y then X has 33090a lower class number than Y. 33091 33092 The way classes other than 'GENERAL_REGS' are specified in operand 33093constraints is through machine-dependent operand constraint letters. 33094You can define such letters to correspond to various classes, then use 33095them in operand constraints. 33096 33097 You must define the narrowest register classes for allocatable 33098registers, so that each class either has no subclasses, or that for some 33099mode, the move cost between registers within the class is cheaper than 33100moving a register in the class to or from memory (*note Costs::). 33101 33102 You should define a class for the union of two classes whenever some 33103instruction allows both classes. For example, if an instruction allows 33104either a floating point (coprocessor) register or a general register for 33105a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS' 33106which includes both of them. Otherwise you will get suboptimal code, or 33107even internal compiler errors when reload cannot find a register in the 33108class computed via 'reg_class_subunion'. 33109 33110 You must also specify certain redundant information about the register 33111classes: for each class, which classes contain it and which ones are 33112contained in it; for each pair of classes, the largest class contained 33113in their union. 33114 33115 When a value occupying several consecutive registers is expected in a 33116certain class, all the registers used must belong to that class. 33117Therefore, register classes cannot be used to enforce a requirement for 33118a register pair to start with an even-numbered register. The way to 33119specify this requirement is with 'TARGET_HARD_REGNO_MODE_OK'. 33120 33121 Register classes used for input-operands of bitwise-and or shift 33122instructions have a special requirement: each such class must have, for 33123each fixed-point machine mode, a subclass whose registers can transfer 33124that mode to or from memory. For example, on some machines, the 33125operations for single-byte values ('QImode') are limited to certain 33126registers. When this is so, each register class that is used in a 33127bitwise-and or shift instruction must have a subclass consisting of 33128registers from which single-byte values can be loaded or stored. This 33129is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to 33130return. 33131 33132 -- Data type: enum reg_class 33133 An enumerated type that must be defined with all the register class 33134 names as enumerated values. 'NO_REGS' must be first. 'ALL_REGS' 33135 must be the last register class, followed by one more enumerated 33136 value, 'LIM_REG_CLASSES', which is not a register class but rather 33137 tells how many classes there are. 33138 33139 Each register class has a number, which is the value of casting the 33140 class name to type 'int'. The number serves as an index in many of 33141 the tables described below. 33142 33143 -- Macro: N_REG_CLASSES 33144 The number of distinct register classes, defined as follows: 33145 33146 #define N_REG_CLASSES (int) LIM_REG_CLASSES 33147 33148 -- Macro: REG_CLASS_NAMES 33149 An initializer containing the names of the register classes as C 33150 string constants. These names are used in writing some of the 33151 debugging dumps. 33152 33153 -- Macro: REG_CLASS_CONTENTS 33154 An initializer containing the contents of the register classes, as 33155 integers which are bit masks. The Nth integer specifies the 33156 contents of class N. The way the integer MASK is interpreted is 33157 that register R is in the class if 'MASK & (1 << R)' is 1. 33158 33159 When the machine has more than 32 registers, an integer does not 33160 suffice. Then the integers are replaced by sub-initializers, 33161 braced groupings containing several integers. Each sub-initializer 33162 must be suitable as an initializer for the type 'HARD_REG_SET' 33163 which is defined in 'hard-reg-set.h'. In this situation, the first 33164 integer in each sub-initializer corresponds to registers 0 through 33165 31, the second integer to registers 32 through 63, and so on. 33166 33167 -- Macro: REGNO_REG_CLASS (REGNO) 33168 A C expression whose value is a register class containing hard 33169 register REGNO. In general there is more than one such class; 33170 choose a class which is "minimal", meaning that no smaller class 33171 also contains the register. 33172 33173 -- Macro: BASE_REG_CLASS 33174 A macro whose definition is the name of the class to which a valid 33175 base register must belong. A base register is one used in an 33176 address which is the register value plus a displacement. 33177 33178 -- Macro: MODE_BASE_REG_CLASS (MODE) 33179 This is a variation of the 'BASE_REG_CLASS' macro which allows the 33180 selection of a base register in a mode dependent manner. If MODE 33181 is VOIDmode then it should return the same value as 33182 'BASE_REG_CLASS'. 33183 33184 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 33185 A C expression whose value is the register class to which a valid 33186 base register must belong in order to be used in a base plus index 33187 register address. You should define this macro if base plus index 33188 addresses have different requirements than other base register 33189 uses. 33190 33191 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE, 33192 INDEX_CODE) 33193 A C expression whose value is the register class to which a valid 33194 base register for a memory reference in mode MODE to address space 33195 ADDRESS_SPACE must belong. OUTER_CODE and INDEX_CODE define the 33196 context in which the base register occurs. OUTER_CODE is the code 33197 of the immediately enclosing expression ('MEM' for the top level of 33198 an address, 'ADDRESS' for something that occurs in an 33199 'address_operand'). INDEX_CODE is the code of the corresponding 33200 index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise. 33201 33202 -- Macro: INDEX_REG_CLASS 33203 A macro whose definition is the name of the class to which a valid 33204 index register must belong. An index register is one used in an 33205 address where its value is either multiplied by a scale factor or 33206 added to another register (as well as added to a displacement). 33207 33208 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 33209 A C expression which is nonzero if register number NUM is suitable 33210 for use as a base register in operand addresses. 33211 33212 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 33213 A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that 33214 that expression may examine the mode of the memory reference in 33215 MODE. You should define this macro if the mode of the memory 33216 reference affects whether a register may be used as a base 33217 register. If you define this macro, the compiler will use it 33218 instead of 'REGNO_OK_FOR_BASE_P'. The mode may be 'VOIDmode' for 33219 addresses that appear outside a 'MEM', i.e., as an 33220 'address_operand'. 33221 33222 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 33223 A C expression which is nonzero if register number NUM is suitable 33224 for use as a base register in base plus index operand addresses, 33225 accessing memory in mode MODE. It may be either a suitable hard 33226 register or a pseudo register that has been allocated such a hard 33227 register. You should define this macro if base plus index 33228 addresses have different requirements than other base register 33229 uses. 33230 33231 Use of this macro is deprecated; please use the more general 33232 'REGNO_MODE_CODE_OK_FOR_BASE_P'. 33233 33234 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE, 33235 OUTER_CODE, INDEX_CODE) 33236 A C expression which is nonzero if register number NUM is suitable 33237 for use as a base register in operand addresses, accessing memory 33238 in mode MODE in address space ADDRESS_SPACE. This is similar to 33239 'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine 33240 the context in which the register appears in the memory reference. 33241 OUTER_CODE is the code of the immediately enclosing expression 33242 ('MEM' if at the top level of the address, 'ADDRESS' for something 33243 that occurs in an 'address_operand'). INDEX_CODE is the code of 33244 the corresponding index expression if OUTER_CODE is 'PLUS'; 33245 'SCRATCH' otherwise. The mode may be 'VOIDmode' for addresses that 33246 appear outside a 'MEM', i.e., as an 'address_operand'. 33247 33248 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 33249 A C expression which is nonzero if register number NUM is suitable 33250 for use as an index register in operand addresses. It may be 33251 either a suitable hard register or a pseudo register that has been 33252 allocated such a hard register. 33253 33254 The difference between an index register and a base register is 33255 that the index register may be scaled. If an address involves the 33256 sum of two registers, neither one of them scaled, then either one 33257 may be labeled the "base" and the other the "index"; but whichever 33258 labeling is used must fit the machine's constraints of which 33259 registers may serve in each capacity. The compiler will try both 33260 labelings, looking for one that is valid, and will reload one or 33261 both registers only if neither labeling works. 33262 33263 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t 33264 RCLASS) 33265 A target hook that places additional preference on the register 33266 class to use when it is necessary to rename a register in class 33267 RCLASS to another class, or perhaps NO_REGS, if no preferred 33268 register class is found or hook 'preferred_rename_class' is not 33269 implemented. Sometimes returning a more restrictive class makes 33270 better code. For example, on ARM, thumb-2 instructions using 33271 'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'. 33272 By returning 'LO_REGS' from 'preferred_rename_class', code size can 33273 be reduced. 33274 33275 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X, 33276 reg_class_t RCLASS) 33277 A target hook that places additional restrictions on the register 33278 class to use when it is necessary to copy value X into a register 33279 in class RCLASS. The value is a register class; perhaps RCLASS, or 33280 perhaps another, smaller class. 33281 33282 The default version of this hook always returns value of 'rclass' 33283 argument. 33284 33285 Sometimes returning a more restrictive class makes better code. 33286 For example, on the 68000, when X is an integer constant that is in 33287 range for a 'moveq' instruction, the value of this macro is always 33288 'DATA_REGS' as long as RCLASS includes the data registers. 33289 Requiring a data register guarantees that a 'moveq' will be used. 33290 33291 One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return 33292 RCLASS is if X is a legitimate constant which cannot be loaded into 33293 some register class. By returning 'NO_REGS' you can force X into a 33294 memory location. For example, rs6000 can load immediate values 33295 into general-purpose registers, but does not have an instruction 33296 for loading an immediate value into a floating-point register, so 33297 'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 33298 floating-point constant. If the constant can't be loaded into any 33299 kind of register, code generation will be better if 33300 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 33301 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 33302 33303 If an insn has pseudos in it after register allocation, reload will 33304 go through the alternatives and call repeatedly 33305 'TARGET_PREFERRED_RELOAD_CLASS' to find the best one. Returning 33306 'NO_REGS', in this case, makes reload add a '!' in front of the 33307 constraint: the x86 back-end uses this feature to discourage usage 33308 of 387 registers when math is done in the SSE registers (and vice 33309 versa). 33310 33311 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 33312 A C expression that places additional restrictions on the register 33313 class to use when it is necessary to copy value X into a register 33314 in class CLASS. The value is a register class; perhaps CLASS, or 33315 perhaps another, smaller class. On many machines, the following 33316 definition is safe: 33317 33318 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 33319 33320 Sometimes returning a more restrictive class makes better code. 33321 For example, on the 68000, when X is an integer constant that is in 33322 range for a 'moveq' instruction, the value of this macro is always 33323 'DATA_REGS' as long as CLASS includes the data registers. 33324 Requiring a data register guarantees that a 'moveq' will be used. 33325 33326 One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if 33327 X is a legitimate constant which cannot be loaded into some 33328 register class. By returning 'NO_REGS' you can force X into a 33329 memory location. For example, rs6000 can load immediate values 33330 into general-purpose registers, but does not have an instruction 33331 for loading an immediate value into a floating-point register, so 33332 'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 33333 floating-point constant. If the constant cannot be loaded into any 33334 kind of register, code generation will be better if 33335 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 33336 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 33337 33338 If an insn has pseudos in it after register allocation, reload will 33339 go through the alternatives and call repeatedly 33340 'PREFERRED_RELOAD_CLASS' to find the best one. Returning 33341 'NO_REGS', in this case, makes reload add a '!' in front of the 33342 constraint: the x86 back-end uses this feature to discourage usage 33343 of 387 registers when math is done in the SSE registers (and vice 33344 versa). 33345 33346 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 33347 X, reg_class_t RCLASS) 33348 Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads 33349 instead of input reloads. 33350 33351 The default version of this hook always returns value of 'rclass' 33352 argument. 33353 33354 You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to 33355 discourage reload from using some alternatives, like 33356 'TARGET_PREFERRED_RELOAD_CLASS'. 33357 33358 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 33359 A C expression that places additional restrictions on the register 33360 class to use when it is necessary to be able to hold a value of 33361 mode MODE in a reload register for which class CLASS would 33362 ordinarily be used. 33363 33364 Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when 33365 there are certain modes that simply cannot go in certain reload 33366 classes. 33367 33368 The value is a register class; perhaps CLASS, or perhaps another, 33369 smaller class. 33370 33371 Don't define this macro unless the target machine has limitations 33372 which require the macro to do something nontrivial. 33373 33374 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X, 33375 reg_class_t RELOAD_CLASS, machine_mode RELOAD_MODE, 33376 secondary_reload_info *SRI) 33377 Many machines have some registers that cannot be copied directly to 33378 or from memory or even from other types of registers. An example 33379 is the 'MQ' register, which on most machines, can only be copied to 33380 or from general registers, but not memory. Below, we shall be 33381 using the term 'intermediate register' when a move operation cannot 33382 be performed directly, but has to be done by copying the source 33383 into the intermediate register first, and then copying the 33384 intermediate register to the destination. An intermediate register 33385 always has the same mode as source and destination. Since it holds 33386 the actual value being copied, reload might apply optimizations to 33387 re-use an intermediate register and eliding the copy from the 33388 source when it can determine that the intermediate register still 33389 holds the required value. 33390 33391 Another kind of secondary reload is required on some machines which 33392 allow copying all registers to and from memory, but require a 33393 scratch register for stores to some memory locations (e.g., those 33394 with symbolic address on the RT, and those with certain symbolic 33395 address on the SPARC when compiling PIC). Scratch registers need 33396 not have the same mode as the value being copied, and usually hold 33397 a different value than that being copied. Special patterns in the 33398 md file are needed to describe how the copy is performed with the 33399 help of the scratch register; these patterns also describe the 33400 number, register class(es) and mode(s) of the scratch register(s). 33401 33402 In some cases, both an intermediate and a scratch register are 33403 required. 33404 33405 For input reloads, this target hook is called with nonzero IN_P, 33406 and X is an rtx that needs to be copied to a register of class 33407 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 33408 is called with zero IN_P, and a register of class RELOAD_CLASS 33409 needs to be copied to rtx X in RELOAD_MODE. 33410 33411 If copying a register of RELOAD_CLASS from/to X requires an 33412 intermediate register, the hook 'secondary_reload' should return 33413 the register class required for this intermediate register. If no 33414 intermediate register is required, it should return NO_REGS. If 33415 more than one intermediate register is required, describe the one 33416 that is closest in the copy chain to the reload register. 33417 33418 If scratch registers are needed, you also have to describe how to 33419 perform the copy from/to the reload register to/from this closest 33420 intermediate register. Or if no intermediate register is required, 33421 but still a scratch register is needed, describe the copy from/to 33422 the reload register to/from the reload operand X. 33423 33424 You do this by setting 'sri->icode' to the instruction code of a 33425 pattern in the md file which performs the move. Operands 0 and 1 33426 are the output and input of this copy, respectively. Operands from 33427 operand 2 onward are for scratch operands. These scratch operands 33428 must have a mode, and a single-register-class output constraint. 33429 33430 When an intermediate register is used, the 'secondary_reload' hook 33431 will be called again to determine how to copy the intermediate 33432 register to/from the reload operand X, so your hook must also have 33433 code to handle the register class of the intermediate operand. 33434 33435 X might be a pseudo-register or a 'subreg' of a pseudo-register, 33436 which could either be in a hard register or in memory. Use 33437 'true_regnum' to find out; it will return -1 if the pseudo is in 33438 memory and the hard register number if it is in a register. 33439 33440 Scratch operands in memory (constraint '"=m"' / '"=&m"') are 33441 currently not supported. For the time being, you will have to 33442 continue to use 'TARGET_SECONDARY_MEMORY_NEEDED' for that purpose. 33443 33444 'copy_cost' also uses this target hook to find out how values are 33445 copied. If you want it to include some extra cost for the need to 33446 allocate (a) scratch register(s), set 'sri->extra_cost' to the 33447 additional cost. Or if two dependent moves are supposed to have a 33448 lower cost than the sum of the individual moves due to expected 33449 fortuitous scheduling and/or special forwarding logic, you can set 33450 'sri->extra_cost' to a negative amount. 33451 33452 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 33453 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 33454 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 33455 These macros are obsolete, new ports should use the target hook 33456 'TARGET_SECONDARY_RELOAD' instead. 33457 33458 These are obsolete macros, replaced by the 33459 'TARGET_SECONDARY_RELOAD' target hook. Older ports still define 33460 these macros to indicate to the reload phase that it may need to 33461 allocate at least one register for a reload in addition to the 33462 register to contain the data. Specifically, if copying X to a 33463 register CLASS in MODE requires an intermediate register, you were 33464 supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the 33465 largest register class all of whose registers can be used as 33466 intermediate registers or scratch registers. 33467 33468 If copying a register CLASS in MODE to X requires an intermediate 33469 or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 33470 to be defined be defined to return the largest register class 33471 required. If the requirements for input and output reloads were 33472 the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used 33473 instead of defining both macros identically. 33474 33475 The values returned by these macros are often 'GENERAL_REGS'. 33476 Return 'NO_REGS' if no spare register is needed; i.e., if X can be 33477 directly copied to or from a register of CLASS in MODE without 33478 requiring a scratch register. Do not define this macro if it would 33479 always return 'NO_REGS'. 33480 33481 If a scratch register is required (either with or without an 33482 intermediate register), you were supposed to define patterns for 33483 'reload_inM' or 'reload_outM', as required (*note Standard Names::. 33484 These patterns, which were normally implemented with a 33485 'define_expand', should be similar to the 'movM' patterns, except 33486 that operand 2 is the scratch register. 33487 33488 These patterns need constraints for the reload register and scratch 33489 register that contain a single register class. If the original 33490 reload register (whose class is CLASS) can meet the constraint 33491 given in the pattern, the value returned by these macros is used 33492 for the class of the scratch register. Otherwise, two additional 33493 reload registers are required. Their classes are obtained from the 33494 constraints in the insn pattern. 33495 33496 X might be a pseudo-register or a 'subreg' of a pseudo-register, 33497 which could either be in a hard register or in memory. Use 33498 'true_regnum' to find out; it will return -1 if the pseudo is in 33499 memory and the hard register number if it is in a register. 33500 33501 These macros should not be used in the case where a particular 33502 class of registers can only be copied to memory and not to another 33503 class of registers. In that case, secondary reload registers are 33504 not needed and would not be helpful. Instead, a stack location 33505 must be used to perform the copy and the 'movM' pattern should use 33506 memory as an intermediate storage. This case often occurs between 33507 floating-point and general registers. 33508 33509 -- Target Hook: bool TARGET_SECONDARY_MEMORY_NEEDED (machine_mode MODE, 33510 reg_class_t CLASS1, reg_class_t CLASS2) 33511 Certain machines have the property that some registers cannot be 33512 copied to some other registers without using memory. Define this 33513 hook on those machines to return true if objects of mode M in 33514 registers of CLASS1 can only be copied to registers of class CLASS2 33515 by storing a register of CLASS1 into memory and loading that memory 33516 location into a register of CLASS2. The default definition returns 33517 false for all inputs. 33518 33519 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 33520 Normally when 'TARGET_SECONDARY_MEMORY_NEEDED' is defined, the 33521 compiler allocates a stack slot for a memory location needed for 33522 register copies. If this macro is defined, the compiler instead 33523 uses the memory location defined by this macro. 33524 33525 Do not define this macro if you do not define 33526 'TARGET_SECONDARY_MEMORY_NEEDED'. 33527 33528 -- Target Hook: machine_mode TARGET_SECONDARY_MEMORY_NEEDED_MODE 33529 (machine_mode MODE) 33530 If 'TARGET_SECONDARY_MEMORY_NEEDED' tells the compiler to use 33531 memory when moving between two particular registers of mode MODE, 33532 this hook specifies the mode that the memory should have. 33533 33534 The default depends on 'TARGET_LRA_P'. Without LRA, the default is 33535 to use a word-sized mode for integral modes that are smaller than a 33536 a word. This is right thing to do on most machines because it 33537 ensures that all bits of the register are copied and prevents 33538 accesses to the registers in a narrower mode, which some machines 33539 prohibit for floating-point registers. 33540 33541 However, this default behavior is not correct on some machines, 33542 such as the DEC Alpha, that store short integers in floating-point 33543 registers differently than in integer registers. On those 33544 machines, the default widening will not work correctly and you must 33545 define this hook to suppress that widening in some cases. See the 33546 file 'alpha.c' for details. 33547 33548 With LRA, the default is to use MODE unmodified. 33549 33550 -- Target Hook: void TARGET_SELECT_EARLY_REMAT_MODES (sbitmap MODES) 33551 On some targets, certain modes cannot be held in registers around a 33552 standard ABI call and are relatively expensive to spill to the 33553 stack. The early rematerialization pass can help in such cases by 33554 aggressively recomputing values after calls, so that they don't 33555 need to be spilled. 33556 33557 This hook returns the set of such modes by setting the associated 33558 bits in MODES. The default implementation selects no modes, which 33559 has the effect of disabling the early rematerialization pass. 33560 33561 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS) 33562 A target hook which returns 'true' if pseudos that have been 33563 assigned to registers of class RCLASS would likely be spilled 33564 because registers of RCLASS are needed for spill registers. 33565 33566 The default version of this target hook returns 'true' if RCLASS 33567 has exactly one register and 'false' otherwise. On most machines, 33568 this default should be used. For generally register-starved 33569 machines, such as i386, or machines with right register 33570 constraints, such as SH, this hook can be used to avoid excessive 33571 spilling. 33572 33573 This hook is also used by some of the global intra-procedural code 33574 transformations to throtle code motion, to avoid increasing 33575 register pressure. 33576 33577 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t 33578 RCLASS, machine_mode MODE) 33579 A target hook returns the maximum number of consecutive registers 33580 of class RCLASS needed to hold a value of mode MODE. 33581 33582 This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'. In 33583 fact, the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)' 33584 target hook should be the maximum value of 'TARGET_HARD_REGNO_NREGS 33585 (REGNO, MODE)' for all REGNO values in the class RCLASS. 33586 33587 This target hook helps control the handling of multiple-word values 33588 in the reload pass. 33589 33590 The default version of this target hook returns the size of MODE in 33591 words. 33592 33593 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 33594 A C expression for the maximum number of consecutive registers of 33595 class CLASS needed to hold a value of mode MODE. 33596 33597 This is closely related to the macro 'TARGET_HARD_REGNO_NREGS'. In 33598 fact, the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should 33599 be the maximum value of 'TARGET_HARD_REGNO_NREGS (REGNO, MODE)' for 33600 all REGNO values in the class CLASS. 33601 33602 This macro helps control the handling of multiple-word values in 33603 the reload pass. 33604 33605 -- Target Hook: bool TARGET_CAN_CHANGE_MODE_CLASS (machine_mode FROM, 33606 machine_mode TO, reg_class_t RCLASS) 33607 This hook returns true if it is possible to bitcast values held in 33608 registers of class RCLASS from mode FROM to mode TO and if doing so 33609 preserves the low-order bits that are common to both modes. The 33610 result is only meaningful if RCLASS has registers that can hold 33611 both 'from' and 'to'. The default implementation returns true. 33612 33613 As an example of when such bitcasting is invalid, loading 32-bit 33614 integer or floating-point objects into floating-point registers on 33615 Alpha extends them to 64 bits. Therefore loading a 64-bit object 33616 and then storing it as a 32-bit object does not store the low-order 33617 32 bits, as would be the case for a normal register. Therefore, 33618 'alpha.h' defines 'TARGET_CAN_CHANGE_MODE_CLASS' to return: 33619 33620 (GET_MODE_SIZE (from) == GET_MODE_SIZE (to) 33621 || !reg_classes_intersect_p (FLOAT_REGS, rclass)) 33622 33623 Even if storing from a register in mode TO would be valid, if both 33624 FROM and 'raw_reg_mode' for RCLASS are wider than 'word_mode', then 33625 we must prevent TO narrowing the mode. This happens when the 33626 middle-end assumes that it can load or store pieces of an N-word 33627 pseudo, and that the pseudo will eventually be allocated to N 33628 'word_mode' hard registers. Failure to prevent this kind of mode 33629 change will result in the entire 'raw_reg_mode' being modified 33630 instead of the partial value that the middle-end intended. 33631 33632 -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS 33633 (int, REG_CLASS_T, REG_CLASS_T) 33634 A target hook which can change allocno class for given pseudo from 33635 allocno and best class calculated by IRA. 33636 33637 The default version of this target hook always returns given class. 33638 33639 -- Target Hook: bool TARGET_LRA_P (void) 33640 A target hook which returns true if we use LRA instead of reload 33641 pass. The default version of this target hook returns true. New 33642 ports should use LRA, and existing ports are encouraged to convert. 33643 33644 -- Target Hook: int TARGET_REGISTER_PRIORITY (int) 33645 A target hook which returns the register priority number to which 33646 the register HARD_REGNO belongs to. The bigger the number, the 33647 more preferable the hard register usage (when all other conditions 33648 are the same). This hook can be used to prefer some hard register 33649 over others in LRA. For example, some x86-64 register usage needs 33650 additional prefix which makes instructions longer. The hook can 33651 return lower priority number for such registers make them less 33652 favorable and as result making the generated code smaller. The 33653 default version of this target hook returns always zero. 33654 33655 -- Target Hook: bool TARGET_REGISTER_USAGE_LEVELING_P (void) 33656 A target hook which returns true if we need register usage 33657 leveling. That means if a few hard registers are equally good for 33658 the assignment, we choose the least used hard register. The 33659 register usage leveling may be profitable for some targets. Don't 33660 use the usage leveling for targets with conditional execution or 33661 targets with big register files as it hurts if-conversion and 33662 cross-jumping optimizations. The default version of this target 33663 hook returns always false. 33664 33665 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void) 33666 A target hook which returns true if an address with the same 33667 structure can have different maximal legitimate displacement. For 33668 example, the displacement can depend on memory mode or on operand 33669 combinations in the insn. The default version of this target hook 33670 returns always false. 33671 33672 -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST) 33673 A target hook which returns 'true' if SUBST can't substitute safely 33674 pseudos with equivalent memory values during register allocation. 33675 The default version of this target hook returns 'false'. On most 33676 machines, this default should be used. For generally machines with 33677 non orthogonal register usage for addressing, such as SH, this hook 33678 can be used to avoid excessive spilling. 33679 33680 -- Target Hook: bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx 33681 *OFFSET1, rtx *OFFSET2, poly_int64 ORIG_OFFSET, machine_mode 33682 MODE) 33683 This hook tries to split address offset ORIG_OFFSET into two parts: 33684 one that should be added to the base address to create a local 33685 anchor point, and an additional offset that can be applied to the 33686 anchor to address a value of mode MODE. The idea is that the local 33687 anchor could be shared by other accesses to nearby locations. 33688 33689 The hook returns true if it succeeds, storing the offset of the 33690 anchor from the base in OFFSET1 and the offset of the final address 33691 from the anchor in OFFSET2. The default implementation returns 33692 false. 33693 33694 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, 33695 MACHINE_MODE) 33696 This hook defines a class of registers which could be used for 33697 spilling pseudos of the given mode and class, or 'NO_REGS' if only 33698 memory should be used. Not defining this hook is equivalent to 33699 returning 'NO_REGS' for all inputs. 33700 33701 -- Target Hook: bool TARGET_ADDITIONAL_ALLOCNO_CLASS_P (reg_class_t) 33702 This hook should return 'true' if given class of registers should 33703 be an allocno class in any way. Usually RA uses only one register 33704 class from all classes containing the same register set. In some 33705 complicated cases, you need to have two or more such classes as 33706 allocno ones for RA correct work. Not defining this hook is 33707 equivalent to returning 'false' for all inputs. 33708 33709 -- Target Hook: scalar_int_mode TARGET_CSTORE_MODE (enum insn_code 33710 ICODE) 33711 This hook defines the machine mode to use for the boolean result of 33712 conditional store patterns. The ICODE argument is the instruction 33713 code for the cstore being performed. Not definiting this hook is 33714 the same as accepting the mode encoded into operand 0 of the cstore 33715 expander patterns. 33716 33717 -- Target Hook: int TARGET_COMPUTE_PRESSURE_CLASSES (enum reg_class 33718 *PRESSURE_CLASSES) 33719 A target hook which lets a backend compute the set of pressure 33720 classes to be used by those optimization passes which take register 33721 pressure into account, as opposed to letting IRA compute them. It 33722 returns the number of register classes stored in the array 33723 PRESSURE_CLASSES. 33724 33725 33726File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Register Classes, Up: Target Macros 33727 3372818.9 Stack Layout and Calling Conventions 33729========================================= 33730 33731This describes the stack layout and calling conventions. 33732 33733* Menu: 33734 33735* Frame Layout:: 33736* Exception Handling:: 33737* Stack Checking:: 33738* Frame Registers:: 33739* Elimination:: 33740* Stack Arguments:: 33741* Register Arguments:: 33742* Scalar Return:: 33743* Aggregate Return:: 33744* Caller Saves:: 33745* Function Entry:: 33746* Profiling:: 33747* Tail Calls:: 33748* Shrink-wrapping separate components:: 33749* Stack Smashing Protection:: 33750* Miscellaneous Register Hooks:: 33751 33752 33753File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 33754 3375518.9.1 Basic Stack Layout 33756------------------------- 33757 33758Here is the basic stack layout. 33759 33760 -- Macro: STACK_GROWS_DOWNWARD 33761 Define this macro to be true if pushing a word onto the stack moves 33762 the stack pointer to a smaller address, and false otherwise. 33763 33764 -- Macro: STACK_PUSH_CODE 33765 This macro defines the operation used when something is pushed on 33766 the stack. In RTL, a push operation will be '(set (mem 33767 (STACK_PUSH_CODE (reg sp))) ...)' 33768 33769 The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'. 33770 Which of these is correct depends on the stack direction and on 33771 whether the stack pointer points to the last item on the stack or 33772 whether it points to the space for the next item on the stack. 33773 33774 The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is true, which 33775 is almost always right, and 'PRE_INC' otherwise, which is often 33776 wrong. 33777 33778 -- Macro: FRAME_GROWS_DOWNWARD 33779 Define this macro to nonzero value if the addresses of local 33780 variable slots are at negative offsets from the frame pointer. 33781 33782 -- Macro: ARGS_GROW_DOWNWARD 33783 Define this macro if successive arguments to a function occupy 33784 decreasing addresses on the stack. 33785 33786 -- Target Hook: HOST_WIDE_INT TARGET_STARTING_FRAME_OFFSET (void) 33787 This hook returns the offset from the frame pointer to the first 33788 local variable slot to be allocated. If 'FRAME_GROWS_DOWNWARD', it 33789 is the offset to _end_ of the first slot allocated, otherwise it is 33790 the offset to _beginning_ of the first slot allocated. The default 33791 implementation returns 0. 33792 33793 -- Macro: STACK_ALIGNMENT_NEEDED 33794 Define to zero to disable final alignment of the stack during 33795 reload. The nonzero default for this macro is suitable for most 33796 ports. 33797 33798 On ports where 'TARGET_STARTING_FRAME_OFFSET' is nonzero or where 33799 there is a register save block following the local block that 33800 doesn't require alignment to 'STACK_BOUNDARY', it may be beneficial 33801 to disable stack alignment and do it in the backend. 33802 33803 -- Macro: STACK_POINTER_OFFSET 33804 Offset from the stack pointer register to the first location at 33805 which outgoing arguments are placed. If not specified, the default 33806 value of zero is used. This is the proper value for most machines. 33807 33808 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 33809 the first location at which outgoing arguments are placed. 33810 33811 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 33812 Offset from the argument pointer register to the first argument's 33813 address. On some machines it may depend on the data type of the 33814 function. 33815 33816 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 33817 the first argument's address. 33818 33819 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 33820 Offset from the stack pointer register to an item dynamically 33821 allocated on the stack, e.g., by 'alloca'. 33822 33823 The default value for this macro is 'STACK_POINTER_OFFSET' plus the 33824 length of the outgoing arguments. The default is correct for most 33825 machines. See 'function.c' for details. 33826 33827 -- Macro: INITIAL_FRAME_ADDRESS_RTX 33828 A C expression whose value is RTL representing the address of the 33829 initial stack frame. This address is passed to 'RETURN_ADDR_RTX' 33830 and 'DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 33831 reasonable default value will be used. Define this macro in order 33832 to make frame pointer elimination work in the presence of 33833 '__builtin_frame_address (count)' and '__builtin_return_address 33834 (count)' for 'count' not equal to zero. 33835 33836 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 33837 A C expression whose value is RTL representing the address in a 33838 stack frame where the pointer to the caller's frame is stored. 33839 Assume that FRAMEADDR is an RTL expression for the address of the 33840 stack frame itself. 33841 33842 If you don't define this macro, the default is to return the value 33843 of FRAMEADDR--that is, the stack frame address is also the address 33844 of the stack word that points to the previous frame. 33845 33846 -- Macro: SETUP_FRAME_ADDRESSES 33847 A C expression that produces the machine-specific code to setup the 33848 stack so that arbitrary frames can be accessed. For example, on 33849 the SPARC, we must flush all of the register windows to the stack 33850 before we can access arbitrary stack frames. You will seldom need 33851 to define this macro. The default is to do nothing. 33852 33853 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 33854 This target hook should return an rtx that is used to store the 33855 address of the current frame into the built in 'setjmp' buffer. 33856 The default value, 'virtual_stack_vars_rtx', is correct for most 33857 machines. One reason you may need to define this target hook is if 33858 'hard_frame_pointer_rtx' is the appropriate value on your machine. 33859 33860 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 33861 A C expression whose value is RTL representing the value of the 33862 frame address for the current frame. FRAMEADDR is the frame 33863 pointer of the current frame. This is used for 33864 __builtin_frame_address. You need only define this macro if the 33865 frame address is not the same as the frame pointer. Most machines 33866 do not need to define it. 33867 33868 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 33869 A C expression whose value is RTL representing the value of the 33870 return address for the frame COUNT steps up from the current frame, 33871 after the prologue. FRAMEADDR is the frame pointer of the COUNT 33872 frame, or the frame pointer of the COUNT - 1 frame if 33873 'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero. 33874 33875 The value of the expression must always be the correct address when 33876 COUNT is zero, but may be 'NULL_RTX' if there is no way to 33877 determine the return address of other frames. 33878 33879 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 33880 Define this macro to nonzero value if the return address of a 33881 particular stack frame is accessed from the frame pointer of the 33882 previous stack frame. The zero default for this macro is suitable 33883 for most ports. 33884 33885 -- Macro: INCOMING_RETURN_ADDR_RTX 33886 A C expression whose value is RTL representing the location of the 33887 incoming return address at the beginning of any function, before 33888 the prologue. This RTL is either a 'REG', indicating that the 33889 return value is saved in 'REG', or a 'MEM' representing a location 33890 in the stack. 33891 33892 You only need to define this macro if you want to support call 33893 frame debugging information like that provided by DWARF 2. 33894 33895 If this RTL is a 'REG', you should also define 33896 'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'. 33897 33898 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 33899 A C expression whose value is an integer giving a DWARF 2 column 33900 number that may be used as an alternative return column. The 33901 column must not correspond to any gcc hard register (that is, it 33902 must not be in the range of 'DWARF_FRAME_REGNUM'). 33903 33904 This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a 33905 general register, but an alternative column needs to be used for 33906 signal frames. Some targets have also used different frame return 33907 columns over time. 33908 33909 -- Macro: DWARF_ZERO_REG 33910 A C expression whose value is an integer giving a DWARF 2 register 33911 number that is considered to always have the value zero. This 33912 should only be defined if the target has an architected zero 33913 register, and someone decided it was a good idea to use that 33914 register number to terminate the stack backtrace. New ports should 33915 avoid this. 33916 33917 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 33918 *LABEL, rtx PATTERN, int INDEX) 33919 This target hook allows the backend to emit frame-related insns 33920 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 33921 debugging info engine will invoke it on insns of the form 33922 (set (reg) (unspec [...] UNSPEC_INDEX)) 33923 and 33924 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 33925 to let the backend emit the call frame instructions. LABEL is the 33926 CFI label attached to the insn, PATTERN is the pattern of the insn 33927 and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'. 33928 33929 -- Target Hook: unsigned int TARGET_DWARF_POLY_INDETERMINATE_VALUE 33930 (unsigned int I, unsigned int *FACTOR, int *OFFSET) 33931 Express the value of 'poly_int' indeterminate I as a DWARF 33932 expression, with I counting from 1. Return the number of a DWARF 33933 register R and set '*FACTOR' and '*OFFSET' such that the value of 33934 the indeterminate is: 33935 value_of(R) / FACTOR - OFFSET 33936 33937 A target only needs to define this hook if it sets 33938 'NUM_POLY_INT_COEFFS' to a value greater than 1. 33939 33940 -- Macro: INCOMING_FRAME_SP_OFFSET 33941 A C expression whose value is an integer giving the offset, in 33942 bytes, from the value of the stack pointer register to the top of 33943 the stack frame at the beginning of any function, before the 33944 prologue. The top of the frame is defined to be the value of the 33945 stack pointer in the previous frame, just before the call 33946 instruction. 33947 33948 You only need to define this macro if you want to support call 33949 frame debugging information like that provided by DWARF 2. 33950 33951 -- Macro: DEFAULT_INCOMING_FRAME_SP_OFFSET 33952 Like 'INCOMING_FRAME_SP_OFFSET', but must be the same for all 33953 functions of the same ABI, and when using GAS '.cfi_*' directives 33954 must also agree with the default CFI GAS emits. Define this macro 33955 only if 'INCOMING_FRAME_SP_OFFSET' can have different values 33956 between different functions of the same ABI or when 33957 'INCOMING_FRAME_SP_OFFSET' does not agree with GAS default CFI. 33958 33959 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 33960 A C expression whose value is an integer giving the offset, in 33961 bytes, from the argument pointer to the canonical frame address 33962 (cfa). The final value should coincide with that calculated by 33963 'INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 33964 during virtual register instantiation. 33965 33966 The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) + 33967 crtl->args.pretend_args_size', which is correct for most machines; 33968 in general, the arguments are found immediately before the stack 33969 frame. Note that this is not the case on some targets that save 33970 registers into the caller's frame, such as SPARC and rs6000, and so 33971 such targets need to define this macro. 33972 33973 You only need to define this macro if the default is incorrect, and 33974 you want to support call frame debugging information like that 33975 provided by DWARF 2. 33976 33977 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 33978 If defined, a C expression whose value is an integer giving the 33979 offset in bytes from the frame pointer to the canonical frame 33980 address (cfa). The final value should coincide with that 33981 calculated by 'INCOMING_FRAME_SP_OFFSET'. 33982 33983 Normally the CFA is calculated as an offset from the argument 33984 pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer 33985 is variable due to the ABI, this may not be possible. If this 33986 macro is defined, it implies that the virtual register 33987 instantiation should be based on the frame pointer instead of the 33988 argument pointer. Only one of 'FRAME_POINTER_CFA_OFFSET' and 33989 'ARG_POINTER_CFA_OFFSET' should be defined. 33990 33991 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 33992 If defined, a C expression whose value is an integer giving the 33993 offset in bytes from the canonical frame address (cfa) to the frame 33994 base used in DWARF 2 debug information. The default is zero. A 33995 different value may reduce the size of debug information on some 33996 ports. 33997 33998 33999File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 34000 3400118.9.2 Exception Handling Support 34002--------------------------------- 34003 34004 -- Macro: EH_RETURN_DATA_REGNO (N) 34005 A C expression whose value is the Nth register number used for data 34006 by exception handlers, or 'INVALID_REGNUM' if fewer than N 34007 registers are usable. 34008 34009 The exception handling library routines communicate with the 34010 exception handlers via a set of agreed upon registers. Ideally 34011 these registers should be call-clobbered; it is possible to use 34012 call-saved registers, but may negatively impact code size. The 34013 target must support at least 2 data registers, but should define 4 34014 if there are enough free registers. 34015 34016 You must define this macro if you want to support call frame 34017 exception handling like that provided by DWARF 2. 34018 34019 -- Macro: EH_RETURN_STACKADJ_RTX 34020 A C expression whose value is RTL representing a location in which 34021 to store a stack adjustment to be applied before function return. 34022 This is used to unwind the stack to an exception handler's call 34023 frame. It will be assigned zero on code paths that return 34024 normally. 34025 34026 Typically this is a call-clobbered hard register that is otherwise 34027 untouched by the epilogue, but could also be a stack slot. 34028 34029 Do not define this macro if the stack pointer is saved and restored 34030 by the regular prolog and epilog code in the call frame itself; in 34031 this case, the exception handling library routines will update the 34032 stack location to be restored in place. Otherwise, you must define 34033 this macro if you want to support call frame exception handling 34034 like that provided by DWARF 2. 34035 34036 -- Macro: EH_RETURN_HANDLER_RTX 34037 A C expression whose value is RTL representing a location in which 34038 to store the address of an exception handler to which we should 34039 return. It will not be assigned on code paths that return 34040 normally. 34041 34042 Typically this is the location in the call frame at which the 34043 normal return address is stored. For targets that return by 34044 popping an address off the stack, this might be a memory address 34045 just below the _target_ call frame rather than inside the current 34046 call frame. If defined, 'EH_RETURN_STACKADJ_RTX' will have already 34047 been assigned, so it may be used to calculate the location of the 34048 target call frame. 34049 34050 Some targets have more complex requirements than storing to an 34051 address calculable during initial code generation. In that case 34052 the 'eh_return' instruction pattern should be used instead. 34053 34054 If you want to support call frame exception handling, you must 34055 define either this macro or the 'eh_return' instruction pattern. 34056 34057 -- Macro: RETURN_ADDR_OFFSET 34058 If defined, an integer-valued C expression for which rtl will be 34059 generated to add it to the exception handler address before it is 34060 searched in the exception handling tables, and to subtract it again 34061 from the address before using it to return to the exception 34062 handler. 34063 34064 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 34065 This macro chooses the encoding of pointers embedded in the 34066 exception handling sections. If at all possible, this should be 34067 defined such that the exception handling section will not require 34068 dynamic relocations, and so may be read-only. 34069 34070 CODE is 0 for data, 1 for code labels, 2 for function pointers. 34071 GLOBAL is true if the symbol may be affected by dynamic 34072 relocations. The macro should return a combination of the 34073 'DW_EH_PE_*' defines as found in 'dwarf2.h'. 34074 34075 If this macro is not defined, pointers will not be encoded but 34076 represented directly. 34077 34078 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 34079 ADDR, DONE) 34080 This macro allows the target to emit whatever special magic is 34081 required to represent the encoding chosen by 34082 'ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 34083 pc-relative and indirect encodings; this must be defined if the 34084 target uses text-relative or data-relative encodings. 34085 34086 This is a C statement that branches to DONE if the format was 34087 handled. ENCODING is the format chosen, SIZE is the number of 34088 bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be 34089 emitted. 34090 34091 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 34092 This macro allows the target to add CPU and operating system 34093 specific code to the call-frame unwinder for use when there is no 34094 unwind data available. The most common reason to implement this 34095 macro is to unwind through signal frames. 34096 34097 This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c', 34098 'unwind-dw2-xtensa.c' and 'unwind-ia64.c'. CONTEXT is an 34099 '_Unwind_Context'; FS is an '_Unwind_FrameState'. Examine 34100 'context->ra' for the address of the code being executed and 34101 'context->cfa' for the stack pointer value. If the frame can be 34102 decoded, the register save addresses should be updated in FS and 34103 the macro should evaluate to '_URC_NO_REASON'. If the frame cannot 34104 be decoded, the macro should evaluate to '_URC_END_OF_STACK'. 34105 34106 For proper signal handling in Java this macro is accompanied by 34107 'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h' 34108 headers. 34109 34110 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 34111 This macro allows the target to add operating system specific code 34112 to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding 34113 directive, usually used for signal or interrupt frames. 34114 34115 This macro is called from 'uw_update_context' in libgcc's 34116 'unwind-ia64.c'. CONTEXT is an '_Unwind_Context'; FS is an 34117 '_Unwind_FrameState'. Examine 'fs->unwabi' for the abi and context 34118 in the '.unwabi' directive. If the '.unwabi' directive can be 34119 handled, the register save addresses should be updated in FS. 34120 34121 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 34122 A C expression that evaluates to true if the target requires unwind 34123 info to be given comdat linkage. Define it to be '1' if comdat 34124 linkage is necessary. The default is '0'. 34125 34126 34127File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 34128 3412918.9.3 Specifying How Stack Checking is Done 34130-------------------------------------------- 34131 34132GCC will check that stack references are within the boundaries of the 34133stack, if the option '-fstack-check' is specified, in one of three ways: 34134 34135 1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC 34136 will assume that you have arranged for full stack checking to be 34137 done at appropriate places in the configuration files. GCC will 34138 not do other special processing. 34139 34140 2. If 'STACK_CHECK_BUILTIN' is zero and the value of the 34141 'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that 34142 you have arranged for static stack checking (checking of the static 34143 stack frame of functions) to be done at appropriate places in the 34144 configuration files. GCC will only emit code to do dynamic stack 34145 checking (checking on dynamic stack allocations) using the third 34146 approach below. 34147 34148 3. If neither of the above are true, GCC will generate code to 34149 periodically "probe" the stack pointer using the values of the 34150 macros defined below. 34151 34152 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 34153defined, GCC will change its allocation strategy for large objects if 34154the option '-fstack-check' is specified: they will always be allocated 34155dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes. 34156 34157 -- Macro: STACK_CHECK_BUILTIN 34158 A nonzero value if stack checking is done by the configuration 34159 files in a machine-dependent manner. You should define this macro 34160 if stack checking is required by the ABI of your machine or if you 34161 would like to do stack checking in some more efficient way than the 34162 generic approach. The default value of this macro is zero. 34163 34164 -- Macro: STACK_CHECK_STATIC_BUILTIN 34165 A nonzero value if static stack checking is done by the 34166 configuration files in a machine-dependent manner. You should 34167 define this macro if you would like to do static stack checking in 34168 some more efficient way than the generic approach. The default 34169 value of this macro is zero. 34170 34171 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 34172 An integer specifying the interval at which GCC must generate stack 34173 probe instructions, defined as 2 raised to this integer. You will 34174 normally define this macro so that the interval be no larger than 34175 the size of the "guard pages" at the end of a stack area. The 34176 default value of 12 (4096-byte interval) is suitable for most 34177 systems. 34178 34179 -- Macro: STACK_CHECK_MOVING_SP 34180 An integer which is nonzero if GCC should move the stack pointer 34181 page by page when doing probes. This can be necessary on systems 34182 where the stack pointer contains the bottom address of the memory 34183 area accessible to the executing thread at any point in time. In 34184 this situation an alternate signal stack is required in order to be 34185 able to recover from a stack overflow. The default value of this 34186 macro is zero. 34187 34188 -- Macro: STACK_CHECK_PROTECT 34189 The number of bytes of stack needed to recover from a stack 34190 overflow, for languages where such a recovery is supported. The 34191 default value of 4KB/8KB with the 'setjmp'/'longjmp'-based 34192 exception handling mechanism and 8KB/12KB with other exception 34193 handling mechanisms should be adequate for most architectures and 34194 operating systems. 34195 34196 The following macros are relevant only if neither STACK_CHECK_BUILTIN 34197nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 34198in the opposite case. 34199 34200 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 34201 The maximum size of a stack frame, in bytes. GCC will generate 34202 probe instructions in non-leaf functions to ensure at least this 34203 many bytes of stack are available. If a stack frame is larger than 34204 this size, stack checking will not be reliable and GCC will issue a 34205 warning. The default is chosen so that GCC only generates one 34206 instruction on most systems. You should normally not change the 34207 default value of this macro. 34208 34209 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 34210 GCC uses this value to generate the above warning message. It 34211 represents the amount of fixed frame used by a function, not 34212 including space for any callee-saved registers, temporaries and 34213 user variables. You need only specify an upper bound for this 34214 amount and will normally use the default of four words. 34215 34216 -- Macro: STACK_CHECK_MAX_VAR_SIZE 34217 The maximum size, in bytes, of an object that GCC will place in the 34218 fixed area of the stack frame when the user specifies 34219 '-fstack-check'. GCC computed the default from the values of the 34220 above macros and you will normally not need to override that 34221 default. 34222 34223 -- Target Hook: HOST_WIDE_INT 34224 TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE (void) 34225 Some targets have an ABI defined interval for which no probing 34226 needs to be done. When a probe does need to be done this same 34227 interval is used as the probe distance up when doing stack clash 34228 protection for alloca. On such targets this value can be set to 34229 override the default probing up interval. Define this variable to 34230 return nonzero if such a probe range is required or zero otherwise. 34231 Defining this hook also requires your functions which make use of 34232 alloca to have at least 8 byesof outgoing arguments. If this is 34233 not the case the stack will be corrupted. You need not define this 34234 macro if it would always have the value zero. 34235 34236 34237File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 34238 3423918.9.4 Registers That Address the Stack Frame 34240--------------------------------------------- 34241 34242This discusses registers that address the stack frame. 34243 34244 -- Macro: STACK_POINTER_REGNUM 34245 The register number of the stack pointer register, which must also 34246 be a fixed register according to 'FIXED_REGISTERS'. On most 34247 machines, the hardware determines which register this is. 34248 34249 -- Macro: FRAME_POINTER_REGNUM 34250 The register number of the frame pointer register, which is used to 34251 access automatic variables in the stack frame. On some machines, 34252 the hardware determines which register this is. On other machines, 34253 you can choose any register you wish for this purpose. 34254 34255 -- Macro: HARD_FRAME_POINTER_REGNUM 34256 On some machines the offset between the frame pointer and starting 34257 offset of the automatic variables is not known until after register 34258 allocation has been done (for example, because the saved registers 34259 are between these two locations). On those machines, define 34260 'FRAME_POINTER_REGNUM' the number of a special, fixed register to 34261 be used internally until the offset is known, and define 34262 'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 34263 used for the frame pointer. 34264 34265 You should define this macro only in the very rare circumstances 34266 when it is not possible to calculate the offset between the frame 34267 pointer and the automatic variables until after register allocation 34268 has been completed. When this macro is defined, you must also 34269 indicate in your definition of 'ELIMINABLE_REGS' how to eliminate 34270 'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or 34271 'STACK_POINTER_REGNUM'. 34272 34273 Do not define this macro if it would be the same as 34274 'FRAME_POINTER_REGNUM'. 34275 34276 -- Macro: ARG_POINTER_REGNUM 34277 The register number of the arg pointer register, which is used to 34278 access the function's argument list. On some machines, this is the 34279 same as the frame pointer register. On some machines, the hardware 34280 determines which register this is. On other machines, you can 34281 choose any register you wish for this purpose. If this is not the 34282 same register as the frame pointer register, then you must mark it 34283 as a fixed register according to 'FIXED_REGISTERS', or arrange to 34284 be able to eliminate it (*note Elimination::). 34285 34286 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER 34287 Define this to a preprocessor constant that is nonzero if 34288 'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the 34289 same. The default definition is '(HARD_FRAME_POINTER_REGNUM == 34290 FRAME_POINTER_REGNUM)'; you only need to define this macro if that 34291 definition is not suitable for use in preprocessor conditionals. 34292 34293 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER 34294 Define this to a preprocessor constant that is nonzero if 34295 'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same. 34296 The default definition is '(HARD_FRAME_POINTER_REGNUM == 34297 ARG_POINTER_REGNUM)'; you only need to define this macro if that 34298 definition is not suitable for use in preprocessor conditionals. 34299 34300 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 34301 The register number of the return address pointer register, which 34302 is used to access the current function's return address from the 34303 stack. On some machines, the return address is not at a fixed 34304 offset from the frame pointer or stack pointer or argument pointer. 34305 This register can be defined to point to the return address on the 34306 stack, and then be converted by 'ELIMINABLE_REGS' into either the 34307 frame pointer or stack pointer. 34308 34309 Do not define this macro unless there is no other way to get the 34310 return address from the stack. 34311 34312 -- Macro: STATIC_CHAIN_REGNUM 34313 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 34314 Register numbers used for passing a function's static chain 34315 pointer. If register windows are used, the register number as seen 34316 by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the 34317 register number as seen by the calling function is 34318 'STATIC_CHAIN_REGNUM'. If these registers are the same, 34319 'STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 34320 34321 The static chain register need not be a fixed register. 34322 34323 If the static chain is passed in memory, these macros should not be 34324 defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used. 34325 34326 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE, 34327 bool INCOMING_P) 34328 This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for 34329 targets that may use different static chain locations for different 34330 nested functions. This may be required if the target has function 34331 attributes that affect the calling conventions of the function and 34332 those calling conventions use different static chain locations. 34333 34334 The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al. 34335 34336 If the static chain is passed in memory, this hook should be used 34337 to provide rtx giving 'mem' expressions that denote where they are 34338 stored. Often the 'mem' expression as seen by the caller will be 34339 at an offset from the stack pointer and the 'mem' expression as 34340 seen by the callee will be at an offset from the frame pointer. 34341 The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and 34342 'arg_pointer_rtx' will have been initialized and should be used to 34343 refer to those items. 34344 34345 -- Macro: DWARF_FRAME_REGISTERS 34346 This macro specifies the maximum number of hard registers that can 34347 be saved in a call frame. This is used to size data structures 34348 used in DWARF2 exception handling. 34349 34350 Prior to GCC 3.0, this macro was needed in order to establish a 34351 stable exception handling ABI in the face of adding new hard 34352 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 34353 insulated from changes in the number of hard registers. 34354 Nevertheless, this macro can still be used to reduce the runtime 34355 memory requirements of the exception handling routines, which can 34356 be substantial if the ISA contains a lot of registers that are not 34357 call-saved. 34358 34359 If this macro is not defined, it defaults to 34360 'FIRST_PSEUDO_REGISTER'. 34361 34362 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 34363 34364 This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided 34365 for backward compatibility in pre GCC 3.0 compiled code. 34366 34367 If this macro is not defined, it defaults to 34368 'DWARF_FRAME_REGISTERS'. 34369 34370 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 34371 34372 Define this macro if the target's representation for dwarf 34373 registers is different than the internal representation for unwind 34374 column. Given a dwarf register, this macro should return the 34375 internal unwind column number to use instead. 34376 34377 -- Macro: DWARF_FRAME_REGNUM (REGNO) 34378 34379 Define this macro if the target's representation for dwarf 34380 registers used in .eh_frame or .debug_frame is different from that 34381 used in other debug info sections. Given a GCC hard register 34382 number, this macro should return the .eh_frame register number. 34383 The default is 'DBX_REGISTER_NUMBER (REGNO)'. 34384 34385 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 34386 34387 Define this macro to map register numbers held in the call frame 34388 info that GCC has collected using 'DWARF_FRAME_REGNUM' to those 34389 that should be output in .debug_frame ('FOR_EH' is zero) and 34390 .eh_frame ('FOR_EH' is nonzero). The default is to return 'REGNO'. 34391 34392 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT 34393 34394 Define this macro if the target stores register values as 34395 '_Unwind_Word' type in unwind context. It should be defined if 34396 target register size is larger than the size of 'void *'. The 34397 default is to store register values as 'void *' type. 34398 34399 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT 34400 34401 Define this macro to be 1 if the target always uses extended unwind 34402 context with version, args_size and by_value fields. If it is 34403 undefined, it will be defined to 1 when 34404 'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise. 34405 34406 -- Macro: DWARF_LAZY_REGISTER_VALUE (REGNO, VALUE) 34407 Define this macro if the target has pseudo DWARF registers whose 34408 values need to be computed lazily on demand by the unwinder (such 34409 as when referenced in a CFA expression). The macro returns true if 34410 REGNO is such a register and stores its value in '*VALUE' if so. 34411 34412 34413File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 34414 3441518.9.5 Eliminating Frame Pointer and Arg Pointer 34416------------------------------------------------ 34417 34418This is about eliminating the frame pointer and arg pointer. 34419 34420 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 34421 This target hook should return 'true' if a function must have and 34422 use a frame pointer. This target hook is called in the reload 34423 pass. If its return value is 'true' the function will have a frame 34424 pointer. 34425 34426 This target hook can in principle examine the current function and 34427 decide according to the facts, but on most machines the constant 34428 'false' or the constant 'true' suffices. Use 'false' when the 34429 machine allows code to be generated with no frame pointer, and 34430 doing so saves some time or space. Use 'true' when there is no 34431 possible advantage to avoiding a frame pointer. 34432 34433 In certain cases, the compiler does not know how to produce valid 34434 code without a frame pointer. The compiler recognizes those cases 34435 and automatically gives the function a frame pointer regardless of 34436 what 'targetm.frame_pointer_required' returns. You don't need to 34437 worry about them. 34438 34439 In a function that does not require a frame pointer, the frame 34440 pointer register can be allocated for ordinary usage, unless you 34441 mark it as a fixed register. See 'FIXED_REGISTERS' for more 34442 information. 34443 34444 Default return value is 'false'. 34445 34446 -- Macro: ELIMINABLE_REGS 34447 This macro specifies a table of register pairs used to eliminate 34448 unneeded registers that point into the stack frame. 34449 34450 The definition of this macro is a list of structure 34451 initializations, each of which specifies an original and 34452 replacement register. 34453 34454 On some machines, the position of the argument pointer is not known 34455 until the compilation is completed. In such a case, a separate 34456 hard register must be used for the argument pointer. This register 34457 can be eliminated by replacing it with either the frame pointer or 34458 the argument pointer, depending on whether or not the frame pointer 34459 has been eliminated. 34460 34461 In this case, you might specify: 34462 #define ELIMINABLE_REGS \ 34463 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 34464 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 34465 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 34466 34467 Note that the elimination of the argument pointer with the stack 34468 pointer is specified first since that is the preferred elimination. 34469 34470 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 34471 int TO_REG) 34472 This target hook should return 'true' if the compiler is allowed to 34473 try to replace register number FROM_REG with register number 34474 TO_REG. This target hook will usually be 'true', since most of the 34475 cases preventing register elimination are things that the compiler 34476 already knows about. 34477 34478 Default return value is 'true'. 34479 34480 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 34481 This macro returns the initial difference between the specified 34482 pair of registers. The value would be computed from information 34483 such as the result of 'get_frame_size ()' and the tables of 34484 registers 'df_regs_ever_live_p' and 'call_used_regs'. 34485 34486 -- Target Hook: void TARGET_COMPUTE_FRAME_LAYOUT (void) 34487 This target hook is called once each time the frame layout needs to 34488 be recalculated. The calculations can be cached by the target and 34489 can then be used by 'INITIAL_ELIMINATION_OFFSET' instead of 34490 re-computing the layout on every invocation of that hook. This is 34491 particularly useful for targets that have an expensive frame layout 34492 function. Implementing this callback is optional. 34493 34494 34495File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 34496 3449718.9.6 Passing Function Arguments on the Stack 34498---------------------------------------------- 34499 34500The macros in this section control how arguments are passed on the 34501stack. See the following section for other macros that control passing 34502certain arguments in registers. 34503 34504 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 34505 This target hook returns 'true' if an argument declared in a 34506 prototype as an integral type smaller than 'int' should actually be 34507 passed as an 'int'. In addition to avoiding errors in certain 34508 cases of mismatch, it also makes for better code on certain 34509 machines. The default is to not promote prototypes. 34510 34511 -- Macro: PUSH_ARGS 34512 A C expression. If nonzero, push insns will be used to pass 34513 outgoing arguments. If the target machine does not have a push 34514 instruction, set it to zero. That directs GCC to use an alternate 34515 strategy: to allocate the entire argument block and then store the 34516 arguments into it. When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING' 34517 must be defined too. 34518 34519 -- Macro: PUSH_ARGS_REVERSED 34520 A C expression. If nonzero, function arguments will be evaluated 34521 from last to first, rather than from first to last. If this macro 34522 is not defined, it defaults to 'PUSH_ARGS' on targets where the 34523 stack and args grow in opposite directions, and 0 otherwise. 34524 34525 -- Macro: PUSH_ROUNDING (NPUSHED) 34526 A C expression that is the number of bytes actually pushed onto the 34527 stack when an instruction attempts to push NPUSHED bytes. 34528 34529 On some machines, the definition 34530 34531 #define PUSH_ROUNDING(BYTES) (BYTES) 34532 34533 will suffice. But on other machines, instructions that appear to 34534 push one byte actually push two bytes in an attempt to maintain 34535 alignment. Then the definition should be 34536 34537 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 34538 34539 If the value of this macro has a type, it should be an unsigned 34540 type. 34541 34542 -- Macro: ACCUMULATE_OUTGOING_ARGS 34543 A C expression. If nonzero, the maximum amount of space required 34544 for outgoing arguments will be computed and placed into 34545 'crtl->outgoing_args_size'. No space will be pushed onto the stack 34546 for each call; instead, the function prologue should increase the 34547 stack frame size by this amount. 34548 34549 Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not 34550 proper. 34551 34552 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 34553 Define this macro if functions should assume that stack space has 34554 been allocated for arguments even when their values are passed in 34555 registers. 34556 34557 The value of this macro is the size, in bytes, of the area reserved 34558 for arguments passed in registers for the function represented by 34559 FNDECL, which can be zero if GCC is calling a library function. 34560 The argument FNDECL can be the FUNCTION_DECL, or the type itself of 34561 the function. 34562 34563 This space can be allocated by the caller, or be a part of the 34564 machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says 34565 which. 34566 34567 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL) 34568 Like 'REG_PARM_STACK_SPACE', but for incoming register arguments. 34569 Define this macro if space guaranteed when compiling a function 34570 body is different to space required when making a call, a situation 34571 that can arise with K&R style function definitions. 34572 34573 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 34574 Define this to a nonzero value if it is the responsibility of the 34575 caller to allocate the area reserved for arguments passed in 34576 registers when calling a function of FNTYPE. FNTYPE may be NULL if 34577 the function called is a library function. 34578 34579 If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 34580 whether the space for these arguments counts in the value of 34581 'crtl->outgoing_args_size'. 34582 34583 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 34584 Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the 34585 stack parameters don't skip the area specified by it. 34586 34587 Normally, when a parameter is not passed in registers, it is placed 34588 on the stack beyond the 'REG_PARM_STACK_SPACE' area. Defining this 34589 macro suppresses this behavior and causes the parameter to be 34590 passed on the stack in its natural location. 34591 34592 -- Target Hook: poly_int64 TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree 34593 FUNTYPE, poly_int64 SIZE) 34594 This target hook returns the number of bytes of its own arguments 34595 that a function pops on returning, or 0 if the function pops no 34596 arguments and the caller must therefore pop them all after the 34597 function returns. 34598 34599 FUNDECL is a C variable whose value is a tree node that describes 34600 the function in question. Normally it is a node of type 34601 'FUNCTION_DECL' that describes the declaration of the function. 34602 From this you can obtain the 'DECL_ATTRIBUTES' of the function. 34603 34604 FUNTYPE is a C variable whose value is a tree node that describes 34605 the function in question. Normally it is a node of type 34606 'FUNCTION_TYPE' that describes the data type of the function. From 34607 this it is possible to obtain the data types of the value and 34608 arguments (if known). 34609 34610 When a call to a library function is being considered, FUNDECL will 34611 contain an identifier node for the library function. Thus, if you 34612 need to distinguish among various library functions, you can do so 34613 by their names. Note that "library function" in this context means 34614 a function used to perform arithmetic, whose name is known 34615 specially in the compiler and was not mentioned in the C code being 34616 compiled. 34617 34618 SIZE is the number of bytes of arguments passed on the stack. If a 34619 variable number of bytes is passed, it is zero, and argument 34620 popping will always be the responsibility of the calling function. 34621 34622 On the VAX, all functions always pop their arguments, so the 34623 definition of this macro is SIZE. On the 68000, using the standard 34624 calling convention, no functions pop their arguments, so the value 34625 of the macro is always 0 in this case. But an alternative calling 34626 convention is available in which functions that take a fixed number 34627 of arguments pop them but other functions (such as 'printf') pop 34628 nothing (the caller pops all). When this convention is in use, 34629 FUNTYPE is examined to determine whether a function takes a fixed 34630 number of arguments. 34631 34632 -- Macro: CALL_POPS_ARGS (CUM) 34633 A C expression that should indicate the number of bytes a call 34634 sequence pops off the stack. It is added to the value of 34635 'RETURN_POPS_ARGS' when compiling a function call. 34636 34637 CUM is the variable in which all arguments to the called function 34638 have been accumulated. 34639 34640 On certain architectures, such as the SH5, a call trampoline is 34641 used that pops certain registers off the stack, depending on the 34642 arguments that have been passed to the function. Since this is a 34643 property of the call site, not of the called function, 34644 'RETURN_POPS_ARGS' is not appropriate. 34645 34646 34647File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 34648 3464918.9.7 Passing Arguments in Registers 34650------------------------------------- 34651 34652This section describes the macros which let you control how various 34653types of arguments are passed in registers or how they are arranged in 34654the stack. 34655 34656 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, const 34657 function_arg_info &ARG) 34658 Return an RTX indicating whether function argument ARG is passed in 34659 a register and if so, which register. Argument CA summarizes all 34660 the previous arguments. 34661 34662 The return value is usually either a 'reg' RTX for the hard 34663 register in which to pass the argument, or zero to pass the 34664 argument on the stack. 34665 34666 The return value can be a 'const_int' which means argument is 34667 passed in a target specific slot with specified number. Target 34668 hooks should be used to store or load argument in such case. See 34669 'TARGET_STORE_BOUNDS_FOR_ARG' and 'TARGET_LOAD_BOUNDS_FOR_ARG' for 34670 more information. 34671 34672 The value of the expression can also be a 'parallel' RTX. This is 34673 used when an argument is passed in multiple locations. The mode of 34674 the 'parallel' should be the mode of the entire argument. The 34675 'parallel' holds any number of 'expr_list' pairs; each one 34676 describes where part of the argument is passed. In each 34677 'expr_list' the first operand must be a 'reg' RTX for the hard 34678 register in which to pass this part of the argument, and the mode 34679 of the register RTX indicates how large this part of the argument 34680 is. The second operand of the 'expr_list' is a 'const_int' which 34681 gives the offset in bytes into the entire argument of where this 34682 part starts. As a special exception the first 'expr_list' in the 34683 'parallel' RTX may have a first operand of zero. This indicates 34684 that the entire argument is also stored on the stack. 34685 34686 The last time this hook is called, it is called with 'MODE == 34687 VOIDmode', and its result is passed to the 'call' or 'call_value' 34688 pattern as operands 2 and 3 respectively. 34689 34690 The usual way to make the ISO library 'stdarg.h' work on a machine 34691 where some arguments are usually passed in registers, is to cause 34692 nameless arguments to be passed on the stack instead. This is done 34693 by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'. 34694 34695 You may use the hook 'targetm.calls.must_pass_in_stack' in the 34696 definition of this macro to determine if this argument is of a type 34697 that must be passed in the stack. If 'REG_PARM_STACK_SPACE' is not 34698 defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an 34699 argument, the compiler will abort. If 'REG_PARM_STACK_SPACE' is 34700 defined, the argument will be computed in the stack and then loaded 34701 into a register. 34702 34703 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (const function_arg_info 34704 &ARG) 34705 This target hook should return 'true' if we should not pass ARG 34706 solely in registers. The file 'expr.h' defines a definition that 34707 is usually appropriate, refer to 'expr.h' for additional 34708 documentation. 34709 34710 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA, 34711 const function_arg_info &ARG) 34712 Define this hook if the caller and callee on the target have 34713 different views of where arguments are passed. Also define this 34714 hook if there are functions that are never directly called, but are 34715 invoked by the hardware and which have nonstandard calling 34716 conventions. 34717 34718 In this case 'TARGET_FUNCTION_ARG' computes the register in which 34719 the caller passes the value, and 'TARGET_FUNCTION_INCOMING_ARG' 34720 should be defined in a similar fashion to tell the function being 34721 called where the arguments will arrive. 34722 34723 'TARGET_FUNCTION_INCOMING_ARG' can also return arbitrary address 34724 computation using hard register, which can be forced into a 34725 register, so that it can be used to pass special arguments. 34726 34727 If 'TARGET_FUNCTION_INCOMING_ARG' is not defined, 34728 'TARGET_FUNCTION_ARG' serves both purposes. 34729 34730 -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void) 34731 This hook should return 1 in case pseudo register should be created 34732 for pic_offset_table_rtx during function expand. 34733 34734 -- Target Hook: void TARGET_INIT_PIC_REG (void) 34735 Perform a target dependent initialization of pic_offset_table_rtx. 34736 This hook is called at the start of register allocation. 34737 34738 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM, 34739 const function_arg_info &ARG) 34740 This target hook returns the number of bytes at the beginning of an 34741 argument that must be put in registers. The value must be zero for 34742 arguments that are passed entirely in registers or that are 34743 entirely pushed on the stack. 34744 34745 On some machines, certain arguments must be passed partially in 34746 registers and partially in memory. On these machines, typically 34747 the first few words of arguments are passed in registers, and the 34748 rest on the stack. If a multi-word argument (a 'double' or a 34749 structure) crosses that boundary, its first few words must be 34750 passed in registers and the rest must be pushed. This macro tells 34751 the compiler when this occurs, and how many bytes should go in 34752 registers. 34753 34754 'TARGET_FUNCTION_ARG' for these arguments should return the first 34755 register to be used by the caller for this argument; likewise 34756 'TARGET_FUNCTION_INCOMING_ARG', for the called function. 34757 34758 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM, 34759 const function_arg_info &ARG) 34760 This target hook should return 'true' if argument ARG at the 34761 position indicated by CUM should be passed by reference. This 34762 predicate is queried after target independent reasons for being 34763 passed by reference, such as 'TREE_ADDRESSABLE (ARG.type)'. 34764 34765 If the hook returns true, a copy of that argument is made in memory 34766 and a pointer to the argument is passed instead of the argument 34767 itself. The pointer is passed in whatever way is appropriate for 34768 passing a pointer to that type. 34769 34770 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, const 34771 function_arg_info &ARG) 34772 The function argument described by the parameters to this hook is 34773 known to be passed by reference. The hook should return true if 34774 the function argument should be copied by the callee instead of 34775 copied by the caller. 34776 34777 For any argument for which the hook returns true, if it can be 34778 determined that the argument is not modified, then a copy need not 34779 be generated. 34780 34781 The default version of this hook always returns false. 34782 34783 -- Macro: CUMULATIVE_ARGS 34784 A C type for declaring a variable that is used as the first 34785 argument of 'TARGET_FUNCTION_ARG' and other related values. For 34786 some target machines, the type 'int' suffices and can hold the 34787 number of bytes of argument so far. 34788 34789 There is no need to record in 'CUMULATIVE_ARGS' anything about the 34790 arguments that have been passed on the stack. The compiler has 34791 other variables to keep track of that. For target machines on 34792 which all arguments are passed on the stack, there is no need to 34793 store anything in 'CUMULATIVE_ARGS'; however, the data structure 34794 must exist and should not be empty, so use 'int'. 34795 34796 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 34797 If defined, this macro is called before generating any code for a 34798 function, but after the CFUN descriptor for the function has been 34799 created. The back end may use this macro to update CFUN to reflect 34800 an ABI other than that which would normally be used by default. If 34801 the compiler is generating code for a compiler-generated function, 34802 FNDECL may be 'NULL'. 34803 34804 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 34805 N_NAMED_ARGS) 34806 A C statement (sans semicolon) for initializing the variable CUM 34807 for the state at the beginning of the argument list. The variable 34808 has type 'CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 34809 for the data type of the function which will receive the args, or 0 34810 if the args are to a compiler support library function. For direct 34811 calls that are not libcalls, FNDECL contain the declaration node of 34812 the function. FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is 34813 used to find arguments for the function being compiled. 34814 N_NAMED_ARGS is set to the number of named arguments, including a 34815 structure return address if it is passed as a parameter, when 34816 making a call. When processing incoming arguments, N_NAMED_ARGS is 34817 set to -1. 34818 34819 When processing a call to a compiler support library function, 34820 LIBNAME identifies which one. It is a 'symbol_ref' rtx which 34821 contains the name of the function, as a string. LIBNAME is 0 when 34822 an ordinary C function call is being processed. Thus, each time 34823 this macro is called, either LIBNAME or FNTYPE is nonzero, but 34824 never both of them at once. 34825 34826 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 34827 Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it 34828 gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'. 34829 INDIRECT would always be zero, too. If this macro is not defined, 34830 'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 34831 34832 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 34833 Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 34834 finding the arguments for the function being compiled. If this 34835 macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead. 34836 34837 The value passed for LIBNAME is always 0, since library routines 34838 with special calling conventions are never compiled with GCC. The 34839 argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'. 34840 34841 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA, 34842 const function_arg_info &ARG) 34843 This hook updates the summarizer variable pointed to by CA to 34844 advance past argument ARG in the argument list. Once this is done, 34845 the variable CUM is suitable for analyzing the _following_ argument 34846 with 'TARGET_FUNCTION_ARG', etc. 34847 34848 This hook need not do anything if the argument in question was 34849 passed on the stack. The compiler knows how to track the amount of 34850 stack space used for arguments without any special help. 34851 34852 -- Target Hook: HOST_WIDE_INT TARGET_FUNCTION_ARG_OFFSET (machine_mode 34853 MODE, const_tree TYPE) 34854 This hook returns the number of bytes to add to the offset of an 34855 argument of type TYPE and mode MODE when passed in memory. This is 34856 needed for the SPU, which passes 'char' and 'short' arguments in 34857 the preferred slot that is in the middle of the quad word instead 34858 of starting at the top. The default implementation returns 0. 34859 34860 -- Target Hook: pad_direction TARGET_FUNCTION_ARG_PADDING (machine_mode 34861 MODE, const_tree TYPE) 34862 This hook determines whether, and in which direction, to pad out an 34863 argument of mode MODE and type TYPE. It returns 'PAD_UPWARD' to 34864 insert padding above the argument, 'PAD_DOWNWARD' to insert padding 34865 below the argument, or 'PAD_NONE' to inhibit padding. 34866 34867 The _amount_ of padding is not controlled by this hook, but by 34868 'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'. It is always just enough to 34869 reach the next multiple of that boundary. 34870 34871 This hook has a default definition that is right for most systems. 34872 For little-endian machines, the default is to pad upward. For 34873 big-endian machines, the default is to pad downward for an argument 34874 of constant size shorter than an 'int', and upward otherwise. 34875 34876 -- Macro: PAD_VARARGS_DOWN 34877 If defined, a C expression which determines whether the default 34878 implementation of va_arg will attempt to pad down before reading 34879 the next argument, if that argument is smaller than its aligned 34880 space as controlled by 'PARM_BOUNDARY'. If this macro is not 34881 defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN' 34882 is true. 34883 34884 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 34885 Specify padding for the last element of a block move between 34886 registers and memory. FIRST is nonzero if this is the only 34887 element. Defining this macro allows better control of register 34888 function parameters on big-endian machines, without using 34889 'PARALLEL' rtl. In particular, 'MUST_PASS_IN_STACK' need not test 34890 padding and mode of types in registers, as there is no longer a 34891 "wrong" part of a register; For example, a three byte aggregate may 34892 be passed in the high part of a register if so required. 34893 34894 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (machine_mode 34895 MODE, const_tree TYPE) 34896 This hook returns the alignment boundary, in bits, of an argument 34897 with the specified mode and type. The default hook returns 34898 'PARM_BOUNDARY' for all arguments. 34899 34900 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY 34901 (machine_mode MODE, const_tree TYPE) 34902 Normally, the size of an argument is rounded up to 'PARM_BOUNDARY', 34903 which is the default value for this hook. You can define this hook 34904 to return a different value if an argument size must be rounded to 34905 a larger value. 34906 34907 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 34908 A C expression that is nonzero if REGNO is the number of a hard 34909 register in which function arguments are sometimes passed. This 34910 does _not_ include implicit arguments such as the static chain and 34911 the structure-value address. On many machines, no registers can be 34912 used for this purpose since all function arguments are pushed on 34913 the stack. 34914 34915 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 34916 This hook should return true if parameter of type TYPE are passed 34917 as two scalar parameters. By default, GCC will attempt to pack 34918 complex arguments into the target's word size. Some ABIs require 34919 complex arguments to be split and treated as their individual 34920 components. For example, on AIX64, complex floats should be passed 34921 in a pair of floating point registers, even though a complex float 34922 would fit in one 64-bit floating point register. 34923 34924 The default value of this hook is 'NULL', which is treated as 34925 always false. 34926 34927 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 34928 This hook returns a type node for 'va_list' for the target. The 34929 default version of the hook returns 'void*'. 34930 34931 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME, 34932 tree *PTREE) 34933 This target hook is used in function 'c_common_nodes_and_builtins' 34934 to iterate through the target specific builtin types for va_list. 34935 The variable IDX is used as iterator. PNAME has to be a pointer to 34936 a 'const char *' and PTREE a pointer to a 'tree' typed variable. 34937 The arguments PNAME and PTREE are used to store the result of this 34938 macro and are set to the name of the va_list builtin type and its 34939 internal type. If the return value of this macro is zero, then 34940 there is no more element. Otherwise the IDX should be increased 34941 for the next call of this macro to iterate through all types. 34942 34943 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 34944 This hook returns the va_list type of the calling convention 34945 specified by FNDECL. The default version of this hook returns 34946 'va_list_type_node'. 34947 34948 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 34949 This hook returns the va_list type of the calling convention 34950 specified by the type of TYPE. If TYPE is not a valid va_list 34951 type, it returns 'NULL_TREE'. 34952 34953 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 34954 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 34955 This hook performs target-specific gimplification of 'VA_ARG_EXPR'. 34956 The first two parameters correspond to the arguments to 'va_arg'; 34957 the latter two are as in 'gimplify.c:gimplify_expr'. 34958 34959 -- Target Hook: bool TARGET_VALID_POINTER_MODE (scalar_int_mode MODE) 34960 Define this to return nonzero if the port can handle pointers with 34961 machine mode MODE. The default version of this hook returns true 34962 for both 'ptr_mode' and 'Pmode'. 34963 34964 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (ao_ref *REF) 34965 Define this to return nonzero if the memory reference REF may alias 34966 with the system C library errno location. The default version of 34967 this hook assumes the system C library errno location is either a 34968 declaration of type int or accessed by dereferencing a pointer to 34969 int. 34970 34971 -- Target Hook: machine_mode TARGET_TRANSLATE_MODE_ATTRIBUTE 34972 (machine_mode MODE) 34973 Define this hook if during mode attribute processing, the port 34974 should translate machine_mode MODE to another mode. For example, 34975 rs6000's 'KFmode', when it is the same as 'TFmode'. 34976 34977 The default version of the hook returns that mode that was passed 34978 in. 34979 34980 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (scalar_mode MODE) 34981 Define this to return nonzero if the port is prepared to handle 34982 insns involving scalar mode MODE. For a scalar mode to be 34983 considered supported, all the basic arithmetic and comparisons must 34984 work. 34985 34986 The default version of this hook returns true for any mode required 34987 to handle the basic C types (as defined by the port). Included 34988 here are the double-word arithmetic supported by the code in 34989 'optabs.c'. 34990 34991 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE) 34992 Define this to return nonzero if the port is prepared to handle 34993 insns involving vector mode MODE. At the very least, it must have 34994 move patterns for this mode. 34995 34996 -- Target Hook: bool TARGET_COMPATIBLE_VECTOR_TYPES_P (const_tree 34997 TYPE1, const_tree TYPE2) 34998 Return true if there is no target-specific reason for treating 34999 vector types TYPE1 and TYPE2 as distinct types. The caller has 35000 already checked for target-independent reasons, meaning that the 35001 types are known to have the same mode, to have the same number of 35002 elements, and to have what the caller considers to be compatible 35003 element types. 35004 35005 The main reason for defining this hook is to reject pairs of types 35006 that are handled differently by the target's calling convention. 35007 For example, when a new N-bit vector architecture is added to a 35008 target, the target may want to handle normal N-bit 'VECTOR_TYPE' 35009 arguments and return values in the same way as before, to maintain 35010 backwards compatibility. However, it may also provide new, 35011 architecture-specific 'VECTOR_TYPE's that are passed and returned 35012 in a more efficient way. It is then important to maintain a 35013 distinction between the "normal" 'VECTOR_TYPE's and the new 35014 architecture-specific ones. 35015 35016 The default implementation returns true, which is correct for most 35017 targets. 35018 35019 -- Target Hook: opt_machine_mode TARGET_ARRAY_MODE (machine_mode MODE, 35020 unsigned HOST_WIDE_INT NELEMS) 35021 Return the mode that GCC should use for an array that has NELEMS 35022 elements, with each element having mode MODE. Return no mode if 35023 the target has no special requirements. In the latter case, GCC 35024 looks for an integer mode of the appropriate size if available and 35025 uses BLKmode otherwise. Usually the search for the integer mode is 35026 limited to 'MAX_FIXED_MODE_SIZE', but the 35027 'TARGET_ARRAY_MODE_SUPPORTED_P' hook allows a larger mode to be 35028 used in specific cases. 35029 35030 The main use of this hook is to specify that an array of vectors 35031 should also have a vector mode. The default implementation returns 35032 no mode. 35033 35034 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode MODE, 35035 unsigned HOST_WIDE_INT NELEMS) 35036 Return true if GCC should try to use a scalar mode to store an 35037 array of NELEMS elements, given that each element has mode MODE. 35038 Returning true here overrides the usual 'MAX_FIXED_MODE' limit and 35039 allows GCC to use any defined integer mode. 35040 35041 One use of this hook is to support vector load and store operations 35042 that operate on several homogeneous vectors. For example, ARM NEON 35043 has operations like: 35044 35045 int8x8x3_t vld3_s8 (const int8_t *) 35046 35047 where the return type is defined as: 35048 35049 typedef struct int8x8x3_t 35050 { 35051 int8x8_t val[3]; 35052 } int8x8x3_t; 35053 35054 If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t' 35055 can have the same mode. GCC can then store 'int8x8x3_t's in 35056 registers rather than forcing them onto the stack. 35057 35058 -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P 35059 (scalar_float_mode MODE) 35060 Define this to return nonzero if libgcc provides support for the 35061 floating-point mode MODE, which is known to pass 35062 'TARGET_SCALAR_MODE_SUPPORTED_P'. The default version of this hook 35063 returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode', 35064 if such modes exist. 35065 35066 -- Target Hook: opt_scalar_float_mode TARGET_FLOATN_MODE (int N, bool 35067 EXTENDED) 35068 Define this to return the machine mode to use for the type 35069 '_FloatN', if EXTENDED is false, or the type '_FloatNx', if 35070 EXTENDED is true. If such a type is not supported, return 35071 'opt_scalar_float_mode ()'. The default version of this hook 35072 returns 'SFmode' for '_Float32', 'DFmode' for '_Float64' and 35073 '_Float32x' and 'TFmode' for '_Float128', if those modes exist and 35074 satisfy the requirements for those types and pass 35075 'TARGET_SCALAR_MODE_SUPPORTED_P' and 35076 'TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P'; for '_Float64x', it 35077 returns the first of 'XFmode' and 'TFmode' that exists and 35078 satisfies the same requirements; for other types, it returns 35079 'opt_scalar_float_mode ()'. The hook is only called for values of 35080 N and EXTENDED that are valid according to ISO/IEC TS 18661-3:2015; 35081 that is, N is one of 32, 64, 128, or, if EXTENDED is false, 16 or 35082 greater than 128 and a multiple of 32. 35083 35084 -- Target Hook: bool TARGET_FLOATN_BUILTIN_P (int FUNC) 35085 Define this to return true if the '_FloatN' and '_FloatNx' built-in 35086 functions should implicitly enable the built-in function without 35087 the '__builtin_' prefix in addition to the normal built-in function 35088 with the '__builtin_' prefix. The default is to only enable 35089 built-in functions without the '__builtin_' prefix for the GNU C 35090 langauge. In strict ANSI/ISO mode, the built-in function without 35091 the '__builtin_' prefix is not enabled. The argument 'FUNC' is the 35092 'enum built_in_function' id of the function to be enabled. 35093 35094 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P 35095 (machine_mode MODE) 35096 Define this to return nonzero for machine modes for which the port 35097 has small register classes. If this target hook returns nonzero 35098 for a given MODE, the compiler will try to minimize the lifetime of 35099 registers in MODE. The hook may be called with 'VOIDmode' as 35100 argument. In this case, the hook is expected to return nonzero if 35101 it returns nonzero for any mode. 35102 35103 On some machines, it is risky to let hard registers live across 35104 arbitrary insns. Typically, these machines have instructions that 35105 require values to be in specific registers (like an accumulator), 35106 and reload will fail if the required hard register is used for 35107 another purpose across such an insn. 35108 35109 Passes before reload do not know which hard registers will be used 35110 in an instruction, but the machine modes of the registers set or 35111 used in the instruction are already known. And for some machines, 35112 register classes are small for, say, integer registers but not for 35113 floating point registers. For example, the AMD x86-64 architecture 35114 requires specific registers for the legacy x86 integer 35115 instructions, but there are many SSE registers for floating point 35116 operations. On such targets, a good strategy may be to return 35117 nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero 35118 for the SSE register classes. 35119 35120 The default version of this hook returns false for any mode. It is 35121 always safe to redefine this hook to return with a nonzero value. 35122 But if you unnecessarily define it, you will reduce the amount of 35123 optimizations that can be performed in some cases. If you do not 35124 define this hook to return a nonzero value when it is required, the 35125 compiler will run out of spill registers and print a fatal error 35126 message. 35127 35128 35129File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 35130 3513118.9.8 How Scalar Function Values Are Returned 35132---------------------------------------------- 35133 35134This section discusses the macros that control returning scalars as 35135values--values that can fit in registers. 35136 35137 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 35138 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 35139 35140 Define this to return an RTX representing the place where a 35141 function returns or receives a value of data type RET_TYPE, a tree 35142 node representing a data type. FN_DECL_OR_TYPE is a tree node 35143 representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being 35144 called. If OUTGOING is false, the hook should compute the register 35145 in which the caller will see the return value. Otherwise, the hook 35146 should return an RTX representing the place where a function 35147 returns a value. 35148 35149 On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant. 35150 (Actually, on most machines, scalar values are returned in the same 35151 place regardless of mode.) The value of the expression is usually 35152 a 'reg' RTX for the hard register where the return value is stored. 35153 The value can also be a 'parallel' RTX, if the return value is in 35154 multiple places. See 'TARGET_FUNCTION_ARG' for an explanation of 35155 the 'parallel' form. Note that the callee will populate every 35156 location specified in the 'parallel', but if the first element of 35157 the 'parallel' contains the whole return value, callers will use 35158 that element as the canonical location and ignore the others. The 35159 m68k port uses this type of 'parallel' to return pointers in both 35160 '%a0' (the canonical location) and '%d0'. 35161 35162 If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 35163 the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is 35164 a scalar type. 35165 35166 If the precise function being called is known, FUNC is a tree node 35167 ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 35168 makes it possible to use a different value-returning convention for 35169 specific functions when all their calls are known. 35170 35171 Some target machines have "register windows" so that the register 35172 in which a function returns its value is not the same as the one in 35173 which the caller sees the value. For such machines, you should 35174 return different RTX depending on OUTGOING. 35175 35176 'TARGET_FUNCTION_VALUE' is not used for return values with 35177 aggregate data types, because these are returned in another way. 35178 See 'TARGET_STRUCT_VALUE_RTX' and related macros, below. 35179 35180 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 35181 This macro has been deprecated. Use 'TARGET_FUNCTION_VALUE' for a 35182 new target instead. 35183 35184 -- Macro: LIBCALL_VALUE (MODE) 35185 A C expression to create an RTX representing the place where a 35186 library function returns a value of mode MODE. 35187 35188 Note that "library function" in this context means a compiler 35189 support routine, used to perform arithmetic, whose name is known 35190 specially by the compiler and was not mentioned in the C code being 35191 compiled. 35192 35193 -- Target Hook: rtx TARGET_LIBCALL_VALUE (machine_mode MODE, const_rtx 35194 FUN) 35195 Define this hook if the back-end needs to know the name of the 35196 libcall function in order to determine where the result should be 35197 returned. 35198 35199 The mode of the result is given by MODE and the name of the called 35200 library function is given by FUN. The hook should return an RTX 35201 representing the place where the library function result will be 35202 returned. 35203 35204 If this hook is not defined, then LIBCALL_VALUE will be used. 35205 35206 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 35207 A C expression that is nonzero if REGNO is the number of a hard 35208 register in which the values of called function may come back. 35209 35210 A register whose use for returning values is limited to serving as 35211 the second of a pair (for a value of type 'double', say) need not 35212 be recognized by this macro. So for most machines, this definition 35213 suffices: 35214 35215 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 35216 35217 If the machine has register windows, so that the caller and the 35218 called function use different registers for the return value, this 35219 macro should recognize only the caller's register numbers. 35220 35221 This macro has been deprecated. Use 35222 'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead. 35223 35224 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int 35225 REGNO) 35226 A target hook that return 'true' if REGNO is the number of a hard 35227 register in which the values of called function may come back. 35228 35229 A register whose use for returning values is limited to serving as 35230 the second of a pair (for a value of type 'double', say) need not 35231 be recognized by this target hook. 35232 35233 If the machine has register windows, so that the caller and the 35234 called function use different registers for the return value, this 35235 target hook should recognize only the caller's register numbers. 35236 35237 If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be 35238 used. 35239 35240 -- Macro: APPLY_RESULT_SIZE 35241 Define this macro if 'untyped_call' and 'untyped_return' need more 35242 space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and 35243 restoring an arbitrary return value. 35244 35245 -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG 35246 Normally, when a function returns a structure by memory, the 35247 address is passed as an invisible pointer argument, but the 35248 compiler also arranges to return the address from the function like 35249 it would a normal pointer return value. Define this to true if 35250 that behavior is undesirable on your target. 35251 35252 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 35253 This hook should return true if values of type TYPE are returned at 35254 the most significant end of a register (in other words, if they are 35255 padded at the least significant end). You can assume that TYPE is 35256 returned in a register; the caller is required to check this. 35257 35258 Note that the register provided by 'TARGET_FUNCTION_VALUE' must be 35259 able to hold the complete return value. For example, if a 1-, 2- 35260 or 3-byte structure is returned at the most significant end of a 35261 4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode' 35262 rtx. 35263 35264 35265File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 35266 3526718.9.9 How Large Values Are Returned 35268------------------------------------ 35269 35270When a function value's mode is 'BLKmode' (and in some other cases), the 35271value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar 35272Return::). Instead, the caller passes the address of a block of memory 35273in which the value should be stored. This address is called the 35274"structure value address". 35275 35276 This section describes how to control returning structure values in 35277memory. 35278 35279 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 35280 const_tree FNTYPE) 35281 This target hook should return a nonzero value to say to return the 35282 function value in memory, just as large structures are always 35283 returned. Here TYPE will be the data type of the value, and FNTYPE 35284 will be the type of the function doing the returning, or 'NULL' for 35285 libcalls. 35286 35287 Note that values of mode 'BLKmode' must be explicitly handled by 35288 this function. Also, the option '-fpcc-struct-return' takes effect 35289 regardless of this macro. On most systems, it is possible to leave 35290 the hook undefined; this causes a default definition to be used, 35291 whose value is the constant 1 for 'BLKmode' values, and 0 35292 otherwise. 35293 35294 Do not use this hook to indicate that structures and unions should 35295 always be returned in memory. You should instead use 35296 'DEFAULT_PCC_STRUCT_RETURN' to indicate this. 35297 35298 -- Macro: DEFAULT_PCC_STRUCT_RETURN 35299 Define this macro to be 1 if all structure and union return values 35300 must be in memory. Since this results in slower code, this should 35301 be defined only if needed for compatibility with other compilers or 35302 with an ABI. If you define this macro to be 0, then the 35303 conventions used for structure and union return values are decided 35304 by the 'TARGET_RETURN_IN_MEMORY' target hook. 35305 35306 If not defined, this defaults to the value 1. 35307 35308 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 35309 This target hook should return the location of the structure value 35310 address (normally a 'mem' or 'reg'), or 0 if the address is passed 35311 as an "invisible" first argument. Note that FNDECL may be 'NULL', 35312 for libcalls. You do not need to define this target hook if the 35313 address is always passed as an "invisible" first argument. 35314 35315 On some architectures the place where the structure value address 35316 is found by the called function is not the same place that the 35317 caller put it. This can be due to register windows, or it could be 35318 because the function prologue moves it to a different place. 35319 INCOMING is '1' or '2' when the location is needed in the context 35320 of the called function, and '0' in the context of the caller. 35321 35322 If INCOMING is nonzero and the address is to be found on the stack, 35323 return a 'mem' which refers to the frame pointer. If INCOMING is 35324 '2', the result is being used to fetch the structure value address 35325 at the beginning of a function. If you need to emit adjusting 35326 code, you should do it at this point. 35327 35328 -- Macro: PCC_STATIC_STRUCT_RETURN 35329 Define this macro if the usual system convention on the target 35330 machine for returning structures and unions is for the called 35331 function to return the address of a static variable containing the 35332 value. 35333 35334 Do not define this if the usual system convention is for the caller 35335 to pass an address to the subroutine. 35336 35337 This macro has effect in '-fpcc-struct-return' mode, but it does 35338 nothing when you use '-freg-struct-return' mode. 35339 35340 -- Target Hook: fixed_size_mode TARGET_GET_RAW_RESULT_MODE (int REGNO) 35341 This target hook returns the mode to be used when accessing raw 35342 return registers in '__builtin_return'. Define this macro if the 35343 value in REG_RAW_MODE is not correct. 35344 35345 -- Target Hook: fixed_size_mode TARGET_GET_RAW_ARG_MODE (int REGNO) 35346 This target hook returns the mode to be used when accessing raw 35347 argument registers in '__builtin_apply_args'. Define this macro if 35348 the value in REG_RAW_MODE is not correct. 35349 35350 -- Target Hook: bool TARGET_EMPTY_RECORD_P (const_tree TYPE) 35351 This target hook returns true if the type is an empty record. The 35352 default is to return 'false'. 35353 35354 -- Target Hook: void TARGET_WARN_PARAMETER_PASSING_ABI 35355 (cumulative_args_t CA, tree TYPE) 35356 This target hook warns about the change in empty class parameter 35357 passing ABI. 35358 35359 35360File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 35361 3536218.9.10 Caller-Saves Register Allocation 35363---------------------------------------- 35364 35365If you enable it, GCC can save registers around function calls. This 35366makes it possible to use call-clobbered registers to hold variables that 35367must live across calls. 35368 35369 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 35370 A C expression specifying which mode is required for saving NREGS 35371 of a pseudo-register in call-clobbered hard register REGNO. If 35372 REGNO is unsuitable for caller save, 'VOIDmode' should be returned. 35373 For most machines this macro need not be defined since GCC will 35374 select the smallest suitable mode. 35375 35376 35377File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 35378 3537918.9.11 Function Entry and Exit 35380------------------------------- 35381 35382This section describes the macros that output function entry 35383("prologue") and exit ("epilogue") code. 35384 35385 -- Target Hook: void TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY (FILE 35386 *FILE, unsigned HOST_WIDE_INT PATCH_AREA_SIZE, bool RECORD_P) 35387 Generate a patchable area at the function start, consisting of 35388 PATCH_AREA_SIZE NOP instructions. If the target supports named 35389 sections and if RECORD_P is true, insert a pointer to the current 35390 location in the table of patchable functions. The default 35391 implementation of the hook places the table of pointers in the 35392 special section named '__patchable_function_entries'. 35393 35394 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE) 35395 If defined, a function that outputs the assembler code for entry to 35396 a function. The prologue is responsible for setting up the stack 35397 frame, initializing the frame pointer register, saving registers 35398 that must be saved, and allocating SIZE additional bytes of storage 35399 for the local variables. FILE is a stdio stream to which the 35400 assembler code should be output. 35401 35402 The label for the beginning of the function need not be output by 35403 this macro. That has already been done when the macro is run. 35404 35405 To determine which registers to save, the macro can refer to the 35406 array 'regs_ever_live': element R is nonzero if hard register R is 35407 used anywhere within the function. This implies the function 35408 prologue should save register R, provided it is not one of the 35409 call-used registers. ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise 35410 use 'regs_ever_live'.) 35411 35412 On machines that have "register windows", the function entry code 35413 does not save on the stack the registers that are in the windows, 35414 even if they are supposed to be preserved by function calls; 35415 instead it takes appropriate steps to "push" the register stack, if 35416 any non-call-used registers are used in the function. 35417 35418 On machines where functions may or may not have frame-pointers, the 35419 function entry code must vary accordingly; it must set up the frame 35420 pointer if one is wanted, and not otherwise. To determine whether 35421 a frame pointer is in wanted, the macro can refer to the variable 35422 'frame_pointer_needed'. The variable's value will be 1 at run time 35423 in a function that needs a frame pointer. *Note Elimination::. 35424 35425 The function entry code is responsible for allocating any stack 35426 space required for the function. This stack space consists of the 35427 regions listed below. In most cases, these regions are allocated 35428 in the order listed, with the last listed region closest to the top 35429 of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is 35430 defined, and the highest address if it is not defined). You can 35431 use a different order for a machine if doing so is more convenient 35432 or required for compatibility reasons. Except in cases where 35433 required by standard or by a debugger, there is no reason why the 35434 stack layout used by GCC need agree with that used by other 35435 compilers for a machine. 35436 35437 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 35438 If defined, a function that outputs assembler code at the end of a 35439 prologue. This should be used when the function prologue is being 35440 emitted as RTL, and you have some extra assembler that needs to be 35441 emitted. *Note prologue instruction pattern::. 35442 35443 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 35444 If defined, a function that outputs assembler code at the start of 35445 an epilogue. This should be used when the function epilogue is 35446 being emitted as RTL, and you have some extra assembler that needs 35447 to be emitted. *Note epilogue instruction pattern::. 35448 35449 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE) 35450 If defined, a function that outputs the assembler code for exit 35451 from a function. The epilogue is responsible for restoring the 35452 saved registers and stack pointer to their values when the function 35453 was called, and returning control to the caller. This macro takes 35454 the same argument as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and 35455 the registers to restore are determined from 'regs_ever_live' and 35456 'CALL_USED_REGISTERS' in the same way. 35457 35458 On some machines, there is a single instruction that does all the 35459 work of returning from the function. On these machines, give that 35460 instruction the name 'return' and do not define the macro 35461 'TARGET_ASM_FUNCTION_EPILOGUE' at all. 35462 35463 Do not define a pattern named 'return' if you want the 35464 'TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 35465 switches to control whether return instructions or epilogues are 35466 used, define a 'return' pattern with a validity condition that 35467 tests the target switches appropriately. If the 'return' pattern's 35468 validity condition is false, epilogues will be used. 35469 35470 On machines where functions may or may not have frame-pointers, the 35471 function exit code must vary accordingly. Sometimes the code for 35472 these two cases is completely different. To determine whether a 35473 frame pointer is wanted, the macro can refer to the variable 35474 'frame_pointer_needed'. The variable's value will be 1 when 35475 compiling a function that needs a frame pointer. 35476 35477 Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and 35478 'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 35479 The C variable 'current_function_is_leaf' is nonzero for such a 35480 function. *Note Leaf Functions::. 35481 35482 On some machines, some functions pop their arguments on exit while 35483 others leave that for the caller to do. For example, the 68020 35484 when given '-mrtd' pops arguments in functions that take a fixed 35485 number of arguments. 35486 35487 Your definition of the macro 'RETURN_POPS_ARGS' decides which 35488 functions pop their own arguments. 'TARGET_ASM_FUNCTION_EPILOGUE' 35489 needs to know what was decided. The number of bytes of the current 35490 function's arguments that this function should pop is available in 35491 'crtl->args.pops_args'. *Note Scalar Return::. 35492 35493 * A region of 'crtl->args.pretend_args_size' bytes of uninitialized 35494 space just underneath the first argument arriving on the stack. 35495 (This may not be at the very start of the allocated stack region if 35496 the calling sequence has pushed anything else since pushing the 35497 stack arguments. But usually, on such machines, nothing else has 35498 been pushed yet, because the function prologue itself does all the 35499 pushing.) This region is used on machines where an argument may be 35500 passed partly in registers and partly in memory, and, in some cases 35501 to support the features in '<stdarg.h>'. 35502 35503 * An area of memory used to save certain registers used by the 35504 function. The size of this area, which may also include space for 35505 such things as the return address and pointers to previous stack 35506 frames, is machine-specific and usually depends on which registers 35507 have been used in the function. Machines with register windows 35508 often do not require a save area. 35509 35510 * A region of at least SIZE bytes, possibly rounded up to an 35511 allocation boundary, to contain the local variables of the 35512 function. On some machines, this region and the save area may 35513 occur in the opposite order, with the save area closer to the top 35514 of the stack. 35515 35516 * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of 35517 'crtl->outgoing_args_size' bytes to be used for outgoing argument 35518 lists of the function. *Note Stack Arguments::. 35519 35520 -- Macro: EXIT_IGNORE_STACK 35521 Define this macro as a C expression that is nonzero if the return 35522 instruction or the function epilogue ignores the value of the stack 35523 pointer; in other words, if it is safe to delete an instruction to 35524 adjust the stack pointer before a return from the function. The 35525 default is 0. 35526 35527 Note that this macro's value is relevant only for functions for 35528 which frame pointers are maintained. It is never safe to delete a 35529 final stack adjustment in a function that has no frame pointer, and 35530 the compiler knows this regardless of 'EXIT_IGNORE_STACK'. 35531 35532 -- Macro: EPILOGUE_USES (REGNO) 35533 Define this macro as a C expression that is nonzero for registers 35534 that are used by the epilogue or the 'return' pattern. The stack 35535 and frame pointer registers are already assumed to be used as 35536 needed. 35537 35538 -- Macro: EH_USES (REGNO) 35539 Define this macro as a C expression that is nonzero for registers 35540 that are used by the exception handling mechanism, and so should be 35541 considered live on entry to an exception edge. 35542 35543 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 35544 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 35545 tree FUNCTION) 35546 A function that outputs the assembler code for a thunk function, 35547 used to implement C++ virtual function calls with multiple 35548 inheritance. The thunk acts as a wrapper around a virtual 35549 function, adjusting the implicit object parameter before handing 35550 control off to the real function. 35551 35552 First, emit code to add the integer DELTA to the location that 35553 contains the incoming first argument. Assume that this argument 35554 contains a pointer, and is the one used to pass the 'this' pointer 35555 in C++. This is the incoming argument _before_ the function 35556 prologue, e.g. '%o0' on a sparc. The addition must preserve the 35557 values of all other incoming arguments. 35558 35559 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 35560 be made after adding 'delta'. In particular, if P is the adjusted 35561 pointer, the following adjustment should be made: 35562 35563 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 35564 35565 After the additions, emit code to jump to FUNCTION, which is a 35566 'FUNCTION_DECL'. This is a direct pure jump, not a call, and does 35567 not touch the return address. Hence returning from FUNCTION will 35568 return to whoever called the current 'thunk'. 35569 35570 The effect must be as if FUNCTION had been called directly with the 35571 adjusted first argument. This macro is responsible for emitting 35572 all of the code for a thunk function; 35573 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' 35574 are not invoked. 35575 35576 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 35577 been extracted from it.) It might possibly be useful on some 35578 targets, but probably not. 35579 35580 If you do not define this macro, the target-independent code in the 35581 C++ front end will generate a less efficient heavyweight thunk that 35582 calls FUNCTION instead of jumping to it. The generic approach does 35583 not support varargs. 35584 35585 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 35586 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 35587 const_tree FUNCTION) 35588 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be 35589 able to output the assembler code for the thunk function specified 35590 by the arguments it is passed, and false otherwise. In the latter 35591 case, the generic approach will be used by the C++ front end, with 35592 the limitations previously exposed. 35593 35594 35595File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 35596 3559718.9.12 Generating Code for Profiling 35598------------------------------------- 35599 35600These macros will help you generate code for profiling. 35601 35602 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 35603 A C statement or compound statement to output to FILE some 35604 assembler code to call the profiling subroutine 'mcount'. 35605 35606 The details of how 'mcount' expects to be called are determined by 35607 your operating system environment, not by GCC. To figure them out, 35608 compile a small program for profiling using the system's installed 35609 C compiler and look at the assembler code that results. 35610 35611 Older implementations of 'mcount' expect the address of a counter 35612 variable to be loaded into some register. The name of this 35613 variable is 'LP' followed by the number LABELNO, so you would 35614 generate the name using 'LP%d' in a 'fprintf'. 35615 35616 -- Macro: PROFILE_HOOK 35617 A C statement or compound statement to output to FILE some assembly 35618 code to call the profiling subroutine 'mcount' even the target does 35619 not support profiling. 35620 35621 -- Macro: NO_PROFILE_COUNTERS 35622 Define this macro to be an expression with a nonzero value if the 35623 'mcount' subroutine on your system does not need a counter variable 35624 allocated for each function. This is true for almost all modern 35625 implementations. If you define this macro, you must not use the 35626 LABELNO argument to 'FUNCTION_PROFILER'. 35627 35628 -- Macro: PROFILE_BEFORE_PROLOGUE 35629 Define this macro if the code for function profiling should come 35630 before the function prologue. Normally, the profiling code comes 35631 after. 35632 35633 -- Target Hook: bool TARGET_KEEP_LEAF_WHEN_PROFILED (void) 35634 This target hook returns true if the target wants the leaf flag for 35635 the current function to stay true even if it calls mcount. This 35636 might make sense for targets using the leaf flag only to determine 35637 whether a stack frame needs to be generated or not and for which 35638 the call to mcount is generated before the function prologue. 35639 35640 35641File: gccint.info, Node: Tail Calls, Next: Shrink-wrapping separate components, Prev: Profiling, Up: Stack and Calling 35642 3564318.9.13 Permitting tail calls 35644----------------------------- 35645 35646 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 35647 EXP) 35648 True if it is OK to do sibling call optimization for the specified 35649 call expression EXP. DECL will be the called function, or 'NULL' 35650 if this is an indirect call. 35651 35652 It is not uncommon for limitations of calling conventions to 35653 prevent tail calls to functions outside the current unit of 35654 translation, or during PIC compilation. The hook is used to 35655 enforce these restrictions, as the 'sibcall' md pattern cannot 35656 fail, or fall over to a "normal" call. The criteria for successful 35657 sibling call optimization may vary greatly between different 35658 architectures. 35659 35660 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 35661 Add any hard registers to REGS that are live on entry to the 35662 function. This hook only needs to be defined to provide registers 35663 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 35664 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 35665 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, 35666 EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the 35667 PIC_OFFSET_TABLE_REGNUM. 35668 35669 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct 35670 hard_reg_set_container *) 35671 This hook should add additional registers that are computed by the 35672 prologue to the hard regset for shrink-wrapping optimization 35673 purposes. 35674 35675 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree) 35676 True if a function's return statements should be checked for 35677 matching the function's return type. This includes checking for 35678 falling off the end of a non-void function. Return false if no 35679 such check should be made. 35680 35681 35682File: gccint.info, Node: Shrink-wrapping separate components, Next: Stack Smashing Protection, Prev: Tail Calls, Up: Stack and Calling 35683 3568418.9.14 Shrink-wrapping separate components 35685------------------------------------------- 35686 35687The prologue may perform a variety of target dependent tasks such as 35688saving callee-saved registers, saving the return address, aligning the 35689stack, creating a stack frame, initializing the PIC register, setting up 35690the static chain, etc. 35691 35692 On some targets some of these tasks may be independent of others and 35693thus may be shrink-wrapped separately. These independent tasks are 35694referred to as components and are handled generically by the target 35695independent parts of GCC. 35696 35697 Using the following hooks those prologue or epilogue components can be 35698shrink-wrapped separately, so that the initialization (and possibly 35699teardown) those components do is not done as frequently on execution 35700paths where this would unnecessary. 35701 35702 What exactly those components are is up to the target code; the generic 35703code treats them abstractly, as a bit in an 'sbitmap'. These 'sbitmap's 35704are allocated by the 'shrink_wrap.get_separate_components' and 35705'shrink_wrap.components_for_bb' hooks, and deallocated by the generic 35706code. 35707 35708 -- Target Hook: sbitmap TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS 35709 (void) 35710 This hook should return an 'sbitmap' with the bits set for those 35711 components that can be separately shrink-wrapped in the current 35712 function. Return 'NULL' if the current function should not get any 35713 separate shrink-wrapping. Don't define this hook if it would 35714 always return 'NULL'. If it is defined, the other hooks in this 35715 group have to be defined as well. 35716 35717 -- Target Hook: sbitmap TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB 35718 (basic_block) 35719 This hook should return an 'sbitmap' with the bits set for those 35720 components where either the prologue component has to be executed 35721 before the 'basic_block', or the epilogue component after it, or 35722 both. 35723 35724 -- Target Hook: void TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS (sbitmap 35725 COMPONENTS, edge E, sbitmap EDGE_COMPONENTS, bool IS_PROLOGUE) 35726 This hook should clear the bits in the COMPONENTS bitmap for those 35727 components in EDGE_COMPONENTS that the target cannot handle on edge 35728 E, where IS_PROLOGUE says if this is for a prologue or an epilogue 35729 instead. 35730 35731 -- Target Hook: void TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS 35732 (sbitmap) 35733 Emit prologue insns for the components indicated by the parameter. 35734 35735 -- Target Hook: void TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS 35736 (sbitmap) 35737 Emit epilogue insns for the components indicated by the parameter. 35738 35739 -- Target Hook: void TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS 35740 (sbitmap) 35741 Mark the components in the parameter as handled, so that the 35742 'prologue' and 'epilogue' named patterns know to ignore those 35743 components. The target code should not hang on to the 'sbitmap', 35744 it will be deleted after this call. 35745 35746 35747File: gccint.info, Node: Stack Smashing Protection, Next: Miscellaneous Register Hooks, Prev: Shrink-wrapping separate components, Up: Stack and Calling 35748 3574918.9.15 Stack smashing protection 35750--------------------------------- 35751 35752 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 35753 This hook returns a 'DECL' node for the external variable to use 35754 for the stack protection guard. This variable is initialized by 35755 the runtime to some random value and is used to initialize the 35756 guard value that is placed at the top of the local stack frame. 35757 The type of this variable must be 'ptr_type_node'. 35758 35759 The default version of this hook creates a variable called 35760 '__stack_chk_guard', which is normally defined in 'libgcc2.c'. 35761 35762 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 35763 This hook returns a 'CALL_EXPR' that alerts the runtime that the 35764 stack protect guard variable has been modified. This expression 35765 should involve a call to a 'noreturn' function. 35766 35767 The default version of this hook invokes a function called 35768 '__stack_chk_fail', taking no arguments. This function is normally 35769 defined in 'libgcc2.c'. 35770 35771 -- Target Hook: bool TARGET_STACK_PROTECT_RUNTIME_ENABLED_P (void) 35772 Returns true if the target wants GCC's default stack protect 35773 runtime support, otherwise return false. The default 35774 implementation always returns true. 35775 35776 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, 35777 struct gcc_options *OPTS) 35778 Whether this target supports splitting the stack when the options 35779 described in OPTS have been passed. This is called after options 35780 have been parsed, so the target may reject splitting the stack in 35781 some configurations. The default version of this hook returns 35782 false. If REPORT is true, this function may issue a warning or 35783 error; if REPORT is false, it must simply return a value 35784 35785 -- Common Target Hook: vec<const char *> TARGET_GET_VALID_OPTION_VALUES 35786 (int OPTION_CODE, const char *PREFIX) 35787 The hook is used for options that have a non-trivial list of 35788 possible option values. OPTION_CODE is option code of opt_code 35789 enum type. PREFIX is used for bash completion and allows an 35790 implementation to return more specific completion based on the 35791 prefix. All string values should be allocated from heap memory and 35792 consumers should release them. The result will be pruned to cases 35793 with PREFIX if not NULL. 35794 35795 35796File: gccint.info, Node: Miscellaneous Register Hooks, Prev: Stack Smashing Protection, Up: Stack and Calling 35797 3579818.9.16 Miscellaneous register hooks 35799------------------------------------ 35800 35801 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS 35802 Set to true if each call that binds to a local definition 35803 explicitly clobbers or sets all non-fixed registers modified by 35804 performing the call. That is, by the call pattern itself, or by 35805 code that might be inserted by the linker (e.g. stubs, veneers, 35806 branch islands), but not including those modifiable by the callee. 35807 The affected registers may be mentioned explicitly in the call 35808 pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The 35809 default version of this hook is set to false. The purpose of this 35810 hook is to enable the fipa-ra optimization. 35811 35812 35813File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 35814 3581518.10 Implementing the Varargs Macros 35816===================================== 35817 35818GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that 35819work without change on machines that pass arguments on the stack. Other 35820machines require their own implementations of varargs, and the two 35821machine independent header files must have conditionals to include it. 35822 35823 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the 35824calling convention for 'va_start'. The traditional implementation takes 35825just one argument, which is the variable in which to store the argument 35826pointer. The ISO implementation of 'va_start' takes an additional 35827second argument. The user is supposed to write the last named argument 35828of the function here. 35829 35830 However, 'va_start' should not use this argument. The way to find the 35831end of the named arguments is with the built-in functions described 35832below. 35833 35834 -- Macro: __builtin_saveregs () 35835 Use this built-in function to save the argument registers in memory 35836 so that the varargs mechanism can access them. Both ISO and 35837 traditional versions of 'va_start' must use '__builtin_saveregs', 35838 unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 35839 35840 On some machines, '__builtin_saveregs' is open-coded under the 35841 control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'. On 35842 other machines, it calls a routine written in assembler language, 35843 found in 'libgcc2.c'. 35844 35845 Code generated for the call to '__builtin_saveregs' appears at the 35846 beginning of the function, as opposed to where the call to 35847 '__builtin_saveregs' is written, regardless of what the code is. 35848 This is because the registers must be saved before the function 35849 starts to use them for its own purposes. 35850 35851 -- Macro: __builtin_next_arg (LASTARG) 35852 This builtin returns the address of the first anonymous stack 35853 argument, as type 'void *'. If 'ARGS_GROW_DOWNWARD', it returns 35854 the address of the location above the first anonymous stack 35855 argument. Use it in 'va_start' to initialize the pointer for 35856 fetching arguments from the stack. Also use it in 'va_start' to 35857 verify that the second parameter LASTARG is the last named argument 35858 of the current function. 35859 35860 -- Macro: __builtin_classify_type (OBJECT) 35861 Since each machine has its own conventions for which data types are 35862 passed in which kind of register, your implementation of 'va_arg' 35863 has to embody these conventions. The easiest way to categorize the 35864 specified data type is to use '__builtin_classify_type' together 35865 with 'sizeof' and '__alignof__'. 35866 35867 '__builtin_classify_type' ignores the value of OBJECT, considering 35868 only its data type. It returns an integer describing what kind of 35869 type that is--integer, floating, pointer, structure, and so on. 35870 35871 The file 'typeclass.h' defines an enumeration that you can use to 35872 interpret the values of '__builtin_classify_type'. 35873 35874 These machine description macros help implement varargs: 35875 35876 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 35877 If defined, this hook produces the machine-specific code for a call 35878 to '__builtin_saveregs'. This code will be moved to the very 35879 beginning of the function, before any parameter access are made. 35880 The return value of this function should be an RTX that contains 35881 the value to use as the return of '__builtin_saveregs'. 35882 35883 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 35884 ARGS_SO_FAR, const function_arg_info &ARG, int 35885 *PRETEND_ARGS_SIZE, int SECOND_TIME) 35886 This target hook offers an alternative to using 35887 '__builtin_saveregs' and defining the hook 35888 'TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 35889 register arguments into the stack so that all the arguments appear 35890 to have been passed consecutively on the stack. Once this is done, 35891 you can use the standard implementation of varargs that works for 35892 machines that pass all their arguments on the stack. 35893 35894 The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data 35895 structure, containing the values that are obtained after processing 35896 the named arguments. The argument ARG describes the last of these 35897 named arguments. 35898 35899 The target hook should do two things: first, push onto the stack 35900 all the argument registers _not_ used for the named arguments, and 35901 second, store the size of the data thus pushed into the 35902 'int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 35903 that you store here will serve as additional offset for setting up 35904 the stack frame. 35905 35906 Because you must generate code to push the anonymous arguments at 35907 compile time without knowing their data types, 35908 'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 35909 have just a single category of argument register and use it 35910 uniformly for all data types. 35911 35912 If the argument SECOND_TIME is nonzero, it means that the arguments 35913 of the function are being analyzed for the second time. This 35914 happens for an inline function, which is not actually compiled 35915 until the end of the source file. The hook 35916 'TARGET_SETUP_INCOMING_VARARGS' should not generate any 35917 instructions in this case. 35918 35919 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 35920 CA) 35921 Define this hook to return 'true' if the location where a function 35922 argument is passed depends on whether or not it is a named 35923 argument. 35924 35925 This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG' 35926 is set for varargs and stdarg functions. If this hook returns 35927 'true', the NAMED argument is always true for named arguments, and 35928 false for unnamed arguments. If it returns 'false', but 35929 'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all 35930 arguments are treated as named. Otherwise, all named arguments 35931 except the last are treated as named. 35932 35933 You need not define this hook if it always returns 'false'. 35934 35935 -- Target Hook: void TARGET_CALL_ARGS (rtx, TREE) 35936 While generating RTL for a function call, this target hook is 35937 invoked once for each argument passed to the function, either a 35938 register returned by 'TARGET_FUNCTION_ARG' or a memory location. 35939 It is called just before the point where argument registers are 35940 stored. The type of the function to be called is also passed as 35941 the second argument; it is 'NULL_TREE' for libcalls. The 35942 'TARGET_END_CALL_ARGS' hook is invoked just after the code to copy 35943 the return reg has been emitted. This functionality can be used to 35944 perform special setup of call argument registers if a target needs 35945 it. For functions without arguments, the hook is called once with 35946 'pc_rtx' passed instead of an argument register. Most ports do not 35947 need to implement anything for this hook. 35948 35949 -- Target Hook: void TARGET_END_CALL_ARGS (void) 35950 This target hook is invoked while generating RTL for a function 35951 call, just after the point where the return reg is copied into a 35952 pseudo. It signals that all the call argument and return registers 35953 for the just emitted call are now no longer in use. Most ports do 35954 not need to implement anything for this hook. 35955 35956 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 35957 (cumulative_args_t CA) 35958 If you need to conditionally change ABIs so that one works with 35959 'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 35960 'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING' 35961 was defined, then define this hook to return 'true' if 35962 'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise. 35963 Otherwise, you should not define this hook. 35964 35965 -- Target Hook: rtx TARGET_LOAD_BOUNDS_FOR_ARG (rtx SLOT, rtx ARG, rtx 35966 SLOT_NO) 35967 This hook is used by expand pass to emit insn to load bounds of ARG 35968 passed in SLOT. Expand pass uses this hook in case bounds of ARG 35969 are not passed in register. If SLOT is a memory, then bounds are 35970 loaded as for regular pointer loaded from memory. If SLOT is not a 35971 memory then SLOT_NO is an integer constant holding number of the 35972 target dependent special slot which should be used to obtain 35973 bounds. Hook returns RTX holding loaded bounds. 35974 35975 -- Target Hook: void TARGET_STORE_BOUNDS_FOR_ARG (rtx ARG, rtx SLOT, 35976 rtx BOUNDS, rtx SLOT_NO) 35977 This hook is used by expand pass to emit insns to store BOUNDS of 35978 ARG passed in SLOT. Expand pass uses this hook in case BOUNDS of 35979 ARG are not passed in register. If SLOT is a memory, then BOUNDS 35980 are stored as for regular pointer stored in memory. If SLOT is not 35981 a memory then SLOT_NO is an integer constant holding number of the 35982 target dependent special slot which should be used to store BOUNDS. 35983 35984 -- Target Hook: rtx TARGET_LOAD_RETURNED_BOUNDS (rtx SLOT) 35985 This hook is used by expand pass to emit insn to load bounds 35986 returned by function call in SLOT. Hook returns RTX holding loaded 35987 bounds. 35988 35989 -- Target Hook: void TARGET_STORE_RETURNED_BOUNDS (rtx SLOT, rtx 35990 BOUNDS) 35991 This hook is used by expand pass to emit insn to store BOUNDS 35992 returned by function call into SLOT. 35993 35994 35995File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 35996 3599718.11 Support for Nested Functions 35998================================== 35999 36000Taking the address of a nested function requires special compiler 36001handling to ensure that the static chain register is loaded when the 36002function is invoked via an indirect call. 36003 36004 GCC has traditionally supported nested functions by creating an 36005executable "trampoline" at run time when the address of a nested 36006function is taken. This is a small piece of code which normally resides 36007on the stack, in the stack frame of the containing function. The 36008trampoline loads the static chain register and then jumps to the real 36009address of the nested function. 36010 36011 The use of trampolines requires an executable stack, which is a 36012security risk. To avoid this problem, GCC also supports another 36013strategy: using descriptors for nested functions. Under this model, 36014taking the address of a nested function results in a pointer to a 36015non-executable function descriptor object. Initializing the static 36016chain from the descriptor is handled at indirect call sites. 36017 36018 On some targets, including HPPA and IA-64, function descriptors may be 36019mandated by the ABI or be otherwise handled in a target-specific way by 36020the back end in its code generation strategy for indirect calls. GCC 36021also provides its own generic descriptor implementation to support the 36022'-fno-trampolines' option. In this case runtime detection of function 36023descriptors at indirect call sites relies on descriptor pointers being 36024tagged with a bit that is never set in bare function addresses. Since 36025GCC's generic function descriptors are not ABI-compliant, this option is 36026typically used only on a per-language basis (notably by Ada) or when it 36027can otherwise be applied to the whole program. 36028 36029 Define the following hook if your backend either implements 36030ABI-specified descriptor support, or can use GCC's generic descriptor 36031implementation for nested functions. 36032 36033 -- Target Hook: int TARGET_CUSTOM_FUNCTION_DESCRIPTORS 36034 If the target can use GCC's generic descriptor mechanism for nested 36035 functions, define this hook to a power of 2 representing an unused 36036 bit in function pointers which can be used to differentiate 36037 descriptors at run time. This value gives the number of bytes by 36038 which descriptor pointers are misaligned compared to function 36039 pointers. For example, on targets that require functions to be 36040 aligned to a 4-byte boundary, a value of either 1 or 2 is 36041 appropriate unless the architecture already reserves the bit for 36042 another purpose, such as on ARM. 36043 36044 Define this hook to 0 if the target implements ABI support for 36045 function descriptors in its standard calling sequence, like for 36046 example HPPA or IA-64. 36047 36048 Using descriptors for nested functions eliminates the need for 36049 trampolines that reside on the stack and require it to be made 36050 executable. 36051 36052 The following macros tell GCC how to generate code to allocate and 36053initialize an executable trampoline. You can also use this interface if 36054your back end needs to create ABI-specified non-executable descriptors; 36055in this case the "trampoline" created is the descriptor containing data 36056only. 36057 36058 The instructions in an executable trampoline must do two things: load a 36059constant address into the static chain register, and jump to the real 36060address of the nested function. On CISC machines such as the m68k, this 36061requires two instructions, a move immediate and a jump. Then the two 36062addresses exist in the trampoline as word-long immediate operands. On 36063RISC machines, it is often necessary to load each address into a 36064register in two parts. Then pieces of each address form separate 36065immediate operands. 36066 36067 The code generated to initialize the trampoline must store the variable 36068parts--the static chain value and the function address--into the 36069immediate operands of the instructions. On a CISC machine, this is 36070simply a matter of copying each address to a memory reference at the 36071proper offset from the start of the trampoline. On a RISC machine, it 36072may be necessary to take out pieces of the address and store them 36073separately. 36074 36075 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 36076 This hook is called by 'assemble_trampoline_template' to output, on 36077 the stream F, assembler code for a block of data that contains the 36078 constant parts of a trampoline. This code should not include a 36079 label--the label is taken care of automatically. 36080 36081 If you do not define this hook, it means no template is needed for 36082 the target. Do not define this hook on systems where the block 36083 move code to copy the trampoline into place would be larger than 36084 the code to generate it on the spot. 36085 36086 -- Macro: TRAMPOLINE_SECTION 36087 Return the section into which the trampoline template is to be 36088 placed (*note Sections::). The default value is 36089 'readonly_data_section'. 36090 36091 -- Macro: TRAMPOLINE_SIZE 36092 A C expression for the size in bytes of the trampoline, as an 36093 integer. 36094 36095 -- Macro: TRAMPOLINE_ALIGNMENT 36096 Alignment required for trampolines, in bits. 36097 36098 If you don't define this macro, the value of 'FUNCTION_ALIGNMENT' 36099 is used for aligning trampolines. 36100 36101 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 36102 rtx STATIC_CHAIN) 36103 This hook is called to initialize a trampoline. M_TRAMP is an RTX 36104 for the memory block for the trampoline; FNDECL is the 36105 'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for 36106 the static chain value that should be passed to the function when 36107 it is called. 36108 36109 If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 36110 first thing this hook should do is emit a block move into M_TRAMP 36111 from the memory block returned by 'assemble_trampoline_template'. 36112 Note that the block move need only cover the constant parts of the 36113 trampoline. If the target isolates the variable parts of the 36114 trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be 36115 copied. 36116 36117 If the target requires any other actions, such as flushing caches 36118 or enabling stack execution, these actions should be performed 36119 after initializing the trampoline proper. 36120 36121 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 36122 This hook should perform any machine-specific adjustment in the 36123 address of the trampoline. Its argument contains the address of 36124 the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'. In 36125 case the address to be used for a function call should be different 36126 from the address at which the template was stored, the different 36127 address should be returned; otherwise ADDR should be returned 36128 unchanged. If this hook is not defined, ADDR will be used for 36129 function calls. 36130 36131 Implementing trampolines is difficult on many machines because they 36132have separate instruction and data caches. Writing into a stack 36133location fails to clear the memory in the instruction cache, so when the 36134program jumps to that location, it executes the old contents. 36135 36136 Here are two possible solutions. One is to clear the relevant parts of 36137the instruction cache whenever a trampoline is set up. The other is to 36138make all trampolines identical, by having them jump to a standard 36139subroutine. The former technique makes trampoline execution faster; the 36140latter makes initialization faster. 36141 36142 To clear the instruction cache when a trampoline is initialized, define 36143the following macro. 36144 36145 -- Macro: CLEAR_INSN_CACHE (BEG, END) 36146 If defined, expands to a C expression clearing the _instruction 36147 cache_ in the specified interval. The definition of this macro 36148 would typically be a series of 'asm' statements. Both BEG and END 36149 are both pointer expressions. 36150 36151 To use a standard subroutine, define the following macro. In addition, 36152you must make sure that the instructions in a trampoline fill an entire 36153cache line with identical instructions, or else ensure that the 36154beginning of the trampoline code is always aligned at the same point in 36155its cache line. Look in 'm68k.h' as a guide. 36156 36157 -- Macro: TRANSFER_FROM_TRAMPOLINE 36158 Define this macro if trampolines need a special subroutine to do 36159 their work. The macro should expand to a series of 'asm' 36160 statements which will be compiled with GCC. They go in a library 36161 function named '__transfer_from_trampoline'. 36162 36163 If you need to avoid executing the ordinary prologue code of a 36164 compiled C function when you jump to the subroutine, you can do so 36165 by placing a special label of your own in the assembler code. Use 36166 one 'asm' statement to generate an assembler label, and another to 36167 make the label global. Then trampolines can use that label to jump 36168 directly to your special assembler code. 36169 36170 36171File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 36172 3617318.12 Implicit Calls to Library Routines 36174======================================== 36175 36176Here is an explanation of implicit calls to library routines. 36177 36178 -- Macro: DECLARE_LIBRARY_RENAMES 36179 This macro, if defined, should expand to a piece of C code that 36180 will get expanded when compiling functions for libgcc.a. It can be 36181 used to provide alternate names for GCC's internal library 36182 functions if there are ABI-mandated names that the compiler should 36183 provide. 36184 36185 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 36186 This hook should declare additional library routines or rename 36187 existing ones, using the functions 'set_optab_libfunc' and 36188 'init_one_libfunc' defined in 'optabs.c'. 'init_optabs' calls this 36189 macro after initializing all the normal library routines. 36190 36191 The default is to do nothing. Most ports don't need to define this 36192 hook. 36193 36194 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX 36195 If false (the default), internal library routines start with two 36196 underscores. If set to true, these routines start with '__gnu_' 36197 instead. E.g., '__muldi3' changes to '__gnu_muldi3'. This 36198 currently only affects functions defined in 'libgcc2.c'. If this 36199 is set to true, the 'tm.h' file must also '#define 36200 LIBGCC2_GNU_PREFIX'. 36201 36202 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 36203 This macro should return 'true' if the library routine that 36204 implements the floating point comparison operator COMPARISON in 36205 mode MODE will return a boolean, and FALSE if it will return a 36206 tristate. 36207 36208 GCC's own floating point libraries return tristates from the 36209 comparison operators, so the default returns false always. Most 36210 ports don't need to define this macro. 36211 36212 -- Macro: TARGET_LIB_INT_CMP_BIASED 36213 This macro should evaluate to 'true' if the integer comparison 36214 functions (like '__cmpdi2') return 0 to indicate that the first 36215 operand is smaller than the second, 1 to indicate that they are 36216 equal, and 2 to indicate that the first operand is greater than the 36217 second. If this macro evaluates to 'false' the comparison 36218 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 36219 target uses the routines in 'libgcc.a', you do not need to define 36220 this macro. 36221 36222 -- Macro: TARGET_HAS_NO_HW_DIVIDE 36223 This macro should be defined if the target has no hardware divide 36224 instructions. If this macro is defined, GCC will use an algorithm 36225 which make use of simple logical and arithmetic operations for 36226 64-bit division. If the macro is not defined, GCC will use an 36227 algorithm which make use of a 64-bit by 32-bit divide primitive. 36228 36229 -- Macro: TARGET_EDOM 36230 The value of 'EDOM' on the target machine, as a C integer constant 36231 expression. If you don't define this macro, GCC does not attempt 36232 to deposit the value of 'EDOM' into 'errno' directly. Look in 36233 '/usr/include/errno.h' to find the value of 'EDOM' on your system. 36234 36235 If you do not define 'TARGET_EDOM', then compiled code reports 36236 domain errors by calling the library function and letting it report 36237 the error. If mathematical functions on your system use 'matherr' 36238 when there is an error, then you should leave 'TARGET_EDOM' 36239 undefined so that 'matherr' is used normally. 36240 36241 -- Macro: GEN_ERRNO_RTX 36242 Define this macro as a C expression to create an rtl expression 36243 that refers to the global "variable" 'errno'. (On certain systems, 36244 'errno' may not actually be a variable.) If you don't define this 36245 macro, a reasonable default is used. 36246 36247 -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class 36248 FN_CLASS) 36249 This hook determines whether a function from a class of functions 36250 FN_CLASS is present in the target C library. 36251 36252 -- Target Hook: bool TARGET_LIBC_HAS_FAST_FUNCTION (int FCODE) 36253 This hook determines whether a function from a class of functions 36254 '(enum function_class)'FCODE has a fast implementation. 36255 36256 -- Macro: NEXT_OBJC_RUNTIME 36257 Set this macro to 1 to use the "NeXT" Objective-C message sending 36258 conventions by default. This calling convention involves passing 36259 the object, the selector and the method arguments all at once to 36260 the method-lookup library function. This is the usual setting when 36261 targeting Darwin/Mac OS X systems, which have the NeXT runtime 36262 installed. 36263 36264 If the macro is set to 0, the "GNU" Objective-C message sending 36265 convention will be used by default. This convention passes just 36266 the object and the selector to the method-lookup function, which 36267 returns a pointer to the method. 36268 36269 In either case, it remains possible to select code-generation for 36270 the alternate scheme, by means of compiler command line switches. 36271 36272 36273File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 36274 3627518.13 Addressing Modes 36276====================== 36277 36278This is about addressing modes. 36279 36280 -- Macro: HAVE_PRE_INCREMENT 36281 -- Macro: HAVE_PRE_DECREMENT 36282 -- Macro: HAVE_POST_INCREMENT 36283 -- Macro: HAVE_POST_DECREMENT 36284 A C expression that is nonzero if the machine supports 36285 pre-increment, pre-decrement, post-increment, or post-decrement 36286 addressing respectively. 36287 36288 -- Macro: HAVE_PRE_MODIFY_DISP 36289 -- Macro: HAVE_POST_MODIFY_DISP 36290 A C expression that is nonzero if the machine supports pre- or 36291 post-address side-effect generation involving constants other than 36292 the size of the memory operand. 36293 36294 -- Macro: HAVE_PRE_MODIFY_REG 36295 -- Macro: HAVE_POST_MODIFY_REG 36296 A C expression that is nonzero if the machine supports pre- or 36297 post-address side-effect generation involving a register 36298 displacement. 36299 36300 -- Macro: CONSTANT_ADDRESS_P (X) 36301 A C expression that is 1 if the RTX X is a constant which is a 36302 valid address. On most machines the default definition of 36303 '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 36304 but a few machines are more restrictive as to which constant 36305 addresses are supported. 36306 36307 -- Macro: CONSTANT_P (X) 36308 'CONSTANT_P', which is defined by target-independent code, accepts 36309 integer-values expressions whose values are not explicitly known, 36310 such as 'symbol_ref', 'label_ref', and 'high' expressions and 36311 'const' arithmetic expressions, in addition to 'const_int' and 36312 'const_double' expressions. 36313 36314 -- Macro: MAX_REGS_PER_ADDRESS 36315 A number, the maximum number of registers that can appear in a 36316 valid memory address. Note that it is up to you to specify a value 36317 equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P' 36318 would ever accept. 36319 36320 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE, 36321 rtx X, bool STRICT) 36322 A function that returns whether X (an RTX) is a legitimate memory 36323 address on the target machine for a memory operand of mode MODE. 36324 36325 Legitimate addresses are defined in two variants: a strict variant 36326 and a non-strict one. The STRICT parameter chooses which variant 36327 is desired by the caller. 36328 36329 The strict variant is used in the reload pass. It must be defined 36330 so that any pseudo-register that has not been allocated a hard 36331 register is considered a memory reference. This is because in 36332 contexts where some kind of register is required, a pseudo-register 36333 with no hard register must be rejected. For non-hard registers, 36334 the strict variant should look up the 'reg_renumber' array; it 36335 should then proceed using the hard register number in the array, or 36336 treat the pseudo as a memory reference if the array holds '-1'. 36337 36338 The non-strict variant is used in other passes. It must be defined 36339 to accept all pseudo-registers in every context where some kind of 36340 register is required. 36341 36342 Normally, constant addresses which are the sum of a 'symbol_ref' 36343 and an integer are stored inside a 'const' RTX to mark them as 36344 constant. Therefore, there is no need to recognize such sums 36345 specifically as legitimate addresses. Normally you would simply 36346 recognize any 'const' as legitimate. 36347 36348 Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant 36349 sums that are not marked with 'const'. It assumes that a naked 36350 'plus' indicates indexing. If so, then you _must_ reject such 36351 naked constant sums as illegitimate addresses, so that none of them 36352 will be given to 'PRINT_OPERAND_ADDRESS'. 36353 36354 On some machines, whether a symbolic address is legitimate depends 36355 on the section that the address refers to. On these machines, 36356 define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the 36357 information into the 'symbol_ref', and then check for it here. 36358 When you see a 'const', you will have to look inside it to find the 36359 'symbol_ref' in order to determine the section. *Note Assembler 36360 Format::. 36361 36362 Some ports are still using a deprecated legacy substitute for this 36363 hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 36364 syntax: 36365 36366 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 36367 36368 and should 'goto LABEL' if the address X is a valid address on the 36369 target machine for a memory operand of mode MODE. 36370 36371 Compiler source files that want to use the strict variant of this 36372 macro define the macro 'REG_OK_STRICT'. You should use an '#ifdef 36373 REG_OK_STRICT' conditional to define the strict variant in that 36374 case and the non-strict variant otherwise. 36375 36376 Using the hook is usually simpler because it limits the number of 36377 files that are recompiled when changes are made. 36378 36379 -- Macro: TARGET_MEM_CONSTRAINT 36380 A single character to be used instead of the default ''m'' 36381 character for general memory addresses. This defines the 36382 constraint letter which matches the memory addresses accepted by 36383 'TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 36384 support new address formats in your back end without changing the 36385 semantics of the ''m'' constraint. This is necessary in order to 36386 preserve functionality of inline assembly constructs using the 36387 ''m'' constraint. 36388 36389 -- Macro: FIND_BASE_TERM (X) 36390 A C expression to determine the base term of address X, or to 36391 provide a simplified version of X from which 'alias.c' can easily 36392 find the base term. This macro is used in only two places: 36393 'find_base_value' and 'find_base_term' in 'alias.c'. 36394 36395 It is always safe for this macro to not be defined. It exists so 36396 that alias analysis can understand machine-dependent addresses. 36397 36398 The typical use of this macro is to handle addresses containing a 36399 label_ref or symbol_ref within an UNSPEC. 36400 36401 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, 36402 machine_mode MODE) 36403 This hook is given an invalid memory address X for an operand of 36404 mode MODE and should try to return a valid memory address. 36405 36406 X will always be the result of a call to 'break_out_memory_refs', 36407 and OLDX will be the operand that was given to that function to 36408 produce X. 36409 36410 The code of the hook should not alter the substructure of X. If it 36411 transforms X into a more legitimate form, it should return the new 36412 X. 36413 36414 It is not necessary for this hook to come up with a legitimate 36415 address, with the exception of native TLS addresses (*note Emulated 36416 TLS::). The compiler has standard ways of doing so in all cases. 36417 In fact, if the target supports only emulated TLS, it is safe to 36418 omit this hook or make it return X if it cannot find a valid way to 36419 legitimize the address. But often a machine-dependent strategy can 36420 generate better code. 36421 36422 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 36423 WIN) 36424 A C compound statement that attempts to replace X, which is an 36425 address that needs reloading, with a valid memory address for an 36426 operand of mode MODE. WIN will be a C statement label elsewhere in 36427 the code. It is not necessary to define this macro, but it might 36428 be useful for performance reasons. 36429 36430 For example, on the i386, it is sometimes possible to use a single 36431 reload register instead of two by reloading a sum of two pseudo 36432 registers into a register. On the other hand, for number of RISC 36433 processors offsets are limited so that often an intermediate 36434 address needs to be generated in order to address a stack slot. By 36435 defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 36436 intermediate addresses generated for adjacent some stack slots can 36437 be made identical, and thus be shared. 36438 36439 _Note_: This macro should be used with caution. It is necessary to 36440 know something of how reload works in order to effectively use 36441 this, and it is quite easy to produce macros that build in too much 36442 knowledge of reload internals. 36443 36444 _Note_: This macro must be able to reload an address created by a 36445 previous invocation of this macro. If it fails to handle such 36446 addresses then the compiler may generate incorrect code or abort. 36447 36448 The macro definition should use 'push_reload' to indicate parts 36449 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 36450 suitable to be passed unaltered to 'push_reload'. 36451 36452 The code generated by this macro must not alter the substructure of 36453 X. If it transforms X into a more legitimate form, it should 36454 assign X (which will always be a C variable) a new value. This 36455 also applies to parts that you change indirectly by calling 36456 'push_reload'. 36457 36458 The macro definition may use 'strict_memory_address_p' to test if 36459 the address has become legitimate. 36460 36461 If you want to change only a part of X, one standard way of doing 36462 this is to use 'copy_rtx'. Note, however, that it unshares only a 36463 single level of rtl. Thus, if the part to be changed is not at the 36464 top level, you'll need to replace first the top level. It is not 36465 necessary for this macro to come up with a legitimate address; but 36466 often a machine-dependent strategy can generate better code. 36467 36468 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR, 36469 addr_space_t ADDRSPACE) 36470 This hook returns 'true' if memory address ADDR in address space 36471 ADDRSPACE can have different meanings depending on the machine mode 36472 of the memory reference it is used for or if the address is valid 36473 for some modes but not others. 36474 36475 Autoincrement and autodecrement addresses typically have 36476 mode-dependent effects because the amount of the increment or 36477 decrement is the size of the operand being addressed. Some 36478 machines have other mode-dependent addresses. Many RISC machines 36479 have no mode-dependent addresses. 36480 36481 You may assume that ADDR is a valid address for the machine. 36482 36483 The default version of this hook returns 'false'. 36484 36485 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE, 36486 rtx X) 36487 This hook returns true if X is a legitimate constant for a 36488 MODE-mode immediate operand on the target machine. You can assume 36489 that X satisfies 'CONSTANT_P', so you need not check this. 36490 36491 The default definition returns true. 36492 36493 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 36494 This hook is used to undo the possibly obfuscating effects of the 36495 'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros. 36496 Some backend implementations of these macros wrap symbol references 36497 inside an 'UNSPEC' rtx to represent PIC or similar addressing 36498 modes. This target hook allows GCC's optimizers to understand the 36499 semantics of these opaque 'UNSPEC's by converting them back into 36500 their original form. 36501 36502 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X) 36503 This hook should return true if X should not be emitted into debug 36504 sections. 36505 36506 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode MODE, 36507 rtx X) 36508 This hook should return true if X is of a form that cannot (or 36509 should not) be spilled to the constant pool. MODE is the mode of 36510 X. 36511 36512 The default version of this hook returns false. 36513 36514 The primary reason to define this hook is to prevent reload from 36515 deciding that a non-legitimate constant would be better reloaded 36516 from the constant pool instead of spilling and reloading a register 36517 holding the constant. This restriction is often true of addresses 36518 of TLS symbols for various targets. 36519 36520 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode 36521 MODE, const_rtx X) 36522 This hook should return true if pool entries for constant X can be 36523 placed in an 'object_block' structure. MODE is the mode of X. 36524 36525 The default version returns false for all constants. 36526 36527 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL) 36528 This hook should return true if pool entries for DECL should be 36529 placed in an 'object_block' structure. 36530 36531 The default version returns true for all decls. 36532 36533 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL) 36534 This hook should return the DECL of a function that implements the 36535 reciprocal of the machine-specific builtin function FNDECL, or 36536 'NULL_TREE' if such a function is not available. 36537 36538 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 36539 This hook should return the DECL of a function F that given an 36540 address ADDR as an argument returns a mask M that can be used to 36541 extract from two vectors the relevant data that resides in ADDR in 36542 case ADDR is not properly aligned. 36543 36544 The autovectorizer, when vectorizing a load operation from an 36545 address ADDR that may be unaligned, will generate two vector loads 36546 from the two aligned addresses around ADDR. It then generates a 36547 'REALIGN_LOAD' operation to extract the relevant data from the two 36548 loaded vectors. The first two arguments to 'REALIGN_LOAD', V1 and 36549 V2, are the two vectors, each of size VS, and the third argument, 36550 OFF, defines how the data will be extracted from these two vectors: 36551 if OFF is 0, then the returned vector is V2; otherwise, the 36552 returned vector is composed from the last VS-OFF elements of V1 36553 concatenated to the first OFF elements of V2. 36554 36555 If this hook is defined, the autovectorizer will generate a call to 36556 F (using the DECL tree that this hook returns) and will use the 36557 return value of F as the argument OFF to 'REALIGN_LOAD'. 36558 Therefore, the mask M returned by F should comply with the 36559 semantics expected by 'REALIGN_LOAD' described above. If this hook 36560 is not defined, then ADDR will be used as the argument OFF to 36561 'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 36562 will be considered. 36563 36564 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum 36565 vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN) 36566 Returns cost of different scalar or vector statements for 36567 vectorization cost model. For vector memory operations the cost 36568 may depend on type (VECTYPE) and misalignment value (MISALIGN). 36569 36570 -- Target Hook: poly_uint64 TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT 36571 (const_tree TYPE) 36572 This hook returns the preferred alignment in bits for accesses to 36573 vectors of type TYPE in vectorized code. This might be less than 36574 or greater than the ABI-defined value returned by 36575 'TARGET_VECTOR_ALIGNMENT'. It can be equal to the alignment of a 36576 single element, in which case the vectorizer will not try to 36577 optimize for alignment. 36578 36579 The default hook returns 'TYPE_ALIGN (TYPE)', which is correct for 36580 most targets. 36581 36582 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 36583 (const_tree TYPE, bool IS_PACKED) 36584 Return true if vector alignment is reachable (by peeling N 36585 iterations) for the given scalar type TYPE. IS_PACKED is false if 36586 the scalar access using TYPE is known to be naturally aligned. 36587 36588 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST (machine_mode 36589 MODE, rtx OUTPUT, rtx IN0, rtx IN1, const vec_perm_indices 36590 &SEL) 36591 This hook is used to test whether the target can permute up to two 36592 vectors of mode MODE using the permutation vector 'sel', and also 36593 to emit such a permutation. In the former case IN0, IN1 and OUT 36594 are all null. In the latter case IN0 and IN1 are the source 36595 vectors and OUT is the destination vector; all three are registers 36596 of mode MODE. IN1 is the same as IN0 if SEL describes a 36597 permutation on one vector instead of two. 36598 36599 Return true if the operation is possible, emitting instructions for 36600 it if rtxes are provided. 36601 36602 If the hook returns false for a mode with multibyte elements, GCC 36603 will try the equivalent byte operation. If that also fails, it 36604 will try forcing the selector into a register and using the 36605 VEC_PERMMODE instruction pattern. There is no need for the hook to 36606 handle these two implementation approaches itself. 36607 36608 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION 36609 (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 36610 This hook should return the decl of a function that implements the 36611 vectorized variant of the function with the 'combined_fn' code CODE 36612 or 'NULL_TREE' if such a function is not available. The return 36613 type of the vectorized function shall be of vector type 36614 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 36615 36616 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION 36617 (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 36618 This hook should return the decl of a function that implements the 36619 vectorized variant of target built-in function 'fndecl'. The 36620 return type of the vectorized function shall be of vector type 36621 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 36622 36623 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT 36624 (machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool 36625 IS_PACKED) 36626 This hook should return true if the target supports misaligned 36627 vector store/load of a specific factor denoted in the MISALIGNMENT 36628 parameter. The vector store/load should be of machine mode MODE 36629 and the elements in the vectors should be of type TYPE. IS_PACKED 36630 parameter is true if the memory access is defined in a packed 36631 struct. 36632 36633 -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE 36634 (scalar_mode MODE) 36635 This hook should return the preferred mode for vectorizing scalar 36636 mode MODE. The default is equal to 'word_mode', because the 36637 vectorizer can do some transformations even in absence of 36638 specialized SIMD hardware. 36639 36640 -- Target Hook: machine_mode TARGET_VECTORIZE_SPLIT_REDUCTION 36641 (machine_mode) 36642 This hook should return the preferred mode to split the final 36643 reduction step on MODE to. The reduction is then carried out 36644 reducing upper against lower halves of vectors recursively until 36645 the specified mode is reached. The default is MODE which means no 36646 splitting. 36647 36648 -- Target Hook: unsigned int 36649 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES (vector_modes 36650 *MODES, bool ALL) 36651 If using the mode returned by 36652 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is not the only approach 36653 worth considering, this hook should add one mode to MODES for each 36654 useful alternative approach. These modes are then passed to 36655 'TARGET_VECTORIZE_RELATED_MODE' to obtain the vector mode for a 36656 given element mode. 36657 36658 The modes returned in MODES should use the smallest element mode 36659 possible for the vectorization approach that they represent, 36660 preferring integer modes over floating-poing modes in the event of 36661 a tie. The first mode should be the 36662 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' for its element mode. 36663 36664 If ALL is true, add suitable vector modes even when they are 36665 generally not expected to be worthwhile. 36666 36667 The hook returns a bitmask of flags that control how the modes in 36668 MODES are used. The flags are: 36669 'VECT_COMPARE_COSTS' 36670 Tells the loop vectorizer to try all the provided modes and 36671 pick the one with the lowest cost. By default the vectorizer 36672 will choose the first mode that works. 36673 36674 The hook does not need to do anything if the vector returned by 36675 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE' is the only one relevant for 36676 autovectorization. The default implementation adds no modes and 36677 returns 0. 36678 36679 -- Target Hook: opt_machine_mode TARGET_VECTORIZE_RELATED_MODE 36680 (machine_mode VECTOR_MODE, scalar_mode ELEMENT_MODE, 36681 poly_uint64 NUNITS) 36682 If a piece of code is using vector mode VECTOR_MODE and also wants 36683 to operate on elements of mode ELEMENT_MODE, return the vector mode 36684 it should use for those elements. If NUNITS is nonzero, ensure 36685 that the mode has exactly NUNITS elements, otherwise pick whichever 36686 vector size pairs the most naturally with VECTOR_MODE. Return an 36687 empty 'opt_machine_mode' if there is no supported vector mode with 36688 the required properties. 36689 36690 There is no prescribed way of handling the case in which NUNITS is 36691 zero. One common choice is to pick a vector mode with the same 36692 size as VECTOR_MODE; this is the natural choice if the target has a 36693 fixed vector size. Another option is to choose a vector mode with 36694 the same number of elements as VECTOR_MODE; this is the natural 36695 choice if the target has a fixed number of elements. 36696 Alternatively, the hook might choose a middle ground, such as 36697 trying to keep the number of elements as similar as possible while 36698 applying maximum and minimum vector sizes. 36699 36700 The default implementation uses 'mode_for_vector' to find the 36701 requested mode, returning a mode with the same size as VECTOR_MODE 36702 when NUNITS is zero. This is the correct behavior for most 36703 targets. 36704 36705 -- Target Hook: opt_machine_mode TARGET_VECTORIZE_GET_MASK_MODE 36706 (machine_mode MODE) 36707 Return the mode to use for a vector mask that holds one boolean 36708 result for each element of vector mode MODE. The returned mask 36709 mode can be a vector of integers (class 'MODE_VECTOR_INT'), a 36710 vector of booleans (class 'MODE_VECTOR_BOOL') or a scalar integer 36711 (class 'MODE_INT'). Return an empty 'opt_machine_mode' if no such 36712 mask mode exists. 36713 36714 The default implementation returns a 'MODE_VECTOR_INT' with the 36715 same size and number of elements as MODE, if such a mode exists. 36716 36717 -- Target Hook: bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned 36718 IFN) 36719 This hook returns true if masked internal function IFN (really of 36720 type 'internal_fn') should be considered expensive when the mask is 36721 all zeros. GCC can then try to branch around the instruction 36722 instead. 36723 36724 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (class loop 36725 *LOOP_INFO) 36726 This hook should initialize target-specific data structures in 36727 preparation for modeling the costs of vectorizing a loop or basic 36728 block. The default allocates three unsigned integers for 36729 accumulating costs for the prologue, body, and epilogue of the loop 36730 or basic block. If LOOP_INFO is non-NULL, it identifies the loop 36731 being vectorized; otherwise a single block is being vectorized. 36732 36733 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA, 36734 int COUNT, enum vect_cost_for_stmt KIND, class _stmt_vec_info 36735 *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE) 36736 This hook should update the target-specific DATA in response to 36737 adding COUNT copies of the given KIND of statement to a loop or 36738 basic block. The default adds the builtin vectorizer cost for the 36739 copies of the statement to the accumulator specified by WHERE, (the 36740 prologue, body, or epilogue) and returns the amount added. The 36741 return value should be viewed as a tentative cost that may later be 36742 revised. 36743 36744 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned 36745 *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST) 36746 This hook should complete calculations of the cost of vectorizing a 36747 loop or basic block based on DATA, and return the prologue, body, 36748 and epilogue costs as unsigned integers. The default returns the 36749 value of the three accumulators. 36750 36751 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA) 36752 This hook should release DATA and any related data structures 36753 allocated by TARGET_VECTORIZE_INIT_COST. The default releases the 36754 accumulator. 36755 36756 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree 36757 MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE) 36758 Target builtin that implements vector gather operation. 36759 MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar 36760 type of the index, scaled by SCALE. The default is 'NULL_TREE' 36761 which means to not vectorize gather loads. 36762 36763 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree 36764 VECTYPE, const_tree INDEX_TYPE, int SCALE) 36765 Target builtin that implements vector scatter operation. VECTYPE 36766 is the vector type of the store and INDEX_TYPE is scalar type of 36767 the index, scaled by SCALE. The default is 'NULL_TREE' which means 36768 to not vectorize scatter stores. 36769 36770 -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN 36771 (struct cgraph_node *, struct cgraph_simd_clone *, TREE, INT) 36772 This hook should set VECSIZE_MANGLE, VECSIZE_INT, VECSIZE_FLOAT 36773 fields in SIMD_CLONE structure pointed by CLONE_INFO argument and 36774 also SIMDLEN field if it was previously 0. The hook should return 36775 0 if SIMD clones shouldn't be emitted, or number of VECSIZE_MANGLE 36776 variants that should be emitted. 36777 36778 -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *) 36779 This hook should add implicit 'attribute(target("..."))' attribute 36780 to SIMD clone NODE if needed. 36781 36782 -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *) 36783 This hook should return -1 if SIMD clone NODE shouldn't be used in 36784 vectorized loops in current function, or non-negative number if it 36785 is usable. In that case, the smaller the number is, the more 36786 desirable it is to use it. 36787 36788 -- Target Hook: int TARGET_SIMT_VF (void) 36789 Return number of threads in SIMT thread group on the target. 36790 36791 -- Target Hook: int TARGET_OMP_DEVICE_KIND_ARCH_ISA (enum 36792 omp_device_kind_arch_isa TRAIT, const char *NAME) 36793 Return 1 if TRAIT NAME is present in the OpenMP context's device 36794 trait set, return 0 if not present in any OpenMP context in the 36795 whole translation unit, or -1 if not present in the current OpenMP 36796 context but might be present in another OpenMP context in the same 36797 TU. 36798 36799 -- Target Hook: bool TARGET_GOACC_VALIDATE_DIMS (tree DECL, int *DIMS, 36800 int FN_LEVEL, unsigned USED) 36801 This hook should check the launch dimensions provided for an 36802 OpenACC compute region, or routine. Defaulted values are 36803 represented as -1 and non-constant values as 0. The FN_LEVEL is 36804 negative for the function corresponding to the compute region. For 36805 a routine it is the outermost level at which partitioned execution 36806 may be spawned. The hook should verify non-default values. If 36807 DECL is NULL, global defaults are being validated and unspecified 36808 defaults should be filled in. Diagnostics should be issued as 36809 appropriate. Return true, if changes have been made. You must 36810 override this hook to provide dimensions larger than 1. 36811 36812 -- Target Hook: int TARGET_GOACC_DIM_LIMIT (int AXIS) 36813 This hook should return the maximum size of a particular dimension, 36814 or zero if unbounded. 36815 36816 -- Target Hook: bool TARGET_GOACC_FORK_JOIN (gcall *CALL, const int 36817 *DIMS, bool IS_FORK) 36818 This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN 36819 function calls to target-specific gimple, or indicate whether they 36820 should be retained. It is executed during the oacc_device_lower 36821 pass. It should return true, if the call should be retained. It 36822 should return false, if it is to be deleted (either because 36823 target-specific gimple has been inserted before it, or there is no 36824 need for it). The default hook returns false, if there are no RTL 36825 expanders for them. 36826 36827 -- Target Hook: void TARGET_GOACC_REDUCTION (gcall *CALL) 36828 This hook is used by the oacc_transform pass to expand calls to the 36829 GOACC_REDUCTION internal function, into a sequence of gimple 36830 instructions. CALL is gimple statement containing the call to the 36831 function. This hook removes statement CALL after the expanded 36832 sequence has been inserted. This hook is also responsible for 36833 allocating any storage for reductions when necessary. 36834 36835 -- Target Hook: tree TARGET_PREFERRED_ELSE_VALUE (unsigned IFN, tree 36836 TYPE, unsigned NOPS, tree *OPS) 36837 This hook returns the target's preferred final argument for a call 36838 to conditional internal function IFN (really of type 36839 'internal_fn'). TYPE specifies the return type of the function and 36840 OPS are the operands to the conditional operation, of which there 36841 are NOPS. 36842 36843 For example, if IFN is 'IFN_COND_ADD', the hook returns a value of 36844 type TYPE that should be used when 'OPS[0]' and 'OPS[1]' are 36845 conditionally added together. 36846 36847 This hook is only relevant if the target supports conditional 36848 patterns like 'cond_addM'. The default implementation returns a 36849 zero constant of type TYPE. 36850 36851 36852File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 36853 3685418.14 Anchored Addresses 36855======================== 36856 36857GCC usually addresses every static object as a separate entity. For 36858example, if we have: 36859 36860 static int a, b, c; 36861 int foo (void) { return a + b + c; } 36862 36863 the code for 'foo' will usually calculate three separate symbolic 36864addresses: those of 'a', 'b' and 'c'. On some targets, it would be 36865better to calculate just one symbolic address and access the three 36866variables relative to it. The equivalent pseudocode would be something 36867like: 36868 36869 int foo (void) 36870 { 36871 register int *xr = &x; 36872 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 36873 } 36874 36875 (which isn't valid C). We refer to shared addresses like 'x' as 36876"section anchors". Their use is controlled by '-fsection-anchors'. 36877 36878 The hooks below describe the target properties that GCC needs to know 36879in order to make effective use of section anchors. It won't use section 36880anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or 36881'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 36882 36883 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 36884 The minimum offset that should be applied to a section anchor. On 36885 most targets, it should be the smallest offset that can be applied 36886 to a base register while still giving a legitimate address for 36887 every mode. The default value is 0. 36888 36889 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 36890 Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset 36891 that should be applied to section anchors. The default value is 0. 36892 36893 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 36894 Write the assembly code to define section anchor X, which is a 36895 'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true. The hook 36896 is called with the assembly output position set to the beginning of 36897 'SYMBOL_REF_BLOCK (X)'. 36898 36899 If 'ASM_OUTPUT_DEF' is available, the hook's default definition 36900 uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'. 36901 If 'ASM_OUTPUT_DEF' is not available, the hook's default definition 36902 is 'NULL', which disables the use of section anchors altogether. 36903 36904 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 36905 Return true if GCC should attempt to use anchors to access 36906 'SYMBOL_REF' X. You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 36907 and '!SYMBOL_REF_ANCHOR_P (X)'. 36908 36909 The default version is correct for most targets, but you might need 36910 to intercept this hook to handle things like target-specific 36911 attributes or target-specific sections. 36912 36913 36914File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 36915 3691618.15 Condition Code Status 36917=========================== 36918 36919The macros in this section can be split in two families, according to 36920the two ways of representing condition codes in GCC. 36921 36922 The first representation is the so called '(cc0)' representation (*note 36923Jump Patterns::), where all instructions can have an implicit clobber of 36924the condition codes. The second is the condition code register 36925representation, which provides better schedulability for architectures 36926that do have a condition code register, but on which most instructions 36927do not affect it. The latter category includes most RISC machines. 36928 36929 The implicit clobbering poses a strong restriction on the placement of 36930the definition and use of the condition code. In the past the 36931definition and use were always adjacent. However, recent changes to 36932support trapping arithmatic may result in the definition and user being 36933in different blocks. Thus, there may be a 'NOTE_INSN_BASIC_BLOCK' 36934between them. Additionally, the definition may be the source of 36935exception handling edges. 36936 36937 These restrictions can prevent important optimizations on some 36938machines. For example, on the IBM RS/6000, there is a delay for taken 36939branches unless the condition code register is set three instructions 36940earlier than the conditional branch. The instruction scheduler cannot 36941perform this optimization if it is not permitted to separate the 36942definition and use of the condition code register. 36943 36944 For this reason, it is possible and suggested to use a register to 36945represent the condition code for new ports. If there is a specific 36946condition code register in the machine, use a hard register. If the 36947condition code or comparison result can be placed in any general 36948register, or if there are multiple condition registers, use a pseudo 36949register. Registers used to store the condition code value will usually 36950have a mode that is in class 'MODE_CC'. 36951 36952 Alternatively, you can use 'BImode' if the comparison operator is 36953specified already in the compare instruction. In this case, you are not 36954interested in most macros in this section. 36955 36956* Menu: 36957 36958* CC0 Condition Codes:: Old style representation of condition codes. 36959* MODE_CC Condition Codes:: Modern representation of condition codes. 36960 36961 36962File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 36963 3696418.15.1 Representation of condition codes using '(cc0)' 36965------------------------------------------------------- 36966 36967The file 'conditions.h' defines a variable 'cc_status' to describe how 36968the condition code was computed (in case the interpretation of the 36969condition code depends on the instruction that it was set by). This 36970variable contains the RTL expressions on which the condition code is 36971currently based, and several standard flags. 36972 36973 Sometimes additional machine-specific flags must be defined in the 36974machine description header file. It can also add additional 36975machine-specific information by defining 'CC_STATUS_MDEP'. 36976 36977 -- Macro: CC_STATUS_MDEP 36978 C code for a data type which is used for declaring the 'mdep' 36979 component of 'cc_status'. It defaults to 'int'. 36980 36981 This macro is not used on machines that do not use 'cc0'. 36982 36983 -- Macro: CC_STATUS_MDEP_INIT 36984 A C expression to initialize the 'mdep' field to "empty". The 36985 default definition does nothing, since most machines don't use the 36986 field anyway. If you want to use the field, you should probably 36987 define this macro to initialize it. 36988 36989 This macro is not used on machines that do not use 'cc0'. 36990 36991 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 36992 A C compound statement to set the components of 'cc_status' 36993 appropriately for an insn INSN whose body is EXP. It is this 36994 macro's responsibility to recognize insns that set the condition 36995 code as a byproduct of other activity as well as those that 36996 explicitly set '(cc0)'. 36997 36998 This macro is not used on machines that do not use 'cc0'. 36999 37000 If there are insns that do not set the condition code but do alter 37001 other machine registers, this macro must check to see whether they 37002 invalidate the expressions that the condition code is recorded as 37003 reflecting. For example, on the 68000, insns that store in address 37004 registers do not set the condition code, which means that usually 37005 'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns. 37006 But suppose that the previous insn set the condition code based on 37007 location 'a4@(102)' and the current insn stores a new value in 37008 'a4'. Although the condition code is not changed by this, it will 37009 no longer be true that it reflects the contents of 'a4@(102)'. 37010 Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case 37011 to say that nothing is known about the condition code value. 37012 37013 The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with 37014 the results of peephole optimization: insns whose patterns are 37015 'parallel' RTXs containing various 'reg', 'mem' or constants which 37016 are just the operands. The RTL structure of these insns is not 37017 sufficient to indicate what the insns actually do. What 37018 'NOTICE_UPDATE_CC' should do when it sees one is just to run 37019 'CC_STATUS_INIT'. 37020 37021 A possible definition of 'NOTICE_UPDATE_CC' is to call a function 37022 that looks at an attribute (*note Insn Attributes::) named, for 37023 example, 'cc'. This avoids having detailed information about 37024 patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'. 37025 37026 37027File: gccint.info, Node: MODE_CC Condition Codes, Prev: CC0 Condition Codes, Up: Condition Code 37028 3702918.15.2 Representation of condition codes using registers 37030--------------------------------------------------------- 37031 37032 -- Macro: SELECT_CC_MODE (OP, X, Y) 37033 On many machines, the condition code may be produced by other 37034 instructions than compares, for example the branch can use directly 37035 the condition code set by a subtract instruction. However, on some 37036 machines when the condition code is set this way some bits (such as 37037 the overflow bit) are not set in the same way as a test 37038 instruction, so that a different branch instruction must be used 37039 for some conditional branches. When this happens, use the machine 37040 mode of the condition code register to record different formats of 37041 the condition code register. Modes can also be used to record 37042 which compare instruction (e.g. a signed or an unsigned comparison) 37043 produced the condition codes. 37044 37045 If other modes than 'CCmode' are required, add them to 37046 'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode 37047 given an operand of a compare. This is needed because the modes 37048 have to be chosen not only during RTL generation but also, for 37049 example, by instruction combination. The result of 37050 'SELECT_CC_MODE' should be consistent with the mode used in the 37051 patterns; for example to support the case of the add on the SPARC 37052 discussed above, we have the pattern 37053 37054 (define_insn "" 37055 [(set (reg:CCNZ 0) 37056 (compare:CCNZ 37057 (plus:SI (match_operand:SI 0 "register_operand" "%r") 37058 (match_operand:SI 1 "arith_operand" "rI")) 37059 (const_int 0)))] 37060 "" 37061 "...") 37062 37063 together with a 'SELECT_CC_MODE' that returns 'CCNZmode' for 37064 comparisons whose argument is a 'plus': 37065 37066 #define SELECT_CC_MODE(OP,X,Y) \ 37067 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 37068 ? ((OP == LT || OP == LE || OP == GT || OP == GE) \ 37069 ? CCFPEmode : CCFPmode) \ 37070 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 37071 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \ 37072 ? CCNZmode : CCmode)) 37073 37074 Another reason to use modes is to retain information on which 37075 operands were used by the comparison; see 'REVERSIBLE_CC_MODE' 37076 later in this section. 37077 37078 You should define this macro if and only if you define extra CC 37079 modes in 'MACHINE-modes.def'. 37080 37081 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx 37082 *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) 37083 On some machines not all possible comparisons are defined, but you 37084 can convert an invalid comparison into a valid one. For example, 37085 the Alpha does not have a 'GT' comparison, but you can use an 'LT' 37086 comparison instead and swap the order of the operands. 37087 37088 On such machines, implement this hook to do any required 37089 conversions. CODE is the initial comparison code and OP0 and OP1 37090 are the left and right operands of the comparison, respectively. 37091 If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed 37092 to change the value of OP0 since the value might be used in RTXs 37093 which aren't comparisons. E.g. the implementation is not allowed 37094 to swap operands in that case. 37095 37096 GCC will not assume that the comparison resulting from this macro 37097 is valid but will see if the resulting insn matches a pattern in 37098 the 'md' file. 37099 37100 You need not to implement this hook if it would never change the 37101 comparison code or operands. 37102 37103 -- Macro: REVERSIBLE_CC_MODE (MODE) 37104 A C expression whose value is one if it is always safe to reverse a 37105 comparison whose mode is MODE. If 'SELECT_CC_MODE' can ever return 37106 MODE for a floating-point inequality comparison, then 37107 'REVERSIBLE_CC_MODE (MODE)' must be zero. 37108 37109 You need not define this macro if it would always returns zero or 37110 if the floating-point format is anything other than 37111 'IEEE_FLOAT_FORMAT'. For example, here is the definition used on 37112 the SPARC, where floating-point inequality comparisons are given 37113 either 'CCFPEmode' or 'CCFPmode': 37114 37115 #define REVERSIBLE_CC_MODE(MODE) \ 37116 ((MODE) != CCFPEmode && (MODE) != CCFPmode) 37117 37118 -- Macro: REVERSE_CONDITION (CODE, MODE) 37119 A C expression whose value is reversed condition code of the CODE 37120 for comparison done in CC_MODE MODE. The macro is used only in 37121 case 'REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 37122 case machine has some non-standard way how to reverse certain 37123 conditionals. For instance in case all floating point conditions 37124 are non-trapping, compiler may freely convert unordered compares to 37125 ordered ones. Then definition may look like: 37126 37127 #define REVERSE_CONDITION(CODE, MODE) \ 37128 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 37129 : reverse_condition_maybe_unordered (CODE)) 37130 37131 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 37132 *P1, unsigned int *P2) 37133 On targets which do not use '(cc0)', and which use a hard register 37134 rather than a pseudo-register to hold condition codes, the regular 37135 CSE passes are often not able to identify cases in which the hard 37136 register is set to a common value. Use this hook to enable a small 37137 pass which optimizes such cases. This hook should return true to 37138 enable this pass, and it should set the integers to which its 37139 arguments point to the hard register numbers used for condition 37140 codes. When there is only one such register, as is true on most 37141 systems, the integer pointed to by P2 should be set to 37142 'INVALID_REGNUM'. 37143 37144 The default version of this hook returns false. 37145 37146 -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode 37147 M1, machine_mode M2) 37148 On targets which use multiple condition code modes in class 37149 'MODE_CC', it is sometimes the case that a comparison can be 37150 validly done in more than one mode. On such a system, define this 37151 target hook to take two mode arguments and to return a mode in 37152 which both comparisons may be validly done. If there is no such 37153 mode, return 'VOIDmode'. 37154 37155 The default version of this hook checks whether the modes are the 37156 same. If they are, it returns that mode. If they are different, 37157 it returns 'VOIDmode'. 37158 37159 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM 37160 If the target has a dedicated flags register, and it needs to use 37161 the post-reload comparison elimination pass, or the delay slot 37162 filler pass, then this value should be set appropriately. 37163 37164 37165File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 37166 3716718.16 Describing Relative Costs of Operations 37168============================================= 37169 37170These macros let you describe the relative speed of various operations 37171on the target machine. 37172 37173 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 37174 A C expression for the cost of moving data of mode MODE from a 37175 register in class FROM to one in class TO. The classes are 37176 expressed using the enumeration values such as 'GENERAL_REGS'. A 37177 value of 2 is the default; other values are interpreted relative to 37178 that. 37179 37180 It is not required that the cost always equal 2 when FROM is the 37181 same as TO; on some machines it is expensive to move between 37182 registers if they are not general registers. 37183 37184 If reload sees an insn consisting of a single 'set' between two 37185 hard registers, and if 'REGISTER_MOVE_COST' applied to their 37186 classes returns a value of 2, reload does not check to ensure that 37187 the constraints of the insn are met. Setting a cost of other than 37188 2 will allow reload to verify that the constraints are met. You 37189 should do this if the 'movM' pattern's constraints do not allow 37190 such copying. 37191 37192 These macros are obsolete, new ports should use the target hook 37193 'TARGET_REGISTER_MOVE_COST' instead. 37194 37195 -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE, 37196 reg_class_t FROM, reg_class_t TO) 37197 This target hook should return the cost of moving data of mode MODE 37198 from a register in class FROM to one in class TO. The classes are 37199 expressed using the enumeration values such as 'GENERAL_REGS'. A 37200 value of 2 is the default; other values are interpreted relative to 37201 that. 37202 37203 It is not required that the cost always equal 2 when FROM is the 37204 same as TO; on some machines it is expensive to move between 37205 registers if they are not general registers. 37206 37207 If reload sees an insn consisting of a single 'set' between two 37208 hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their 37209 classes returns a value of 2, reload does not check to ensure that 37210 the constraints of the insn are met. Setting a cost of other than 37211 2 will allow reload to verify that the constraints are met. You 37212 should do this if the 'movM' pattern's constraints do not allow 37213 such copying. 37214 37215 The default version of this function returns 2. 37216 37217 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 37218 A C expression for the cost of moving data of mode MODE between a 37219 register of class CLASS and memory; IN is zero if the value is to 37220 be written to memory, nonzero if it is to be read in. This cost is 37221 relative to those in 'REGISTER_MOVE_COST'. If moving between 37222 registers and memory is more expensive than between two registers, 37223 you should define this macro to express the relative cost. 37224 37225 If you do not define this macro, GCC uses a default cost of 4 plus 37226 the cost of copying via a secondary reload register, if one is 37227 needed. If your machine requires a secondary reload register to 37228 copy between memory and a register of CLASS but the reload 37229 mechanism is more complex than copying via an intermediate, define 37230 this macro to reflect the actual cost of the move. 37231 37232 GCC defines the function 'memory_move_secondary_cost' if secondary 37233 reloads are needed. It computes the costs due to copying via a 37234 secondary register. If your machine copies from memory using a 37235 secondary register in the conventional way but the default base 37236 value of 4 is not correct for your machine, define this macro to 37237 add some other value to the result of that function. The arguments 37238 to that function are the same as to this macro. 37239 37240 These macros are obsolete, new ports should use the target hook 37241 'TARGET_MEMORY_MOVE_COST' instead. 37242 37243 -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE, 37244 reg_class_t RCLASS, bool IN) 37245 This target hook should return the cost of moving data of mode MODE 37246 between a register of class RCLASS and memory; IN is 'false' if the 37247 value is to be written to memory, 'true' if it is to be read in. 37248 This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'. If 37249 moving between registers and memory is more expensive than between 37250 two registers, you should add this target hook to express the 37251 relative cost. 37252 37253 If you do not add this target hook, GCC uses a default cost of 4 37254 plus the cost of copying via a secondary reload register, if one is 37255 needed. If your machine requires a secondary reload register to 37256 copy between memory and a register of RCLASS but the reload 37257 mechanism is more complex than copying via an intermediate, use 37258 this target hook to reflect the actual cost of the move. 37259 37260 GCC defines the function 'memory_move_secondary_cost' if secondary 37261 reloads are needed. It computes the costs due to copying via a 37262 secondary register. If your machine copies from memory using a 37263 secondary register in the conventional way but the default base 37264 value of 4 is not correct for your machine, use this target hook to 37265 add some other value to the result of that function. The arguments 37266 to that function are the same as to this target hook. 37267 37268 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 37269 A C expression for the cost of a branch instruction. A value of 1 37270 is the default; other values are interpreted relative to that. 37271 Parameter SPEED_P is true when the branch in question should be 37272 optimized for speed. When it is false, 'BRANCH_COST' should return 37273 a value optimal for code size rather than performance. 37274 PREDICTABLE_P is true for well-predicted branches. On many 37275 architectures the 'BRANCH_COST' can be reduced then. 37276 37277 Here are additional macros which do not specify precise relative costs, 37278but only that certain actions are more expensive than GCC would 37279ordinarily expect. 37280 37281 -- Macro: SLOW_BYTE_ACCESS 37282 Define this macro as a C expression which is nonzero if accessing 37283 less than a word of memory (i.e. a 'char' or a 'short') is no 37284 faster than accessing a word of memory, i.e., if such access 37285 require more than one instruction or if there is no difference in 37286 cost between byte and (aligned) word loads. 37287 37288 When this macro is not defined, the compiler will access a field by 37289 finding the smallest containing object; when it is defined, a 37290 fullword load will be used if alignment permits. Unless bytes 37291 accesses are faster than word accesses, using word accesses is 37292 preferable since it may eliminate subsequent memory access if 37293 subsequent accesses occur to other fields in the same word of the 37294 structure, but to different bytes. 37295 37296 -- Target Hook: bool TARGET_SLOW_UNALIGNED_ACCESS (machine_mode MODE, 37297 unsigned int ALIGN) 37298 This hook returns true if memory accesses described by the MODE and 37299 ALIGNMENT parameters have a cost many times greater than aligned 37300 accesses, for example if they are emulated in a trap handler. This 37301 hook is invoked only for unaligned accesses, i.e. when 'ALIGNMENT < 37302 GET_MODE_ALIGNMENT (MODE)'. 37303 37304 When this hook returns true, the compiler will act as if 37305 'STRICT_ALIGNMENT' were true when generating code for block moves. 37306 This can cause significantly more instructions to be produced. 37307 Therefore, do not make this hook return true if unaligned accesses 37308 only add a cycle or two to the time for a memory access. 37309 37310 The hook must return true whenever 'STRICT_ALIGNMENT' is true. The 37311 default implementation returns 'STRICT_ALIGNMENT'. 37312 37313 -- Macro: MOVE_RATIO (SPEED) 37314 The threshold of number of scalar memory-to-memory move insns, 37315 _below_ which a sequence of insns should be generated instead of a 37316 string move insn or a library call. Increasing the value will 37317 always make code faster, but eventually incurs high cost in 37318 increased code size. 37319 37320 Note that on machines where the corresponding move insn is a 37321 'define_expand' that emits a sequence of insns, this macro counts 37322 the number of such sequences. 37323 37324 The parameter SPEED is true if the code is currently being 37325 optimized for speed rather than size. 37326 37327 If you don't define this, a reasonable default is used. 37328 37329 -- Target Hook: bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned 37330 HOST_WIDE_INT SIZE, unsigned int ALIGNMENT, enum 37331 by_pieces_operation OP, bool SPEED_P) 37332 GCC will attempt several strategies when asked to copy between two 37333 areas of memory, or to set, clear or store to memory, for example 37334 when copying a 'struct'. The 'by_pieces' infrastructure implements 37335 such memory operations as a sequence of load, store or move insns. 37336 Alternate strategies are to expand the 'cpymem' or 'setmem' optabs, 37337 to emit a library call, or to emit unit-by-unit, loop-based 37338 operations. 37339 37340 This target hook should return true if, for a memory operation with 37341 a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is 37342 expected to result in better code generation. Both SIZE and 37343 ALIGNMENT are measured in terms of storage units. 37344 37345 The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES', 37346 'SET_BY_PIECES', 'STORE_BY_PIECES' or 'COMPARE_BY_PIECES'. These 37347 describe the type of memory operation under consideration. 37348 37349 The parameter SPEED_P is true if the code is currently being 37350 optimized for speed rather than size. 37351 37352 Returning true for higher values of SIZE can improve code 37353 generation for speed if the target does not provide an 37354 implementation of the 'cpymem' or 'setmem' standard names, if the 37355 'cpymem' or 'setmem' implementation would be more expensive than a 37356 sequence of insns, or if the overhead of a library call would 37357 dominate that of the body of the memory operation. 37358 37359 Returning true for higher values of 'size' may also cause an 37360 increase in code size, for example where the number of insns 37361 emitted to perform a move would be greater than that of a library 37362 call. 37363 37364 -- Target Hook: int TARGET_COMPARE_BY_PIECES_BRANCH_RATIO (machine_mode 37365 MODE) 37366 When expanding a block comparison in MODE, gcc can try to reduce 37367 the number of branches at the expense of more memory operations. 37368 This hook allows the target to override the default choice. It 37369 should return the factor by which branches should be reduced over 37370 the plain expansion with one comparison per MODE-sized piece. A 37371 port can also prevent a particular mode from being used for block 37372 comparisons by returning a negative number from this hook. 37373 37374 -- Macro: MOVE_MAX_PIECES 37375 A C expression used by 'move_by_pieces' to determine the largest 37376 unit a load or store used to copy memory is. Defaults to 37377 'MOVE_MAX'. 37378 37379 -- Macro: STORE_MAX_PIECES 37380 A C expression used by 'store_by_pieces' to determine the largest 37381 unit a store used to memory is. Defaults to 'MOVE_MAX_PIECES', or 37382 two times the size of 'HOST_WIDE_INT', whichever is smaller. 37383 37384 -- Macro: COMPARE_MAX_PIECES 37385 A C expression used by 'compare_by_pieces' to determine the largest 37386 unit a load or store used to compare memory is. Defaults to 37387 'MOVE_MAX_PIECES'. 37388 37389 -- Macro: CLEAR_RATIO (SPEED) 37390 The threshold of number of scalar move insns, _below_ which a 37391 sequence of insns should be generated to clear memory instead of a 37392 string clear insn or a library call. Increasing the value will 37393 always make code faster, but eventually incurs high cost in 37394 increased code size. 37395 37396 The parameter SPEED is true if the code is currently being 37397 optimized for speed rather than size. 37398 37399 If you don't define this, a reasonable default is used. 37400 37401 -- Macro: SET_RATIO (SPEED) 37402 The threshold of number of scalar move insns, _below_ which a 37403 sequence of insns should be generated to set memory to a constant 37404 value, instead of a block set insn or a library call. Increasing 37405 the value will always make code faster, but eventually incurs high 37406 cost in increased code size. 37407 37408 The parameter SPEED is true if the code is currently being 37409 optimized for speed rather than size. 37410 37411 If you don't define this, it defaults to the value of 'MOVE_RATIO'. 37412 37413 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 37414 A C expression used to determine whether a load postincrement is a 37415 good thing to use for a given mode. Defaults to the value of 37416 'HAVE_POST_INCREMENT'. 37417 37418 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 37419 A C expression used to determine whether a load postdecrement is a 37420 good thing to use for a given mode. Defaults to the value of 37421 'HAVE_POST_DECREMENT'. 37422 37423 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 37424 A C expression used to determine whether a load preincrement is a 37425 good thing to use for a given mode. Defaults to the value of 37426 'HAVE_PRE_INCREMENT'. 37427 37428 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 37429 A C expression used to determine whether a load predecrement is a 37430 good thing to use for a given mode. Defaults to the value of 37431 'HAVE_PRE_DECREMENT'. 37432 37433 -- Macro: USE_STORE_POST_INCREMENT (MODE) 37434 A C expression used to determine whether a store postincrement is a 37435 good thing to use for a given mode. Defaults to the value of 37436 'HAVE_POST_INCREMENT'. 37437 37438 -- Macro: USE_STORE_POST_DECREMENT (MODE) 37439 A C expression used to determine whether a store postdecrement is a 37440 good thing to use for a given mode. Defaults to the value of 37441 'HAVE_POST_DECREMENT'. 37442 37443 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 37444 This macro is used to determine whether a store preincrement is a 37445 good thing to use for a given mode. Defaults to the value of 37446 'HAVE_PRE_INCREMENT'. 37447 37448 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 37449 This macro is used to determine whether a store predecrement is a 37450 good thing to use for a given mode. Defaults to the value of 37451 'HAVE_PRE_DECREMENT'. 37452 37453 -- Macro: NO_FUNCTION_CSE 37454 Define this macro to be true if it is as good or better to call a 37455 constant function address than to call an address kept in a 37456 register. 37457 37458 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT 37459 Define this macro if a non-short-circuit operation produced by 37460 'fold_range_test ()' is optimal. This macro defaults to true if 37461 'BRANCH_COST' is greater than or equal to the value 2. 37462 37463 -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode 37464 MODE1, machine_mode MODE2, optimization_type OPT_TYPE) 37465 Return true if the optimizers should use optab OP with modes MODE1 37466 and MODE2 for optimization type OPT_TYPE. The optab is known to 37467 have an associated '.md' instruction whose C condition is true. 37468 MODE2 is only meaningful for conversion optabs; for direct optabs 37469 it is a copy of MODE1. 37470 37471 For example, when called with OP equal to 'rint_optab' and MODE1 37472 equal to 'DFmode', the hook should say whether the optimizers 37473 should use optab 'rintdf2'. 37474 37475 The default hook returns true for all inputs. 37476 37477 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, machine_mode MODE, int 37478 OUTER_CODE, int OPNO, int *TOTAL, bool SPEED) 37479 This target hook describes the relative costs of RTL expressions. 37480 37481 The cost may depend on the precise form of the expression, which is 37482 available for examination in X, and the fact that X appears as 37483 operand OPNO of an expression with rtx code OUTER_CODE. That is, 37484 the hook can assume that there is some rtx Y such that 'GET_CODE 37485 (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X' 37486 or (b) 'XVEC (Y, OPNO)' contains X. 37487 37488 MODE is X's machine mode, or for cases like 'const_int' that do not 37489 have a mode, the mode in which X is used. 37490 37491 In implementing this hook, you can use the construct 'COSTS_N_INSNS 37492 (N)' to specify a cost equal to N fast instructions. 37493 37494 On entry to the hook, '*TOTAL' contains a default estimate for the 37495 cost of the expression. The hook should modify this value as 37496 necessary. Traditionally, the default costs are 'COSTS_N_INSNS 37497 (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and 37498 modulus operations, and 'COSTS_N_INSNS (1)' for all other 37499 operations. 37500 37501 When optimizing for code size, i.e. when 'speed' is false, this 37502 target hook should be used to estimate the relative size cost of an 37503 expression, again relative to 'COSTS_N_INSNS'. 37504 37505 The hook returns true when all subexpressions of X have been 37506 processed, and false when 'rtx_cost' should recurse. 37507 37508 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode 37509 MODE, addr_space_t AS, bool SPEED) 37510 This hook computes the cost of an addressing mode that contains 37511 ADDRESS. If not defined, the cost is computed from the ADDRESS 37512 expression and the 'TARGET_RTX_COST' hook. 37513 37514 For most CISC machines, the default cost is a good approximation of 37515 the true cost of the addressing mode. However, on RISC machines, 37516 all instructions normally have the same length and execution time. 37517 Hence all addresses will have equal costs. 37518 37519 In cases where more than one form of an address is known, the form 37520 with the lowest cost will be used. If multiple forms have the 37521 same, lowest, cost, the one that is the most complex will be used. 37522 37523 For example, suppose an address that is equal to the sum of a 37524 register and a constant is used twice in the same basic block. 37525 When this macro is not defined, the address will be computed in a 37526 register and memory references will be indirect through that 37527 register. On machines where the cost of the addressing mode 37528 containing the sum is no higher than that of a simple indirect 37529 reference, this will produce an additional instruction and possibly 37530 require an additional register. Proper specification of this macro 37531 eliminates this overhead for such machines. 37532 37533 This hook is never called with an invalid address. 37534 37535 On machines where an address involving more than one register is as 37536 cheap as an address computation involving only one register, 37537 defining 'TARGET_ADDRESS_COST' to reflect this can cause two 37538 registers to be live over a region of code where only one would 37539 have been if 'TARGET_ADDRESS_COST' were not defined in that manner. 37540 This effect should be considered in the definition of this macro. 37541 Equivalent costs should probably only be given to addresses with 37542 different numbers of registers on machines with lots of registers. 37543 37544 -- Target Hook: int TARGET_INSN_COST (rtx_insn *INSN, bool SPEED) 37545 This target hook describes the relative costs of RTL instructions. 37546 37547 In implementing this hook, you can use the construct 'COSTS_N_INSNS 37548 (N)' to specify a cost equal to N fast instructions. 37549 37550 When optimizing for code size, i.e. when 'speed' is false, this 37551 target hook should be used to estimate the relative size cost of an 37552 expression, again relative to 'COSTS_N_INSNS'. 37553 37554 -- Target Hook: unsigned int TARGET_MAX_NOCE_IFCVT_SEQ_COST (edge E) 37555 This hook returns a value in the same units as 'TARGET_RTX_COSTS', 37556 giving the maximum acceptable cost for a sequence generated by the 37557 RTL if-conversion pass when conditional execution is not available. 37558 The RTL if-conversion pass attempts to convert conditional 37559 operations that would require a branch to a series of unconditional 37560 operations and 'movMODEcc' insns. This hook returns the maximum 37561 cost of the unconditional instructions and the 'movMODEcc' insns. 37562 RTL if-conversion is cancelled if the cost of the converted 37563 sequence is greater than the value returned by this hook. 37564 37565 'e' is the edge between the basic block containing the conditional 37566 branch to the basic block which would be executed if the condition 37567 were true. 37568 37569 The default implementation of this hook uses the 37570 'max-rtl-if-conversion-[un]predictable' parameters if they are set, 37571 and uses a multiple of 'BRANCH_COST' otherwise. 37572 37573 -- Target Hook: bool TARGET_NOCE_CONVERSION_PROFITABLE_P (rtx_insn 37574 *SEQ, struct noce_if_info *IF_INFO) 37575 This hook returns true if the instruction sequence 'seq' is a good 37576 candidate as a replacement for the if-convertible sequence 37577 described in 'if_info'. 37578 37579 -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void) 37580 This predicate controls the use of the eager delay slot filler to 37581 disallow speculatively executed instructions being placed in delay 37582 slots. Targets such as certain MIPS architectures possess both 37583 branches with and without delay slots. As the eager delay slot 37584 filler can decrease performance, disabling it is beneficial when 37585 ordinary branches are available. Use of delay slot branches filled 37586 using the basic filler is often still desirable as the delay slot 37587 can hide a pipeline bubble. 37588 37589 -- Target Hook: HOST_WIDE_INT TARGET_ESTIMATED_POLY_VALUE (poly_int64 37590 VAL) 37591 Return an estimate of the runtime value of VAL, for use in things 37592 like cost calculations or profiling frequencies. The default 37593 implementation returns the lowest possible value of VAL. 37594 37595 37596File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 37597 3759818.17 Adjusting the Instruction Scheduler 37599========================================= 37600 37601The instruction scheduler may need a fair amount of machine-specific 37602adjustment in order to produce good code. GCC provides several target 37603hooks for this purpose. It is usually enough to define just a few of 37604them: try the first ones in this list first. 37605 37606 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 37607 This hook returns the maximum number of instructions that can ever 37608 issue at the same time on the target machine. The default is one. 37609 Although the insn scheduler can define itself the possibility of 37610 issue an insn on the same cycle, the value can serve as an 37611 additional constraint to issue insns on the same simulated 37612 processor cycle (see hooks 'TARGET_SCHED_REORDER' and 37613 'TARGET_SCHED_REORDER2'). This value must be constant over the 37614 entire compilation. If you need it to vary depending on what the 37615 instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'. 37616 37617 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 37618 VERBOSE, rtx_insn *INSN, int MORE) 37619 This hook is executed by the scheduler after it has scheduled an 37620 insn from the ready list. It should return the number of insns 37621 which can still be issued in the current cycle. The default is 37622 'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally 37623 are not counted against the issue rate. You should define this 37624 hook if some insns take more machine resources than others, so that 37625 fewer insns can follow them in the same cycle. FILE is either a 37626 null pointer, or a stdio stream to write any debug output to. 37627 VERBOSE is the verbose level provided by '-fsched-verbose-N'. INSN 37628 is the instruction that was scheduled. 37629 37630 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, int 37631 DEP_TYPE1, rtx_insn *DEP_INSN, int COST, unsigned int DW) 37632 This function corrects the value of COST based on the relationship 37633 between INSN and DEP_INSN through a dependence of type dep_type, 37634 and strength DW. It should return the new value. The default is 37635 to make no adjustment to COST. This can be used for example to 37636 specify to the scheduler using the traditional pipeline description 37637 that an output- or anti-dependence does not incur the same cost as 37638 a data-dependence. If the scheduler using the automaton based 37639 pipeline description, the cost of anti-dependence is zero and the 37640 cost of output-dependence is maximum of one and the difference of 37641 latency times of the first and the second insns. If these values 37642 are not acceptable, you could use the hook to modify them too. See 37643 also *note Processor pipeline description::. 37644 37645 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *INSN, int 37646 PRIORITY) 37647 This hook adjusts the integer scheduling priority PRIORITY of INSN. 37648 It should return the new priority. Increase the priority to 37649 execute INSN earlier, reduce the priority to execute INSN later. 37650 Do not define this hook if you do not need to adjust the scheduling 37651 priorities of insns. 37652 37653 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, 37654 rtx_insn **READY, int *N_READYP, int CLOCK) 37655 This hook is executed by the scheduler after it has scheduled the 37656 ready list, to allow the machine description to reorder it (for 37657 example to combine two small instructions together on 'VLIW' 37658 machines). FILE is either a null pointer, or a stdio stream to 37659 write any debug output to. VERBOSE is the verbose level provided 37660 by '-fsched-verbose-N'. READY is a pointer to the ready list of 37661 instructions that are ready to be scheduled. N_READYP is a pointer 37662 to the number of elements in the ready list. The scheduler reads 37663 the ready list in reverse order, starting with READY[*N_READYP - 1] 37664 and going to READY[0]. CLOCK is the timer tick of the scheduler. 37665 You may modify the ready list and the number of ready insns. The 37666 return value is the number of insns that can issue this cycle; 37667 normally this is just 'issue_rate'. See also 37668 'TARGET_SCHED_REORDER2'. 37669 37670 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 37671 rtx_insn **READY, int *N_READYP, int CLOCK) 37672 Like 'TARGET_SCHED_REORDER', but called at a different time. That 37673 function is called whenever the scheduler starts a new cycle. This 37674 one is called once per iteration over a cycle, immediately after 37675 'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and 37676 return the number of insns to be scheduled in the same cycle. 37677 Defining this hook can be useful if there are frequent situations 37678 where scheduling one insn causes other insns to become ready in the 37679 same cycle. These other insns can then be taken into account 37680 properly. 37681 37682 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_P (void) 37683 This hook is used to check whether target platform supports macro 37684 fusion. 37685 37686 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *PREV, 37687 rtx_insn *CURR) 37688 This hook is used to check whether two insns should be macro fused 37689 for a target microarchitecture. If this hook returns true for the 37690 given insn pair (PREV and CURR), the scheduler will put them into a 37691 sched group, and they will not be scheduled apart. The two insns 37692 will be either two SET insns or a compare and a conditional jump 37693 and this hook should validate any dependencies needed to fuse the 37694 two insns together. 37695 37696 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK 37697 (rtx_insn *HEAD, rtx_insn *TAIL) 37698 This hook is called after evaluation forward dependencies of insns 37699 in chain given by two parameter values (HEAD and TAIL 37700 correspondingly) but before insns scheduling of the insn chain. 37701 For example, it can be used for better insn classification if it 37702 requires analysis of dependencies. This hook can use backward and 37703 forward dependencies of the insn scheduler because they are already 37704 calculated. 37705 37706 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 37707 MAX_READY) 37708 This hook is executed by the scheduler at the beginning of each 37709 block of instructions that are to be scheduled. FILE is either a 37710 null pointer, or a stdio stream to write any debug output to. 37711 VERBOSE is the verbose level provided by '-fsched-verbose-N'. 37712 MAX_READY is the maximum number of insns in the current scheduling 37713 region that can be live at the same time. This can be used to 37714 allocate scratch space if it is needed, e.g. by 37715 'TARGET_SCHED_REORDER'. 37716 37717 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 37718 This hook is executed by the scheduler at the end of each block of 37719 instructions that are to be scheduled. It can be used to perform 37720 cleanup of any actions done by the other scheduling hooks. FILE is 37721 either a null pointer, or a stdio stream to write any debug output 37722 to. VERBOSE is the verbose level provided by '-fsched-verbose-N'. 37723 37724 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE, 37725 int OLD_MAX_UID) 37726 This hook is executed by the scheduler after function level 37727 initializations. FILE is either a null pointer, or a stdio stream 37728 to write any debug output to. VERBOSE is the verbose level 37729 provided by '-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 37730 uid when scheduling begins. 37731 37732 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 37733 VERBOSE) 37734 This is the cleanup hook corresponding to 37735 'TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 37736 stdio stream to write any debug output to. VERBOSE is the verbose 37737 level provided by '-fsched-verbose-N'. 37738 37739 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 37740 The hook returns an RTL insn. The automaton state used in the 37741 pipeline hazard recognizer is changed as if the insn were scheduled 37742 when the new simulated processor cycle starts. Usage of the hook 37743 may simplify the automaton pipeline description for some VLIW 37744 processors. If the hook is defined, it is used only for the 37745 automaton based pipeline description. The default is not to change 37746 the state when the new simulated processor cycle starts. 37747 37748 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 37749 The hook can be used to initialize data used by the previous hook. 37750 37751 -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 37752 The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 37753 to changed the state as if the insn were scheduled when the new 37754 simulated processor cycle finishes. 37755 37756 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 37757 The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 37758 used to initialize data used by the previous hook. 37759 37760 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 37761 The hook to notify target that the current simulated cycle is about 37762 to finish. The hook is analogous to 37763 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 37764 more complicated situations - e.g., when advancing state on a 37765 single insn is not enough. 37766 37767 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 37768 The hook to notify target that new simulated cycle has just 37769 started. The hook is analogous to 37770 'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 37771 more complicated situations - e.g., when advancing state on a 37772 single insn is not enough. 37773 37774 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 37775 (void) 37776 This hook controls better choosing an insn from the ready insn 37777 queue for the DFA-based insn scheduler. Usually the scheduler 37778 chooses the first insn from the queue. If the hook returns a 37779 positive value, an additional scheduler code tries all permutations 37780 of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent 37781 ready insns to choose an insn whose issue will result in maximal 37782 number of issued insns on the same cycle. For the VLIW processor, 37783 the code could actually solve the problem of packing simple insns 37784 into the VLIW insn. Of course, if the rules of VLIW packing are 37785 described in the automaton. 37786 37787 This code also could be used for superscalar RISC processors. Let 37788 us consider a superscalar RISC processor with 3 pipelines. Some 37789 insns can be executed in pipelines A or B, some insns can be 37790 executed only in pipelines B or C, and one insn can be executed in 37791 pipeline B. The processor may issue the 1st insn into A and the 37792 2nd one into B. In this case, the 3rd insn will wait for freeing B 37793 until the next cycle. If the scheduler issues the 3rd insn the 37794 first, the processor could issue all 3 insns per cycle. 37795 37796 Actually this code demonstrates advantages of the automaton based 37797 pipeline hazard recognizer. We try quickly and easy many insn 37798 schedules to choose the best one. 37799 37800 The default is no multipass scheduling. 37801 37802 -- Target Hook: int 37803 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD 37804 (rtx_insn *INSN, int READY_INDEX) 37805 37806 This hook controls what insns from the ready insn queue will be 37807 considered for the multipass insn scheduling. If the hook returns 37808 zero for INSN, the insn will be considered in multipass scheduling. 37809 Positive return values will remove INSN from consideration on the 37810 current round of multipass scheduling. Negative return values will 37811 remove INSN from consideration for given number of cycles. 37812 Backends should be careful about returning non-zero for highest 37813 priority instruction at position 0 in the ready list. READY_INDEX 37814 is passed to allow backends make correct judgements. 37815 37816 The default is that any ready insns can be chosen to be issued. 37817 37818 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void 37819 *DATA, signed char *READY_TRY, int N_READY, bool 37820 FIRST_CYCLE_INSN_P) 37821 This hook prepares the target backend for a new round of multipass 37822 scheduling. 37823 37824 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void 37825 *DATA, signed char *READY_TRY, int N_READY, rtx_insn *INSN, 37826 const void *PREV_DATA) 37827 This hook is called when multipass scheduling evaluates instruction 37828 INSN. 37829 37830 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK 37831 (const void *DATA, signed char *READY_TRY, int N_READY) 37832 This is called when multipass scheduling backtracks from evaluation 37833 of an instruction. 37834 37835 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void 37836 *DATA) 37837 This hook notifies the target about the result of the concluded 37838 current round of multipass scheduling. 37839 37840 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void 37841 *DATA) 37842 This hook initializes target-specific data used in multipass 37843 scheduling. 37844 37845 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void 37846 *DATA) 37847 This hook finalizes target-specific data used in multipass 37848 scheduling. 37849 37850 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 37851 VERBOSE, rtx_insn *INSN, int LAST_CLOCK, int CLOCK, int 37852 *SORT_P) 37853 This hook is called by the insn scheduler before issuing INSN on 37854 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 37855 this processor cycle. Instead, the processor cycle is advanced. 37856 If *SORT_P is zero, the insn ready queue is not sorted on the new 37857 cycle start as usually. DUMP and VERBOSE specify the file and 37858 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 37859 are, respectively, the processor cycle on which the previous insn 37860 has been issued, and the current processor cycle. 37861 37862 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 37863 *_DEP, int COST, int DISTANCE) 37864 This hook is used to define which dependences are considered costly 37865 by the target, so costly that it is not advisable to schedule the 37866 insns that are involved in the dependence too close to one another. 37867 The parameters to this hook are as follows: The first parameter 37868 _DEP is the dependence being evaluated. The second parameter COST 37869 is the cost of the dependence as estimated by the scheduler, and 37870 the third parameter DISTANCE is the distance in cycles between the 37871 two insns. The hook returns 'true' if considering the distance 37872 between the two insns the dependence between them is considered 37873 costly by the target, and 'false' otherwise. 37874 37875 Defining this hook can be useful in multiple-issue out-of-order 37876 machines, where (a) it's practically hopeless to predict the actual 37877 data/resource delays, however: (b) there's a better chance to 37878 predict the actual grouping that will be formed, and (c) correctly 37879 emulating the grouping can be very important. In such targets one 37880 may want to allow issuing dependent insns closer to one 37881 another--i.e., closer than the dependence distance; however, not in 37882 cases of "costly dependences", which this hooks allows to define. 37883 37884 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 37885 This hook is called by the insn scheduler after emitting a new 37886 instruction to the instruction stream. The hook notifies a target 37887 backend to extend its per instruction data structures. 37888 37889 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 37890 Return a pointer to a store large enough to hold target scheduling 37891 context. 37892 37893 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 37894 CLEAN_P) 37895 Initialize store pointed to by TC to hold target scheduling 37896 context. It CLEAN_P is true then initialize TC as if scheduler is 37897 at the beginning of the block. Otherwise, copy the current context 37898 into TC. 37899 37900 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 37901 Copy target scheduling context pointed to by TC to the current 37902 context. 37903 37904 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 37905 Deallocate internal data in target scheduling context pointed to by 37906 TC. 37907 37908 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 37909 Deallocate a store for target scheduling context pointed to by TC. 37910 37911 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx_insn *INSN, 37912 unsigned int DEP_STATUS, rtx *NEW_PAT) 37913 This hook is called by the insn scheduler when INSN has only 37914 speculative dependencies and therefore can be scheduled 37915 speculatively. The hook is used to check if the pattern of INSN 37916 has a speculative version and, in case of successful check, to 37917 generate that speculative pattern. The hook should return 1, if 37918 the instruction has a speculative form, or -1, if it doesn't. 37919 REQUEST describes the type of requested speculation. If the return 37920 value equals 1 then NEW_PAT is assigned the generated speculative 37921 pattern. 37922 37923 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int 37924 DEP_STATUS) 37925 This hook is called by the insn scheduler during generation of 37926 recovery code for INSN. It should return 'true', if the 37927 corresponding check instruction should branch to recovery code, or 37928 'false' otherwise. 37929 37930 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN, 37931 rtx_insn *LABEL, unsigned int DS) 37932 This hook is called by the insn scheduler to generate a pattern for 37933 recovery check instruction. If MUTATE_P is zero, then INSN is a 37934 speculative instruction for which the check should be generated. 37935 LABEL is either a label of a basic block, where recovery code 37936 should be emitted, or a null pointer, when requested check doesn't 37937 branch to recovery code (a simple check). If MUTATE_P is nonzero, 37938 then a pattern for a branchy check corresponding to a simple check 37939 denoted by INSN should be generated. In this case LABEL can't be 37940 null. 37941 37942 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def 37943 *SPEC_INFO) 37944 This hook is used by the insn scheduler to find out what features 37945 should be enabled/used. The structure *SPEC_INFO should be filled 37946 in by the target. The structure describes speculation types that 37947 can be used in the scheduler. 37948 37949 -- Target Hook: bool TARGET_SCHED_CAN_SPECULATE_INSN (rtx_insn *INSN) 37950 Some instructions should never be speculated by the schedulers, 37951 usually because the instruction is too expensive to get this wrong. 37952 Often such instructions have long latency, and often they are not 37953 fully modeled in the pipeline descriptions. This hook should 37954 return 'false' if INSN should not be speculated. 37955 37956 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 37957 This hook is called by the swing modulo scheduler to calculate a 37958 resource-based lower bound which is based on the resources 37959 available in the machine and the resources required by each 37960 instruction. The target backend can use G to calculate such bound. 37961 A very simple lower bound will be used in case this hook is not 37962 implemented: the total number of instructions divided by the issue 37963 rate. 37964 37965 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx_insn *INSN, int X) 37966 This hook is called by Haifa Scheduler. It returns true if 37967 dispatch scheduling is supported in hardware and the condition 37968 specified in the parameter is true. 37969 37970 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx_insn *INSN, int X) 37971 This hook is called by Haifa Scheduler. It performs the operation 37972 specified in its second parameter. 37973 37974 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE 37975 True if the processor has an exposed pipeline, which means that not 37976 just the order of instructions is important for correctness when 37977 scheduling, but also the latencies of operations. 37978 37979 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC, 37980 machine_mode MODE) 37981 This hook is called by tree reassociator to determine a level of 37982 parallelism required in output calculations chain. 37983 37984 -- Target Hook: void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *INSN, int 37985 MAX_PRI, int *FUSION_PRI, int *PRI) 37986 This hook is called by scheduling fusion pass. It calculates 37987 fusion priorities for each instruction passed in by parameter. The 37988 priorities are returned via pointer parameters. 37989 37990 INSN is the instruction whose priorities need to be calculated. 37991 MAX_PRI is the maximum priority can be returned in any cases. 37992 FUSION_PRI is the pointer parameter through which INSN's fusion 37993 priority should be calculated and returned. PRI is the pointer 37994 parameter through which INSN's priority should be calculated and 37995 returned. 37996 37997 Same FUSION_PRI should be returned for instructions which should be 37998 scheduled together. Different PRI should be returned for 37999 instructions with same FUSION_PRI. FUSION_PRI is the major sort 38000 key, PRI is the minor sort key. All instructions will be scheduled 38001 according to the two priorities. All priorities calculated should 38002 be between 0 (exclusive) and MAX_PRI (inclusive). To avoid false 38003 dependencies, FUSION_PRI of instructions which need to be scheduled 38004 together should be smaller than FUSION_PRI of irrelevant 38005 instructions. 38006 38007 Given below example: 38008 38009 ldr r10, [r1, 4] 38010 add r4, r4, r10 38011 ldr r15, [r2, 8] 38012 sub r5, r5, r15 38013 ldr r11, [r1, 0] 38014 add r4, r4, r11 38015 ldr r16, [r2, 12] 38016 sub r5, r5, r16 38017 38018 On targets like ARM/AArch64, the two pairs of consecutive loads 38019 should be merged. Since peephole2 pass can't help in this case 38020 unless consecutive loads are actually next to each other in 38021 instruction flow. That's where this scheduling fusion pass works. 38022 This hook calculates priority for each instruction based on its 38023 fustion type, like: 38024 38025 ldr r10, [r1, 4] ; fusion_pri=99, pri=96 38026 add r4, r4, r10 ; fusion_pri=100, pri=100 38027 ldr r15, [r2, 8] ; fusion_pri=98, pri=92 38028 sub r5, r5, r15 ; fusion_pri=100, pri=100 38029 ldr r11, [r1, 0] ; fusion_pri=99, pri=100 38030 add r4, r4, r11 ; fusion_pri=100, pri=100 38031 ldr r16, [r2, 12] ; fusion_pri=98, pri=88 38032 sub r5, r5, r16 ; fusion_pri=100, pri=100 38033 38034 Scheduling fusion pass then sorts all ready to issue instructions 38035 according to the priorities. As a result, instructions of same 38036 fusion type will be pushed together in instruction flow, like: 38037 38038 ldr r11, [r1, 0] 38039 ldr r10, [r1, 4] 38040 ldr r15, [r2, 8] 38041 ldr r16, [r2, 12] 38042 add r4, r4, r10 38043 sub r5, r5, r15 38044 add r4, r4, r11 38045 sub r5, r5, r16 38046 38047 Now peephole2 pass can simply merge the two pairs of loads. 38048 38049 Since scheduling fusion pass relies on peephole2 to do real fusion 38050 work, it is only enabled by default when peephole2 is in effect. 38051 38052 This is firstly introduced on ARM/AArch64 targets, please refer to 38053 the hook implementation for how different fusion types are 38054 supported. 38055 38056 -- Target Hook: void TARGET_EXPAND_DIVMOD_LIBFUNC (rtx LIBFUNC, 38057 machine_mode MODE, rtx OP0, rtx OP1, rtx *QUOT, rtx *REM) 38058 Define this hook for enabling divmod transform if the port does not 38059 have hardware divmod insn but defines target-specific divmod 38060 libfuncs. 38061 38062 38063File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 38064 3806518.18 Dividing the Output into Sections (Texts, Data, ...) 38066========================================================== 38067 38068An object file is divided into sections containing different types of 38069data. In the most common case, there are three sections: the "text 38070section", which holds instructions and read-only data; the "data 38071section", which holds initialized writable data; and the "bss section", 38072which holds uninitialized data. Some systems have other kinds of 38073sections. 38074 38075 'varasm.c' provides several well-known sections, such as 38076'text_section', 'data_section' and 'bss_section'. The normal way of 38077controlling a 'FOO_section' variable is to define the associated 38078'FOO_SECTION_ASM_OP' macro, as described below. The macros are only 38079read once, when 'varasm.c' initializes itself, so their values must be 38080run-time constants. They may however depend on command-line flags. 38081 38082 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the 38083'FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 38084 38085 Some assemblers require a different string to be written every time a 38086section is selected. If your assembler falls into this category, you 38087should define the 'TARGET_ASM_INIT_SECTIONS' hook and use 38088'get_unnamed_section' to set up the sections. 38089 38090 You must always create a 'text_section', either by defining 38091'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in 38092'TARGET_ASM_INIT_SECTIONS'. The same is true of 'data_section' and 38093'DATA_SECTION_ASM_OP'. If you do not create a distinct 38094'readonly_data_section', the default is to reuse 'text_section'. 38095 38096 All the other 'varasm.c' sections are optional, and are null if the 38097target does not provide them. 38098 38099 -- Macro: TEXT_SECTION_ASM_OP 38100 A C expression whose value is a string, including spacing, 38101 containing the assembler operation that should precede instructions 38102 and read-only data. Normally '"\t.text"' is right. 38103 38104 -- Macro: HOT_TEXT_SECTION_NAME 38105 If defined, a C string constant for the name of the section 38106 containing most frequently executed functions of the program. If 38107 not defined, GCC will provide a default definition if the target 38108 supports named sections. 38109 38110 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 38111 If defined, a C string constant for the name of the section 38112 containing unlikely executed functions in the program. 38113 38114 -- Macro: DATA_SECTION_ASM_OP 38115 A C expression whose value is a string, including spacing, 38116 containing the assembler operation to identify the following data 38117 as writable initialized data. Normally '"\t.data"' is right. 38118 38119 -- Macro: SDATA_SECTION_ASM_OP 38120 If defined, a C expression whose value is a string, including 38121 spacing, containing the assembler operation to identify the 38122 following data as initialized, writable small data. 38123 38124 -- Macro: READONLY_DATA_SECTION_ASM_OP 38125 A C expression whose value is a string, including spacing, 38126 containing the assembler operation to identify the following data 38127 as read-only initialized data. 38128 38129 -- Macro: BSS_SECTION_ASM_OP 38130 If defined, a C expression whose value is a string, including 38131 spacing, containing the assembler operation to identify the 38132 following data as uninitialized global data. If not defined, and 38133 'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data 38134 will be output in the data section if '-fno-common' is passed, 38135 otherwise 'ASM_OUTPUT_COMMON' will be used. 38136 38137 -- Macro: SBSS_SECTION_ASM_OP 38138 If defined, a C expression whose value is a string, including 38139 spacing, containing the assembler operation to identify the 38140 following data as uninitialized, writable small data. 38141 38142 -- Macro: TLS_COMMON_ASM_OP 38143 If defined, a C expression whose value is a string containing the 38144 assembler operation to identify the following data as thread-local 38145 common data. The default is '".tls_common"'. 38146 38147 -- Macro: TLS_SECTION_ASM_FLAG 38148 If defined, a C expression whose value is a character constant 38149 containing the flag used to mark a section as a TLS section. The 38150 default is ''T''. 38151 38152 -- Macro: INIT_SECTION_ASM_OP 38153 If defined, a C expression whose value is a string, including 38154 spacing, containing the assembler operation to identify the 38155 following data as initialization code. If not defined, GCC will 38156 assume such a section does not exist. This section has no 38157 corresponding 'init_section' variable; it is used entirely in 38158 runtime code. 38159 38160 -- Macro: FINI_SECTION_ASM_OP 38161 If defined, a C expression whose value is a string, including 38162 spacing, containing the assembler operation to identify the 38163 following data as finalization code. If not defined, GCC will 38164 assume such a section does not exist. This section has no 38165 corresponding 'fini_section' variable; it is used entirely in 38166 runtime code. 38167 38168 -- Macro: INIT_ARRAY_SECTION_ASM_OP 38169 If defined, a C expression whose value is a string, including 38170 spacing, containing the assembler operation to identify the 38171 following data as part of the '.init_array' (or equivalent) 38172 section. If not defined, GCC will assume such a section does not 38173 exist. Do not define both this macro and 'INIT_SECTION_ASM_OP'. 38174 38175 -- Macro: FINI_ARRAY_SECTION_ASM_OP 38176 If defined, a C expression whose value is a string, including 38177 spacing, containing the assembler operation to identify the 38178 following data as part of the '.fini_array' (or equivalent) 38179 section. If not defined, GCC will assume such a section does not 38180 exist. Do not define both this macro and 'FINI_SECTION_ASM_OP'. 38181 38182 -- Macro: MACH_DEP_SECTION_ASM_FLAG 38183 If defined, a C expression whose value is a character constant 38184 containing the flag used to mark a machine-dependent section. This 38185 corresponds to the 'SECTION_MACH_DEP' section flag. 38186 38187 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 38188 If defined, an ASM statement that switches to a different section 38189 via SECTION_OP, calls FUNCTION, and switches back to the text 38190 section. This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or 38191 'FINI_SECTION_ASM_OP' to calls to initialization and finalization 38192 functions from the init and fini sections. By default, this macro 38193 uses a simple function call. Some ports need hand-crafted assembly 38194 code to avoid dependencies on registers initialized in the function 38195 prologue or to ensure that constant pools don't end up too far way 38196 in the text section. 38197 38198 -- Macro: TARGET_LIBGCC_SDATA_SECTION 38199 If defined, a string which names the section into which small 38200 variables defined in crtstuff and libgcc should go. This is useful 38201 when the target has options for optimizing access to small data, 38202 and you want the crtstuff and libgcc routines to be conservative in 38203 what they expect of your application yet liberal in what your 38204 application expects. For example, for targets with a '.sdata' 38205 section (like MIPS), you could compile crtstuff with '-G 0' so that 38206 it doesn't require small data support from your application, but 38207 use this macro to put small data into '.sdata' so that your 38208 application can access these variables whether it uses small data 38209 or not. 38210 38211 -- Macro: FORCE_CODE_SECTION_ALIGN 38212 If defined, an ASM statement that aligns a code section to some 38213 arbitrary boundary. This is used to force all fragments of the 38214 '.init' and '.fini' sections to have to same alignment and thus 38215 prevent the linker from having to add any padding. 38216 38217 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 38218 Define this macro to be an expression with a nonzero value if jump 38219 tables (for 'tablejump' insns) should be output in the text 38220 section, along with the assembler instructions. Otherwise, the 38221 readonly data section is used. 38222 38223 This macro is irrelevant if there is no separate readonly data 38224 section. 38225 38226 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 38227 Define this hook if you need to do something special to set up the 38228 'varasm.c' sections, or if your target has some special sections of 38229 its own that you need to create. 38230 38231 GCC calls this hook after processing the command line, but before 38232 writing any assembly code, and before calling any of the 38233 section-returning hooks described below. 38234 38235 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 38236 Return a mask describing how relocations should be treated when 38237 selecting sections. Bit 1 should be set if global relocations 38238 should be placed in a read-write section; bit 0 should be set if 38239 local relocations should be placed in a read-write section. 38240 38241 The default version of this function returns 3 when '-fpic' is in 38242 effect, and 0 otherwise. The hook is typically redefined when the 38243 target cannot support (some kinds of) dynamic relocations in 38244 read-only sections even in executables. 38245 38246 -- Target Hook: bool TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC (void) 38247 Return true to generate ADDR_DIF_VEC table or false to generate 38248 ADDR_VEC table for jumps in case of -fPIC. 38249 38250 The default version of this function returns true if flag_pic 38251 equals true and false otherwise 38252 38253 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 38254 RELOC, unsigned HOST_WIDE_INT ALIGN) 38255 Return the section into which EXP should be placed. You can assume 38256 that EXP is either a 'VAR_DECL' node or a constant of some sort. 38257 RELOC indicates whether the initial value of EXP requires link-time 38258 relocations. Bit 0 is set when variable contains local relocations 38259 only, while bit 1 is set for global relocations. ALIGN is the 38260 constant alignment in bits. 38261 38262 The default version of this function takes care of putting 38263 read-only variables in 'readonly_data_section'. 38264 38265 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 38266 38267 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 38268 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 38269 called for 'FUNCTION_DECL's as well as for variables and constants. 38270 38271 In the case of a 'FUNCTION_DECL', RELOC will be zero if the 38272 function has been determined to be likely to be called, and nonzero 38273 if it is unlikely to be called. 38274 38275 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 38276 Build up a unique section name, expressed as a 'STRING_CST' node, 38277 and assign it to 'DECL_SECTION_NAME (DECL)'. As with 38278 'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 38279 value of EXP requires link-time relocations. 38280 38281 The default version of this function appends the symbol name to the 38282 ELF section name that would normally be used for the symbol. For 38283 example, the function 'foo' would be placed in '.text.foo'. 38284 Whatever the actual target object format, this is often good 38285 enough. 38286 38287 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 38288 DECL) 38289 Return the readonly data section associated with 'DECL_SECTION_NAME 38290 (DECL)'. The default version of this function selects 38291 '.gnu.linkonce.r.name' if the function's section is 38292 '.gnu.linkonce.t.name', '.rodata.name' if function is in 38293 '.text.name', and the normal readonly-data section otherwise. 38294 38295 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX 38296 Usually, the compiler uses the prefix '".rodata"' to construct 38297 section names for mergeable constant data. Define this macro to 38298 override the string if a different section name should be used. 38299 38300 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void) 38301 Return the section that should be used for transactional memory 38302 clone tables. 38303 38304 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (machine_mode 38305 MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 38306 Return the section into which a constant X, of mode MODE, should be 38307 placed. You can assume that X is some kind of constant in RTL. 38308 The argument MODE is redundant except in the case of a 'const_int' 38309 rtx. ALIGN is the constant alignment in bits. 38310 38311 The default version of this function takes care of putting symbolic 38312 constants in 'flag_pic' mode in 'data_section' and everything else 38313 in 'readonly_data_section'. 38314 38315 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree 38316 ID) 38317 Define this hook if you need to postprocess the assembler name 38318 generated by target-independent code. The ID provided to this hook 38319 will be the computed name (e.g., the macro 'DECL_NAME' of the DECL 38320 in C, or the mangled name of the DECL in C++). The return value of 38321 the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name 38322 on your target system. The default implementation of this hook 38323 just returns the ID provided. 38324 38325 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 38326 int NEW_DECL_P) 38327 Define this hook if references to a symbol or a constant must be 38328 treated differently depending on something about the variable or 38329 function named by the symbol (such as what section it is in). 38330 38331 The hook is executed immediately after rtl has been created for 38332 DECL, which may be a variable or function declaration or an entry 38333 in the constant pool. In either case, RTL is the rtl in question. 38334 Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not 38335 have been initialized yet. 38336 38337 In the case of a constant, it is safe to assume that the rtl is a 38338 'mem' whose address is a 'symbol_ref'. Most decls will also have 38339 this form, but that is not guaranteed. Global register variables, 38340 for instance, will have a 'reg' for their rtl. (Normally the right 38341 thing to do with such unusual rtl is leave it alone.) 38342 38343 The NEW_DECL_P argument will be true if this is the first time that 38344 'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. It 38345 will be false for subsequent invocations, which will happen for 38346 duplicate declarations. Whether or not anything must be done for 38347 the duplicate declaration depends on whether the hook examines 38348 'DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 38349 called for a constant. 38350 38351 The usual thing for this hook to do is to record flags in the 38352 'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'. 38353 Historically, the name string was modified if it was necessary to 38354 encode more than one bit of information, but this practice is now 38355 discouraged; use 'SYMBOL_REF_FLAGS'. 38356 38357 The default definition of this hook, 'default_encode_section_info' 38358 in 'varasm.c', sets a number of commonly-useful bits in 38359 'SYMBOL_REF_FLAGS'. Check whether the default does what you need 38360 before overriding it. 38361 38362 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 38363 *NAME) 38364 Decode NAME and return the real name part, sans the characters that 38365 'TARGET_ENCODE_SECTION_INFO' may have added. 38366 38367 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 38368 Returns true if EXP should be placed into a "small data" section. 38369 The default version of this hook always returns false. 38370 38371 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 38372 Contains the value true if the target places read-only "small data" 38373 into a separate section. The default value is false. 38374 38375 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void) 38376 It returns true if target wants profile code emitted before 38377 prologue. 38378 38379 The default version of this hook use the target macro 38380 'PROFILE_BEFORE_PROLOGUE'. 38381 38382 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 38383 Returns true if EXP names an object for which name resolution rules 38384 must resolve to the current "module" (dynamic shared library or 38385 executable image). 38386 38387 The default version of this hook implements the name resolution 38388 rules for ELF, which has a looser model of global name binding than 38389 other currently supported object file formats. 38390 38391 -- Target Hook: bool TARGET_HAVE_TLS 38392 Contains the value true if the target supports thread-local 38393 storage. The default value is false. 38394 38395 38396File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 38397 3839818.19 Position Independent Code 38399=============================== 38400 38401This section describes macros that help implement generation of position 38402independent code. Simply defining these macros is not enough to 38403generate valid PIC; you must also add support to the hook 38404'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS', 38405as well as 'LEGITIMIZE_ADDRESS'. You must modify the definition of 38406'movsi' to do something appropriate when the source operand contains a 38407symbolic address. You may also need to alter the handling of switch 38408statements so that they use relative addresses. 38409 38410 -- Macro: PIC_OFFSET_TABLE_REGNUM 38411 The register number of the register used to address a table of 38412 static data addresses in memory. In some cases this register is 38413 defined by a processor's "application binary interface" (ABI). 38414 When this macro is defined, RTL is generated for this register 38415 once, as with the stack pointer and frame pointer registers. If 38416 this macro is not defined, it is up to the machine-dependent files 38417 to allocate such a register (if necessary). Note that this 38418 register must be fixed when in use (e.g. when 'flag_pic' is true). 38419 38420 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 38421 A C expression that is nonzero if the register defined by 38422 'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. If not defined, 38423 the default is zero. Do not define this macro if 38424 'PIC_OFFSET_TABLE_REGNUM' is not defined. 38425 38426 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 38427 A C expression that is nonzero if X is a legitimate immediate 38428 operand on the target machine when generating position independent 38429 code. You can assume that X satisfies 'CONSTANT_P', so you need 38430 not check this. You can also assume FLAG_PIC is true, so you need 38431 not check it either. You need not define this macro if all 38432 constants (including 'SYMBOL_REF') can be immediate operands when 38433 generating position independent code. 38434 38435 38436File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 38437 3843818.20 Defining the Output Assembler Language 38439============================================ 38440 38441This section describes macros whose principal purpose is to describe how 38442to write instructions in assembler language--rather than what the 38443instructions do. 38444 38445* Menu: 38446 38447* File Framework:: Structural information for the assembler file. 38448* Data Output:: Output of constants (numbers, strings, addresses). 38449* Uninitialized Data:: Output of uninitialized variables. 38450* Label Output:: Output and generation of labels. 38451* Initialization:: General principles of initialization 38452 and termination routines. 38453* Macros for Initialization:: 38454 Specific macros that control the handling of 38455 initialization and termination routines. 38456* Instruction Output:: Output of actual instructions. 38457* Dispatch Tables:: Output of jump tables. 38458* Exception Region Output:: Output of exception region code. 38459* Alignment Output:: Pseudo ops for alignment and skipping data. 38460 38461 38462File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 38463 3846418.20.1 The Overall Framework of an Assembler File 38465-------------------------------------------------- 38466 38467This describes the overall framework of an assembly file. 38468 38469 -- Target Hook: void TARGET_ASM_FILE_START (void) 38470 Output to 'asm_out_file' any text which the assembler expects to 38471 find at the beginning of a file. The default behavior is 38472 controlled by two flags, documented below. Unless your target's 38473 assembler is quite unusual, if you override the default, you should 38474 call 'default_file_start' at some point in your target hook. This 38475 lets other target files rely on these variables. 38476 38477 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 38478 If this flag is true, the text of the macro 'ASM_APP_OFF' will be 38479 printed as the very first line in the assembly file, unless 38480 '-fverbose-asm' is in effect. (If that macro has been defined to 38481 the empty string, this variable has no effect.) With the normal 38482 definition of 'ASM_APP_OFF', the effect is to notify the GNU 38483 assembler that it need not bother stripping comments or extra 38484 whitespace from its input. This allows it to work a bit faster. 38485 38486 The default is false. You should not set it to true unless you 38487 have verified that your port does not generate any extra whitespace 38488 or comments that will cause GAS to issue errors in NO_APP mode. 38489 38490 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 38491 If this flag is true, 'output_file_directive' will be called for 38492 the primary source file, immediately after printing 'ASM_APP_OFF' 38493 (if that is enabled). Most ELF assemblers expect this to be done. 38494 The default is false. 38495 38496 -- Target Hook: void TARGET_ASM_FILE_END (void) 38497 Output to 'asm_out_file' any text which the assembler expects to 38498 find at the end of a file. The default is to output nothing. 38499 38500 -- Function: void file_end_indicate_exec_stack () 38501 Some systems use a common convention, the '.note.GNU-stack' special 38502 section, to indicate whether or not an object file relies on the 38503 stack being executable. If your system uses this convention, you 38504 should define 'TARGET_ASM_FILE_END' to this function. If you need 38505 to do other things in that hook, have your hook function call this 38506 function. 38507 38508 -- Target Hook: void TARGET_ASM_LTO_START (void) 38509 Output to 'asm_out_file' any text which the assembler expects to 38510 find at the start of an LTO section. The default is to output 38511 nothing. 38512 38513 -- Target Hook: void TARGET_ASM_LTO_END (void) 38514 Output to 'asm_out_file' any text which the assembler expects to 38515 find at the end of an LTO section. The default is to output 38516 nothing. 38517 38518 -- Target Hook: void TARGET_ASM_CODE_END (void) 38519 Output to 'asm_out_file' any text which is needed before emitting 38520 unwind info and debug info at the end of a file. Some targets emit 38521 here PIC setup thunks that cannot be emitted at the end of file, 38522 because they couldn't have unwind info then. The default is to 38523 output nothing. 38524 38525 -- Macro: ASM_COMMENT_START 38526 A C string constant describing how to begin a comment in the target 38527 assembler language. The compiler assumes that the comment will end 38528 at the end of the line. 38529 38530 -- Macro: ASM_APP_ON 38531 A C string constant for text to be output before each 'asm' 38532 statement or group of consecutive ones. Normally this is '"#APP"', 38533 which is a comment that has no effect on most assemblers but tells 38534 the GNU assembler that it must check the lines that follow for all 38535 valid assembler constructs. 38536 38537 -- Macro: ASM_APP_OFF 38538 A C string constant for text to be output after each 'asm' 38539 statement or group of consecutive ones. Normally this is 38540 '"#NO_APP"', which tells the GNU assembler to resume making the 38541 time-saving assumptions that are valid for ordinary compiler 38542 output. 38543 38544 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 38545 A C statement to output COFF information or DWARF debugging 38546 information which indicates that filename NAME is the current 38547 source file to the stdio stream STREAM. 38548 38549 This macro need not be defined if the standard form of output for 38550 the file format in use is appropriate. 38551 38552 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE, 38553 const char *NAME) 38554 Output DWARF debugging information which indicates that filename 38555 NAME is the current source file to the stdio stream FILE. 38556 38557 This target hook need not be defined if the standard form of output 38558 for the file format in use is appropriate. 38559 38560 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME) 38561 Output a string based on NAME, suitable for the '#ident' directive, 38562 or the equivalent directive or pragma in non-C-family languages. 38563 If this hook is not defined, nothing is output for the '#ident' 38564 directive. 38565 38566 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 38567 A C statement to output the string STRING to the stdio stream 38568 STREAM. If you do not call the function 'output_quoted_string' in 38569 your config files, GCC will only call it to output filenames to the 38570 assembler source. So you can use it to canonicalize the format of 38571 the filename using this macro. 38572 38573 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 38574 unsigned int FLAGS, tree DECL) 38575 Output assembly directives to switch to section NAME. The section 38576 should have attributes as specified by FLAGS, which is a bit mask 38577 of the 'SECTION_*' flags defined in 'output.h'. If DECL is 38578 non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this 38579 section is associated. 38580 38581 -- Target Hook: bool TARGET_ASM_ELF_FLAGS_NUMERIC (unsigned int FLAGS, 38582 unsigned int *NUM) 38583 This hook can be used to encode ELF section flags for which no 38584 letter code has been defined in the assembler. It is called by 38585 'default_asm_named_section' whenever the section flags need to be 38586 emitted in the assembler output. If the hook returns true, then 38587 the numerical value for ELF section flags should be calculated from 38588 FLAGS and saved in *NUM; the value is printed out instead of the 38589 normal sequence of letter codes. If the hook is not defined, or if 38590 it returns false, then NUM is ignored and the traditional letter 38591 sequence is emitted. 38592 38593 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum 38594 node_frequency FREQ, bool STARTUP, bool EXIT) 38595 Return preferred text (sub)section for function DECL. Main purpose 38596 of this function is to separate cold, normal and hot functions. 38597 STARTUP is true when function is known to be used only at startup 38598 (from static constructors or it is 'main()'). EXIT is true when 38599 function is known to be used only at exit (from static 38600 destructors). Return NULL if function should go to default text 38601 section. 38602 38603 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE 38604 *FILE, tree DECL, bool NEW_IS_COLD) 38605 Used by the target to emit any assembler directives or additional 38606 labels needed when a function is partitioned between different 38607 sections. Output should be written to FILE. The function decl is 38608 available as DECL and the new section is 'cold' if NEW_IS_COLD is 38609 'true'. 38610 38611 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 38612 This flag is true if the target supports 38613 'TARGET_ASM_NAMED_SECTION'. It must not be modified by 38614 command-line option processing. 38615 38616 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 38617 This flag is true if we can create zeroed data by switching to a 38618 BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space. 38619 This is true on most ELF targets. 38620 38621 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 38622 const char *NAME, int RELOC) 38623 Choose a set of section attributes for use by 38624 'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 38625 section name, and whether or not the declaration's initializer may 38626 contain runtime relocations. DECL may be null, in which case 38627 read-write data should be assumed. 38628 38629 The default version of this function handles choosing code vs data, 38630 read-only vs read-write data, and 'flag_pic'. You should only need 38631 to override this if your target has special flags that might be set 38632 via '__attribute__'. 38633 38634 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 38635 TYPE, const char *TEXT) 38636 Provides the target with the ability to record the gcc command line 38637 switches that have been passed to the compiler, and options that 38638 are enabled. The TYPE argument specifies what is being recorded. 38639 It can take the following values: 38640 38641 'SWITCH_TYPE_PASSED' 38642 TEXT is a command line switch that has been set by the user. 38643 38644 'SWITCH_TYPE_ENABLED' 38645 TEXT is an option which has been enabled. This might be as a 38646 direct result of a command line switch, or because it is 38647 enabled by default or because it has been enabled as a side 38648 effect of a different command line switch. For example, the 38649 '-O2' switch enables various different individual optimization 38650 passes. 38651 38652 'SWITCH_TYPE_DESCRIPTIVE' 38653 TEXT is either NULL or some descriptive text which should be 38654 ignored. If TEXT is NULL then it is being used to warn the 38655 target hook that either recording is starting or ending. The 38656 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 38657 the warning is for start up and the second time the warning is 38658 for wind down. This feature is to allow the target hook to 38659 make any necessary preparations before it starts to record 38660 switches and to perform any necessary tidying up after it has 38661 finished recording switches. 38662 38663 'SWITCH_TYPE_LINE_START' 38664 This option can be ignored by this target hook. 38665 38666 'SWITCH_TYPE_LINE_END' 38667 This option can be ignored by this target hook. 38668 38669 The hook's return value must be zero. Other return values may be 38670 supported in the future. 38671 38672 By default this hook is set to NULL, but an example implementation 38673 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 38674 it records the switches as ASCII text inside a new, string 38675 mergeable section in the assembler output file. The name of the 38676 new section is provided by the 38677 'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 38678 38679 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 38680 This is the name of the section that will be created by the example 38681 ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target 38682 hook. 38683 38684 38685File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 38686 3868718.20.2 Output of Data 38688---------------------- 38689 38690 -- Target Hook: const char * TARGET_ASM_BYTE_OP 38691 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 38692 -- Target Hook: const char * TARGET_ASM_ALIGNED_PSI_OP 38693 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 38694 -- Target Hook: const char * TARGET_ASM_ALIGNED_PDI_OP 38695 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 38696 -- Target Hook: const char * TARGET_ASM_ALIGNED_PTI_OP 38697 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 38698 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 38699 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PSI_OP 38700 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 38701 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PDI_OP 38702 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 38703 -- Target Hook: const char * TARGET_ASM_UNALIGNED_PTI_OP 38704 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 38705 These hooks specify assembly directives for creating certain kinds 38706 of integer object. The 'TARGET_ASM_BYTE_OP' directive creates a 38707 byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an 38708 aligned two-byte object, and so on. Any of the hooks may be 38709 'NULL', indicating that no suitable directive is available. 38710 38711 The compiler will print these strings at the start of a new line, 38712 followed immediately by the object's initial value. In most cases, 38713 the string should contain a tab, a pseudo-op, and then another tab. 38714 38715 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 38716 ALIGNED_P) 38717 The 'assemble_integer' function uses this hook to output an integer 38718 object. X is the object's value, SIZE is its size in bytes and 38719 ALIGNED_P indicates whether it is aligned. The function should 38720 return 'true' if it was able to output the object. If it returns 38721 false, 'assemble_integer' will try to split the object into smaller 38722 parts. 38723 38724 The default implementation of this hook will use the 38725 'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the 38726 relevant string is 'NULL'. 38727 38728 -- Target Hook: void TARGET_ASM_DECL_END (void) 38729 Define this hook if the target assembler requires a special marker 38730 to terminate an initialized variable declaration. 38731 38732 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE, 38733 rtx X) 38734 A target hook to recognize RTX patterns that 'output_addr_const' 38735 can't deal with, and output assembly code to FILE corresponding to 38736 the pattern X. This may be used to allow machine-dependent 38737 'UNSPEC's to appear within constants. 38738 38739 If target hook fails to recognize a pattern, it must return 38740 'false', so that a standard error message is printed. If it prints 38741 an error message itself, by calling, for example, 38742 'output_operand_lossage', it may just return 'true'. 38743 38744 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 38745 A C statement to output to the stdio stream STREAM an assembler 38746 instruction to assemble a string constant containing the LEN bytes 38747 at PTR. PTR will be a C expression of type 'char *' and LEN a C 38748 expression of type 'int'. 38749 38750 If the assembler has a '.ascii' pseudo-op as found in the Berkeley 38751 Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'. 38752 38753 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 38754 A C statement to output word N of a function descriptor for DECL. 38755 This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is 38756 defined, and is otherwise unused. 38757 38758 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 38759 You may define this macro as a C expression. You should define the 38760 expression to have a nonzero value if GCC should output the 38761 constant pool for a function before the code for the function, or a 38762 zero value if GCC should output the constant pool after the 38763 function. If you do not define this macro, the usual case, GCC 38764 will output the constant pool before the function. 38765 38766 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 38767 A C statement to output assembler commands to define the start of 38768 the constant pool for a function. FUNNAME is a string giving the 38769 name of the function. Should the return type of the function be 38770 required, it can be obtained via FUNDECL. SIZE is the size, in 38771 bytes, of the constant pool that will be written immediately after 38772 this call. 38773 38774 If no constant-pool prefix is required, the usual case, this macro 38775 need not be defined. 38776 38777 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, 38778 JUMPTO) 38779 A C statement (with or without semicolon) to output a constant in 38780 the constant pool, if it needs special treatment. (This macro need 38781 not do anything for RTL expressions that can be output normally.) 38782 38783 The argument FILE is the standard I/O stream to output the 38784 assembler code on. X is the RTL expression for the constant to 38785 output, and MODE is the machine mode (in case X is a 'const_int'). 38786 ALIGN is the required alignment for the value X; you should output 38787 an assembler directive to force this much alignment. 38788 38789 The argument LABELNO is a number to use in an internal label for 38790 the address of this pool entry. The definition of this macro is 38791 responsible for outputting the label definition at the proper 38792 place. Here is how to do this: 38793 38794 (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO); 38795 38796 When you output a pool entry specially, you should end with a 38797 'goto' to the label JUMPTO. This will prevent the same pool entry 38798 from being output a second time in the usual manner. 38799 38800 You need not define this macro if it would do nothing. 38801 38802 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 38803 A C statement to output assembler commands to at the end of the 38804 constant pool for a function. FUNNAME is a string giving the name 38805 of the function. Should the return type of the function be 38806 required, you can obtain it via FUNDECL. SIZE is the size, in 38807 bytes, of the constant pool that GCC wrote immediately before this 38808 call. 38809 38810 If no constant-pool epilogue is required, the usual case, you need 38811 not define this macro. 38812 38813 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 38814 Define this macro as a C expression which is nonzero if C is used 38815 as a logical line separator by the assembler. STR points to the 38816 position in the string where C was found; this can be used if a 38817 line separator uses multiple characters. 38818 38819 If you do not define this macro, the default is that only the 38820 character ';' is treated as a logical line separator. 38821 38822 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 38823 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 38824 These target hooks are C string constants, describing the syntax in 38825 the assembler for grouping arithmetic expressions. If not 38826 overridden, they default to normal parentheses, which is correct 38827 for most assemblers. 38828 38829 These macros are provided by 'real.h' for writing the definitions of 38830'ASM_OUTPUT_DOUBLE' and the like: 38831 38832 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 38833 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 38834 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 38835 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 38836 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 38837 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 38838 These translate X, of type 'REAL_VALUE_TYPE', to the target's 38839 floating point representation, and store its bit pattern in the 38840 variable L. For 'REAL_VALUE_TO_TARGET_SINGLE' and 38841 'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 38842 'long int'. For the others, it should be an array of 'long int'. 38843 The number of elements in this array is determined by the size of 38844 the desired target floating point data type: 32 bits of it go in 38845 each 'long int' array element. Each array element holds 32 bits of 38846 the result, even if 'long int' is wider than 32 bits on the host 38847 machine. 38848 38849 The array element values are designed so that you can print them 38850 out using 'fprintf' in the order they should appear in the target 38851 machine's memory. 38852 38853 38854File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 38855 3885618.20.3 Output of Uninitialized Variables 38857----------------------------------------- 38858 38859Each of the macros in this section is used to do the whole job of 38860outputting a single uninitialized variable. 38861 38862 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 38863 A C statement (sans semicolon) to output to the stdio stream STREAM 38864 the assembler definition of a common-label named NAME whose size is 38865 SIZE bytes. The variable ROUNDED is the size rounded up to 38866 whatever alignment the caller wants. It is possible that SIZE may 38867 be zero, for instance if a struct with no other member than a 38868 zero-length array is defined. In this case, the backend must 38869 output a symbol definition that allocates at least one byte, both 38870 so that the address of the resulting object does not compare equal 38871 to any other, and because some object formats cannot even express 38872 the concept of a zero-sized common symbol, as that is how they 38873 represent an ordinary undefined external. 38874 38875 Use the expression 'assemble_name (STREAM, NAME)' to output the 38876 name itself; before and after that, output the additional assembler 38877 syntax for defining the name, and a newline. 38878 38879 This macro controls how the assembler definitions of uninitialized 38880 common global variables are output. 38881 38882 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 38883 Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a 38884 separate, explicit argument. If you define this macro, it is used 38885 in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in 38886 handling the required alignment of the variable. The alignment is 38887 specified as the number of bits. 38888 38889 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 38890 ALIGNMENT) 38891 Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 38892 to be output, if there is one, or 'NULL_TREE' if there is no 38893 corresponding variable. If you define this macro, GCC will use it 38894 in place of both 'ASM_OUTPUT_COMMON' and 38895 'ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 38896 see the variable's decl in order to chose what to output. 38897 38898 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 38899 A C statement (sans semicolon) to output to the stdio stream STREAM 38900 the assembler definition of uninitialized global DECL named NAME 38901 whose size is SIZE bytes. The variable ALIGNMENT is the alignment 38902 specified as the number of bits. 38903 38904 Try to use function 'asm_output_aligned_bss' defined in file 38905 'varasm.c' when defining this macro. If unable, use the expression 38906 'assemble_name (STREAM, NAME)' to output the name itself; before 38907 and after that, output the additional assembler syntax for defining 38908 the name, and a newline. 38909 38910 There are two ways of handling global BSS. One is to define this 38911 macro. The other is to have 'TARGET_ASM_SELECT_SECTION' return a 38912 switchable BSS section (*note 38913 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 38914 both. 38915 38916 Some languages do not have 'common' data, and require a non-common 38917 form of global BSS in order to handle uninitialized globals 38918 efficiently. C++ is one example of this. However, if the target 38919 does not support global BSS, the front end may choose to make 38920 globals common in order to save space in the object file. 38921 38922 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 38923 A C statement (sans semicolon) to output to the stdio stream STREAM 38924 the assembler definition of a local-common-label named NAME whose 38925 size is SIZE bytes. The variable ROUNDED is the size rounded up to 38926 whatever alignment the caller wants. 38927 38928 Use the expression 'assemble_name (STREAM, NAME)' to output the 38929 name itself; before and after that, output the additional assembler 38930 syntax for defining the name, and a newline. 38931 38932 This macro controls how the assembler definitions of uninitialized 38933 static variables are output. 38934 38935 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 38936 Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a 38937 separate, explicit argument. If you define this macro, it is used 38938 in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in 38939 handling the required alignment of the variable. The alignment is 38940 specified as the number of bits. 38941 38942 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 38943 ALIGNMENT) 38944 Like 'ASM_OUTPUT_ALIGNED_LOCAL' except that DECL of the variable to 38945 be output, if there is one, or 'NULL_TREE' if there is no 38946 corresponding variable. If you define this macro, GCC will use it 38947 in place of both 'ASM_OUTPUT_LOCAL' and 'ASM_OUTPUT_ALIGNED_LOCAL'. 38948 Define this macro when you need to see the variable's decl in order 38949 to chose what to output. 38950 38951 38952File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 38953 3895418.20.4 Output and Generation of Labels 38955--------------------------------------- 38956 38957This is about outputting labels. 38958 38959 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 38960 A C statement (sans semicolon) to output to the stdio stream STREAM 38961 the assembler definition of a label named NAME. Use the expression 38962 'assemble_name (STREAM, NAME)' to output the name itself; before 38963 and after that, output the additional assembler syntax for defining 38964 the name, and a newline. A default definition of this macro is 38965 provided which is correct for most systems. 38966 38967 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL) 38968 A C statement (sans semicolon) to output to the stdio stream STREAM 38969 the assembler definition of a label named NAME of a function. Use 38970 the expression 'assemble_name (STREAM, NAME)' to output the name 38971 itself; before and after that, output the additional assembler 38972 syntax for defining the name, and a newline. A default definition 38973 of this macro is provided which is correct for most systems. 38974 38975 If this macro is not defined, then the function name is defined in 38976 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 38977 38978 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 38979 Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer 38980 to a compiler-generated label. The default definition uses 38981 'assemble_name_raw', which is like 'assemble_name' except that it 38982 is more efficient. 38983 38984 -- Macro: SIZE_ASM_OP 38985 A C string containing the appropriate assembler directive to 38986 specify the size of a symbol, without any arguments. On systems 38987 that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"'; 38988 on other systems, the default is not to define this macro. 38989 38990 Define this macro only if it is correct to use the default 38991 definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and 38992 'ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 38993 custom definitions of those macros, or if you do not need explicit 38994 symbol sizes at all, do not define this macro. 38995 38996 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 38997 A C statement (sans semicolon) to output to the stdio stream STREAM 38998 a directive telling the assembler that the size of the symbol NAME 38999 is SIZE. SIZE is a 'HOST_WIDE_INT'. If you define 'SIZE_ASM_OP', 39000 a default definition of this macro is provided. 39001 39002 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 39003 A C statement (sans semicolon) to output to the stdio stream STREAM 39004 a directive telling the assembler to calculate the size of the 39005 symbol NAME by subtracting its address from the current address. 39006 39007 If you define 'SIZE_ASM_OP', a default definition of this macro is 39008 provided. The default assumes that the assembler recognizes a 39009 special '.' symbol as referring to the current address, and can 39010 calculate the difference between this and another symbol. If your 39011 assembler does not recognize '.' or cannot do calculations with it, 39012 you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some 39013 other technique. 39014 39015 -- Macro: NO_DOLLAR_IN_LABEL 39016 Define this macro if the assembler does not accept the character 39017 '$' in label names. By default constructors and destructors in G++ 39018 have '$' in the identifiers. If this macro is defined, '.' is used 39019 instead. 39020 39021 -- Macro: NO_DOT_IN_LABEL 39022 Define this macro if the assembler does not accept the character 39023 '.' in label names. By default constructors and destructors in G++ 39024 have names that use '.'. If this macro is defined, these names are 39025 rewritten to avoid '.'. 39026 39027 -- Macro: TYPE_ASM_OP 39028 A C string containing the appropriate assembler directive to 39029 specify the type of a symbol, without any arguments. On systems 39030 that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"'; 39031 on other systems, the default is not to define this macro. 39032 39033 Define this macro only if it is correct to use the default 39034 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 39035 need your own custom definition of this macro, or if you do not 39036 need explicit symbol types at all, do not define this macro. 39037 39038 -- Macro: TYPE_OPERAND_FMT 39039 A C string which specifies (using 'printf' syntax) the format of 39040 the second operand to 'TYPE_ASM_OP'. On systems that use ELF, the 39041 default (in 'config/elfos.h') is '"@%s"'; on other systems, the 39042 default is not to define this macro. 39043 39044 Define this macro only if it is correct to use the default 39045 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 39046 need your own custom definition of this macro, or if you do not 39047 need explicit symbol types at all, do not define this macro. 39048 39049 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 39050 A C statement (sans semicolon) to output to the stdio stream STREAM 39051 a directive telling the assembler that the type of the symbol NAME 39052 is TYPE. TYPE is a C string; currently, that string is always 39053 either '"function"' or '"object"', but you should not count on 39054 this. 39055 39056 If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default 39057 definition of this macro is provided. 39058 39059 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 39060 A C statement (sans semicolon) to output to the stdio stream STREAM 39061 any text necessary for declaring the name NAME of a function which 39062 is being defined. This macro is responsible for outputting the 39063 label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL'). The 39064 argument DECL is the 'FUNCTION_DECL' tree node representing the 39065 function. 39066 39067 If this macro is not defined, then the function name is defined in 39068 the usual manner as a label (by means of 39069 'ASM_OUTPUT_FUNCTION_LABEL'). 39070 39071 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 39072 of this macro. 39073 39074 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 39075 A C statement (sans semicolon) to output to the stdio stream STREAM 39076 any text necessary for declaring the size of a function which is 39077 being defined. The argument NAME is the name of the function. The 39078 argument DECL is the 'FUNCTION_DECL' tree node representing the 39079 function. 39080 39081 If this macro is not defined, then the function size is not 39082 defined. 39083 39084 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 39085 this macro. 39086 39087 -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL) 39088 A C statement (sans semicolon) to output to the stdio stream STREAM 39089 any text necessary for declaring the name NAME of a cold function 39090 partition which is being defined. This macro is responsible for 39091 outputting the label definition (perhaps using 39092 'ASM_OUTPUT_FUNCTION_LABEL'). The argument DECL is the 39093 'FUNCTION_DECL' tree node representing the function. 39094 39095 If this macro is not defined, then the cold partition name is 39096 defined in the usual manner as a label (by means of 39097 'ASM_OUTPUT_LABEL'). 39098 39099 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 39100 of this macro. 39101 39102 -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL) 39103 A C statement (sans semicolon) to output to the stdio stream STREAM 39104 any text necessary for declaring the size of a cold function 39105 partition which is being defined. The argument NAME is the name of 39106 the cold partition of the function. The argument DECL is the 39107 'FUNCTION_DECL' tree node representing the function. 39108 39109 If this macro is not defined, then the partition size is not 39110 defined. 39111 39112 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 39113 this macro. 39114 39115 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 39116 A C statement (sans semicolon) to output to the stdio stream STREAM 39117 any text necessary for declaring the name NAME of an initialized 39118 variable which is being defined. This macro must output the label 39119 definition (perhaps using 'ASM_OUTPUT_LABEL'). The argument DECL 39120 is the 'VAR_DECL' tree node representing the variable. 39121 39122 If this macro is not defined, then the variable name is defined in 39123 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 39124 39125 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or 39126 'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 39127 39128 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE, 39129 const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE) 39130 A target hook to output to the stdio stream FILE any text necessary 39131 for declaring the name NAME of a constant which is being defined. 39132 This target hook is responsible for outputting the label definition 39133 (perhaps using 'assemble_label'). The argument EXP is the value of 39134 the constant, and SIZE is the size of the constant in bytes. The 39135 NAME will be an internal label. 39136 39137 The default version of this target hook, define the NAME in the 39138 usual manner as a label (by means of 'assemble_label'). 39139 39140 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target 39141 hook. 39142 39143 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 39144 A C statement (sans semicolon) to output to the stdio stream STREAM 39145 any text necessary for claiming a register REGNO for a global 39146 variable DECL with name NAME. 39147 39148 If you don't define this macro, that is equivalent to defining it 39149 to do nothing. 39150 39151 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 39152 A C statement (sans semicolon) to finish up declaring a variable 39153 name once the compiler has processed its initializer fully and thus 39154 has had a chance to determine the size of an array when controlled 39155 by an initializer. This is used on systems where it's necessary to 39156 declare something about the size of the object. 39157 39158 If you don't define this macro, that is equivalent to defining it 39159 to do nothing. 39160 39161 You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or 39162 'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 39163 39164 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 39165 char *NAME) 39166 This target hook is a function to output to the stdio stream STREAM 39167 some commands that will make the label NAME global; that is, 39168 available for reference from other files. 39169 39170 The default implementation relies on a proper definition of 39171 'GLOBAL_ASM_OP'. 39172 39173 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree 39174 DECL) 39175 This target hook is a function to output to the stdio stream STREAM 39176 some commands that will make the name associated with DECL global; 39177 that is, available for reference from other files. 39178 39179 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 39180 target hook. 39181 39182 -- Target Hook: void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *STREAM, 39183 const char *NAME, const_tree DECL) 39184 This target hook is a function to output to the stdio stream STREAM 39185 some commands that will declare the name associated with DECL which 39186 is not defined in the current translation unit. Most assemblers do 39187 not require anything to be output in this case. 39188 39189 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 39190 A C statement (sans semicolon) to output to the stdio stream STREAM 39191 some commands that will make the label NAME weak; that is, 39192 available for reference from other files but only used if no other 39193 definition is available. Use the expression 'assemble_name 39194 (STREAM, NAME)' to output the name itself; before and after that, 39195 output the additional assembler syntax for making that name weak, 39196 and a newline. 39197 39198 If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not 39199 support weak symbols and you should not define the 'SUPPORTS_WEAK' 39200 macro. 39201 39202 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 39203 Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and 39204 'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 39205 or variable decl. If VALUE is not 'NULL', this C statement should 39206 output to the stdio stream STREAM assembler code which defines 39207 (equates) the weak symbol NAME to have the value VALUE. If VALUE 39208 is 'NULL', it should output commands to make NAME weak. 39209 39210 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 39211 Outputs a directive that enables NAME to be used to refer to symbol 39212 VALUE with weak-symbol semantics. 'decl' is the declaration of 39213 'name'. 39214 39215 -- Macro: SUPPORTS_WEAK 39216 A preprocessor constant expression which evaluates to true if the 39217 target supports weak symbols. 39218 39219 If you don't define this macro, 'defaults.h' provides a default 39220 definition. If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is 39221 defined, the default definition is '1'; otherwise, it is '0'. 39222 39223 -- Macro: TARGET_SUPPORTS_WEAK 39224 A C expression which evaluates to true if the target supports weak 39225 symbols. 39226 39227 If you don't define this macro, 'defaults.h' provides a default 39228 definition. The default definition is '(SUPPORTS_WEAK)'. Define 39229 this macro if you want to control weak symbol support with a 39230 compiler flag such as '-melf'. 39231 39232 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 39233 A C statement (sans semicolon) to mark DECL to be emitted as a 39234 public symbol such that extra copies in multiple translation units 39235 will be discarded by the linker. Define this macro if your object 39236 file format provides support for this concept, such as the 'COMDAT' 39237 section flags in the Microsoft Windows PE/COFF format, and this 39238 support requires changes to DECL, such as putting it in a separate 39239 section. 39240 39241 -- Macro: SUPPORTS_ONE_ONLY 39242 A C expression which evaluates to true if the target supports 39243 one-only semantics. 39244 39245 If you don't define this macro, 'varasm.c' provides a default 39246 definition. If 'MAKE_DECL_ONE_ONLY' is defined, the default 39247 definition is '1'; otherwise, it is '0'. Define this macro if you 39248 want to control one-only symbol support with a compiler flag, or if 39249 setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to 39250 be emitted as one-only. 39251 39252 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 39253 VISIBILITY) 39254 This target hook is a function to output to ASM_OUT_FILE some 39255 commands that will make the symbol(s) associated with DECL have 39256 hidden, protected or internal visibility as specified by 39257 VISIBILITY. 39258 39259 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 39260 A C expression that evaluates to true if the target's linker 39261 expects that weak symbols do not appear in a static archive's table 39262 of contents. The default is '0'. 39263 39264 Leaving weak symbols out of an archive's table of contents means 39265 that, if a symbol will only have a definition in one translation 39266 unit and will have undefined references from other translation 39267 units, that symbol should not be weak. Defining this macro to be 39268 nonzero will thus have the effect that certain symbols that would 39269 normally be weak (explicit template instantiations, and vtables for 39270 polymorphic classes with noninline key methods) will instead be 39271 nonweak. 39272 39273 The C++ ABI requires this macro to be zero. Define this macro for 39274 targets where full C++ ABI compliance is impossible and where 39275 linker restrictions require weak symbols to be left out of a static 39276 archive's table of contents. 39277 39278 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 39279 A C statement (sans semicolon) to output to the stdio stream STREAM 39280 any text necessary for declaring the name of an external symbol 39281 named NAME which is referenced in this compilation but not defined. 39282 The value of DECL is the tree node for the declaration. 39283 39284 This macro need not be defined if it does not need to output 39285 anything. The GNU assembler and most Unix assemblers don't require 39286 anything. 39287 39288 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 39289 This target hook is a function to output to ASM_OUT_FILE an 39290 assembler pseudo-op to declare a library function name external. 39291 The name of the library function is given by SYMREF, which is a 39292 'symbol_ref'. 39293 39294 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 39295 *SYMBOL) 39296 This target hook is a function to output to ASM_OUT_FILE an 39297 assembler directive to annotate SYMBOL as used. The Darwin target 39298 uses the .no_dead_code_strip directive. 39299 39300 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 39301 A C statement (sans semicolon) to output to the stdio stream STREAM 39302 a reference in assembler syntax to a label named NAME. This should 39303 add '_' to the front of the name, if that is customary on your 39304 operating system, as it is in most Berkeley Unix systems. This 39305 macro is used in 'assemble_name'. 39306 39307 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME) 39308 Given a symbol NAME, perform same mangling as 'varasm.c''s 39309 'assemble_name', but in memory rather than to a file stream, 39310 returning result as an 'IDENTIFIER_NODE'. Required for correct LTO 39311 symtabs. The default implementation calls the 39312 'TARGET_STRIP_NAME_ENCODING' hook and then prepends the 39313 'USER_LABEL_PREFIX', if any. 39314 39315 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 39316 A C statement (sans semicolon) to output a reference to 39317 'SYMBOL_REF' SYM. If not defined, 'assemble_name' will be used to 39318 output the name of the symbol. This macro may be used to modify 39319 the way a symbol is referenced depending on information encoded by 39320 'TARGET_ENCODE_SECTION_INFO'. 39321 39322 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 39323 A C statement (sans semicolon) to output a reference to BUF, the 39324 result of 'ASM_GENERATE_INTERNAL_LABEL'. If not defined, 39325 'assemble_name' will be used to output the name of the symbol. 39326 This macro is not used by 'output_asm_label', or the '%l' specifier 39327 that calls it; the intention is that this macro should be set when 39328 it is necessary to output a label differently when its address is 39329 being taken. 39330 39331 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 39332 char *PREFIX, unsigned long LABELNO) 39333 A function to output to the stdio stream STREAM a label whose name 39334 is made from the string PREFIX and the number LABELNO. 39335 39336 It is absolutely essential that these labels be distinct from the 39337 labels used for user-level functions and variables. Otherwise, 39338 certain programs will have name conflicts with internal labels. 39339 39340 It is desirable to exclude internal labels from the symbol table of 39341 the object file. Most assemblers have a naming convention for 39342 labels that should be excluded; on many systems, the letter 'L' at 39343 the beginning of a label has this effect. You should find out what 39344 convention your system uses, and follow it. 39345 39346 The default version of this function utilizes 39347 'ASM_GENERATE_INTERNAL_LABEL'. 39348 39349 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 39350 A C statement to output to the stdio stream STREAM a debug info 39351 label whose name is made from the string PREFIX and the number NUM. 39352 This is useful for VLIW targets, where debug info labels may need 39353 to be treated differently than branch target labels. On some 39354 systems, branch target labels must be at the beginning of 39355 instruction bundles, but debug info labels can occur in the middle 39356 of instruction bundles. 39357 39358 If this macro is not defined, then 39359 '(*targetm.asm_out.internal_label)' will be used. 39360 39361 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 39362 A C statement to store into the string STRING a label whose name is 39363 made from the string PREFIX and the number NUM. 39364 39365 This string, when output subsequently by 'assemble_name', should 39366 produce the output that '(*targetm.asm_out.internal_label)' would 39367 produce with the same PREFIX and NUM. 39368 39369 If the string begins with '*', then 'assemble_name' will output the 39370 rest of the string unchanged. It is often convenient for 39371 'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way. If the 39372 string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to 39373 output the string, and may change it. (Of course, 39374 'ASM_OUTPUT_LABELREF' is also part of your machine description, so 39375 you should know what it does on your machine.) 39376 39377 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 39378 A C expression to assign to OUTVAR (which is a variable of type 39379 'char *') a newly allocated string made from the string NAME and 39380 the number NUMBER, with some suitable punctuation added. Use 39381 'alloca' to get space for the string. 39382 39383 The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to 39384 produce an assembler label for an internal static variable whose 39385 name is NAME. Therefore, the string must be such as to result in 39386 valid assembler code. The argument NUMBER is different each time 39387 this macro is executed; it prevents conflicts between 39388 similarly-named internal static variables in different scopes. 39389 39390 Ideally this string should not be a valid C identifier, to prevent 39391 any conflict with the user's own symbols. Most assemblers allow 39392 periods or percent signs in assembler symbols; putting at least one 39393 of these between the name and the number will suffice. 39394 39395 If this macro is not defined, a default definition will be provided 39396 which is correct for most systems. 39397 39398 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 39399 A C statement to output to the stdio stream STREAM assembler code 39400 which defines (equates) the symbol NAME to have the value VALUE. 39401 39402 If 'SET_ASM_OP' is defined, a default definition is provided which 39403 is correct for most systems. 39404 39405 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 39406 DECL_OF_VALUE) 39407 A C statement to output to the stdio stream STREAM assembler code 39408 which defines (equates) the symbol whose tree node is DECL_OF_NAME 39409 to have the value of the tree node DECL_OF_VALUE. This macro will 39410 be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if 39411 the tree nodes are available. 39412 39413 If 'SET_ASM_OP' is defined, a default definition is provided which 39414 is correct for most systems. 39415 39416 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 39417 A C statement that evaluates to true if the assembler code which 39418 defines (equates) the symbol whose tree node is DECL_OF_NAME to 39419 have the value of the tree node DECL_OF_VALUE should be emitted 39420 near the end of the current compilation unit. The default is to 39421 not defer output of defines. This macro affects defines output by 39422 'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'. 39423 39424 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 39425 A C statement to output to the stdio stream STREAM assembler code 39426 which defines (equates) the weak symbol NAME to have the value 39427 VALUE. If VALUE is 'NULL', it defines NAME as an undefined weak 39428 symbol. 39429 39430 Define this macro if the target only supports weak aliases; define 39431 'ASM_OUTPUT_DEF' instead if possible. 39432 39433 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 39434 SEL_NAME) 39435 Define this macro to override the default assembler names used for 39436 Objective-C methods. 39437 39438 The default name is a unique method number followed by the name of 39439 the class (e.g. '_1_Foo'). For methods in categories, the name of 39440 the category is also included in the assembler name (e.g. 39441 '_1_Foo_Bar'). 39442 39443 These names are safe on most systems, but make debugging difficult 39444 since the method's selector is not present in the name. Therefore, 39445 particular systems define other ways of computing names. 39446 39447 BUF is an expression of type 'char *' which gives you a buffer in 39448 which to store the name; its length is as long as CLASS_NAME, 39449 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 39450 39451 The argument IS_INST specifies whether the method is an instance 39452 method or a class method; CLASS_NAME is the name of the class; 39453 CAT_NAME is the name of the category (or 'NULL' if the method is 39454 not in a category); and SEL_NAME is the name of the selector. 39455 39456 On systems where the assembler can handle quoted names, you can use 39457 this macro to provide more human-readable names. 39458 39459 39460File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 39461 3946218.20.5 How Initialization Functions Are Handled 39463------------------------------------------------ 39464 39465The compiled code for certain languages includes "constructors" (also 39466called "initialization routines")--functions to initialize data in the 39467program when the program is started. These functions need to be called 39468before the program is "started"--that is to say, before 'main' is 39469called. 39470 39471 Compiling some languages generates "destructors" (also called 39472"termination routines") that should be called when the program 39473terminates. 39474 39475 To make the initialization and termination functions work, the compiler 39476must output something in the assembler code to cause those functions to 39477be called at the appropriate time. When you port the compiler to a new 39478system, you need to specify how to do this. 39479 39480 There are two major ways that GCC currently supports the execution of 39481initialization and termination functions. Each way has two variants. 39482Much of the structure is common to all four variations. 39483 39484 The linker must build two lists of these functions--a list of 39485initialization functions, called '__CTOR_LIST__', and a list of 39486termination functions, called '__DTOR_LIST__'. 39487 39488 Each list always begins with an ignored function pointer (which may 39489hold 0, -1, or a count of the function pointers after it, depending on 39490the environment). This is followed by a series of zero or more function 39491pointers to constructors (or destructors), followed by a function 39492pointer containing zero. 39493 39494 Depending on the operating system and its executable file format, 39495either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time 39496and exit time. Constructors are called in reverse order of the list; 39497destructors in forward order. 39498 39499 The best way to handle static constructors works only for object file 39500formats which provide arbitrarily-named sections. A section is set 39501aside for a list of constructors, and another for a list of destructors. 39502Traditionally these are called '.ctors' and '.dtors'. Each object file 39503that defines an initialization function also puts a word in the 39504constructor section to point to that function. The linker accumulates 39505all these words into one contiguous '.ctors' section. Termination 39506functions are handled similarly. 39507 39508 This method will be chosen as the default by 'target-def.h' if 39509'TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 39510arbitrary sections, but does support special designated constructor and 39511destructor sections may define 'CTORS_SECTION_ASM_OP' and 39512'DTORS_SECTION_ASM_OP' to achieve the same effect. 39513 39514 When arbitrary sections are available, there are two variants, 39515depending upon how the code in 'crtstuff.c' is called. On systems that 39516support a ".init" section which is executed at program startup, parts of 39517'crtstuff.c' are compiled into that section. The program is linked by 39518the 'gcc' driver like this: 39519 39520 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 39521 39522 The prologue of a function ('__init') appears in the '.init' section of 39523'crti.o'; the epilogue appears in 'crtn.o'. Likewise for the function 39524'__fini' in the ".fini" section. Normally these files are provided by 39525the operating system or by the GNU C library, but are provided by GCC 39526for a few targets. 39527 39528 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled 39529from 'crtstuff.c'. They contain, among other things, code fragments 39530within the '.init' and '.fini' sections that branch to routines in the 39531'.text' section. The linker will pull all parts of a section together, 39532which results in a complete '__init' function that invokes the routines 39533we need at startup. 39534 39535 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro 39536properly. 39537 39538 If no init section is available, when GCC compiles any function called 39539'main' (or more accurately, any function designated as a program entry 39540point by the language front end calling 'expand_main_function'), it 39541inserts a procedure call to '__main' as the first executable code after 39542the function prologue. The '__main' function is defined in 'libgcc2.c' 39543and runs the global constructors. 39544 39545 In file formats that don't support arbitrary sections, there are again 39546two variants. In the simplest variant, the GNU linker (GNU 'ld') and an 39547'a.out' format must be used. In this case, 'TARGET_ASM_CONSTRUCTOR' is 39548defined to produce a '.stabs' entry of type 'N_SETT', referencing the 39549name '__CTOR_LIST__', and with the address of the void function 39550containing the initialization code as its value. The GNU linker 39551recognizes this as a request to add the value to a "set"; the values are 39552accumulated, and are eventually placed in the executable as a vector in 39553the format described above, with a leading (ignored) count and a 39554trailing zero element. 'TARGET_ASM_DESTRUCTOR' is handled similarly. 39555Since no init section is available, the absence of 'INIT_SECTION_ASM_OP' 39556causes the compilation of 'main' to call '__main' as above, starting the 39557initialization process. 39558 39559 The last variant uses neither arbitrary sections nor the GNU linker. 39560This is preferable when you want to do dynamic linking and when using 39561file formats which the GNU linker does not support, such as 'ECOFF'. In 39562this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and 39563termination functions are recognized simply by their names. This 39564requires an extra program in the linkage step, called 'collect2'. This 39565program pretends to be the linker, for use with GCC; it does its job by 39566running the ordinary linker, but also arranges to include the vectors of 39567initialization and termination functions. These functions are called 39568via '__main' as described above. In order to use this method, 39569'use_collect2' must be defined in the target in 'config.gcc'. 39570 39571 The following section describes the specific macros that control and 39572customize the handling of initialization and termination functions. 39573 39574 39575File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 39576 3957718.20.6 Macros Controlling Initialization Routines 39578-------------------------------------------------- 39579 39580Here are the macros that control how the compiler handles initialization 39581and termination functions: 39582 39583 -- Macro: INIT_SECTION_ASM_OP 39584 If defined, a C string constant, including spacing, for the 39585 assembler operation to identify the following data as 39586 initialization code. If not defined, GCC will assume such a 39587 section does not exist. When you are using special sections for 39588 initialization and termination functions, this macro also controls 39589 how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization 39590 functions. 39591 39592 -- Macro: HAS_INIT_SECTION 39593 If defined, 'main' will not call '__main' as described above. This 39594 macro should be defined for systems that control start-up code on a 39595 symbol-by-symbol basis, such as OSF/1, and should not be defined 39596 explicitly for systems that support 'INIT_SECTION_ASM_OP'. 39597 39598 -- Macro: LD_INIT_SWITCH 39599 If defined, a C string constant for a switch that tells the linker 39600 that the following symbol is an initialization routine. 39601 39602 -- Macro: LD_FINI_SWITCH 39603 If defined, a C string constant for a switch that tells the linker 39604 that the following symbol is a finalization routine. 39605 39606 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 39607 If defined, a C statement that will write a function that can be 39608 automatically called when a shared library is loaded. The function 39609 should call FUNC, which takes no arguments. If not defined, and 39610 the object format requires an explicit initialization function, 39611 then a function called '_GLOBAL__DI' will be generated. 39612 39613 This function and the following one are used by collect2 when 39614 linking a shared library that needs constructors or destructors, or 39615 has DWARF2 exception tables embedded in the code. 39616 39617 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 39618 If defined, a C statement that will write a function that can be 39619 automatically called when a shared library is unloaded. The 39620 function should call FUNC, which takes no arguments. If not 39621 defined, and the object format requires an explicit finalization 39622 function, then a function called '_GLOBAL__DD' will be generated. 39623 39624 -- Macro: INVOKE__main 39625 If defined, 'main' will call '__main' despite the presence of 39626 'INIT_SECTION_ASM_OP'. This macro should be defined for systems 39627 where the init section is not actually run automatically, but is 39628 still useful for collecting the lists of constructors and 39629 destructors. 39630 39631 -- Macro: SUPPORTS_INIT_PRIORITY 39632 If nonzero, the C++ 'init_priority' attribute is supported and the 39633 compiler should emit instructions to control the order of 39634 initialization of objects. If zero, the compiler will issue an 39635 error message upon encountering an 'init_priority' attribute. 39636 39637 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 39638 This value is true if the target supports some "native" method of 39639 collecting constructors and destructors to be run at startup and 39640 exit. It is false if we must use 'collect2'. 39641 39642 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 39643 If defined, a function that outputs assembler code to arrange to 39644 call the function referenced by SYMBOL at initialization time. 39645 39646 Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no 39647 arguments and with no return value. If the target supports 39648 initialization priorities, PRIORITY is a value between 0 and 39649 'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'. 39650 39651 If this macro is not defined by the target, a suitable default will 39652 be chosen if (1) the target supports arbitrary section names, (2) 39653 the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is 39654 not defined. 39655 39656 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 39657 This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination 39658 functions rather than initialization functions. 39659 39660 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 39661generated for the generated object file will have static linkage. 39662 39663 If your system uses 'collect2' as the means of processing constructors, 39664then that program normally uses 'nm' to scan an object file for 39665constructor functions to be called. 39666 39667 On certain kinds of systems, you can define this macro to make 39668'collect2' work faster (and, in some cases, make it work at all): 39669 39670 -- Macro: OBJECT_FORMAT_COFF 39671 Define this macro if the system uses COFF (Common Object File 39672 Format) object files, so that 'collect2' can assume this format and 39673 scan object files directly for dynamic constructor/destructor 39674 functions. 39675 39676 This macro is effective only in a native compiler; 'collect2' as 39677 part of a cross compiler always uses 'nm' for the target machine. 39678 39679 -- Macro: REAL_NM_FILE_NAME 39680 Define this macro as a C string constant containing the file name 39681 to use to execute 'nm'. The default is to search the path normally 39682 for 'nm'. 39683 39684 -- Macro: NM_FLAGS 39685 'collect2' calls 'nm' to scan object files for static constructors 39686 and destructors and LTO info. By default, '-n' is passed. Define 39687 'NM_FLAGS' to a C string constant if other options are needed to 39688 get the same output format as GNU 'nm -n' produces. 39689 39690 If your system supports shared libraries and has a program to list the 39691dynamic dependencies of a given library or executable, you can define 39692these macros to enable support for running initialization and 39693termination functions in shared libraries: 39694 39695 -- Macro: LDD_SUFFIX 39696 Define this macro to a C string constant containing the name of the 39697 program which lists dynamic dependencies, like 'ldd' under SunOS 4. 39698 39699 -- Macro: PARSE_LDD_OUTPUT (PTR) 39700 Define this macro to be C code that extracts filenames from the 39701 output of the program denoted by 'LDD_SUFFIX'. PTR is a variable 39702 of type 'char *' that points to the beginning of a line of output 39703 from 'LDD_SUFFIX'. If the line lists a dynamic dependency, the 39704 code must advance PTR to the beginning of the filename on that 39705 line. Otherwise, it must set PTR to 'NULL'. 39706 39707 -- Macro: SHLIB_SUFFIX 39708 Define this macro to a C string constant containing the default 39709 shared library extension of the target (e.g., '".so"'). 'collect2' 39710 strips version information after this suffix when generating global 39711 constructor and destructor names. This define is only needed on 39712 targets that use 'collect2' to process constructors and 39713 destructors. 39714 39715 39716File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 39717 3971818.20.7 Output of Assembler Instructions 39719---------------------------------------- 39720 39721This describes assembler instruction output. 39722 39723 -- Macro: REGISTER_NAMES 39724 A C initializer containing the assembler's names for the machine 39725 registers, each one as a C string constant. This is what 39726 translates register numbers in the compiler into assembler 39727 language. 39728 39729 -- Macro: ADDITIONAL_REGISTER_NAMES 39730 If defined, a C initializer for an array of structures containing a 39731 name and a register number. This macro defines additional names 39732 for hard registers, thus allowing the 'asm' option in declarations 39733 to refer to registers using alternate names. 39734 39735 -- Macro: OVERLAPPING_REGISTER_NAMES 39736 If defined, a C initializer for an array of structures containing a 39737 name, a register number and a count of the number of consecutive 39738 machine registers the name overlaps. This macro defines additional 39739 names for hard registers, thus allowing the 'asm' option in 39740 declarations to refer to registers using alternate names. Unlike 39741 'ADDITIONAL_REGISTER_NAMES', this macro should be used when the 39742 register name implies multiple underlying registers. 39743 39744 This macro should be used when it is important that a clobber in an 39745 'asm' statement clobbers all the underlying values implied by the 39746 register name. For example, on ARM, clobbering the 39747 double-precision VFP register "d0" implies clobbering both 39748 single-precision registers "s0" and "s1". 39749 39750 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 39751 Define this macro if you are using an unusual assembler that 39752 requires different names for the machine instructions. 39753 39754 The definition is a C statement or statements which output an 39755 assembler instruction opcode to the stdio stream STREAM. The 39756 macro-operand PTR is a variable of type 'char *' which points to 39757 the opcode name in its "internal" form--the form that is written in 39758 the machine description. The definition should output the opcode 39759 name to STREAM, performing any translation you desire, and 39760 increment the variable PTR to point at the end of the opcode so 39761 that it will not be output twice. 39762 39763 In fact, your macro definition may process less than the entire 39764 opcode name, or more than the opcode name; but if you want to 39765 process text that includes '%'-sequences to substitute operands, 39766 you must take care of the substitution yourself. Just be sure to 39767 increment PTR over whatever text should not be output normally. 39768 39769 If you need to look at the operand values, they can be found as the 39770 elements of 'recog_data.operand'. 39771 39772 If the macro definition does nothing, the instruction is output in 39773 the usual way. 39774 39775 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 39776 If defined, a C statement to be executed just prior to the output 39777 of assembler code for INSN, to modify the extracted operands so 39778 they will be output differently. 39779 39780 Here the argument OPVEC is the vector containing the operands 39781 extracted from INSN, and NOPERANDS is the number of elements of the 39782 vector which contain meaningful data for this insn. The contents 39783 of this vector are what will be used to convert the insn template 39784 into assembler code, so you can change the assembler output by 39785 changing the contents of the vector. 39786 39787 This macro is useful when various assembler syntaxes share a single 39788 file of instruction patterns; by defining this macro differently, 39789 you can cause a large class of instructions to be output 39790 differently (such as with rearranged operands). Naturally, 39791 variations in assembler syntax affecting individual insn patterns 39792 ought to be handled by writing conditional output routines in those 39793 patterns. 39794 39795 If this macro is not defined, it is equivalent to a null statement. 39796 39797 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, 39798 rtx_insn *INSN, rtx *OPVEC, int NOPERANDS) 39799 If defined, this target hook is a function which is executed just 39800 after the output of assembler code for INSN, to change the mode of 39801 the assembler if necessary. 39802 39803 Here the argument OPVEC is the vector containing the operands 39804 extracted from INSN, and NOPERANDS is the number of elements of the 39805 vector which contain meaningful data for this insn. The contents 39806 of this vector are what was used to convert the insn template into 39807 assembler code, so you can change the assembler mode by checking 39808 the contents of the vector. 39809 39810 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 39811 A C compound statement to output to stdio stream STREAM the 39812 assembler syntax for an instruction operand X. X is an RTL 39813 expression. 39814 39815 CODE is a value that can be used to specify one of several ways of 39816 printing the operand. It is used when identical operands must be 39817 printed differently depending on the context. CODE comes from the 39818 '%' specification that was used to request printing of the operand. 39819 If the specification was just '%DIGIT' then CODE is 0; if the 39820 specification was '%LTR DIGIT' then CODE is the ASCII code for LTR. 39821 39822 If X is a register, this macro should print the register's name. 39823 The names can be found in an array 'reg_names' whose type is 'char 39824 *[]'. 'reg_names' is initialized from 'REGISTER_NAMES'. 39825 39826 When the machine description has a specification '%PUNCT' (a '%' 39827 followed by a punctuation character), this macro is called with a 39828 null pointer for X and the punctuation character for CODE. 39829 39830 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 39831 A C expression which evaluates to true if CODE is a valid 39832 punctuation character for use in the 'PRINT_OPERAND' macro. If 39833 'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 39834 punctuation characters (except for the standard one, '%') are used 39835 in this way. 39836 39837 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 39838 A C compound statement to output to stdio stream STREAM the 39839 assembler syntax for an instruction operand that is a memory 39840 reference whose address is X. X is an RTL expression. 39841 39842 On some machines, the syntax for a symbolic address depends on the 39843 section that the address refers to. On these machines, define the 39844 hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the 39845 'symbol_ref', and then check for it here. *Note Assembler 39846 Format::. 39847 39848 -- Macro: DBR_OUTPUT_SEQEND (FILE) 39849 A C statement, to be executed after all slot-filler instructions 39850 have been output. If necessary, call 'dbr_sequence_length' to 39851 determine the number of slots filled in a sequence (zero if not 39852 currently outputting a sequence), to decide how many no-ops to 39853 output, or whatever. 39854 39855 Don't define this macro if it has nothing to do, but it is helpful 39856 in reading assembly output if the extent of the delay sequence is 39857 made explicit (e.g. with white space). 39858 39859 Note that output routines for instructions with delay slots must be 39860prepared to deal with not being output as part of a sequence (i.e. when 39861the scheduling pass is not run, or when no slot fillers could be found.) 39862The variable 'final_sequence' is null when not processing a sequence, 39863otherwise it contains the 'sequence' rtx being output. 39864 39865 -- Macro: REGISTER_PREFIX 39866 -- Macro: LOCAL_LABEL_PREFIX 39867 -- Macro: USER_LABEL_PREFIX 39868 -- Macro: IMMEDIATE_PREFIX 39869 If defined, C string expressions to be used for the '%R', '%L', 39870 '%U', and '%I' options of 'asm_fprintf' (see 'final.c'). These are 39871 useful when a single 'md' file must support multiple assembler 39872 formats. In that case, the various 'tm.h' files can define these 39873 macros differently. 39874 39875 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 39876 If defined this macro should expand to a series of 'case' 39877 statements which will be parsed inside the 'switch' statement of 39878 the 'asm_fprintf' function. This allows targets to define extra 39879 printf formats which may useful when generating their assembler 39880 statements. Note that uppercase letters are reserved for future 39881 generic extensions to asm_fprintf, and so are not available to 39882 target specific code. The output file is given by the parameter 39883 FILE. The varargs input pointer is ARGPTR and the rest of the 39884 format string, starting the character after the one that is being 39885 switched upon, is pointed to by FORMAT. 39886 39887 -- Macro: ASSEMBLER_DIALECT 39888 If your target supports multiple dialects of assembler language 39889 (such as different opcodes), define this macro as a C expression 39890 that gives the numeric index of the assembler language dialect to 39891 use, with zero as the first variant. 39892 39893 If this macro is defined, you may use constructs of the form 39894 '{option0|option1|option2...}' 39895 in the output templates of patterns (*note Output Template::) or in 39896 the first argument of 'asm_fprintf'. This construct outputs 39897 'option0', 'option1', 'option2', etc., if the value of 39898 'ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 39899 within these strings retain their usual meaning. If there are 39900 fewer alternatives within the braces than the value of 39901 'ASSEMBLER_DIALECT', the construct outputs nothing. If it's needed 39902 to print curly braces or '|' character in assembler output 39903 directly, '%{', '%}' and '%|' can be used. 39904 39905 If you do not define this macro, the characters '{', '|' and '}' do 39906 not have any special meaning when used in templates or operands to 39907 'asm_fprintf'. 39908 39909 Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX', 39910 'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the 39911 variations in assembler language syntax with that mechanism. 39912 Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax 39913 if the syntax variant are larger and involve such things as 39914 different opcodes or operand order. 39915 39916 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 39917 A C expression to output to STREAM some assembler code which will 39918 push hard register number REGNO onto the stack. The code need not 39919 be optimal, since this macro is used only when profiling. 39920 39921 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 39922 A C expression to output to STREAM some assembler code which will 39923 pop hard register number REGNO off of the stack. The code need not 39924 be optimal, since this macro is used only when profiling. 39925 39926 39927File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 39928 3992918.20.8 Output of Dispatch Tables 39930--------------------------------- 39931 39932This concerns dispatch tables. 39933 39934 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 39935 A C statement to output to the stdio stream STREAM an assembler 39936 pseudo-instruction to generate a difference between two labels. 39937 VALUE and REL are the numbers of two internal labels. The 39938 definitions of these labels are output using 39939 '(*targetm.asm_out.internal_label)', and they must be printed in 39940 the same way here. For example, 39941 39942 fprintf (STREAM, "\t.word L%d-L%d\n", 39943 VALUE, REL) 39944 39945 You must provide this macro on machines where the addresses in a 39946 dispatch table are relative to the table's own address. If 39947 defined, GCC will also use this macro on all machines when 39948 producing PIC. BODY is the body of the 'ADDR_DIFF_VEC'; it is 39949 provided so that the mode and flags can be read. 39950 39951 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 39952 This macro should be provided on machines where the addresses in a 39953 dispatch table are absolute. 39954 39955 The definition should be a C statement to output to the stdio 39956 stream STREAM an assembler pseudo-instruction to generate a 39957 reference to a label. VALUE is the number of an internal label 39958 whose definition is output using 39959 '(*targetm.asm_out.internal_label)'. For example, 39960 39961 fprintf (STREAM, "\t.word L%d\n", VALUE) 39962 39963 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 39964 Define this if the label before a jump-table needs to be output 39965 specially. The first three arguments are the same as for 39966 '(*targetm.asm_out.internal_label)'; the fourth argument is the 39967 jump-table which follows (a 'jump_table_data' containing an 39968 'addr_vec' or 'addr_diff_vec'). 39969 39970 This feature is used on system V to output a 'swbeg' statement for 39971 the table. 39972 39973 If this macro is not defined, these labels are output with 39974 '(*targetm.asm_out.internal_label)'. 39975 39976 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 39977 Define this if something special must be output at the end of a 39978 jump-table. The definition should be a C statement to be executed 39979 after the assembler code for the table is written. It should write 39980 the appropriate code to stdio stream STREAM. The argument TABLE is 39981 the jump-table insn, and NUM is the label-number of the preceding 39982 label. 39983 39984 If this macro is not defined, nothing special is output at the end 39985 of the jump-table. 39986 39987 -- Target Hook: void TARGET_ASM_POST_CFI_STARTPROC (FILE *, TREE) 39988 This target hook is used to emit assembly strings required by the 39989 target after the .cfi_startproc directive. The first argument is 39990 the file stream to write the strings to and the second argument is 39991 the function's declaration. The expected use is to add more .cfi_* 39992 directives. 39993 39994 The default is to not output any assembly strings. 39995 39996 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 39997 DECL, int FOR_EH, int EMPTY) 39998 This target hook emits a label at the beginning of each FDE. It 39999 should be defined on targets where FDEs need special labels, and it 40000 should write the appropriate label, for the FDE associated with the 40001 function declaration DECL, to the stdio stream STREAM. The third 40002 argument, FOR_EH, is a boolean: true if this is for an exception 40003 table. The fourth argument, EMPTY, is a boolean: true if this is a 40004 placeholder label for an omitted FDE. 40005 40006 The default is that FDEs are not given nonlocal labels. 40007 40008 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 40009 This target hook emits a label at the beginning of the exception 40010 table. It should be defined on targets where it is desirable for 40011 the table to be broken up according to function. 40012 40013 The default is that no label is emitted. 40014 40015 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx 40016 PERSONALITY) 40017 If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be 40018 used to emit a directive to install a personality hook into the 40019 unwind info. This hook should not be used if dwarf2 unwind info is 40020 used. 40021 40022 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn 40023 *INSN) 40024 This target hook emits assembly directives required to unwind the 40025 given instruction. This is only used when 40026 'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'. 40027 40028 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN 40029 True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before 40030 the assembly for INSN has been emitted, false if the hook should be 40031 called afterward. 40032 40033 -- Target Hook: bool TARGET_ASM_SHOULD_RESTORE_CFA_STATE (void) 40034 For DWARF-based unwind frames, two CFI instructions provide for 40035 save and restore of register state. GCC maintains the current 40036 frame address (CFA) separately from the register bank but the 40037 unwinder in libgcc preserves this state along with the registers 40038 (and this is expected by the code that writes the unwind frames). 40039 This hook allows the target to specify that the CFA data is not 40040 saved/restored along with the registers by the target unwinder so 40041 that suitable additional instructions should be emitted to restore 40042 it. 40043 40044 40045File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 40046 4004718.20.9 Assembler Commands for Exception Regions 40048------------------------------------------------ 40049 40050This describes commands marking the start and the end of an exception 40051region. 40052 40053 -- Macro: EH_FRAME_SECTION_NAME 40054 If defined, a C string constant for the name of the section 40055 containing exception handling frame unwind information. If not 40056 defined, GCC will provide a default definition if the target 40057 supports named sections. 'crtstuff.c' uses this macro to switch to 40058 the appropriate section. 40059 40060 You should define this symbol if your target supports DWARF 2 frame 40061 unwind information and the default definition does not work. 40062 40063 -- Macro: EH_FRAME_THROUGH_COLLECT2 40064 If defined, DWARF 2 frame unwind information will identified by 40065 specially named labels. The collect2 process will locate these 40066 labels and generate code to register the frames. 40067 40068 This might be necessary, for instance, if the system linker will 40069 not place the eh_frames in-between the sentinals from 'crtstuff.c', 40070 or if the system linker does garbage collection and sections cannot 40071 be marked as not to be collected. 40072 40073 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 40074 Define this macro to 1 if your target is such that no frame unwind 40075 information encoding used with non-PIC code will ever require a 40076 runtime relocation, but the linker may not support merging 40077 read-only and read-write sections into a single read-write section. 40078 40079 -- Macro: MASK_RETURN_ADDR 40080 An rtx used to mask the return address found via 'RETURN_ADDR_RTX', 40081 so that it does not contain any extraneous set bits in it. 40082 40083 -- Macro: DWARF2_UNWIND_INFO 40084 Define this macro to 0 if your target supports DWARF 2 frame unwind 40085 information, but it does not yet work with exception handling. 40086 Otherwise, if your target supports this information (if it defines 40087 'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will 40088 provide a default definition of 1. 40089 40090 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO 40091 (struct gcc_options *OPTS) 40092 This hook defines the mechanism that will be used for exception 40093 handling by the target. If the target has ABI specified unwind 40094 tables, the hook should return 'UI_TARGET'. If the target is to 40095 use the 'setjmp'/'longjmp'-based exception handling scheme, the 40096 hook should return 'UI_SJLJ'. If the target supports DWARF 2 frame 40097 unwind information, the hook should return 'UI_DWARF2'. 40098 40099 A target may, if exceptions are disabled, choose to return 40100 'UI_NONE'. This may end up simplifying other parts of 40101 target-specific code. The default implementation of this hook 40102 never returns 'UI_NONE'. 40103 40104 Note that the value returned by this hook should be constant. It 40105 should not depend on anything except the command-line switches 40106 described by OPTS. In particular, the setting 'UI_SJLJ' must be 40107 fixed at compiler start-up as C pre-processor macros and builtin 40108 functions related to exception handling are set up depending on 40109 this setting. 40110 40111 The default implementation of the hook first honors the 40112 '--enable-sjlj-exceptions' configure option, then 40113 'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'. If 40114 'DWARF2_UNWIND_INFO' depends on command-line options, the target 40115 must define this hook so that OPTS is used correctly. 40116 40117 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 40118 This variable should be set to 'true' if the target ABI requires 40119 unwinding tables even when exceptions are not used. It must not be 40120 modified by command-line option processing. 40121 40122 -- Macro: DONT_USE_BUILTIN_SETJMP 40123 Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme 40124 should use the 'setjmp'/'longjmp' functions from the C library 40125 instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery. 40126 40127 -- Macro: JMP_BUF_SIZE 40128 This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also 40129 defined. Define this macro if the default size of 'jmp_buf' buffer 40130 for the 'setjmp'/'longjmp'-based exception handling mechanism is 40131 not large enough, or if it is much too large. The default size is 40132 'FIRST_PSEUDO_REGISTER * sizeof(void *)'. 40133 40134 -- Macro: DWARF_CIE_DATA_ALIGNMENT 40135 This macro need only be defined if the target might save registers 40136 in the function prologue at an offset to the stack pointer that is 40137 not aligned to 'UNITS_PER_WORD'. The definition should be the 40138 negative minimum alignment if 'STACK_GROWS_DOWNWARD' is true, and 40139 the positive minimum alignment otherwise. *Note DWARF::. Only 40140 applicable if the target supports DWARF 2 frame unwind information. 40141 40142 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 40143 Contains the value true if the target should add a zero word onto 40144 the end of a Dwarf-2 frame info section when used for exception 40145 handling. Default value is false if 'EH_FRAME_SECTION_NAME' is 40146 defined, and true otherwise. 40147 40148 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 40149 Given a register, this hook should return a parallel of registers 40150 to represent where to find the register pieces. Define this hook 40151 if the register and its mode are represented in Dwarf in 40152 non-contiguous locations, or if the register should be represented 40153 in more than one register in Dwarf. Otherwise, this hook should 40154 return 'NULL_RTX'. If not defined, the default is to return 40155 'NULL_RTX'. 40156 40157 -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO) 40158 Given a register, this hook should return the mode which the 40159 corresponding Dwarf frame register should have. This is normally 40160 used to return a smaller mode than the raw mode to prevent call 40161 clobbered parts of a register altering the frame register size 40162 40163 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 40164 If some registers are represented in Dwarf-2 unwind information in 40165 multiple pieces, define this hook to fill in information about the 40166 sizes of those pieces in the table used by the unwinder at runtime. 40167 It will be called by 'expand_builtin_init_dwarf_reg_sizes' after 40168 filling in a single size corresponding to each hard register; 40169 ADDRESS is the address of the table. 40170 40171 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 40172 This hook is used to output a reference from a frame unwinding 40173 table to the type_info object identified by SYM. It should return 40174 'true' if the reference was output. Returning 'false' will cause 40175 the reference to be output using the normal Dwarf2 routines. 40176 40177 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 40178 This flag should be set to 'true' on targets that use an ARM EABI 40179 based unwinding library, and 'false' on other targets. This 40180 effects the format of unwinding tables, and how the unwinder in 40181 entered after running a cleanup. The default is 'false'. 40182 40183 40184File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 40185 4018618.20.10 Assembler Commands for Alignment 40187----------------------------------------- 40188 40189This describes commands for alignment. 40190 40191 -- Macro: JUMP_ALIGN (LABEL) 40192 The alignment (log base 2) to put in front of LABEL, which is a 40193 common destination of jumps and has no fallthru incoming edge. 40194 40195 This macro need not be defined if you don't want any special 40196 alignment to be done at such a time. Most machine descriptions do 40197 not currently define the macro. 40198 40199 Unless it's necessary to inspect the LABEL parameter, it is better 40200 to set the variable ALIGN_JUMPS in the target's 40201 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 40202 user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation. 40203 40204 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 40205 The alignment (log base 2) to put in front of LABEL, which follows 40206 a 'BARRIER'. 40207 40208 This macro need not be defined if you don't want any special 40209 alignment to be done at such a time. Most machine descriptions do 40210 not currently define the macro. 40211 40212 -- Macro: LOOP_ALIGN (LABEL) 40213 The alignment (log base 2) to put in front of LABEL that heads a 40214 frequently executed basic block (usually the header of a loop). 40215 40216 This macro need not be defined if you don't want any special 40217 alignment to be done at such a time. Most machine descriptions do 40218 not currently define the macro. 40219 40220 Unless it's necessary to inspect the LABEL parameter, it is better 40221 to set the variable 'align_loops' in the target's 40222 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 40223 user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation. 40224 40225 -- Macro: LABEL_ALIGN (LABEL) 40226 The alignment (log base 2) to put in front of LABEL. If 40227 'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different 40228 alignment, the maximum of the specified values is used. 40229 40230 Unless it's necessary to inspect the LABEL parameter, it is better 40231 to set the variable 'align_labels' in the target's 40232 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 40233 user's selection in 'align_labels' in a 'LABEL_ALIGN' 40234 implementation. 40235 40236 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 40237 A C statement to output to the stdio stream STREAM an assembler 40238 instruction to advance the location counter by NBYTES bytes. Those 40239 bytes should be zero when loaded. NBYTES will be a C expression of 40240 type 'unsigned HOST_WIDE_INT'. 40241 40242 -- Macro: ASM_NO_SKIP_IN_TEXT 40243 Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the 40244 text section because it fails to put zeros in the bytes that are 40245 skipped. This is true on many Unix systems, where the pseudo-op to 40246 skip bytes produces no-op instructions rather than zeros when used 40247 in the text section. 40248 40249 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 40250 A C statement to output to the stdio stream STREAM an assembler 40251 command to advance the location counter to a multiple of 2 to the 40252 POWER bytes. POWER will be a C expression of type 'int'. 40253 40254 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 40255 Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 40256 for padding, if necessary. 40257 40258 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 40259 A C statement to output to the stdio stream STREAM an assembler 40260 command to advance the location counter to a multiple of 2 to the 40261 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 40262 satisfy the alignment request. POWER and MAX_SKIP will be a C 40263 expression of type 'int'. 40264 40265 40266File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 40267 4026818.21 Controlling Debugging Information Format 40269============================================== 40270 40271This describes how to specify debugging information. 40272 40273* Menu: 40274 40275* All Debuggers:: Macros that affect all debugging formats uniformly. 40276* DBX Options:: Macros enabling specific options in DBX format. 40277* DBX Hooks:: Hook macros for varying DBX format. 40278* File Names and DBX:: Macros controlling output of file names in DBX format. 40279* DWARF:: Macros for DWARF format. 40280* VMS Debug:: Macros for VMS debug format. 40281 40282 40283File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 40284 4028518.21.1 Macros Affecting All Debugging Formats 40286---------------------------------------------- 40287 40288These macros affect all debugging formats. 40289 40290 -- Macro: DBX_REGISTER_NUMBER (REGNO) 40291 A C expression that returns the DBX register number for the 40292 compiler register number REGNO. In the default macro provided, the 40293 value of this expression will be REGNO itself. But sometimes there 40294 are some registers that the compiler knows about and DBX does not, 40295 or vice versa. In such cases, some register may need to have one 40296 number in the compiler and another for DBX. 40297 40298 If two registers have consecutive numbers inside GCC, and they can 40299 be used as a pair to hold a multiword value, then they _must_ have 40300 consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'. 40301 Otherwise, debuggers will be unable to access such a pair, because 40302 they expect register pairs to be consecutive in their own numbering 40303 scheme. 40304 40305 If you find yourself defining 'DBX_REGISTER_NUMBER' in way that 40306 does not preserve register pairs, then what you must do instead is 40307 redefine the actual register numbering scheme. 40308 40309 -- Macro: DEBUGGER_AUTO_OFFSET (X) 40310 A C expression that returns the integer offset value for an 40311 automatic variable having address X (an RTL expression). The 40312 default computation assumes that X is based on the frame-pointer 40313 and gives the offset from the frame-pointer. This is required for 40314 targets that produce debugging output for DBX and allow the 40315 frame-pointer to be eliminated when the '-g' option is used. 40316 40317 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 40318 A C expression that returns the integer offset value for an 40319 argument having address X (an RTL expression). The nominal offset 40320 is OFFSET. 40321 40322 -- Macro: PREFERRED_DEBUGGING_TYPE 40323 A C expression that returns the type of debugging output GCC should 40324 produce when the user specifies just '-g'. Define this if you have 40325 arranged for GCC to support more than one format of debugging 40326 output. Currently, the allowable values are 'DBX_DEBUG', 40327 'DWARF2_DEBUG', 'XCOFF_DEBUG', 'VMS_DEBUG', and 40328 'VMS_AND_DWARF2_DEBUG'. 40329 40330 When the user specifies '-ggdb', GCC normally also uses the value 40331 of this macro to select the debugging output format, but with two 40332 exceptions. If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the 40333 value 'DWARF2_DEBUG'. Otherwise, if 'DBX_DEBUGGING_INFO' is 40334 defined, GCC uses 'DBX_DEBUG'. 40335 40336 The value of this macro only affects the default debugging output; 40337 the user can always get a specific type of output by using 40338 '-gstabs', '-gdwarf-2', '-gxcoff', or '-gvms'. 40339 40340 40341File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 40342 4034318.21.2 Specific Options for DBX Output 40344--------------------------------------- 40345 40346These are specific options for DBX output. 40347 40348 -- Macro: DBX_DEBUGGING_INFO 40349 Define this macro if GCC should produce debugging output for DBX in 40350 response to the '-g' option. 40351 40352 -- Macro: XCOFF_DEBUGGING_INFO 40353 Define this macro if GCC should produce XCOFF format debugging 40354 output in response to the '-g' option. This is a variant of DBX 40355 format. 40356 40357 -- Macro: DEFAULT_GDB_EXTENSIONS 40358 Define this macro to control whether GCC should by default generate 40359 GDB's extended version of DBX debugging information (assuming 40360 DBX-format debugging information is enabled at all). If you don't 40361 define the macro, the default is 1: always generate the extended 40362 information if there is any occasion to. 40363 40364 -- Macro: DEBUG_SYMS_TEXT 40365 Define this macro if all '.stabs' commands should be output while 40366 in the text section. 40367 40368 -- Macro: ASM_STABS_OP 40369 A C string constant, including spacing, naming the assembler pseudo 40370 op to use instead of '"\t.stabs\t"' to define an ordinary debugging 40371 symbol. If you don't define this macro, '"\t.stabs\t"' is used. 40372 This macro applies only to DBX debugging information format. 40373 40374 -- Macro: ASM_STABD_OP 40375 A C string constant, including spacing, naming the assembler pseudo 40376 op to use instead of '"\t.stabd\t"' to define a debugging symbol 40377 whose value is the current location. If you don't define this 40378 macro, '"\t.stabd\t"' is used. This macro applies only to DBX 40379 debugging information format. 40380 40381 -- Macro: ASM_STABN_OP 40382 A C string constant, including spacing, naming the assembler pseudo 40383 op to use instead of '"\t.stabn\t"' to define a debugging symbol 40384 with no name. If you don't define this macro, '"\t.stabn\t"' is 40385 used. This macro applies only to DBX debugging information format. 40386 40387 -- Macro: DBX_NO_XREFS 40388 Define this macro if DBX on your system does not support the 40389 construct 'xsTAGNAME'. On some systems, this construct is used to 40390 describe a forward reference to a structure named TAGNAME. On 40391 other systems, this construct is not supported at all. 40392 40393 -- Macro: DBX_CONTIN_LENGTH 40394 A symbol name in DBX-format debugging information is normally 40395 continued (split into two separate '.stabs' directives) when it 40396 exceeds a certain length (by default, 80 characters). On some 40397 operating systems, DBX requires this splitting; on others, 40398 splitting must not be done. You can inhibit splitting by defining 40399 this macro with the value zero. You can override the default 40400 splitting-length by defining this macro as an expression for the 40401 length you desire. 40402 40403 -- Macro: DBX_CONTIN_CHAR 40404 Normally continuation is indicated by adding a '\' character to the 40405 end of a '.stabs' string when a continuation follows. To use a 40406 different character instead, define this macro as a character 40407 constant for the character you want to use. Do not define this 40408 macro if backslash is correct for your system. 40409 40410 -- Macro: DBX_STATIC_STAB_DATA_SECTION 40411 Define this macro if it is necessary to go to the data section 40412 before outputting the '.stabs' pseudo-op for a non-global static 40413 variable. 40414 40415 -- Macro: DBX_TYPE_DECL_STABS_CODE 40416 The value to use in the "code" field of the '.stabs' directive for 40417 a typedef. The default is 'N_LSYM'. 40418 40419 -- Macro: DBX_STATIC_CONST_VAR_CODE 40420 The value to use in the "code" field of the '.stabs' directive for 40421 a static variable located in the text section. DBX format does not 40422 provide any "right" way to do this. The default is 'N_FUN'. 40423 40424 -- Macro: DBX_REGPARM_STABS_CODE 40425 The value to use in the "code" field of the '.stabs' directive for 40426 a parameter passed in registers. DBX format does not provide any 40427 "right" way to do this. The default is 'N_RSYM'. 40428 40429 -- Macro: DBX_REGPARM_STABS_LETTER 40430 The letter to use in DBX symbol data to identify a symbol as a 40431 parameter passed in registers. DBX format does not customarily 40432 provide any way to do this. The default is ''P''. 40433 40434 -- Macro: DBX_FUNCTION_FIRST 40435 Define this macro if the DBX information for a function and its 40436 arguments should precede the assembler code for the function. 40437 Normally, in DBX format, the debugging information entirely follows 40438 the assembler code. 40439 40440 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 40441 Define this macro, with value 1, if the value of a symbol 40442 describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be 40443 relative to the start of the enclosing function. Normally, GCC 40444 uses an absolute address. 40445 40446 -- Macro: DBX_LINES_FUNCTION_RELATIVE 40447 Define this macro, with value 1, if the value of a symbol 40448 indicating the current line number ('N_SLINE') should be relative 40449 to the start of the enclosing function. Normally, GCC uses an 40450 absolute address. 40451 40452 -- Macro: DBX_USE_BINCL 40453 Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL' 40454 stabs for included header files, as on Sun systems. This macro 40455 also directs GCC to output a type number as a pair of a file number 40456 and a type number within the file. Normally, GCC does not generate 40457 'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a 40458 type number. 40459 40460 40461File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 40462 4046318.21.3 Open-Ended Hooks for DBX Format 40464--------------------------------------- 40465 40466These are hooks for DBX format. 40467 40468 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 40469 A C statement to output DBX debugging information before code for 40470 line number LINE of the current source file to the stdio stream 40471 STREAM. COUNTER is the number of time the macro was invoked, 40472 including the current invocation; it is intended to generate unique 40473 labels in the assembly output. 40474 40475 This macro should not be defined if the default output is correct, 40476 or if it can be made correct by defining 40477 'DBX_LINES_FUNCTION_RELATIVE'. 40478 40479 -- Macro: NO_DBX_FUNCTION_END 40480 Some stabs encapsulation formats (in particular ECOFF), cannot 40481 handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 40482 extension construct. On those machines, define this macro to turn 40483 this feature off without disturbing the rest of the gdb extensions. 40484 40485 -- Macro: NO_DBX_BNSYM_ENSYM 40486 Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx 40487 extension construct. On those machines, define this macro to turn 40488 this feature off without disturbing the rest of the gdb extensions. 40489 40490 40491File: gccint.info, Node: File Names and DBX, Next: DWARF, Prev: DBX Hooks, Up: Debugging Info 40492 4049318.21.4 File Names in DBX Format 40494-------------------------------- 40495 40496This describes file names in DBX format. 40497 40498 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 40499 A C statement to output DBX debugging information to the stdio 40500 stream STREAM, which indicates that file NAME is the main source 40501 file--the file specified as the input file for compilation. This 40502 macro is called only once, at the beginning of compilation. 40503 40504 This macro need not be defined if the standard form of output for 40505 DBX debugging information is appropriate. 40506 40507 It may be necessary to refer to a label equal to the beginning of 40508 the text section. You can use 'assemble_name (stream, 40509 ltext_label_name)' to do so. If you do this, you must also set the 40510 variable USED_LTEXT_LABEL_NAME to 'true'. 40511 40512 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 40513 Define this macro, with value 1, if GCC should not emit an 40514 indication of the current directory for compilation and current 40515 source language at the beginning of the file. 40516 40517 -- Macro: NO_DBX_GCC_MARKER 40518 Define this macro, with value 1, if GCC should not emit an 40519 indication that this object file was compiled by GCC. The default 40520 is to emit an 'N_OPT' stab at the beginning of every source file, 40521 with 'gcc2_compiled.' for the string and value 0. 40522 40523 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 40524 A C statement to output DBX debugging information at the end of 40525 compilation of the main source file NAME. Output should be written 40526 to the stdio stream STREAM. 40527 40528 If you don't define this macro, nothing special is output at the 40529 end of compilation, which is correct for most machines. 40530 40531 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 40532 Define this macro _instead of_ defining 40533 'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 40534 the end of compilation is an 'N_SO' stab with an empty string, 40535 whose value is the highest absolute text address in the file. 40536 40537 40538File: gccint.info, Node: DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 40539 4054018.21.5 Macros for DWARF Output 40541------------------------------- 40542 40543Here are macros for DWARF output. 40544 40545 -- Macro: DWARF2_DEBUGGING_INFO 40546 Define this macro if GCC should produce dwarf version 2 format 40547 debugging output in response to the '-g' option. 40548 40549 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 40550 FUNCTION) 40551 Define this to enable the dwarf attribute 40552 'DW_AT_calling_convention' to be emitted for each function. 40553 Instead of an integer return the enum value for the 'DW_CC_' 40554 tag. 40555 40556 To support optional call frame debugging information, you must also 40557 define 'INCOMING_RETURN_ADDR_RTX' and either set 40558 'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 40559 prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as 40560 appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 40561 40562 -- Macro: DWARF2_FRAME_INFO 40563 Define this macro to a nonzero value if GCC should always output 40564 Dwarf 2 frame information. If 'TARGET_EXCEPT_UNWIND_INFO' (*note 40565 Exception Region Output::) returns 'UI_DWARF2', and exceptions are 40566 enabled, GCC will output this information not matter how you define 40567 'DWARF2_FRAME_INFO'. 40568 40569 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void) 40570 This hook defines the mechanism that will be used for describing 40571 frame unwind information to the debugger. Normally the hook will 40572 return 'UI_DWARF2' if DWARF 2 debug information is enabled, and 40573 return 'UI_NONE' otherwise. 40574 40575 A target may return 'UI_DWARF2' even when DWARF 2 debug information 40576 is disabled in order to always output DWARF 2 frame information. 40577 40578 A target may return 'UI_TARGET' if it has ABI specified unwind 40579 tables. This will suppress generation of the normal debug frame 40580 unwind information. 40581 40582 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 40583 Define this macro to be a nonzero value if the assembler can 40584 generate Dwarf 2 line debug info sections. This will result in 40585 much more compact line number tables, and hence is desirable if it 40586 works. 40587 40588 -- Macro: DWARF2_ASM_VIEW_DEBUG_INFO 40589 Define this macro to be a nonzero value if the assembler supports 40590 view assignment and verification in '.loc'. If it does not, but 40591 the user enables location views, the compiler may have to fallback 40592 to internal line number tables. 40593 40594 -- Target Hook: int TARGET_RESET_LOCATION_VIEW (rtx_insn *) 40595 This hook, if defined, enables -ginternal-reset-location-views, and 40596 uses its result to override cases in which the estimated min insn 40597 length might be nonzero even when a PC advance (i.e., a view reset) 40598 cannot be taken for granted. 40599 40600 If the hook is defined, it must return a positive value to indicate 40601 the insn definitely advances the PC, and so the view number can be 40602 safely assumed to be reset; a negative value to mean the insn 40603 definitely does not advance the PC, and os the view number must not 40604 be reset; or zero to decide based on the estimated insn length. 40605 40606 If insn length is to be regarded as reliable, set the hook to 40607 'hook_int_rtx_insn_0'. 40608 40609 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS 40610 True if the '.debug_pubtypes' and '.debug_pubnames' sections should 40611 be emitted. These sections are not used on most platforms, and in 40612 particular GDB does not use them. 40613 40614 -- Target Hook: bool TARGET_DELAY_SCHED2 40615 True if sched2 is not to be run at its normal place. This usually 40616 means it will be run as part of machine-specific reorg. 40617 40618 -- Target Hook: bool TARGET_DELAY_VARTRACK 40619 True if vartrack is not to be run at its normal place. This 40620 usually means it will be run as part of machine-specific reorg. 40621 40622 -- Target Hook: bool TARGET_NO_REGISTER_ALLOCATION 40623 True if register allocation and the passes following it should not 40624 be run. Usually true only for virtual assembler targets. 40625 40626 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 40627 A C statement to issue assembly directives that create a difference 40628 LAB1 minus LAB2, using an integer of the given SIZE. 40629 40630 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2) 40631 A C statement to issue assembly directives that create a difference 40632 between the two given labels in system defined units, e.g. 40633 instruction slots on IA64 VMS, using an integer of the given size. 40634 40635 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, OFFSET, 40636 SECTION) 40637 A C statement to issue assembly directives that create a 40638 section-relative reference to the given LABEL plus OFFSET, using an 40639 integer of the given SIZE. The label is known to be defined in the 40640 given SECTION. 40641 40642 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 40643 A C statement to issue assembly directives that create a 40644 self-relative reference to the given LABEL, using an integer of the 40645 given SIZE. 40646 40647 -- Macro: ASM_OUTPUT_DWARF_DATAREL (STREAM, SIZE, LABEL) 40648 A C statement to issue assembly directives that create a reference 40649 to the given LABEL relative to the dbase, using an integer of the 40650 given SIZE. 40651 40652 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 40653 A C statement to issue assembly directives that create a reference 40654 to the DWARF table identifier LABEL from the current section. This 40655 is used on some systems to avoid garbage collecting a DWARF table 40656 which is referenced by a function. 40657 40658 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 40659 SIZE, rtx X) 40660 If defined, this target hook is a function which outputs a 40661 DTP-relative reference to the given TLS symbol of the specified 40662 size. 40663 40664 40665File: gccint.info, Node: VMS Debug, Prev: DWARF, Up: Debugging Info 40666 4066718.21.6 Macros for VMS Debug Format 40668----------------------------------- 40669 40670Here are macros for VMS debug format. 40671 40672 -- Macro: VMS_DEBUGGING_INFO 40673 Define this macro if GCC should produce debugging output for VMS in 40674 response to the '-g' option. The default behavior for VMS is to 40675 generate minimal debug info for a traceback in the absence of '-g' 40676 unless explicitly overridden with '-g0'. This behavior is 40677 controlled by 'TARGET_OPTION_OPTIMIZATION' and 40678 'TARGET_OPTION_OVERRIDE'. 40679 40680 40681File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 40682 4068318.22 Cross Compilation and Floating Point 40684========================================== 40685 40686While all modern machines use twos-complement representation for 40687integers, there are a variety of representations for floating point 40688numbers. This means that in a cross-compiler the representation of 40689floating point numbers in the compiled program may be different from 40690that used in the machine doing the compilation. 40691 40692 Because different representation systems may offer different amounts of 40693range and precision, all floating point constants must be represented in 40694the target machine's format. Therefore, the cross compiler cannot 40695safely use the host machine's floating point arithmetic; it must emulate 40696the target's arithmetic. To ensure consistency, GCC always uses 40697emulation to work with floating point values, even when the host and 40698target floating point formats are identical. 40699 40700 The following macros are provided by 'real.h' for the compiler to use. 40701All parts of the compiler which generate or optimize floating-point 40702calculations must use these macros. They may evaluate their operands 40703more than once, so operands must not have side effects. 40704 40705 -- Macro: REAL_VALUE_TYPE 40706 The C data type to be used to hold a floating point value in the 40707 target machine's format. Typically this is a 'struct' containing 40708 an array of 'HOST_WIDE_INT', but all code should treat it as an 40709 opaque quantity. 40710 40711 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 40712 Truncates X to a signed integer, rounding toward zero. 40713 40714 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 40715 (REAL_VALUE_TYPE X) 40716 Truncates X to an unsigned integer, rounding toward zero. If X is 40717 negative, returns zero. 40718 40719 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, 40720 machine_mode MODE) 40721 Converts STRING into a floating point number in the target 40722 machine's representation for mode MODE. This routine can handle 40723 both decimal and hexadecimal floating point constants, using the 40724 syntax defined by the C language for both. 40725 40726 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 40727 Returns 1 if X is negative (including negative zero), 0 otherwise. 40728 40729 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 40730 Determines whether X represents infinity (positive or negative). 40731 40732 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 40733 Determines whether X represents a "NaN" (not-a-number). 40734 40735 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 40736 Returns the negative of the floating point value X. 40737 40738 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 40739 Returns the absolute value of X. 40740 40741 40742File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 40743 4074418.23 Mode Switching Instructions 40745================================= 40746 40747The following macros control mode switching optimizations: 40748 40749 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 40750 Define this macro if the port needs extra instructions inserted for 40751 mode switching in an optimizing compilation. 40752 40753 For an example, the SH4 can perform both single and double 40754 precision floating point operations, but to perform a single 40755 precision operation, the FPSCR PR bit has to be cleared, while for 40756 a double precision operation, this bit has to be set. Changing the 40757 PR bit requires a general purpose register as a scratch register, 40758 hence these FPSCR sets have to be inserted before reload, i.e. you 40759 cannot put this into instruction emitting or 40760 'TARGET_MACHINE_DEPENDENT_REORG'. 40761 40762 You can have multiple entities that are mode-switched, and select 40763 at run time which entities actually need it. 40764 'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that 40765 needs mode-switching. If you define this macro, you also have to 40766 define 'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED', 40767 'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'. 40768 'TARGET_MODE_AFTER', 'TARGET_MODE_ENTRY', and 'TARGET_MODE_EXIT' 40769 are optional. 40770 40771 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 40772 If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as 40773 initializer for an array of integers. Each initializer element N 40774 refers to an entity that needs mode switching, and specifies the 40775 number of different modes that might need to be set for this 40776 entity. The position of the initializer in the 40777 initializer--starting counting at zero--determines the integer that 40778 is used to refer to the mode-switched entity in question. In 40779 macros that take mode arguments / yield a mode result, modes are 40780 represented as numbers 0 ... N - 1. N is used to specify that no 40781 mode switch is needed / supplied. 40782 40783 -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int 40784 PREV_MODE, HARD_REG_SET REGS_LIVE) 40785 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE is 40786 the set of hard registers live at the point where the insn(s) are 40787 to be inserted. PREV_MOXDE indicates the mode to switch from. 40788 Sets of a lower numbered entity will be emitted before sets of a 40789 higher numbered entity to a mode of the same or lower priority. 40790 40791 -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN) 40792 ENTITY is an integer specifying a mode-switched entity. If 40793 'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 40794 return an integer value not larger than the corresponding element 40795 in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 40796 must be switched into prior to the execution of INSN. 40797 40798 -- Target Hook: int TARGET_MODE_AFTER (int ENTITY, int MODE, rtx_insn 40799 *INSN) 40800 ENTITY is an integer specifying a mode-switched entity. If this 40801 macro is defined, it is evaluated for every INSN during mode 40802 switching. It determines the mode that an insn results in (if 40803 different from the incoming mode). 40804 40805 -- Target Hook: int TARGET_MODE_ENTRY (int ENTITY) 40806 If this macro is defined, it is evaluated for every ENTITY that 40807 needs mode switching. It should evaluate to an integer, which is a 40808 mode that ENTITY is assumed to be switched to at function entry. 40809 If 'TARGET_MODE_ENTRY' is defined then 'TARGET_MODE_EXIT' must be 40810 defined. 40811 40812 -- Target Hook: int TARGET_MODE_EXIT (int ENTITY) 40813 If this macro is defined, it is evaluated for every ENTITY that 40814 needs mode switching. It should evaluate to an integer, which is a 40815 mode that ENTITY is assumed to be switched to at function exit. If 40816 'TARGET_MODE_EXIT' is defined then 'TARGET_MODE_ENTRY' must be 40817 defined. 40818 40819 -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N) 40820 This macro specifies the order in which modes for ENTITY are 40821 processed. 0 is the highest priority, 40822 'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 40823 of the macro should be an integer designating a mode for ENTITY. 40824 For any fixed ENTITY, 'mode_priority' (ENTITY, N) shall be a 40825 bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'. 40826 40827 40828File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 40829 4083018.24 Defining target-specific uses of '__attribute__' 40831====================================================== 40832 40833Target-specific attributes may be defined for functions, data and types. 40834These are described using the following target hooks; they also need to 40835be documented in 'extend.texi'. 40836 40837 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 40838 If defined, this target hook points to an array of 'struct 40839 attribute_spec' (defined in 'tree-core.h') specifying the machine 40840 specific attributes for this target and some of the restrictions on 40841 the entities to which these attributes are applied and the 40842 arguments they take. 40843 40844 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree 40845 NAME) 40846 If defined, this target hook is a function which returns true if 40847 the machine-specific attribute named NAME expects an identifier 40848 given as its first argument to be passed on as a plain identifier, 40849 not subjected to name lookup. If this is not defined, the default 40850 is false for all machine-specific attributes. 40851 40852 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 40853 const_tree TYPE2) 40854 If defined, this target hook is a function which returns zero if 40855 the attributes on TYPE1 and TYPE2 are incompatible, one if they are 40856 compatible, and two if they are nearly compatible (which causes a 40857 warning to be generated). If this is not defined, machine-specific 40858 attributes are supposed always to be compatible. 40859 40860 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 40861 If defined, this target hook is a function which assigns default 40862 attributes to the newly defined TYPE. 40863 40864 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 40865 TYPE2) 40866 Define this target hook if the merging of type attributes needs 40867 special handling. If defined, the result is a list of the combined 40868 'TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 40869 'comptypes' has already been called and returned 1. This function 40870 may call 'merge_attributes' to handle machine-independent merging. 40871 40872 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 40873 NEWDECL) 40874 Define this target hook if the merging of decl attributes needs 40875 special handling. If defined, the result is a list of the combined 40876 'DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 40877 declaration of OLDDECL. Examples of when this is needed are when 40878 one attribute overrides another, or when an attribute is nullified 40879 by a subsequent definition. This function may call 40880 'merge_attributes' to handle machine-independent merging. 40881 40882 If the only target-specific handling you require is 'dllimport' for 40883 Microsoft Windows targets, you should define the macro 40884 'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'. The compiler will then 40885 define a function called 'merge_dllimport_decl_attributes' which 40886 can then be defined as the expansion of 40887 'TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 40888 'handle_dll_attribute' in the attribute table for your port to 40889 perform initial processing of the 'dllimport' and 'dllexport' 40890 attributes. This is done in 'i386/cygwin.h' and 'i386/i386.c', for 40891 example. 40892 40893 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 40894 DECL) 40895 DECL is a variable or function with '__attribute__((dllimport))' 40896 specified. Use this hook if the target needs to add extra 40897 validation checks to 'handle_dll_attribute'. 40898 40899 -- Macro: TARGET_DECLSPEC 40900 Define this macro to a nonzero value if you want to treat 40901 '__declspec(X)' as equivalent to '__attribute((X))'. By default, 40902 this behavior is enabled only for targets that define 40903 'TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 40904 '__declspec' is via a built-in macro, but you should not rely on 40905 this implementation detail. 40906 40907 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 40908 *ATTR_PTR) 40909 Define this target hook if you want to be able to add attributes to 40910 a decl when it is being created. This is normally useful for back 40911 ends which wish to implement a pragma by using the attributes which 40912 correspond to the pragma's effect. The NODE argument is the decl 40913 which is being created. The ATTR_PTR argument is a pointer to the 40914 attribute list for this decl. The list itself should not be 40915 modified, since it may be shared with other decls, but attributes 40916 may be chained on the head of the list and '*ATTR_PTR' modified to 40917 point to the new attributes, or a copy of the list may be made if 40918 further changes are needed. 40919 40920 -- Target Hook: tree TARGET_HANDLE_GENERIC_ATTRIBUTE (tree *NODE, tree 40921 NAME, tree ARGS, int FLAGS, bool *NO_ADD_ATTRS) 40922 Define this target hook if you want to be able to perform 40923 additional target-specific processing of an attribute which is 40924 handled generically by a front end. The arguments are the same as 40925 those which are passed to attribute handlers. So far this only 40926 affects the NOINIT and SECTION attribute. 40927 40928 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 40929 FNDECL) 40930 This target hook returns 'true' if it is OK to inline FNDECL into 40931 the current function, despite its having target-specific 40932 attributes, 'false' otherwise. By default, if a function has a 40933 target specific attribute attached to it, it will not be inlined. 40934 40935 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree 40936 NAME, tree ARGS, int FLAGS) 40937 This hook is called to parse 'attribute(target("..."))', which 40938 allows setting target-specific options on individual functions. 40939 These function-specific options may differ from the options 40940 specified on the command line. The hook should return 'true' if 40941 the options are valid. 40942 40943 The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in 40944 the function declaration to hold a pointer to a target-specific 40945 'struct cl_target_option' structure. 40946 40947 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR, 40948 struct gcc_options *OPTS) 40949 This hook is called to save any additional target-specific 40950 information in the 'struct cl_target_option' structure for 40951 function-specific options from the 'struct gcc_options' structure. 40952 *Note Option file format::. 40953 40954 -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS, 40955 struct cl_target_option *PTR) 40956 This hook is called to restore any additional target-specific 40957 information in the 'struct cl_target_option' structure for 40958 function-specific options to the 'struct gcc_options' structure. 40959 40960 -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct 40961 cl_target_option *PTR) 40962 This hook is called to update target-specific information in the 40963 'struct cl_target_option' structure after it is streamed in from 40964 LTO bytecode. 40965 40966 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 40967 struct cl_target_option *PTR) 40968 This hook is called to print any additional target-specific 40969 information in the 'struct cl_target_option' structure for 40970 function-specific options. 40971 40972 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree 40973 POP_TARGET) 40974 This target hook parses the options for '#pragma GCC target', which 40975 sets the target-specific options for functions that occur later in 40976 the input stream. The options accepted should be the same as those 40977 handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook. 40978 40979 -- Target Hook: void TARGET_OPTION_OVERRIDE (void) 40980 Sometimes certain combinations of command options do not make sense 40981 on a particular target machine. You can override the hook 40982 'TARGET_OPTION_OVERRIDE' to take account of this. This hooks is 40983 called once just after all the command options have been parsed. 40984 40985 Don't use this hook to turn on various extra optimizations for 40986 '-O'. That is what 'TARGET_OPTION_OPTIMIZATION' is for. 40987 40988 If you need to do something whenever the optimization level is 40989 changed via the optimize attribute or pragma, see 40990 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 40991 40992 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree 40993 DECL2) 40994 This target hook returns 'true' if DECL1 and DECL2 are versions of 40995 the same function. DECL1 and DECL2 are function versions if and 40996 only if they have the same function signature and different target 40997 specific attributes, that is, they are compiled for different 40998 target machines. 40999 41000 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 41001 This target hook returns 'false' if the CALLER function cannot 41002 inline CALLEE, based on target specific information. By default, 41003 inlining is not allowed if the callee function has function 41004 specific target options and the caller does not use the same 41005 options. 41006 41007 -- Target Hook: void TARGET_RELAYOUT_FUNCTION (tree FNDECL) 41008 This target hook fixes function FNDECL after attributes are 41009 processed. Default does nothing. On ARM, the default function's 41010 alignment is updated with the attribute target. 41011 41012 41013File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 41014 4101518.25 Emulating TLS 41016=================== 41017 41018For targets whose psABI does not provide Thread Local Storage via 41019specific relocations and instruction sequences, an emulation layer is 41020used. A set of target hooks allows this emulation layer to be 41021configured for the requirements of a particular target. For instance 41022the psABI may in fact specify TLS support in terms of an emulation 41023layer. 41024 41025 The emulation layer works by creating a control object for every TLS 41026object. To access the TLS object, a lookup function is provided which, 41027when given the address of the control object, will return the address of 41028the current thread's instance of the TLS object. 41029 41030 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 41031 Contains the name of the helper function that uses a TLS control 41032 object to locate a TLS instance. The default causes libgcc's 41033 emulated TLS helper function to be used. 41034 41035 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 41036 Contains the name of the helper function that should be used at 41037 program startup to register TLS objects that are implicitly 41038 initialized to zero. If this is 'NULL', all TLS objects will have 41039 explicit initializers. The default causes libgcc's emulated TLS 41040 registration function to be used. 41041 41042 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 41043 Contains the name of the section in which TLS control variables 41044 should be placed. The default of 'NULL' allows these to be placed 41045 in any section. 41046 41047 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 41048 Contains the name of the section in which TLS initializers should 41049 be placed. The default of 'NULL' allows these to be placed in any 41050 section. 41051 41052 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 41053 Contains the prefix to be prepended to TLS control variable names. 41054 The default of 'NULL' uses a target-specific prefix. 41055 41056 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 41057 Contains the prefix to be prepended to TLS initializer objects. 41058 The default of 'NULL' uses a target-specific prefix. 41059 41060 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 41061 Specifies a function that generates the FIELD_DECLs for a TLS 41062 control object type. TYPE is the RECORD_TYPE the fields are for 41063 and NAME should be filled with the structure tag, if the default of 41064 '__emutls_object' is unsuitable. The default creates a type 41065 suitable for libgcc's emulated TLS function. 41066 41067 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 41068 TMPL_ADDR) 41069 Specifies a function that generates the CONSTRUCTOR to initialize a 41070 TLS control object. VAR is the TLS control object, DECL is the TLS 41071 object and TMPL_ADDR is the address of the initializer. The 41072 default initializes libgcc's emulated TLS control object. 41073 41074 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 41075 Specifies whether the alignment of TLS control variable objects is 41076 fixed and should not be increased as some backends may do to 41077 optimize single objects. The default is false. 41078 41079 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 41080 Specifies whether a DWARF 'DW_OP_form_tls_address' location 41081 descriptor may be used to describe emulated TLS control objects. 41082 41083 41084File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 41085 4108618.26 Defining coprocessor specifics for MIPS targets. 41087====================================================== 41088 41089The MIPS specification allows MIPS implementations to have as many as 4 41090coprocessors, each with as many as 32 private registers. GCC supports 41091accessing these registers and transferring values between the registers 41092and memory using asm-ized variables. For example: 41093 41094 register unsigned int cp0count asm ("c0r1"); 41095 unsigned int d; 41096 41097 d = cp0count + 3; 41098 41099 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 41100names may be added as described below, or the default names may be 41101overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 41102 41103 Coprocessor registers are assumed to be epilogue-used; sets to them 41104will be preserved even if it does not appear that the register is used 41105again later in the function. 41106 41107 Another note: according to the MIPS spec, coprocessor 1 (if present) is 41108the FPU. One accesses COP1 registers through standard mips 41109floating-point support; they are not included in this mechanism. 41110 41111 41112File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 41113 4111418.27 Parameters for Precompiled Header Validity Checking 41115========================================================= 41116 41117 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 41118 This hook returns a pointer to the data needed by 41119 'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in 41120 bytes. 41121 41122 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 41123 size_t SZ) 41124 This hook checks whether the options used to create a PCH file are 41125 compatible with the current settings. It returns 'NULL' if so and 41126 a suitable error message if not. Error messages will be presented 41127 to the user and must be localized using '_(MSG)'. 41128 41129 DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY' 41130 when the PCH file was created and SZ is the size of that data in 41131 bytes. It's safe to assume that the data was created by the same 41132 version of the compiler, so no format checking is needed. 41133 41134 The default definition of 'default_pch_valid_p' should be suitable 41135 for most targets. 41136 41137 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 41138 PCH_FLAGS) 41139 If this hook is nonnull, the default implementation of 41140 'TARGET_PCH_VALID_P' will use it to check for compatible values of 41141 'target_flags'. PCH_FLAGS specifies the value that 'target_flags' 41142 had when the PCH file was created. The return value is the same as 41143 for 'TARGET_PCH_VALID_P'. 41144 41145 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void) 41146 Called before writing out a PCH file. If the target has some 41147 garbage-collected data that needs to be in a particular state on 41148 PCH loads, it can use this hook to enforce that state. Very few 41149 targets need to do anything here. 41150 41151 41152File: gccint.info, Node: C++ ABI, Next: D Language and ABI, Prev: PCH Target, Up: Target Macros 41153 4115418.28 C++ ABI parameters 41155======================== 41156 41157 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 41158 Define this hook to override the integer type used for guard 41159 variables. These are used to implement one-time construction of 41160 static objects. The default is long_long_integer_type_node. 41161 41162 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 41163 This hook determines how guard variables are used. It should 41164 return 'false' (the default) if the first byte should be used. A 41165 return value of 'true' indicates that only the least significant 41166 bit should be used. 41167 41168 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 41169 This hook returns the size of the cookie to use when allocating an 41170 array whose elements have the indicated TYPE. Assumes that it is 41171 already known that a cookie is needed. The default is 'max(sizeof 41172 (size_t), alignof(type))', as defined in section 2.7 of the 41173 IA64/Generic C++ ABI. 41174 41175 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 41176 This hook should return 'true' if the element size should be stored 41177 in array cookies. The default is to return 'false'. 41178 41179 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 41180 IMPORT_EXPORT) 41181 If defined by a backend this hook allows the decision made to 41182 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 41183 contain 1 if the class is going to be exported, -1 if it is going 41184 to be imported and 0 otherwise. This function should return the 41185 modified value and perform any other actions necessary to support 41186 the backend's targeted operating system. 41187 41188 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 41189 This hook should return 'true' if constructors and destructors 41190 return the address of the object created/destroyed. The default is 41191 to return 'false'. 41192 41193 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 41194 This hook returns true if the key method for a class (i.e., the 41195 method which, if defined in the current translation unit, causes 41196 the virtual table to be emitted) may be an inline function. Under 41197 the standard Itanium C++ ABI the key method may be an inline 41198 function so long as the function is not declared inline in the 41199 class definition. Under some variants of the ABI, an inline 41200 function can never be the key method. The default is to return 41201 'true'. 41202 41203 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 41204 DECL) 41205 DECL is a virtual table, virtual table table, typeinfo object, or 41206 other similar implicit class data object that will be emitted with 41207 external linkage in this translation unit. No ELF visibility has 41208 been explicitly specified. If the target needs to specify a 41209 visibility other than that of the containing class, use this hook 41210 to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'. 41211 41212 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 41213 This hook returns true (the default) if virtual tables and other 41214 similar implicit class data objects are always COMDAT if they have 41215 external linkage. If this hook returns false, then class data for 41216 classes whose virtual table will be emitted in only one translation 41217 unit will not be COMDAT. 41218 41219 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 41220 This hook returns true (the default) if the RTTI information for 41221 the basic types which is defined in the C++ runtime should always 41222 be COMDAT, false if it should not be COMDAT. 41223 41224 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 41225 This hook returns true if '__aeabi_atexit' (as defined by the ARM 41226 EABI) should be used to register static destructors when 41227 '-fuse-cxa-atexit' is in effect. The default is to return false to 41228 use '__cxa_atexit'. 41229 41230 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 41231 This hook returns true if the target 'atexit' function can be used 41232 in the same manner as '__cxa_atexit' to register C++ static 41233 destructors. This requires that 'atexit'-registered functions in 41234 shared libraries are run in the correct order when the libraries 41235 are unloaded. The default is to return false. 41236 41237 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 41238 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just 41239 been defined. Use this hook to make adjustments to the class (eg, 41240 tweak visibility or perform any other required target 41241 modifications). 41242 41243 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL) 41244 Return target-specific mangling context of DECL or 'NULL_TREE'. 41245 41246 41247File: gccint.info, Node: D Language and ABI, Next: Named Address Spaces, Prev: C++ ABI, Up: Target Macros 41248 4124918.29 D ABI parameters 41250====================== 41251 41252 -- D Target Hook: void TARGET_D_CPU_VERSIONS (void) 41253 Declare all environmental version identifiers relating to the 41254 target CPU using the function 'builtin_version', which takes a 41255 string representing the name of the version. Version identifiers 41256 predefined by this hook apply to all modules that are being 41257 compiled and imported. 41258 41259 -- D Target Hook: void TARGET_D_OS_VERSIONS (void) 41260 Similarly to 'TARGET_D_CPU_VERSIONS', but is used for versions 41261 relating to the target operating system. 41262 41263 -- D Target Hook: unsigned TARGET_D_CRITSEC_SIZE (void) 41264 Returns the size of the data structure used by the target operating 41265 system for critical sections and monitors. For example, on 41266 Microsoft Windows this would return the 'sizeof(CRITICAL_SECTION)', 41267 while other platforms that implement pthreads would return 41268 'sizeof(pthread_mutex_t)'. 41269 41270 41271File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: D Language and ABI, Up: Target Macros 41272 4127318.30 Adding support for named address spaces 41274============================================= 41275 41276The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 41277committee, 'Programming Languages - C - Extensions to support embedded 41278processors', specifies a syntax for embedded processors to specify 41279alternate address spaces. You can configure a GCC port to support 41280section 5.1 of the draft report to add support for address spaces other 41281than the default address space. These address spaces are new keywords 41282that are similar to the 'volatile' and 'const' type attributes. 41283 41284 Pointers to named address spaces can have a different size than 41285pointers to the generic address space. 41286 41287 For example, the SPU port uses the '__ea' address space to refer to 41288memory in the host processor, rather than memory local to the SPU 41289processor. Access to memory in the '__ea' address space involves 41290issuing DMA operations to move data between the host processor and the 41291local processor memory address space. Pointers in the '__ea' address 41292space are either 32 bits or 64 bits based on the '-mea32' or '-mea64' 41293switches (native SPU pointers are always 32 bits). 41294 41295 Internally, address spaces are represented as a small integer in the 41296range 0 to 15 with address space 0 being reserved for the generic 41297address space. 41298 41299 To register a named address space qualifier keyword with the C front 41300end, the target may call the 'c_register_addr_space' routine. For 41301example, the SPU port uses the following to declare '__ea' as the 41302keyword for named address space #1: 41303 #define ADDR_SPACE_EA 1 41304 c_register_addr_space ("__ea", ADDR_SPACE_EA); 41305 41306 -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_POINTER_MODE 41307 (addr_space_t ADDRESS_SPACE) 41308 Define this to return the machine mode to use for pointers to 41309 ADDRESS_SPACE if the target supports named address spaces. The 41310 default version of this hook returns 'ptr_mode'. 41311 41312 -- Target Hook: scalar_int_mode TARGET_ADDR_SPACE_ADDRESS_MODE 41313 (addr_space_t ADDRESS_SPACE) 41314 Define this to return the machine mode to use for addresses in 41315 ADDRESS_SPACE if the target supports named address spaces. The 41316 default version of this hook returns 'Pmode'. 41317 41318 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE 41319 (scalar_int_mode MODE, addr_space_t AS) 41320 Define this to return nonzero if the port can handle pointers with 41321 machine mode MODE to address space AS. This target hook is the 41322 same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it 41323 includes explicit named address space support. The default version 41324 of this hook returns true for the modes returned by either the 41325 'TARGET_ADDR_SPACE_POINTER_MODE' or 41326 'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address 41327 space. 41328 41329 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P 41330 (machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 41331 Define this to return true if EXP is a valid address for mode MODE 41332 in the named address space AS. The STRICT parameter says whether 41333 strict addressing is in effect after reload has finished. This 41334 target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target 41335 hook, except that it includes explicit named address space support. 41336 41337 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 41338 OLDX, machine_mode MODE, addr_space_t AS) 41339 Define this to modify an invalid address X to be a valid address 41340 with mode MODE in the named address space AS. This target hook is 41341 the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except 41342 that it includes explicit named address space support. 41343 41344 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET, 41345 addr_space_t SUPERSET) 41346 Define this to return whether the SUBSET named address space is 41347 contained within the SUPERSET named address space. Pointers to a 41348 named address space that is a subset of another named address space 41349 will be converted automatically without a cast if used together in 41350 arithmetic operations. Pointers to a superset address space can be 41351 converted to pointers to a subset address space via explicit casts. 41352 41353 -- Target Hook: bool TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID (addr_space_t 41354 AS) 41355 Define this to modify the default handling of address 0 for the 41356 address space. Return true if 0 should be considered a valid 41357 address. 41358 41359 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 41360 tree TO_TYPE) 41361 Define this to convert the pointer expression represented by the 41362 RTL OP with type FROM_TYPE that points to a named address space to 41363 a new pointer expression with type TO_TYPE that points to a 41364 different named address space. When this hook it called, it is 41365 guaranteed that one of the two address spaces is a subset of the 41366 other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target 41367 hook. 41368 41369 -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS) 41370 Define this to define how the address space is encoded in dwarf. 41371 The result is the value to be used with 'DW_AT_address_class'. 41372 41373 -- Target Hook: void TARGET_ADDR_SPACE_DIAGNOSE_USAGE (addr_space_t AS, 41374 location_t LOC) 41375 Define this hook if the availability of an address space depends on 41376 command line options and some diagnostics should be printed when 41377 the address space is used. This hook is called during parsing and 41378 allows to emit a better diagnostic compared to the case where the 41379 address space was not registered with 'c_register_addr_space'. AS 41380 is the address space as registered with 'c_register_addr_space'. 41381 LOC is the location of the address space qualifier token. The 41382 default implementation does nothing. 41383 41384 41385File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 41386 4138718.31 Miscellaneous Parameters 41388============================== 41389 41390Here are several miscellaneous parameters. 41391 41392 -- Macro: HAS_LONG_COND_BRANCH 41393 Define this boolean macro to indicate whether or not your 41394 architecture has conditional branches that can span all of memory. 41395 It is used in conjunction with an optimization that partitions hot 41396 and cold basic blocks into separate sections of the executable. If 41397 this macro is set to false, gcc will convert any conditional 41398 branches that attempt to cross between sections into unconditional 41399 branches or indirect jumps. 41400 41401 -- Macro: HAS_LONG_UNCOND_BRANCH 41402 Define this boolean macro to indicate whether or not your 41403 architecture has unconditional branches that can span all of 41404 memory. It is used in conjunction with an optimization that 41405 partitions hot and cold basic blocks into separate sections of the 41406 executable. If this macro is set to false, gcc will convert any 41407 unconditional branches that attempt to cross between sections into 41408 indirect jumps. 41409 41410 -- Macro: CASE_VECTOR_MODE 41411 An alias for a machine mode name. This is the machine mode that 41412 elements of a jump-table should have. 41413 41414 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 41415 Optional: return the preferred mode for an 'addr_diff_vec' when the 41416 minimum and maximum offset are known. If you define this, it 41417 enables extra code in branch shortening to deal with 41418 'addr_diff_vec'. To make this work, you also have to define 41419 'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit. 41420 The BODY argument is provided so that the offset_unsigned and scale 41421 flags can be updated. 41422 41423 -- Macro: CASE_VECTOR_PC_RELATIVE 41424 Define this macro to be a C expression to indicate when jump-tables 41425 should contain relative addresses. You need not define this macro 41426 if jump-tables never contain relative addresses, or jump-tables 41427 should contain relative addresses only when '-fPIC' or '-fPIC' is 41428 in effect. 41429 41430 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 41431 This function return the smallest number of different values for 41432 which it is best to use a jump-table instead of a tree of 41433 conditional branches. The default is four for machines with a 41434 'casesi' instruction and five otherwise. This is best for most 41435 machines. 41436 41437 -- Macro: WORD_REGISTER_OPERATIONS 41438 Define this macro to 1 if operations between registers with 41439 integral mode smaller than a word are always performed on the 41440 entire register. To be more explicit, if you start with a pair of 41441 'word_mode' registers with known values and you do a subword, for 41442 example 'QImode', addition on the low part of the registers, then 41443 the compiler may consider that the result has a known value in 41444 'word_mode' too if the macro is defined to 1. Most RISC machines 41445 have this property and most CISC machines do not. 41446 41447 -- Target Hook: unsigned int TARGET_MIN_ARITHMETIC_PRECISION (void) 41448 On some RISC architectures with 64-bit registers, the processor 41449 also maintains 32-bit condition codes that make it possible to do 41450 real 32-bit arithmetic, although the operations are performed on 41451 the full registers. 41452 41453 On such architectures, defining this hook to 32 tells the compiler 41454 to try using 32-bit arithmetical operations setting the condition 41455 codes instead of doing full 64-bit arithmetic. 41456 41457 More generally, define this hook on RISC architectures if you want 41458 the compiler to try using arithmetical operations setting the 41459 condition codes with a precision lower than the word precision. 41460 41461 You need not define this hook if 'WORD_REGISTER_OPERATIONS' is not 41462 defined to 1. 41463 41464 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 41465 Define this macro to be a C expression indicating when insns that 41466 read memory in MEM_MODE, an integral mode narrower than a word, set 41467 the bits outside of MEM_MODE to be either the sign-extension or the 41468 zero-extension of the data read. Return 'SIGN_EXTEND' for values 41469 of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for 41470 which it zero-extends, and 'UNKNOWN' for other modes. 41471 41472 This macro is not called with MEM_MODE non-integral or with a width 41473 greater than or equal to 'BITS_PER_WORD', so you may return any 41474 value in this case. Do not define this macro if it would always 41475 return 'UNKNOWN'. On machines where this macro is defined, you 41476 will normally define it as the constant 'SIGN_EXTEND' or 41477 'ZERO_EXTEND'. 41478 41479 You may return a non-'UNKNOWN' value even if for some hard 41480 registers the sign extension is not performed, if for the 41481 'REGNO_REG_CLASS' of these hard registers 41482 'TARGET_CAN_CHANGE_MODE_CLASS' returns false when the FROM mode is 41483 MEM_MODE and the TO mode is any integral mode larger than this but 41484 not larger than 'word_mode'. 41485 41486 You must return 'UNKNOWN' if for some hard registers that allow 41487 this mode, 'TARGET_CAN_CHANGE_MODE_CLASS' says that they cannot 41488 change to 'word_mode', but that they can change to another integral 41489 mode that is larger then MEM_MODE but still smaller than 41490 'word_mode'. 41491 41492 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 41493 Define this macro to 1 if loading short immediate values into 41494 registers sign extends. 41495 41496 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL 41497 (machine_mode MODE) 41498 When '-ffast-math' is in effect, GCC tries to optimize divisions by 41499 the same divisor, by turning them into multiplications by the 41500 reciprocal. This target hook specifies the minimum number of 41501 divisions that should be there for GCC to perform the optimization 41502 for a variable of mode MODE. The default implementation returns 3 41503 if the machine has an instruction for the division, and 2 if it 41504 does not. 41505 41506 -- Macro: MOVE_MAX 41507 The maximum number of bytes that a single instruction can move 41508 quickly between memory and registers or between two memory 41509 locations. 41510 41511 -- Macro: MAX_MOVE_MAX 41512 The maximum number of bytes that a single instruction can move 41513 quickly between memory and registers or between two memory 41514 locations. If this is undefined, the default is 'MOVE_MAX'. 41515 Otherwise, it is the constant value that is the largest value that 41516 'MOVE_MAX' can have at run-time. 41517 41518 -- Macro: SHIFT_COUNT_TRUNCATED 41519 A C expression that is nonzero if on this machine the number of 41520 bits actually used for the count of a shift operation is equal to 41521 the number of bits needed to represent the size of the object being 41522 shifted. When this macro is nonzero, the compiler will assume that 41523 it is safe to omit a sign-extend, zero-extend, and certain bitwise 41524 'and' instructions that truncates the count of a shift operation. 41525 On machines that have instructions that act on bit-fields at 41526 variable positions, which may include 'bit test' instructions, a 41527 nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of 41528 truncations of the values that serve as arguments to bit-field 41529 instructions. 41530 41531 If both types of instructions truncate the count (for shifts) and 41532 position (for bit-field operations), or if no variable-position 41533 bit-field instructions exist, you should define this macro. 41534 41535 However, on some machines, such as the 80386 and the 680x0, 41536 truncation only applies to shift operations and not the (real or 41537 pretended) bit-field operations. Define 'SHIFT_COUNT_TRUNCATED' to 41538 be zero on such machines. Instead, add patterns to the 'md' file 41539 that include the implied truncation of the shift instructions. 41540 41541 You need not define this macro if it would always have the value of 41542 zero. 41543 41544 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 41545 (machine_mode MODE) 41546 This function describes how the standard shift patterns for MODE 41547 deal with shifts by negative amounts or by more than the width of 41548 the mode. *Note shift patterns::. 41549 41550 On many machines, the shift patterns will apply a mask M to the 41551 shift count, meaning that a fixed-width shift of X by Y is 41552 equivalent to an arbitrary-width shift of X by Y & M. If this is 41553 true for mode MODE, the function should return M, otherwise it 41554 should return 0. A return value of 0 indicates that no particular 41555 behavior is guaranteed. 41556 41557 Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_ 41558 apply to general shift rtxes; it applies only to instructions that 41559 are generated by the named shift patterns. 41560 41561 The default implementation of this function returns 41562 'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0 41563 otherwise. This definition is always safe, but if 41564 'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 41565 nevertheless truncate the shift count, you may get better code by 41566 overriding it. 41567 41568 -- Target Hook: bool TARGET_TRULY_NOOP_TRUNCATION (poly_uint64 OUTPREC, 41569 poly_uint64 INPREC) 41570 This hook returns true if it is safe to "convert" a value of INPREC 41571 bits to one of OUTPREC bits (where OUTPREC is smaller than INPREC) 41572 by merely operating on it as if it had only OUTPREC bits. The 41573 default returns true unconditionally, which is correct for most 41574 machines. 41575 41576 If 'TARGET_MODES_TIEABLE_P' returns false for a pair of modes, 41577 suboptimal code can result if this hook returns true for the 41578 corresponding mode sizes. Making this hook return false in such 41579 cases may improve things. 41580 41581 -- Target Hook: int TARGET_MODE_REP_EXTENDED (scalar_int_mode MODE, 41582 scalar_int_mode REP_MODE) 41583 The representation of an integral mode can be such that the values 41584 are always extended to a wider integral mode. Return 'SIGN_EXTEND' 41585 if values of MODE are represented in sign-extended form to 41586 REP_MODE. Return 'UNKNOWN' otherwise. (Currently, none of the 41587 targets use zero-extended representation this way so unlike 41588 'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return 41589 either 'SIGN_EXTEND' or 'UNKNOWN'. Also no target extends MODE to 41590 REP_MODE so that REP_MODE is not the next widest integral mode and 41591 currently we take advantage of this fact.) 41592 41593 Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value 41594 even if the extension is not performed on certain hard registers as 41595 long as for the 'REGNO_REG_CLASS' of these hard registers 41596 'TARGET_CAN_CHANGE_MODE_CLASS' returns false. 41597 41598 Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe 41599 two related properties. If you define 'TARGET_MODE_REP_EXTENDED 41600 (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP 41601 (mode)' to return the same type of extension. 41602 41603 In order to enforce the representation of 'mode', 41604 'TARGET_TRULY_NOOP_TRUNCATION' should return false when truncating 41605 to 'mode'. 41606 41607 -- Target Hook: bool TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P (void) 41608 On some targets, it is assumed that the compiler will spill all 41609 pseudos that are live across a call to 'setjmp', while other 41610 targets treat 'setjmp' calls as normal function calls. 41611 41612 This hook returns false if 'setjmp' calls do not preserve all 41613 non-volatile registers so that gcc that must spill all pseudos that 41614 are live across 'setjmp' calls. Define this to return true if the 41615 target does not need to spill all pseudos live across 'setjmp' 41616 calls. The default implementation conservatively assumes all 41617 pseudos must be spilled across 'setjmp' calls. 41618 41619 -- Macro: STORE_FLAG_VALUE 41620 A C expression describing the value returned by a comparison 41621 operator with an integral mode and stored by a store-flag 41622 instruction ('cstoreMODE4') when the condition is true. This 41623 description must apply to _all_ the 'cstoreMODE4' patterns and all 41624 the comparison operators whose results have a 'MODE_INT' mode. 41625 41626 A value of 1 or -1 means that the instruction implementing the 41627 comparison operator returns exactly 1 or -1 when the comparison is 41628 true and 0 when the comparison is false. Otherwise, the value 41629 indicates which bits of the result are guaranteed to be 1 when the 41630 comparison is true. This value is interpreted in the mode of the 41631 comparison operation, which is given by the mode of the first 41632 operand in the 'cstoreMODE4' pattern. Either the low bit or the 41633 sign bit of 'STORE_FLAG_VALUE' be on. Presently, only those bits 41634 are used by the compiler. 41635 41636 If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 41637 generate code that depends only on the specified bits. It can also 41638 replace comparison operators with equivalent operations if they 41639 cause the required bits to be set, even if the remaining bits are 41640 undefined. For example, on a machine whose comparison operators 41641 return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as 41642 '0x80000000', saying that just the sign bit is relevant, the 41643 expression 41644 41645 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 41646 41647 can be converted to 41648 41649 (ashift:SI X (const_int N)) 41650 41651 where N is the appropriate shift count to move the bit being tested 41652 into the sign bit. 41653 41654 There is no way to describe a machine that always sets the 41655 low-order bit for a true value, but does not guarantee the value of 41656 any other bits, but we do not know of any machine that has such an 41657 instruction. If you are trying to port GCC to such a machine, 41658 include an instruction to perform a logical-and of the result with 41659 1 in the pattern for the comparison operators and let us know at 41660 <gcc@gcc.gnu.org>. 41661 41662 Often, a machine will have multiple instructions that obtain a 41663 value from a comparison (or the condition codes). Here are rules 41664 to guide the choice of value for 'STORE_FLAG_VALUE', and hence the 41665 instructions to be used: 41666 41667 * Use the shortest sequence that yields a valid definition for 41668 'STORE_FLAG_VALUE'. It is more efficient for the compiler to 41669 "normalize" the value (convert it to, e.g., 1 or 0) than for 41670 the comparison operators to do so because there may be 41671 opportunities to combine the normalization with other 41672 operations. 41673 41674 * For equal-length sequences, use a value of 1 or -1, with -1 41675 being slightly preferred on machines with expensive jumps and 41676 1 preferred on other machines. 41677 41678 * As a second choice, choose a value of '0x80000001' if 41679 instructions exist that set both the sign and low-order bits 41680 but do not define the others. 41681 41682 * Otherwise, use a value of '0x80000000'. 41683 41684 Many machines can produce both the value chosen for 41685 'STORE_FLAG_VALUE' and its negation in the same number of 41686 instructions. On those machines, you should also define a pattern 41687 for those cases, e.g., one matching 41688 41689 (set A (neg:M (ne:M B C))) 41690 41691 Some machines can also perform 'and' or 'plus' operations on 41692 condition code values with less instructions than the corresponding 41693 'cstoreMODE4' insn followed by 'and' or 'plus'. On those machines, 41694 define the appropriate patterns. Use the names 'incscc' and 41695 'decscc', respectively, for the patterns which perform 'plus' or 41696 'minus' operations on condition code values. See 'rs6000.md' for 41697 some examples. The GNU Superoptimizer can be used to find such 41698 instruction sequences on other machines. 41699 41700 If this macro is not defined, the default value, 1, is used. You 41701 need not define 'STORE_FLAG_VALUE' if the machine has no store-flag 41702 instructions, or if the value generated by these instructions is 1. 41703 41704 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 41705 A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is 41706 returned when comparison operators with floating-point results are 41707 true. Define this macro on machines that have comparison 41708 operations that return floating-point values. If there are no such 41709 operations, do not define this macro. 41710 41711 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 41712 A C expression that gives a rtx representing the nonzero true 41713 element for vector comparisons. The returned rtx should be valid 41714 for the inner mode of MODE which is guaranteed to be a vector mode. 41715 Define this macro on machines that have vector comparison 41716 operations that return a vector result. If there are no such 41717 operations, do not define this macro. Typically, this macro is 41718 defined as 'const1_rtx' or 'constm1_rtx'. This macro may return 41719 'NULL_RTX' to prevent the compiler optimizing such vector 41720 comparison operations for the given mode. 41721 41722 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 41723 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 41724 A C expression that indicates whether the architecture defines a 41725 value for 'clz' or 'ctz' with a zero operand. A result of '0' 41726 indicates the value is undefined. If the value is defined for only 41727 the RTL expression, the macro should evaluate to '1'; if the value 41728 applies also to the corresponding optab entry (which is normally 41729 the case if it expands directly into the corresponding RTL), then 41730 the macro should evaluate to '2'. In the cases where the value is 41731 defined, VALUE should be set to this value. 41732 41733 If this macro is not defined, the value of 'clz' or 'ctz' at zero 41734 is assumed to be undefined. 41735 41736 This macro must be defined if the target's expansion for 'ffs' 41737 relies on a particular value to get correct results. Otherwise it 41738 is not necessary, though it may be used to optimize some corner 41739 cases, and to provide a default expansion for the 'ffs' optab. 41740 41741 Note that regardless of this macro the "definedness" of 'clz' and 41742 'ctz' at zero do _not_ extend to the builtin functions visible to 41743 the user. Thus one may be free to adjust the value at will to 41744 match the target expansion of these operations without fear of 41745 breaking the API. 41746 41747 -- Macro: Pmode 41748 An alias for the machine mode for pointers. On most machines, 41749 define this to be the integer mode corresponding to the width of a 41750 hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit 41751 machines. On some machines you must define this to be one of the 41752 partial integer modes, such as 'PSImode'. 41753 41754 The width of 'Pmode' must be at least as large as the value of 41755 'POINTER_SIZE'. If it is not equal, you must define the macro 41756 'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 41757 'Pmode'. 41758 41759 -- Macro: FUNCTION_MODE 41760 An alias for the machine mode used for memory references to 41761 functions being called, in 'call' RTL expressions. On most CISC 41762 machines, where an instruction can begin at any byte address, this 41763 should be 'QImode'. On most RISC machines, where all instructions 41764 have fixed size and alignment, this should be a mode with the same 41765 size and alignment as the machine instruction words - typically 41766 'SImode' or 'HImode'. 41767 41768 -- Macro: STDC_0_IN_SYSTEM_HEADERS 41769 In normal operation, the preprocessor expands '__STDC__' to the 41770 constant 1, to signify that GCC conforms to ISO Standard C. On 41771 some hosts, like Solaris, the system compiler uses a different 41772 convention, where '__STDC__' is normally 0, but is 1 if the user 41773 specifies strict conformance to the C Standard. 41774 41775 Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 41776 convention when processing system header files, but when processing 41777 user files '__STDC__' will always expand to 1. 41778 41779 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void) 41780 Define this hook to return the name of a header file to be included 41781 at the start of all compilations, as if it had been included with 41782 '#include <FILE>'. If this hook returns 'NULL', or is not defined, 41783 or the header is not found, or if the user specifies 41784 '-ffreestanding' or '-nostdinc', no header is included. 41785 41786 This hook can be used together with a header provided by the system 41787 C library to implement ISO C requirements for certain macros to be 41788 predefined that describe properties of the whole implementation 41789 rather than just the compiler. 41790 41791 -- C Target Hook: bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*) 41792 Define this hook to add target-specific C++ implicit extern C 41793 functions. If this function returns true for the name of a 41794 file-scope function, that function implicitly gets extern "C" 41795 linkage rather than whatever language linkage the declaration would 41796 normally have. An example of such function is WinMain on Win32 41797 targets. 41798 41799 -- Macro: SYSTEM_IMPLICIT_EXTERN_C 41800 Define this macro if the system header files do not support C++. 41801 This macro handles system header files by pretending that system 41802 header files are enclosed in 'extern "C" {...}'. 41803 41804 -- Macro: REGISTER_TARGET_PRAGMAS () 41805 Define this macro if you want to implement any target-specific 41806 pragmas. If defined, it is a C expression which makes a series of 41807 calls to 'c_register_pragma' or 'c_register_pragma_with_expansion' 41808 for each pragma. The macro may also do any setup required for the 41809 pragmas. 41810 41811 The primary reason to define this macro is to provide compatibility 41812 with other compilers for the same target. In general, we 41813 discourage definition of target-specific pragmas for GCC. 41814 41815 If the pragma can be implemented by attributes then you should 41816 consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as 41817 well. 41818 41819 Preprocessor macros that appear on pragma lines are not expanded. 41820 All '#pragma' directives that do not match any registered pragma 41821 are silently ignored, unless the user specifies 41822 '-Wunknown-pragmas'. 41823 41824 -- Function: void c_register_pragma (const char *SPACE, const char 41825 *NAME, void (*CALLBACK) (struct cpp_reader *)) 41826 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 41827 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 41828 41829 Each call to 'c_register_pragma' or 41830 'c_register_pragma_with_expansion' establishes one pragma. The 41831 CALLBACK routine will be called when the preprocessor encounters a 41832 pragma of the form 41833 41834 #pragma [SPACE] NAME ... 41835 41836 SPACE is the case-sensitive namespace of the pragma, or 'NULL' to 41837 put the pragma in the global namespace. The callback routine 41838 receives PFILE as its first argument, which can be passed on to 41839 cpplib's functions if necessary. You can lex tokens after the NAME 41840 by calling 'pragma_lex'. Tokens that are not read by the callback 41841 will be silently ignored. The end of the line is indicated by a 41842 token of type 'CPP_EOF'. Macro expansion occurs on the arguments 41843 of pragmas registered with 'c_register_pragma_with_expansion' but 41844 not on the arguments of pragmas registered with 41845 'c_register_pragma'. 41846 41847 Note that the use of 'pragma_lex' is specific to the C and C++ 41848 compilers. It will not work in the Java or Fortran compilers, or 41849 any other language compilers for that matter. Thus if 'pragma_lex' 41850 is going to be called from target-specific code, it must only be 41851 done so when building the C and C++ compilers. This can be done by 41852 defining the variables 'c_target_objs' and 'cxx_target_objs' in the 41853 target entry in the 'config.gcc' file. These variables should name 41854 the target-specific, language-specific object file which contains 41855 the code that uses 'pragma_lex'. Note it will also be necessary to 41856 add a rule to the makefile fragment pointed to by 'tmake_file' that 41857 shows how to build this object file. 41858 41859 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 41860 Define this macro if macros should be expanded in the arguments of 41861 '#pragma pack'. 41862 41863 -- Macro: TARGET_DEFAULT_PACK_STRUCT 41864 If your target requires a structure packing default other than 0 41865 (meaning the machine default), define this macro to the necessary 41866 value (in bytes). This must be a value that would also be valid to 41867 use with '#pragma pack()' (that is, a small power of two). 41868 41869 -- Macro: DOLLARS_IN_IDENTIFIERS 41870 Define this macro to control use of the character '$' in identifier 41871 names for the C family of languages. 0 means '$' is not allowed by 41872 default; 1 means it is allowed. 1 is the default; there is no need 41873 to define this macro in that case. 41874 41875 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 41876 Define this macro as a C expression that is nonzero if it is safe 41877 for the delay slot scheduler to place instructions in the delay 41878 slot of INSN, even if they appear to use a resource set or 41879 clobbered in INSN. INSN is always a 'jump_insn' or an 'insn'; GCC 41880 knows that every 'call_insn' has this behavior. On machines where 41881 some 'insn' or 'jump_insn' is really a function call and hence has 41882 this behavior, you should define this macro. 41883 41884 You need not define this macro if it would always return zero. 41885 41886 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 41887 Define this macro as a C expression that is nonzero if it is safe 41888 for the delay slot scheduler to place instructions in the delay 41889 slot of INSN, even if they appear to set or clobber a resource 41890 referenced in INSN. INSN is always a 'jump_insn' or an 'insn'. On 41891 machines where some 'insn' or 'jump_insn' is really a function call 41892 and its operands are registers whose use is actually in the 41893 subroutine it calls, you should define this macro. Doing so allows 41894 the delay slot scheduler to move instructions which copy arguments 41895 into the argument registers into the delay slot of INSN. 41896 41897 You need not define this macro if it would always return zero. 41898 41899 -- Macro: MULTIPLE_SYMBOL_SPACES 41900 Define this macro as a C expression that is nonzero if, in some 41901 cases, global symbols from one translation unit may not be bound to 41902 undefined symbols in another translation unit without user 41903 intervention. For instance, under Microsoft Windows symbols must 41904 be explicitly imported from shared libraries (DLLs). 41905 41906 You need not define this macro if it would always evaluate to zero. 41907 41908 -- Target Hook: rtx_insn * TARGET_MD_ASM_ADJUST (vec<rtx>& OUTPUTS, 41909 vec<rtx>& INPUTS, vec<const char *>& CONSTRAINTS, vec<rtx>& 41910 CLOBBERS, HARD_REG_SET& CLOBBERED_REGS) 41911 This target hook may add "clobbers" to CLOBBERS and CLOBBERED_REGS 41912 for any hard regs the port wishes to automatically clobber for an 41913 asm. The OUTPUTS and INPUTS may be inspected to avoid clobbering a 41914 register that is already used by the asm. 41915 41916 It may modify the OUTPUTS, INPUTS, and CONSTRAINTS as necessary for 41917 other pre-processing. In this case the return value is a sequence 41918 of insns to emit after the asm. 41919 41920 -- Macro: MATH_LIBRARY 41921 Define this macro as a C string constant for the linker argument to 41922 link in the system math library, minus the initial '"-l"', or '""' 41923 if the target does not have a separate math library. 41924 41925 You need only define this macro if the default of '"m"' is wrong. 41926 41927 -- Macro: LIBRARY_PATH_ENV 41928 Define this macro as a C string constant for the environment 41929 variable that specifies where the linker should look for libraries. 41930 41931 You need only define this macro if the default of '"LIBRARY_PATH"' 41932 is wrong. 41933 41934 -- Macro: TARGET_POSIX_IO 41935 Define this macro if the target supports the following POSIX file 41936 functions, access, mkdir and file locking with fcntl / F_SETLKW. 41937 Defining 'TARGET_POSIX_IO' will enable the test coverage code to 41938 use file locking when exiting a program, which avoids race 41939 conditions if the program has forked. It will also create 41940 directories at run-time for cross-profiling. 41941 41942 -- Macro: MAX_CONDITIONAL_EXECUTE 41943 41944 A C expression for the maximum number of instructions to execute 41945 via conditional execution instructions instead of a branch. A 41946 value of 'BRANCH_COST'+1 is the default if the machine does not use 41947 cc0, and 1 if it does use cc0. 41948 41949 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 41950 Used if the target needs to perform machine-dependent modifications 41951 on the conditionals used for turning basic blocks into 41952 conditionally executed code. CE_INFO points to a data structure, 41953 'struct ce_if_block', which contains information about the 41954 currently processed blocks. TRUE_EXPR and FALSE_EXPR are the tests 41955 that are used for converting the then-block and the else-block, 41956 respectively. Set either TRUE_EXPR or FALSE_EXPR to a null pointer 41957 if the tests cannot be converted. 41958 41959 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 41960 FALSE_EXPR) 41961 Like 'IFCVT_MODIFY_TESTS', but used when converting more 41962 complicated if-statements into conditions combined by 'and' and 41963 'or' operations. BB contains the basic block that contains the 41964 test that is currently being processed and about to be turned into 41965 a condition. 41966 41967 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 41968 A C expression to modify the PATTERN of an INSN that is to be 41969 converted to conditional execution format. CE_INFO points to a 41970 data structure, 'struct ce_if_block', which contains information 41971 about the currently processed blocks. 41972 41973 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 41974 A C expression to perform any final machine dependent modifications 41975 in converting code to conditional execution. The involved basic 41976 blocks can be found in the 'struct ce_if_block' structure that is 41977 pointed to by CE_INFO. 41978 41979 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 41980 A C expression to cancel any machine dependent modifications in 41981 converting code to conditional execution. The involved basic 41982 blocks can be found in the 'struct ce_if_block' structure that is 41983 pointed to by CE_INFO. 41984 41985 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO) 41986 A C expression to initialize any machine specific data for 41987 if-conversion of the if-block in the 'struct ce_if_block' structure 41988 that is pointed to by CE_INFO. 41989 41990 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 41991 If non-null, this hook performs a target-specific pass over the 41992 instruction stream. The compiler will run it at all optimization 41993 levels, just before the point at which it normally does 41994 delayed-branch scheduling. 41995 41996 The exact purpose of the hook varies from target to target. Some 41997 use it to do transformations that are necessary for correctness, 41998 such as laying out in-function constant pools or avoiding hardware 41999 hazards. Others use it as an opportunity to do some 42000 machine-dependent optimizations. 42001 42002 You need not implement the hook if it has nothing to do. The 42003 default definition is null. 42004 42005 -- Target Hook: void TARGET_INIT_BUILTINS (void) 42006 Define this hook if you have any machine-specific built-in 42007 functions that need to be defined. It should be a function that 42008 performs the necessary setup. 42009 42010 Machine specific built-in functions can be useful to expand special 42011 machine instructions that would otherwise not normally be generated 42012 because they have no equivalent in the source language (for 42013 example, SIMD vector instructions or prefetch instructions). 42014 42015 To create a built-in function, call the function 42016 'lang_hooks.builtin_function' which is defined by the language 42017 front end. You can use any type nodes set up by 42018 'build_common_tree_nodes'; only language front ends that use those 42019 two functions will call 'TARGET_INIT_BUILTINS'. 42020 42021 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 42022 INITIALIZE_P) 42023 Define this hook if you have any machine-specific built-in 42024 functions that need to be defined. It should be a function that 42025 returns the builtin function declaration for the builtin function 42026 code CODE. If there is no such builtin and it cannot be 42027 initialized at this time if INITIALIZE_P is true the function 42028 should return 'NULL_TREE'. If CODE is out of range the function 42029 should return 'error_mark_node'. 42030 42031 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 42032 SUBTARGET, machine_mode MODE, int IGNORE) 42033 42034 Expand a call to a machine specific built-in function that was set 42035 up by 'TARGET_INIT_BUILTINS'. EXP is the expression for the 42036 function call; the result should go to TARGET if that is 42037 convenient, and have mode MODE if that is convenient. SUBTARGET 42038 may be used as the target for computing one of EXP's operands. 42039 IGNORE is nonzero if the value is to be ignored. This function 42040 should return the result of the call to the built-in function. 42041 42042 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 42043 LOC, tree FNDECL, void *ARGLIST) 42044 Select a replacement for a machine specific built-in function that 42045 was set up by 'TARGET_INIT_BUILTINS'. This is done _before_ 42046 regular type checking, and so allows the target to implement a 42047 crude form of function overloading. FNDECL is the declaration of 42048 the built-in function. ARGLIST is the list of arguments passed to 42049 the built-in function. The result is a complete expression that 42050 implements the operation, usually another 'CALL_EXPR'. ARGLIST 42051 really has type 'VEC(tree,gc)*' 42052 42053 -- Target Hook: bool TARGET_CHECK_BUILTIN_CALL (location_t LOC, 42054 vec<location_t> ARG_LOC, tree FNDECL, tree ORIG_FNDECL, 42055 unsigned int NARGS, tree *ARGS) 42056 Perform semantic checking on a call to a machine-specific built-in 42057 function after its arguments have been constrained to the function 42058 signature. Return true if the call is valid, otherwise report an 42059 error and return false. 42060 42061 This hook is called after 'TARGET_RESOLVE_OVERLOADED_BUILTIN'. The 42062 call was originally to built-in function ORIG_FNDECL, but after the 42063 optional 'TARGET_RESOLVE_OVERLOADED_BUILTIN' step is now to 42064 built-in function FNDECL. LOC is the location of the call and ARGS 42065 is an array of function arguments, of which there are NARGS. 42066 ARG_LOC specifies the location of each argument. 42067 42068 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree 42069 *ARGP, bool IGNORE) 42070 Fold a call to a machine specific built-in function that was set up 42071 by 'TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 42072 built-in function. N_ARGS is the number of arguments passed to the 42073 function; the arguments themselves are pointed to by ARGP. The 42074 result is another tree, valid for both GIMPLE and GENERIC, 42075 containing a simplified expression for the call's result. If 42076 IGNORE is true the value will be ignored. 42077 42078 -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator 42079 *GSI) 42080 Fold a call to a machine specific built-in function that was set up 42081 by 'TARGET_INIT_BUILTINS'. GSI points to the gimple statement 42082 holding the function call. Returns true if any change was made to 42083 the GIMPLE stream. 42084 42085 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree 42086 DECL2) 42087 This hook is used to compare the target attributes in two functions 42088 to determine which function's features get higher priority. This 42089 is used during function multi-versioning to figure out the order in 42090 which two versions must be dispatched. A function version with a 42091 higher priority is checked for dispatching earlier. DECL1 and 42092 DECL2 are the two function decls that will be compared. 42093 42094 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void 42095 *DECL) 42096 This hook is used to get the dispatcher function for a set of 42097 function versions. The dispatcher function is called to invoke the 42098 right function version at run-time. DECL is one version from a set 42099 of semantically identical versions. 42100 42101 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void 42102 *ARG) 42103 This hook is used to generate the dispatcher logic to invoke the 42104 right function version at run-time for a given set of function 42105 versions. ARG points to the callgraph node of the dispatcher 42106 function whose body must be generated. 42107 42108 -- Target Hook: bool TARGET_PREDICT_DOLOOP_P (class loop *LOOP) 42109 Return true if we can predict it is possible to use a low-overhead 42110 loop for a particular loop. The parameter LOOP is a pointer to the 42111 loop. This target hook is required only when the target supports 42112 low-overhead loops, and will help ivopts to make some decisions. 42113 The default version of this hook returns false. 42114 42115 -- Target Hook: bool TARGET_HAVE_COUNT_REG_DECR_P 42116 Return true if the target supports hardware count register for 42117 decrement and branch. The default value is false. 42118 42119 -- Target Hook: int64_t TARGET_DOLOOP_COST_FOR_GENERIC 42120 One IV candidate dedicated for doloop is introduced in IVOPTs, we 42121 can calculate the computation cost of adopting it to any generic IV 42122 use by function get_computation_cost as before. But for targets 42123 which have hardware count register support for decrement and 42124 branch, it may have to move IV value from hardware count register 42125 to general purpose register while doloop IV candidate is used for 42126 generic IV uses. It probably takes expensive penalty. This hook 42127 allows target owners to define the cost for this especially for 42128 generic IV uses. The default value is zero. 42129 42130 -- Target Hook: int64_t TARGET_DOLOOP_COST_FOR_ADDRESS 42131 One IV candidate dedicated for doloop is introduced in IVOPTs, we 42132 can calculate the computation cost of adopting it to any address IV 42133 use by function get_computation_cost as before. But for targets 42134 which have hardware count register support for decrement and 42135 branch, it may have to move IV value from hardware count register 42136 to general purpose register while doloop IV candidate is used for 42137 address IV uses. It probably takes expensive penalty. This hook 42138 allows target owners to define the cost for this escpecially for 42139 address IV uses. The default value is zero. 42140 42141 -- Target Hook: bool TARGET_CAN_USE_DOLOOP_P (const widest_int 42142 &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int 42143 LOOP_DEPTH, bool ENTERED_AT_TOP) 42144 Return true if it is possible to use low-overhead loops 42145 ('doloop_end' and 'doloop_begin') for a particular loop. 42146 ITERATIONS gives the exact number of iterations, or 0 if not known. 42147 ITERATIONS_MAX gives the maximum number of iterations, or 0 if not 42148 known. LOOP_DEPTH is the nesting depth of the loop, with 1 for 42149 innermost loops, 2 for loops that contain innermost loops, and so 42150 on. ENTERED_AT_TOP is true if the loop is only entered from the 42151 top. 42152 42153 This hook is only used if 'doloop_end' is available. The default 42154 implementation returns true. You can use 42155 'can_use_doloop_if_innermost' if the loop must be the innermost, 42156 and if there are no other restrictions. 42157 42158 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const 42159 rtx_insn *INSN) 42160 42161 Take an instruction in INSN and return NULL if it is valid within a 42162 low-overhead loop, otherwise return a string explaining why doloop 42163 could not be applied. 42164 42165 Many targets use special registers for low-overhead looping. For 42166 any instruction that clobbers these this function should return a 42167 string indicating the reason why the doloop could not be applied. 42168 By default, the RTL loop optimizer does not use a present doloop 42169 pattern for loops containing function calls or branch on table 42170 instructions. 42171 42172 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN) 42173 Take an instruction in INSN and return 'false' if the instruction 42174 is not appropriate as a combination of two or more instructions. 42175 The default is to accept all instructions. 42176 42177 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *FOLLOWER, 42178 const rtx_insn *FOLLOWEE) 42179 FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if 42180 FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. 42181 For example, on some targets, certain kinds of branches can't be 42182 made to follow through a hot/cold partitioning. 42183 42184 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 42185 This target hook returns 'true' if X is considered to be 42186 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 42187 PA doesn't consider PLUS to be commutative inside a MEM. 42188 OUTER_CODE is the rtx code of the enclosing rtl, if known, 42189 otherwise it is UNKNOWN. 42190 42191 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 42192 42193 When the initial value of a hard register has been copied in a 42194 pseudo register, it is often not necessary to actually allocate 42195 another register to this pseudo register, because the original hard 42196 register or a stack slot it has been saved into can be used. 42197 'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 42198 allocation once for each hard register that had its initial value 42199 copied by using 'get_func_hard_reg_initial_val' or 42200 'get_hard_reg_initial_val'. Possible values are 'NULL_RTX', if you 42201 don't want to do any special allocation, a 'REG' rtx--that would 42202 typically be the hard register itself, if it is known not to be 42203 clobbered--or a 'MEM'. If you are returning a 'MEM', this is only 42204 a hint for the allocator; it might decide to use another register 42205 anyways. You may use 'current_function_is_leaf' or 'REG_N_SETS' in 42206 the hook to determine if the hard register in question will not be 42207 clobbered. The default value of this hook is 'NULL', which 42208 disables any special allocation. 42209 42210 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 42211 FLAGS) 42212 This target hook returns nonzero if X, an 'unspec' or 42213 'unspec_volatile' operation, might cause a trap. Targets can use 42214 this hook to enhance precision of analysis for 'unspec' and 42215 'unspec_volatile' operations. You may call 'may_trap_p_1' to 42216 analyze inner elements of X in which case FLAGS should be passed 42217 along. 42218 42219 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 42220 The compiler invokes this hook whenever it changes its current 42221 function context ('cfun'). You can define this function if the 42222 back end needs to perform any initialization or reset actions on a 42223 per-function basis. For example, it may be used to implement 42224 function attributes that affect register usage or code generation 42225 patterns. The argument DECL is the declaration for the new 42226 function context, and may be null to indicate that the compiler has 42227 left a function context and is returning to processing at the top 42228 level. The default hook function does nothing. 42229 42230 GCC sets 'cfun' to a dummy function context during initialization 42231 of some parts of the back end. The hook function is not invoked in 42232 this situation; you need not worry about the hook being invoked 42233 recursively, or when the back end is in a partially-initialized 42234 state. 'cfun' might be 'NULL' to indicate processing at top level, 42235 outside of any function scope. 42236 42237 -- Macro: TARGET_OBJECT_SUFFIX 42238 Define this macro to be a C string representing the suffix for 42239 object files on your target machine. If you do not define this 42240 macro, GCC will use '.o' as the suffix for object files. 42241 42242 -- Macro: TARGET_EXECUTABLE_SUFFIX 42243 Define this macro to be a C string representing the suffix to be 42244 automatically added to executable files on your target machine. If 42245 you do not define this macro, GCC will use the null string as the 42246 suffix for executable files. 42247 42248 -- Macro: COLLECT_EXPORT_LIST 42249 If defined, 'collect2' will scan the individual object files 42250 specified on its command line and create an export list for the 42251 linker. Define this macro for systems like AIX, where the linker 42252 discards object files that are not referenced from 'main' and uses 42253 export lists. 42254 42255 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 42256 This target hook returns 'true' past the point in which new jump 42257 instructions could be created. On machines that require a register 42258 for every jump such as the SHmedia ISA of SH5, this point would 42259 typically be reload, so this target hook should be defined to a 42260 function such as: 42261 42262 static bool 42263 cannot_modify_jumps_past_reload_p () 42264 { 42265 return (reload_completed || reload_in_progress); 42266 } 42267 42268 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 42269 This target hook returns true if the target supports conditional 42270 execution. This target hook is required only when the target has 42271 several different modes and they have different conditional 42272 execution capability, such as ARM. 42273 42274 -- Target Hook: rtx TARGET_GEN_CCMP_FIRST (rtx_insn **PREP_SEQ, 42275 rtx_insn **GEN_SEQ, int CODE, tree OP0, tree OP1) 42276 This function prepares to emit a comparison insn for the first 42277 compare in a sequence of conditional comparisions. It returns an 42278 appropriate comparison with 'CC' for passing to 'gen_ccmp_next' or 42279 'cbranch_optab'. The insns to prepare the compare are saved in 42280 PREP_SEQ and the compare insns are saved in GEN_SEQ. They will be 42281 emitted when all the compares in the conditional comparision are 42282 generated without error. CODE is the 'rtx_code' of the compare for 42283 OP0 and OP1. 42284 42285 -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx_insn **PREP_SEQ, rtx_insn 42286 **GEN_SEQ, rtx PREV, int CMP_CODE, tree OP0, tree OP1, int 42287 BIT_CODE) 42288 This function prepares to emit a conditional comparison within a 42289 sequence of conditional comparisons. It returns an appropriate 42290 comparison with 'CC' for passing to 'gen_ccmp_next' or 42291 'cbranch_optab'. The insns to prepare the compare are saved in 42292 PREP_SEQ and the compare insns are saved in GEN_SEQ. They will be 42293 emitted when all the compares in the conditional comparision are 42294 generated without error. The PREV expression is the result of a 42295 prior call to 'gen_ccmp_first' or 'gen_ccmp_next'. It may return 42296 'NULL' if the combination of PREV and this comparison is not 42297 supported, otherwise the result must be appropriate for passing to 42298 'gen_ccmp_next' or 'cbranch_optab'. CODE is the 'rtx_code' of the 42299 compare for OP0 and OP1. BIT_CODE is 'AND' or 'IOR', which is the 42300 op on the compares. 42301 42302 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL, 42303 class loop *LOOP) 42304 This target hook returns a new value for the number of times LOOP 42305 should be unrolled. The parameter NUNROLL is the number of times 42306 the loop is to be unrolled. The parameter LOOP is a pointer to the 42307 loop, which is going to be checked for unrolling. This target hook 42308 is required only when the target has special constraints like 42309 maximum number of memory accesses. 42310 42311 -- Macro: POWI_MAX_MULTS 42312 If defined, this macro is interpreted as a signed integer C 42313 expression that specifies the maximum number of floating point 42314 multiplications that should be emitted when expanding 42315 exponentiation by an integer constant inline. When this value is 42316 defined, exponentiation requiring more than this number of 42317 multiplications is implemented by calling the system library's 42318 'pow', 'powf' or 'powl' routines. The default value places no 42319 upper bound on the multiplication count. 42320 42321 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 42322 *IPREFIX, int STDINC) 42323 This target hook should register any extra include files for the 42324 target. The parameter STDINC indicates if normal include files are 42325 present. The parameter SYSROOT is the system root directory. The 42326 parameter IPREFIX is the prefix for the gcc directory. 42327 42328 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 42329 char *IPREFIX, int STDINC) 42330 This target hook should register any extra include files for the 42331 target before any standard headers. The parameter STDINC indicates 42332 if normal include files are present. The parameter SYSROOT is the 42333 system root directory. The parameter IPREFIX is the prefix for the 42334 gcc directory. 42335 42336 -- Macro: void TARGET_OPTF (char *PATH) 42337 This target hook should register special include paths for the 42338 target. The parameter PATH is the include to register. On Darwin 42339 systems, this is used for Framework includes, which have semantics 42340 that are different from '-I'. 42341 42342 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 42343 This target macro returns 'true' if it is safe to use a local alias 42344 for a virtual function FNDECL when constructing thunks, 'false' 42345 otherwise. By default, the macro returns 'true' for all functions, 42346 if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'), 42347 'false' otherwise, 42348 42349 -- Macro: TARGET_FORMAT_TYPES 42350 If defined, this macro is the name of a global variable containing 42351 target-specific format checking information for the '-Wformat' 42352 option. The default is to have no target-specific format checks. 42353 42354 -- Macro: TARGET_N_FORMAT_TYPES 42355 If defined, this macro is the number of entries in 42356 'TARGET_FORMAT_TYPES'. 42357 42358 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 42359 If defined, this macro is the name of a global variable containing 42360 target-specific format overrides for the '-Wformat' option. The 42361 default is to have no target-specific format overrides. If 42362 defined, 'TARGET_FORMAT_TYPES' must be defined, too. 42363 42364 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 42365 If defined, this macro specifies the number of entries in 42366 'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 42367 42368 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 42369 If defined, this macro specifies the optional initialization 42370 routine for target specific customizations of the system printf and 42371 scanf formatter settings. 42372 42373 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 42374 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 42375 If defined, this macro returns the diagnostic message when it is 42376 illegal to pass argument VAL to function FUNCDECL with prototype 42377 TYPELIST. 42378 42379 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 42380 FROMTYPE, const_tree TOTYPE) 42381 If defined, this macro returns the diagnostic message when it is 42382 invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity 42383 should be determined by the front end. 42384 42385 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 42386 const_tree TYPE) 42387 If defined, this macro returns the diagnostic message when it is 42388 invalid to apply operation OP (where unary plus is denoted by 42389 'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity 42390 should be determined by the front end. 42391 42392 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 42393 const_tree TYPE1, const_tree TYPE2) 42394 If defined, this macro returns the diagnostic message when it is 42395 invalid to apply operation OP to operands of types TYPE1 and TYPE2, 42396 or 'NULL' if validity should be determined by the front end. 42397 42398 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 42399 If defined, this target hook returns the type to which values of 42400 TYPE should be promoted when they appear in expressions, analogous 42401 to the integer promotions, or 'NULL_TREE' to use the front end's 42402 normal promotion rules. This hook is useful when there are 42403 target-specific types with special promotion rules. This is 42404 currently used only by the C and C++ front ends. 42405 42406 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 42407 If defined, this hook returns the result of converting EXPR to 42408 TYPE. It should return the converted expression, or 'NULL_TREE' to 42409 apply the front end's normal conversion rules. This hook is useful 42410 when there are target-specific types with special conversion rules. 42411 This is currently used only by the C and C++ front ends. 42412 42413 -- Target Hook: bool TARGET_VERIFY_TYPE_CONTEXT (location_t LOC, 42414 type_context_kind CONTEXT, const_tree TYPE, bool SILENT_P) 42415 If defined, this hook returns false if there is a target-specific 42416 reason why type TYPE cannot be used in the source language context 42417 described by CONTEXT. When SILENT_P is false, the hook also 42418 reports an error against LOC for invalid uses of TYPE. 42419 42420 Calls to this hook should be made through the global function 42421 'verify_type_context', which makes the SILENT_P parameter default 42422 to false and also handles 'error_mark_node'. 42423 42424 The default implementation always returns true. 42425 42426 -- Macro: OBJC_JBLEN 42427 This macro determines the size of the objective C jump buffer for 42428 the NeXT runtime. By default, OBJC_JBLEN is defined to an 42429 innocuous value. 42430 42431 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 42432 Define this macro if any target-specific attributes need to be 42433 attached to the functions in 'libgcc' that provide low-level 42434 support for call stack unwinding. It is used in declarations in 42435 'unwind-generic.h' and the associated definitions of those 42436 functions. 42437 42438 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 42439 Define this macro to update the current function stack boundary if 42440 necessary. 42441 42442 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 42443 This hook should return an rtx for Dynamic Realign Argument Pointer 42444 (DRAP) if a different argument pointer register is needed to access 42445 the function's argument list due to stack realignment. Return 42446 'NULL' if no DRAP is needed. 42447 42448 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 42449 When optimization is disabled, this hook indicates whether or not 42450 arguments should be allocated to stack slots. Normally, GCC 42451 allocates stacks slots for arguments when not optimizing in order 42452 to make debugging easier. However, when a function is declared 42453 with '__attribute__((naked))', there is no stack frame, and the 42454 compiler cannot safely move arguments from the registers in which 42455 they are passed to the stack. Therefore, this hook should return 42456 true in general, but false for naked functions. The default 42457 implementation always returns true. 42458 42459 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 42460 On some architectures it can take multiple instructions to 42461 synthesize a constant. If there is another constant already in a 42462 register that is close enough in value then it is preferable that 42463 the new constant is computed from this register using immediate 42464 addition or subtraction. We accomplish this through CSE. Besides 42465 the value of the constant we also add a lower and an upper constant 42466 anchor to the available expressions. These are then queried when 42467 encountering new constants. The anchors are computed by rounding 42468 the constant up and down to a multiple of the value of 42469 'TARGET_CONST_ANCHOR'. 'TARGET_CONST_ANCHOR' should be the maximum 42470 positive value accepted by immediate-add plus one. We currently 42471 assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2. 42472 For example, on MIPS, where add-immediate takes a 16-bit signed 42473 value, 'TARGET_CONST_ANCHOR' is set to '0x8000'. The default value 42474 is zero, which disables this optimization. 42475 42476 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void) 42477 Return the offset bitwise ored into shifted address to get 42478 corresponding Address Sanitizer shadow memory address. NULL if 42479 Address Sanitizer is not supported by the target. 42480 42481 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned 42482 HOST_WIDE_INT VAL) 42483 Validate target specific memory model mask bits. When NULL no 42484 target specific memory model bits are allowed. 42485 42486 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 42487 This value should be set if the result written by 42488 'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'. 42489 42490 -- Target Hook: bool TARGET_HAS_IFUNC_P (void) 42491 It returns true if the target supports GNU indirect functions. The 42492 support includes the assembler, linker and dynamic linker. The 42493 default value of this hook is based on target's libc. 42494 42495 -- Target Hook: unsigned int TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode 42496 MODE) 42497 If defined, this function returns an appropriate alignment in bits 42498 for an atomic object of machine_mode MODE. If 0 is returned then 42499 the default alignment for the specified mode is used. 42500 42501 -- Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *HOLD, tree 42502 *CLEAR, tree *UPDATE) 42503 ISO C11 requires atomic compound assignments that may raise 42504 floating-point exceptions to raise exceptions corresponding to the 42505 arithmetic operation whose result was successfully stored in a 42506 compare-and-exchange sequence. This requires code equivalent to 42507 calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be 42508 generated at appropriate points in the compare-and-exchange 42509 sequence. This hook should set '*HOLD' to an expression equivalent 42510 to the call to 'feholdexcept', '*CLEAR' to an expression equivalent 42511 to the call to 'feclearexcept' and '*UPDATE' to an expression 42512 equivalent to the call to 'feupdateenv'. The three expressions are 42513 'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if 42514 no code is required in a particular place. The default 42515 implementation leaves all three expressions as 'NULL_TREE'. The 42516 '__atomic_feraiseexcept' function from 'libatomic' may be of use as 42517 part of the code generated in '*UPDATE'. 42518 42519 -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree) 42520 Used when offloaded functions are seen in the compilation unit and 42521 no named sections are available. It is called once for each symbol 42522 that must be recorded in the offload function and variable table. 42523 42524 -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void) 42525 Used when writing out the list of options into an LTO file. It 42526 should translate any relevant target-specific options (such as the 42527 ABI in use) into one of the '-foffload' options that exist as a 42528 common interface to express such options. It should return a 42529 string containing these options, separated by spaces, which the 42530 caller will free. 42531 42532 -- Macro: TARGET_SUPPORTS_WIDE_INT 42533 42534 On older ports, large integers are stored in 'CONST_DOUBLE' rtl 42535 objects. Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be 42536 nonzero to indicate that large integers are stored in 42537 'CONST_WIDE_INT' rtl objects. The 'CONST_WIDE_INT' allows very 42538 large integer constants to be represented. 'CONST_DOUBLE' is 42539 limited to twice the size of the host's 'HOST_WIDE_INT' 42540 representation. 42541 42542 Converting a port mostly requires looking for the places where 42543 'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code 42544 with code that accesses 'CONST_WIDE_INT's. '"grep -i 42545 const_double"' at the port level gets you to 95% of the changes 42546 that need to be made. There are a few places that require a deeper 42547 look. 42548 42549 * There is no equivalent to 'hval' and 'lval' for 42550 'CONST_WIDE_INT's. This would be difficult to express in the 42551 md language since there are a variable number of elements. 42552 42553 Most ports only check that 'hval' is either 0 or -1 to see if 42554 the value is small. As mentioned above, this will no longer 42555 be necessary since small constants are always 'CONST_INT'. Of 42556 course there are still a few exceptions, the alpha's 42557 constraint used by the zap instruction certainly requires 42558 careful examination by C code. However, all the current code 42559 does is pass the hval and lval to C code, so evolving the c 42560 code to look at the 'CONST_WIDE_INT' is not really a large 42561 change. 42562 42563 * Because there is no standard template that ports use to 42564 materialize constants, there is likely to be some futzing that 42565 is unique to each port in this code. 42566 42567 * The rtx costs may have to be adjusted to properly account for 42568 larger constants that are represented as 'CONST_WIDE_INT'. 42569 42570 All and all it does not take long to convert ports that the 42571 maintainer is familiar with. 42572 42573 -- Target Hook: bool TARGET_HAVE_SPECULATION_SAFE_VALUE (bool ACTIVE) 42574 This hook is used to determine the level of target support for 42575 '__builtin_speculation_safe_value'. If called with an argument of 42576 false, it returns true if the target has been modified to support 42577 this builtin. If called with an argument of true, it returns true 42578 if the target requires active mitigation execution might be 42579 speculative. 42580 42581 The default implementation returns false if the target does not 42582 define a pattern named 'speculation_barrier'. Else it returns true 42583 for the first case and whether the pattern is enabled for the 42584 current compilation for the second case. 42585 42586 For targets that have no processors that can execute instructions 42587 speculatively an alternative implemenation of this hook is 42588 available: simply redefine this hook to 42589 'speculation_safe_value_not_needed' along with your other target 42590 hooks. 42591 42592 -- Target Hook: rtx TARGET_SPECULATION_SAFE_VALUE (machine_mode MODE, 42593 rtx RESULT, rtx VAL, rtx FAILVAL) 42594 This target hook can be used to generate a target-specific code 42595 sequence that implements the '__builtin_speculation_safe_value' 42596 built-in function. The function must always return VAL in RESULT 42597 in mode MODE when the cpu is not executing speculatively, but must 42598 never return that when speculating until it is known that the 42599 speculation will not be unwound. The hook supports two primary 42600 mechanisms for implementing the requirements. The first is to emit 42601 a speculation barrier which forces the processor to wait until all 42602 prior speculative operations have been resolved; the second is to 42603 use a target-specific mechanism that can track the speculation 42604 state and to return FAILVAL if it can determine that speculation 42605 must be unwound at a later time. 42606 42607 The default implementation simply copies VAL to RESULT and emits a 42608 'speculation_barrier' instruction if that is defined. 42609 42610 -- Target Hook: void TARGET_RUN_TARGET_SELFTESTS (void) 42611 If selftests are enabled, run any selftests for this target. 42612 42613 42614File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 42615 4261619 Host Configuration 42617********************* 42618 42619Most details about the machine and system on which the compiler is 42620actually running are detected by the 'configure' script. Some things 42621are impossible for 'configure' to detect; these are described in two 42622ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook 42623functions in the file specified by the OUT_HOST_HOOK_OBJ variable in 42624'config.gcc'. (The intention is that very few hosts will need a header 42625file but nearly every fully supported host will need to override some 42626hooks.) 42627 42628 If you need to define only a few macros, and they have simple 42629definitions, consider using the 'xm_defines' variable in your 42630'config.gcc' entry instead of creating a host configuration header. 42631*Note System Config::. 42632 42633* Menu: 42634 42635* Host Common:: Things every host probably needs implemented. 42636* Filesystem:: Your host cannot have the letter 'a' in filenames? 42637* Host Misc:: Rare configuration options for hosts. 42638 42639 42640File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 42641 4264219.1 Host Common 42643================ 42644 42645Some things are just not portable, even between similar operating 42646systems, and are too difficult for autoconf to detect. They get 42647implemented using hook functions in the file specified by the 42648HOST_HOOK_OBJ variable in 'config.gcc'. 42649 42650 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 42651 This host hook is used to set up handling for extra signals. The 42652 most common thing to do in this hook is to detect stack overflow. 42653 42654 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 42655 FD) 42656 This host hook returns the address of some space that is likely to 42657 be free in some subsequent invocation of the compiler. We intend 42658 to load the PCH data at this address such that the data need not be 42659 relocated. The area should be able to hold SIZE bytes. If the 42660 host uses 'mmap', FD is an open file descriptor that can be used 42661 for probing. 42662 42663 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t 42664 SIZE, int FD, size_t OFFSET) 42665 This host hook is called when a PCH file is about to be loaded. We 42666 want to load SIZE bytes from FD at OFFSET into memory at ADDRESS. 42667 The given address will be the result of a previous invocation of 42668 'HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we couldn't allocate 42669 SIZE bytes at ADDRESS. Return 0 if the memory is allocated but the 42670 data is not loaded. Return 1 if the hook has performed everything. 42671 42672 If the implementation uses reserved address space, free any 42673 reserved space beyond SIZE, regardless of the return value. If no 42674 PCH will be loaded, this hook may be called with SIZE zero, in 42675 which case all reserved address space should be freed. 42676 42677 Do not try to handle values of ADDRESS that could not have been 42678 returned by this executable; just return -1. Such values usually 42679 indicate an out-of-date PCH file (built by some other GCC 42680 executable), and such a PCH file won't work. 42681 42682 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 42683 This host hook returns the alignment required for allocating 42684 virtual memory. Usually this is the same as getpagesize, but on 42685 some hosts the alignment for reserving memory differs from the 42686 pagesize for committing memory. 42687 42688 42689File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 42690 4269119.2 Host Filesystem 42692==================== 42693 42694GCC needs to know a number of things about the semantics of the host 42695machine's filesystem. Filesystems with Unix and MS-DOS semantics are 42696automatically detected. For other systems, you can define the following 42697macros in 'xm-MACHINE.h'. 42698 42699'HAVE_DOS_BASED_FILE_SYSTEM' 42700 This macro is automatically defined by 'system.h' if the host file 42701 system obeys the semantics defined by MS-DOS instead of Unix. DOS 42702 file systems are case insensitive, file specifications may begin 42703 with a drive letter, and both forward slash and backslash ('/' and 42704 '\') are directory separators. 42705 42706'DIR_SEPARATOR' 42707'DIR_SEPARATOR_2' 42708 If defined, these macros expand to character constants specifying 42709 separators for directory names within a file specification. 42710 'system.h' will automatically give them appropriate values on Unix 42711 and MS-DOS file systems. If your file system is neither of these, 42712 define one or both appropriately in 'xm-MACHINE.h'. 42713 42714 However, operating systems like VMS, where constructing a pathname 42715 is more complicated than just stringing together directory names 42716 separated by a special character, should not define either of these 42717 macros. 42718 42719'PATH_SEPARATOR' 42720 If defined, this macro should expand to a character constant 42721 specifying the separator for elements of search paths. The default 42722 value is a colon (':'). DOS-based systems usually, but not always, 42723 use semicolon (';'). 42724 42725'VMS' 42726 Define this macro if the host system is VMS. 42727 42728'HOST_OBJECT_SUFFIX' 42729 Define this macro to be a C string representing the suffix for 42730 object files on your host machine. If you do not define this 42731 macro, GCC will use '.o' as the suffix for object files. 42732 42733'HOST_EXECUTABLE_SUFFIX' 42734 Define this macro to be a C string representing the suffix for 42735 executable files on your host machine. If you do not define this 42736 macro, GCC will use the null string as the suffix for executable 42737 files. 42738 42739'HOST_BIT_BUCKET' 42740 A pathname defined by the host operating system, which can be 42741 opened as a file and written to, but all the information written is 42742 discarded. This is commonly known as a "bit bucket" or "null 42743 device". If you do not define this macro, GCC will use '/dev/null' 42744 as the bit bucket. If the host does not support a bit bucket, 42745 define this macro to an invalid filename. 42746 42747'UPDATE_PATH_HOST_CANONICALIZE (PATH)' 42748 If defined, a C statement (sans semicolon) that performs 42749 host-dependent canonicalization when a path used in a compilation 42750 driver or preprocessor is canonicalized. PATH is a malloc-ed path 42751 to be canonicalized. If the C statement does canonicalize PATH 42752 into a different buffer, the old path should be freed and the new 42753 buffer should have been allocated with malloc. 42754 42755'DUMPFILE_FORMAT' 42756 Define this macro to be a C string representing the format to use 42757 for constructing the index part of debugging dump file names. The 42758 resultant string must fit in fifteen bytes. The full filename will 42759 be the concatenation of: the prefix of the assembler file name, the 42760 string resulting from applying this format to an index number, and 42761 a string unique to each dump file kind, e.g. 'rtl'. 42762 42763 If you do not define this macro, GCC will use '.%02d.'. You should 42764 define this macro if using the default will create an invalid file 42765 name. 42766 42767'DELETE_IF_ORDINARY' 42768 Define this macro to be a C statement (sans semicolon) that 42769 performs host-dependent removal of ordinary temp files in the 42770 compilation driver. 42771 42772 If you do not define this macro, GCC will use the default version. 42773 You should define this macro if the default version does not 42774 reliably remove the temp file as, for example, on VMS which allows 42775 multiple versions of a file. 42776 42777'HOST_LACKS_INODE_NUMBERS' 42778 Define this macro if the host filesystem does not report meaningful 42779 inode numbers in struct stat. 42780 42781 42782File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 42783 4278419.3 Host Misc 42785============== 42786 42787'FATAL_EXIT_CODE' 42788 A C expression for the status code to be returned when the compiler 42789 exits after serious errors. The default is the system-provided 42790 macro 'EXIT_FAILURE', or '1' if the system doesn't define that 42791 macro. Define this macro only if these defaults are incorrect. 42792 42793'SUCCESS_EXIT_CODE' 42794 A C expression for the status code to be returned when the compiler 42795 exits without serious errors. (Warnings are not serious errors.) 42796 The default is the system-provided macro 'EXIT_SUCCESS', or '0' if 42797 the system doesn't define that macro. Define this macro only if 42798 these defaults are incorrect. 42799 42800'USE_C_ALLOCA' 42801 Define this macro if GCC should use the C implementation of 42802 'alloca' provided by 'libiberty.a'. This only affects how some 42803 parts of the compiler itself allocate memory. It does not change 42804 code generation. 42805 42806 When GCC is built with a compiler other than itself, the C 'alloca' 42807 is always used. This is because most other implementations have 42808 serious bugs. You should define this macro only on a system where 42809 no stack-based 'alloca' can possibly work. For instance, if a 42810 system has a small limit on the size of the stack, GCC's builtin 42811 'alloca' will not work reliably. 42812 42813'COLLECT2_HOST_INITIALIZATION' 42814 If defined, a C statement (sans semicolon) that performs 42815 host-dependent initialization when 'collect2' is being initialized. 42816 42817'GCC_DRIVER_HOST_INITIALIZATION' 42818 If defined, a C statement (sans semicolon) that performs 42819 host-dependent initialization when a compilation driver is being 42820 initialized. 42821 42822'HOST_LONG_LONG_FORMAT' 42823 If defined, the string used to indicate an argument of type 'long 42824 long' to functions like 'printf'. The default value is '"ll"'. 42825 42826'HOST_LONG_FORMAT' 42827 If defined, the string used to indicate an argument of type 'long' 42828 to functions like 'printf'. The default value is '"l"'. 42829 42830'HOST_PTR_PRINTF' 42831 If defined, the string used to indicate an argument of type 'void 42832 *' to functions like 'printf'. The default value is '"%p"'. 42833 42834 In addition, if 'configure' generates an incorrect definition of any of 42835the macros in 'auto-host.h', you can override that definition in a host 42836configuration header. If you need to do this, first see if it is 42837possible to fix 'configure'. 42838 42839 42840File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 42841 4284220 Makefile Fragments 42843********************* 42844 42845When you configure GCC using the 'configure' script, it will construct 42846the file 'Makefile' from the template file 'Makefile.in'. When it does 42847this, it can incorporate makefile fragments from the 'config' directory. 42848These are used to set Makefile parameters that are not amenable to being 42849calculated by autoconf. The list of fragments to incorporate is set by 42850'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note 42851System Config::. 42852 42853 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether 42854they are relevant to configuring GCC to produce code for a particular 42855target, or to configuring GCC to run on a particular host. Here TARGET 42856and HOST are mnemonics which usually have some relationship to the 42857canonical system name, but no formal connection. 42858 42859 If these files do not exist, it means nothing needs to be added for a 42860given target or host. Most targets need a few 't-TARGET' fragments, but 42861needing 'x-HOST' fragments is rare. 42862 42863* Menu: 42864 42865* Target Fragment:: Writing 't-TARGET' files. 42866* Host Fragment:: Writing 'x-HOST' files. 42867 42868 42869File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 42870 4287120.1 Target Makefile Fragments 42872============================== 42873 42874Target makefile fragments can set these Makefile variables. 42875 42876'LIBGCC2_CFLAGS' 42877 Compiler flags to use when compiling 'libgcc2.c'. 42878 42879'LIB2FUNCS_EXTRA' 42880 A list of source file names to be compiled or assembled and 42881 inserted into 'libgcc.a'. 42882 42883'CRTSTUFF_T_CFLAGS' 42884 Special flags used when compiling 'crtstuff.c'. *Note 42885 Initialization::. 42886 42887'CRTSTUFF_T_CFLAGS_S' 42888 Special flags used when compiling 'crtstuff.c' for shared linking. 42889 Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'. 42890 *Note Initialization::. 42891 42892'MULTILIB_OPTIONS' 42893 For some targets, invoking GCC in different ways produces objects 42894 that cannot be linked together. For example, for some targets GCC 42895 produces both big and little endian code. For these targets, you 42896 must arrange for multiple versions of 'libgcc.a' to be compiled, 42897 one for each set of incompatible options. When GCC invokes the 42898 linker, it arranges to link in the right version of 'libgcc.a', 42899 based on the command line options used. 42900 42901 The 'MULTILIB_OPTIONS' macro lists the set of options for which 42902 special versions of 'libgcc.a' must be built. Write options that 42903 are mutually incompatible side by side, separated by a slash. 42904 Write options that may be used together separated by a space. The 42905 build procedure will build all combinations of compatible options. 42906 42907 For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020 42908 msoft-float', 'Makefile' will build special versions of 'libgcc.a' 42909 using the following sets of options: '-m68000', '-m68020', 42910 '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'. 42911 42912'MULTILIB_DIRNAMES' 42913 If 'MULTILIB_OPTIONS' is used, this variable specifies the 42914 directory names that should be used to hold the various libraries. 42915 Write one element in 'MULTILIB_DIRNAMES' for each element in 42916 'MULTILIB_OPTIONS'. If 'MULTILIB_DIRNAMES' is not used, the 42917 default value will be 'MULTILIB_OPTIONS', with all slashes treated 42918 as spaces. 42919 42920 'MULTILIB_DIRNAMES' describes the multilib directories using GCC 42921 conventions and is applied to directories that are part of the GCC 42922 installation. When multilib-enabled, the compiler will add a 42923 subdirectory of the form PREFIX/MULTILIB before each directory in 42924 the search path for libraries and crt files. 42925 42926 For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020 42927 msoft-float', then the default value of 'MULTILIB_DIRNAMES' is 42928 'm68000 m68020 msoft-float'. You may specify a different value if 42929 you desire a different set of directory names. 42930 42931'MULTILIB_MATCHES' 42932 Sometimes the same option may be written in two different ways. If 42933 an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about 42934 any synonyms. In that case, set 'MULTILIB_MATCHES' to a list of 42935 items of the form 'option=option' to describe all relevant 42936 synonyms. For example, 'm68000=mc68000 m68020=mc68020'. 42937 42938'MULTILIB_EXCEPTIONS' 42939 Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being 42940 specified, there are combinations that should not be built. In 42941 that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch 42942 exceptions in shell case syntax that should not be built. 42943 42944 For example the ARM processor cannot execute both hardware floating 42945 point instructions and the reduced size THUMB instructions at the 42946 same time, so there is no need to build libraries with both of 42947 these options enabled. Therefore 'MULTILIB_EXCEPTIONS' is set to: 42948 *mthumb/*mhard-float* 42949 42950'MULTILIB_REQUIRED' 42951 Sometimes when there are only a few combinations are required, it 42952 would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list 42953 to cover all undesired ones. In such a case, just listing all the 42954 required combinations in 'MULTILIB_REQUIRED' would be more 42955 straightforward. 42956 42957 The way to specify the entries in 'MULTILIB_REQUIRED' is same with 42958 the way used for 'MULTILIB_EXCEPTIONS', only this time what are 42959 required will be specified. Suppose there are multiple sets of 42960 'MULTILIB_OPTIONS' and only two combinations are required, one for 42961 ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, 42962 the 'MULTILIB_REQUIRED' can be set to: 42963 MULTILIB_REQUIRED = mthumb/march=armv7-m 42964 MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 42965 42966 The 'MULTILIB_REQUIRED' can be used together with 42967 'MULTILIB_EXCEPTIONS'. The option combinations generated from 42968 'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and 42969 then by 'MULTILIB_REQUIRED'. 42970 42971'MULTILIB_REUSE' 42972 Sometimes it is desirable to reuse one existing multilib for 42973 different sets of options. Such kind of reuse can minimize the 42974 number of multilib variants. And for some targets it is better to 42975 reuse an existing multilib than to fall back to default multilib 42976 when there is no corresponding multilib. This can be done by 42977 adding reuse rules to 'MULTILIB_REUSE'. 42978 42979 A reuse rule is comprised of two parts connected by equality sign. 42980 The left part is the option set used to build multilib and the 42981 right part is the option set that will reuse this multilib. Both 42982 parts should only use options specified in 'MULTILIB_OPTIONS' and 42983 the equality signs found in options name should be replaced with 42984 periods. An explicit period in the rule can be escaped by 42985 preceding it with a backslash. The order of options in the left 42986 part matters and should be same with those specified in 42987 'MULTILIB_REQUIRED' or aligned with the order in 42988 'MULTILIB_OPTIONS'. There is no such limitation for options in the 42989 right part as we don't build multilib from them. 42990 42991 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that it 42992 sets up relations between two option sets rather than two options. 42993 Here is an example to demo how we reuse libraries built in Thumb 42994 mode for applications built in ARM mode: 42995 MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r 42996 42997 Before the advent of 'MULTILIB_REUSE', GCC select multilib by 42998 comparing command line options with options used to build multilib. 42999 The 'MULTILIB_REUSE' is complementary to that way. Only when the 43000 original comparison matches nothing it will work to see if it is OK 43001 to reuse some existing multilib. 43002 43003'MULTILIB_EXTRA_OPTS' 43004 Sometimes it is desirable that when building multiple versions of 43005 'libgcc.a' certain options should always be passed on to the 43006 compiler. In that case, set 'MULTILIB_EXTRA_OPTS' to be the list 43007 of options to be used for all builds. If you set this, you should 43008 probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it. 43009 43010'MULTILIB_OSDIRNAMES' 43011 If 'MULTILIB_OPTIONS' is used, this variable specifies a list of 43012 subdirectory names, that are used to modify the search path 43013 depending on the chosen multilib. Unlike 'MULTILIB_DIRNAMES', 43014 'MULTILIB_OSDIRNAMES' describes the multilib directories using 43015 operating systems conventions, and is applied to the directories 43016 such as 'lib' or those in the 'LIBRARY_PATH' environment variable. 43017 The format is either the same as of 'MULTILIB_DIRNAMES', or a set 43018 of mappings. When it is the same as 'MULTILIB_DIRNAMES', it 43019 describes the multilib directories using operating system 43020 conventions, rather than GCC conventions. When it is a set of 43021 mappings of the form GCCDIR=OSDIR, the left side gives the GCC 43022 convention and the right gives the equivalent OS defined location. 43023 If the OSDIR part begins with a '!', GCC will not search in the 43024 non-multilib directory and use exclusively the multilib directory. 43025 Otherwise, the compiler will examine the search path for libraries 43026 and crt files twice; the first time it will add MULTILIB to each 43027 directory in the search path, the second it will not. 43028 43029 For configurations that support both multilib and multiarch, 43030 'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus 43031 subsuming 'MULTIARCH_DIRNAME'. The multiarch name is appended to 43032 each directory name, separated by a colon (e.g. 43033 '../lib32:i386-linux-gnu'). 43034 43035 Each multiarch subdirectory will be searched before the 43036 corresponding OS multilib directory, for example 43037 '/lib/i386-linux-gnu' before '/lib/../lib32'. The multiarch name 43038 will also be used to modify the system header search path, as 43039 explained for 'MULTIARCH_DIRNAME'. 43040 43041'MULTIARCH_DIRNAME' 43042 This variable specifies the multiarch name for configurations that 43043 are multiarch-enabled but not multilibbed configurations. 43044 43045 The multiarch name is used to augment the search path for 43046 libraries, crt files and system header files with additional 43047 locations. The compiler will add a multiarch subdirectory of the 43048 form PREFIX/MULTIARCH before each directory in the library and crt 43049 search path. It will also add two directories 43050 'LOCAL_INCLUDE_DIR'/MULTIARCH and 43051 'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search 43052 path, respectively before 'LOCAL_INCLUDE_DIR' and 43053 'NATIVE_SYSTEM_HEADER_DIR'. 43054 43055 'MULTIARCH_DIRNAME' is not used for configurations that support 43056 both multilib and multiarch. In that case, multiarch names are 43057 encoded in 'MULTILIB_OSDIRNAMES' instead. 43058 43059 More documentation about multiarch can be found at 43060 <https://wiki.debian.org/Multiarch>. 43061 43062'SPECS' 43063 Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since 43064 it does not affect the build of target libraries, at least not the 43065 build of the default multilib. One possible work-around is to use 43066 'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if 43067 they had been passed in the compiler driver command line. However, 43068 you don't want to be adding these options after the toolchain is 43069 installed, so you can instead tweak the 'specs' file that will be 43070 used during the toolchain build, while you still install the 43071 original, built-in 'specs'. The trick is to set 'SPECS' to some 43072 other filename (say 'specs.install'), that will then be created out 43073 of the built-in specs, and introduce a 'Makefile' rule to generate 43074 the 'specs' file that's going to be used at build time out of your 43075 'specs.install'. 43076 43077'T_CFLAGS' 43078 These are extra flags to pass to the C compiler. They are used 43079 both when building GCC, and when compiling things with the 43080 just-built GCC. This variable is deprecated and should not be 43081 used. 43082 43083 43084File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 43085 4308620.2 Host Makefile Fragments 43087============================ 43088 43089The use of 'x-HOST' fragments is discouraged. You should only use it 43090for makefile dependencies. 43091 43092 43093File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 43094 4309521 'collect2' 43096************* 43097 43098GCC uses a utility called 'collect2' on nearly all systems to arrange to 43099call various initialization functions at start time. 43100 43101 The program 'collect2' works by linking the program once and looking 43102through the linker output file for symbols with particular names 43103indicating they are constructor functions. If it finds any, it creates 43104a new temporary '.c' file containing a table of them, compiles it, and 43105links the program a second time including that file. 43106 43107 The actual calls to the constructors are carried out by a subroutine 43108called '__main', which is called (automatically) at the beginning of the 43109body of 'main' (provided 'main' was compiled with GNU CC). Calling 43110'__main' is necessary, even when compiling C code, to allow linking C 43111and C++ object code together. (If you use '-nostdlib', you get an 43112unresolved reference to '__main', since it's defined in the standard GCC 43113library. Include '-lgcc' at the end of your compiler command line to 43114resolve this reference.) 43115 43116 The program 'collect2' is installed as 'ld' in the directory where the 43117passes of the compiler are installed. When 'collect2' needs to find the 43118_real_ 'ld', it tries the following file names: 43119 43120 * a hard coded linker file name, if GCC was configured with the 43121 '--with-ld' option. 43122 43123 * 'real-ld' in the directories listed in the compiler's search 43124 directories. 43125 43126 * 'real-ld' in the directories listed in the environment variable 43127 'PATH'. 43128 43129 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 43130 if specified. 43131 43132 * 'ld' in the compiler's search directories, except that 'collect2' 43133 will not execute itself recursively. 43134 43135 * 'ld' in 'PATH'. 43136 43137 "The compiler's search directories" means all the directories where 43138'gcc' searches for passes of the compiler. This includes directories 43139that you specify with '-B'. 43140 43141 Cross-compilers search a little differently: 43142 43143 * 'real-ld' in the compiler's search directories. 43144 43145 * 'TARGET-real-ld' in 'PATH'. 43146 43147 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 43148 if specified. 43149 43150 * 'ld' in the compiler's search directories. 43151 43152 * 'TARGET-ld' in 'PATH'. 43153 43154 'collect2' explicitly avoids running 'ld' using the file name under 43155which 'collect2' itself was invoked. In fact, it remembers up a list of 43156such names--in case one copy of 'collect2' finds another copy (or 43157version) of 'collect2' installed as 'ld' in a second place in the search 43158path. 43159 43160 'collect2' searches for the utilities 'nm' and 'strip' using the same 43161algorithm as above for 'ld'. 43162 43163 43164File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 43165 4316622 Standard Header File Directories 43167*********************************** 43168 43169'GCC_INCLUDE_DIR' means the same thing for native and cross. It is 43170where GCC stores its private include files, and also where GCC stores 43171the fixed include files. A cross compiled GCC runs 'fixincludes' on the 43172header files in '$(tooldir)/include'. (If the cross compilation header 43173files need to be fixed, they must be installed before GCC is built. If 43174the cross compilation header files are already suitable for GCC, nothing 43175special need be done). 43176 43177 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 43178is where 'g++' looks first for header files. The C++ library installs 43179only target independent header files in that directory. 43180 43181 'LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 43182install anything there. It is normally '/usr/local/include'. This is 43183where local additions to a packaged system should place header files. 43184 43185 'CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 43186install anything there. 43187 43188 'TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 43189the place for other packages to install header files that GCC will use. 43190For a cross-compiler, this is the equivalent of '/usr/include'. When 43191you build a cross-compiler, 'fixincludes' processes any header files in 43192this directory. 43193 43194 43195File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 43196 4319723 Memory Management and Type Information 43198***************************************** 43199 43200GCC uses some fairly sophisticated memory management techniques, which 43201involve determining information about GCC's data structures from GCC's 43202source code and using this information to perform garbage collection and 43203implement precompiled headers. 43204 43205 A full C++ parser would be too complicated for this task, so a limited 43206subset of C++ is interpreted and special markers are used to determine 43207what parts of the source to look at. All 'struct', 'union' and 43208'template' structure declarations that define data structures that are 43209allocated under control of the garbage collector must be marked. All 43210global variables that hold pointers to garbage-collected memory must 43211also be marked. Finally, all global variables that need to be saved and 43212restored by a precompiled header must be marked. (The precompiled 43213header mechanism can only save static variables if they're scalar. 43214Complex data structures must be allocated in garbage-collected memory to 43215be saved in a precompiled header.) 43216 43217 The full format of a marker is 43218 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 43219but in most cases no options are needed. The outer double parentheses 43220are still necessary, though: 'GTY(())'. Markers can appear: 43221 43222 * In a structure definition, before the open brace; 43223 * In a global variable declaration, after the keyword 'static' or 43224 'extern'; and 43225 * In a structure field definition, before the name of the field. 43226 43227 Here are some examples of marking simple data structures and globals. 43228 43229 struct GTY(()) TAG 43230 { 43231 FIELDS... 43232 }; 43233 43234 typedef struct GTY(()) TAG 43235 { 43236 FIELDS... 43237 } *TYPENAME; 43238 43239 static GTY(()) struct TAG *LIST; /* points to GC memory */ 43240 static GTY(()) int COUNTER; /* save counter in a PCH */ 43241 43242 The parser understands simple typedefs such as 'typedef struct TAG 43243*NAME;' and 'typedef int NAME;'. These don't need to be marked. 43244 43245 Since 'gengtype''s understanding of C++ is limited, there are several 43246constructs and declarations that are not supported inside 43247classes/structures marked for automatic GC code generation. The 43248following C++ constructs produce a 'gengtype' error on 43249structures/classes marked for automatic GC code generation: 43250 43251 * Type definitions inside classes/structures are not supported. 43252 * Enumerations inside classes/structures are not supported. 43253 43254 If you have a class or structure using any of the above constructs, you 43255need to mark that class as 'GTY ((user))' and provide your own marking 43256routines (see section *note User GC:: for details). 43257 43258 It is always valid to include function definitions inside classes. 43259Those are always ignored by 'gengtype', as it only cares about data 43260members. 43261 43262* Menu: 43263 43264* GTY Options:: What goes inside a 'GTY(())'. 43265* Inheritance and GTY:: Adding GTY to a class hierarchy. 43266* User GC:: Adding user-provided GC marking routines. 43267* GGC Roots:: Making global variables GGC roots. 43268* Files:: How the generated files work. 43269* Invoking the garbage collector:: How to invoke the garbage collector. 43270* Troubleshooting:: When something does not work as expected. 43271 43272 43273File: gccint.info, Node: GTY Options, Next: Inheritance and GTY, Up: Type Information 43274 4327523.1 The Inside of a 'GTY(())' 43276============================== 43277 43278Sometimes the C code is not enough to fully describe the type structure. 43279Extra information can be provided with 'GTY' options and additional 43280markers. Some options take a parameter, which may be either a string or 43281a type name, depending on the parameter. If an option takes no 43282parameter, it is acceptable either to omit the parameter entirely, or to 43283provide an empty string as a parameter. For example, 'GTY ((skip))' and 43284'GTY ((skip ("")))' are equivalent. 43285 43286 When the parameter is a string, often it is a fragment of C code. Four 43287special escapes may be used in these strings, to refer to pieces of the 43288data structure being marked: 43289 43290'%h' 43291 The current structure. 43292'%1' 43293 The structure that immediately contains the current structure. 43294'%0' 43295 The outermost structure that contains the current structure. 43296'%a' 43297 A partial expression of the form '[i1][i2]...' that indexes the 43298 array item currently being marked. 43299 43300 For instance, suppose that you have a structure of the form 43301 struct A { 43302 ... 43303 }; 43304 struct B { 43305 struct A foo[12]; 43306 }; 43307and 'b' is a variable of type 'struct B'. When marking 'b.foo[11]', 43308'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to 43309'b', and '%a' would expand to '[11]'. 43310 43311 As in ordinary C, adjacent strings will be concatenated; this is 43312helpful when you have a complicated expression. 43313 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 43314 " ? TYPE_NEXT_VARIANT (&%h.generic)" 43315 " : TREE_CHAIN (&%h.generic)"))) 43316 43317 The available options are: 43318 43319'length ("EXPRESSION")' 43320 43321 There are two places the type machinery will need to be explicitly 43322 told the length of an array of non-atomic objects. The first case 43323 is when a structure ends in a variable-length array, like this: 43324 struct GTY(()) rtvec_def { 43325 int num_elem; /* number of elements */ 43326 rtx GTY ((length ("%h.num_elem"))) elem[1]; 43327 }; 43328 43329 In this case, the 'length' option is used to override the specified 43330 array length (which should usually be '1'). The parameter of the 43331 option is a fragment of C code that calculates the length. 43332 43333 The second case is when a structure or a global variable contains a 43334 pointer to an array, like this: 43335 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter; 43336 In this case, 'iter' has been allocated by writing something like 43337 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse); 43338 and the 'collapse' provides the length of the field. 43339 43340 This second use of 'length' also works on global variables, like: 43341 static GTY((length("reg_known_value_size"))) rtx *reg_known_value; 43342 43343 Note that the 'length' option is only meant for use with arrays of 43344 non-atomic objects, that is, objects that contain pointers pointing 43345 to other GTY-managed objects. For other GC-allocated arrays and 43346 strings you should use 'atomic'. 43347 43348'skip' 43349 43350 If 'skip' is applied to a field, the type machinery will ignore it. 43351 This is somewhat dangerous; the only safe use is in a union when 43352 one field really isn't ever used. 43353 43354'for_user' 43355 43356 Use this to mark types that need to be marked by user gc routines, 43357 but are not refered to in a template argument. So if you have some 43358 user gc type T1 and a non user gc type T2 you can give T2 the 43359 for_user option so that the marking functions for T1 can call non 43360 mangled functions to mark T2. 43361 43362'desc ("EXPRESSION")' 43363'tag ("CONSTANT")' 43364'default' 43365 43366 The type machinery needs to be told which field of a 'union' is 43367 currently active. This is done by giving each field a constant 43368 'tag' value, and then specifying a discriminator using 'desc'. The 43369 value of the expression given by 'desc' is compared against each 43370 'tag' value, each of which should be different. If no 'tag' is 43371 matched, the field marked with 'default' is used if there is one, 43372 otherwise no field in the union will be marked. 43373 43374 In the 'desc' option, the "current structure" is the union that it 43375 discriminates. Use '%1' to mean the structure containing it. 43376 There are no escapes available to the 'tag' option, since it is a 43377 constant. 43378 43379 For example, 43380 struct GTY(()) tree_binding 43381 { 43382 struct tree_common common; 43383 union tree_binding_u { 43384 tree GTY ((tag ("0"))) scope; 43385 struct cp_binding_level * GTY ((tag ("1"))) level; 43386 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 43387 tree value; 43388 }; 43389 43390 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 43391 'struct tree_binding *' is presumed to be 0 or 1. If 1, the type 43392 mechanism will treat the field 'level' as being present and if 0, 43393 will treat the field 'scope' as being present. 43394 43395 The 'desc' and 'tag' options can also be used for inheritance to 43396 denote which subclass an instance is. See *note Inheritance and 43397 GTY:: for more information. 43398 43399'cache' 43400 43401 When the 'cache' option is applied to a global variable 43402 gt_clear_cache is called on that variable between the mark and 43403 sweep phases of garbage collection. The gt_clear_cache function is 43404 free to mark blocks as used, or to clear pointers in the variable. 43405 43406'deletable' 43407 43408 'deletable', when applied to a global variable, indicates that when 43409 garbage collection runs, there's no need to mark anything pointed 43410 to by this variable, it can just be set to 'NULL' instead. This is 43411 used to keep a list of free structures around for re-use. 43412 43413'maybe_undef' 43414 43415 When applied to a field, 'maybe_undef' indicates that it's OK if 43416 the structure that this fields points to is never defined, so long 43417 as this field is always 'NULL'. This is used to avoid requiring 43418 backends to define certain optional structures. It doesn't work 43419 with language frontends. 43420 43421'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 43422 43423 The type machinery expects all pointers to point to the start of an 43424 object. Sometimes for abstraction purposes it's convenient to have 43425 a pointer which points inside an object. So long as it's possible 43426 to convert the original object to and from the pointer, such 43427 pointers can still be used. TYPE is the type of the original 43428 object, the TO EXPRESSION returns the pointer given the original 43429 object, and the FROM EXPRESSION returns the original object given 43430 the pointer. The pointer will be available using the '%h' escape. 43431 43432'chain_next ("EXPRESSION")' 43433'chain_prev ("EXPRESSION")' 43434'chain_circular ("EXPRESSION")' 43435 43436 It's helpful for the type machinery to know if objects are often 43437 chained together in long lists; this lets it generate code that 43438 uses less stack space by iterating along the list instead of 43439 recursing down it. 'chain_next' is an expression for the next item 43440 in the list, 'chain_prev' is an expression for the previous item. 43441 For singly linked lists, use only 'chain_next'; for doubly linked 43442 lists, use both. The machinery requires that taking the next item 43443 of the previous item gives the original item. 'chain_circular' is 43444 similar to 'chain_next', but can be used for circular single linked 43445 lists. 43446 43447'reorder ("FUNCTION NAME")' 43448 43449 Some data structures depend on the relative ordering of pointers. 43450 If the precompiled header machinery needs to change that ordering, 43451 it will call the function referenced by the 'reorder' option, 43452 before changing the pointers in the object that's pointed to by the 43453 field the option applies to. The function must take four 43454 arguments, with the signature 43455 'void *, void *, gt_pointer_operator, void *'. The first parameter 43456 is a pointer to the structure that contains the object being 43457 updated, or the object itself if there is no containing structure. 43458 The second parameter is a cookie that should be ignored. The third 43459 parameter is a routine that, given a pointer, will update it to its 43460 correct new value. The fourth parameter is a cookie that must be 43461 passed to the second parameter. 43462 43463 PCH cannot handle data structures that depend on the absolute 43464 values of pointers. 'reorder' functions can be expensive. When 43465 possible, it is better to depend on properties of the data, like an 43466 ID number or the hash of a string instead. 43467 43468'atomic' 43469 43470 The 'atomic' option can only be used with pointers. It informs the 43471 GC machinery that the memory that the pointer points to does not 43472 contain any pointers, and hence it should be treated by the GC and 43473 PCH machinery as an "atomic" block of memory that does not need to 43474 be examined when scanning memory for pointers. In particular, the 43475 machinery will not scan that memory for pointers to mark them as 43476 reachable (when marking pointers for GC) or to relocate them (when 43477 writing a PCH file). 43478 43479 The 'atomic' option differs from the 'skip' option. 'atomic' keeps 43480 the memory under Garbage Collection, but makes the GC ignore the 43481 contents of the memory. 'skip' is more drastic in that it causes 43482 the pointer and the memory to be completely ignored by the Garbage 43483 Collector. So, memory marked as 'atomic' is automatically freed 43484 when no longer reachable, while memory marked as 'skip' is not. 43485 43486 The 'atomic' option must be used with great care, because all sorts 43487 of problem can occur if used incorrectly, that is, if the memory 43488 the pointer points to does actually contain a pointer. 43489 43490 Here is an example of how to use it: 43491 struct GTY(()) my_struct { 43492 int number_of_elements; 43493 unsigned int * GTY ((atomic)) elements; 43494 }; 43495 In this case, 'elements' is a pointer under GC, and the memory it 43496 points to needs to be allocated using the Garbage Collector, and 43497 will be freed automatically by the Garbage Collector when it is no 43498 longer referenced. But the memory that the pointer points to is an 43499 array of 'unsigned int' elements, and the GC must not try to scan 43500 it to find pointers to mark or relocate, which is why it is marked 43501 with the 'atomic' option. 43502 43503 Note that, currently, global variables cannot be marked with 43504 'atomic'; only fields of a struct can. This is a known limitation. 43505 It would be useful to be able to mark global pointers with 'atomic' 43506 to make the PCH machinery aware of them so that they are saved and 43507 restored correctly to PCH files. 43508 43509'special ("NAME")' 43510 43511 The 'special' option is used to mark types that have to be dealt 43512 with by special case machinery. The parameter is the name of the 43513 special case. See 'gengtype.c' for further details. Avoid adding 43514 new special cases unless there is no other alternative. 43515 43516'user' 43517 43518 The 'user' option indicates that the code to mark structure fields 43519 is completely handled by user-provided routines. See section *note 43520 User GC:: for details on what functions need to be provided. 43521 43522 43523File: gccint.info, Node: Inheritance and GTY, Next: User GC, Prev: GTY Options, Up: Type Information 43524 4352523.2 Support for inheritance 43526============================ 43527 43528gengtype has some support for simple class hierarchies. You can use 43529this to have gengtype autogenerate marking routines, provided: 43530 43531 * There must be a concrete base class, with a discriminator 43532 expression that can be used to identify which subclass an instance 43533 is. 43534 * Only single inheritance is used. 43535 * None of the classes within the hierarchy are templates. 43536 43537 If your class hierarchy does not fit in this pattern, you must use 43538*note User GC:: instead. 43539 43540 The base class and its discriminator must be identified using the 43541"desc" option. Each concrete subclass must use the "tag" option to 43542identify which value of the discriminator it corresponds to. 43543 43544 Every class in the hierarchy must have a 'GTY(())' marker, as gengtype 43545will only attempt to parse classes that have such a marker (1). 43546 43547 class GTY((desc("%h.kind"), tag("0"))) example_base 43548 { 43549 public: 43550 int kind; 43551 tree a; 43552 }; 43553 43554 class GTY((tag("1"))) some_subclass : public example_base 43555 { 43556 public: 43557 tree b; 43558 }; 43559 43560 class GTY((tag("2"))) some_other_subclass : public example_base 43561 { 43562 public: 43563 tree c; 43564 }; 43565 43566 The generated marking routines for the above will contain a "switch" on 43567"kind", visiting all appropriate fields. For example, if kind is 2, it 43568will cast to "some_other_subclass" and visit fields a, b, and c. 43569 43570 ---------- Footnotes ---------- 43571 43572 (1) Classes lacking such a marker will not be identified as being 43573part of the hierarchy, and so the marking routines will not handle them, 43574leading to a assertion failure within the marking routines due to an 43575unknown tag value (assuming that assertions are enabled). 43576 43577 43578File: gccint.info, Node: User GC, Next: GGC Roots, Prev: Inheritance and GTY, Up: Type Information 43579 4358023.3 Support for user-provided GC marking routines 43581================================================== 43582 43583The garbage collector supports types for which no automatic marking code 43584is generated. For these types, the user is required to provide three 43585functions: one to act as a marker for garbage collection, and two 43586functions to act as marker and pointer walker for pre-compiled headers. 43587 43588 Given a structure 'struct GTY((user)) my_struct', the following 43589functions should be defined to mark 'my_struct': 43590 43591 void gt_ggc_mx (my_struct *p) 43592 { 43593 /* This marks field 'fld'. */ 43594 gt_ggc_mx (p->fld); 43595 } 43596 43597 void gt_pch_nx (my_struct *p) 43598 { 43599 /* This marks field 'fld'. */ 43600 gt_pch_nx (tp->fld); 43601 } 43602 43603 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie) 43604 { 43605 /* For every field 'fld', call the given pointer operator. */ 43606 op (&(tp->fld), cookie); 43607 } 43608 43609 In general, each marker 'M' should call 'M' for every pointer field in 43610the structure. Fields that are not allocated in GC or are not pointers 43611must be ignored. 43612 43613 For embedded lists (e.g., structures with a 'next' or 'prev' pointer), 43614the marker must follow the chain and mark every element in it. 43615 43616 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *, 43617gt_pointer_operator, void *)' are slightly different. In this case, the 43618operation 'op' must be applied to the _address_ of every pointer field. 43619 4362023.3.1 User-provided marking routines for template types 43621-------------------------------------------------------- 43622 43623When a template type 'TP' is marked with 'GTY', all instances of that 43624type are considered user-provided types. This means that the individual 43625instances of 'TP' do not need to be marked with 'GTY'. The user needs 43626to provide template functions to mark all the fields of the type. 43627 43628 The following code snippets represent all the functions that need to be 43629provided. Note that type 'TP' may reference to more than one type. In 43630these snippets, there is only one type 'T', but there could be more. 43631 43632 template<typename T> 43633 void gt_ggc_mx (TP<T> *tp) 43634 { 43635 extern void gt_ggc_mx (T&); 43636 43637 /* This marks field 'fld' of type 'T'. */ 43638 gt_ggc_mx (tp->fld); 43639 } 43640 43641 template<typename T> 43642 void gt_pch_nx (TP<T> *tp) 43643 { 43644 extern void gt_pch_nx (T&); 43645 43646 /* This marks field 'fld' of type 'T'. */ 43647 gt_pch_nx (tp->fld); 43648 } 43649 43650 template<typename T> 43651 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie) 43652 { 43653 /* For every field 'fld' of 'tp' with type 'T *', call the given 43654 pointer operator. */ 43655 op (&(tp->fld), cookie); 43656 } 43657 43658 template<typename T> 43659 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie) 43660 { 43661 extern void gt_pch_nx (T *, gt_pointer_operator, void *); 43662 43663 /* For every field 'fld' of 'tp' with type 'T', call the pointer 43664 walker for all the fields of T. */ 43665 gt_pch_nx (&(tp->fld), op, cookie); 43666 } 43667 43668 Support for user-defined types is currently limited. The following 43669restrictions apply: 43670 43671 1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'. 43672 43673 2. Type 'TP' can only have type names in its argument list. 43674 43675 3. The pointer walker functions are different for 'TP<T>' and 'TP<T 43676 *>'. In the case of 'TP<T>', references to 'T' must be handled by 43677 calling 'gt_pch_nx' (which will, in turn, walk all the pointers 43678 inside fields of 'T'). In the case of 'TP<T *>', references to 'T 43679 *' must be handled by calling the 'op' function on the address of 43680 the pointer (see the code snippets above). 43681 43682 43683File: gccint.info, Node: GGC Roots, Next: Files, Prev: User GC, Up: Type Information 43684 4368523.4 Marking Roots for the Garbage Collector 43686============================================ 43687 43688In addition to keeping track of types, the type machinery also locates 43689the global variables ("roots") that the garbage collector starts at. 43690Roots must be declared using one of the following syntaxes: 43691 43692 * 'extern GTY(([OPTIONS])) TYPE NAME;' 43693 * 'static GTY(([OPTIONS])) TYPE NAME;' 43694The syntax 43695 * 'GTY(([OPTIONS])) TYPE NAME;' 43696is _not_ accepted. There should be an 'extern' declaration of such a 43697variable in a header somewhere--mark that, not the definition. Or, if 43698the variable is only used in one file, make it 'static'. 43699 43700 43701File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 43702 4370323.5 Source Files Containing Type Information 43704============================================= 43705 43706Whenever you add 'GTY' markers to a source file that previously had 43707none, or create a new source file containing 'GTY' markers, there are 43708three things you need to do: 43709 43710 1. You need to add the file to the list of source files the type 43711 machinery scans. There are four cases: 43712 43713 a. For a back-end file, this is usually done automatically; if 43714 not, you should add it to 'target_gtfiles' in the appropriate 43715 port's entries in 'config.gcc'. 43716 43717 b. For files shared by all front ends, add the filename to the 43718 'GTFILES' variable in 'Makefile.in'. 43719 43720 c. For files that are part of one front end, add the filename to 43721 the 'gtfiles' variable defined in the appropriate 43722 'config-lang.in'. Headers should appear before non-headers in 43723 this list. 43724 43725 d. For files that are part of some but not all front ends, add 43726 the filename to the 'gtfiles' variable of _all_ the front ends 43727 that use it. 43728 43729 2. If the file was a header file, you'll need to check that it's 43730 included in the right place to be visible to the generated files. 43731 For a back-end header file, this should be done automatically. For 43732 a front-end header file, it needs to be included by the same file 43733 that includes 'gtype-LANG.h'. For other header files, it needs to 43734 be included in 'gtype-desc.c', which is a generated file, so add it 43735 to 'ifiles' in 'open_base_file' in 'gengtype.c'. 43736 43737 For source files that aren't header files, the machinery will 43738 generate a header file that should be included in the source file 43739 you just changed. The file will be called 'gt-PATH.h' where PATH 43740 is the pathname relative to the 'gcc' directory with slashes 43741 replaced by -, so for example the header file to be included in 43742 'cp/parser.c' is called 'gt-cp-parser.c'. The generated header 43743 file should be included after everything else in the source file. 43744 Don't forget to mention this file as a dependency in the 43745 'Makefile'! 43746 43747 For language frontends, there is another file that needs to be included 43748somewhere. It will be called 'gtype-LANG.h', where LANG is the name of 43749the subdirectory the language is contained in. 43750 43751 Plugins can add additional root tables. Run the 'gengtype' utility in 43752plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 43753with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H 43754file. The GCC build tree is needed to be present in that mode. 43755 43756 43757File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting, Prev: Files, Up: Type Information 43758 4375923.6 How to invoke the garbage collector 43760======================================== 43761 43762The GCC garbage collector GGC is only invoked explicitly. In contrast 43763with many other garbage collectors, it is not implicitly invoked by 43764allocation routines when a lot of memory has been consumed. So the only 43765way to have GGC reclaim storage is to call the 'ggc_collect' function 43766explicitly. This call is an expensive operation, as it may have to scan 43767the entire heap. Beware that local variables (on the GCC call stack) 43768are not followed by such an invocation (as many other garbage collectors 43769do): you should reference all your data from static or external 'GTY'-ed 43770variables, and it is advised to call 'ggc_collect' with a shallow call 43771stack. The GGC is an exact mark and sweep garbage collector (so it does 43772not scan the call stack for pointers). In practice GCC passes don't 43773often call 'ggc_collect' themselves, because it is called by the pass 43774manager between passes. 43775 43776 At the time of the 'ggc_collect' call all pointers in the GC-marked 43777structures must be valid or 'NULL'. In practice this means that there 43778should not be uninitialized pointer fields in the structures even if 43779your code never reads or writes those fields at a particular instance. 43780One way to ensure this is to use cleared versions of allocators unless 43781all the fields are initialized manually immediately after allocation. 43782 43783 43784File: gccint.info, Node: Troubleshooting, Prev: Invoking the garbage collector, Up: Type Information 43785 4378623.7 Troubleshooting the garbage collector 43787========================================== 43788 43789With the current garbage collector implementation, most issues should 43790show up as GCC compilation errors. Some of the most commonly 43791encountered issues are described below. 43792 43793 * Gengtype does not produce allocators for a 'GTY'-marked type. 43794 Gengtype checks if there is at least one possible path from GC 43795 roots to at least one instance of each type before outputting 43796 allocators. If there is no such path, the 'GTY' markers will be 43797 ignored and no allocators will be output. Solve this by making 43798 sure that there exists at least one such path. If creating it is 43799 unfeasible or raises a "code smell", consider if you really must 43800 use GC for allocating such type. 43801 43802 * Link-time errors about undefined 'gt_ggc_r_foo_bar' and 43803 similarly-named symbols. Check if your 'foo_bar' source file has 43804 '#include "gt-foo_bar.h"' as its very last line. 43805 43806 43807File: gccint.info, Node: Plugins, Next: LTO, Prev: Type Information, Up: Top 43808 4380924 Plugins 43810********** 43811 43812GCC plugins are loadable modules that provide extra features to the 43813compiler. Like GCC itself they can be distributed in source and binary 43814forms. 43815 43816 GCC plugins provide developers with a rich subset of the GCC API to 43817allow them to extend GCC as they see fit. Whether it is writing an 43818additional optimization pass, transforming code, or analyzing 43819information, plugins can be quite useful. 43820 43821* Menu: 43822 43823* Plugins loading:: How can we load plugins. 43824* Plugin API:: The APIs for plugins. 43825* Plugins pass:: How a plugin interact with the pass manager. 43826* Plugins GC:: How a plugin Interact with GCC Garbage Collector. 43827* Plugins description:: Giving information about a plugin itself. 43828* Plugins attr:: Registering custom attributes or pragmas. 43829* Plugins recording:: Recording information about pass execution. 43830* Plugins gate:: Controlling which passes are being run. 43831* Plugins tracking:: Keeping track of available passes. 43832* Plugins building:: How can we build a plugin. 43833 43834 43835File: gccint.info, Node: Plugins loading, Next: Plugin API, Up: Plugins 43836 4383724.1 Loading Plugins 43838==================== 43839 43840Plugins are supported on platforms that support '-ldl -rdynamic' as well 43841as Windows/MinGW. They are loaded by the compiler using 'dlopen' or 43842equivalent and invoked at pre-determined locations in the compilation 43843process. 43844 43845 Plugins are loaded with 43846 43847 '-fplugin=/path/to/NAME.EXT' '-fplugin-arg-NAME-KEY1[=VALUE1]' 43848 43849 Where NAME is the plugin name and EXT is the platform-specific dynamic 43850library extension. It should be 'dll' on Windows/MinGW, 'dylib' on 43851Darwin/Mac OS X, and 'so' on all other platforms. The plugin arguments 43852are parsed by GCC and passed to respective plugins as key-value pairs. 43853Multiple plugins can be invoked by specifying multiple '-fplugin' 43854arguments. 43855 43856 A plugin can be simply given by its short name (no dots or slashes). 43857When simply passing '-fplugin=NAME', the plugin is loaded from the 43858'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc 43859-print-file-name=plugin`/NAME.EXT', using backquote shell syntax to 43860query the 'plugin' directory. 43861 43862 43863File: gccint.info, Node: Plugin API, Next: Plugins pass, Prev: Plugins loading, Up: Plugins 43864 4386524.2 Plugin API 43866=============== 43867 43868Plugins are activated by the compiler at specific events as defined in 43869'gcc-plugin.h'. For each event of interest, the plugin should call 43870'register_callback' specifying the name of the event and address of the 43871callback function that will handle that event. 43872 43873 The header 'gcc-plugin.h' must be the first gcc header to be included. 43874 4387524.2.1 Plugin license check 43876--------------------------- 43877 43878Every plugin should define the global symbol 'plugin_is_GPL_compatible' 43879to assert that it has been licensed under a GPL-compatible license. If 43880this symbol does not exist, the compiler will emit a fatal error and 43881exit with the error message: 43882 43883 fatal error: plugin NAME is not licensed under a GPL-compatible license 43884 NAME: undefined symbol: plugin_is_GPL_compatible 43885 compilation terminated 43886 43887 The declared type of the symbol should be int, to match a forward 43888declaration in 'gcc-plugin.h' that suppresses C++ mangling. It does not 43889need to be in any allocated section, though. The compiler merely 43890asserts that the symbol exists in the global scope. Something like this 43891is enough: 43892 43893 int plugin_is_GPL_compatible; 43894 4389524.2.2 Plugin initialization 43896---------------------------- 43897 43898Every plugin should export a function called 'plugin_init' that is 43899called right after the plugin is loaded. This function is responsible 43900for registering all the callbacks required by the plugin and do any 43901other required initialization. 43902 43903 This function is called from 'compile_file' right before invoking the 43904parser. The arguments to 'plugin_init' are: 43905 43906 * 'plugin_info': Plugin invocation information. 43907 * 'version': GCC version. 43908 43909 The 'plugin_info' struct is defined as follows: 43910 43911 struct plugin_name_args 43912 { 43913 char *base_name; /* Short name of the plugin 43914 (filename without .so suffix). */ 43915 const char *full_name; /* Path to the plugin as specified with 43916 -fplugin=. */ 43917 int argc; /* Number of arguments specified with 43918 -fplugin-arg-.... */ 43919 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 43920 const char *version; /* Version string provided by plugin. */ 43921 const char *help; /* Help string provided by plugin. */ 43922 } 43923 43924 If initialization fails, 'plugin_init' must return a non-zero value. 43925Otherwise, it should return 0. 43926 43927 The version of the GCC compiler loading the plugin is described by the 43928following structure: 43929 43930 struct plugin_gcc_version 43931 { 43932 const char *basever; 43933 const char *datestamp; 43934 const char *devphase; 43935 const char *revision; 43936 const char *configuration_arguments; 43937 }; 43938 43939 The function 'plugin_default_version_check' takes two pointers to such 43940structure and compare them field by field. It can be used by the 43941plugin's 'plugin_init' function. 43942 43943 The version of GCC used to compile the plugin can be found in the 43944symbol 'gcc_version' defined in the header 'plugin-version.h'. The 43945recommended version check to perform looks like 43946 43947 #include "plugin-version.h" 43948 ... 43949 43950 int 43951 plugin_init (struct plugin_name_args *plugin_info, 43952 struct plugin_gcc_version *version) 43953 { 43954 if (!plugin_default_version_check (version, &gcc_version)) 43955 return 1; 43956 43957 } 43958 43959 but you can also check the individual fields if you want a less strict 43960check. 43961 4396224.2.3 Plugin callbacks 43963----------------------- 43964 43965Callback functions have the following prototype: 43966 43967 /* The prototype for a plugin callback function. 43968 gcc_data - event-specific data provided by GCC 43969 user_data - plugin-specific data provided by the plug-in. */ 43970 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 43971 43972 Callbacks can be invoked at the following pre-determined events: 43973 43974 enum plugin_event 43975 { 43976 PLUGIN_START_PARSE_FUNCTION, /* Called before parsing the body of a function. */ 43977 PLUGIN_FINISH_PARSE_FUNCTION, /* After finishing parsing a function. */ 43978 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 43979 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 43980 PLUGIN_FINISH_DECL, /* After finishing parsing a declaration. */ 43981 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 43982 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 43983 PLUGIN_FINISH, /* Called before GCC exits. */ 43984 PLUGIN_INFO, /* Information about the plugin. */ 43985 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 43986 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 43987 PLUGIN_GGC_END, /* Called at end of GGC. */ 43988 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 43989 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 43990 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 43991 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 43992 /* Called before first pass from all_passes. */ 43993 PLUGIN_ALL_PASSES_START, 43994 /* Called after last pass from all_passes. */ 43995 PLUGIN_ALL_PASSES_END, 43996 /* Called before first ipa pass. */ 43997 PLUGIN_ALL_IPA_PASSES_START, 43998 /* Called after last ipa pass. */ 43999 PLUGIN_ALL_IPA_PASSES_END, 44000 /* Allows to override pass gate decision for current_pass. */ 44001 PLUGIN_OVERRIDE_GATE, 44002 /* Called before executing a pass. */ 44003 PLUGIN_PASS_EXECUTION, 44004 /* Called before executing subpasses of a GIMPLE_PASS in 44005 execute_ipa_pass_list. */ 44006 PLUGIN_EARLY_GIMPLE_PASSES_START, 44007 /* Called after executing subpasses of a GIMPLE_PASS in 44008 execute_ipa_pass_list. */ 44009 PLUGIN_EARLY_GIMPLE_PASSES_END, 44010 /* Called when a pass is first instantiated. */ 44011 PLUGIN_NEW_PASS, 44012 /* Called when a file is #include-d or given via the #line directive. 44013 This could happen many times. The event data is the included file path, 44014 as a const char* pointer. */ 44015 PLUGIN_INCLUDE_FILE, 44016 44017 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 44018 array. */ 44019 }; 44020 44021 In addition, plugins can also look up the enumerator of a named event, 44022and / or generate new events dynamically, by calling the function 44023'get_named_event_id'. 44024 44025 To register a callback, the plugin calls 'register_callback' with the 44026arguments: 44027 44028 * 'char *name': Plugin name. 44029 * 'int event': The event code. 44030 * 'plugin_callback_func callback': The function that handles 'event'. 44031 * 'void *user_data': Pointer to plugin-specific data. 44032 44033 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and 44034PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null, 44035and the 'user_data' is specific. 44036 44037 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data 44038from GCC), plugins may register their own pragmas. Notice that pragmas 44039are not available from 'lto1', so plugins used with '-flto' option to 44040GCC during link-time optimization cannot use pragmas and do not even see 44041functions like 'c_register_pragma' or 'pragma_lex'. 44042 44043 The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC 44044data, is triggered for processing of '#include' or '#line' directives. 44045 44046 The PLUGIN_FINISH event is the last time that plugins can call GCC 44047functions, notably emit diagnostics with 'warning', 'error' etc. 44048 44049 44050File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, Up: Plugins 44051 4405224.3 Interacting with the pass manager 44053====================================== 44054 44055There needs to be a way to add/reorder/remove passes dynamically. This 44056is useful for both analysis plugins (plugging in after a certain pass 44057such as CFG or an IPA pass) and optimization plugins. 44058 44059 Basic support for inserting new passes or replacing existing passes is 44060provided. A plugin registers a new pass with GCC by calling 44061'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a 44062pointer to a 'struct register_pass_info' object defined as follows 44063 44064 enum pass_positioning_ops 44065 { 44066 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 44067 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 44068 PASS_POS_REPLACE // Replace the reference pass. 44069 }; 44070 44071 struct register_pass_info 44072 { 44073 struct opt_pass *pass; /* New pass provided by the plugin. */ 44074 const char *reference_pass_name; /* Name of the reference pass for hooking 44075 up the new pass. */ 44076 int ref_pass_instance_number; /* Insert the pass at the specified 44077 instance number of the reference pass. */ 44078 /* Do it for every instance if it is 0. */ 44079 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 44080 }; 44081 44082 44083 /* Sample plugin code that registers a new pass. */ 44084 int 44085 plugin_init (struct plugin_name_args *plugin_info, 44086 struct plugin_gcc_version *version) 44087 { 44088 struct register_pass_info pass_info; 44089 44090 ... 44091 44092 /* Code to fill in the pass_info object with new pass information. */ 44093 44094 ... 44095 44096 /* Register the new pass. */ 44097 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 44098 44099 ... 44100 } 44101 44102 44103File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins pass, Up: Plugins 44104 4410524.4 Interacting with the GCC Garbage Collector 44106=============================================== 44107 44108Some plugins may want to be informed when GGC (the GCC Garbage 44109Collector) is running. They can register callbacks for the 44110'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback 44111is called with a null 'gcc_data') to be notified of the start or end of 44112the GCC garbage collection. 44113 44114 Some plugins may need to have GGC mark additional data. This can be 44115done by registering a callback (called with a null 'gcc_data') for the 44116'PLUGIN_GGC_MARKING' event. Such callbacks can call the 'ggc_set_mark' 44117routine, preferably through the 'ggc_mark' macro (and conversely, these 44118routines should usually not be used in plugins outside of the 44119'PLUGIN_GGC_MARKING' event). Plugins that wish to hold weak references 44120to gc data may also use this event to drop weak references when the 44121object is about to be collected. The 'ggc_marked_p' function can be 44122used to tell if an object is marked, or is about to be collected. The 44123'gt_clear_cache' overloads which some types define may also be of use in 44124managing weak references. 44125 44126 Some plugins may need to add extra GGC root tables, e.g. to handle 44127their own 'GTY'-ed data. This can be done with the 44128'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 44129extra root table (of type 'struct ggc_root_tab*') as 'user_data'. 44130Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 44131generates these extra root tables. 44132 44133 You should understand the details of memory management inside GCC 44134before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'. 44135 44136 44137File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugins GC, Up: Plugins 44138 4413924.5 Giving information about a plugin 44140====================================== 44141 44142A plugin should give some information to the user about itself. This 44143uses the following structure: 44144 44145 struct plugin_info 44146 { 44147 const char *version; 44148 const char *help; 44149 }; 44150 44151 Such a structure is passed as the 'user_data' by the plugin's init 44152routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event 44153and a null callback. 44154 44155 44156File: gccint.info, Node: Plugins attr, Next: Plugins recording, Prev: Plugins description, Up: Plugins 44157 4415824.6 Registering custom attributes or pragmas 44159============================================= 44160 44161For analysis (or other) purposes it is useful to be able to add custom 44162attributes or pragmas. 44163 44164 The 'PLUGIN_ATTRIBUTES' callback is called during attribute 44165registration. Use the 'register_attribute' function to register custom 44166attributes. 44167 44168 /* Attribute handler callback */ 44169 static tree 44170 handle_user_attribute (tree *node, tree name, tree args, 44171 int flags, bool *no_add_attrs) 44172 { 44173 return NULL_TREE; 44174 } 44175 44176 /* Attribute definition */ 44177 static struct attribute_spec user_attr = 44178 { "user", 1, 1, false, false, false, false, handle_user_attribute, NULL }; 44179 44180 /* Plugin callback called during attribute registration. 44181 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 44182 */ 44183 static void 44184 register_attributes (void *event_data, void *data) 44185 { 44186 warning (0, G_("Callback to register attributes")); 44187 register_attribute (&user_attr); 44188 } 44189 44190 The PLUGIN_PRAGMAS callback is called once during pragmas registration. 44191Use the 'c_register_pragma', 'c_register_pragma_with_data', 44192'c_register_pragma_with_expansion', 44193'c_register_pragma_with_expansion_and_data' functions to register custom 44194pragmas and their handlers (which often want to call 'pragma_lex') from 44195'c-family/c-pragma.h'. 44196 44197 /* Plugin callback called during pragmas registration. Registered with 44198 register_callback (plugin_name, PLUGIN_PRAGMAS, 44199 register_my_pragma, NULL); 44200 */ 44201 static void 44202 register_my_pragma (void *event_data, void *data) 44203 { 44204 warning (0, G_("Callback to register pragmas")); 44205 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 44206 } 44207 44208 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your 44209plugin) as the "space" argument of your pragma. 44210 44211 Pragmas registered with 'c_register_pragma_with_expansion' or 44212'c_register_pragma_with_expansion_and_data' support preprocessor 44213expansions. For example: 44214 44215 #define NUMBER 10 44216 #pragma GCCPLUGIN foothreshold (NUMBER) 44217 44218 44219File: gccint.info, Node: Plugins recording, Next: Plugins gate, Prev: Plugins attr, Up: Plugins 44220 4422124.7 Recording information about pass execution 44222=============================================== 44223 44224The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 44225(the same as current_pass) as 'gcc_data' to the callback. You can also 44226inspect cfun to find out about which function this pass is executed for. 44227Note that this event will only be invoked if the gate check (if 44228applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 44229other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END', 44230'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END', 44231'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 44232'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 44233plugin(s) in order to get context for the pass execution. 44234 44235 44236File: gccint.info, Node: Plugins gate, Next: Plugins tracking, Prev: Plugins recording, Up: Plugins 44237 4423824.8 Controlling which passes are being run 44239=========================================== 44240 44241After the original gate function for a pass is called, its result - the 44242gate status - is stored as an integer. Then the event 44243'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 44244the 'gcc_data' parameter to the callback function. A nonzero value of 44245the gate status means that the pass is to be executed. You can both 44246read and write the gate status via the passed pointer. 44247 44248 44249File: gccint.info, Node: Plugins tracking, Next: Plugins building, Prev: Plugins gate, Up: Plugins 44250 4425124.9 Keeping track of available passes 44252====================================== 44253 44254When your plugin is loaded, you can inspect the various pass lists to 44255determine what passes are available. However, other plugins might add 44256new passes. Also, future changes to GCC might cause generic passes to 44257be added after plugin loading. When a pass is first added to one of the 44258pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback 44259parameter 'gcc_data' pointing to the new pass. 44260 44261 44262File: gccint.info, Node: Plugins building, Prev: Plugins tracking, Up: Plugins 44263 4426424.10 Building GCC plugins 44265========================== 44266 44267If plugins are enabled, GCC installs the headers needed to build a 44268plugin (somewhere in the installation tree, e.g. under '/usr/local'). 44269In particular a 'plugin/include' directory is installed, containing all 44270the header files needed to build plugins. 44271 44272 On most systems, you can query this 'plugin' directory by invoking 'gcc 44273-print-file-name=plugin' (replace if needed 'gcc' with the appropriate 44274program path). 44275 44276 Inside plugins, this 'plugin' directory name can be queried by calling 44277'default_plugin_dir_name ()'. 44278 44279 Plugins may know, when they are compiled, the GCC version for which 44280'plugin-version.h' is provided. The constant macros 44281'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR', 44282'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers, 44283so a plugin could ensure it is built for GCC 4.7 with 44284 #if GCCPLUGIN_VERSION != 4007 44285 #error this GCC plugin is for GCC 4.7 44286 #endif 44287 44288 The following GNU Makefile excerpt shows how to build a simple plugin: 44289 44290 HOST_GCC=g++ 44291 TARGET_GCC=gcc 44292 PLUGIN_SOURCE_FILES= plugin1.c plugin2.cc 44293 GCCPLUGINS_DIR:= $(shell $(TARGET_GCC) -print-file-name=plugin) 44294 CXXFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -fno-rtti -O2 44295 44296 plugin.so: $(PLUGIN_SOURCE_FILES) 44297 $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@ 44298 44299 A single source file plugin may be built with 'g++ -I`gcc 44300-print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.c -o 44301plugin.so', using backquote shell syntax to query the 'plugin' 44302directory. 44303 44304 Plugin support on Windows/MinGW has a number of limitations and 44305additional requirements. When building a plugin on Windows we have to 44306link an import library for the corresponding backend executable, for 44307example, 'cc1.exe', 'cc1plus.exe', etc., in order to gain access to the 44308symbols provided by GCC. This means that on Windows a plugin is 44309language-specific, for example, for C, C++, etc. If you wish to use 44310your plugin with multiple languages, then you will need to build 44311multiple plugin libraries and either instruct your users on how to load 44312the correct version or provide a compiler wrapper that does this 44313automatically. 44314 44315 Additionally, on Windows the plugin library has to export the 44316'plugin_is_GPL_compatible' and 'plugin_init' symbols. If you do not 44317wish to modify the source code of your plugin, then you can use the 44318'-Wl,--export-all-symbols' option or provide a suitable DEF file. 44319Alternatively, you can export just these two symbols by decorating them 44320with '__declspec(dllexport)', for example: 44321 44322 #ifdef _WIN32 44323 __declspec(dllexport) 44324 #endif 44325 int plugin_is_GPL_compatible; 44326 44327 #ifdef _WIN32 44328 __declspec(dllexport) 44329 #endif 44330 int plugin_init (plugin_name_args *, plugin_gcc_version *) 44331 44332 The import libraries are installed into the 'plugin' directory and 44333their names are derived by appending the '.a' extension to the backend 44334executable names, for example, 'cc1.exe.a', 'cc1plus.exe.a', etc. The 44335following command line shows how to build the single source file plugin 44336on Windows to be used with the C++ compiler: 44337 44338 g++ -I`gcc -print-file-name=plugin`/include -shared -Wl,--export-all-symbols \ 44339 -o plugin.dll plugin.c `gcc -print-file-name=plugin`/cc1plus.exe.a 44340 44341 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and 44342'gtype.state' have the same version as the GCC for which the plugin is 44343built. 44344 44345 44346File: gccint.info, Node: LTO, Next: Match and Simplify, Prev: Plugins, Up: Top 44347 4434825 Link Time Optimization 44349************************* 44350 44351Link Time Optimization (LTO) gives GCC the capability of dumping its 44352internal representation (GIMPLE) to disk, so that all the different 44353compilation units that make up a single executable can be optimized as a 44354single module. This expands the scope of inter-procedural optimizations 44355to encompass the whole program (or, rather, everything that is visible 44356at link time). 44357 44358* Menu: 44359 44360* LTO Overview:: Overview of LTO. 44361* LTO object file layout:: LTO file sections in ELF. 44362* IPA:: Using summary information in IPA passes. 44363* WHOPR:: Whole program assumptions, 44364 linker plugin and symbol visibilities. 44365* Internal flags:: Internal flags controlling 'lto1'. 44366 44367 44368File: gccint.info, Node: LTO Overview, Next: LTO object file layout, Up: LTO 44369 4437025.1 Design Overview 44371==================== 44372 44373Link time optimization is implemented as a GCC front end for a bytecode 44374representation of GIMPLE that is emitted in special sections of '.o' 44375files. Currently, LTO support is enabled in most ELF-based systems, as 44376well as darwin, cygwin and mingw systems. 44377 44378 Since GIMPLE bytecode is saved alongside final object code, object 44379files generated with LTO support are larger than regular object files. 44380This "fat" object format makes it easy to integrate LTO into existing 44381build systems, as one can, for instance, produce archives of the files. 44382Additionally, one might be able to ship one set of fat objects which 44383could be used both for development and the production of optimized 44384builds. A, perhaps surprising, side effect of this feature is that any 44385mistake in the toolchain leads to LTO information not being used (e.g. 44386an older 'libtool' calling 'ld' directly). This is both an advantage, 44387as the system is more robust, and a disadvantage, as the user is not 44388informed that the optimization has been disabled. 44389 44390 The current implementation only produces "fat" objects, effectively 44391doubling compilation time and increasing file sizes up to 5x the 44392original size. This hides the problem that some tools, such as 'ar' and 44393'nm', need to understand symbol tables of LTO sections. These tools 44394were extended to use the plugin infrastructure, and with these problems 44395solved, GCC will also support "slim" objects consisting of the 44396intermediate code alone. 44397 44398 At the highest level, LTO splits the compiler in two. The first half 44399(the "writer") produces a streaming representation of all the internal 44400data structures needed to optimize and generate code. This includes 44401declarations, types, the callgraph and the GIMPLE representation of 44402function bodies. 44403 44404 When '-flto' is given during compilation of a source file, the pass 44405manager executes all the passes in 'all_lto_gen_passes'. Currently, 44406this phase is composed of two IPA passes: 44407 44408 * 'pass_ipa_lto_gimple_out' This pass executes the function 44409 'lto_output' in 'lto-streamer-out.c', which traverses the call 44410 graph encoding every reachable declaration, type and function. 44411 This generates a memory representation of all the file sections 44412 described below. 44413 44414 * 'pass_ipa_lto_finish_out' This pass executes the function 44415 'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the 44416 memory image built in the previous pass and encodes it in the 44417 corresponding ELF file sections. 44418 44419 The second half of LTO support is the "reader". This is implemented as 44420the GCC front end 'lto1' in 'lto/lto.c'. When 'collect2' detects a link 44421set of '.o'/'.a' files with LTO information and the '-flto' is enabled, 44422it invokes 'lto1' which reads the set of files and aggregates them into 44423a single translation unit for optimization. The main entry point for 44424the reader is 'lto/lto.c':'lto_main'. 44425 4442625.1.1 LTO modes of operation 44427----------------------------- 44428 44429One of the main goals of the GCC link-time infrastructure was to allow 44430effective compilation of large programs. For this reason GCC implements 44431two link-time compilation modes. 44432 44433 1. _LTO mode_, in which the whole program is read into the compiler at 44434 link-time and optimized in a similar way as if it were a single 44435 source-level compilation unit. 44436 44437 2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs 44438 and/or a distributed compilation environment to quickly link large 44439 applications. WHOPR stands for WHOle Program optimizeR (not to be 44440 confused with the semantics of '-fwhole-program'). It partitions 44441 the aggregated callgraph from many different '.o' files and 44442 distributes the compilation of the sub-graphs to different CPUs. 44443 44444 Note that distributed compilation is not implemented yet, but since 44445 the parallelism is facilitated via generating a 'Makefile', it 44446 would be easy to implement. 44447 44448 WHOPR splits LTO into three main stages: 44449 1. Local generation (LGEN) This stage executes in parallel. Every 44450 file in the program is compiled into the intermediate language and 44451 packaged together with the local call-graph and summary 44452 information. This stage is the same for both the LTO and WHOPR 44453 compilation mode. 44454 44455 2. Whole Program Analysis (WPA) WPA is performed sequentially. The 44456 global call-graph is generated, and a global analysis procedure 44457 makes transformation decisions. The global call-graph is 44458 partitioned to facilitate parallel optimization during phase 3. 44459 The results of the WPA stage are stored into new object files which 44460 contain the partitions of program expressed in the intermediate 44461 language and the optimization decisions. 44462 44463 3. Local transformations (LTRANS) This stage executes in parallel. 44464 All the decisions made during phase 2 are implemented locally in 44465 each partitioned object file, and the final object code is 44466 generated. Optimizations which cannot be decided efficiently 44467 during the phase 2 may be performed on the local call-graph 44468 partitions. 44469 44470 WHOPR can be seen as an extension of the usual LTO mode of compilation. 44471In LTO, WPA and LTRANS are executed within a single execution of the 44472compiler, after the whole program has been read into memory. 44473 44474 When compiling in WHOPR mode, the callgraph is partitioned during the 44475WPA stage. The whole program is split into a given number of partitions 44476of roughly the same size. The compiler tries to minimize the number of 44477references which cross partition boundaries. The main advantage of 44478WHOPR is to allow the parallel execution of LTRANS stages, which are the 44479most time-consuming part of the compilation process. Additionally, it 44480avoids the need to load the whole program into memory. 44481 44482 44483File: gccint.info, Node: LTO object file layout, Next: IPA, Prev: LTO Overview, Up: LTO 44484 4448525.2 LTO file sections 44486====================== 44487 44488LTO information is stored in several ELF sections inside object files. 44489Data structures and enum codes for sections are defined in 44490'lto-streamer.h'. 44491 44492 These sections are emitted from 'lto-streamer-out.c' and mapped in all 44493at once from 'lto/lto.c':'lto_file_read'. The individual functions 44494dealing with the reading/writing of each section are described below. 44495 44496 * Command line options ('.gnu.lto_.opts') 44497 44498 This section contains the command line options used to generate the 44499 object files. This is used at link time to determine the 44500 optimization level and other settings when they are not explicitly 44501 specified at the linker command line. 44502 44503 Currently, GCC does not support combining LTO object files compiled 44504 with different set of the command line options into a single 44505 binary. At link time, the options given on the command line and 44506 the options saved on all the files in a link-time set are applied 44507 globally. No attempt is made at validating the combination of 44508 flags (other than the usual validation done by option processing). 44509 This is implemented in 'lto/lto.c':'lto_read_all_file_options'. 44510 44511 * Symbol table ('.gnu.lto_.symtab') 44512 44513 This table replaces the ELF symbol table for functions and 44514 variables represented in the LTO IL. Symbols used and exported by 44515 the optimized assembly code of "fat" objects might not match the 44516 ones used and exported by the intermediate code. This table is 44517 necessary because the intermediate code is less optimized and thus 44518 requires a separate symbol table. 44519 44520 Additionally, the binary code in the "fat" object will lack a call 44521 to a function, since the call was optimized out at compilation time 44522 after the intermediate language was streamed out. In some special 44523 cases, the same optimization may not happen during link-time 44524 optimization. This would lead to an undefined symbol if only one 44525 symbol table was used. 44526 44527 The symbol table is emitted in 44528 'lto-streamer-out.c':'produce_symtab'. 44529 44530 * Global declarations and types ('.gnu.lto_.decls') 44531 44532 This section contains an intermediate language dump of all 44533 declarations and types required to represent the callgraph, static 44534 variables and top-level debug info. 44535 44536 The contents of this section are emitted in 44537 'lto-streamer-out.c':'produce_asm_for_decls'. Types and symbols 44538 are emitted in a topological order that preserves the sharing of 44539 pointers when the file is read back in 44540 ('lto.c':'read_cgraph_and_symbols'). 44541 44542 * The callgraph ('.gnu.lto_.cgraph') 44543 44544 This section contains the basic data structure used by the GCC 44545 inter-procedural optimization infrastructure. This section stores 44546 an annotated multi-graph which represents the functions and call 44547 sites as well as the variables, aliases and top-level 'asm' 44548 statements. 44549 44550 This section is emitted in 'lto-streamer-out.c':'output_cgraph' and 44551 read in 'lto-cgraph.c':'input_cgraph'. 44552 44553 * IPA references ('.gnu.lto_.refs') 44554 44555 This section contains references between function and static 44556 variables. It is emitted by 'lto-cgraph.c':'output_refs' and read 44557 by 'lto-cgraph.c':'input_refs'. 44558 44559 * Function bodies ('.gnu.lto_.function_body.<name>') 44560 44561 This section contains function bodies in the intermediate language 44562 representation. Every function body is in a separate section to 44563 allow copying of the section independently to different object 44564 files or reading the function on demand. 44565 44566 Functions are emitted in 'lto-streamer-out.c':'output_function' and 44567 read in 'lto-streamer-in.c':'input_function'. 44568 44569 * Static variable initializers ('.gnu.lto_.vars') 44570 44571 This section contains all the symbols in the global variable pool. 44572 It is emitted by 'lto-cgraph.c':'output_varpool' and read in 44573 'lto-cgraph.c':'input_cgraph'. 44574 44575 * Summaries and optimization summaries used by IPA passes 44576 ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst' 44577 or 'reference') 44578 44579 These sections are used by IPA passes that need to emit summary 44580 information during LTO generation to be read and aggregated at link 44581 time. Each pass is responsible for implementing two pass manager 44582 hooks: one for writing the summary and another for reading it in. 44583 The format of these sections is entirely up to each individual 44584 pass. The only requirement is that the writer and reader hooks 44585 agree on the format. 44586 44587 44588File: gccint.info, Node: IPA, Next: WHOPR, Prev: LTO object file layout, Up: LTO 44589 4459025.3 Using summary information in IPA passes 44591============================================ 44592 44593Programs are represented internally as a _callgraph_ (a multi-graph 44594where nodes are functions and edges are call sites) and a _varpool_ (a 44595list of static and external variables in the program). 44596 44597 The inter-procedural optimization is organized as a sequence of 44598individual passes, which operate on the callgraph and the varpool. To 44599make the implementation of WHOPR possible, every inter-procedural 44600optimization pass is split into several stages that are executed at 44601different times during WHOPR compilation: 44602 44603 * LGEN time 44604 1. _Generate summary_ ('generate_summary' in 'struct 44605 ipa_opt_pass_d'). This stage analyzes every function body and 44606 variable initializer is examined and stores relevant 44607 information into a pass-specific data structure. 44608 44609 2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d'). 44610 This stage writes all the pass-specific information generated 44611 by 'generate_summary'. Summaries go into their own 44612 'LTO_section_*' sections that have to be declared in 44613 'lto-streamer.h':'enum lto_section_type'. A new section is 44614 created by calling 'create_output_block' and data can be 44615 written using the 'lto_output_*' routines. 44616 44617 * WPA time 44618 1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d'). 44619 This stage reads all the pass-specific information in exactly 44620 the same order that it was written by 'write_summary'. 44621 44622 2. _Execute_ ('execute' in 'struct opt_pass'). This performs 44623 inter-procedural propagation. This must be done without 44624 actual access to the individual function bodies or variable 44625 initializers. Typically, this results in a transitive closure 44626 operation over the summary information of all the nodes in the 44627 callgraph. 44628 44629 3. _Write optimization summary_ ('write_optimization_summary' in 44630 'struct ipa_opt_pass_d'). This writes the result of the 44631 inter-procedural propagation into the object file. This can 44632 use the same data structures and helper routines used in 44633 'write_summary'. 44634 44635 * LTRANS time 44636 1. _Read optimization summary_ ('read_optimization_summary' in 44637 'struct ipa_opt_pass_d'). The counterpart to 44638 'write_optimization_summary'. This reads the interprocedural 44639 optimization decisions in exactly the same format emitted by 44640 'write_optimization_summary'. 44641 44642 2. _Transform_ ('function_transform' and 'variable_transform' in 44643 'struct ipa_opt_pass_d'). The actual function bodies and 44644 variable initializers are updated based on the information 44645 passed down from the _Execute_ stage. 44646 44647 The implementation of the inter-procedural passes are shared between 44648LTO, WHOPR and classic non-LTO compilation. 44649 44650 * During the traditional file-by-file mode every pass executes its 44651 own _Generate summary_, _Execute_, and _Transform_ stages within 44652 the single execution context of the compiler. 44653 44654 * In LTO compilation mode, every pass uses _Generate summary_ and 44655 _Write summary_ stages at compilation time, while the _Read 44656 summary_, _Execute_, and _Transform_ stages are executed at link 44657 time. 44658 44659 * In WHOPR mode all stages are used. 44660 44661 To simplify development, the GCC pass manager differentiates between 44662normal inter-procedural passes (*note Regular IPA passes::), small 44663inter-procedural passes (*note Small IPA passes::) and late 44664inter-procedural passes (*note Late IPA passes::). A small or late IPA 44665pass ('SIMPLE_IPA_PASS') does everything at once and thus cannot be 44666executed during WPA in WHOPR mode. It defines only the _Execute_ stage 44667and during this stage it accesses and modifies the function bodies. 44668Such passes are useful for optimization at LGEN or LTRANS time and are 44669used, for example, to implement early optimization before writing object 44670files. The simple inter-procedural passes can also be used for easier 44671prototyping and development of a new inter-procedural pass. 44672 4467325.3.1 Virtual clones 44674--------------------- 44675 44676One of the main challenges of introducing the WHOPR compilation mode was 44677addressing the interactions between optimization passes. In LTO 44678compilation mode, the passes are executed in a sequence, each of which 44679consists of analysis (or _Generate summary_), propagation (or _Execute_) 44680and _Transform_ stages. Once the work of one pass is finished, the next 44681pass sees the updated program representation and can execute. This 44682makes the individual passes dependent on each other. 44683 44684 In WHOPR mode all passes first execute their _Generate summary_ stage. 44685Then summary writing marks the end of the LGEN stage. At WPA time, the 44686summaries are read back into memory and all passes run the _Execute_ 44687stage. Optimization summaries are streamed and sent to LTRANS, where 44688all the passes execute the _Transform_ stage. 44689 44690 Most optimization passes split naturally into analysis, propagation and 44691transformation stages. But some do not. The main problem arises when 44692one pass performs changes and the following pass gets confused by seeing 44693different callgraphs between the _Transform_ stage and the _Generate 44694summary_ or _Execute_ stage. This means that the passes are required to 44695communicate their decisions with each other. 44696 44697 To facilitate this communication, the GCC callgraph infrastructure 44698implements _virtual clones_, a method of representing the changes 44699performed by the optimization passes in the callgraph without needing to 44700update function bodies. 44701 44702 A _virtual clone_ in the callgraph is a function that has no associated 44703body, just a description of how to create its body based on a different 44704function (which itself may be a virtual clone). 44705 44706 The description of function modifications includes adjustments to the 44707function's signature (which allows, for example, removing or adding 44708function arguments), substitutions to perform on the function body, and, 44709for inlined functions, a pointer to the function that it will be inlined 44710into. 44711 44712 It is also possible to redirect any edge of the callgraph from a 44713function to its virtual clone. This implies updating of the call site 44714to adjust for the new function signature. 44715 44716 Most of the transformations performed by inter-procedural optimizations 44717can be represented via virtual clones. For instance, a constant 44718propagation pass can produce a virtual clone of the function which 44719replaces one of its arguments by a constant. The inliner can represent 44720its decisions by producing a clone of a function whose body will be 44721later integrated into a given function. 44722 44723 Using _virtual clones_, the program can be easily updated during the 44724_Execute_ stage, solving most of pass interactions problems that would 44725otherwise occur during _Transform_. 44726 44727 Virtual clones are later materialized in the LTRANS stage and turned 44728into real functions. Passes executed after the virtual clone were 44729introduced also perform their _Transform_ stage on new functions, so for 44730a pass there is no significant difference between operating on a real 44731function or a virtual clone introduced before its _Execute_ stage. 44732 44733 Optimization passes then work on virtual clones introduced before their 44734_Execute_ stage as if they were real functions. The only difference is 44735that clones are not visible during the _Generate Summary_ stage. 44736 44737 To keep function summaries updated, the callgraph interface allows an 44738optimizer to register a callback that is called every time a new clone 44739is introduced as well as when the actual function or variable is 44740generated or when a function or variable is removed. These hooks are 44741registered in the _Generate summary_ stage and allow the pass to keep 44742its information intact until the _Execute_ stage. The same hooks can 44743also be registered during the _Execute_ stage to keep the optimization 44744summaries updated for the _Transform_ stage. 44745 4474625.3.2 IPA references 44747--------------------- 44748 44749GCC represents IPA references in the callgraph. For a function or 44750variable 'A', the _IPA reference_ is a list of all locations where the 44751address of 'A' is taken and, when 'A' is a variable, a list of all 44752direct stores and reads to/from 'A'. References represent an oriented 44753multi-graph on the union of nodes of the callgraph and the varpool. See 44754'ipa-reference.c':'ipa_reference_write_optimization_summary' and 44755'ipa-reference.c':'ipa_reference_read_optimization_summary' for details. 44756 4475725.3.3 Jump functions 44758--------------------- 44759 44760Suppose that an optimization pass sees a function 'A' and it knows the 44761values of (some of) its arguments. The _jump function_ describes the 44762value of a parameter of a given function call in function 'A' based on 44763this knowledge. 44764 44765 Jump functions are used by several optimizations, such as the 44766inter-procedural constant propagation pass and the devirtualization 44767pass. The inliner also uses jump functions to perform inlining of 44768callbacks. 44769 44770 44771File: gccint.info, Node: WHOPR, Next: Internal flags, Prev: IPA, Up: LTO 44772 4477325.4 Whole program assumptions, linker plugin and symbol visibilities 44774===================================================================== 44775 44776Link-time optimization gives relatively minor benefits when used alone. 44777The problem is that propagation of inter-procedural information does not 44778work well across functions and variables that are called or referenced 44779by other compilation units (such as from a dynamically linked library). 44780We say that such functions and variables are _externally visible_. 44781 44782 To make the situation even more difficult, many applications organize 44783themselves as a set of shared libraries, and the default ELF visibility 44784rules allow one to overwrite any externally visible symbol with a 44785different symbol at runtime. This basically disables any optimizations 44786across such functions and variables, because the compiler cannot be sure 44787that the function body it is seeing is the same function body that will 44788be used at runtime. Any function or variable not declared 'static' in 44789the sources degrades the quality of inter-procedural optimization. 44790 44791 To avoid this problem the compiler must assume that it sees the whole 44792program when doing link-time optimization. Strictly speaking, the whole 44793program is rarely visible even at link-time. Standard system libraries 44794are usually linked dynamically or not provided with the link-time 44795information. In GCC, the whole program option ('-fwhole-program') 44796asserts that every function and variable defined in the current 44797compilation unit is static, except for function 'main' (note: at link 44798time, the current unit is the union of all objects compiled with LTO). 44799Since some functions and variables need to be referenced externally, for 44800example by another DSO or from an assembler file, GCC also provides the 44801function and variable attribute 'externally_visible' which can be used 44802to disable the effect of '-fwhole-program' on a specific symbol. 44803 44804 The whole program mode assumptions are slightly more complex in C++, 44805where inline functions in headers are put into _COMDAT_ sections. 44806COMDAT function and variables can be defined by multiple object files 44807and their bodies are unified at link-time and dynamic link-time. COMDAT 44808functions are changed to local only when their address is not taken and 44809thus un-sharing them with a library is not harmful. COMDAT variables 44810always remain externally visible, however for readonly variables it is 44811assumed that their initializers cannot be overwritten by a different 44812value. 44813 44814 GCC provides the function and variable attribute 'visibility' that can 44815be used to specify the visibility of externally visible symbols (or 44816alternatively an '-fdefault-visibility' command line option). ELF 44817defines the 'default', 'protected', 'hidden' and 'internal' 44818visibilities. 44819 44820 The most commonly used is visibility is 'hidden'. It specifies that 44821the symbol cannot be referenced from outside of the current shared 44822library. Unfortunately, this information cannot be used directly by the 44823link-time optimization in the compiler since the whole shared library 44824also might contain non-LTO objects and those are not visible to the 44825compiler. 44826 44827 GCC solves this problem using linker plugins. A _linker plugin_ is an 44828interface to the linker that allows an external program to claim the 44829ownership of a given object file. The linker then performs the linking 44830procedure by querying the plugin about the symbol table of the claimed 44831objects and once the linking decisions are complete, the plugin is 44832allowed to provide the final object file before the actual linking is 44833made. The linker plugin obtains the symbol resolution information which 44834specifies which symbols provided by the claimed objects are bound from 44835the rest of a binary being linked. 44836 44837 GCC is designed to be independent of the rest of the toolchain and aims 44838to support linkers without plugin support. For this reason it does not 44839use the linker plugin by default. Instead, the object files are 44840examined by 'collect2' before being passed to the linker and objects 44841found to have LTO sections are passed to 'lto1' first. This mode does 44842not work for library archives. The decision on what object files from 44843the archive are needed depends on the actual linking and thus GCC would 44844have to implement the linker itself. The resolution information is 44845missing too and thus GCC needs to make an educated guess based on 44846'-fwhole-program'. Without the linker plugin GCC also assumes that 44847symbols are declared 'hidden' and not referred by non-LTO code by 44848default. 44849 44850 44851File: gccint.info, Node: Internal flags, Prev: WHOPR, Up: LTO 44852 4485325.5 Internal flags controlling 'lto1' 44854====================================== 44855 44856The following flags are passed into 'lto1' and are not meant to be used 44857directly from the command line. 44858 44859 * -fwpa This option runs the serial part of the link-time optimizer 44860 performing the inter-procedural propagation (WPA mode). The 44861 compiler reads in summary information from all inputs and performs 44862 an analysis based on summary information only. It generates object 44863 files for subsequent runs of the link-time optimizer where 44864 individual object files are optimized using both summary 44865 information from the WPA mode and the actual function bodies. It 44866 then drives the LTRANS phase. 44867 44868 * -fltrans This option runs the link-time optimizer in the 44869 local-transformation (LTRANS) mode, which reads in output from a 44870 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 44871 optimizes an object and produces the final assembly. 44872 44873 * -fltrans-output-list=FILE This option specifies a file to which the 44874 names of LTRANS output files are written. This option is only 44875 meaningful in conjunction with '-fwpa'. 44876 44877 * -fresolution=FILE This option specifies the linker resolution file. 44878 This option is only meaningful in conjunction with '-fwpa' and as 44879 option to pass through to the LTO linker plugin. 44880 44881 44882File: gccint.info, Node: Match and Simplify, Next: Static Analyzer, Prev: LTO, Up: Top 44883 4488426 Match and Simplify 44885********************* 44886 44887The GIMPLE and GENERIC pattern matching project match-and-simplify tries 44888to address several issues. 44889 44890 1. unify expression simplifications currently spread and duplicated 44891 over separate files like fold-const.c, gimple-fold.c and builtins.c 44892 2. allow for a cheap way to implement building and simplifying 44893 non-trivial GIMPLE expressions, avoiding the need to go through 44894 building and simplifying GENERIC via fold_buildN and then 44895 gimplifying via force_gimple_operand 44896 44897 To address these the project introduces a simple domain specific 44898language to write expression simplifications from which code targeting 44899GIMPLE and GENERIC is auto-generated. The GENERIC variant follows the 44900fold_buildN API while for the GIMPLE variant and to address 2) new APIs 44901are introduced. 44902 44903* Menu: 44904 44905* GIMPLE API:: 44906* The Language:: 44907 44908 44909File: gccint.info, Node: GIMPLE API, Next: The Language, Up: Match and Simplify 44910 4491126.1 GIMPLE API 44912=============== 44913 44914 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 44915 gimple_seq *, tree (*)(tree)) 44916 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 44917 tree, gimple_seq *, tree (*)(tree)) 44918 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 44919 tree, tree, gimple_seq *, tree (*)(tree)) 44920 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 44921 tree, gimple_seq *, tree (*)(tree)) 44922 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 44923 tree, tree, gimple_seq *, tree (*)(tree)) 44924 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 44925 tree, tree, tree, gimple_seq *, tree (*)(tree)) 44926 The main GIMPLE API entry to the expression simplifications 44927 mimicing that of the GENERIC fold_{unary,binary,ternary} functions. 44928 44929 thus providing n-ary overloads for operation or function. The 44930additional arguments are a gimple_seq where built statements are 44931inserted on (if 'NULL' then simplifications requiring new statements are 44932not performed) and a valueization hook that can be used to tie 44933simplifications to a SSA lattice. 44934 44935 In addition to those APIs 'fold_stmt' is overloaded with a valueization 44936hook: 44937 44938 -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree)); 44939 44940 Ontop of these a 'fold_buildN'-like API for GIMPLE is introduced: 44941 44942 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44943 tree_code, tree, tree, tree (*valueize) (tree) = NULL); 44944 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44945 tree_code, tree, tree, tree, tree (*valueize) (tree) = NULL); 44946 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44947 tree_code, tree, tree, tree, tree, tree (*valueize) (tree) = 44948 NULL); 44949 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44950 built_in_function, tree, tree, tree (*valueize) (tree) = 44951 NULL); 44952 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44953 built_in_function, tree, tree, tree, tree (*valueize) (tree) = 44954 NULL); 44955 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 44956 built_in_function, tree, tree, tree, tree, tree (*valueize) 44957 (tree) = NULL); 44958 -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t, 44959 tree, tree); 44960 44961 which is supposed to replace 'force_gimple_operand (fold_buildN (...), 44962...)' and calls to 'fold_convert'. Overloads without the 'location_t' 44963argument exist. Built statements are inserted on the provided sequence 44964and simplification is performed using the optional valueization hook. 44965 44966 44967File: gccint.info, Node: The Language, Prev: GIMPLE API, Up: Match and Simplify 44968 4496926.2 The Language 44970================= 44971 44972The language to write expression simplifications in resembles other 44973domain-specific languages GCC uses. Thus it is lispy. Lets start with 44974an example from the match.pd file: 44975 44976 (simplify 44977 (bit_and @0 integer_all_onesp) 44978 @0) 44979 44980 This example contains all required parts of an expression 44981simplification. A simplification is wrapped inside a '(simplify ...)' 44982expression. That contains at least two operands - an expression that is 44983matched with the GIMPLE or GENERIC IL and a replacement expression that 44984is returned if the match was successful. 44985 44986 Expressions have an operator ID, 'bit_and' in this case. Expressions 44987can be lower-case tree codes with '_expr' stripped off or builtin 44988function code names in all-caps, like 'BUILT_IN_SQRT'. 44989 44990 '@n' denotes a so-called capture. It captures the operand and lets you 44991refer to it in other places of the match-and-simplify. In the above 44992example it is refered to in the replacement expression. Captures are 44993'@' followed by a number or an identifier. 44994 44995 (simplify 44996 (bit_xor @0 @0) 44997 { build_zero_cst (type); }) 44998 44999 In this example '@0' is mentioned twice which constrains the matched 45000expression to have two equal operands. Usually matches are constraint 45001to equal types. If operands may be constants and conversions are 45002involved matching by value might be preferred in which case use '@@0' to 45003denote a by value match and the specific operand you want to refer to in 45004the result part. This example also introduces operands written in C 45005code. These can be used in the expression replacements and are supposed 45006to evaluate to a tree node which has to be a valid GIMPLE operand (so 45007you cannot generate expressions in C code). 45008 45009 (simplify 45010 (trunc_mod integer_zerop@0 @1) 45011 (if (!integer_zerop (@1)) 45012 @0)) 45013 45014 Here '@0' captures the first operand of the trunc_mod expression which 45015is also predicated with 'integer_zerop'. Expression operands may be 45016either expressions, predicates or captures. Captures can be 45017unconstrained or capture expresions or predicates. 45018 45019 This example introduces an optional operand of simplify, the 45020if-expression. This condition is evaluated after the expression matched 45021in the IL and is required to evaluate to true to enable the replacement 45022expression in the second operand position. The expression operand of 45023the 'if' is a standard C expression which may contain references to 45024captures. The 'if' has an optional third operand which may contain the 45025replacement expression that is enabled when the condition evaluates to 45026false. 45027 45028 A 'if' expression can be used to specify a common condition for 45029multiple simplify patterns, avoiding the need to repeat that multiple 45030times: 45031 45032 (if (!TYPE_SATURATING (type) 45033 && !FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type)) 45034 (simplify 45035 (minus (plus @0 @1) @0) 45036 @1) 45037 (simplify 45038 (minus (minus @0 @1) @0) 45039 (negate @1))) 45040 45041 Note that 'if's in outer position do not have the optional else clause 45042but instead have multiple then clauses. 45043 45044 Ifs can be nested. 45045 45046 There exists a 'switch' expression which can be used to chain 45047conditions avoiding nesting 'if's too much: 45048 45049 (simplify 45050 (simple_comparison @0 REAL_CST@1) 45051 (switch 45052 /* a CMP (-0) -> a CMP 0 */ 45053 (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1))) 45054 (cmp @0 { build_real (TREE_TYPE (@1), dconst0); })) 45055 /* x != NaN is always true, other ops are always false. */ 45056 (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1)) 45057 && ! HONOR_SNANS (@1)) 45058 { constant_boolean_node (cmp == NE_EXPR, type); }))) 45059 45060 Is equal to 45061 45062 (simplify 45063 (simple_comparison @0 REAL_CST@1) 45064 (switch 45065 /* a CMP (-0) -> a CMP 0 */ 45066 (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1))) 45067 (cmp @0 { build_real (TREE_TYPE (@1), dconst0); }) 45068 /* x != NaN is always true, other ops are always false. */ 45069 (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1)) 45070 && ! HONOR_SNANS (@1)) 45071 { constant_boolean_node (cmp == NE_EXPR, type); })))) 45072 45073 which has the second 'if' in the else operand of the first. The 45074'switch' expression takes 'if' expressions as operands (which may not 45075have else clauses) and as a last operand a replacement expression which 45076should be enabled by default if no other condition evaluated to true. 45077 45078 Captures can also be used for capturing results of sub-expressions. 45079 45080 #if GIMPLE 45081 (simplify 45082 (pointer_plus (addr@2 @0) INTEGER_CST_P@1) 45083 (if (is_gimple_min_invariant (@2))) 45084 { 45085 poly_int64 off; 45086 tree base = get_addr_base_and_unit_offset (@0, &off); 45087 off += tree_to_uhwi (@1); 45088 /* Now with that we should be able to simply write 45089 (addr (mem_ref (addr @base) (plus @off @1))) */ 45090 build1 (ADDR_EXPR, type, 45091 build2 (MEM_REF, TREE_TYPE (TREE_TYPE (@2)), 45092 build_fold_addr_expr (base), 45093 build_int_cst (ptr_type_node, off))); 45094 }) 45095 #endif 45096 45097 In the above example, '@2' captures the result of the expression '(addr 45098@0)'. For outermost expression only its type can be captured, and the 45099keyword 'type' is reserved for this purpose. The above example also 45100gives a way to conditionalize patterns to only apply to 'GIMPLE' or 45101'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE' 45102and 'GENERIC' and using preprocessor directives. 45103 45104 (simplify 45105 (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1)) 45106 (bit_and @1 @0)) 45107 45108 Here we introduce flags on match expressions. The flag used above, 45109'c', denotes that the expression should be also matched commutated. 45110Thus the above match expression is really the following four match 45111expressions: 45112 45113 (bit_and integral_op_p@0 (bit_ior (bit_not @0) @1)) 45114 (bit_and (bit_ior (bit_not @0) @1) integral_op_p@0) 45115 (bit_and integral_op_p@0 (bit_ior @1 (bit_not @0))) 45116 (bit_and (bit_ior @1 (bit_not @0)) integral_op_p@0) 45117 45118 Usual canonicalizations you know from GENERIC expressions are applied 45119before matching, so for example constant operands always come second in 45120commutative expressions. 45121 45122 The second supported flag is 's' which tells the code generator to fail 45123the pattern if the expression marked with 's' does have more than one 45124use and the simplification results in an expression with more than one 45125operator. For example in 45126 45127 (simplify 45128 (pointer_plus (pointer_plus:s @0 @1) @3) 45129 (pointer_plus @0 (plus @1 @3))) 45130 45131 this avoids the association if '(pointer_plus @0 @1)' is used outside 45132of the matched expression and thus it would stay live and not trivially 45133removed by dead code elimination. Now consider '((x + 3) + -3)' with 45134the temporary holding '(x + 3)' used elsewhere. This simplifies down to 45135'x' which is desirable and thus flagging with 's' does not prevent the 45136transform. Now consider '((x + 3) + 1)' which simplifies to '(x + 4)'. 45137Despite being flagged with 's' the simplification will be performed. 45138The simplification of '((x + a) + 1)' to '(x + (a + 1))' will not 45139performed in this case though. 45140 45141 More features exist to avoid too much repetition. 45142 45143 (for op (plus pointer_plus minus bit_ior bit_xor) 45144 (simplify 45145 (op @0 integer_zerop) 45146 @0)) 45147 45148 A 'for' expression can be used to repeat a pattern for each operator 45149specified, substituting 'op'. 'for' can be nested and a 'for' can have 45150multiple operators to iterate. 45151 45152 (for opa (plus minus) 45153 opb (minus plus) 45154 (for opc (plus minus) 45155 (simplify... 45156 45157 In this example the pattern will be repeated four times with 'opa, opb, 45158opc' being 'plus, minus, plus'; 'plus, minus, minus'; 'minus, plus, 45159plus'; 'minus, plus, minus'. 45160 45161 To avoid repeating operator lists in 'for' you can name them via 45162 45163 (define_operator_list pmm plus minus mult) 45164 45165 and use them in 'for' operator lists where they get expanded. 45166 45167 (for opa (pmm trunc_div) 45168 (simplify... 45169 45170 So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'. 45171 45172 Using operator lists can also remove the need to explicitely write a 45173'for'. All operator list uses that appear in a 'simplify' or 'match' 45174pattern in operator positions will implicitely be added to a new 'for'. 45175For example 45176 45177 (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 45178 (define_operator_list POW BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 45179 (simplify 45180 (SQRT (POW @0 @1)) 45181 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))) 45182 45183 is the same as 45184 45185 (for SQRT (BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 45186 POW (BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 45187 (simplify 45188 (SQRT (POW @0 @1)) 45189 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); })))) 45190 45191 'for's and operator lists can include the special identifier 'null' 45192that matches nothing and can never be generated. This can be used to 45193pad an operator list so that it has a standard form, even if there isn't 45194a suitable operator for every form. 45195 45196 Another building block are 'with' expressions in the result expression 45197which nest the generated code in a new C block followed by its argument: 45198 45199 (simplify 45200 (convert (mult @0 @1)) 45201 (with { tree utype = unsigned_type_for (type); } 45202 (convert (mult (convert:utype @0) (convert:utype @1))))) 45203 45204 This allows code nested in the 'with' to refer to the declared 45205variables. In the above case we use the feature to specify the type of 45206a generated expression with the ':type' syntax where 'type' needs to be 45207an identifier that refers to the desired type. Usually the types of the 45208generated result expressions are determined from the context, but 45209sometimes like in the above case it is required that you specify them 45210explicitely. 45211 45212 As intermediate conversions are often optional there is a way to avoid 45213the need to repeat patterns both with and without such conversions. 45214Namely you can mark a conversion as being optional with a '?': 45215 45216 (simplify 45217 (eq (convert@0 @1) (convert? @2)) 45218 (eq @1 (convert @2))) 45219 45220 which will match both '(eq (convert @1) (convert @2))' and '(eq 45221(convert @1) @2)'. The optional converts are supposed to be all either 45222present or not, thus '(eq (convert? @1) (convert? @2))' will result in 45223two patterns only. If you want to match all four combinations you have 45224access to two additional conditional converts as in '(eq (convert1? @1) 45225(convert2? @2))'. 45226 45227 The support for '?' marking extends to all unary operations including 45228predicates you declare yourself with 'match'. 45229 45230 Predicates available from the GCC middle-end need to be made available 45231explicitely via 'define_predicates': 45232 45233 (define_predicates 45234 integer_onep integer_zerop integer_all_onesp) 45235 45236 You can also define predicates using the pattern matching language and 45237the 'match' form: 45238 45239 (match negate_expr_p 45240 INTEGER_CST 45241 (if (TYPE_OVERFLOW_WRAPS (type) 45242 || may_negate_without_overflow_p (t)))) 45243 (match negate_expr_p 45244 (negate @0)) 45245 45246 This shows that for 'match' expressions there is 't' available which 45247captures the outermost expression (something not possible in the 45248'simplify' context). As you can see 'match' has an identifier as first 45249operand which is how you refer to the predicate in patterns. Multiple 45250'match' for the same identifier add additional cases where the predicate 45251matches. 45252 45253 Predicates can also match an expression in which case you need to 45254provide a template specifying the identifier and where to get its 45255operands from: 45256 45257 (match (logical_inverted_value @0) 45258 (eq @0 integer_zerop)) 45259 (match (logical_inverted_value @0) 45260 (bit_not truth_valued_p@0)) 45261 45262 You can use the above predicate like 45263 45264 (simplify 45265 (bit_and @0 (logical_inverted_value @0)) 45266 { build_zero_cst (type); }) 45267 45268 Which will match a bitwise and of an operand with its logical inverted 45269value. 45270 45271 45272File: gccint.info, Node: Static Analyzer, Next: User Experience Guidelines, Prev: Match and Simplify, Up: Top 45273 4527427 Static Analyzer 45275****************** 45276 45277* Menu: 45278 45279* Analyzer Internals:: Analyzer Internals 45280* Debugging the Analyzer:: Useful debugging tips 45281 45282 45283File: gccint.info, Node: Analyzer Internals, Next: Debugging the Analyzer, Up: Static Analyzer 45284 4528527.1 Analyzer Internals 45286======================= 45287 4528827.1.1 Overview 45289--------------- 45290 45291The analyzer implementation works on the gimple-SSA representation. (I 45292chose this in the hopes of making it easy to work with LTO to do 45293whole-program analysis). 45294 45295 The implementation is read-only: it doesn't attempt to change anything, 45296just emit warnings. 45297 45298 The gimple representation can be seen using '-fdump-ipa-analyzer'. 45299 45300 First, we build a 'supergraph' which combines the callgraph and all of 45301the CFGs into a single directed graph, with both interprocedural and 45302intraprocedural edges. The nodes and edges in the supergraph are called 45303"supernodes" and "superedges", and often referred to in code as 'snodes' 45304and 'sedges'. Basic blocks in the CFGs are split at interprocedural 45305calls, so there can be more than one supernode per basic block. Most 45306statements will be in just one supernode, but a call statement can 45307appear in two supernodes: at the end of one for the call, and again at 45308the start of another for the return. 45309 45310 The supergraph can be seen using '-fdump-analyzer-supergraph'. 45311 45312 We then build an 'analysis_plan' which walks the callgraph to determine 45313which calls might be suitable for being summarized (rather than fully 45314explored) and thus in what order to explore the functions. 45315 45316 Next is the heart of the analyzer: we use a worklist to explore state 45317within the supergraph, building an "exploded graph". Nodes in the 45318exploded graph correspond to <point, state> pairs, as in "Precise 45319Interprocedural Dataflow Analysis via Graph Reachability" (Thomas Reps, 45320Susan Horwitz and Mooly Sagiv). 45321 45322 We reuse nodes for <point, state> pairs we've already seen, and avoid 45323tracking state too closely, so that (hopefully) we rapidly converge on a 45324final exploded graph, and terminate the analysis. We also bail out if 45325the number of exploded <end-of-basic-block, state> nodes gets larger 45326than a particular multiple of the total number of basic blocks (to 45327ensure termination in the face of pathological state-explosion cases, or 45328bugs). We also stop exploring a point once we hit a limit of states for 45329that point. 45330 45331 We can identify problems directly when processing a <point, state> 45332instance. For example, if we're finding the successors of 45333 45334 <point: before-stmt: "free (ptr);", 45335 state: {"ptr": freed}> 45336 45337 then we can detect a double-free of "ptr". We can then emit a path to 45338reach the problem by finding the simplest route through the graph. 45339 45340 Program points in the analysis are much more fine-grained than in the 45341CFG and supergraph, with points (and thus potentially exploded nodes) 45342for various events, including before individual statements. By default 45343the exploded graph merges multiple consecutive statements in a supernode 45344into one exploded edge to minimize the size of the exploded graph. This 45345can be suppressed via '-fanalyzer-fine-grained'. The fine-grained 45346approach seems to make things simpler and more debuggable that other 45347approaches I tried, in that each point is responsible for one thing. 45348 45349 Program points in the analysis also have a "call string" identifying 45350the stack of callsites below them, so that paths in the exploded graph 45351correspond to interprocedurally valid paths: we always return to the 45352correct call site, propagating state information accordingly. We avoid 45353infinite recursion by stopping the analysis if a callsite appears more 45354than 'analyzer-max-recursion-depth' in a callstring (defaulting to 2). 45355 4535627.1.2 Graphs 45357------------- 45358 45359Nodes and edges in the exploded graph are called "exploded nodes" and 45360"exploded edges" and often referred to in the code as 'enodes' and 45361'eedges' (especially when distinguishing them from the 'snodes' and 45362'sedges' in the supergraph). 45363 45364 Each graph numbers its nodes, giving unique identifiers - supernodes 45365are referred to throughout dumps in the form 'SN': INDEX' and exploded 45366nodes in the form 'EN: INDEX' (e.g. 'SN: 2' and 'EN:29'). 45367 45368 The supergraph can be seen using '-fdump-analyzer-supergraph-graph'. 45369 45370 The exploded graph can be seen using '-fdump-analyzer-exploded-graph' 45371and other dump options. Exploded nodes are color-coded in the .dot 45372output based on state-machine states to make it easier to see state 45373changes at a glance. 45374 4537527.1.3 State Tracking 45376--------------------- 45377 45378There's a tension between: 45379 * precision of analysis in the straight-line case, vs 45380 * exponential blow-up in the face of control flow. 45381 45382 For example, in general, given this CFG: 45383 45384 A 45385 / \ 45386 B C 45387 \ / 45388 D 45389 / \ 45390 E F 45391 \ / 45392 G 45393 45394 we want to avoid differences in state-tracking in B and C from leading 45395to blow-up. If we don't prevent state blowup, we end up with 45396exponential growth of the exploded graph like this: 45397 45398 45399 1:A 45400 / \ 45401 / \ 45402 / \ 45403 2:B 3:C 45404 | | 45405 4:D 5:D (2 exploded nodes for D) 45406 / \ / \ 45407 6:E 7:F 8:E 9:F 45408 | | | | 45409 10:G 11:G 12:G 13:G (4 exploded nodes for G) 45410 45411 Similar issues arise with loops. 45412 45413 To prevent this, we follow various approaches: 45414 45415 a. state pruning: which tries to discard state that won't be relevant 45416 later on withing the function. This can be disabled via 45417 '-fno-analyzer-state-purge'. 45418 45419 b. state merging. We can try to find the commonality between two 45420 program_state instances to make a third, simpler program_state. We 45421 have two strategies here: 45422 45423 1. the worklist keeps new nodes for the same program_point 45424 together, and tries to merge them before processing, and thus 45425 before they have successors. Hence, in the above, the two 45426 nodes for D (4 and 5) reach the front of the worklist 45427 together, and we create a node for D with the merger of the 45428 incoming states. 45429 45430 2. try merging with the state of existing enodes for the 45431 program_point (which may have already been explored). There 45432 will be duplication, but only one set of duplication; 45433 subsequent duplicates are more likely to hit the cache. In 45434 particular, (hopefully) all merger chains are finite, and so 45435 we guarantee termination. This is intended to help with 45436 loops: we ought to explore the first iteration, and then have 45437 a "subsequent iterations" exploration, which uses a state 45438 merged from that of the first, to be more abstract. 45439 45440 We avoid merging pairs of states that have state-machine 45441 differences, as these are the kinds of differences that are likely 45442 to be most interesting. So, for example, given: 45443 45444 if (condition) 45445 ptr = malloc (size); 45446 else 45447 ptr = local_buf; 45448 45449 .... do things with 'ptr' 45450 45451 if (condition) 45452 free (ptr); 45453 45454 ...etc 45455 45456 then we end up with an exploded graph that looks like this: 45457 45458 45459 if (condition) 45460 / T \ F 45461 --------- ---------- 45462 / \ 45463 ptr = malloc (size) ptr = local_buf 45464 | | 45465 copy of copy of 45466 "do things with 'ptr'" "do things with 'ptr'" 45467 with ptr: heap-allocated with ptr: stack-allocated 45468 | | 45469 if (condition) if (condition) 45470 | known to be T | known to be F 45471 free (ptr); | 45472 \ / 45473 ----------------------------- 45474 | ('ptr' is pruned, so states can be merged) 45475 etc 45476 45477 where some duplication has occurred, but only for the places where 45478 the the different paths are worth exploringly separately. 45479 45480 Merging can be disabled via '-fno-analyzer-state-merge'. 45481 4548227.1.4 Region Model 45483------------------- 45484 45485Part of the state stored at a 'exploded_node' is a 'region_model'. This 45486is an implementation of the region-based ternary model described in "A 45487Memory Model for Static Analysis of C Programs" 45488(http://lcs.ios.ac.cn/~xuzb/canalyze/memmodel.pdf) (Zhongxing Xu, Ted 45489Kremenek, and Jian Zhang). 45490 45491 A 'region_model' encapsulates a representation of the state of memory, 45492with a tree of 'region' instances, along with their associated values. 45493The representation is graph-like because values can be pointers to 45494regions. It also stores a constraint_manager, capturing relationships 45495between the values. 45496 45497 Because each node in the 'exploded_graph' has a 'region_model', and 45498each of the latter is graph-like, the 'exploded_graph' is in some ways a 45499graph of graphs. 45500 45501 Here's an example of printing a 'region_model', showing the ASCII-art 45502used to visualize the region hierarchy (colorized when printing to 45503stderr): 45504 45505 (gdb) call debug (*this) 45506 r0: {kind: 'root', parent: null, sval: null} 45507 |-stack: r1: {kind: 'stack', parent: r0, sval: sv1} 45508 | |: sval: sv1: {poisoned: uninit} 45509 | |-frame for 'test': r2: {kind: 'frame', parent: r1, sval: null, map: {'ptr_3': r3}, function: 'test', depth: 0} 45510 | | `-'ptr_3': r3: {kind: 'map', parent: r2, sval: sv3, type: 'void *', map: {}} 45511 | | |: sval: sv3: {type: 'void *', unknown} 45512 | | |: type: 'void *' 45513 | `-frame for 'calls_malloc': r4: {kind: 'frame', parent: r1, sval: null, map: {'result_3': r7, '_4': r8, '<anonymous>': r5}, function: 'calls_malloc', depth: 1} 45514 | |-'<anonymous>': r5: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}} 45515 | | |: sval: sv4: {type: 'void *', &r6} 45516 | | |: type: 'void *' 45517 | |-'result_3': r7: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}} 45518 | | |: sval: sv4: {type: 'void *', &r6} 45519 | | |: type: 'void *' 45520 | `-'_4': r8: {kind: 'map', parent: r4, sval: sv4, type: 'void *', map: {}} 45521 | |: sval: sv4: {type: 'void *', &r6} 45522 | |: type: 'void *' 45523 `-heap: r9: {kind: 'heap', parent: r0, sval: sv2} 45524 |: sval: sv2: {poisoned: uninit} 45525 `-r6: {kind: 'symbolic', parent: r9, sval: null, map: {}} 45526 svalues: 45527 sv0: {type: 'size_t', '1024'} 45528 sv1: {poisoned: uninit} 45529 sv2: {poisoned: uninit} 45530 sv3: {type: 'void *', unknown} 45531 sv4: {type: 'void *', &r6} 45532 constraint manager: 45533 equiv classes: 45534 ec0: {sv0 == '1024'} 45535 ec1: {sv4} 45536 constraints: 45537 45538 This is the state at the point of returning from 'calls_malloc' back to 45539'test' in the following: 45540 45541 void * 45542 calls_malloc (void) 45543 { 45544 void *result = malloc (1024); 45545 return result; 45546 } 45547 45548 void test (void) 45549 { 45550 void *ptr = calls_malloc (); 45551 /* etc. */ 45552 } 45553 45554 The "root" region ("r0") has a "stack" child ("r1"), with two children: 45555a frame for 'test' ("r2"), and a frame for 'calls_malloc' ("r4"). These 45556frame regions have child regions for storing their local variables. For 45557example, the return region and that of various other regions within the 45558"calls_malloc" frame all have value "sv4", a pointer to a heap-allocated 45559region "r6". Within the parent frame, 'ptr_3' has value "sv3", an 45560unknown 'void *'. 45561 4556227.1.5 Analyzer Paths 45563--------------------- 45564 45565We need to explain to the user what the problem is, and to persuade them 45566that there really is a problem. Hence having a 'diagnostic_path' isn't 45567just an incidental detail of the analyzer; it's required. 45568 45569 Paths ought to be: 45570 * interprocedurally-valid 45571 * feasible 45572 45573 Without state-merging, all paths in the exploded graph are feasible (in 45574terms of constraints being satisified). With state-merging, paths in 45575the exploded graph can be infeasible. 45576 45577 We collate warnings and only emit them for the simplest path e.g. for 45578a bug in a utility function, with lots of routes to calling it, we only 45579emit the simplest path (which could be intraprocedural, if it can be 45580reproduced without a caller). We apply a check that each duplicate 45581warning's shortest path is feasible, rejecting any warnings for which 45582the shortest path is infeasible (which could lead to false negatives). 45583 45584 We use the shortest feasible 'exploded_path' through the 45585'exploded_graph' (a list of 'exploded_edge *') to build a 45586'diagnostic_path' (a list of events for the diagnostic subsystem) - 45587specifically a 'checker_path'. 45588 45589 Having built the 'checker_path', we prune it to try to eliminate events 45590that aren't relevant, to minimize how much the user has to read. 45591 45592 After pruning, we notify each event in the path of its ID and record 45593the IDs of interesting events, allowing for events to refer to other 45594events in their descriptions. The 'pending_diagnostic' class has 45595various vfuncs to support emitting more precise descriptions, so that 45596e.g. 45597 45598 * a deref-of-unchecked-malloc diagnostic might use: 45599 returning possibly-NULL pointer to 'make_obj' from 'allocator' 45600 for a 'return_event' to make it clearer how the unchecked value 45601 moves from callee back to caller 45602 * a double-free diagnostic might use: 45603 second 'free' here; first 'free' was at (3) 45604 and a use-after-free might use 45605 use after 'free' here; memory was freed at (2) 45606 45607 At this point we can emit the diagnostic. 45608 4560927.1.6 Limitations 45610------------------ 45611 45612 * Only for C so far 45613 * The implementation of call summaries is currently very simplistic. 45614 * Lack of function pointer analysis 45615 * The constraint-handling code assumes reflexivity in some places 45616 (that values are equal to themselves), which is not the case for 45617 NaN. As a simple workaround, constraints on floating-point values 45618 are currently ignored. 45619 * The region model code creates lots of little mutable objects at 45620 each 'region_model' (and thus per 'exploded_node') rather than 45621 sharing immutable objects and having the mutable state in the 45622 'program_state' or 'region_model'. The latter approach might be 45623 more efficient, and might avoid dealing with IDs rather than 45624 pointers (which requires us to impose an ordering to get meaningful 45625 equality). 45626 * The region model code doesn't yet support 'memcpy'. At the 45627 gimple-ssa level these have been optimized to statements like this: 45628 _10 = MEM <long unsigned int> [(char * {ref-all})&c] 45629 MEM <long unsigned int> [(char * {ref-all})&d] = _10; 45630 Perhaps they could be supported via a new 'compound_svalue' type. 45631 * There are various other limitations in the region model (grep for 45632 TODO/xfail in the testsuite). 45633 * The constraint_manager's implementation of transitivity is 45634 currently too expensive to enable by default and so must be 45635 manually enabled via '-fanalyzer-transitivity'). 45636 * The checkers are currently hardcoded and don't allow for user 45637 extensibility (e.g. adding allocate/release pairs). 45638 * Although the analyzer's test suite has a proof-of-concept test case 45639 for LTO, LTO support hasn't had extensive testing. There are 45640 various lang-specific things in the analyzer that assume C rather 45641 than LTO. For example, SSA names are printed to the user in "raw" 45642 form, rather than printing the underlying variable name. 45643 45644 Some ideas for other checkers 45645 * File-descriptor-based APIs 45646 * Linux kernel internal APIs 45647 * Signal handling 45648 45649 45650File: gccint.info, Node: Debugging the Analyzer, Prev: Analyzer Internals, Up: Static Analyzer 45651 4565227.2 Debugging the Analyzer 45653=========================== 45654 4565527.2.1 Special Functions for Debugging the Analyzer 45656--------------------------------------------------- 45657 45658The analyzer recognizes various special functions by name, for use in 45659debugging the analyzer. Declarations can be seen in the testsuite in 45660'analyzer-decls.h'. None of these functions are actually implemented. 45661 45662 Add: 45663 __analyzer_break (); 45664 to the source being analyzed to trigger a breakpoint in the analyzer 45665when that source is reached. By putting a series of these in the 45666source, it's much easier to effectively step through the program state 45667as it's analyzed. 45668 45669 __analyzer_dump (); 45670 45671 will dump the copious information about the analyzer's state each time 45672it reaches the call in its traversal of the source. 45673 45674 __analyzer_dump_path (); 45675 45676 will emit a placeholder "note" diagnostic with a path to that call 45677site, if the analyzer finds a feasible path to it. 45678 45679 The builtin '__analyzer_dump_exploded_nodes' will emit a warning after 45680analysis containing information on all of the exploded nodes at that 45681program point: 45682 45683 __analyzer_dump_exploded_nodes (0); 45684 45685 will output the number of "processed" nodes, and the IDs of both 45686"processed" and "merger" nodes, such as: 45687 45688 warning: 2 processed enodes: [EN: 56, EN: 58] merger(s): [EN: 54-55, EN: 57, EN: 59] 45689 45690 With a non-zero argument 45691 45692 __analyzer_dump_exploded_nodes (1); 45693 45694 it will also dump all of the states within the "processed" nodes. 45695 45696 __analyzer_dump_region_model (); 45697 will dump the region_model's state to stderr. 45698 45699 __analyzer_eval (expr); 45700 will emit a warning with text "TRUE", FALSE" or "UNKNOWN" based on the 45701truthfulness of the argument. This is useful for writing DejaGnu tests. 45702 4570327.2.2 Other Debugging Techniques 45704--------------------------------- 45705 45706One approach when tracking down where a particular bogus state is 45707introduced into the 'exploded_graph' is to add custom code to 45708'region_model::validate'. 45709 45710 For example, this custom code (added to 'region_model::validate') 45711breaks with an assertion failure when a variable called 'ptr' acquires a 45712value that's unknown, using 'region_model::get_value_by_name' to locate 45713the variable 45714 45715 /* Find a variable matching "ptr". */ 45716 svalue_id sid = get_value_by_name ("ptr"); 45717 if (!sid.null_p ()) 45718 { 45719 svalue *sval = get_svalue (sid); 45720 gcc_assert (sval->get_kind () != SK_UNKNOWN); 45721 } 45722 45723 making it easier to investigate further in a debugger when this occurs. 45724 45725 45726File: gccint.info, Node: User Experience Guidelines, Next: Funding, Prev: Static Analyzer, Up: Top 45727 4572828 User Experience Guidelines 45729***************************** 45730 45731To borrow a slogan from Elm 45732(https://elm-lang.org/news/compilers-as-assistants), 45733 45734 *Compilers should be assistants, not adversaries.* A compiler 45735 should not just detect bugs, it should then help you understand why 45736 there is a bug. It should not berate you in a robot voice, it 45737 should give you specific hints that help you write better code. 45738 Ultimately, a compiler should make programming faster and more fun! 45739 -- _Evan Czaplicki_ 45740 45741 This chapter provides guidelines on how to implement diagnostics and 45742command-line options in ways that we hope achieve the above ideal. 45743 45744* Menu: 45745 45746* Guidelines for Diagnostics:: How to implement diagnostics. 45747* Guidelines for Options:: Guidelines for command-line options. 45748 45749 45750File: gccint.info, Node: Guidelines for Diagnostics, Next: Guidelines for Options, Up: User Experience Guidelines 45751 4575228.1 Guidelines for Diagnostics 45753=============================== 45754 4575528.1.1 Talk in terms of the user's code 45756--------------------------------------- 45757 45758Diagnostics should be worded in terms of the user's source code, and the 45759source language, rather than GCC's own implementation details. 45760 4576128.1.2 Diagnostics are actionable 45762--------------------------------- 45763 45764A good diagnostic is "actionable": it should assist the user in taking 45765action. 45766 45767 Consider what an end user will want to do when encountering a 45768diagnostic. 45769 45770 Given an error, an end user will think: "How do I fix this?" 45771 45772 Given a warning, an end user will think: 45773 45774 * "Is this a real problem?" 45775 * "Do I care?" 45776 * if they decide it's genuine: "How do I fix this?" 45777 45778 A good diagnostic provides pertinent information to allow the user to 45779easily answer the above questions. 45780 4578128.1.3 The user's attention is important 45782---------------------------------------- 45783 45784A perfect compiler would issue a warning on every aspect of the user's 45785source code that ought to be fixed, and issue no other warnings. 45786Naturally, this ideal is impossible to achieve. 45787 45788 Warnings should have a good "signal-to-noise ratio": we should have few 45789"false positives" (falsely issuing a warning when no warning is 45790warranted) and few "false negatives" (failing to issue a warning when 45791one _is_ justified). 45792 45793 Note that a false positive can mean, in practice, a warning that the 45794user doesn't agree with. Ideally a diagnostic should contain enough 45795information to allow the user to make an informed choice about whether 45796they should care (and how to fix it), but a balance must be drawn 45797against overloading the user with irrelevant data. 45798 4579928.1.4 Precision of Wording 45800--------------------------- 45801 45802Provide the user with details that allow them to identify what the 45803problem is. For example, the vaguely-worded message: 45804 45805 demo.c:1:1: warning: 'noinline' attribute ignored [-Wattributes] 45806 1 | int foo __attribute__((noinline)); 45807 | ^~~ 45808 45809doesn't tell the user why the attribute was ignored, or what kind of 45810entity the compiler thought the attribute was being applied to (the 45811source location for the diagnostic is also poor; *note discussion of 45812'input_location': input_location_example.). A better message would be: 45813 45814 demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was 45815 ignored [-Wattributes] 45816 1 | int foo __attribute__((noinline)); 45817 | ~~~ ~~~~~~~~~~~~~~~^~~~~~~~~ 45818 demo.c:1:24: note: attribute 'noinline' is only applicable to functions 45819 45820which spells out the missing information (and fixes the location 45821information, as discussed below). 45822 45823 The above example uses a note to avoid a combinatorial explosion of 45824possible messages. 45825 4582628.1.5 Try the diagnostic on real-world code 45827-------------------------------------------- 45828 45829It's worth testing a new warning on many instances of real-world code, 45830written by different people, and seeing what it complains about, and 45831what it doesn't complain about. 45832 45833 This may suggest heuristics that silence common false positives. 45834 45835 It may also suggest ways to improve the precision of the message. 45836 4583728.1.6 Make mismatches clear 45838---------------------------- 45839 45840Many diagnostics relate to a mismatch between two different places in 45841the user's source code. Examples include: 45842 * a type mismatch, where the type at a usage site does not match the 45843 type at a declaration 45844 45845 * the argument count at a call site does not match the parameter 45846 count at the declaration 45847 45848 * something is erroneously duplicated (e.g. an error, due to breaking 45849 a uniqueness requirement, or a warning, if it's suggestive of a 45850 bug) 45851 45852 * an "opened" syntactic construct (such as an open-parenthesis) is 45853 not closed 45854 45855 In each case, the diagnostic should indicate *both* pertinent locations 45856(so that the user can easily see the problem and how to fix it). 45857 45858 The standard way to do this is with a note (via 'inform'). For 45859example: 45860 45861 auto_diagnostic_group d; 45862 if (warning_at (loc, OPT_Wduplicated_cond, 45863 "duplicated %<if%> condition")) 45864 inform (EXPR_LOCATION (t), "previously used here"); 45865 45866which leads to: 45867 45868 demo.c: In function 'test': 45869 demo.c:5:17: warning: duplicated 'if' condition [-Wduplicated-cond] 45870 5 | else if (flag > 3) 45871 | ~~~~~^~~ 45872 demo.c:3:12: note: previously used here 45873 3 | if (flag > 3) 45874 | ~~~~~^~~ 45875 45876The 'inform' call should be guarded by the return value from the 45877'warning_at' call so that the note isn't emitted when the warning is 45878suppressed. 45879 45880 For cases involving punctuation where the locations might be near each 45881other, they can be conditionally consolidated via 45882'gcc_rich_location::add_location_if_nearby': 45883 45884 auto_diagnostic_group d; 45885 gcc_rich_location richloc (primary_loc); 45886 bool added secondary = richloc.add_location_if_nearby (secondary_loc); 45887 error_at (&richloc, "main message"); 45888 if (!added secondary) 45889 inform (secondary_loc, "message for secondary"); 45890 45891This will emit either one diagnostic with two locations: 45892 demo.c:42:10: error: main message 45893 (foo) 45894 ~ ^ 45895 45896or two diagnostics: 45897 45898 demo.c:42:4: error: main message 45899 foo) 45900 ^ 45901 demo.c:40:2: note: message for secondary 45902 ( 45903 ^ 45904 4590528.1.7 Location Information 45906--------------------------- 45907 45908GCC's 'location_t' type can support both ordinary locations, and 45909locations relating to a macro expansion. 45910 45911 As of GCC 6, ordinary locations changed from supporting just a point in 45912the user's source code to supporting three points: the "caret" location, 45913plus a start and a finish: 45914 45915 a = foo && bar; 45916 ~~~~^~~~~~ 45917 | | | 45918 | | finish 45919 | caret 45920 start 45921 45922 Tokens coming out of libcpp have locations of the form 'caret == 45923start', such as for 'foo' here: 45924 45925 a = foo && bar; 45926 ^~~ 45927 | | 45928 | finish 45929 caret == start 45930 45931 Compound expressions should be reported using the location of the 45932expression as a whole, rather than just of one token within it. 45933 45934 For example, in '-Wformat', rather than underlining just the first 45935token of a bad argument: 45936 45937 printf("hello %i %s", (long)0, "world"); 45938 ~^ ~ 45939 %li 45940 45941the whole of the expression should be underlined, so that the user can 45942easily identify what is being referred to: 45943 45944 printf("hello %i %s", (long)0, "world"); 45945 ~^ ~~~~~~~ 45946 %li 45947 45948 Avoid using the 'input_location' global, and the diagnostic functions 45949that implicitly use it--use 'error_at' and 'warning_at' rather than 45950'error' and 'warning', and provide the most appropriate 'location_t' 45951value available at that phase of the compilation. It's possible to 45952supply secondary 'location_t' values via 'rich_location'. 45953 45954For example, in the example of imprecise wording above, generating the 45955diagnostic using 'warning': 45956 45957 // BAD: implicitly uses input_location 45958 warning (OPT_Wattributes, "%qE attribute ignored", name); 45959 45960leads to: 45961 45962 // BAD: uses input_location 45963 demo.c:1:1: warning: 'noinline' attribute ignored [-Wattributes] 45964 1 | int foo __attribute__((noinline)); 45965 | ^~~ 45966 45967which thus happened to use the location of the 'int' token, rather than 45968that of the attribute. Using 'warning_at' with the location of the 45969attribute, providing the location of the declaration in question as a 45970secondary location, and adding a note: 45971 45972 auto_diagnostic_group d; 45973 gcc_rich_location richloc (attrib_loc); 45974 richloc.add_range (decl_loc); 45975 if (warning_at (OPT_Wattributes, &richloc, 45976 "attribute %qE on variable %qE was ignored", name)) 45977 inform (attrib_loc, "attribute %qE is only applicable to functions"); 45978 45979would lead to: 45980 45981 // OK: use location of attribute, with a secondary location 45982 demo.c:1:24: warning: attribute 'noinline' on variable 'foo' was 45983 ignored [-Wattributes] 45984 1 | int foo __attribute__((noinline)); 45985 | ~~~ ~~~~~~~~~~~~~~~^~~~~~~~~ 45986 demo.c:1:24: note: attribute 'noinline' is only applicable to functions 45987 4598828.1.8 Coding Conventions 45989------------------------- 45990 45991See the diagnostics section 45992(https://gcc.gnu.org/codingconventions.html#Diagnostics) of the GCC 45993coding conventions. 45994 45995 In the C++ front end, when comparing two types in a message, use '%H' 45996and '%I' rather than '%T', as this allows the diagnostics subsystem to 45997highlight differences between template-based types. For example, rather 45998than using '%qT': 45999 46000 // BAD: a pair of %qT used in C++ front end for type comparison 46001 error_at (loc, "could not convert %qE from %qT to %qT", expr, 46002 TREE_TYPE (expr), type); 46003 46004which could lead to: 46005 46006 error: could not convert 'map<int, double>()' from 'map<int,double>' 46007 to 'map<int,int>' 46008 46009using '%H' and '%I' (via '%qH' and '%qI'): 46010 46011 // OK: compare types in C++ front end via %qH and %qI 46012 error_at (loc, "could not convert %qE from %qH to %qI", expr, 46013 TREE_TYPE (expr), type); 46014 46015allows the above output to be simplified to: 46016 46017 error: could not convert 'map<int, double>()' from 'map<[...],double>' 46018 to 'map<[...],int>' 46019 46020where the 'double' and 'int' are colorized to highlight them. 46021 4602228.1.9 Group logically-related diagnostics 46023------------------------------------------ 46024 46025Use 'auto_diagnostic_group' when issuing multiple related diagnostics 46026(seen in various examples on this page). This informs the diagnostic 46027subsystem that all diagnostics issued within the lifetime of the 46028'auto_diagnostic_group' are related. For example, 46029'-fdiagnostics-format=json' will treat the first diagnostic emitted 46030within the group as a top-level diagnostic, and all subsequent 46031diagnostics within the group as its children. 46032 4603328.1.10 Quoting 46034--------------- 46035 46036Text should be quoted by either using the 'q' modifier in a directive 46037such as '%qE', or by enclosing the quoted text in a pair of '%<' and 46038'%>' directives, and never by using explicit quote characters. The 46039directives handle the appropriate quote characters for each language and 46040apply the correct color or highlighting. 46041 46042 The following elements should be quoted in GCC diagnostics: 46043 46044 * Language keywords. 46045 * Tokens. 46046 * Boolean, numerical, character, and string constants that appear in 46047 the source code. 46048 * Identifiers, including function, macro, type, and variable names. 46049 46050 Other elements such as numbers that do not refer to numeric constants 46051that appear in the source code should not be quoted. For example, in 46052the message: 46053 46054 argument %d of %qE must be a pointer type 46055 46056since the argument number does not refer to a numerical constant in the 46057source code it should not be quoted. 46058 4605928.1.11 Spelling and Terminology 46060-------------------------------- 46061 46062See the terminology and markup 46063(https://gcc.gnu.org/codingconventions.html#Spelling Spelling) section 46064of the GCC coding conventions. 46065 4606628.1.12 Fix-it hints 46067-------------------- 46068 46069GCC's diagnostic subsystem can emit "fix-it hints": small suggested 46070edits to the user's source code. 46071 46072 They are printed by default underneath the code in question. They can 46073also be viewed via '-fdiagnostics-generate-patch' and 46074'-fdiagnostics-parseable-fixits'. With the latter, an IDE ought to be 46075able to offer to automatically apply the suggested fix. 46076 46077 Fix-it hints contain code fragments, and thus they should not be marked 46078for translation. 46079 46080 Fix-it hints can be added to a diagnostic by using a 'rich_location' 46081rather than a 'location_t' - the fix-it hints are added to the 46082'rich_location' using one of the various 'add_fixit' member functions of 46083'rich_location'. They are documented with 'rich_location' in 46084'libcpp/line-map.h'. It's easiest to use the 'gcc_rich_location' 46085subclass of 'rich_location' found in 'gcc-rich-location.h', as this 46086implicitly supplies the 'line_table' variable. 46087 46088 For example: 46089 46090 if (const char *suggestion = hint.suggestion ()) 46091 { 46092 gcc_rich_location richloc (location); 46093 richloc.add_fixit_replace (suggestion); 46094 error_at (&richloc, 46095 "%qE does not name a type; did you mean %qs?", 46096 id, suggestion); 46097 } 46098 46099which can lead to: 46100 46101 spellcheck-typenames.C:73:1: error: 'singed' does not name a type; did 46102 you mean 'signed'? 46103 73 | singed char ch; 46104 | ^~~~~~ 46105 | signed 46106 46107 Non-trivial edits can be built up by adding multiple fix-it hints to 46108one 'rich_location'. It's best to express the edits in terms of the 46109locations of individual tokens. Various handy functions for adding 46110fix-it hints for idiomatic C and C++ can be seen in 46111'gcc-rich-location.h'. 46112 4611328.1.12.1 Fix-it hints should work 46114.................................. 46115 46116When implementing a fix-it hint, please verify that the suggested edit 46117leads to fixed, compilable code. (Unfortunately, this currently must be 46118done by hand using '-fdiagnostics-generate-patch'. It would be good to 46119have an automated way of verifying that fix-it hints actually fix the 46120code). 46121 46122 For example, a "gotcha" here is to forget to add a space when adding a 46123missing reserved word. Consider a C++ fix-it hint that adds 'typename' 46124in front of a template declaration. A naive way to implement this might 46125be: 46126 46127 gcc_rich_location richloc (loc); 46128 // BAD: insertion is missing a trailing space 46129 richloc.add_fixit_insert_before ("typename"); 46130 error_at (&richloc, "need %<typename%> before %<%T::%E%> because " 46131 "%qT is a dependent scope", 46132 parser->scope, id, parser->scope); 46133 46134When applied to the code, this might lead to: 46135 46136 T::type x; 46137 46138being "corrected" to: 46139 46140 typenameT::type x; 46141 46142In this case, the correct thing to do is to add a trailing space after 46143'typename': 46144 46145 gcc_rich_location richloc (loc); 46146 // OK: note that here we have a trailing space 46147 richloc.add_fixit_insert_before ("typename "); 46148 error_at (&richloc, "need %<typename%> before %<%T::%E%> because " 46149 "%qT is a dependent scope", 46150 parser->scope, id, parser->scope); 46151 46152leading to this corrected code: 46153 46154 typename T::type x; 46155 4615628.1.12.2 Express deletion in terms of deletion, not replacement 46157................................................................ 46158 46159It's best to express deletion suggestions in terms of deletion fix-it 46160hints, rather than replacement fix-it hints. For example, consider 46161this: 46162 46163 auto_diagnostic_group d; 46164 gcc_rich_location richloc (location_of (retval)); 46165 tree name = DECL_NAME (arg); 46166 richloc.add_fixit_replace (IDENTIFIER_POINTER (name)); 46167 warning_at (&richloc, OPT_Wredundant_move, 46168 "redundant move in return statement"); 46169 46170which is intended to e.g. replace a 'std::move' with the underlying 46171value: 46172 46173 return std::move (retval); 46174 ~~~~~~~~~~^~~~~~~~ 46175 retval 46176 46177where the change has been expressed as replacement, replacing with the 46178name of the declaration. This works for simple cases, but consider this 46179case: 46180 46181 #ifdef SOME_CONFIG_FLAG 46182 # define CONFIGURY_GLOBAL global_a 46183 #else 46184 # define CONFIGURY_GLOBAL global_b 46185 #endif 46186 46187 int fn () 46188 { 46189 return std::move (CONFIGURY_GLOBAL /* some comment */); 46190 } 46191 46192The above implementation erroneously strips out the macro and the 46193comment in the fix-it hint: 46194 46195 return std::move (CONFIGURY_GLOBAL /* some comment */); 46196 ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 46197 global_a 46198 46199and thus this resulting code: 46200 46201 return global_a; 46202 46203It's better to do deletions in terms of deletions; deleting the 46204'std::move (' and the trailing close-paren, leading to this: 46205 46206 return std::move (CONFIGURY_GLOBAL /* some comment */); 46207 ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 46208 CONFIGURY_GLOBAL /* some comment */ 46209 46210and thus this result: 46211 46212 return CONFIGURY_GLOBAL /* some comment */; 46213 46214Unfortunately, the pertinent 'location_t' values are not always 46215available. 46216 4621728.1.12.3 Multiple suggestions 46218.............................. 46219 46220In the rare cases where you need to suggest more than one mutually 46221exclusive solution to a problem, this can be done by emitting multiple 46222notes and calling 'rich_location::fixits_cannot_be_auto_applied' on each 46223note's 'rich_location'. If this is called, then the fix-it hints in the 46224'rich_location' will be printed, but will not be added to generated 46225patches. 46226 46227 46228File: gccint.info, Node: Guidelines for Options, Prev: Guidelines for Diagnostics, Up: User Experience Guidelines 46229 4623028.2 Guidelines for Options 46231=========================== 46232 46233 46234File: gccint.info, Node: Funding, Next: GNU Project, Prev: User Experience Guidelines, Up: Top 46235 46236Funding Free Software 46237********************* 46238 46239If you want to have more free software a few years from now, it makes 46240sense for you to help encourage people to contribute funds for its 46241development. The most effective approach known is to encourage 46242commercial redistributors to donate. 46243 46244 Users of free software systems can boost the pace of development by 46245encouraging for-a-fee distributors to donate part of their selling price 46246to free software developers--the Free Software Foundation, and others. 46247 46248 The way to convince distributors to do this is to demand it and expect 46249it from them. So when you compare distributors, judge them partly by 46250how much they give to free software development. Show distributors they 46251must compete to be the one who gives the most. 46252 46253 To make this approach work, you must insist on numbers that you can 46254compare, such as, "We will donate ten dollars to the Frobnitz project 46255for each disk sold." Don't be satisfied with a vague promise, such as 46256"A portion of the profits are donated," since it doesn't give a basis 46257for comparison. 46258 46259 Even a precise fraction "of the profits from this disk" is not very 46260meaningful, since creative accounting and unrelated business decisions 46261can greatly alter what fraction of the sales price counts as profit. If 46262the price you pay is $50, ten percent of the profit is probably less 46263than a dollar; it might be a few cents, or nothing at all. 46264 46265 Some redistributors do development work themselves. This is useful 46266too; but to keep everyone honest, you need to inquire how much they do, 46267and what kind. Some kinds of development make much more long-term 46268difference than others. For example, maintaining a separate version of 46269a program contributes very little; maintaining the standard version of a 46270program for the whole community contributes much. Easy new ports 46271contribute little, since someone else would surely do them; difficult 46272ports such as adding a new CPU to the GNU Compiler Collection contribute 46273more; major new features or packages contribute the most. 46274 46275 By establishing the idea that supporting further development is "the 46276proper thing to do" when distributing free software for a fee, we can 46277assure a steady flow of resources into making more free software. 46278 46279 Copyright (C) 1994 Free Software Foundation, Inc. 46280 Verbatim copying and redistribution of this section is permitted 46281 without royalty; alteration is not permitted. 46282 46283 46284File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 46285 46286The GNU Project and GNU/Linux 46287***************************** 46288 46289The GNU Project was launched in 1984 to develop a complete Unix-like 46290operating system which is free software: the GNU system. (GNU is a 46291recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 46292Variants of the GNU operating system, which use the kernel Linux, are 46293now widely used; though these systems are often referred to as "Linux", 46294they are more accurately called GNU/Linux systems. 46295 46296 For more information, see: 46297 <http://www.gnu.org/> 46298 <http://www.gnu.org/gnu/linux-and-gnu.html> 46299 46300 46301File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 46302 46303GNU General Public License 46304************************** 46305 46306 Version 3, 29 June 2007 46307 46308 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 46309 46310 Everyone is permitted to copy and distribute verbatim copies of this 46311 license document, but changing it is not allowed. 46312 46313Preamble 46314======== 46315 46316The GNU General Public License is a free, copyleft license for software 46317and other kinds of works. 46318 46319 The licenses for most software and other practical works are designed 46320to take away your freedom to share and change the works. By contrast, 46321the GNU General Public License is intended to guarantee your freedom to 46322share and change all versions of a program-to make sure it remains free 46323software for all its users. We, the Free Software Foundation, use the 46324GNU General Public License for most of our software; it applies also to 46325any other work released this way by its authors. You can apply it to 46326your programs, too. 46327 46328 When we speak of free software, we are referring to freedom, not price. 46329Our General Public Licenses are designed to make sure that you have the 46330freedom to distribute copies of free software (and charge for them if 46331you wish), that you receive source code or can get it if you want it, 46332that you can change the software or use pieces of it in new free 46333programs, and that you know you can do these things. 46334 46335 To protect your rights, we need to prevent others from denying you 46336these rights or asking you to surrender the rights. Therefore, you have 46337certain responsibilities if you distribute copies of the software, or if 46338you modify it: responsibilities to respect the freedom of others. 46339 46340 For example, if you distribute copies of such a program, whether gratis 46341or for a fee, you must pass on to the recipients the same freedoms that 46342you received. You must make sure that they, too, receive or can get the 46343source code. And you must show them these terms so they know their 46344rights. 46345 46346 Developers that use the GNU GPL protect your rights with two steps: (1) 46347assert copyright on the software, and (2) offer you this License giving 46348you legal permission to copy, distribute and/or modify it. 46349 46350 For the developers' and authors' protection, the GPL clearly explains 46351that there is no warranty for this free software. For both users' and 46352authors' sake, the GPL requires that modified versions be marked as 46353changed, so that their problems will not be attributed erroneously to 46354authors of previous versions. 46355 46356 Some devices are designed to deny users access to install or run 46357modified versions of the software inside them, although the manufacturer 46358can do so. This is fundamentally incompatible with the aim of 46359protecting users' freedom to change the software. The systematic 46360pattern of such abuse occurs in the area of products for individuals to 46361use, which is precisely where it is most unacceptable. Therefore, we 46362have designed this version of the GPL to prohibit the practice for those 46363products. If such problems arise substantially in other domains, we 46364stand ready to extend this provision to those domains in future versions 46365of the GPL, as needed to protect the freedom of users. 46366 46367 Finally, every program is threatened constantly by software patents. 46368States should not allow patents to restrict development and use of 46369software on general-purpose computers, but in those that do, we wish to 46370avoid the special danger that patents applied to a free program could 46371make it effectively proprietary. To prevent this, the GPL assures that 46372patents cannot be used to render the program non-free. 46373 46374 The precise terms and conditions for copying, distribution and 46375modification follow. 46376 46377TERMS AND CONDITIONS 46378==================== 46379 46380 0. Definitions. 46381 46382 "This License" refers to version 3 of the GNU General Public 46383 License. 46384 46385 "Copyright" also means copyright-like laws that apply to other 46386 kinds of works, such as semiconductor masks. 46387 46388 "The Program" refers to any copyrightable work licensed under this 46389 License. Each licensee is addressed as "you". "Licensees" and 46390 "recipients" may be individuals or organizations. 46391 46392 To "modify" a work means to copy from or adapt all or part of the 46393 work in a fashion requiring copyright permission, other than the 46394 making of an exact copy. The resulting work is called a "modified 46395 version" of the earlier work or a work "based on" the earlier work. 46396 46397 A "covered work" means either the unmodified Program or a work 46398 based on the Program. 46399 46400 To "propagate" a work means to do anything with it that, without 46401 permission, would make you directly or secondarily liable for 46402 infringement under applicable copyright law, except executing it on 46403 a computer or modifying a private copy. Propagation includes 46404 copying, distribution (with or without modification), making 46405 available to the public, and in some countries other activities as 46406 well. 46407 46408 To "convey" a work means any kind of propagation that enables other 46409 parties to make or receive copies. Mere interaction with a user 46410 through a computer network, with no transfer of a copy, is not 46411 conveying. 46412 46413 An interactive user interface displays "Appropriate Legal Notices" 46414 to the extent that it includes a convenient and prominently visible 46415 feature that (1) displays an appropriate copyright notice, and (2) 46416 tells the user that there is no warranty for the work (except to 46417 the extent that warranties are provided), that licensees may convey 46418 the work under this License, and how to view a copy of this 46419 License. If the interface presents a list of user commands or 46420 options, such as a menu, a prominent item in the list meets this 46421 criterion. 46422 46423 1. Source Code. 46424 46425 The "source code" for a work means the preferred form of the work 46426 for making modifications to it. "Object code" means any non-source 46427 form of a work. 46428 46429 A "Standard Interface" means an interface that either is an 46430 official standard defined by a recognized standards body, or, in 46431 the case of interfaces specified for a particular programming 46432 language, one that is widely used among developers working in that 46433 language. 46434 46435 The "System Libraries" of an executable work include anything, 46436 other than the work as a whole, that (a) is included in the normal 46437 form of packaging a Major Component, but which is not part of that 46438 Major Component, and (b) serves only to enable use of the work with 46439 that Major Component, or to implement a Standard Interface for 46440 which an implementation is available to the public in source code 46441 form. A "Major Component", in this context, means a major 46442 essential component (kernel, window system, and so on) of the 46443 specific operating system (if any) on which the executable work 46444 runs, or a compiler used to produce the work, or an object code 46445 interpreter used to run it. 46446 46447 The "Corresponding Source" for a work in object code form means all 46448 the source code needed to generate, install, and (for an executable 46449 work) run the object code and to modify the work, including scripts 46450 to control those activities. However, it does not include the 46451 work's System Libraries, or general-purpose tools or generally 46452 available free programs which are used unmodified in performing 46453 those activities but which are not part of the work. For example, 46454 Corresponding Source includes interface definition files associated 46455 with source files for the work, and the source code for shared 46456 libraries and dynamically linked subprograms that the work is 46457 specifically designed to require, such as by intimate data 46458 communication or control flow between those subprograms and other 46459 parts of the work. 46460 46461 The Corresponding Source need not include anything that users can 46462 regenerate automatically from other parts of the Corresponding 46463 Source. 46464 46465 The Corresponding Source for a work in source code form is that 46466 same work. 46467 46468 2. Basic Permissions. 46469 46470 All rights granted under this License are granted for the term of 46471 copyright on the Program, and are irrevocable provided the stated 46472 conditions are met. This License explicitly affirms your unlimited 46473 permission to run the unmodified Program. The output from running 46474 a covered work is covered by this License only if the output, given 46475 its content, constitutes a covered work. This License acknowledges 46476 your rights of fair use or other equivalent, as provided by 46477 copyright law. 46478 46479 You may make, run and propagate covered works that you do not 46480 convey, without conditions so long as your license otherwise 46481 remains in force. You may convey covered works to others for the 46482 sole purpose of having them make modifications exclusively for you, 46483 or provide you with facilities for running those works, provided 46484 that you comply with the terms of this License in conveying all 46485 material for which you do not control copyright. Those thus making 46486 or running the covered works for you must do so exclusively on your 46487 behalf, under your direction and control, on terms that prohibit 46488 them from making any copies of your copyrighted material outside 46489 their relationship with you. 46490 46491 Conveying under any other circumstances is permitted solely under 46492 the conditions stated below. Sublicensing is not allowed; section 46493 10 makes it unnecessary. 46494 46495 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 46496 46497 No covered work shall be deemed part of an effective technological 46498 measure under any applicable law fulfilling obligations under 46499 article 11 of the WIPO copyright treaty adopted on 20 December 46500 1996, or similar laws prohibiting or restricting circumvention of 46501 such measures. 46502 46503 When you convey a covered work, you waive any legal power to forbid 46504 circumvention of technological measures to the extent such 46505 circumvention is effected by exercising rights under this License 46506 with respect to the covered work, and you disclaim any intention to 46507 limit operation or modification of the work as a means of 46508 enforcing, against the work's users, your or third parties' legal 46509 rights to forbid circumvention of technological measures. 46510 46511 4. Conveying Verbatim Copies. 46512 46513 You may convey verbatim copies of the Program's source code as you 46514 receive it, in any medium, provided that you conspicuously and 46515 appropriately publish on each copy an appropriate copyright notice; 46516 keep intact all notices stating that this License and any 46517 non-permissive terms added in accord with section 7 apply to the 46518 code; keep intact all notices of the absence of any warranty; and 46519 give all recipients a copy of this License along with the Program. 46520 46521 You may charge any price or no price for each copy that you convey, 46522 and you may offer support or warranty protection for a fee. 46523 46524 5. Conveying Modified Source Versions. 46525 46526 You may convey a work based on the Program, or the modifications to 46527 produce it from the Program, in the form of source code under the 46528 terms of section 4, provided that you also meet all of these 46529 conditions: 46530 46531 a. The work must carry prominent notices stating that you 46532 modified it, and giving a relevant date. 46533 46534 b. The work must carry prominent notices stating that it is 46535 released under this License and any conditions added under 46536 section 7. This requirement modifies the requirement in 46537 section 4 to "keep intact all notices". 46538 46539 c. You must license the entire work, as a whole, under this 46540 License to anyone who comes into possession of a copy. This 46541 License will therefore apply, along with any applicable 46542 section 7 additional terms, to the whole of the work, and all 46543 its parts, regardless of how they are packaged. This License 46544 gives no permission to license the work in any other way, but 46545 it does not invalidate such permission if you have separately 46546 received it. 46547 46548 d. If the work has interactive user interfaces, each must display 46549 Appropriate Legal Notices; however, if the Program has 46550 interactive interfaces that do not display Appropriate Legal 46551 Notices, your work need not make them do so. 46552 46553 A compilation of a covered work with other separate and independent 46554 works, which are not by their nature extensions of the covered 46555 work, and which are not combined with it such as to form a larger 46556 program, in or on a volume of a storage or distribution medium, is 46557 called an "aggregate" if the compilation and its resulting 46558 copyright are not used to limit the access or legal rights of the 46559 compilation's users beyond what the individual works permit. 46560 Inclusion of a covered work in an aggregate does not cause this 46561 License to apply to the other parts of the aggregate. 46562 46563 6. Conveying Non-Source Forms. 46564 46565 You may convey a covered work in object code form under the terms 46566 of sections 4 and 5, provided that you also convey the 46567 machine-readable Corresponding Source under the terms of this 46568 License, in one of these ways: 46569 46570 a. Convey the object code in, or embodied in, a physical product 46571 (including a physical distribution medium), accompanied by the 46572 Corresponding Source fixed on a durable physical medium 46573 customarily used for software interchange. 46574 46575 b. Convey the object code in, or embodied in, a physical product 46576 (including a physical distribution medium), accompanied by a 46577 written offer, valid for at least three years and valid for as 46578 long as you offer spare parts or customer support for that 46579 product model, to give anyone who possesses the object code 46580 either (1) a copy of the Corresponding Source for all the 46581 software in the product that is covered by this License, on a 46582 durable physical medium customarily used for software 46583 interchange, for a price no more than your reasonable cost of 46584 physically performing this conveying of source, or (2) access 46585 to copy the Corresponding Source from a network server at no 46586 charge. 46587 46588 c. Convey individual copies of the object code with a copy of the 46589 written offer to provide the Corresponding Source. This 46590 alternative is allowed only occasionally and noncommercially, 46591 and only if you received the object code with such an offer, 46592 in accord with subsection 6b. 46593 46594 d. Convey the object code by offering access from a designated 46595 place (gratis or for a charge), and offer equivalent access to 46596 the Corresponding Source in the same way through the same 46597 place at no further charge. You need not require recipients 46598 to copy the Corresponding Source along with the object code. 46599 If the place to copy the object code is a network server, the 46600 Corresponding Source may be on a different server (operated by 46601 you or a third party) that supports equivalent copying 46602 facilities, provided you maintain clear directions next to the 46603 object code saying where to find the Corresponding Source. 46604 Regardless of what server hosts the Corresponding Source, you 46605 remain obligated to ensure that it is available for as long as 46606 needed to satisfy these requirements. 46607 46608 e. Convey the object code using peer-to-peer transmission, 46609 provided you inform other peers where the object code and 46610 Corresponding Source of the work are being offered to the 46611 general public at no charge under subsection 6d. 46612 46613 A separable portion of the object code, whose source code is 46614 excluded from the Corresponding Source as a System Library, need 46615 not be included in conveying the object code work. 46616 46617 A "User Product" is either (1) a "consumer product", which means 46618 any tangible personal property which is normally used for personal, 46619 family, or household purposes, or (2) anything designed or sold for 46620 incorporation into a dwelling. In determining whether a product is 46621 a consumer product, doubtful cases shall be resolved in favor of 46622 coverage. For a particular product received by a particular user, 46623 "normally used" refers to a typical or common use of that class of 46624 product, regardless of the status of the particular user or of the 46625 way in which the particular user actually uses, or expects or is 46626 expected to use, the product. A product is a consumer product 46627 regardless of whether the product has substantial commercial, 46628 industrial or non-consumer uses, unless such uses represent the 46629 only significant mode of use of the product. 46630 46631 "Installation Information" for a User Product means any methods, 46632 procedures, authorization keys, or other information required to 46633 install and execute modified versions of a covered work in that 46634 User Product from a modified version of its Corresponding Source. 46635 The information must suffice to ensure that the continued 46636 functioning of the modified object code is in no case prevented or 46637 interfered with solely because modification has been made. 46638 46639 If you convey an object code work under this section in, or with, 46640 or specifically for use in, a User Product, and the conveying 46641 occurs as part of a transaction in which the right of possession 46642 and use of the User Product is transferred to the recipient in 46643 perpetuity or for a fixed term (regardless of how the transaction 46644 is characterized), the Corresponding Source conveyed under this 46645 section must be accompanied by the Installation Information. But 46646 this requirement does not apply if neither you nor any third party 46647 retains the ability to install modified object code on the User 46648 Product (for example, the work has been installed in ROM). 46649 46650 The requirement to provide Installation Information does not 46651 include a requirement to continue to provide support service, 46652 warranty, or updates for a work that has been modified or installed 46653 by the recipient, or for the User Product in which it has been 46654 modified or installed. Access to a network may be denied when the 46655 modification itself materially and adversely affects the operation 46656 of the network or violates the rules and protocols for 46657 communication across the network. 46658 46659 Corresponding Source conveyed, and Installation Information 46660 provided, in accord with this section must be in a format that is 46661 publicly documented (and with an implementation available to the 46662 public in source code form), and must require no special password 46663 or key for unpacking, reading or copying. 46664 46665 7. Additional Terms. 46666 46667 "Additional permissions" are terms that supplement the terms of 46668 this License by making exceptions from one or more of its 46669 conditions. Additional permissions that are applicable to the 46670 entire Program shall be treated as though they were included in 46671 this License, to the extent that they are valid under applicable 46672 law. If additional permissions apply only to part of the Program, 46673 that part may be used separately under those permissions, but the 46674 entire Program remains governed by this License without regard to 46675 the additional permissions. 46676 46677 When you convey a copy of a covered work, you may at your option 46678 remove any additional permissions from that copy, or from any part 46679 of it. (Additional permissions may be written to require their own 46680 removal in certain cases when you modify the work.) You may place 46681 additional permissions on material, added by you to a covered work, 46682 for which you have or can give appropriate copyright permission. 46683 46684 Notwithstanding any other provision of this License, for material 46685 you add to a covered work, you may (if authorized by the copyright 46686 holders of that material) supplement the terms of this License with 46687 terms: 46688 46689 a. Disclaiming warranty or limiting liability differently from 46690 the terms of sections 15 and 16 of this License; or 46691 46692 b. Requiring preservation of specified reasonable legal notices 46693 or author attributions in that material or in the Appropriate 46694 Legal Notices displayed by works containing it; or 46695 46696 c. Prohibiting misrepresentation of the origin of that material, 46697 or requiring that modified versions of such material be marked 46698 in reasonable ways as different from the original version; or 46699 46700 d. Limiting the use for publicity purposes of names of licensors 46701 or authors of the material; or 46702 46703 e. Declining to grant rights under trademark law for use of some 46704 trade names, trademarks, or service marks; or 46705 46706 f. Requiring indemnification of licensors and authors of that 46707 material by anyone who conveys the material (or modified 46708 versions of it) with contractual assumptions of liability to 46709 the recipient, for any liability that these contractual 46710 assumptions directly impose on those licensors and authors. 46711 46712 All other non-permissive additional terms are considered "further 46713 restrictions" within the meaning of section 10. If the Program as 46714 you received it, or any part of it, contains a notice stating that 46715 it is governed by this License along with a term that is a further 46716 restriction, you may remove that term. If a license document 46717 contains a further restriction but permits relicensing or conveying 46718 under this License, you may add to a covered work material governed 46719 by the terms of that license document, provided that the further 46720 restriction does not survive such relicensing or conveying. 46721 46722 If you add terms to a covered work in accord with this section, you 46723 must place, in the relevant source files, a statement of the 46724 additional terms that apply to those files, or a notice indicating 46725 where to find the applicable terms. 46726 46727 Additional terms, permissive or non-permissive, may be stated in 46728 the form of a separately written license, or stated as exceptions; 46729 the above requirements apply either way. 46730 46731 8. Termination. 46732 46733 You may not propagate or modify a covered work except as expressly 46734 provided under this License. Any attempt otherwise to propagate or 46735 modify it is void, and will automatically terminate your rights 46736 under this License (including any patent licenses granted under the 46737 third paragraph of section 11). 46738 46739 However, if you cease all violation of this License, then your 46740 license from a particular copyright holder is reinstated (a) 46741 provisionally, unless and until the copyright holder explicitly and 46742 finally terminates your license, and (b) permanently, if the 46743 copyright holder fails to notify you of the violation by some 46744 reasonable means prior to 60 days after the cessation. 46745 46746 Moreover, your license from a particular copyright holder is 46747 reinstated permanently if the copyright holder notifies you of the 46748 violation by some reasonable means, this is the first time you have 46749 received notice of violation of this License (for any work) from 46750 that copyright holder, and you cure the violation prior to 30 days 46751 after your receipt of the notice. 46752 46753 Termination of your rights under this section does not terminate 46754 the licenses of parties who have received copies or rights from you 46755 under this License. If your rights have been terminated and not 46756 permanently reinstated, you do not qualify to receive new licenses 46757 for the same material under section 10. 46758 46759 9. Acceptance Not Required for Having Copies. 46760 46761 You are not required to accept this License in order to receive or 46762 run a copy of the Program. Ancillary propagation of a covered work 46763 occurring solely as a consequence of using peer-to-peer 46764 transmission to receive a copy likewise does not require 46765 acceptance. However, nothing other than this License grants you 46766 permission to propagate or modify any covered work. These actions 46767 infringe copyright if you do not accept this License. Therefore, 46768 by modifying or propagating a covered work, you indicate your 46769 acceptance of this License to do so. 46770 46771 10. Automatic Licensing of Downstream Recipients. 46772 46773 Each time you convey a covered work, the recipient automatically 46774 receives a license from the original licensors, to run, modify and 46775 propagate that work, subject to this License. You are not 46776 responsible for enforcing compliance by third parties with this 46777 License. 46778 46779 An "entity transaction" is a transaction transferring control of an 46780 organization, or substantially all assets of one, or subdividing an 46781 organization, or merging organizations. If propagation of a 46782 covered work results from an entity transaction, each party to that 46783 transaction who receives a copy of the work also receives whatever 46784 licenses to the work the party's predecessor in interest had or 46785 could give under the previous paragraph, plus a right to possession 46786 of the Corresponding Source of the work from the predecessor in 46787 interest, if the predecessor has it or can get it with reasonable 46788 efforts. 46789 46790 You may not impose any further restrictions on the exercise of the 46791 rights granted or affirmed under this License. For example, you 46792 may not impose a license fee, royalty, or other charge for exercise 46793 of rights granted under this License, and you may not initiate 46794 litigation (including a cross-claim or counterclaim in a lawsuit) 46795 alleging that any patent claim is infringed by making, using, 46796 selling, offering for sale, or importing the Program or any portion 46797 of it. 46798 46799 11. Patents. 46800 46801 A "contributor" is a copyright holder who authorizes use under this 46802 License of the Program or a work on which the Program is based. 46803 The work thus licensed is called the contributor's "contributor 46804 version". 46805 46806 A contributor's "essential patent claims" are all patent claims 46807 owned or controlled by the contributor, whether already acquired or 46808 hereafter acquired, that would be infringed by some manner, 46809 permitted by this License, of making, using, or selling its 46810 contributor version, but do not include claims that would be 46811 infringed only as a consequence of further modification of the 46812 contributor version. For purposes of this definition, "control" 46813 includes the right to grant patent sublicenses in a manner 46814 consistent with the requirements of this License. 46815 46816 Each contributor grants you a non-exclusive, worldwide, 46817 royalty-free patent license under the contributor's essential 46818 patent claims, to make, use, sell, offer for sale, import and 46819 otherwise run, modify and propagate the contents of its contributor 46820 version. 46821 46822 In the following three paragraphs, a "patent license" is any 46823 express agreement or commitment, however denominated, not to 46824 enforce a patent (such as an express permission to practice a 46825 patent or covenant not to sue for patent infringement). To "grant" 46826 such a patent license to a party means to make such an agreement or 46827 commitment not to enforce a patent against the party. 46828 46829 If you convey a covered work, knowingly relying on a patent 46830 license, and the Corresponding Source of the work is not available 46831 for anyone to copy, free of charge and under the terms of this 46832 License, through a publicly available network server or other 46833 readily accessible means, then you must either (1) cause the 46834 Corresponding Source to be so available, or (2) arrange to deprive 46835 yourself of the benefit of the patent license for this particular 46836 work, or (3) arrange, in a manner consistent with the requirements 46837 of this License, to extend the patent license to downstream 46838 recipients. "Knowingly relying" means you have actual knowledge 46839 that, but for the patent license, your conveying the covered work 46840 in a country, or your recipient's use of the covered work in a 46841 country, would infringe one or more identifiable patents in that 46842 country that you have reason to believe are valid. 46843 46844 If, pursuant to or in connection with a single transaction or 46845 arrangement, you convey, or propagate by procuring conveyance of, a 46846 covered work, and grant a patent license to some of the parties 46847 receiving the covered work authorizing them to use, propagate, 46848 modify or convey a specific copy of the covered work, then the 46849 patent license you grant is automatically extended to all 46850 recipients of the covered work and works based on it. 46851 46852 A patent license is "discriminatory" if it does not include within 46853 the scope of its coverage, prohibits the exercise of, or is 46854 conditioned on the non-exercise of one or more of the rights that 46855 are specifically granted under this License. You may not convey a 46856 covered work if you are a party to an arrangement with a third 46857 party that is in the business of distributing software, under which 46858 you make payment to the third party based on the extent of your 46859 activity of conveying the work, and under which the third party 46860 grants, to any of the parties who would receive the covered work 46861 from you, a discriminatory patent license (a) in connection with 46862 copies of the covered work conveyed by you (or copies made from 46863 those copies), or (b) primarily for and in connection with specific 46864 products or compilations that contain the covered work, unless you 46865 entered into that arrangement, or that patent license was granted, 46866 prior to 28 March 2007. 46867 46868 Nothing in this License shall be construed as excluding or limiting 46869 any implied license or other defenses to infringement that may 46870 otherwise be available to you under applicable patent law. 46871 46872 12. No Surrender of Others' Freedom. 46873 46874 If conditions are imposed on you (whether by court order, agreement 46875 or otherwise) that contradict the conditions of this License, they 46876 do not excuse you from the conditions of this License. If you 46877 cannot convey a covered work so as to satisfy simultaneously your 46878 obligations under this License and any other pertinent obligations, 46879 then as a consequence you may not convey it at all. For example, 46880 if you agree to terms that obligate you to collect a royalty for 46881 further conveying from those to whom you convey the Program, the 46882 only way you could satisfy both those terms and this License would 46883 be to refrain entirely from conveying the Program. 46884 46885 13. Use with the GNU Affero General Public License. 46886 46887 Notwithstanding any other provision of this License, you have 46888 permission to link or combine any covered work with a work licensed 46889 under version 3 of the GNU Affero General Public License into a 46890 single combined work, and to convey the resulting work. The terms 46891 of this License will continue to apply to the part which is the 46892 covered work, but the special requirements of the GNU Affero 46893 General Public License, section 13, concerning interaction through 46894 a network will apply to the combination as such. 46895 46896 14. Revised Versions of this License. 46897 46898 The Free Software Foundation may publish revised and/or new 46899 versions of the GNU General Public License from time to time. Such 46900 new versions will be similar in spirit to the present version, but 46901 may differ in detail to address new problems or concerns. 46902 46903 Each version is given a distinguishing version number. If the 46904 Program specifies that a certain numbered version of the GNU 46905 General Public License "or any later version" applies to it, you 46906 have the option of following the terms and conditions either of 46907 that numbered version or of any later version published by the Free 46908 Software Foundation. If the Program does not specify a version 46909 number of the GNU General Public License, you may choose any 46910 version ever published by the Free Software Foundation. 46911 46912 If the Program specifies that a proxy can decide which future 46913 versions of the GNU General Public License can be used, that 46914 proxy's public statement of acceptance of a version permanently 46915 authorizes you to choose that version for the Program. 46916 46917 Later license versions may give you additional or different 46918 permissions. However, no additional obligations are imposed on any 46919 author or copyright holder as a result of your choosing to follow a 46920 later version. 46921 46922 15. Disclaimer of Warranty. 46923 46924 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 46925 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 46926 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 46927 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 46928 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 46929 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 46930 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 46931 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 46932 NECESSARY SERVICING, REPAIR OR CORRECTION. 46933 46934 16. Limitation of Liability. 46935 46936 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 46937 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 46938 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 46939 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 46940 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 46941 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 46942 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 46943 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 46944 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 46945 THE POSSIBILITY OF SUCH DAMAGES. 46946 46947 17. Interpretation of Sections 15 and 16. 46948 46949 If the disclaimer of warranty and limitation of liability provided 46950 above cannot be given local legal effect according to their terms, 46951 reviewing courts shall apply local law that most closely 46952 approximates an absolute waiver of all civil liability in 46953 connection with the Program, unless a warranty or assumption of 46954 liability accompanies a copy of the Program in return for a fee. 46955 46956END OF TERMS AND CONDITIONS 46957=========================== 46958 46959How to Apply These Terms to Your New Programs 46960============================================= 46961 46962If you develop a new program, and you want it to be of the greatest 46963possible use to the public, the best way to achieve this is to make it 46964free software which everyone can redistribute and change under these 46965terms. 46966 46967 To do so, attach the following notices to the program. It is safest to 46968attach them to the start of each source file to most effectively state 46969the exclusion of warranty; and each file should have at least the 46970"copyright" line and a pointer to where the full notice is found. 46971 46972 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 46973 Copyright (C) YEAR NAME OF AUTHOR 46974 46975 This program is free software: you can redistribute it and/or modify 46976 it under the terms of the GNU General Public License as published by 46977 the Free Software Foundation, either version 3 of the License, or (at 46978 your option) any later version. 46979 46980 This program is distributed in the hope that it will be useful, but 46981 WITHOUT ANY WARRANTY; without even the implied warranty of 46982 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 46983 General Public License for more details. 46984 46985 You should have received a copy of the GNU General Public License 46986 along with this program. If not, see <http://www.gnu.org/licenses/>. 46987 46988 Also add information on how to contact you by electronic and paper 46989mail. 46990 46991 If the program does terminal interaction, make it output a short notice 46992like this when it starts in an interactive mode: 46993 46994 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 46995 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 46996 This is free software, and you are welcome to redistribute it 46997 under certain conditions; type 'show c' for details. 46998 46999 The hypothetical commands 'show w' and 'show c' should show the 47000appropriate parts of the General Public License. Of course, your 47001program's commands might be different; for a GUI interface, you would 47002use an "about box". 47003 47004 You should also get your employer (if you work as a programmer) or 47005school, if any, to sign a "copyright disclaimer" for the program, if 47006necessary. For more information on this, and how to apply and follow 47007the GNU GPL, see <http://www.gnu.org/licenses/>. 47008 47009 The GNU General Public License does not permit incorporating your 47010program into proprietary programs. If your program is a subroutine 47011library, you may consider it more useful to permit linking proprietary 47012applications with the library. If this is what you want to do, use the 47013GNU Lesser General Public License instead of this License. But first, 47014please read <https://www.gnu.org/licenses/why-not-lgpl.html>. 47015 47016 47017File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 47018 47019GNU Free Documentation License 47020****************************** 47021 47022 Version 1.3, 3 November 2008 47023 47024 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 47025 <http://fsf.org/> 47026 47027 Everyone is permitted to copy and distribute verbatim copies 47028 of this license document, but changing it is not allowed. 47029 47030 0. PREAMBLE 47031 47032 The purpose of this License is to make a manual, textbook, or other 47033 functional and useful document "free" in the sense of freedom: to 47034 assure everyone the effective freedom to copy and redistribute it, 47035 with or without modifying it, either commercially or 47036 noncommercially. Secondarily, this License preserves for the 47037 author and publisher a way to get credit for their work, while not 47038 being considered responsible for modifications made by others. 47039 47040 This License is a kind of "copyleft", which means that derivative 47041 works of the document must themselves be free in the same sense. 47042 It complements the GNU General Public License, which is a copyleft 47043 license designed for free software. 47044 47045 We have designed this License in order to use it for manuals for 47046 free software, because free software needs free documentation: a 47047 free program should come with manuals providing the same freedoms 47048 that the software does. But this License is not limited to 47049 software manuals; it can be used for any textual work, regardless 47050 of subject matter or whether it is published as a printed book. We 47051 recommend this License principally for works whose purpose is 47052 instruction or reference. 47053 47054 1. APPLICABILITY AND DEFINITIONS 47055 47056 This License applies to any manual or other work, in any medium, 47057 that contains a notice placed by the copyright holder saying it can 47058 be distributed under the terms of this License. Such a notice 47059 grants a world-wide, royalty-free license, unlimited in duration, 47060 to use that work under the conditions stated herein. The 47061 "Document", below, refers to any such manual or work. Any member 47062 of the public is a licensee, and is addressed as "you". You accept 47063 the license if you copy, modify or distribute the work in a way 47064 requiring permission under copyright law. 47065 47066 A "Modified Version" of the Document means any work containing the 47067 Document or a portion of it, either copied verbatim, or with 47068 modifications and/or translated into another language. 47069 47070 A "Secondary Section" is a named appendix or a front-matter section 47071 of the Document that deals exclusively with the relationship of the 47072 publishers or authors of the Document to the Document's overall 47073 subject (or to related matters) and contains nothing that could 47074 fall directly within that overall subject. (Thus, if the Document 47075 is in part a textbook of mathematics, a Secondary Section may not 47076 explain any mathematics.) The relationship could be a matter of 47077 historical connection with the subject or with related matters, or 47078 of legal, commercial, philosophical, ethical or political position 47079 regarding them. 47080 47081 The "Invariant Sections" are certain Secondary Sections whose 47082 titles are designated, as being those of Invariant Sections, in the 47083 notice that says that the Document is released under this License. 47084 If a section does not fit the above definition of Secondary then it 47085 is not allowed to be designated as Invariant. The Document may 47086 contain zero Invariant Sections. If the Document does not identify 47087 any Invariant Sections then there are none. 47088 47089 The "Cover Texts" are certain short passages of text that are 47090 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 47091 that says that the Document is released under this License. A 47092 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 47093 be at most 25 words. 47094 47095 A "Transparent" copy of the Document means a machine-readable copy, 47096 represented in a format whose specification is available to the 47097 general public, that is suitable for revising the document 47098 straightforwardly with generic text editors or (for images composed 47099 of pixels) generic paint programs or (for drawings) some widely 47100 available drawing editor, and that is suitable for input to text 47101 formatters or for automatic translation to a variety of formats 47102 suitable for input to text formatters. A copy made in an otherwise 47103 Transparent file format whose markup, or absence of markup, has 47104 been arranged to thwart or discourage subsequent modification by 47105 readers is not Transparent. An image format is not Transparent if 47106 used for any substantial amount of text. A copy that is not 47107 "Transparent" is called "Opaque". 47108 47109 Examples of suitable formats for Transparent copies include plain 47110 ASCII without markup, Texinfo input format, LaTeX input format, 47111 SGML or XML using a publicly available DTD, and standard-conforming 47112 simple HTML, PostScript or PDF designed for human modification. 47113 Examples of transparent image formats include PNG, XCF and JPG. 47114 Opaque formats include proprietary formats that can be read and 47115 edited only by proprietary word processors, SGML or XML for which 47116 the DTD and/or processing tools are not generally available, and 47117 the machine-generated HTML, PostScript or PDF produced by some word 47118 processors for output purposes only. 47119 47120 The "Title Page" means, for a printed book, the title page itself, 47121 plus such following pages as are needed to hold, legibly, the 47122 material this License requires to appear in the title page. For 47123 works in formats which do not have any title page as such, "Title 47124 Page" means the text near the most prominent appearance of the 47125 work's title, preceding the beginning of the body of the text. 47126 47127 The "publisher" means any person or entity that distributes copies 47128 of the Document to the public. 47129 47130 A section "Entitled XYZ" means a named subunit of the Document 47131 whose title either is precisely XYZ or contains XYZ in parentheses 47132 following text that translates XYZ in another language. (Here XYZ 47133 stands for a specific section name mentioned below, such as 47134 "Acknowledgements", "Dedications", "Endorsements", or "History".) 47135 To "Preserve the Title" of such a section when you modify the 47136 Document means that it remains a section "Entitled XYZ" according 47137 to this definition. 47138 47139 The Document may include Warranty Disclaimers next to the notice 47140 which states that this License applies to the Document. These 47141 Warranty Disclaimers are considered to be included by reference in 47142 this License, but only as regards disclaiming warranties: any other 47143 implication that these Warranty Disclaimers may have is void and 47144 has no effect on the meaning of this License. 47145 47146 2. VERBATIM COPYING 47147 47148 You may copy and distribute the Document in any medium, either 47149 commercially or noncommercially, provided that this License, the 47150 copyright notices, and the license notice saying this License 47151 applies to the Document are reproduced in all copies, and that you 47152 add no other conditions whatsoever to those of this License. You 47153 may not use technical measures to obstruct or control the reading 47154 or further copying of the copies you make or distribute. However, 47155 you may accept compensation in exchange for copies. If you 47156 distribute a large enough number of copies you must also follow the 47157 conditions in section 3. 47158 47159 You may also lend copies, under the same conditions stated above, 47160 and you may publicly display copies. 47161 47162 3. COPYING IN QUANTITY 47163 47164 If you publish printed copies (or copies in media that commonly 47165 have printed covers) of the Document, numbering more than 100, and 47166 the Document's license notice requires Cover Texts, you must 47167 enclose the copies in covers that carry, clearly and legibly, all 47168 these Cover Texts: Front-Cover Texts on the front cover, and 47169 Back-Cover Texts on the back cover. Both covers must also clearly 47170 and legibly identify you as the publisher of these copies. The 47171 front cover must present the full title with all words of the title 47172 equally prominent and visible. You may add other material on the 47173 covers in addition. Copying with changes limited to the covers, as 47174 long as they preserve the title of the Document and satisfy these 47175 conditions, can be treated as verbatim copying in other respects. 47176 47177 If the required texts for either cover are too voluminous to fit 47178 legibly, you should put the first ones listed (as many as fit 47179 reasonably) on the actual cover, and continue the rest onto 47180 adjacent pages. 47181 47182 If you publish or distribute Opaque copies of the Document 47183 numbering more than 100, you must either include a machine-readable 47184 Transparent copy along with each Opaque copy, or state in or with 47185 each Opaque copy a computer-network location from which the general 47186 network-using public has access to download using public-standard 47187 network protocols a complete Transparent copy of the Document, free 47188 of added material. If you use the latter option, you must take 47189 reasonably prudent steps, when you begin distribution of Opaque 47190 copies in quantity, to ensure that this Transparent copy will 47191 remain thus accessible at the stated location until at least one 47192 year after the last time you distribute an Opaque copy (directly or 47193 through your agents or retailers) of that edition to the public. 47194 47195 It is requested, but not required, that you contact the authors of 47196 the Document well before redistributing any large number of copies, 47197 to give them a chance to provide you with an updated version of the 47198 Document. 47199 47200 4. MODIFICATIONS 47201 47202 You may copy and distribute a Modified Version of the Document 47203 under the conditions of sections 2 and 3 above, provided that you 47204 release the Modified Version under precisely this License, with the 47205 Modified Version filling the role of the Document, thus licensing 47206 distribution and modification of the Modified Version to whoever 47207 possesses a copy of it. In addition, you must do these things in 47208 the Modified Version: 47209 47210 A. Use in the Title Page (and on the covers, if any) a title 47211 distinct from that of the Document, and from those of previous 47212 versions (which should, if there were any, be listed in the 47213 History section of the Document). You may use the same title 47214 as a previous version if the original publisher of that 47215 version gives permission. 47216 47217 B. List on the Title Page, as authors, one or more persons or 47218 entities responsible for authorship of the modifications in 47219 the Modified Version, together with at least five of the 47220 principal authors of the Document (all of its principal 47221 authors, if it has fewer than five), unless they release you 47222 from this requirement. 47223 47224 C. State on the Title page the name of the publisher of the 47225 Modified Version, as the publisher. 47226 47227 D. Preserve all the copyright notices of the Document. 47228 47229 E. Add an appropriate copyright notice for your modifications 47230 adjacent to the other copyright notices. 47231 47232 F. Include, immediately after the copyright notices, a license 47233 notice giving the public permission to use the Modified 47234 Version under the terms of this License, in the form shown in 47235 the Addendum below. 47236 47237 G. Preserve in that license notice the full lists of Invariant 47238 Sections and required Cover Texts given in the Document's 47239 license notice. 47240 47241 H. Include an unaltered copy of this License. 47242 47243 I. Preserve the section Entitled "History", Preserve its Title, 47244 and add to it an item stating at least the title, year, new 47245 authors, and publisher of the Modified Version as given on the 47246 Title Page. If there is no section Entitled "History" in the 47247 Document, create one stating the title, year, authors, and 47248 publisher of the Document as given on its Title Page, then add 47249 an item describing the Modified Version as stated in the 47250 previous sentence. 47251 47252 J. Preserve the network location, if any, given in the Document 47253 for public access to a Transparent copy of the Document, and 47254 likewise the network locations given in the Document for 47255 previous versions it was based on. These may be placed in the 47256 "History" section. You may omit a network location for a work 47257 that was published at least four years before the Document 47258 itself, or if the original publisher of the version it refers 47259 to gives permission. 47260 47261 K. For any section Entitled "Acknowledgements" or "Dedications", 47262 Preserve the Title of the section, and preserve in the section 47263 all the substance and tone of each of the contributor 47264 acknowledgements and/or dedications given therein. 47265 47266 L. Preserve all the Invariant Sections of the Document, unaltered 47267 in their text and in their titles. Section numbers or the 47268 equivalent are not considered part of the section titles. 47269 47270 M. Delete any section Entitled "Endorsements". Such a section 47271 may not be included in the Modified Version. 47272 47273 N. Do not retitle any existing section to be Entitled 47274 "Endorsements" or to conflict in title with any Invariant 47275 Section. 47276 47277 O. Preserve any Warranty Disclaimers. 47278 47279 If the Modified Version includes new front-matter sections or 47280 appendices that qualify as Secondary Sections and contain no 47281 material copied from the Document, you may at your option designate 47282 some or all of these sections as invariant. To do this, add their 47283 titles to the list of Invariant Sections in the Modified Version's 47284 license notice. These titles must be distinct from any other 47285 section titles. 47286 47287 You may add a section Entitled "Endorsements", provided it contains 47288 nothing but endorsements of your Modified Version by various 47289 parties--for example, statements of peer review or that the text 47290 has been approved by an organization as the authoritative 47291 definition of a standard. 47292 47293 You may add a passage of up to five words as a Front-Cover Text, 47294 and a passage of up to 25 words as a Back-Cover Text, to the end of 47295 the list of Cover Texts in the Modified Version. Only one passage 47296 of Front-Cover Text and one of Back-Cover Text may be added by (or 47297 through arrangements made by) any one entity. If the Document 47298 already includes a cover text for the same cover, previously added 47299 by you or by arrangement made by the same entity you are acting on 47300 behalf of, you may not add another; but you may replace the old 47301 one, on explicit permission from the previous publisher that added 47302 the old one. 47303 47304 The author(s) and publisher(s) of the Document do not by this 47305 License give permission to use their names for publicity for or to 47306 assert or imply endorsement of any Modified Version. 47307 47308 5. COMBINING DOCUMENTS 47309 47310 You may combine the Document with other documents released under 47311 this License, under the terms defined in section 4 above for 47312 modified versions, provided that you include in the combination all 47313 of the Invariant Sections of all of the original documents, 47314 unmodified, and list them all as Invariant Sections of your 47315 combined work in its license notice, and that you preserve all 47316 their Warranty Disclaimers. 47317 47318 The combined work need only contain one copy of this License, and 47319 multiple identical Invariant Sections may be replaced with a single 47320 copy. If there are multiple Invariant Sections with the same name 47321 but different contents, make the title of each such section unique 47322 by adding at the end of it, in parentheses, the name of the 47323 original author or publisher of that section if known, or else a 47324 unique number. Make the same adjustment to the section titles in 47325 the list of Invariant Sections in the license notice of the 47326 combined work. 47327 47328 In the combination, you must combine any sections Entitled 47329 "History" in the various original documents, forming one section 47330 Entitled "History"; likewise combine any sections Entitled 47331 "Acknowledgements", and any sections Entitled "Dedications". You 47332 must delete all sections Entitled "Endorsements." 47333 47334 6. COLLECTIONS OF DOCUMENTS 47335 47336 You may make a collection consisting of the Document and other 47337 documents released under this License, and replace the individual 47338 copies of this License in the various documents with a single copy 47339 that is included in the collection, provided that you follow the 47340 rules of this License for verbatim copying of each of the documents 47341 in all other respects. 47342 47343 You may extract a single document from such a collection, and 47344 distribute it individually under this License, provided you insert 47345 a copy of this License into the extracted document, and follow this 47346 License in all other respects regarding verbatim copying of that 47347 document. 47348 47349 7. AGGREGATION WITH INDEPENDENT WORKS 47350 47351 A compilation of the Document or its derivatives with other 47352 separate and independent documents or works, in or on a volume of a 47353 storage or distribution medium, is called an "aggregate" if the 47354 copyright resulting from the compilation is not used to limit the 47355 legal rights of the compilation's users beyond what the individual 47356 works permit. When the Document is included in an aggregate, this 47357 License does not apply to the other works in the aggregate which 47358 are not themselves derivative works of the Document. 47359 47360 If the Cover Text requirement of section 3 is applicable to these 47361 copies of the Document, then if the Document is less than one half 47362 of the entire aggregate, the Document's Cover Texts may be placed 47363 on covers that bracket the Document within the aggregate, or the 47364 electronic equivalent of covers if the Document is in electronic 47365 form. Otherwise they must appear on printed covers that bracket 47366 the whole aggregate. 47367 47368 8. TRANSLATION 47369 47370 Translation is considered a kind of modification, so you may 47371 distribute translations of the Document under the terms of section 47372 4. Replacing Invariant Sections with translations requires special 47373 permission from their copyright holders, but you may include 47374 translations of some or all Invariant Sections in addition to the 47375 original versions of these Invariant Sections. You may include a 47376 translation of this License, and all the license notices in the 47377 Document, and any Warranty Disclaimers, provided that you also 47378 include the original English version of this License and the 47379 original versions of those notices and disclaimers. In case of a 47380 disagreement between the translation and the original version of 47381 this License or a notice or disclaimer, the original version will 47382 prevail. 47383 47384 If a section in the Document is Entitled "Acknowledgements", 47385 "Dedications", or "History", the requirement (section 4) to 47386 Preserve its Title (section 1) will typically require changing the 47387 actual title. 47388 47389 9. TERMINATION 47390 47391 You may not copy, modify, sublicense, or distribute the Document 47392 except as expressly provided under this License. Any attempt 47393 otherwise to copy, modify, sublicense, or distribute it is void, 47394 and will automatically terminate your rights under this License. 47395 47396 However, if you cease all violation of this License, then your 47397 license from a particular copyright holder is reinstated (a) 47398 provisionally, unless and until the copyright holder explicitly and 47399 finally terminates your license, and (b) permanently, if the 47400 copyright holder fails to notify you of the violation by some 47401 reasonable means prior to 60 days after the cessation. 47402 47403 Moreover, your license from a particular copyright holder is 47404 reinstated permanently if the copyright holder notifies you of the 47405 violation by some reasonable means, this is the first time you have 47406 received notice of violation of this License (for any work) from 47407 that copyright holder, and you cure the violation prior to 30 days 47408 after your receipt of the notice. 47409 47410 Termination of your rights under this section does not terminate 47411 the licenses of parties who have received copies or rights from you 47412 under this License. If your rights have been terminated and not 47413 permanently reinstated, receipt of a copy of some or all of the 47414 same material does not give you any rights to use it. 47415 47416 10. FUTURE REVISIONS OF THIS LICENSE 47417 47418 The Free Software Foundation may publish new, revised versions of 47419 the GNU Free Documentation License from time to time. Such new 47420 versions will be similar in spirit to the present version, but may 47421 differ in detail to address new problems or concerns. See 47422 <http://www.gnu.org/copyleft/>. 47423 47424 Each version of the License is given a distinguishing version 47425 number. If the Document specifies that a particular numbered 47426 version of this License "or any later version" applies to it, you 47427 have the option of following the terms and conditions either of 47428 that specified version or of any later version that has been 47429 published (not as a draft) by the Free Software Foundation. If the 47430 Document does not specify a version number of this License, you may 47431 choose any version ever published (not as a draft) by the Free 47432 Software Foundation. If the Document specifies that a proxy can 47433 decide which future versions of this License can be used, that 47434 proxy's public statement of acceptance of a version permanently 47435 authorizes you to choose that version for the Document. 47436 47437 11. RELICENSING 47438 47439 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 47440 World Wide Web server that publishes copyrightable works and also 47441 provides prominent facilities for anybody to edit those works. A 47442 public wiki that anybody can edit is an example of such a server. 47443 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 47444 site means any set of copyrightable works thus published on the MMC 47445 site. 47446 47447 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 47448 license published by Creative Commons Corporation, a not-for-profit 47449 corporation with a principal place of business in San Francisco, 47450 California, as well as future copyleft versions of that license 47451 published by that same organization. 47452 47453 "Incorporate" means to publish or republish a Document, in whole or 47454 in part, as part of another Document. 47455 47456 An MMC is "eligible for relicensing" if it is licensed under this 47457 License, and if all works that were first published under this 47458 License somewhere other than this MMC, and subsequently 47459 incorporated in whole or in part into the MMC, (1) had no cover 47460 texts or invariant sections, and (2) were thus incorporated prior 47461 to November 1, 2008. 47462 47463 The operator of an MMC Site may republish an MMC contained in the 47464 site under CC-BY-SA on the same site at any time before August 1, 47465 2009, provided the MMC is eligible for relicensing. 47466 47467ADDENDUM: How to use this License for your documents 47468==================================================== 47469 47470To use this License in a document you have written, include a copy of 47471the License in the document and put the following copyright and license 47472notices just after the title page: 47473 47474 Copyright (C) YEAR YOUR NAME. 47475 Permission is granted to copy, distribute and/or modify this document 47476 under the terms of the GNU Free Documentation License, Version 1.3 47477 or any later version published by the Free Software Foundation; 47478 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 47479 Texts. A copy of the license is included in the section entitled ``GNU 47480 Free Documentation License''. 47481 47482 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 47483replace the "with...Texts." line with this: 47484 47485 with the Invariant Sections being LIST THEIR TITLES, with 47486 the Front-Cover Texts being LIST, and with the Back-Cover Texts 47487 being LIST. 47488 47489 If you have Invariant Sections without Cover Texts, or some other 47490combination of the three, merge those two alternatives to suit the 47491situation. 47492 47493 If your document contains nontrivial examples of program code, we 47494recommend releasing these examples in parallel under your choice of free 47495software license, such as the GNU General Public License, to permit 47496their use in free software. 47497 47498 47499File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 47500 47501Contributors to GCC 47502******************* 47503 47504The GCC project would like to thank its many contributors. Without them 47505the project would not have been nearly as successful as it has been. 47506Any omissions in this list are accidental. Feel free to contact 47507<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 47508some of your contributions are not listed. Please keep this list in 47509alphabetical order. 47510 47511 * Analog Devices helped implement the support for complex data types 47512 and iterators. 47513 47514 * John David Anglin for threading-related fixes and improvements to 47515 libstdc++-v3, and the HP-UX port. 47516 47517 * James van Artsdalen wrote the code that makes efficient use of the 47518 Intel 80387 register stack. 47519 47520 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 47521 Series port. 47522 47523 * Alasdair Baird for various bug fixes. 47524 47525 * Giovanni Bajo for analyzing lots of complicated C++ problem 47526 reports. 47527 47528 * Peter Barada for his work to improve code generation for new 47529 ColdFire cores. 47530 47531 * Gerald Baumgartner added the signature extension to the C++ front 47532 end. 47533 47534 * Godmar Back for his Java improvements and encouragement. 47535 47536 * Scott Bambrough for help porting the Java compiler. 47537 47538 * Wolfgang Bangerth for processing tons of bug reports. 47539 47540 * Jon Beniston for his Microsoft Windows port of Java and port to 47541 Lattice Mico32. 47542 47543 * Daniel Berlin for better DWARF 2 support, faster/better 47544 optimizations, improved alias analysis, plus migrating GCC to 47545 Bugzilla. 47546 47547 * Geoff Berry for his Java object serialization work and various 47548 patches. 47549 47550 * David Binderman tests weekly snapshots of GCC trunk against Fedora 47551 Rawhide for several architectures. 47552 47553 * Laurynas Biveinis for memory management work and DJGPP port fixes. 47554 47555 * Uros Bizjak for the implementation of x87 math built-in functions 47556 and for various middle end and i386 back end improvements and bug 47557 fixes. 47558 47559 * Eric Blake for helping to make GCJ and libgcj conform to the 47560 specifications. 47561 47562 * Janne Blomqvist for contributions to GNU Fortran. 47563 47564 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 47565 other Java work. 47566 47567 * Segher Boessenkool for helping maintain the PowerPC port and the 47568 instruction combiner plus various contributions to the middle end. 47569 47570 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 47571 miscellaneous clean-ups. 47572 47573 * Steven Bosscher for integrating the GNU Fortran front end into GCC 47574 and for contributing to the tree-ssa branch. 47575 47576 * Eric Botcazou for fixing middle- and backend bugs left and right. 47577 47578 * Per Bothner for his direction via the steering committee and 47579 various improvements to the infrastructure for supporting new 47580 languages. Chill front end implementation. Initial 47581 implementations of cpplib, fix-header, config.guess, libio, and 47582 past C++ library (libg++) maintainer. Dreaming up, designing and 47583 implementing much of GCJ. 47584 47585 * Devon Bowen helped port GCC to the Tahoe. 47586 47587 * Don Bowman for mips-vxworks contributions. 47588 47589 * James Bowman for the FT32 port. 47590 47591 * Dave Brolley for work on cpplib and Chill. 47592 47593 * Paul Brook for work on the ARM architecture and maintaining GNU 47594 Fortran. 47595 47596 * Robert Brown implemented the support for Encore 32000 systems. 47597 47598 * Christian Bruel for improvements to local store elimination. 47599 47600 * Herman A.J. ten Brugge for various fixes. 47601 47602 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 47603 FAQ. 47604 47605 * Joe Buck for his direction via the steering committee from its 47606 creation to 2013. 47607 47608 * Iain Buclaw for the D frontend. 47609 47610 * Craig Burley for leadership of the G77 Fortran effort. 47611 47612 * Tobias Burnus for contributions to GNU Fortran. 47613 47614 * Stephan Buys for contributing Doxygen notes for libstdc++. 47615 47616 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 47617 to the C++ strings, streambufs and formatted I/O, hard detective 47618 work on the frustrating localization issues, and keeping up with 47619 the problem reports. 47620 47621 * John Carr for his alias work, SPARC hacking, infrastructure 47622 improvements, previous contributions to the steering committee, 47623 loop optimizations, etc. 47624 47625 * Stephane Carrez for 68HC11 and 68HC12 ports. 47626 47627 * Steve Chamberlain for support for the Renesas SH and H8 processors 47628 and the PicoJava processor, and for GCJ config fixes. 47629 47630 * Glenn Chambers for help with the GCJ FAQ. 47631 47632 * John-Marc Chandonia for various libgcj patches. 47633 47634 * Denis Chertykov for contributing and maintaining the AVR port, the 47635 first GCC port for an 8-bit architecture. 47636 47637 * Kito Cheng for his work on the RISC-V port, including bringing up 47638 the test suite and maintenance. 47639 47640 * Scott Christley for his Objective-C contributions. 47641 47642 * Eric Christopher for his Java porting help and clean-ups. 47643 47644 * Branko Cibej for more warning contributions. 47645 47646 * The GNU Classpath project for all of their merged runtime code. 47647 47648 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 47649 '--help', and other random hacking. 47650 47651 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 47652 47653 * R. Kelley Cook for making GCC buildable from a read-only directory 47654 as well as other miscellaneous build process and documentation 47655 clean-ups. 47656 47657 * Ralf Corsepius for SH testing and minor bug fixing. 47658 47659 * Franc,ois-Xavier Coudert for contributions to GNU Fortran. 47660 47661 * Stan Cox for care and feeding of the x86 port and lots of behind 47662 the scenes hacking. 47663 47664 * Alex Crain provided changes for the 3b1. 47665 47666 * Ian Dall for major improvements to the NS32k port. 47667 47668 * Paul Dale for his work to add uClinux platform support to the m68k 47669 backend. 47670 47671 * Palmer Dabbelt for his work maintaining the RISC-V port. 47672 47673 * Dario Dariol contributed the four varieties of sample programs that 47674 print a copy of their source. 47675 47676 * Russell Davidson for fstream and stringstream fixes in libstdc++. 47677 47678 * Bud Davis for work on the G77 and GNU Fortran compilers. 47679 47680 * Mo DeJong for GCJ and libgcj bug fixes. 47681 47682 * Jerry DeLisle for contributions to GNU Fortran. 47683 47684 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 47685 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 47686 47687 * Arnaud Desitter for helping to debug GNU Fortran. 47688 47689 * Gabriel Dos Reis for contributions to G++, contributions and 47690 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 47691 including 'valarray<>', 'complex<>', maintaining the numerics 47692 library (including that pesky '<limits>' :-) and keeping up-to-date 47693 anything to do with numbers. 47694 47695 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 47696 ISO C99 support, CFG dumping support, etc., plus support of the C++ 47697 runtime libraries including for all kinds of C interface issues, 47698 contributing and maintaining 'complex<>', sanity checking and 47699 disbursement, configuration architecture, libio maintenance, and 47700 early math work. 47701 47702 * Franc,ois Dumont for his work on libstdc++-v3, especially 47703 maintaining and improving 'debug-mode' and associative and 47704 unordered containers. 47705 47706 * Zdenek Dvorak for a new loop unroller and various fixes. 47707 47708 * Michael Eager for his work on the Xilinx MicroBlaze port. 47709 47710 * Richard Earnshaw for his ongoing work with the ARM. 47711 47712 * David Edelsohn for his direction via the steering committee, 47713 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 47714 loop changes, doing the entire AIX port of libstdc++ with his bare 47715 hands, and for ensuring GCC properly keeps working on AIX. 47716 47717 * Kevin Ediger for the floating point formatting of num_put::do_put 47718 in libstdc++. 47719 47720 * Phil Edwards for libstdc++ work including configuration hackery, 47721 documentation maintainer, chief breaker of the web pages, the 47722 occasional iostream bug fix, and work on shared library symbol 47723 versioning. 47724 47725 * Paul Eggert for random hacking all over GCC. 47726 47727 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 47728 configuration support for locales and fstream-related fixes. 47729 47730 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 47731 iostreams. 47732 47733 * Christian Ehrhardt for dealing with bug reports. 47734 47735 * Ben Elliston for his work to move the Objective-C runtime into its 47736 own subdirectory and for his work on autoconf. 47737 47738 * Revital Eres for work on the PowerPC 750CL port. 47739 47740 * Marc Espie for OpenBSD support. 47741 47742 * Doug Evans for much of the global optimization framework, arc, 47743 m32r, and SPARC work. 47744 47745 * Christopher Faylor for his work on the Cygwin port and for caring 47746 and feeding the gcc.gnu.org box and saving its users tons of spam. 47747 47748 * Fred Fish for BeOS support and Ada fixes. 47749 47750 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 47751 47752 * Peter Gerwinski for various bug fixes and the Pascal front end. 47753 47754 * Kaveh R. Ghazi for his direction via the steering committee, 47755 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 47756 on a plethora of platforms. Kaveh extends his gratitude to the 47757 CAIP Center at Rutgers University for providing him with computing 47758 resources to work on Free Software from the late 1980s to 2010. 47759 47760 * John Gilmore for a donation to the FSF earmarked improving GNU 47761 Java. 47762 47763 * Judy Goldberg for c++ contributions. 47764 47765 * Torbjorn Granlund for various fixes and the c-torture testsuite, 47766 multiply- and divide-by-constant optimization, improved long long 47767 support, improved leaf function register allocation, and his 47768 direction via the steering committee. 47769 47770 * Jonny Grant for improvements to 'collect2's' '--help' 47771 documentation. 47772 47773 * Anthony Green for his '-Os' contributions, the moxie port, and Java 47774 front end work. 47775 47776 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 47777 code. 47778 47779 * Michael K. Gschwind contributed the port to the PDP-11. 47780 47781 * Richard Biener for his ongoing middle-end contributions and bug 47782 fixes and for release management. 47783 47784 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 47785 the support for DWARF 1 symbolic debugging information, and much of 47786 the support for System V Release 4. He has also worked heavily on 47787 the Intel 386 and 860 support. 47788 47789 * Sumanth Gundapaneni for contributing the CR16 port. 47790 47791 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 47792 GCSE. 47793 47794 * Bruno Haible for improvements in the runtime overhead for EH, new 47795 warnings and assorted bug fixes. 47796 47797 * Andrew Haley for his amazing Java compiler and library efforts. 47798 47799 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 47800 series 300. 47801 47802 * Michael Hayes for various thankless work he's done trying to get 47803 the c30/c40 ports functional. Lots of loop and unroll improvements 47804 and fixes. 47805 47806 * Dara Hazeghi for wading through myriads of target-specific bug 47807 reports. 47808 47809 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 47810 47811 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 47812 work, loop opts, and generally fixing lots of old problems we've 47813 ignored for years, flow rewrite and lots of further stuff, 47814 including reviewing tons of patches. 47815 47816 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 47817 various fixes. 47818 47819 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 47820 contributed the support for the Sony NEWS machine. 47821 47822 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 47823 various fixes. 47824 47825 * Katherine Holcomb for work on GNU Fortran. 47826 47827 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 47828 of testing and bug fixing, particularly of GCC configury code. 47829 47830 * Steve Holmgren for MachTen patches. 47831 47832 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 47833 47834 * Jan Hubicka for his x86 port improvements. 47835 47836 * Falk Hueffner for working on C and optimization bug reports. 47837 47838 * Bernardo Innocenti for his m68k work, including merging of ColdFire 47839 improvements and uClinux support. 47840 47841 * Christian Iseli for various bug fixes. 47842 47843 * Kamil Iskra for general m68k hacking. 47844 47845 * Lee Iverson for random fixes and MIPS testing. 47846 47847 * Balaji V. Iyer for Cilk+ development and merging. 47848 47849 * Andreas Jaeger for testing and benchmarking of GCC and various bug 47850 fixes. 47851 47852 * Martin Jambor for his work on inter-procedural optimizations, the 47853 switch conversion pass, and scalar replacement of aggregates. 47854 47855 * Jakub Jelinek for his SPARC work and sibling call optimizations as 47856 well as lots of bug fixes and test cases, and for improving the 47857 Java build system. 47858 47859 * Janis Johnson for ia64 testing and fixes, her quality improvement 47860 sidetracks, and web page maintenance. 47861 47862 * Kean Johnston for SCO OpenServer support and various fixes. 47863 47864 * Tim Josling for the sample language treelang based originally on 47865 Richard Kenner's "toy" language. 47866 47867 * Nicolai Josuttis for additional libstdc++ documentation. 47868 47869 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 47870 target. 47871 47872 * Steven G. Kargl for work on GNU Fortran. 47873 47874 * David Kashtan of SRI adapted GCC to VMS. 47875 47876 * Ryszard Kabatek for many, many libstdc++ bug fixes and 47877 optimizations of strings, especially member functions, and for 47878 auto_ptr fixes. 47879 47880 * Geoffrey Keating for his ongoing work to make the PPC work for 47881 GNU/Linux and his automatic regression tester. 47882 47883 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 47884 work in just about every part of libstdc++. 47885 47886 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 47887 MIL-STD-1750A. 47888 47889 * Richard Kenner of the New York University Ultracomputer Research 47890 Laboratory wrote the machine descriptions for the AMD 29000, the 47891 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 47892 support for instruction attributes. He also made changes to better 47893 support RISC processors including changes to common subexpression 47894 elimination, strength reduction, function calling sequence 47895 handling, and condition code support, in addition to generalizing 47896 the code for frame pointer elimination and delay slot scheduling. 47897 Richard Kenner was also the head maintainer of GCC for several 47898 years. 47899 47900 * Mumit Khan for various contributions to the Cygwin and Mingw32 47901 ports and maintaining binary releases for Microsoft Windows hosts, 47902 and for massive libstdc++ porting work to Cygwin/Mingw32. 47903 47904 * Robin Kirkham for cpu32 support. 47905 47906 * Mark Klein for PA improvements. 47907 47908 * Thomas Koenig for various bug fixes. 47909 47910 * Bruce Korb for the new and improved fixincludes code. 47911 47912 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 47913 effort. 47914 47915 * Maxim Kuvyrkov for contributions to the instruction scheduler, the 47916 Android and m68k/Coldfire ports, and optimizations. 47917 47918 * Charles LaBrec contributed the support for the Integrated Solutions 47919 68020 system. 47920 47921 * Asher Langton and Mike Kumbera for contributing Cray pointer 47922 support to GNU Fortran, and for other GNU Fortran improvements. 47923 47924 * Jeff Law for his direction via the steering committee, coordinating 47925 the entire egcs project and GCC 2.95, rolling out snapshots and 47926 releases, handling merges from GCC2, reviewing tons of patches that 47927 might have fallen through the cracks else, and random but extensive 47928 hacking. 47929 47930 * Walter Lee for work on the TILE-Gx and TILEPro ports. 47931 47932 * Marc Lehmann for his direction via the steering committee and 47933 helping with analysis and improvements of x86 performance. 47934 47935 * Victor Leikehman for work on GNU Fortran. 47936 47937 * Ted Lemon wrote parts of the RTL reader and printer. 47938 47939 * Kriang Lerdsuwanakij for C++ improvements including template as 47940 template parameter support, and many C++ fixes. 47941 47942 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 47943 and random work on the Java front end. 47944 47945 * Alain Lichnewsky ported GCC to the MIPS CPU. 47946 47947 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 47948 and patches. 47949 47950 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 47951 47952 * Chen Liqin for various S+core related fixes/improvement, and for 47953 maintaining the S+core port. 47954 47955 * Martin Liska for his work on identical code folding, the 47956 sanitizers, HSA, general bug fixing and for running automated 47957 regression testing of GCC and reporting numerous bugs. 47958 47959 * Weiwen Liu for testing and various bug fixes. 47960 47961 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 47962 diagnostics fixes and improvements. 47963 47964 * Dave Love for his ongoing work with the Fortran front end and 47965 runtime libraries. 47966 47967 * Martin von Lo"wis for internal consistency checking infrastructure, 47968 various C++ improvements including namespace support, and tons of 47969 assistance with libstdc++/compiler merges. 47970 47971 * H.J. Lu for his previous contributions to the steering committee, 47972 many x86 bug reports, prototype patches, and keeping the GNU/Linux 47973 ports working. 47974 47975 * Greg McGary for random fixes and (someday) bounded pointers. 47976 47977 * Andrew MacLeod for his ongoing work in building a real EH system, 47978 various code generation improvements, work on the global optimizer, 47979 etc. 47980 47981 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 47982 hacking improvements to compile-time performance, overall knowledge 47983 and direction in the area of instruction scheduling, design and 47984 implementation of the automaton based instruction scheduler and 47985 design and implementation of the integrated and local register 47986 allocators. 47987 47988 * David Malcolm for his work on improving GCC diagnostics, JIT, 47989 self-tests and unit testing. 47990 47991 * Bob Manson for his behind the scenes work on dejagnu. 47992 47993 * John Marino for contributing the DragonFly BSD port. 47994 47995 * Philip Martin for lots of libstdc++ string and vector iterator 47996 fixes and improvements, and string clean up and testsuites. 47997 47998 * Michael Matz for his work on dominance tree discovery, the x86-64 47999 port, link-time optimization framework and general optimization 48000 improvements. 48001 48002 * All of the Mauve project contributors for Java test code. 48003 48004 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 48005 48006 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 48007 48008 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 48009 powerpc, haifa, ECOFF debug support, and other assorted hacking. 48010 48011 * Jason Merrill for his direction via the steering committee and 48012 leading the G++ effort. 48013 48014 * Martin Michlmayr for testing GCC on several architectures using the 48015 entire Debian archive. 48016 48017 * David Miller for his direction via the steering committee, lots of 48018 SPARC work, improvements in jump.c and interfacing with the Linux 48019 kernel developers. 48020 48021 * Gary Miller ported GCC to Charles River Data Systems machines. 48022 48023 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 48024 the entire libstdc++ testsuite namespace-compatible. 48025 48026 * Mark Mitchell for his direction via the steering committee, 48027 mountains of C++ work, load/store hoisting out of loops, alias 48028 analysis improvements, ISO C 'restrict' support, and serving as 48029 release manager from 2000 to 2011. 48030 48031 * Alan Modra for various GNU/Linux bits and testing. 48032 48033 * Toon Moene for his direction via the steering committee, Fortran 48034 maintenance, and his ongoing work to make us make Fortran run fast. 48035 48036 * Jason Molenda for major help in the care and feeding of all the 48037 services on the gcc.gnu.org (formerly egcs.cygnus.com) 48038 machine--mail, web services, ftp services, etc etc. Doing all this 48039 work on scrap paper and the backs of envelopes would have been... 48040 difficult. 48041 48042 * Catherine Moore for fixing various ugly problems we have sent her 48043 way, including the haifa bug which was killing the Alpha & PowerPC 48044 Linux kernels. 48045 48046 * Mike Moreton for his various Java patches. 48047 48048 * David Mosberger-Tang for various Alpha improvements, and for the 48049 initial IA-64 port. 48050 48051 * Stephen Moshier contributed the floating point emulator that 48052 assists in cross-compilation and permits support for floating point 48053 numbers wider than 64 bits and for ISO C99 support. 48054 48055 * Bill Moyer for his behind the scenes work on various issues. 48056 48057 * Philippe De Muyter for his work on the m68k port. 48058 48059 * Joseph S. Myers for his work on the PDP-11 port, format checking 48060 and ISO C99 support, and continuous emphasis on (and contributions 48061 to) documentation. 48062 48063 * Nathan Myers for his work on libstdc++-v3: architecture and 48064 authorship through the first three snapshots, including 48065 implementation of locale infrastructure, string, shadow C headers, 48066 and the initial project documentation (DESIGN, CHECKLIST, and so 48067 forth). Later, more work on MT-safe string and shadow headers. 48068 48069 * Felix Natter for documentation on porting libstdc++. 48070 48071 * Nathanael Nerode for cleaning up the configuration/build process. 48072 48073 * NeXT, Inc. donated the front end that supports the Objective-C 48074 language. 48075 48076 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 48077 search engine setup, various documentation fixes and other small 48078 fixes. 48079 48080 * Geoff Noer for his work on getting cygwin native builds working. 48081 48082 * Vegard Nossum for running automated regression testing of GCC and 48083 reporting numerous bugs. 48084 48085 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 48086 tracking web pages, GIMPLE tuples, and assorted fixes. 48087 48088 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 48089 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 48090 infrastructure improvements. 48091 48092 * Alexandre Oliva for various build infrastructure improvements, 48093 scripts and amazing testing work, including keeping libtool issues 48094 sane and happy. 48095 48096 * Stefan Olsson for work on mt_alloc. 48097 48098 * Melissa O'Neill for various NeXT fixes. 48099 48100 * Rainer Orth for random MIPS work, including improvements to GCC's 48101 o32 ABI support, improvements to dejagnu's MIPS support, Java 48102 configuration clean-ups and porting work, and maintaining the IRIX, 48103 Solaris 2, and Tru64 UNIX ports. 48104 48105 * Steven Pemberton for his contribution of 'enquire' which allowed 48106 GCC to determine various properties of the floating point unit and 48107 generate 'float.h' in older versions of GCC. 48108 48109 * Hartmut Penner for work on the s390 port. 48110 48111 * Paul Petersen wrote the machine description for the Alliant FX/8. 48112 48113 * Alexandre Petit-Bianco for implementing much of the Java compiler 48114 and continued Java maintainership. 48115 48116 * Matthias Pfaller for major improvements to the NS32k port. 48117 48118 * Gerald Pfeifer for his direction via the steering committee, 48119 pointing out lots of problems we need to solve, maintenance of the 48120 web pages, and taking care of documentation maintenance in general. 48121 48122 * Marek Polacek for his work on the C front end, the sanitizers and 48123 general bug fixing. 48124 48125 * Andrew Pinski for processing bug reports by the dozen. 48126 48127 * Ovidiu Predescu for his work on the Objective-C front end and 48128 runtime libraries. 48129 48130 * Jerry Quinn for major performance improvements in C++ formatted 48131 I/O. 48132 48133 * Ken Raeburn for various improvements to checker, MIPS ports and 48134 various cleanups in the compiler. 48135 48136 * Rolf W. Rasmussen for hacking on AWT. 48137 48138 * David Reese of Sun Microsystems contributed to the Solaris on 48139 PowerPC port. 48140 48141 * John Regehr for running automated regression testing of GCC and 48142 reporting numerous bugs. 48143 48144 * Volker Reichelt for running automated regression testing of GCC and 48145 reporting numerous bugs and for keeping up with the problem 48146 reports. 48147 48148 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 48149 hacking and developing and maintaining the Epiphany port. 48150 48151 * Loren J. Rittle for improvements to libstdc++-v3 including the 48152 FreeBSD port, threading fixes, thread-related configury changes, 48153 critical threading documentation, and solutions to really tricky 48154 I/O problems, as well as keeping GCC properly working on FreeBSD 48155 and continuous testing. 48156 48157 * Craig Rodrigues for processing tons of bug reports. 48158 48159 * Ola Ro"nnerup for work on mt_alloc. 48160 48161 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 48162 48163 * David Ronis inspired and encouraged Craig to rewrite the G77 48164 documentation in texinfo format by contributing a first pass at a 48165 translation of the old 'g77-0.5.16/f/DOC' file. 48166 48167 * Ken Rose for fixes to GCC's delay slot filling code. 48168 48169 * Ira Rosen for her contributions to the auto-vectorizer. 48170 48171 * Paul Rubin wrote most of the preprocessor. 48172 48173 * Pe'tur Runo'lfsson for major performance improvements in C++ 48174 formatted I/O and large file support in C++ filebuf. 48175 48176 * Chip Salzenberg for libstdc++ patches and improvements to locales, 48177 traits, Makefiles, libio, libtool hackery, and "long long" support. 48178 48179 * Juha Sarlin for improvements to the H8 code generator. 48180 48181 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 48182 300. 48183 48184 * Roger Sayle for improvements to constant folding and GCC's RTL 48185 optimizers as well as for fixing numerous bugs. 48186 48187 * Bradley Schatz for his work on the GCJ FAQ. 48188 48189 * Peter Schauer wrote the code to allow debugging to work on the 48190 Alpha. 48191 48192 * William Schelter did most of the work on the Intel 80386 support. 48193 48194 * Tobias Schlu"ter for work on GNU Fortran. 48195 48196 * Bernd Schmidt for various code generation improvements and major 48197 work in the reload pass, serving as release manager for GCC 2.95.3, 48198 and work on the Blackfin and C6X ports. 48199 48200 * Peter Schmid for constant testing of libstdc++--especially 48201 application testing, going above and beyond what was requested for 48202 the release criteria--and libstdc++ header file tweaks. 48203 48204 * Jason Schroeder for jcf-dump patches. 48205 48206 * Andreas Schwab for his work on the m68k port. 48207 48208 * Lars Segerlund for work on GNU Fortran. 48209 48210 * Dodji Seketeli for numerous C++ bug fixes and debug info 48211 improvements. 48212 48213 * Tim Shen for major work on '<regex>'. 48214 48215 * Joel Sherrill for his direction via the steering committee, RTEMS 48216 contributions and RTEMS testing. 48217 48218 * Nathan Sidwell for many C++ fixes/improvements. 48219 48220 * Jeffrey Siegal for helping RMS with the original design of GCC, 48221 some code which handles the parse tree and RTL data structures, 48222 constant folding and help with the original VAX & m68k ports. 48223 48224 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 48225 from the LWG (thereby keeping GCC in line with updates from the 48226 ISO). 48227 48228 * Franz Sirl for his ongoing work with making the PPC port stable for 48229 GNU/Linux. 48230 48231 * Andrey Slepuhin for assorted AIX hacking. 48232 48233 * Trevor Smigiel for contributing the SPU port. 48234 48235 * Christopher Smith did the port for Convex machines. 48236 48237 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 48238 Retired from GCC maintainership August 2010, having mentored two 48239 new maintainers into the role. 48240 48241 * Randy Smith finished the Sun FPA support. 48242 48243 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 48244 functions, '<random>', and various improvements to C++11 features. 48245 48246 * Scott Snyder for queue, iterator, istream, and string fixes and 48247 libstdc++ testsuite entries. Also for providing the patch to G77 48248 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 48249 'LOGICAL*1'. 48250 48251 * Zdenek Sojka for running automated regression testing of GCC and 48252 reporting numerous bugs. 48253 48254 * Arseny Solokha for running automated regression testing of GCC and 48255 reporting numerous bugs. 48256 48257 * Jayant Sonar for contributing the CR16 port. 48258 48259 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 48260 48261 * Richard Stallman, for writing the original GCC and launching the 48262 GNU project. 48263 48264 * Jan Stein of the Chalmers Computer Society provided support for 48265 Genix, as well as part of the 32000 machine description. 48266 48267 * Gerhard Steinmetz for running automated regression testing of GCC 48268 and reporting numerous bugs. 48269 48270 * Nigel Stephens for various mips16 related fixes/improvements. 48271 48272 * Jonathan Stone wrote the machine description for the Pyramid 48273 computer. 48274 48275 * Graham Stott for various infrastructure improvements. 48276 48277 * John Stracke for his Java HTTP protocol fixes. 48278 48279 * Mike Stump for his Elxsi port, G++ contributions over the years and 48280 more recently his vxworks contributions 48281 48282 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 48283 48284 * Zhendong Su for running automated regression testing of GCC and 48285 reporting numerous bugs. 48286 48287 * Chengnian Sun for running automated regression testing of GCC and 48288 reporting numerous bugs. 48289 48290 * Shigeya Suzuki for this fixes for the bsdi platforms. 48291 48292 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 48293 support, general configury hacking, fixincludes, etc. 48294 48295 * Holger Teutsch provided the support for the Clipper CPU. 48296 48297 * Gary Thomas for his ongoing work to make the PPC work for 48298 GNU/Linux. 48299 48300 * Paul Thomas for contributions to GNU Fortran. 48301 48302 * Philipp Thomas for random bug fixes throughout the compiler 48303 48304 * Jason Thorpe for thread support in libstdc++ on NetBSD. 48305 48306 * Kresten Krab Thorup wrote the run time support for the Objective-C 48307 language and the fantastic Java bytecode interpreter. 48308 48309 * Michael Tiemann for random bug fixes, the first instruction 48310 scheduler, initial C++ support, function integration, NS32k, SPARC 48311 and M88k machine description work, delay slot scheduling. 48312 48313 * Andreas Tobler for his work porting libgcj to Darwin. 48314 48315 * Teemu Torma for thread safe exception handling support. 48316 48317 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 48318 definitions, and of the VAX machine description. 48319 48320 * Daniel Towner and Hariharan Sandanagobalane contributed and 48321 maintain the picoChip port. 48322 48323 * Tom Tromey for internationalization support and for his many Java 48324 contributions and libgcj maintainership. 48325 48326 * Lassi Tuura for improvements to config.guess to determine HP 48327 processor types. 48328 48329 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 48330 48331 * Andy Vaught for the design and initial implementation of the GNU 48332 Fortran front end. 48333 48334 * Brent Verner for work with the libstdc++ cshadow files and their 48335 associated configure steps. 48336 48337 * Todd Vierling for contributions for NetBSD ports. 48338 48339 * Andrew Waterman for contributing the RISC-V port, as well as 48340 maintaining it. 48341 48342 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 48343 guidance and maintaining libstdc++. 48344 48345 * Dean Wakerley for converting the install documentation from HTML to 48346 texinfo in time for GCC 3.0. 48347 48348 * Krister Walfridsson for random bug fixes. 48349 48350 * Feng Wang for contributions to GNU Fortran. 48351 48352 * Stephen M. Webb for time and effort on making libstdc++ shadow 48353 files work with the tricky Solaris 8+ headers, and for pushing the 48354 build-time header tree. Also, for starting and driving the 48355 '<regex>' effort. 48356 48357 * John Wehle for various improvements for the x86 code generator, 48358 related infrastructure improvements to help x86 code generation, 48359 value range propagation and other work, WE32k port. 48360 48361 * Ulrich Weigand for work on the s390 port. 48362 48363 * Janus Weil for contributions to GNU Fortran. 48364 48365 * Zack Weinberg for major work on cpplib and various other bug fixes. 48366 48367 * Matt Welsh for help with Linux Threads support in GCJ. 48368 48369 * Urban Widmark for help fixing java.io. 48370 48371 * Mark Wielaard for new Java library code and his work integrating 48372 with Classpath. 48373 48374 * Dale Wiles helped port GCC to the Tahoe. 48375 48376 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 48377 48378 * Jim Wilson for his direction via the steering committee, tackling 48379 hard problems in various places that nobody else wanted to work on, 48380 strength reduction and other loop optimizations. 48381 48382 * Paul Woegerer and Tal Agmon for the CRX port. 48383 48384 * Carlo Wood for various fixes. 48385 48386 * Tom Wood for work on the m88k port. 48387 48388 * Chung-Ju Wu for his work on the Andes NDS32 port. 48389 48390 * Canqun Yang for work on GNU Fortran. 48391 48392 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 48393 description for the Tron architecture (specifically, the Gmicro). 48394 48395 * Kevin Zachmann helped port GCC to the Tahoe. 48396 48397 * Ayal Zaks for Swing Modulo Scheduling (SMS). 48398 48399 * Qirun Zhang for running automated regression testing of GCC and 48400 reporting numerous bugs. 48401 48402 * Xiaoqiang Zhang for work on GNU Fortran. 48403 48404 * Gilles Zunino for help porting Java to Irix. 48405 48406 The following people are recognized for their contributions to GNAT, 48407the Ada front end of GCC: 48408 * Bernard Banner 48409 48410 * Romain Berrendonner 48411 48412 * Geert Bosch 48413 48414 * Emmanuel Briot 48415 48416 * Joel Brobecker 48417 48418 * Ben Brosgol 48419 48420 * Vincent Celier 48421 48422 * Arnaud Charlet 48423 48424 * Chien Chieng 48425 48426 * Cyrille Comar 48427 48428 * Cyrille Crozes 48429 48430 * Robert Dewar 48431 48432 * Gary Dismukes 48433 48434 * Robert Duff 48435 48436 * Ed Falis 48437 48438 * Ramon Fernandez 48439 48440 * Sam Figueroa 48441 48442 * Vasiliy Fofanov 48443 48444 * Michael Friess 48445 48446 * Franco Gasperoni 48447 48448 * Ted Giering 48449 48450 * Matthew Gingell 48451 48452 * Laurent Guerby 48453 48454 * Jerome Guitton 48455 48456 * Olivier Hainque 48457 48458 * Jerome Hugues 48459 48460 * Hristian Kirtchev 48461 48462 * Jerome Lambourg 48463 48464 * Bruno Leclerc 48465 48466 * Albert Lee 48467 48468 * Sean McNeil 48469 48470 * Javier Miranda 48471 48472 * Laurent Nana 48473 48474 * Pascal Obry 48475 48476 * Dong-Ik Oh 48477 48478 * Laurent Pautet 48479 48480 * Brett Porter 48481 48482 * Thomas Quinot 48483 48484 * Nicolas Roche 48485 48486 * Pat Rogers 48487 48488 * Jose Ruiz 48489 48490 * Douglas Rupp 48491 48492 * Sergey Rybin 48493 48494 * Gail Schenker 48495 48496 * Ed Schonberg 48497 48498 * Nicolas Setton 48499 48500 * Samuel Tardieu 48501 48502 The following people are recognized for their contributions of new 48503features, bug reports, testing and integration of classpath/libgcj for 48504GCC version 4.1: 48505 * Lillian Angel for 'JTree' implementation and lots Free Swing 48506 additions and bug fixes. 48507 48508 * Wolfgang Baer for 'GapContent' bug fixes. 48509 48510 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 48511 event fixes, lots of Free Swing work including 'JTable' editing. 48512 48513 * Stuart Ballard for RMI constant fixes. 48514 48515 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 48516 48517 * Gary Benson for 'MessageFormat' fixes. 48518 48519 * Daniel Bonniot for 'Serialization' fixes. 48520 48521 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 48522 and 'DOM xml:id' support. 48523 48524 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 48525 48526 * Archie Cobbs for build fixes, VM interface updates, 48527 'URLClassLoader' updates. 48528 48529 * Kelley Cook for build fixes. 48530 48531 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 48532 48533 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 48534 improvements. 48535 48536 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 48537 2D support. Lots of imageio framework additions, lots of AWT and 48538 Free Swing bug fixes. 48539 48540 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 48541 fixes, better 'Proxy' support, bug fixes and IKVM integration. 48542 48543 * Santiago Gala for 'AccessControlContext' fixes. 48544 48545 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 48546 improvements. 48547 48548 * David Gilbert for 'basic' and 'metal' icon and plaf support and 48549 lots of documenting, Lots of Free Swing and metal theme additions. 48550 'MetalIconFactory' implementation. 48551 48552 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 48553 48554 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 48555 build speedups. 48556 48557 * Kim Ho for 'JFileChooser' implementation. 48558 48559 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 48560 'Serialization' fixes, 'Properties' XML support and generic branch 48561 work, VMIntegration guide update. 48562 48563 * Bastiaan Huisman for 'TimeZone' bug fixing. 48564 48565 * Andreas Jaeger for mprec updates. 48566 48567 * Paul Jenner for better '-Werror' support. 48568 48569 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 48570 48571 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 48572 bug fixes all over. Lots of Free Swing work including styled text. 48573 48574 * Simon Kitching for 'String' cleanups and optimization suggestions. 48575 48576 * Michael Koch for configuration fixes, 'Locale' updates, bug and 48577 build fixes. 48578 48579 * Guilhem Lavaux for configuration, thread and channel fixes and 48580 Kaffe integration. JCL native 'Pointer' updates. Logger bug 48581 fixes. 48582 48583 * David Lichteblau for JCL support library global/local reference 48584 cleanups. 48585 48586 * Aaron Luchko for JDWP updates and documentation fixes. 48587 48588 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 48589 features. 48590 48591 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 48592 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 48593 and implementing the Qt4 peers. 48594 48595 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 48596 'SystemLogger' and 'FileHandler' rotate implementations, NIO 48597 'FileChannel.map' support, security and policy updates. 48598 48599 * Bryce McKinlay for RMI work. 48600 48601 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 48602 testing and documenting. 48603 48604 * Kalle Olavi Niemitalo for build fixes. 48605 48606 * Rainer Orth for build fixes. 48607 48608 * Andrew Overholt for 'File' locking fixes. 48609 48610 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 48611 48612 * Olga Rodimina for 'MenuSelectionManager' implementation. 48613 48614 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 48615 48616 * Julian Scheid for documentation updates and gjdoc support. 48617 48618 * Christian Schlichtherle for zip fixes and cleanups. 48619 48620 * Robert Schuster for documentation updates and beans fixes, 48621 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 48622 and URL, AWT and Free Swing bug fixes. 48623 48624 * Keith Seitz for lots of JDWP work. 48625 48626 * Christian Thalinger for 64-bit cleanups, Configuration and VM 48627 interface fixes and 'CACAO' integration, 'fdlibm' updates. 48628 48629 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 48630 48631 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 48632 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 48633 48634 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 48635 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 48636 'GdkPixbugDecoder' updates. 48637 48638 * Tom Tromey for Eclipse integration, generics work, lots of bug 48639 fixes and gcj integration including coordinating The Big Merge. 48640 48641 * Mark Wielaard for bug fixes, packaging and release management, 48642 'Clipboard' implementation, system call interrupts and network 48643 timeouts and 'GdkPixpufDecoder' fixes. 48644 48645 In addition to the above, all of which also contributed time and energy 48646in testing GCC, we would like to thank the following for their 48647contributions to testing: 48648 48649 * Michael Abd-El-Malek 48650 48651 * Thomas Arend 48652 48653 * Bonzo Armstrong 48654 48655 * Steven Ashe 48656 48657 * Chris Baldwin 48658 48659 * David Billinghurst 48660 48661 * Jim Blandy 48662 48663 * Stephane Bortzmeyer 48664 48665 * Horst von Brand 48666 48667 * Frank Braun 48668 48669 * Rodney Brown 48670 48671 * Sidney Cadot 48672 48673 * Bradford Castalia 48674 48675 * Robert Clark 48676 48677 * Jonathan Corbet 48678 48679 * Ralph Doncaster 48680 48681 * Richard Emberson 48682 48683 * Levente Farkas 48684 48685 * Graham Fawcett 48686 48687 * Mark Fernyhough 48688 48689 * Robert A. French 48690 48691 * Jo"rgen Freyh 48692 48693 * Mark K. Gardner 48694 48695 * Charles-Antoine Gauthier 48696 48697 * Yung Shing Gene 48698 48699 * David Gilbert 48700 48701 * Simon Gornall 48702 48703 * Fred Gray 48704 48705 * John Griffin 48706 48707 * Patrik Hagglund 48708 48709 * Phil Hargett 48710 48711 * Amancio Hasty 48712 48713 * Takafumi Hayashi 48714 48715 * Bryan W. Headley 48716 48717 * Kevin B. Hendricks 48718 48719 * Joep Jansen 48720 48721 * Christian Joensson 48722 48723 * Michel Kern 48724 48725 * David Kidd 48726 48727 * Tobias Kuipers 48728 48729 * Anand Krishnaswamy 48730 48731 * A. O. V. Le Blanc 48732 48733 * llewelly 48734 48735 * Damon Love 48736 48737 * Brad Lucier 48738 48739 * Matthias Klose 48740 48741 * Martin Knoblauch 48742 48743 * Rick Lutowski 48744 48745 * Jesse Macnish 48746 48747 * Stefan Morrell 48748 48749 * Anon A. Mous 48750 48751 * Matthias Mueller 48752 48753 * Pekka Nikander 48754 48755 * Rick Niles 48756 48757 * Jon Olson 48758 48759 * Magnus Persson 48760 48761 * Chris Pollard 48762 48763 * Richard Polton 48764 48765 * Derk Reefman 48766 48767 * David Rees 48768 48769 * Paul Reilly 48770 48771 * Tom Reilly 48772 48773 * Torsten Rueger 48774 48775 * Danny Sadinoff 48776 48777 * Marc Schifer 48778 48779 * Erik Schnetter 48780 48781 * Wayne K. Schroll 48782 48783 * David Schuler 48784 48785 * Vin Shelton 48786 48787 * Tim Souder 48788 48789 * Adam Sulmicki 48790 48791 * Bill Thorson 48792 48793 * George Talbot 48794 48795 * Pedro A. M. Vazquez 48796 48797 * Gregory Warnes 48798 48799 * Ian Watson 48800 48801 * David E. Young 48802 48803 * And many others 48804 48805 And finally we'd like to thank everyone who uses the compiler, provides 48806feedback and generally reminds us why we're doing this work in the first 48807place. 48808 48809 48810File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 48811 48812Option Index 48813************ 48814 48815GCC's command line options are indexed here without any initial '-' or 48816'--'. Where an option has both positive and negative forms (such as 48817'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 48818indexed under the most appropriate form; it may sometimes be useful to 48819look up both forms. 48820 48821[index] 48822* Menu: 48823 48824* fltrans: Internal flags. (line 18) 48825* fltrans-output-list: Internal flags. (line 23) 48826* fresolution: Internal flags. (line 27) 48827* fwpa: Internal flags. (line 9) 48828* msoft-float: Soft float library routines. 48829 (line 6) 48830 48831 48832File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 48833 48834Concept Index 48835************* 48836 48837[index] 48838* Menu: 48839 48840* '!' in constraint: Multi-Alternative. (line 48) 48841* '#' in constraint: Modifiers. (line 78) 48842* '#' in template: Output Template. (line 66) 48843* #pragma: Misc. (line 420) 48844* '$' in constraint: Multi-Alternative. (line 57) 48845* '%' in constraint: Modifiers. (line 52) 48846* % in GTY option: GTY Options. (line 18) 48847* '%' in template: Output Template. (line 6) 48848* '&' in constraint: Modifiers. (line 25) 48849* (gimple: Logical Operators. (line 169) 48850* (gimple <1>: Logical Operators. (line 173) 48851* (gimple <2>: Logical Operators. (line 177) 48852* (gimple_stmt_iterator: GIMPLE API. (line 30) 48853* (nil): RTL Objects. (line 73) 48854* '*' in constraint: Modifiers. (line 83) 48855* '*' in template: Output Statement. (line 29) 48856* *gimple_build_asm_vec: 'GIMPLE_ASM'. (line 6) 48857* *gimple_build_assign: 'GIMPLE_ASSIGN'. (line 6) 48858* *gimple_build_assign <1>: 'GIMPLE_ASSIGN'. (line 18) 48859* *gimple_build_assign <2>: 'GIMPLE_ASSIGN'. (line 29) 48860* *gimple_build_assign <3>: 'GIMPLE_ASSIGN'. (line 35) 48861* *gimple_build_bind: 'GIMPLE_BIND'. (line 6) 48862* *gimple_build_call: 'GIMPLE_CALL'. (line 6) 48863* *gimple_build_call_from_tree: 'GIMPLE_CALL'. (line 15) 48864* *gimple_build_call_vec: 'GIMPLE_CALL'. (line 25) 48865* *gimple_build_catch: 'GIMPLE_CATCH'. (line 6) 48866* *gimple_build_cond: 'GIMPLE_COND'. (line 6) 48867* *gimple_build_cond_from_tree: 'GIMPLE_COND'. (line 14) 48868* *gimple_build_debug_bind: 'GIMPLE_DEBUG'. (line 6) 48869* *gimple_build_eh_filter: 'GIMPLE_EH_FILTER'. (line 6) 48870* *gimple_build_goto: 'GIMPLE_GOTO'. (line 6) 48871* *gimple_build_label: 'GIMPLE_LABEL'. (line 6) 48872* *gimple_build_omp_atomic_load: 'GIMPLE_OMP_ATOMIC_LOAD'. 48873 (line 6) 48874* *gimple_build_omp_atomic_store: 'GIMPLE_OMP_ATOMIC_STORE'. 48875 (line 6) 48876* *gimple_build_omp_continue: 'GIMPLE_OMP_CONTINUE'. 48877 (line 6) 48878* *gimple_build_omp_critical: 'GIMPLE_OMP_CRITICAL'. 48879 (line 6) 48880* *gimple_build_omp_for: 'GIMPLE_OMP_FOR'. (line 6) 48881* *gimple_build_omp_parallel: 'GIMPLE_OMP_PARALLEL'. 48882 (line 6) 48883* *gimple_build_omp_sections: 'GIMPLE_OMP_SECTIONS'. 48884 (line 6) 48885* *gimple_build_omp_single: 'GIMPLE_OMP_SINGLE'. 48886 (line 6) 48887* *gimple_build_resx: 'GIMPLE_RESX'. (line 6) 48888* *gimple_build_return: 'GIMPLE_RETURN'. (line 6) 48889* *gimple_build_switch: 'GIMPLE_SWITCH'. (line 6) 48890* *gimple_build_try: 'GIMPLE_TRY'. (line 6) 48891* '+' in constraint: Modifiers. (line 12) 48892* '-fsection-anchors': Special Accessors. (line 117) 48893* '-fsection-anchors' <1>: Anchored Addresses. (line 6) 48894* '/c' in RTL dump: Flags. (line 230) 48895* '/f' in RTL dump: Flags. (line 238) 48896* '/i' in RTL dump: Flags. (line 283) 48897* '/j' in RTL dump: Flags. (line 295) 48898* '/s' in RTL dump: Flags. (line 254) 48899* '/u' in RTL dump: Flags. (line 307) 48900* '/v' in RTL dump: Flags. (line 339) 48901* '0' in constraint: Simple Constraints. (line 128) 48902* '<' in constraint: Simple Constraints. (line 47) 48903* '=' in constraint: Modifiers. (line 8) 48904* '>' in constraint: Simple Constraints. (line 59) 48905* '?' in constraint: Multi-Alternative. (line 42) 48906* '@' in instruction pattern names: Parameterized Names. 48907 (line 6) 48908* \: Output Template. (line 46) 48909* '^' in constraint: Multi-Alternative. (line 53) 48910* __absvdi2: Integer library routines. 48911 (line 106) 48912* __absvsi2: Integer library routines. 48913 (line 105) 48914* __addda3: Fixed-point fractional library routines. 48915 (line 44) 48916* __adddf3: Soft float library routines. 48917 (line 22) 48918* __adddq3: Fixed-point fractional library routines. 48919 (line 31) 48920* __addha3: Fixed-point fractional library routines. 48921 (line 41) 48922* __addhq3: Fixed-point fractional library routines. 48923 (line 29) 48924* __addqq3: Fixed-point fractional library routines. 48925 (line 27) 48926* __addsa3: Fixed-point fractional library routines. 48927 (line 43) 48928* __addsf3: Soft float library routines. 48929 (line 21) 48930* __addsq3: Fixed-point fractional library routines. 48931 (line 30) 48932* __addta3: Fixed-point fractional library routines. 48933 (line 45) 48934* __addtf3: Soft float library routines. 48935 (line 23) 48936* __adduda3: Fixed-point fractional library routines. 48937 (line 51) 48938* __addudq3: Fixed-point fractional library routines. 48939 (line 39) 48940* __adduha3: Fixed-point fractional library routines. 48941 (line 47) 48942* __adduhq3: Fixed-point fractional library routines. 48943 (line 35) 48944* __adduqq3: Fixed-point fractional library routines. 48945 (line 33) 48946* __addusa3: Fixed-point fractional library routines. 48947 (line 49) 48948* __addusq3: Fixed-point fractional library routines. 48949 (line 37) 48950* __adduta3: Fixed-point fractional library routines. 48951 (line 53) 48952* __addvdi3: Integer library routines. 48953 (line 110) 48954* __addvsi3: Integer library routines. 48955 (line 109) 48956* __addxf3: Soft float library routines. 48957 (line 25) 48958* __ashlda3: Fixed-point fractional library routines. 48959 (line 350) 48960* __ashldi3: Integer library routines. 48961 (line 13) 48962* __ashldq3: Fixed-point fractional library routines. 48963 (line 338) 48964* __ashlha3: Fixed-point fractional library routines. 48965 (line 348) 48966* __ashlhq3: Fixed-point fractional library routines. 48967 (line 336) 48968* __ashlqq3: Fixed-point fractional library routines. 48969 (line 335) 48970* __ashlsa3: Fixed-point fractional library routines. 48971 (line 349) 48972* __ashlsi3: Integer library routines. 48973 (line 12) 48974* __ashlsq3: Fixed-point fractional library routines. 48975 (line 337) 48976* __ashlta3: Fixed-point fractional library routines. 48977 (line 351) 48978* __ashlti3: Integer library routines. 48979 (line 14) 48980* __ashluda3: Fixed-point fractional library routines. 48981 (line 357) 48982* __ashludq3: Fixed-point fractional library routines. 48983 (line 346) 48984* __ashluha3: Fixed-point fractional library routines. 48985 (line 353) 48986* __ashluhq3: Fixed-point fractional library routines. 48987 (line 342) 48988* __ashluqq3: Fixed-point fractional library routines. 48989 (line 340) 48990* __ashlusa3: Fixed-point fractional library routines. 48991 (line 355) 48992* __ashlusq3: Fixed-point fractional library routines. 48993 (line 344) 48994* __ashluta3: Fixed-point fractional library routines. 48995 (line 359) 48996* __ashrda3: Fixed-point fractional library routines. 48997 (line 370) 48998* __ashrdi3: Integer library routines. 48999 (line 18) 49000* __ashrdq3: Fixed-point fractional library routines. 49001 (line 366) 49002* __ashrha3: Fixed-point fractional library routines. 49003 (line 368) 49004* __ashrhq3: Fixed-point fractional library routines. 49005 (line 364) 49006* __ashrqq3: Fixed-point fractional library routines. 49007 (line 363) 49008* __ashrsa3: Fixed-point fractional library routines. 49009 (line 369) 49010* __ashrsi3: Integer library routines. 49011 (line 17) 49012* __ashrsq3: Fixed-point fractional library routines. 49013 (line 365) 49014* __ashrta3: Fixed-point fractional library routines. 49015 (line 371) 49016* __ashrti3: Integer library routines. 49017 (line 19) 49018* __bid_adddd3: Decimal float library routines. 49019 (line 23) 49020* __bid_addsd3: Decimal float library routines. 49021 (line 19) 49022* __bid_addtd3: Decimal float library routines. 49023 (line 27) 49024* __bid_divdd3: Decimal float library routines. 49025 (line 66) 49026* __bid_divsd3: Decimal float library routines. 49027 (line 62) 49028* __bid_divtd3: Decimal float library routines. 49029 (line 70) 49030* __bid_eqdd2: Decimal float library routines. 49031 (line 258) 49032* __bid_eqsd2: Decimal float library routines. 49033 (line 256) 49034* __bid_eqtd2: Decimal float library routines. 49035 (line 260) 49036* __bid_extendddtd2: Decimal float library routines. 49037 (line 91) 49038* __bid_extendddtf: Decimal float library routines. 49039 (line 139) 49040* __bid_extendddxf: Decimal float library routines. 49041 (line 133) 49042* __bid_extenddfdd: Decimal float library routines. 49043 (line 146) 49044* __bid_extenddftd: Decimal float library routines. 49045 (line 106) 49046* __bid_extendsddd2: Decimal float library routines. 49047 (line 87) 49048* __bid_extendsddf: Decimal float library routines. 49049 (line 127) 49050* __bid_extendsdtd2: Decimal float library routines. 49051 (line 89) 49052* __bid_extendsdtf: Decimal float library routines. 49053 (line 137) 49054* __bid_extendsdxf: Decimal float library routines. 49055 (line 131) 49056* __bid_extendsfdd: Decimal float library routines. 49057 (line 102) 49058* __bid_extendsfsd: Decimal float library routines. 49059 (line 144) 49060* __bid_extendsftd: Decimal float library routines. 49061 (line 104) 49062* __bid_extendtftd: Decimal float library routines. 49063 (line 148) 49064* __bid_extendxftd: Decimal float library routines. 49065 (line 108) 49066* __bid_fixdddi: Decimal float library routines. 49067 (line 169) 49068* __bid_fixddsi: Decimal float library routines. 49069 (line 161) 49070* __bid_fixsddi: Decimal float library routines. 49071 (line 167) 49072* __bid_fixsdsi: Decimal float library routines. 49073 (line 159) 49074* __bid_fixtddi: Decimal float library routines. 49075 (line 171) 49076* __bid_fixtdsi: Decimal float library routines. 49077 (line 163) 49078* __bid_fixunsdddi: Decimal float library routines. 49079 (line 186) 49080* __bid_fixunsddsi: Decimal float library routines. 49081 (line 177) 49082* __bid_fixunssddi: Decimal float library routines. 49083 (line 184) 49084* __bid_fixunssdsi: Decimal float library routines. 49085 (line 175) 49086* __bid_fixunstddi: Decimal float library routines. 49087 (line 188) 49088* __bid_fixunstdsi: Decimal float library routines. 49089 (line 179) 49090* __bid_floatdidd: Decimal float library routines. 49091 (line 204) 49092* __bid_floatdisd: Decimal float library routines. 49093 (line 202) 49094* __bid_floatditd: Decimal float library routines. 49095 (line 206) 49096* __bid_floatsidd: Decimal float library routines. 49097 (line 195) 49098* __bid_floatsisd: Decimal float library routines. 49099 (line 193) 49100* __bid_floatsitd: Decimal float library routines. 49101 (line 197) 49102* __bid_floatunsdidd: Decimal float library routines. 49103 (line 222) 49104* __bid_floatunsdisd: Decimal float library routines. 49105 (line 220) 49106* __bid_floatunsditd: Decimal float library routines. 49107 (line 224) 49108* __bid_floatunssidd: Decimal float library routines. 49109 (line 213) 49110* __bid_floatunssisd: Decimal float library routines. 49111 (line 211) 49112* __bid_floatunssitd: Decimal float library routines. 49113 (line 215) 49114* __bid_gedd2: Decimal float library routines. 49115 (line 276) 49116* __bid_gesd2: Decimal float library routines. 49117 (line 274) 49118* __bid_getd2: Decimal float library routines. 49119 (line 278) 49120* __bid_gtdd2: Decimal float library routines. 49121 (line 303) 49122* __bid_gtsd2: Decimal float library routines. 49123 (line 301) 49124* __bid_gttd2: Decimal float library routines. 49125 (line 305) 49126* __bid_ledd2: Decimal float library routines. 49127 (line 294) 49128* __bid_lesd2: Decimal float library routines. 49129 (line 292) 49130* __bid_letd2: Decimal float library routines. 49131 (line 296) 49132* __bid_ltdd2: Decimal float library routines. 49133 (line 285) 49134* __bid_ltsd2: Decimal float library routines. 49135 (line 283) 49136* __bid_lttd2: Decimal float library routines. 49137 (line 287) 49138* __bid_muldd3: Decimal float library routines. 49139 (line 52) 49140* __bid_mulsd3: Decimal float library routines. 49141 (line 48) 49142* __bid_multd3: Decimal float library routines. 49143 (line 56) 49144* __bid_nedd2: Decimal float library routines. 49145 (line 267) 49146* __bid_negdd2: Decimal float library routines. 49147 (line 77) 49148* __bid_negsd2: Decimal float library routines. 49149 (line 75) 49150* __bid_negtd2: Decimal float library routines. 49151 (line 79) 49152* __bid_nesd2: Decimal float library routines. 49153 (line 265) 49154* __bid_netd2: Decimal float library routines. 49155 (line 269) 49156* __bid_subdd3: Decimal float library routines. 49157 (line 37) 49158* __bid_subsd3: Decimal float library routines. 49159 (line 33) 49160* __bid_subtd3: Decimal float library routines. 49161 (line 41) 49162* __bid_truncdddf: Decimal float library routines. 49163 (line 152) 49164* __bid_truncddsd2: Decimal float library routines. 49165 (line 93) 49166* __bid_truncddsf: Decimal float library routines. 49167 (line 123) 49168* __bid_truncdfsd: Decimal float library routines. 49169 (line 110) 49170* __bid_truncsdsf: Decimal float library routines. 49171 (line 150) 49172* __bid_trunctddd2: Decimal float library routines. 49173 (line 97) 49174* __bid_trunctddf: Decimal float library routines. 49175 (line 129) 49176* __bid_trunctdsd2: Decimal float library routines. 49177 (line 95) 49178* __bid_trunctdsf: Decimal float library routines. 49179 (line 125) 49180* __bid_trunctdtf: Decimal float library routines. 49181 (line 154) 49182* __bid_trunctdxf: Decimal float library routines. 49183 (line 135) 49184* __bid_trunctfdd: Decimal float library routines. 49185 (line 118) 49186* __bid_trunctfsd: Decimal float library routines. 49187 (line 114) 49188* __bid_truncxfdd: Decimal float library routines. 49189 (line 116) 49190* __bid_truncxfsd: Decimal float library routines. 49191 (line 112) 49192* __bid_unorddd2: Decimal float library routines. 49193 (line 234) 49194* __bid_unordsd2: Decimal float library routines. 49195 (line 232) 49196* __bid_unordtd2: Decimal float library routines. 49197 (line 236) 49198* __bswapdi2: Integer library routines. 49199 (line 161) 49200* __bswapsi2: Integer library routines. 49201 (line 160) 49202* __builtin_classify_type: Varargs. (line 48) 49203* __builtin_next_arg: Varargs. (line 39) 49204* __builtin_saveregs: Varargs. (line 22) 49205* __clear_cache: Miscellaneous routines. 49206 (line 9) 49207* __clzdi2: Integer library routines. 49208 (line 130) 49209* __clzsi2: Integer library routines. 49210 (line 129) 49211* __clzti2: Integer library routines. 49212 (line 131) 49213* __cmpda2: Fixed-point fractional library routines. 49214 (line 450) 49215* __cmpdf2: Soft float library routines. 49216 (line 163) 49217* __cmpdi2: Integer library routines. 49218 (line 86) 49219* __cmpdq2: Fixed-point fractional library routines. 49220 (line 439) 49221* __cmpha2: Fixed-point fractional library routines. 49222 (line 448) 49223* __cmphq2: Fixed-point fractional library routines. 49224 (line 437) 49225* __cmpqq2: Fixed-point fractional library routines. 49226 (line 436) 49227* __cmpsa2: Fixed-point fractional library routines. 49228 (line 449) 49229* __cmpsf2: Soft float library routines. 49230 (line 162) 49231* __cmpsq2: Fixed-point fractional library routines. 49232 (line 438) 49233* __cmpta2: Fixed-point fractional library routines. 49234 (line 451) 49235* __cmptf2: Soft float library routines. 49236 (line 164) 49237* __cmpti2: Integer library routines. 49238 (line 87) 49239* __cmpuda2: Fixed-point fractional library routines. 49240 (line 456) 49241* __cmpudq2: Fixed-point fractional library routines. 49242 (line 446) 49243* __cmpuha2: Fixed-point fractional library routines. 49244 (line 453) 49245* __cmpuhq2: Fixed-point fractional library routines. 49246 (line 443) 49247* __cmpuqq2: Fixed-point fractional library routines. 49248 (line 441) 49249* __cmpusa2: Fixed-point fractional library routines. 49250 (line 455) 49251* __cmpusq2: Fixed-point fractional library routines. 49252 (line 444) 49253* __cmputa2: Fixed-point fractional library routines. 49254 (line 458) 49255* __CTOR_LIST__: Initialization. (line 25) 49256* __ctzdi2: Integer library routines. 49257 (line 137) 49258* __ctzsi2: Integer library routines. 49259 (line 136) 49260* __ctzti2: Integer library routines. 49261 (line 138) 49262* __divda3: Fixed-point fractional library routines. 49263 (line 226) 49264* __divdc3: Soft float library routines. 49265 (line 250) 49266* __divdf3: Soft float library routines. 49267 (line 47) 49268* __divdi3: Integer library routines. 49269 (line 24) 49270* __divdq3: Fixed-point fractional library routines. 49271 (line 221) 49272* __divha3: Fixed-point fractional library routines. 49273 (line 223) 49274* __divhq3: Fixed-point fractional library routines. 49275 (line 219) 49276* __divqq3: Fixed-point fractional library routines. 49277 (line 217) 49278* __divsa3: Fixed-point fractional library routines. 49279 (line 225) 49280* __divsc3: Soft float library routines. 49281 (line 248) 49282* __divsf3: Soft float library routines. 49283 (line 46) 49284* __divsi3: Integer library routines. 49285 (line 23) 49286* __divsq3: Fixed-point fractional library routines. 49287 (line 220) 49288* __divta3: Fixed-point fractional library routines. 49289 (line 227) 49290* __divtc3: Soft float library routines. 49291 (line 252) 49292* __divtf3: Soft float library routines. 49293 (line 48) 49294* __divti3: Integer library routines. 49295 (line 25) 49296* __divxc3: Soft float library routines. 49297 (line 254) 49298* __divxf3: Soft float library routines. 49299 (line 50) 49300* __dpd_adddd3: Decimal float library routines. 49301 (line 21) 49302* __dpd_addsd3: Decimal float library routines. 49303 (line 17) 49304* __dpd_addtd3: Decimal float library routines. 49305 (line 25) 49306* __dpd_divdd3: Decimal float library routines. 49307 (line 64) 49308* __dpd_divsd3: Decimal float library routines. 49309 (line 60) 49310* __dpd_divtd3: Decimal float library routines. 49311 (line 68) 49312* __dpd_eqdd2: Decimal float library routines. 49313 (line 257) 49314* __dpd_eqsd2: Decimal float library routines. 49315 (line 255) 49316* __dpd_eqtd2: Decimal float library routines. 49317 (line 259) 49318* __dpd_extendddtd2: Decimal float library routines. 49319 (line 90) 49320* __dpd_extendddtf: Decimal float library routines. 49321 (line 138) 49322* __dpd_extendddxf: Decimal float library routines. 49323 (line 132) 49324* __dpd_extenddfdd: Decimal float library routines. 49325 (line 145) 49326* __dpd_extenddftd: Decimal float library routines. 49327 (line 105) 49328* __dpd_extendsddd2: Decimal float library routines. 49329 (line 86) 49330* __dpd_extendsddf: Decimal float library routines. 49331 (line 126) 49332* __dpd_extendsdtd2: Decimal float library routines. 49333 (line 88) 49334* __dpd_extendsdtf: Decimal float library routines. 49335 (line 136) 49336* __dpd_extendsdxf: Decimal float library routines. 49337 (line 130) 49338* __dpd_extendsfdd: Decimal float library routines. 49339 (line 101) 49340* __dpd_extendsfsd: Decimal float library routines. 49341 (line 143) 49342* __dpd_extendsftd: Decimal float library routines. 49343 (line 103) 49344* __dpd_extendtftd: Decimal float library routines. 49345 (line 147) 49346* __dpd_extendxftd: Decimal float library routines. 49347 (line 107) 49348* __dpd_fixdddi: Decimal float library routines. 49349 (line 168) 49350* __dpd_fixddsi: Decimal float library routines. 49351 (line 160) 49352* __dpd_fixsddi: Decimal float library routines. 49353 (line 166) 49354* __dpd_fixsdsi: Decimal float library routines. 49355 (line 158) 49356* __dpd_fixtddi: Decimal float library routines. 49357 (line 170) 49358* __dpd_fixtdsi: Decimal float library routines. 49359 (line 162) 49360* __dpd_fixunsdddi: Decimal float library routines. 49361 (line 185) 49362* __dpd_fixunsddsi: Decimal float library routines. 49363 (line 176) 49364* __dpd_fixunssddi: Decimal float library routines. 49365 (line 183) 49366* __dpd_fixunssdsi: Decimal float library routines. 49367 (line 174) 49368* __dpd_fixunstddi: Decimal float library routines. 49369 (line 187) 49370* __dpd_fixunstdsi: Decimal float library routines. 49371 (line 178) 49372* __dpd_floatdidd: Decimal float library routines. 49373 (line 203) 49374* __dpd_floatdisd: Decimal float library routines. 49375 (line 201) 49376* __dpd_floatditd: Decimal float library routines. 49377 (line 205) 49378* __dpd_floatsidd: Decimal float library routines. 49379 (line 194) 49380* __dpd_floatsisd: Decimal float library routines. 49381 (line 192) 49382* __dpd_floatsitd: Decimal float library routines. 49383 (line 196) 49384* __dpd_floatunsdidd: Decimal float library routines. 49385 (line 221) 49386* __dpd_floatunsdisd: Decimal float library routines. 49387 (line 219) 49388* __dpd_floatunsditd: Decimal float library routines. 49389 (line 223) 49390* __dpd_floatunssidd: Decimal float library routines. 49391 (line 212) 49392* __dpd_floatunssisd: Decimal float library routines. 49393 (line 210) 49394* __dpd_floatunssitd: Decimal float library routines. 49395 (line 214) 49396* __dpd_gedd2: Decimal float library routines. 49397 (line 275) 49398* __dpd_gesd2: Decimal float library routines. 49399 (line 273) 49400* __dpd_getd2: Decimal float library routines. 49401 (line 277) 49402* __dpd_gtdd2: Decimal float library routines. 49403 (line 302) 49404* __dpd_gtsd2: Decimal float library routines. 49405 (line 300) 49406* __dpd_gttd2: Decimal float library routines. 49407 (line 304) 49408* __dpd_ledd2: Decimal float library routines. 49409 (line 293) 49410* __dpd_lesd2: Decimal float library routines. 49411 (line 291) 49412* __dpd_letd2: Decimal float library routines. 49413 (line 295) 49414* __dpd_ltdd2: Decimal float library routines. 49415 (line 284) 49416* __dpd_ltsd2: Decimal float library routines. 49417 (line 282) 49418* __dpd_lttd2: Decimal float library routines. 49419 (line 286) 49420* __dpd_muldd3: Decimal float library routines. 49421 (line 50) 49422* __dpd_mulsd3: Decimal float library routines. 49423 (line 46) 49424* __dpd_multd3: Decimal float library routines. 49425 (line 54) 49426* __dpd_nedd2: Decimal float library routines. 49427 (line 266) 49428* __dpd_negdd2: Decimal float library routines. 49429 (line 76) 49430* __dpd_negsd2: Decimal float library routines. 49431 (line 74) 49432* __dpd_negtd2: Decimal float library routines. 49433 (line 78) 49434* __dpd_nesd2: Decimal float library routines. 49435 (line 264) 49436* __dpd_netd2: Decimal float library routines. 49437 (line 268) 49438* __dpd_subdd3: Decimal float library routines. 49439 (line 35) 49440* __dpd_subsd3: Decimal float library routines. 49441 (line 31) 49442* __dpd_subtd3: Decimal float library routines. 49443 (line 39) 49444* __dpd_truncdddf: Decimal float library routines. 49445 (line 151) 49446* __dpd_truncddsd2: Decimal float library routines. 49447 (line 92) 49448* __dpd_truncddsf: Decimal float library routines. 49449 (line 122) 49450* __dpd_truncdfsd: Decimal float library routines. 49451 (line 109) 49452* __dpd_truncsdsf: Decimal float library routines. 49453 (line 149) 49454* __dpd_trunctddd2: Decimal float library routines. 49455 (line 96) 49456* __dpd_trunctddf: Decimal float library routines. 49457 (line 128) 49458* __dpd_trunctdsd2: Decimal float library routines. 49459 (line 94) 49460* __dpd_trunctdsf: Decimal float library routines. 49461 (line 124) 49462* __dpd_trunctdtf: Decimal float library routines. 49463 (line 153) 49464* __dpd_trunctdxf: Decimal float library routines. 49465 (line 134) 49466* __dpd_trunctfdd: Decimal float library routines. 49467 (line 117) 49468* __dpd_trunctfsd: Decimal float library routines. 49469 (line 113) 49470* __dpd_truncxfdd: Decimal float library routines. 49471 (line 115) 49472* __dpd_truncxfsd: Decimal float library routines. 49473 (line 111) 49474* __dpd_unorddd2: Decimal float library routines. 49475 (line 233) 49476* __dpd_unordsd2: Decimal float library routines. 49477 (line 231) 49478* __dpd_unordtd2: Decimal float library routines. 49479 (line 235) 49480* __DTOR_LIST__: Initialization. (line 25) 49481* __eqdf2: Soft float library routines. 49482 (line 193) 49483* __eqsf2: Soft float library routines. 49484 (line 192) 49485* __eqtf2: Soft float library routines. 49486 (line 194) 49487* __extenddftf2: Soft float library routines. 49488 (line 67) 49489* __extenddfxf2: Soft float library routines. 49490 (line 68) 49491* __extendsfdf2: Soft float library routines. 49492 (line 64) 49493* __extendsftf2: Soft float library routines. 49494 (line 65) 49495* __extendsfxf2: Soft float library routines. 49496 (line 66) 49497* __ffsdi2: Integer library routines. 49498 (line 143) 49499* __ffsti2: Integer library routines. 49500 (line 144) 49501* __fixdfdi: Soft float library routines. 49502 (line 87) 49503* __fixdfsi: Soft float library routines. 49504 (line 80) 49505* __fixdfti: Soft float library routines. 49506 (line 93) 49507* __fixsfdi: Soft float library routines. 49508 (line 86) 49509* __fixsfsi: Soft float library routines. 49510 (line 79) 49511* __fixsfti: Soft float library routines. 49512 (line 92) 49513* __fixtfdi: Soft float library routines. 49514 (line 88) 49515* __fixtfsi: Soft float library routines. 49516 (line 81) 49517* __fixtfti: Soft float library routines. 49518 (line 94) 49519* __fixunsdfdi: Soft float library routines. 49520 (line 107) 49521* __fixunsdfsi: Soft float library routines. 49522 (line 100) 49523* __fixunsdfti: Soft float library routines. 49524 (line 114) 49525* __fixunssfdi: Soft float library routines. 49526 (line 106) 49527* __fixunssfsi: Soft float library routines. 49528 (line 99) 49529* __fixunssfti: Soft float library routines. 49530 (line 113) 49531* __fixunstfdi: Soft float library routines. 49532 (line 108) 49533* __fixunstfsi: Soft float library routines. 49534 (line 101) 49535* __fixunstfti: Soft float library routines. 49536 (line 115) 49537* __fixunsxfdi: Soft float library routines. 49538 (line 109) 49539* __fixunsxfsi: Soft float library routines. 49540 (line 102) 49541* __fixunsxfti: Soft float library routines. 49542 (line 116) 49543* __fixxfdi: Soft float library routines. 49544 (line 89) 49545* __fixxfsi: Soft float library routines. 49546 (line 82) 49547* __fixxfti: Soft float library routines. 49548 (line 95) 49549* __floatdidf: Soft float library routines. 49550 (line 127) 49551* __floatdisf: Soft float library routines. 49552 (line 126) 49553* __floatditf: Soft float library routines. 49554 (line 128) 49555* __floatdixf: Soft float library routines. 49556 (line 129) 49557* __floatsidf: Soft float library routines. 49558 (line 121) 49559* __floatsisf: Soft float library routines. 49560 (line 120) 49561* __floatsitf: Soft float library routines. 49562 (line 122) 49563* __floatsixf: Soft float library routines. 49564 (line 123) 49565* __floattidf: Soft float library routines. 49566 (line 133) 49567* __floattisf: Soft float library routines. 49568 (line 132) 49569* __floattitf: Soft float library routines. 49570 (line 134) 49571* __floattixf: Soft float library routines. 49572 (line 135) 49573* __floatundidf: Soft float library routines. 49574 (line 145) 49575* __floatundisf: Soft float library routines. 49576 (line 144) 49577* __floatunditf: Soft float library routines. 49578 (line 146) 49579* __floatundixf: Soft float library routines. 49580 (line 147) 49581* __floatunsidf: Soft float library routines. 49582 (line 139) 49583* __floatunsisf: Soft float library routines. 49584 (line 138) 49585* __floatunsitf: Soft float library routines. 49586 (line 140) 49587* __floatunsixf: Soft float library routines. 49588 (line 141) 49589* __floatuntidf: Soft float library routines. 49590 (line 151) 49591* __floatuntisf: Soft float library routines. 49592 (line 150) 49593* __floatuntitf: Soft float library routines. 49594 (line 152) 49595* __floatuntixf: Soft float library routines. 49596 (line 153) 49597* __fractdadf: Fixed-point fractional library routines. 49598 (line 635) 49599* __fractdadi: Fixed-point fractional library routines. 49600 (line 632) 49601* __fractdadq: Fixed-point fractional library routines. 49602 (line 615) 49603* __fractdaha2: Fixed-point fractional library routines. 49604 (line 616) 49605* __fractdahi: Fixed-point fractional library routines. 49606 (line 630) 49607* __fractdahq: Fixed-point fractional library routines. 49608 (line 613) 49609* __fractdaqi: Fixed-point fractional library routines. 49610 (line 629) 49611* __fractdaqq: Fixed-point fractional library routines. 49612 (line 612) 49613* __fractdasa2: Fixed-point fractional library routines. 49614 (line 617) 49615* __fractdasf: Fixed-point fractional library routines. 49616 (line 634) 49617* __fractdasi: Fixed-point fractional library routines. 49618 (line 631) 49619* __fractdasq: Fixed-point fractional library routines. 49620 (line 614) 49621* __fractdata2: Fixed-point fractional library routines. 49622 (line 618) 49623* __fractdati: Fixed-point fractional library routines. 49624 (line 633) 49625* __fractdauda: Fixed-point fractional library routines. 49626 (line 626) 49627* __fractdaudq: Fixed-point fractional library routines. 49628 (line 622) 49629* __fractdauha: Fixed-point fractional library routines. 49630 (line 624) 49631* __fractdauhq: Fixed-point fractional library routines. 49632 (line 620) 49633* __fractdauqq: Fixed-point fractional library routines. 49634 (line 619) 49635* __fractdausa: Fixed-point fractional library routines. 49636 (line 625) 49637* __fractdausq: Fixed-point fractional library routines. 49638 (line 621) 49639* __fractdauta: Fixed-point fractional library routines. 49640 (line 627) 49641* __fractdfda: Fixed-point fractional library routines. 49642 (line 1024) 49643* __fractdfdq: Fixed-point fractional library routines. 49644 (line 1021) 49645* __fractdfha: Fixed-point fractional library routines. 49646 (line 1022) 49647* __fractdfhq: Fixed-point fractional library routines. 49648 (line 1019) 49649* __fractdfqq: Fixed-point fractional library routines. 49650 (line 1018) 49651* __fractdfsa: Fixed-point fractional library routines. 49652 (line 1023) 49653* __fractdfsq: Fixed-point fractional library routines. 49654 (line 1020) 49655* __fractdfta: Fixed-point fractional library routines. 49656 (line 1025) 49657* __fractdfuda: Fixed-point fractional library routines. 49658 (line 1032) 49659* __fractdfudq: Fixed-point fractional library routines. 49660 (line 1029) 49661* __fractdfuha: Fixed-point fractional library routines. 49662 (line 1030) 49663* __fractdfuhq: Fixed-point fractional library routines. 49664 (line 1027) 49665* __fractdfuqq: Fixed-point fractional library routines. 49666 (line 1026) 49667* __fractdfusa: Fixed-point fractional library routines. 49668 (line 1031) 49669* __fractdfusq: Fixed-point fractional library routines. 49670 (line 1028) 49671* __fractdfuta: Fixed-point fractional library routines. 49672 (line 1033) 49673* __fractdida: Fixed-point fractional library routines. 49674 (line 974) 49675* __fractdidq: Fixed-point fractional library routines. 49676 (line 971) 49677* __fractdiha: Fixed-point fractional library routines. 49678 (line 972) 49679* __fractdihq: Fixed-point fractional library routines. 49680 (line 969) 49681* __fractdiqq: Fixed-point fractional library routines. 49682 (line 968) 49683* __fractdisa: Fixed-point fractional library routines. 49684 (line 973) 49685* __fractdisq: Fixed-point fractional library routines. 49686 (line 970) 49687* __fractdita: Fixed-point fractional library routines. 49688 (line 975) 49689* __fractdiuda: Fixed-point fractional library routines. 49690 (line 982) 49691* __fractdiudq: Fixed-point fractional library routines. 49692 (line 979) 49693* __fractdiuha: Fixed-point fractional library routines. 49694 (line 980) 49695* __fractdiuhq: Fixed-point fractional library routines. 49696 (line 977) 49697* __fractdiuqq: Fixed-point fractional library routines. 49698 (line 976) 49699* __fractdiusa: Fixed-point fractional library routines. 49700 (line 981) 49701* __fractdiusq: Fixed-point fractional library routines. 49702 (line 978) 49703* __fractdiuta: Fixed-point fractional library routines. 49704 (line 983) 49705* __fractdqda: Fixed-point fractional library routines. 49706 (line 543) 49707* __fractdqdf: Fixed-point fractional library routines. 49708 (line 565) 49709* __fractdqdi: Fixed-point fractional library routines. 49710 (line 562) 49711* __fractdqha: Fixed-point fractional library routines. 49712 (line 541) 49713* __fractdqhi: Fixed-point fractional library routines. 49714 (line 560) 49715* __fractdqhq2: Fixed-point fractional library routines. 49716 (line 539) 49717* __fractdqqi: Fixed-point fractional library routines. 49718 (line 559) 49719* __fractdqqq2: Fixed-point fractional library routines. 49720 (line 538) 49721* __fractdqsa: Fixed-point fractional library routines. 49722 (line 542) 49723* __fractdqsf: Fixed-point fractional library routines. 49724 (line 564) 49725* __fractdqsi: Fixed-point fractional library routines. 49726 (line 561) 49727* __fractdqsq2: Fixed-point fractional library routines. 49728 (line 540) 49729* __fractdqta: Fixed-point fractional library routines. 49730 (line 544) 49731* __fractdqti: Fixed-point fractional library routines. 49732 (line 563) 49733* __fractdquda: Fixed-point fractional library routines. 49734 (line 555) 49735* __fractdqudq: Fixed-point fractional library routines. 49736 (line 550) 49737* __fractdquha: Fixed-point fractional library routines. 49738 (line 552) 49739* __fractdquhq: Fixed-point fractional library routines. 49740 (line 547) 49741* __fractdquqq: Fixed-point fractional library routines. 49742 (line 545) 49743* __fractdqusa: Fixed-point fractional library routines. 49744 (line 554) 49745* __fractdqusq: Fixed-point fractional library routines. 49746 (line 548) 49747* __fractdquta: Fixed-point fractional library routines. 49748 (line 557) 49749* __fracthada2: Fixed-point fractional library routines. 49750 (line 571) 49751* __fracthadf: Fixed-point fractional library routines. 49752 (line 589) 49753* __fracthadi: Fixed-point fractional library routines. 49754 (line 586) 49755* __fracthadq: Fixed-point fractional library routines. 49756 (line 569) 49757* __fracthahi: Fixed-point fractional library routines. 49758 (line 584) 49759* __fracthahq: Fixed-point fractional library routines. 49760 (line 567) 49761* __fracthaqi: Fixed-point fractional library routines. 49762 (line 583) 49763* __fracthaqq: Fixed-point fractional library routines. 49764 (line 566) 49765* __fracthasa2: Fixed-point fractional library routines. 49766 (line 570) 49767* __fracthasf: Fixed-point fractional library routines. 49768 (line 588) 49769* __fracthasi: Fixed-point fractional library routines. 49770 (line 585) 49771* __fracthasq: Fixed-point fractional library routines. 49772 (line 568) 49773* __fracthata2: Fixed-point fractional library routines. 49774 (line 572) 49775* __fracthati: Fixed-point fractional library routines. 49776 (line 587) 49777* __fracthauda: Fixed-point fractional library routines. 49778 (line 580) 49779* __fracthaudq: Fixed-point fractional library routines. 49780 (line 576) 49781* __fracthauha: Fixed-point fractional library routines. 49782 (line 578) 49783* __fracthauhq: Fixed-point fractional library routines. 49784 (line 574) 49785* __fracthauqq: Fixed-point fractional library routines. 49786 (line 573) 49787* __fracthausa: Fixed-point fractional library routines. 49788 (line 579) 49789* __fracthausq: Fixed-point fractional library routines. 49790 (line 575) 49791* __fracthauta: Fixed-point fractional library routines. 49792 (line 581) 49793* __fracthida: Fixed-point fractional library routines. 49794 (line 942) 49795* __fracthidq: Fixed-point fractional library routines. 49796 (line 939) 49797* __fracthiha: Fixed-point fractional library routines. 49798 (line 940) 49799* __fracthihq: Fixed-point fractional library routines. 49800 (line 937) 49801* __fracthiqq: Fixed-point fractional library routines. 49802 (line 936) 49803* __fracthisa: Fixed-point fractional library routines. 49804 (line 941) 49805* __fracthisq: Fixed-point fractional library routines. 49806 (line 938) 49807* __fracthita: Fixed-point fractional library routines. 49808 (line 943) 49809* __fracthiuda: Fixed-point fractional library routines. 49810 (line 950) 49811* __fracthiudq: Fixed-point fractional library routines. 49812 (line 947) 49813* __fracthiuha: Fixed-point fractional library routines. 49814 (line 948) 49815* __fracthiuhq: Fixed-point fractional library routines. 49816 (line 945) 49817* __fracthiuqq: Fixed-point fractional library routines. 49818 (line 944) 49819* __fracthiusa: Fixed-point fractional library routines. 49820 (line 949) 49821* __fracthiusq: Fixed-point fractional library routines. 49822 (line 946) 49823* __fracthiuta: Fixed-point fractional library routines. 49824 (line 951) 49825* __fracthqda: Fixed-point fractional library routines. 49826 (line 497) 49827* __fracthqdf: Fixed-point fractional library routines. 49828 (line 513) 49829* __fracthqdi: Fixed-point fractional library routines. 49830 (line 510) 49831* __fracthqdq2: Fixed-point fractional library routines. 49832 (line 494) 49833* __fracthqha: Fixed-point fractional library routines. 49834 (line 495) 49835* __fracthqhi: Fixed-point fractional library routines. 49836 (line 508) 49837* __fracthqqi: Fixed-point fractional library routines. 49838 (line 507) 49839* __fracthqqq2: Fixed-point fractional library routines. 49840 (line 492) 49841* __fracthqsa: Fixed-point fractional library routines. 49842 (line 496) 49843* __fracthqsf: Fixed-point fractional library routines. 49844 (line 512) 49845* __fracthqsi: Fixed-point fractional library routines. 49846 (line 509) 49847* __fracthqsq2: Fixed-point fractional library routines. 49848 (line 493) 49849* __fracthqta: Fixed-point fractional library routines. 49850 (line 498) 49851* __fracthqti: Fixed-point fractional library routines. 49852 (line 511) 49853* __fracthquda: Fixed-point fractional library routines. 49854 (line 505) 49855* __fracthqudq: Fixed-point fractional library routines. 49856 (line 502) 49857* __fracthquha: Fixed-point fractional library routines. 49858 (line 503) 49859* __fracthquhq: Fixed-point fractional library routines. 49860 (line 500) 49861* __fracthquqq: Fixed-point fractional library routines. 49862 (line 499) 49863* __fracthqusa: Fixed-point fractional library routines. 49864 (line 504) 49865* __fracthqusq: Fixed-point fractional library routines. 49866 (line 501) 49867* __fracthquta: Fixed-point fractional library routines. 49868 (line 506) 49869* __fractqida: Fixed-point fractional library routines. 49870 (line 924) 49871* __fractqidq: Fixed-point fractional library routines. 49872 (line 921) 49873* __fractqiha: Fixed-point fractional library routines. 49874 (line 922) 49875* __fractqihq: Fixed-point fractional library routines. 49876 (line 919) 49877* __fractqiqq: Fixed-point fractional library routines. 49878 (line 918) 49879* __fractqisa: Fixed-point fractional library routines. 49880 (line 923) 49881* __fractqisq: Fixed-point fractional library routines. 49882 (line 920) 49883* __fractqita: Fixed-point fractional library routines. 49884 (line 925) 49885* __fractqiuda: Fixed-point fractional library routines. 49886 (line 933) 49887* __fractqiudq: Fixed-point fractional library routines. 49888 (line 929) 49889* __fractqiuha: Fixed-point fractional library routines. 49890 (line 931) 49891* __fractqiuhq: Fixed-point fractional library routines. 49892 (line 927) 49893* __fractqiuqq: Fixed-point fractional library routines. 49894 (line 926) 49895* __fractqiusa: Fixed-point fractional library routines. 49896 (line 932) 49897* __fractqiusq: Fixed-point fractional library routines. 49898 (line 928) 49899* __fractqiuta: Fixed-point fractional library routines. 49900 (line 934) 49901* __fractqqda: Fixed-point fractional library routines. 49902 (line 473) 49903* __fractqqdf: Fixed-point fractional library routines. 49904 (line 491) 49905* __fractqqdi: Fixed-point fractional library routines. 49906 (line 488) 49907* __fractqqdq2: Fixed-point fractional library routines. 49908 (line 470) 49909* __fractqqha: Fixed-point fractional library routines. 49910 (line 471) 49911* __fractqqhi: Fixed-point fractional library routines. 49912 (line 486) 49913* __fractqqhq2: Fixed-point fractional library routines. 49914 (line 468) 49915* __fractqqqi: Fixed-point fractional library routines. 49916 (line 485) 49917* __fractqqsa: Fixed-point fractional library routines. 49918 (line 472) 49919* __fractqqsf: Fixed-point fractional library routines. 49920 (line 490) 49921* __fractqqsi: Fixed-point fractional library routines. 49922 (line 487) 49923* __fractqqsq2: Fixed-point fractional library routines. 49924 (line 469) 49925* __fractqqta: Fixed-point fractional library routines. 49926 (line 474) 49927* __fractqqti: Fixed-point fractional library routines. 49928 (line 489) 49929* __fractqquda: Fixed-point fractional library routines. 49930 (line 482) 49931* __fractqqudq: Fixed-point fractional library routines. 49932 (line 478) 49933* __fractqquha: Fixed-point fractional library routines. 49934 (line 480) 49935* __fractqquhq: Fixed-point fractional library routines. 49936 (line 476) 49937* __fractqquqq: Fixed-point fractional library routines. 49938 (line 475) 49939* __fractqqusa: Fixed-point fractional library routines. 49940 (line 481) 49941* __fractqqusq: Fixed-point fractional library routines. 49942 (line 477) 49943* __fractqquta: Fixed-point fractional library routines. 49944 (line 483) 49945* __fractsada2: Fixed-point fractional library routines. 49946 (line 595) 49947* __fractsadf: Fixed-point fractional library routines. 49948 (line 611) 49949* __fractsadi: Fixed-point fractional library routines. 49950 (line 608) 49951* __fractsadq: Fixed-point fractional library routines. 49952 (line 593) 49953* __fractsaha2: Fixed-point fractional library routines. 49954 (line 594) 49955* __fractsahi: Fixed-point fractional library routines. 49956 (line 606) 49957* __fractsahq: Fixed-point fractional library routines. 49958 (line 591) 49959* __fractsaqi: Fixed-point fractional library routines. 49960 (line 605) 49961* __fractsaqq: Fixed-point fractional library routines. 49962 (line 590) 49963* __fractsasf: Fixed-point fractional library routines. 49964 (line 610) 49965* __fractsasi: Fixed-point fractional library routines. 49966 (line 607) 49967* __fractsasq: Fixed-point fractional library routines. 49968 (line 592) 49969* __fractsata2: Fixed-point fractional library routines. 49970 (line 596) 49971* __fractsati: Fixed-point fractional library routines. 49972 (line 609) 49973* __fractsauda: Fixed-point fractional library routines. 49974 (line 603) 49975* __fractsaudq: Fixed-point fractional library routines. 49976 (line 600) 49977* __fractsauha: Fixed-point fractional library routines. 49978 (line 601) 49979* __fractsauhq: Fixed-point fractional library routines. 49980 (line 598) 49981* __fractsauqq: Fixed-point fractional library routines. 49982 (line 597) 49983* __fractsausa: Fixed-point fractional library routines. 49984 (line 602) 49985* __fractsausq: Fixed-point fractional library routines. 49986 (line 599) 49987* __fractsauta: Fixed-point fractional library routines. 49988 (line 604) 49989* __fractsfda: Fixed-point fractional library routines. 49990 (line 1008) 49991* __fractsfdq: Fixed-point fractional library routines. 49992 (line 1005) 49993* __fractsfha: Fixed-point fractional library routines. 49994 (line 1006) 49995* __fractsfhq: Fixed-point fractional library routines. 49996 (line 1003) 49997* __fractsfqq: Fixed-point fractional library routines. 49998 (line 1002) 49999* __fractsfsa: Fixed-point fractional library routines. 50000 (line 1007) 50001* __fractsfsq: Fixed-point fractional library routines. 50002 (line 1004) 50003* __fractsfta: Fixed-point fractional library routines. 50004 (line 1009) 50005* __fractsfuda: Fixed-point fractional library routines. 50006 (line 1016) 50007* __fractsfudq: Fixed-point fractional library routines. 50008 (line 1013) 50009* __fractsfuha: Fixed-point fractional library routines. 50010 (line 1014) 50011* __fractsfuhq: Fixed-point fractional library routines. 50012 (line 1011) 50013* __fractsfuqq: Fixed-point fractional library routines. 50014 (line 1010) 50015* __fractsfusa: Fixed-point fractional library routines. 50016 (line 1015) 50017* __fractsfusq: Fixed-point fractional library routines. 50018 (line 1012) 50019* __fractsfuta: Fixed-point fractional library routines. 50020 (line 1017) 50021* __fractsida: Fixed-point fractional library routines. 50022 (line 958) 50023* __fractsidq: Fixed-point fractional library routines. 50024 (line 955) 50025* __fractsiha: Fixed-point fractional library routines. 50026 (line 956) 50027* __fractsihq: Fixed-point fractional library routines. 50028 (line 953) 50029* __fractsiqq: Fixed-point fractional library routines. 50030 (line 952) 50031* __fractsisa: Fixed-point fractional library routines. 50032 (line 957) 50033* __fractsisq: Fixed-point fractional library routines. 50034 (line 954) 50035* __fractsita: Fixed-point fractional library routines. 50036 (line 959) 50037* __fractsiuda: Fixed-point fractional library routines. 50038 (line 966) 50039* __fractsiudq: Fixed-point fractional library routines. 50040 (line 963) 50041* __fractsiuha: Fixed-point fractional library routines. 50042 (line 964) 50043* __fractsiuhq: Fixed-point fractional library routines. 50044 (line 961) 50045* __fractsiuqq: Fixed-point fractional library routines. 50046 (line 960) 50047* __fractsiusa: Fixed-point fractional library routines. 50048 (line 965) 50049* __fractsiusq: Fixed-point fractional library routines. 50050 (line 962) 50051* __fractsiuta: Fixed-point fractional library routines. 50052 (line 967) 50053* __fractsqda: Fixed-point fractional library routines. 50054 (line 519) 50055* __fractsqdf: Fixed-point fractional library routines. 50056 (line 537) 50057* __fractsqdi: Fixed-point fractional library routines. 50058 (line 534) 50059* __fractsqdq2: Fixed-point fractional library routines. 50060 (line 516) 50061* __fractsqha: Fixed-point fractional library routines. 50062 (line 517) 50063* __fractsqhi: Fixed-point fractional library routines. 50064 (line 532) 50065* __fractsqhq2: Fixed-point fractional library routines. 50066 (line 515) 50067* __fractsqqi: Fixed-point fractional library routines. 50068 (line 531) 50069* __fractsqqq2: Fixed-point fractional library routines. 50070 (line 514) 50071* __fractsqsa: Fixed-point fractional library routines. 50072 (line 518) 50073* __fractsqsf: Fixed-point fractional library routines. 50074 (line 536) 50075* __fractsqsi: Fixed-point fractional library routines. 50076 (line 533) 50077* __fractsqta: Fixed-point fractional library routines. 50078 (line 520) 50079* __fractsqti: Fixed-point fractional library routines. 50080 (line 535) 50081* __fractsquda: Fixed-point fractional library routines. 50082 (line 528) 50083* __fractsqudq: Fixed-point fractional library routines. 50084 (line 524) 50085* __fractsquha: Fixed-point fractional library routines. 50086 (line 526) 50087* __fractsquhq: Fixed-point fractional library routines. 50088 (line 522) 50089* __fractsquqq: Fixed-point fractional library routines. 50090 (line 521) 50091* __fractsqusa: Fixed-point fractional library routines. 50092 (line 527) 50093* __fractsqusq: Fixed-point fractional library routines. 50094 (line 523) 50095* __fractsquta: Fixed-point fractional library routines. 50096 (line 529) 50097* __fracttada2: Fixed-point fractional library routines. 50098 (line 642) 50099* __fracttadf: Fixed-point fractional library routines. 50100 (line 663) 50101* __fracttadi: Fixed-point fractional library routines. 50102 (line 660) 50103* __fracttadq: Fixed-point fractional library routines. 50104 (line 639) 50105* __fracttaha2: Fixed-point fractional library routines. 50106 (line 640) 50107* __fracttahi: Fixed-point fractional library routines. 50108 (line 658) 50109* __fracttahq: Fixed-point fractional library routines. 50110 (line 637) 50111* __fracttaqi: Fixed-point fractional library routines. 50112 (line 657) 50113* __fracttaqq: Fixed-point fractional library routines. 50114 (line 636) 50115* __fracttasa2: Fixed-point fractional library routines. 50116 (line 641) 50117* __fracttasf: Fixed-point fractional library routines. 50118 (line 662) 50119* __fracttasi: Fixed-point fractional library routines. 50120 (line 659) 50121* __fracttasq: Fixed-point fractional library routines. 50122 (line 638) 50123* __fracttati: Fixed-point fractional library routines. 50124 (line 661) 50125* __fracttauda: Fixed-point fractional library routines. 50126 (line 653) 50127* __fracttaudq: Fixed-point fractional library routines. 50128 (line 648) 50129* __fracttauha: Fixed-point fractional library routines. 50130 (line 650) 50131* __fracttauhq: Fixed-point fractional library routines. 50132 (line 645) 50133* __fracttauqq: Fixed-point fractional library routines. 50134 (line 643) 50135* __fracttausa: Fixed-point fractional library routines. 50136 (line 652) 50137* __fracttausq: Fixed-point fractional library routines. 50138 (line 646) 50139* __fracttauta: Fixed-point fractional library routines. 50140 (line 655) 50141* __fracttida: Fixed-point fractional library routines. 50142 (line 990) 50143* __fracttidq: Fixed-point fractional library routines. 50144 (line 987) 50145* __fracttiha: Fixed-point fractional library routines. 50146 (line 988) 50147* __fracttihq: Fixed-point fractional library routines. 50148 (line 985) 50149* __fracttiqq: Fixed-point fractional library routines. 50150 (line 984) 50151* __fracttisa: Fixed-point fractional library routines. 50152 (line 989) 50153* __fracttisq: Fixed-point fractional library routines. 50154 (line 986) 50155* __fracttita: Fixed-point fractional library routines. 50156 (line 991) 50157* __fracttiuda: Fixed-point fractional library routines. 50158 (line 999) 50159* __fracttiudq: Fixed-point fractional library routines. 50160 (line 995) 50161* __fracttiuha: Fixed-point fractional library routines. 50162 (line 997) 50163* __fracttiuhq: Fixed-point fractional library routines. 50164 (line 993) 50165* __fracttiuqq: Fixed-point fractional library routines. 50166 (line 992) 50167* __fracttiusa: Fixed-point fractional library routines. 50168 (line 998) 50169* __fracttiusq: Fixed-point fractional library routines. 50170 (line 994) 50171* __fracttiuta: Fixed-point fractional library routines. 50172 (line 1000) 50173* __fractudada: Fixed-point fractional library routines. 50174 (line 857) 50175* __fractudadf: Fixed-point fractional library routines. 50176 (line 880) 50177* __fractudadi: Fixed-point fractional library routines. 50178 (line 877) 50179* __fractudadq: Fixed-point fractional library routines. 50180 (line 853) 50181* __fractudaha: Fixed-point fractional library routines. 50182 (line 855) 50183* __fractudahi: Fixed-point fractional library routines. 50184 (line 875) 50185* __fractudahq: Fixed-point fractional library routines. 50186 (line 851) 50187* __fractudaqi: Fixed-point fractional library routines. 50188 (line 874) 50189* __fractudaqq: Fixed-point fractional library routines. 50190 (line 850) 50191* __fractudasa: Fixed-point fractional library routines. 50192 (line 856) 50193* __fractudasf: Fixed-point fractional library routines. 50194 (line 879) 50195* __fractudasi: Fixed-point fractional library routines. 50196 (line 876) 50197* __fractudasq: Fixed-point fractional library routines. 50198 (line 852) 50199* __fractudata: Fixed-point fractional library routines. 50200 (line 858) 50201* __fractudati: Fixed-point fractional library routines. 50202 (line 878) 50203* __fractudaudq: Fixed-point fractional library routines. 50204 (line 866) 50205* __fractudauha2: Fixed-point fractional library routines. 50206 (line 868) 50207* __fractudauhq: Fixed-point fractional library routines. 50208 (line 862) 50209* __fractudauqq: Fixed-point fractional library routines. 50210 (line 860) 50211* __fractudausa2: Fixed-point fractional library routines. 50212 (line 870) 50213* __fractudausq: Fixed-point fractional library routines. 50214 (line 864) 50215* __fractudauta2: Fixed-point fractional library routines. 50216 (line 872) 50217* __fractudqda: Fixed-point fractional library routines. 50218 (line 764) 50219* __fractudqdf: Fixed-point fractional library routines. 50220 (line 790) 50221* __fractudqdi: Fixed-point fractional library routines. 50222 (line 786) 50223* __fractudqdq: Fixed-point fractional library routines. 50224 (line 759) 50225* __fractudqha: Fixed-point fractional library routines. 50226 (line 761) 50227* __fractudqhi: Fixed-point fractional library routines. 50228 (line 784) 50229* __fractudqhq: Fixed-point fractional library routines. 50230 (line 756) 50231* __fractudqqi: Fixed-point fractional library routines. 50232 (line 782) 50233* __fractudqqq: Fixed-point fractional library routines. 50234 (line 754) 50235* __fractudqsa: Fixed-point fractional library routines. 50236 (line 763) 50237* __fractudqsf: Fixed-point fractional library routines. 50238 (line 789) 50239* __fractudqsi: Fixed-point fractional library routines. 50240 (line 785) 50241* __fractudqsq: Fixed-point fractional library routines. 50242 (line 757) 50243* __fractudqta: Fixed-point fractional library routines. 50244 (line 766) 50245* __fractudqti: Fixed-point fractional library routines. 50246 (line 787) 50247* __fractudquda: Fixed-point fractional library routines. 50248 (line 778) 50249* __fractudquha: Fixed-point fractional library routines. 50250 (line 774) 50251* __fractudquhq2: Fixed-point fractional library routines. 50252 (line 770) 50253* __fractudquqq2: Fixed-point fractional library routines. 50254 (line 768) 50255* __fractudqusa: Fixed-point fractional library routines. 50256 (line 776) 50257* __fractudqusq2: Fixed-point fractional library routines. 50258 (line 772) 50259* __fractudquta: Fixed-point fractional library routines. 50260 (line 780) 50261* __fractuhada: Fixed-point fractional library routines. 50262 (line 798) 50263* __fractuhadf: Fixed-point fractional library routines. 50264 (line 821) 50265* __fractuhadi: Fixed-point fractional library routines. 50266 (line 818) 50267* __fractuhadq: Fixed-point fractional library routines. 50268 (line 794) 50269* __fractuhaha: Fixed-point fractional library routines. 50270 (line 796) 50271* __fractuhahi: Fixed-point fractional library routines. 50272 (line 816) 50273* __fractuhahq: Fixed-point fractional library routines. 50274 (line 792) 50275* __fractuhaqi: Fixed-point fractional library routines. 50276 (line 815) 50277* __fractuhaqq: Fixed-point fractional library routines. 50278 (line 791) 50279* __fractuhasa: Fixed-point fractional library routines. 50280 (line 797) 50281* __fractuhasf: Fixed-point fractional library routines. 50282 (line 820) 50283* __fractuhasi: Fixed-point fractional library routines. 50284 (line 817) 50285* __fractuhasq: Fixed-point fractional library routines. 50286 (line 793) 50287* __fractuhata: Fixed-point fractional library routines. 50288 (line 799) 50289* __fractuhati: Fixed-point fractional library routines. 50290 (line 819) 50291* __fractuhauda2: Fixed-point fractional library routines. 50292 (line 811) 50293* __fractuhaudq: Fixed-point fractional library routines. 50294 (line 807) 50295* __fractuhauhq: Fixed-point fractional library routines. 50296 (line 803) 50297* __fractuhauqq: Fixed-point fractional library routines. 50298 (line 801) 50299* __fractuhausa2: Fixed-point fractional library routines. 50300 (line 809) 50301* __fractuhausq: Fixed-point fractional library routines. 50302 (line 805) 50303* __fractuhauta2: Fixed-point fractional library routines. 50304 (line 813) 50305* __fractuhqda: Fixed-point fractional library routines. 50306 (line 701) 50307* __fractuhqdf: Fixed-point fractional library routines. 50308 (line 722) 50309* __fractuhqdi: Fixed-point fractional library routines. 50310 (line 719) 50311* __fractuhqdq: Fixed-point fractional library routines. 50312 (line 698) 50313* __fractuhqha: Fixed-point fractional library routines. 50314 (line 699) 50315* __fractuhqhi: Fixed-point fractional library routines. 50316 (line 717) 50317* __fractuhqhq: Fixed-point fractional library routines. 50318 (line 696) 50319* __fractuhqqi: Fixed-point fractional library routines. 50320 (line 716) 50321* __fractuhqqq: Fixed-point fractional library routines. 50322 (line 695) 50323* __fractuhqsa: Fixed-point fractional library routines. 50324 (line 700) 50325* __fractuhqsf: Fixed-point fractional library routines. 50326 (line 721) 50327* __fractuhqsi: Fixed-point fractional library routines. 50328 (line 718) 50329* __fractuhqsq: Fixed-point fractional library routines. 50330 (line 697) 50331* __fractuhqta: Fixed-point fractional library routines. 50332 (line 702) 50333* __fractuhqti: Fixed-point fractional library routines. 50334 (line 720) 50335* __fractuhquda: Fixed-point fractional library routines. 50336 (line 712) 50337* __fractuhqudq2: Fixed-point fractional library routines. 50338 (line 707) 50339* __fractuhquha: Fixed-point fractional library routines. 50340 (line 709) 50341* __fractuhquqq2: Fixed-point fractional library routines. 50342 (line 703) 50343* __fractuhqusa: Fixed-point fractional library routines. 50344 (line 711) 50345* __fractuhqusq2: Fixed-point fractional library routines. 50346 (line 705) 50347* __fractuhquta: Fixed-point fractional library routines. 50348 (line 714) 50349* __fractunsdadi: Fixed-point fractional library routines. 50350 (line 1554) 50351* __fractunsdahi: Fixed-point fractional library routines. 50352 (line 1552) 50353* __fractunsdaqi: Fixed-point fractional library routines. 50354 (line 1551) 50355* __fractunsdasi: Fixed-point fractional library routines. 50356 (line 1553) 50357* __fractunsdati: Fixed-point fractional library routines. 50358 (line 1555) 50359* __fractunsdida: Fixed-point fractional library routines. 50360 (line 1706) 50361* __fractunsdidq: Fixed-point fractional library routines. 50362 (line 1703) 50363* __fractunsdiha: Fixed-point fractional library routines. 50364 (line 1704) 50365* __fractunsdihq: Fixed-point fractional library routines. 50366 (line 1701) 50367* __fractunsdiqq: Fixed-point fractional library routines. 50368 (line 1700) 50369* __fractunsdisa: Fixed-point fractional library routines. 50370 (line 1705) 50371* __fractunsdisq: Fixed-point fractional library routines. 50372 (line 1702) 50373* __fractunsdita: Fixed-point fractional library routines. 50374 (line 1707) 50375* __fractunsdiuda: Fixed-point fractional library routines. 50376 (line 1718) 50377* __fractunsdiudq: Fixed-point fractional library routines. 50378 (line 1713) 50379* __fractunsdiuha: Fixed-point fractional library routines. 50380 (line 1715) 50381* __fractunsdiuhq: Fixed-point fractional library routines. 50382 (line 1710) 50383* __fractunsdiuqq: Fixed-point fractional library routines. 50384 (line 1708) 50385* __fractunsdiusa: Fixed-point fractional library routines. 50386 (line 1717) 50387* __fractunsdiusq: Fixed-point fractional library routines. 50388 (line 1711) 50389* __fractunsdiuta: Fixed-point fractional library routines. 50390 (line 1720) 50391* __fractunsdqdi: Fixed-point fractional library routines. 50392 (line 1538) 50393* __fractunsdqhi: Fixed-point fractional library routines. 50394 (line 1536) 50395* __fractunsdqqi: Fixed-point fractional library routines. 50396 (line 1535) 50397* __fractunsdqsi: Fixed-point fractional library routines. 50398 (line 1537) 50399* __fractunsdqti: Fixed-point fractional library routines. 50400 (line 1539) 50401* __fractunshadi: Fixed-point fractional library routines. 50402 (line 1544) 50403* __fractunshahi: Fixed-point fractional library routines. 50404 (line 1542) 50405* __fractunshaqi: Fixed-point fractional library routines. 50406 (line 1541) 50407* __fractunshasi: Fixed-point fractional library routines. 50408 (line 1543) 50409* __fractunshati: Fixed-point fractional library routines. 50410 (line 1545) 50411* __fractunshida: Fixed-point fractional library routines. 50412 (line 1662) 50413* __fractunshidq: Fixed-point fractional library routines. 50414 (line 1659) 50415* __fractunshiha: Fixed-point fractional library routines. 50416 (line 1660) 50417* __fractunshihq: Fixed-point fractional library routines. 50418 (line 1657) 50419* __fractunshiqq: Fixed-point fractional library routines. 50420 (line 1656) 50421* __fractunshisa: Fixed-point fractional library routines. 50422 (line 1661) 50423* __fractunshisq: Fixed-point fractional library routines. 50424 (line 1658) 50425* __fractunshita: Fixed-point fractional library routines. 50426 (line 1663) 50427* __fractunshiuda: Fixed-point fractional library routines. 50428 (line 1674) 50429* __fractunshiudq: Fixed-point fractional library routines. 50430 (line 1669) 50431* __fractunshiuha: Fixed-point fractional library routines. 50432 (line 1671) 50433* __fractunshiuhq: Fixed-point fractional library routines. 50434 (line 1666) 50435* __fractunshiuqq: Fixed-point fractional library routines. 50436 (line 1664) 50437* __fractunshiusa: Fixed-point fractional library routines. 50438 (line 1673) 50439* __fractunshiusq: Fixed-point fractional library routines. 50440 (line 1667) 50441* __fractunshiuta: Fixed-point fractional library routines. 50442 (line 1676) 50443* __fractunshqdi: Fixed-point fractional library routines. 50444 (line 1528) 50445* __fractunshqhi: Fixed-point fractional library routines. 50446 (line 1526) 50447* __fractunshqqi: Fixed-point fractional library routines. 50448 (line 1525) 50449* __fractunshqsi: Fixed-point fractional library routines. 50450 (line 1527) 50451* __fractunshqti: Fixed-point fractional library routines. 50452 (line 1529) 50453* __fractunsqida: Fixed-point fractional library routines. 50454 (line 1640) 50455* __fractunsqidq: Fixed-point fractional library routines. 50456 (line 1637) 50457* __fractunsqiha: Fixed-point fractional library routines. 50458 (line 1638) 50459* __fractunsqihq: Fixed-point fractional library routines. 50460 (line 1635) 50461* __fractunsqiqq: Fixed-point fractional library routines. 50462 (line 1634) 50463* __fractunsqisa: Fixed-point fractional library routines. 50464 (line 1639) 50465* __fractunsqisq: Fixed-point fractional library routines. 50466 (line 1636) 50467* __fractunsqita: Fixed-point fractional library routines. 50468 (line 1641) 50469* __fractunsqiuda: Fixed-point fractional library routines. 50470 (line 1652) 50471* __fractunsqiudq: Fixed-point fractional library routines. 50472 (line 1647) 50473* __fractunsqiuha: Fixed-point fractional library routines. 50474 (line 1649) 50475* __fractunsqiuhq: Fixed-point fractional library routines. 50476 (line 1644) 50477* __fractunsqiuqq: Fixed-point fractional library routines. 50478 (line 1642) 50479* __fractunsqiusa: Fixed-point fractional library routines. 50480 (line 1651) 50481* __fractunsqiusq: Fixed-point fractional library routines. 50482 (line 1645) 50483* __fractunsqiuta: Fixed-point fractional library routines. 50484 (line 1654) 50485* __fractunsqqdi: Fixed-point fractional library routines. 50486 (line 1523) 50487* __fractunsqqhi: Fixed-point fractional library routines. 50488 (line 1521) 50489* __fractunsqqqi: Fixed-point fractional library routines. 50490 (line 1520) 50491* __fractunsqqsi: Fixed-point fractional library routines. 50492 (line 1522) 50493* __fractunsqqti: Fixed-point fractional library routines. 50494 (line 1524) 50495* __fractunssadi: Fixed-point fractional library routines. 50496 (line 1549) 50497* __fractunssahi: Fixed-point fractional library routines. 50498 (line 1547) 50499* __fractunssaqi: Fixed-point fractional library routines. 50500 (line 1546) 50501* __fractunssasi: Fixed-point fractional library routines. 50502 (line 1548) 50503* __fractunssati: Fixed-point fractional library routines. 50504 (line 1550) 50505* __fractunssida: Fixed-point fractional library routines. 50506 (line 1684) 50507* __fractunssidq: Fixed-point fractional library routines. 50508 (line 1681) 50509* __fractunssiha: Fixed-point fractional library routines. 50510 (line 1682) 50511* __fractunssihq: Fixed-point fractional library routines. 50512 (line 1679) 50513* __fractunssiqq: Fixed-point fractional library routines. 50514 (line 1678) 50515* __fractunssisa: Fixed-point fractional library routines. 50516 (line 1683) 50517* __fractunssisq: Fixed-point fractional library routines. 50518 (line 1680) 50519* __fractunssita: Fixed-point fractional library routines. 50520 (line 1685) 50521* __fractunssiuda: Fixed-point fractional library routines. 50522 (line 1696) 50523* __fractunssiudq: Fixed-point fractional library routines. 50524 (line 1691) 50525* __fractunssiuha: Fixed-point fractional library routines. 50526 (line 1693) 50527* __fractunssiuhq: Fixed-point fractional library routines. 50528 (line 1688) 50529* __fractunssiuqq: Fixed-point fractional library routines. 50530 (line 1686) 50531* __fractunssiusa: Fixed-point fractional library routines. 50532 (line 1695) 50533* __fractunssiusq: Fixed-point fractional library routines. 50534 (line 1689) 50535* __fractunssiuta: Fixed-point fractional library routines. 50536 (line 1698) 50537* __fractunssqdi: Fixed-point fractional library routines. 50538 (line 1533) 50539* __fractunssqhi: Fixed-point fractional library routines. 50540 (line 1531) 50541* __fractunssqqi: Fixed-point fractional library routines. 50542 (line 1530) 50543* __fractunssqsi: Fixed-point fractional library routines. 50544 (line 1532) 50545* __fractunssqti: Fixed-point fractional library routines. 50546 (line 1534) 50547* __fractunstadi: Fixed-point fractional library routines. 50548 (line 1559) 50549* __fractunstahi: Fixed-point fractional library routines. 50550 (line 1557) 50551* __fractunstaqi: Fixed-point fractional library routines. 50552 (line 1556) 50553* __fractunstasi: Fixed-point fractional library routines. 50554 (line 1558) 50555* __fractunstati: Fixed-point fractional library routines. 50556 (line 1560) 50557* __fractunstida: Fixed-point fractional library routines. 50558 (line 1729) 50559* __fractunstidq: Fixed-point fractional library routines. 50560 (line 1725) 50561* __fractunstiha: Fixed-point fractional library routines. 50562 (line 1727) 50563* __fractunstihq: Fixed-point fractional library routines. 50564 (line 1723) 50565* __fractunstiqq: Fixed-point fractional library routines. 50566 (line 1722) 50567* __fractunstisa: Fixed-point fractional library routines. 50568 (line 1728) 50569* __fractunstisq: Fixed-point fractional library routines. 50570 (line 1724) 50571* __fractunstita: Fixed-point fractional library routines. 50572 (line 1730) 50573* __fractunstiuda: Fixed-point fractional library routines. 50574 (line 1744) 50575* __fractunstiudq: Fixed-point fractional library routines. 50576 (line 1738) 50577* __fractunstiuha: Fixed-point fractional library routines. 50578 (line 1740) 50579* __fractunstiuhq: Fixed-point fractional library routines. 50580 (line 1734) 50581* __fractunstiuqq: Fixed-point fractional library routines. 50582 (line 1732) 50583* __fractunstiusa: Fixed-point fractional library routines. 50584 (line 1742) 50585* __fractunstiusq: Fixed-point fractional library routines. 50586 (line 1736) 50587* __fractunstiuta: Fixed-point fractional library routines. 50588 (line 1746) 50589* __fractunsudadi: Fixed-point fractional library routines. 50590 (line 1620) 50591* __fractunsudahi: Fixed-point fractional library routines. 50592 (line 1616) 50593* __fractunsudaqi: Fixed-point fractional library routines. 50594 (line 1614) 50595* __fractunsudasi: Fixed-point fractional library routines. 50596 (line 1618) 50597* __fractunsudati: Fixed-point fractional library routines. 50598 (line 1622) 50599* __fractunsudqdi: Fixed-point fractional library routines. 50600 (line 1594) 50601* __fractunsudqhi: Fixed-point fractional library routines. 50602 (line 1590) 50603* __fractunsudqqi: Fixed-point fractional library routines. 50604 (line 1588) 50605* __fractunsudqsi: Fixed-point fractional library routines. 50606 (line 1592) 50607* __fractunsudqti: Fixed-point fractional library routines. 50608 (line 1596) 50609* __fractunsuhadi: Fixed-point fractional library routines. 50610 (line 1604) 50611* __fractunsuhahi: Fixed-point fractional library routines. 50612 (line 1600) 50613* __fractunsuhaqi: Fixed-point fractional library routines. 50614 (line 1598) 50615* __fractunsuhasi: Fixed-point fractional library routines. 50616 (line 1602) 50617* __fractunsuhati: Fixed-point fractional library routines. 50618 (line 1606) 50619* __fractunsuhqdi: Fixed-point fractional library routines. 50620 (line 1575) 50621* __fractunsuhqhi: Fixed-point fractional library routines. 50622 (line 1573) 50623* __fractunsuhqqi: Fixed-point fractional library routines. 50624 (line 1572) 50625* __fractunsuhqsi: Fixed-point fractional library routines. 50626 (line 1574) 50627* __fractunsuhqti: Fixed-point fractional library routines. 50628 (line 1576) 50629* __fractunsuqqdi: Fixed-point fractional library routines. 50630 (line 1568) 50631* __fractunsuqqhi: Fixed-point fractional library routines. 50632 (line 1564) 50633* __fractunsuqqqi: Fixed-point fractional library routines. 50634 (line 1562) 50635* __fractunsuqqsi: Fixed-point fractional library routines. 50636 (line 1566) 50637* __fractunsuqqti: Fixed-point fractional library routines. 50638 (line 1570) 50639* __fractunsusadi: Fixed-point fractional library routines. 50640 (line 1611) 50641* __fractunsusahi: Fixed-point fractional library routines. 50642 (line 1609) 50643* __fractunsusaqi: Fixed-point fractional library routines. 50644 (line 1608) 50645* __fractunsusasi: Fixed-point fractional library routines. 50646 (line 1610) 50647* __fractunsusati: Fixed-point fractional library routines. 50648 (line 1612) 50649* __fractunsusqdi: Fixed-point fractional library routines. 50650 (line 1584) 50651* __fractunsusqhi: Fixed-point fractional library routines. 50652 (line 1580) 50653* __fractunsusqqi: Fixed-point fractional library routines. 50654 (line 1578) 50655* __fractunsusqsi: Fixed-point fractional library routines. 50656 (line 1582) 50657* __fractunsusqti: Fixed-point fractional library routines. 50658 (line 1586) 50659* __fractunsutadi: Fixed-point fractional library routines. 50660 (line 1630) 50661* __fractunsutahi: Fixed-point fractional library routines. 50662 (line 1626) 50663* __fractunsutaqi: Fixed-point fractional library routines. 50664 (line 1624) 50665* __fractunsutasi: Fixed-point fractional library routines. 50666 (line 1628) 50667* __fractunsutati: Fixed-point fractional library routines. 50668 (line 1632) 50669* __fractuqqda: Fixed-point fractional library routines. 50670 (line 671) 50671* __fractuqqdf: Fixed-point fractional library routines. 50672 (line 694) 50673* __fractuqqdi: Fixed-point fractional library routines. 50674 (line 691) 50675* __fractuqqdq: Fixed-point fractional library routines. 50676 (line 667) 50677* __fractuqqha: Fixed-point fractional library routines. 50678 (line 669) 50679* __fractuqqhi: Fixed-point fractional library routines. 50680 (line 689) 50681* __fractuqqhq: Fixed-point fractional library routines. 50682 (line 665) 50683* __fractuqqqi: Fixed-point fractional library routines. 50684 (line 688) 50685* __fractuqqqq: Fixed-point fractional library routines. 50686 (line 664) 50687* __fractuqqsa: Fixed-point fractional library routines. 50688 (line 670) 50689* __fractuqqsf: Fixed-point fractional library routines. 50690 (line 693) 50691* __fractuqqsi: Fixed-point fractional library routines. 50692 (line 690) 50693* __fractuqqsq: Fixed-point fractional library routines. 50694 (line 666) 50695* __fractuqqta: Fixed-point fractional library routines. 50696 (line 672) 50697* __fractuqqti: Fixed-point fractional library routines. 50698 (line 692) 50699* __fractuqquda: Fixed-point fractional library routines. 50700 (line 684) 50701* __fractuqqudq2: Fixed-point fractional library routines. 50702 (line 678) 50703* __fractuqquha: Fixed-point fractional library routines. 50704 (line 680) 50705* __fractuqquhq2: Fixed-point fractional library routines. 50706 (line 674) 50707* __fractuqqusa: Fixed-point fractional library routines. 50708 (line 682) 50709* __fractuqqusq2: Fixed-point fractional library routines. 50710 (line 676) 50711* __fractuqquta: Fixed-point fractional library routines. 50712 (line 686) 50713* __fractusada: Fixed-point fractional library routines. 50714 (line 828) 50715* __fractusadf: Fixed-point fractional library routines. 50716 (line 849) 50717* __fractusadi: Fixed-point fractional library routines. 50718 (line 846) 50719* __fractusadq: Fixed-point fractional library routines. 50720 (line 825) 50721* __fractusaha: Fixed-point fractional library routines. 50722 (line 826) 50723* __fractusahi: Fixed-point fractional library routines. 50724 (line 844) 50725* __fractusahq: Fixed-point fractional library routines. 50726 (line 823) 50727* __fractusaqi: Fixed-point fractional library routines. 50728 (line 843) 50729* __fractusaqq: Fixed-point fractional library routines. 50730 (line 822) 50731* __fractusasa: Fixed-point fractional library routines. 50732 (line 827) 50733* __fractusasf: Fixed-point fractional library routines. 50734 (line 848) 50735* __fractusasi: Fixed-point fractional library routines. 50736 (line 845) 50737* __fractusasq: Fixed-point fractional library routines. 50738 (line 824) 50739* __fractusata: Fixed-point fractional library routines. 50740 (line 829) 50741* __fractusati: Fixed-point fractional library routines. 50742 (line 847) 50743* __fractusauda2: Fixed-point fractional library routines. 50744 (line 839) 50745* __fractusaudq: Fixed-point fractional library routines. 50746 (line 835) 50747* __fractusauha2: Fixed-point fractional library routines. 50748 (line 837) 50749* __fractusauhq: Fixed-point fractional library routines. 50750 (line 832) 50751* __fractusauqq: Fixed-point fractional library routines. 50752 (line 830) 50753* __fractusausq: Fixed-point fractional library routines. 50754 (line 833) 50755* __fractusauta2: Fixed-point fractional library routines. 50756 (line 841) 50757* __fractusqda: Fixed-point fractional library routines. 50758 (line 730) 50759* __fractusqdf: Fixed-point fractional library routines. 50760 (line 753) 50761* __fractusqdi: Fixed-point fractional library routines. 50762 (line 750) 50763* __fractusqdq: Fixed-point fractional library routines. 50764 (line 726) 50765* __fractusqha: Fixed-point fractional library routines. 50766 (line 728) 50767* __fractusqhi: Fixed-point fractional library routines. 50768 (line 748) 50769* __fractusqhq: Fixed-point fractional library routines. 50770 (line 724) 50771* __fractusqqi: Fixed-point fractional library routines. 50772 (line 747) 50773* __fractusqqq: Fixed-point fractional library routines. 50774 (line 723) 50775* __fractusqsa: Fixed-point fractional library routines. 50776 (line 729) 50777* __fractusqsf: Fixed-point fractional library routines. 50778 (line 752) 50779* __fractusqsi: Fixed-point fractional library routines. 50780 (line 749) 50781* __fractusqsq: Fixed-point fractional library routines. 50782 (line 725) 50783* __fractusqta: Fixed-point fractional library routines. 50784 (line 731) 50785* __fractusqti: Fixed-point fractional library routines. 50786 (line 751) 50787* __fractusquda: Fixed-point fractional library routines. 50788 (line 743) 50789* __fractusqudq2: Fixed-point fractional library routines. 50790 (line 737) 50791* __fractusquha: Fixed-point fractional library routines. 50792 (line 739) 50793* __fractusquhq2: Fixed-point fractional library routines. 50794 (line 735) 50795* __fractusquqq2: Fixed-point fractional library routines. 50796 (line 733) 50797* __fractusqusa: Fixed-point fractional library routines. 50798 (line 741) 50799* __fractusquta: Fixed-point fractional library routines. 50800 (line 745) 50801* __fractutada: Fixed-point fractional library routines. 50802 (line 891) 50803* __fractutadf: Fixed-point fractional library routines. 50804 (line 917) 50805* __fractutadi: Fixed-point fractional library routines. 50806 (line 913) 50807* __fractutadq: Fixed-point fractional library routines. 50808 (line 886) 50809* __fractutaha: Fixed-point fractional library routines. 50810 (line 888) 50811* __fractutahi: Fixed-point fractional library routines. 50812 (line 911) 50813* __fractutahq: Fixed-point fractional library routines. 50814 (line 883) 50815* __fractutaqi: Fixed-point fractional library routines. 50816 (line 909) 50817* __fractutaqq: Fixed-point fractional library routines. 50818 (line 881) 50819* __fractutasa: Fixed-point fractional library routines. 50820 (line 890) 50821* __fractutasf: Fixed-point fractional library routines. 50822 (line 916) 50823* __fractutasi: Fixed-point fractional library routines. 50824 (line 912) 50825* __fractutasq: Fixed-point fractional library routines. 50826 (line 884) 50827* __fractutata: Fixed-point fractional library routines. 50828 (line 893) 50829* __fractutati: Fixed-point fractional library routines. 50830 (line 914) 50831* __fractutauda2: Fixed-point fractional library routines. 50832 (line 907) 50833* __fractutaudq: Fixed-point fractional library routines. 50834 (line 901) 50835* __fractutauha2: Fixed-point fractional library routines. 50836 (line 903) 50837* __fractutauhq: Fixed-point fractional library routines. 50838 (line 897) 50839* __fractutauqq: Fixed-point fractional library routines. 50840 (line 895) 50841* __fractutausa2: Fixed-point fractional library routines. 50842 (line 905) 50843* __fractutausq: Fixed-point fractional library routines. 50844 (line 899) 50845* __gedf2: Soft float library routines. 50846 (line 205) 50847* __gesf2: Soft float library routines. 50848 (line 204) 50849* __getf2: Soft float library routines. 50850 (line 206) 50851* __gtdf2: Soft float library routines. 50852 (line 223) 50853* __gtsf2: Soft float library routines. 50854 (line 222) 50855* __gttf2: Soft float library routines. 50856 (line 224) 50857* __ledf2: Soft float library routines. 50858 (line 217) 50859* __lesf2: Soft float library routines. 50860 (line 216) 50861* __letf2: Soft float library routines. 50862 (line 218) 50863* __lshrdi3: Integer library routines. 50864 (line 30) 50865* __lshrsi3: Integer library routines. 50866 (line 29) 50867* __lshrti3: Integer library routines. 50868 (line 31) 50869* __lshruda3: Fixed-point fractional library routines. 50870 (line 388) 50871* __lshrudq3: Fixed-point fractional library routines. 50872 (line 382) 50873* __lshruha3: Fixed-point fractional library routines. 50874 (line 384) 50875* __lshruhq3: Fixed-point fractional library routines. 50876 (line 378) 50877* __lshruqq3: Fixed-point fractional library routines. 50878 (line 376) 50879* __lshrusa3: Fixed-point fractional library routines. 50880 (line 386) 50881* __lshrusq3: Fixed-point fractional library routines. 50882 (line 380) 50883* __lshruta3: Fixed-point fractional library routines. 50884 (line 390) 50885* __ltdf2: Soft float library routines. 50886 (line 211) 50887* __ltsf2: Soft float library routines. 50888 (line 210) 50889* __lttf2: Soft float library routines. 50890 (line 212) 50891* __main: Collect2. (line 15) 50892* __moddi3: Integer library routines. 50893 (line 36) 50894* __modsi3: Integer library routines. 50895 (line 35) 50896* __modti3: Integer library routines. 50897 (line 37) 50898* __morestack_current_segment: Miscellaneous routines. 50899 (line 45) 50900* __morestack_initial_sp: Miscellaneous routines. 50901 (line 46) 50902* __morestack_segments: Miscellaneous routines. 50903 (line 44) 50904* __mulda3: Fixed-point fractional library routines. 50905 (line 170) 50906* __muldc3: Soft float library routines. 50907 (line 239) 50908* __muldf3: Soft float library routines. 50909 (line 39) 50910* __muldi3: Integer library routines. 50911 (line 42) 50912* __muldq3: Fixed-point fractional library routines. 50913 (line 157) 50914* __mulha3: Fixed-point fractional library routines. 50915 (line 167) 50916* __mulhq3: Fixed-point fractional library routines. 50917 (line 155) 50918* __mulqq3: Fixed-point fractional library routines. 50919 (line 153) 50920* __mulsa3: Fixed-point fractional library routines. 50921 (line 169) 50922* __mulsc3: Soft float library routines. 50923 (line 237) 50924* __mulsf3: Soft float library routines. 50925 (line 38) 50926* __mulsi3: Integer library routines. 50927 (line 41) 50928* __mulsq3: Fixed-point fractional library routines. 50929 (line 156) 50930* __multa3: Fixed-point fractional library routines. 50931 (line 171) 50932* __multc3: Soft float library routines. 50933 (line 241) 50934* __multf3: Soft float library routines. 50935 (line 40) 50936* __multi3: Integer library routines. 50937 (line 43) 50938* __muluda3: Fixed-point fractional library routines. 50939 (line 177) 50940* __muludq3: Fixed-point fractional library routines. 50941 (line 165) 50942* __muluha3: Fixed-point fractional library routines. 50943 (line 173) 50944* __muluhq3: Fixed-point fractional library routines. 50945 (line 161) 50946* __muluqq3: Fixed-point fractional library routines. 50947 (line 159) 50948* __mulusa3: Fixed-point fractional library routines. 50949 (line 175) 50950* __mulusq3: Fixed-point fractional library routines. 50951 (line 163) 50952* __muluta3: Fixed-point fractional library routines. 50953 (line 179) 50954* __mulvdi3: Integer library routines. 50955 (line 114) 50956* __mulvsi3: Integer library routines. 50957 (line 113) 50958* __mulxc3: Soft float library routines. 50959 (line 243) 50960* __mulxf3: Soft float library routines. 50961 (line 42) 50962* __nedf2: Soft float library routines. 50963 (line 199) 50964* __negda2: Fixed-point fractional library routines. 50965 (line 298) 50966* __negdf2: Soft float library routines. 50967 (line 55) 50968* __negdi2: Integer library routines. 50969 (line 46) 50970* __negdq2: Fixed-point fractional library routines. 50971 (line 288) 50972* __negha2: Fixed-point fractional library routines. 50973 (line 296) 50974* __neghq2: Fixed-point fractional library routines. 50975 (line 286) 50976* __negqq2: Fixed-point fractional library routines. 50977 (line 285) 50978* __negsa2: Fixed-point fractional library routines. 50979 (line 297) 50980* __negsf2: Soft float library routines. 50981 (line 54) 50982* __negsq2: Fixed-point fractional library routines. 50983 (line 287) 50984* __negta2: Fixed-point fractional library routines. 50985 (line 299) 50986* __negtf2: Soft float library routines. 50987 (line 56) 50988* __negti2: Integer library routines. 50989 (line 47) 50990* __neguda2: Fixed-point fractional library routines. 50991 (line 303) 50992* __negudq2: Fixed-point fractional library routines. 50993 (line 294) 50994* __neguha2: Fixed-point fractional library routines. 50995 (line 300) 50996* __neguhq2: Fixed-point fractional library routines. 50997 (line 291) 50998* __neguqq2: Fixed-point fractional library routines. 50999 (line 289) 51000* __negusa2: Fixed-point fractional library routines. 51001 (line 302) 51002* __negusq2: Fixed-point fractional library routines. 51003 (line 292) 51004* __neguta2: Fixed-point fractional library routines. 51005 (line 305) 51006* __negvdi2: Integer library routines. 51007 (line 118) 51008* __negvsi2: Integer library routines. 51009 (line 117) 51010* __negxf2: Soft float library routines. 51011 (line 57) 51012* __nesf2: Soft float library routines. 51013 (line 198) 51014* __netf2: Soft float library routines. 51015 (line 200) 51016* __paritydi2: Integer library routines. 51017 (line 150) 51018* __paritysi2: Integer library routines. 51019 (line 149) 51020* __parityti2: Integer library routines. 51021 (line 151) 51022* __popcountdi2: Integer library routines. 51023 (line 156) 51024* __popcountsi2: Integer library routines. 51025 (line 155) 51026* __popcountti2: Integer library routines. 51027 (line 157) 51028* __powidf2: Soft float library routines. 51029 (line 232) 51030* __powisf2: Soft float library routines. 51031 (line 231) 51032* __powitf2: Soft float library routines. 51033 (line 233) 51034* __powixf2: Soft float library routines. 51035 (line 234) 51036* __satfractdadq: Fixed-point fractional library routines. 51037 (line 1152) 51038* __satfractdaha2: Fixed-point fractional library routines. 51039 (line 1153) 51040* __satfractdahq: Fixed-point fractional library routines. 51041 (line 1150) 51042* __satfractdaqq: Fixed-point fractional library routines. 51043 (line 1149) 51044* __satfractdasa2: Fixed-point fractional library routines. 51045 (line 1154) 51046* __satfractdasq: Fixed-point fractional library routines. 51047 (line 1151) 51048* __satfractdata2: Fixed-point fractional library routines. 51049 (line 1155) 51050* __satfractdauda: Fixed-point fractional library routines. 51051 (line 1165) 51052* __satfractdaudq: Fixed-point fractional library routines. 51053 (line 1160) 51054* __satfractdauha: Fixed-point fractional library routines. 51055 (line 1162) 51056* __satfractdauhq: Fixed-point fractional library routines. 51057 (line 1158) 51058* __satfractdauqq: Fixed-point fractional library routines. 51059 (line 1156) 51060* __satfractdausa: Fixed-point fractional library routines. 51061 (line 1164) 51062* __satfractdausq: Fixed-point fractional library routines. 51063 (line 1159) 51064* __satfractdauta: Fixed-point fractional library routines. 51065 (line 1166) 51066* __satfractdfda: Fixed-point fractional library routines. 51067 (line 1505) 51068* __satfractdfdq: Fixed-point fractional library routines. 51069 (line 1502) 51070* __satfractdfha: Fixed-point fractional library routines. 51071 (line 1503) 51072* __satfractdfhq: Fixed-point fractional library routines. 51073 (line 1500) 51074* __satfractdfqq: Fixed-point fractional library routines. 51075 (line 1499) 51076* __satfractdfsa: Fixed-point fractional library routines. 51077 (line 1504) 51078* __satfractdfsq: Fixed-point fractional library routines. 51079 (line 1501) 51080* __satfractdfta: Fixed-point fractional library routines. 51081 (line 1506) 51082* __satfractdfuda: Fixed-point fractional library routines. 51083 (line 1514) 51084* __satfractdfudq: Fixed-point fractional library routines. 51085 (line 1510) 51086* __satfractdfuha: Fixed-point fractional library routines. 51087 (line 1512) 51088* __satfractdfuhq: Fixed-point fractional library routines. 51089 (line 1508) 51090* __satfractdfuqq: Fixed-point fractional library routines. 51091 (line 1507) 51092* __satfractdfusa: Fixed-point fractional library routines. 51093 (line 1513) 51094* __satfractdfusq: Fixed-point fractional library routines. 51095 (line 1509) 51096* __satfractdfuta: Fixed-point fractional library routines. 51097 (line 1515) 51098* __satfractdida: Fixed-point fractional library routines. 51099 (line 1455) 51100* __satfractdidq: Fixed-point fractional library routines. 51101 (line 1452) 51102* __satfractdiha: Fixed-point fractional library routines. 51103 (line 1453) 51104* __satfractdihq: Fixed-point fractional library routines. 51105 (line 1450) 51106* __satfractdiqq: Fixed-point fractional library routines. 51107 (line 1449) 51108* __satfractdisa: Fixed-point fractional library routines. 51109 (line 1454) 51110* __satfractdisq: Fixed-point fractional library routines. 51111 (line 1451) 51112* __satfractdita: Fixed-point fractional library routines. 51113 (line 1456) 51114* __satfractdiuda: Fixed-point fractional library routines. 51115 (line 1463) 51116* __satfractdiudq: Fixed-point fractional library routines. 51117 (line 1460) 51118* __satfractdiuha: Fixed-point fractional library routines. 51119 (line 1461) 51120* __satfractdiuhq: Fixed-point fractional library routines. 51121 (line 1458) 51122* __satfractdiuqq: Fixed-point fractional library routines. 51123 (line 1457) 51124* __satfractdiusa: Fixed-point fractional library routines. 51125 (line 1462) 51126* __satfractdiusq: Fixed-point fractional library routines. 51127 (line 1459) 51128* __satfractdiuta: Fixed-point fractional library routines. 51129 (line 1464) 51130* __satfractdqda: Fixed-point fractional library routines. 51131 (line 1097) 51132* __satfractdqha: Fixed-point fractional library routines. 51133 (line 1095) 51134* __satfractdqhq2: Fixed-point fractional library routines. 51135 (line 1093) 51136* __satfractdqqq2: Fixed-point fractional library routines. 51137 (line 1092) 51138* __satfractdqsa: Fixed-point fractional library routines. 51139 (line 1096) 51140* __satfractdqsq2: Fixed-point fractional library routines. 51141 (line 1094) 51142* __satfractdqta: Fixed-point fractional library routines. 51143 (line 1098) 51144* __satfractdquda: Fixed-point fractional library routines. 51145 (line 1109) 51146* __satfractdqudq: Fixed-point fractional library routines. 51147 (line 1104) 51148* __satfractdquha: Fixed-point fractional library routines. 51149 (line 1106) 51150* __satfractdquhq: Fixed-point fractional library routines. 51151 (line 1101) 51152* __satfractdquqq: Fixed-point fractional library routines. 51153 (line 1099) 51154* __satfractdqusa: Fixed-point fractional library routines. 51155 (line 1108) 51156* __satfractdqusq: Fixed-point fractional library routines. 51157 (line 1102) 51158* __satfractdquta: Fixed-point fractional library routines. 51159 (line 1111) 51160* __satfracthada2: Fixed-point fractional library routines. 51161 (line 1118) 51162* __satfracthadq: Fixed-point fractional library routines. 51163 (line 1116) 51164* __satfracthahq: Fixed-point fractional library routines. 51165 (line 1114) 51166* __satfracthaqq: Fixed-point fractional library routines. 51167 (line 1113) 51168* __satfracthasa2: Fixed-point fractional library routines. 51169 (line 1117) 51170* __satfracthasq: Fixed-point fractional library routines. 51171 (line 1115) 51172* __satfracthata2: Fixed-point fractional library routines. 51173 (line 1119) 51174* __satfracthauda: Fixed-point fractional library routines. 51175 (line 1130) 51176* __satfracthaudq: Fixed-point fractional library routines. 51177 (line 1125) 51178* __satfracthauha: Fixed-point fractional library routines. 51179 (line 1127) 51180* __satfracthauhq: Fixed-point fractional library routines. 51181 (line 1122) 51182* __satfracthauqq: Fixed-point fractional library routines. 51183 (line 1120) 51184* __satfracthausa: Fixed-point fractional library routines. 51185 (line 1129) 51186* __satfracthausq: Fixed-point fractional library routines. 51187 (line 1123) 51188* __satfracthauta: Fixed-point fractional library routines. 51189 (line 1132) 51190* __satfracthida: Fixed-point fractional library routines. 51191 (line 1423) 51192* __satfracthidq: Fixed-point fractional library routines. 51193 (line 1420) 51194* __satfracthiha: Fixed-point fractional library routines. 51195 (line 1421) 51196* __satfracthihq: Fixed-point fractional library routines. 51197 (line 1418) 51198* __satfracthiqq: Fixed-point fractional library routines. 51199 (line 1417) 51200* __satfracthisa: Fixed-point fractional library routines. 51201 (line 1422) 51202* __satfracthisq: Fixed-point fractional library routines. 51203 (line 1419) 51204* __satfracthita: Fixed-point fractional library routines. 51205 (line 1424) 51206* __satfracthiuda: Fixed-point fractional library routines. 51207 (line 1431) 51208* __satfracthiudq: Fixed-point fractional library routines. 51209 (line 1428) 51210* __satfracthiuha: Fixed-point fractional library routines. 51211 (line 1429) 51212* __satfracthiuhq: Fixed-point fractional library routines. 51213 (line 1426) 51214* __satfracthiuqq: Fixed-point fractional library routines. 51215 (line 1425) 51216* __satfracthiusa: Fixed-point fractional library routines. 51217 (line 1430) 51218* __satfracthiusq: Fixed-point fractional library routines. 51219 (line 1427) 51220* __satfracthiuta: Fixed-point fractional library routines. 51221 (line 1432) 51222* __satfracthqda: Fixed-point fractional library routines. 51223 (line 1063) 51224* __satfracthqdq2: Fixed-point fractional library routines. 51225 (line 1060) 51226* __satfracthqha: Fixed-point fractional library routines. 51227 (line 1061) 51228* __satfracthqqq2: Fixed-point fractional library routines. 51229 (line 1058) 51230* __satfracthqsa: Fixed-point fractional library routines. 51231 (line 1062) 51232* __satfracthqsq2: Fixed-point fractional library routines. 51233 (line 1059) 51234* __satfracthqta: Fixed-point fractional library routines. 51235 (line 1064) 51236* __satfracthquda: Fixed-point fractional library routines. 51237 (line 1071) 51238* __satfracthqudq: Fixed-point fractional library routines. 51239 (line 1068) 51240* __satfracthquha: Fixed-point fractional library routines. 51241 (line 1069) 51242* __satfracthquhq: Fixed-point fractional library routines. 51243 (line 1066) 51244* __satfracthquqq: Fixed-point fractional library routines. 51245 (line 1065) 51246* __satfracthqusa: Fixed-point fractional library routines. 51247 (line 1070) 51248* __satfracthqusq: Fixed-point fractional library routines. 51249 (line 1067) 51250* __satfracthquta: Fixed-point fractional library routines. 51251 (line 1072) 51252* __satfractqida: Fixed-point fractional library routines. 51253 (line 1401) 51254* __satfractqidq: Fixed-point fractional library routines. 51255 (line 1398) 51256* __satfractqiha: Fixed-point fractional library routines. 51257 (line 1399) 51258* __satfractqihq: Fixed-point fractional library routines. 51259 (line 1396) 51260* __satfractqiqq: Fixed-point fractional library routines. 51261 (line 1395) 51262* __satfractqisa: Fixed-point fractional library routines. 51263 (line 1400) 51264* __satfractqisq: Fixed-point fractional library routines. 51265 (line 1397) 51266* __satfractqita: Fixed-point fractional library routines. 51267 (line 1402) 51268* __satfractqiuda: Fixed-point fractional library routines. 51269 (line 1413) 51270* __satfractqiudq: Fixed-point fractional library routines. 51271 (line 1408) 51272* __satfractqiuha: Fixed-point fractional library routines. 51273 (line 1410) 51274* __satfractqiuhq: Fixed-point fractional library routines. 51275 (line 1405) 51276* __satfractqiuqq: Fixed-point fractional library routines. 51277 (line 1403) 51278* __satfractqiusa: Fixed-point fractional library routines. 51279 (line 1412) 51280* __satfractqiusq: Fixed-point fractional library routines. 51281 (line 1406) 51282* __satfractqiuta: Fixed-point fractional library routines. 51283 (line 1415) 51284* __satfractqqda: Fixed-point fractional library routines. 51285 (line 1042) 51286* __satfractqqdq2: Fixed-point fractional library routines. 51287 (line 1039) 51288* __satfractqqha: Fixed-point fractional library routines. 51289 (line 1040) 51290* __satfractqqhq2: Fixed-point fractional library routines. 51291 (line 1037) 51292* __satfractqqsa: Fixed-point fractional library routines. 51293 (line 1041) 51294* __satfractqqsq2: Fixed-point fractional library routines. 51295 (line 1038) 51296* __satfractqqta: Fixed-point fractional library routines. 51297 (line 1043) 51298* __satfractqquda: Fixed-point fractional library routines. 51299 (line 1054) 51300* __satfractqqudq: Fixed-point fractional library routines. 51301 (line 1049) 51302* __satfractqquha: Fixed-point fractional library routines. 51303 (line 1051) 51304* __satfractqquhq: Fixed-point fractional library routines. 51305 (line 1046) 51306* __satfractqquqq: Fixed-point fractional library routines. 51307 (line 1044) 51308* __satfractqqusa: Fixed-point fractional library routines. 51309 (line 1053) 51310* __satfractqqusq: Fixed-point fractional library routines. 51311 (line 1047) 51312* __satfractqquta: Fixed-point fractional library routines. 51313 (line 1056) 51314* __satfractsada2: Fixed-point fractional library routines. 51315 (line 1139) 51316* __satfractsadq: Fixed-point fractional library routines. 51317 (line 1137) 51318* __satfractsaha2: Fixed-point fractional library routines. 51319 (line 1138) 51320* __satfractsahq: Fixed-point fractional library routines. 51321 (line 1135) 51322* __satfractsaqq: Fixed-point fractional library routines. 51323 (line 1134) 51324* __satfractsasq: Fixed-point fractional library routines. 51325 (line 1136) 51326* __satfractsata2: Fixed-point fractional library routines. 51327 (line 1140) 51328* __satfractsauda: Fixed-point fractional library routines. 51329 (line 1147) 51330* __satfractsaudq: Fixed-point fractional library routines. 51331 (line 1144) 51332* __satfractsauha: Fixed-point fractional library routines. 51333 (line 1145) 51334* __satfractsauhq: Fixed-point fractional library routines. 51335 (line 1142) 51336* __satfractsauqq: Fixed-point fractional library routines. 51337 (line 1141) 51338* __satfractsausa: Fixed-point fractional library routines. 51339 (line 1146) 51340* __satfractsausq: Fixed-point fractional library routines. 51341 (line 1143) 51342* __satfractsauta: Fixed-point fractional library routines. 51343 (line 1148) 51344* __satfractsfda: Fixed-point fractional library routines. 51345 (line 1489) 51346* __satfractsfdq: Fixed-point fractional library routines. 51347 (line 1486) 51348* __satfractsfha: Fixed-point fractional library routines. 51349 (line 1487) 51350* __satfractsfhq: Fixed-point fractional library routines. 51351 (line 1484) 51352* __satfractsfqq: Fixed-point fractional library routines. 51353 (line 1483) 51354* __satfractsfsa: Fixed-point fractional library routines. 51355 (line 1488) 51356* __satfractsfsq: Fixed-point fractional library routines. 51357 (line 1485) 51358* __satfractsfta: Fixed-point fractional library routines. 51359 (line 1490) 51360* __satfractsfuda: Fixed-point fractional library routines. 51361 (line 1497) 51362* __satfractsfudq: Fixed-point fractional library routines. 51363 (line 1494) 51364* __satfractsfuha: Fixed-point fractional library routines. 51365 (line 1495) 51366* __satfractsfuhq: Fixed-point fractional library routines. 51367 (line 1492) 51368* __satfractsfuqq: Fixed-point fractional library routines. 51369 (line 1491) 51370* __satfractsfusa: Fixed-point fractional library routines. 51371 (line 1496) 51372* __satfractsfusq: Fixed-point fractional library routines. 51373 (line 1493) 51374* __satfractsfuta: Fixed-point fractional library routines. 51375 (line 1498) 51376* __satfractsida: Fixed-point fractional library routines. 51377 (line 1439) 51378* __satfractsidq: Fixed-point fractional library routines. 51379 (line 1436) 51380* __satfractsiha: Fixed-point fractional library routines. 51381 (line 1437) 51382* __satfractsihq: Fixed-point fractional library routines. 51383 (line 1434) 51384* __satfractsiqq: Fixed-point fractional library routines. 51385 (line 1433) 51386* __satfractsisa: Fixed-point fractional library routines. 51387 (line 1438) 51388* __satfractsisq: Fixed-point fractional library routines. 51389 (line 1435) 51390* __satfractsita: Fixed-point fractional library routines. 51391 (line 1440) 51392* __satfractsiuda: Fixed-point fractional library routines. 51393 (line 1447) 51394* __satfractsiudq: Fixed-point fractional library routines. 51395 (line 1444) 51396* __satfractsiuha: Fixed-point fractional library routines. 51397 (line 1445) 51398* __satfractsiuhq: Fixed-point fractional library routines. 51399 (line 1442) 51400* __satfractsiuqq: Fixed-point fractional library routines. 51401 (line 1441) 51402* __satfractsiusa: Fixed-point fractional library routines. 51403 (line 1446) 51404* __satfractsiusq: Fixed-point fractional library routines. 51405 (line 1443) 51406* __satfractsiuta: Fixed-point fractional library routines. 51407 (line 1448) 51408* __satfractsqda: Fixed-point fractional library routines. 51409 (line 1078) 51410* __satfractsqdq2: Fixed-point fractional library routines. 51411 (line 1075) 51412* __satfractsqha: Fixed-point fractional library routines. 51413 (line 1076) 51414* __satfractsqhq2: Fixed-point fractional library routines. 51415 (line 1074) 51416* __satfractsqqq2: Fixed-point fractional library routines. 51417 (line 1073) 51418* __satfractsqsa: Fixed-point fractional library routines. 51419 (line 1077) 51420* __satfractsqta: Fixed-point fractional library routines. 51421 (line 1079) 51422* __satfractsquda: Fixed-point fractional library routines. 51423 (line 1089) 51424* __satfractsqudq: Fixed-point fractional library routines. 51425 (line 1084) 51426* __satfractsquha: Fixed-point fractional library routines. 51427 (line 1086) 51428* __satfractsquhq: Fixed-point fractional library routines. 51429 (line 1082) 51430* __satfractsquqq: Fixed-point fractional library routines. 51431 (line 1080) 51432* __satfractsqusa: Fixed-point fractional library routines. 51433 (line 1088) 51434* __satfractsqusq: Fixed-point fractional library routines. 51435 (line 1083) 51436* __satfractsquta: Fixed-point fractional library routines. 51437 (line 1090) 51438* __satfracttada2: Fixed-point fractional library routines. 51439 (line 1174) 51440* __satfracttadq: Fixed-point fractional library routines. 51441 (line 1171) 51442* __satfracttaha2: Fixed-point fractional library routines. 51443 (line 1172) 51444* __satfracttahq: Fixed-point fractional library routines. 51445 (line 1169) 51446* __satfracttaqq: Fixed-point fractional library routines. 51447 (line 1168) 51448* __satfracttasa2: Fixed-point fractional library routines. 51449 (line 1173) 51450* __satfracttasq: Fixed-point fractional library routines. 51451 (line 1170) 51452* __satfracttauda: Fixed-point fractional library routines. 51453 (line 1185) 51454* __satfracttaudq: Fixed-point fractional library routines. 51455 (line 1180) 51456* __satfracttauha: Fixed-point fractional library routines. 51457 (line 1182) 51458* __satfracttauhq: Fixed-point fractional library routines. 51459 (line 1177) 51460* __satfracttauqq: Fixed-point fractional library routines. 51461 (line 1175) 51462* __satfracttausa: Fixed-point fractional library routines. 51463 (line 1184) 51464* __satfracttausq: Fixed-point fractional library routines. 51465 (line 1178) 51466* __satfracttauta: Fixed-point fractional library routines. 51467 (line 1187) 51468* __satfracttida: Fixed-point fractional library routines. 51469 (line 1471) 51470* __satfracttidq: Fixed-point fractional library routines. 51471 (line 1468) 51472* __satfracttiha: Fixed-point fractional library routines. 51473 (line 1469) 51474* __satfracttihq: Fixed-point fractional library routines. 51475 (line 1466) 51476* __satfracttiqq: Fixed-point fractional library routines. 51477 (line 1465) 51478* __satfracttisa: Fixed-point fractional library routines. 51479 (line 1470) 51480* __satfracttisq: Fixed-point fractional library routines. 51481 (line 1467) 51482* __satfracttita: Fixed-point fractional library routines. 51483 (line 1472) 51484* __satfracttiuda: Fixed-point fractional library routines. 51485 (line 1480) 51486* __satfracttiudq: Fixed-point fractional library routines. 51487 (line 1476) 51488* __satfracttiuha: Fixed-point fractional library routines. 51489 (line 1478) 51490* __satfracttiuhq: Fixed-point fractional library routines. 51491 (line 1474) 51492* __satfracttiuqq: Fixed-point fractional library routines. 51493 (line 1473) 51494* __satfracttiusa: Fixed-point fractional library routines. 51495 (line 1479) 51496* __satfracttiusq: Fixed-point fractional library routines. 51497 (line 1475) 51498* __satfracttiuta: Fixed-point fractional library routines. 51499 (line 1481) 51500* __satfractudada: Fixed-point fractional library routines. 51501 (line 1350) 51502* __satfractudadq: Fixed-point fractional library routines. 51503 (line 1345) 51504* __satfractudaha: Fixed-point fractional library routines. 51505 (line 1347) 51506* __satfractudahq: Fixed-point fractional library routines. 51507 (line 1343) 51508* __satfractudaqq: Fixed-point fractional library routines. 51509 (line 1341) 51510* __satfractudasa: Fixed-point fractional library routines. 51511 (line 1349) 51512* __satfractudasq: Fixed-point fractional library routines. 51513 (line 1344) 51514* __satfractudata: Fixed-point fractional library routines. 51515 (line 1351) 51516* __satfractudaudq: Fixed-point fractional library routines. 51517 (line 1359) 51518* __satfractudauha2: Fixed-point fractional library routines. 51519 (line 1361) 51520* __satfractudauhq: Fixed-point fractional library routines. 51521 (line 1355) 51522* __satfractudauqq: Fixed-point fractional library routines. 51523 (line 1353) 51524* __satfractudausa2: Fixed-point fractional library routines. 51525 (line 1363) 51526* __satfractudausq: Fixed-point fractional library routines. 51527 (line 1357) 51528* __satfractudauta2: Fixed-point fractional library routines. 51529 (line 1365) 51530* __satfractudqda: Fixed-point fractional library routines. 51531 (line 1274) 51532* __satfractudqdq: Fixed-point fractional library routines. 51533 (line 1269) 51534* __satfractudqha: Fixed-point fractional library routines. 51535 (line 1271) 51536* __satfractudqhq: Fixed-point fractional library routines. 51537 (line 1266) 51538* __satfractudqqq: Fixed-point fractional library routines. 51539 (line 1264) 51540* __satfractudqsa: Fixed-point fractional library routines. 51541 (line 1273) 51542* __satfractudqsq: Fixed-point fractional library routines. 51543 (line 1267) 51544* __satfractudqta: Fixed-point fractional library routines. 51545 (line 1276) 51546* __satfractudquda: Fixed-point fractional library routines. 51547 (line 1288) 51548* __satfractudquha: Fixed-point fractional library routines. 51549 (line 1284) 51550* __satfractudquhq2: Fixed-point fractional library routines. 51551 (line 1280) 51552* __satfractudquqq2: Fixed-point fractional library routines. 51553 (line 1278) 51554* __satfractudqusa: Fixed-point fractional library routines. 51555 (line 1286) 51556* __satfractudqusq2: Fixed-point fractional library routines. 51557 (line 1282) 51558* __satfractudquta: Fixed-point fractional library routines. 51559 (line 1290) 51560* __satfractuhada: Fixed-point fractional library routines. 51561 (line 1302) 51562* __satfractuhadq: Fixed-point fractional library routines. 51563 (line 1297) 51564* __satfractuhaha: Fixed-point fractional library routines. 51565 (line 1299) 51566* __satfractuhahq: Fixed-point fractional library routines. 51567 (line 1294) 51568* __satfractuhaqq: Fixed-point fractional library routines. 51569 (line 1292) 51570* __satfractuhasa: Fixed-point fractional library routines. 51571 (line 1301) 51572* __satfractuhasq: Fixed-point fractional library routines. 51573 (line 1295) 51574* __satfractuhata: Fixed-point fractional library routines. 51575 (line 1304) 51576* __satfractuhauda2: Fixed-point fractional library routines. 51577 (line 1316) 51578* __satfractuhaudq: Fixed-point fractional library routines. 51579 (line 1312) 51580* __satfractuhauhq: Fixed-point fractional library routines. 51581 (line 1308) 51582* __satfractuhauqq: Fixed-point fractional library routines. 51583 (line 1306) 51584* __satfractuhausa2: Fixed-point fractional library routines. 51585 (line 1314) 51586* __satfractuhausq: Fixed-point fractional library routines. 51587 (line 1310) 51588* __satfractuhauta2: Fixed-point fractional library routines. 51589 (line 1318) 51590* __satfractuhqda: Fixed-point fractional library routines. 51591 (line 1223) 51592* __satfractuhqdq: Fixed-point fractional library routines. 51593 (line 1220) 51594* __satfractuhqha: Fixed-point fractional library routines. 51595 (line 1221) 51596* __satfractuhqhq: Fixed-point fractional library routines. 51597 (line 1218) 51598* __satfractuhqqq: Fixed-point fractional library routines. 51599 (line 1217) 51600* __satfractuhqsa: Fixed-point fractional library routines. 51601 (line 1222) 51602* __satfractuhqsq: Fixed-point fractional library routines. 51603 (line 1219) 51604* __satfractuhqta: Fixed-point fractional library routines. 51605 (line 1224) 51606* __satfractuhquda: Fixed-point fractional library routines. 51607 (line 1234) 51608* __satfractuhqudq2: Fixed-point fractional library routines. 51609 (line 1229) 51610* __satfractuhquha: Fixed-point fractional library routines. 51611 (line 1231) 51612* __satfractuhquqq2: Fixed-point fractional library routines. 51613 (line 1225) 51614* __satfractuhqusa: Fixed-point fractional library routines. 51615 (line 1233) 51616* __satfractuhqusq2: Fixed-point fractional library routines. 51617 (line 1227) 51618* __satfractuhquta: Fixed-point fractional library routines. 51619 (line 1236) 51620* __satfractunsdida: Fixed-point fractional library routines. 51621 (line 1833) 51622* __satfractunsdidq: Fixed-point fractional library routines. 51623 (line 1829) 51624* __satfractunsdiha: Fixed-point fractional library routines. 51625 (line 1831) 51626* __satfractunsdihq: Fixed-point fractional library routines. 51627 (line 1827) 51628* __satfractunsdiqq: Fixed-point fractional library routines. 51629 (line 1826) 51630* __satfractunsdisa: Fixed-point fractional library routines. 51631 (line 1832) 51632* __satfractunsdisq: Fixed-point fractional library routines. 51633 (line 1828) 51634* __satfractunsdita: Fixed-point fractional library routines. 51635 (line 1834) 51636* __satfractunsdiuda: Fixed-point fractional library routines. 51637 (line 1848) 51638* __satfractunsdiudq: Fixed-point fractional library routines. 51639 (line 1842) 51640* __satfractunsdiuha: Fixed-point fractional library routines. 51641 (line 1844) 51642* __satfractunsdiuhq: Fixed-point fractional library routines. 51643 (line 1838) 51644* __satfractunsdiuqq: Fixed-point fractional library routines. 51645 (line 1836) 51646* __satfractunsdiusa: Fixed-point fractional library routines. 51647 (line 1846) 51648* __satfractunsdiusq: Fixed-point fractional library routines. 51649 (line 1840) 51650* __satfractunsdiuta: Fixed-point fractional library routines. 51651 (line 1850) 51652* __satfractunshida: Fixed-point fractional library routines. 51653 (line 1785) 51654* __satfractunshidq: Fixed-point fractional library routines. 51655 (line 1781) 51656* __satfractunshiha: Fixed-point fractional library routines. 51657 (line 1783) 51658* __satfractunshihq: Fixed-point fractional library routines. 51659 (line 1779) 51660* __satfractunshiqq: Fixed-point fractional library routines. 51661 (line 1778) 51662* __satfractunshisa: Fixed-point fractional library routines. 51663 (line 1784) 51664* __satfractunshisq: Fixed-point fractional library routines. 51665 (line 1780) 51666* __satfractunshita: Fixed-point fractional library routines. 51667 (line 1786) 51668* __satfractunshiuda: Fixed-point fractional library routines. 51669 (line 1800) 51670* __satfractunshiudq: Fixed-point fractional library routines. 51671 (line 1794) 51672* __satfractunshiuha: Fixed-point fractional library routines. 51673 (line 1796) 51674* __satfractunshiuhq: Fixed-point fractional library routines. 51675 (line 1790) 51676* __satfractunshiuqq: Fixed-point fractional library routines. 51677 (line 1788) 51678* __satfractunshiusa: Fixed-point fractional library routines. 51679 (line 1798) 51680* __satfractunshiusq: Fixed-point fractional library routines. 51681 (line 1792) 51682* __satfractunshiuta: Fixed-point fractional library routines. 51683 (line 1802) 51684* __satfractunsqida: Fixed-point fractional library routines. 51685 (line 1759) 51686* __satfractunsqidq: Fixed-point fractional library routines. 51687 (line 1755) 51688* __satfractunsqiha: Fixed-point fractional library routines. 51689 (line 1757) 51690* __satfractunsqihq: Fixed-point fractional library routines. 51691 (line 1753) 51692* __satfractunsqiqq: Fixed-point fractional library routines. 51693 (line 1752) 51694* __satfractunsqisa: Fixed-point fractional library routines. 51695 (line 1758) 51696* __satfractunsqisq: Fixed-point fractional library routines. 51697 (line 1754) 51698* __satfractunsqita: Fixed-point fractional library routines. 51699 (line 1760) 51700* __satfractunsqiuda: Fixed-point fractional library routines. 51701 (line 1774) 51702* __satfractunsqiudq: Fixed-point fractional library routines. 51703 (line 1768) 51704* __satfractunsqiuha: Fixed-point fractional library routines. 51705 (line 1770) 51706* __satfractunsqiuhq: Fixed-point fractional library routines. 51707 (line 1764) 51708* __satfractunsqiuqq: Fixed-point fractional library routines. 51709 (line 1762) 51710* __satfractunsqiusa: Fixed-point fractional library routines. 51711 (line 1772) 51712* __satfractunsqiusq: Fixed-point fractional library routines. 51713 (line 1766) 51714* __satfractunsqiuta: Fixed-point fractional library routines. 51715 (line 1776) 51716* __satfractunssida: Fixed-point fractional library routines. 51717 (line 1810) 51718* __satfractunssidq: Fixed-point fractional library routines. 51719 (line 1807) 51720* __satfractunssiha: Fixed-point fractional library routines. 51721 (line 1808) 51722* __satfractunssihq: Fixed-point fractional library routines. 51723 (line 1805) 51724* __satfractunssiqq: Fixed-point fractional library routines. 51725 (line 1804) 51726* __satfractunssisa: Fixed-point fractional library routines. 51727 (line 1809) 51728* __satfractunssisq: Fixed-point fractional library routines. 51729 (line 1806) 51730* __satfractunssita: Fixed-point fractional library routines. 51731 (line 1811) 51732* __satfractunssiuda: Fixed-point fractional library routines. 51733 (line 1822) 51734* __satfractunssiudq: Fixed-point fractional library routines. 51735 (line 1817) 51736* __satfractunssiuha: Fixed-point fractional library routines. 51737 (line 1819) 51738* __satfractunssiuhq: Fixed-point fractional library routines. 51739 (line 1814) 51740* __satfractunssiuqq: Fixed-point fractional library routines. 51741 (line 1812) 51742* __satfractunssiusa: Fixed-point fractional library routines. 51743 (line 1821) 51744* __satfractunssiusq: Fixed-point fractional library routines. 51745 (line 1815) 51746* __satfractunssiuta: Fixed-point fractional library routines. 51747 (line 1824) 51748* __satfractunstida: Fixed-point fractional library routines. 51749 (line 1862) 51750* __satfractunstidq: Fixed-point fractional library routines. 51751 (line 1857) 51752* __satfractunstiha: Fixed-point fractional library routines. 51753 (line 1859) 51754* __satfractunstihq: Fixed-point fractional library routines. 51755 (line 1854) 51756* __satfractunstiqq: Fixed-point fractional library routines. 51757 (line 1852) 51758* __satfractunstisa: Fixed-point fractional library routines. 51759 (line 1861) 51760* __satfractunstisq: Fixed-point fractional library routines. 51761 (line 1855) 51762* __satfractunstita: Fixed-point fractional library routines. 51763 (line 1864) 51764* __satfractunstiuda: Fixed-point fractional library routines. 51765 (line 1878) 51766* __satfractunstiudq: Fixed-point fractional library routines. 51767 (line 1872) 51768* __satfractunstiuha: Fixed-point fractional library routines. 51769 (line 1874) 51770* __satfractunstiuhq: Fixed-point fractional library routines. 51771 (line 1868) 51772* __satfractunstiuqq: Fixed-point fractional library routines. 51773 (line 1866) 51774* __satfractunstiusa: Fixed-point fractional library routines. 51775 (line 1876) 51776* __satfractunstiusq: Fixed-point fractional library routines. 51777 (line 1870) 51778* __satfractunstiuta: Fixed-point fractional library routines. 51779 (line 1880) 51780* __satfractuqqda: Fixed-point fractional library routines. 51781 (line 1199) 51782* __satfractuqqdq: Fixed-point fractional library routines. 51783 (line 1194) 51784* __satfractuqqha: Fixed-point fractional library routines. 51785 (line 1196) 51786* __satfractuqqhq: Fixed-point fractional library routines. 51787 (line 1191) 51788* __satfractuqqqq: Fixed-point fractional library routines. 51789 (line 1189) 51790* __satfractuqqsa: Fixed-point fractional library routines. 51791 (line 1198) 51792* __satfractuqqsq: Fixed-point fractional library routines. 51793 (line 1192) 51794* __satfractuqqta: Fixed-point fractional library routines. 51795 (line 1201) 51796* __satfractuqquda: Fixed-point fractional library routines. 51797 (line 1213) 51798* __satfractuqqudq2: Fixed-point fractional library routines. 51799 (line 1207) 51800* __satfractuqquha: Fixed-point fractional library routines. 51801 (line 1209) 51802* __satfractuqquhq2: Fixed-point fractional library routines. 51803 (line 1203) 51804* __satfractuqqusa: Fixed-point fractional library routines. 51805 (line 1211) 51806* __satfractuqqusq2: Fixed-point fractional library routines. 51807 (line 1205) 51808* __satfractuqquta: Fixed-point fractional library routines. 51809 (line 1215) 51810* __satfractusada: Fixed-point fractional library routines. 51811 (line 1326) 51812* __satfractusadq: Fixed-point fractional library routines. 51813 (line 1323) 51814* __satfractusaha: Fixed-point fractional library routines. 51815 (line 1324) 51816* __satfractusahq: Fixed-point fractional library routines. 51817 (line 1321) 51818* __satfractusaqq: Fixed-point fractional library routines. 51819 (line 1320) 51820* __satfractusasa: Fixed-point fractional library routines. 51821 (line 1325) 51822* __satfractusasq: Fixed-point fractional library routines. 51823 (line 1322) 51824* __satfractusata: Fixed-point fractional library routines. 51825 (line 1327) 51826* __satfractusauda2: Fixed-point fractional library routines. 51827 (line 1337) 51828* __satfractusaudq: Fixed-point fractional library routines. 51829 (line 1333) 51830* __satfractusauha2: Fixed-point fractional library routines. 51831 (line 1335) 51832* __satfractusauhq: Fixed-point fractional library routines. 51833 (line 1330) 51834* __satfractusauqq: Fixed-point fractional library routines. 51835 (line 1328) 51836* __satfractusausq: Fixed-point fractional library routines. 51837 (line 1331) 51838* __satfractusauta2: Fixed-point fractional library routines. 51839 (line 1339) 51840* __satfractusqda: Fixed-point fractional library routines. 51841 (line 1247) 51842* __satfractusqdq: Fixed-point fractional library routines. 51843 (line 1242) 51844* __satfractusqha: Fixed-point fractional library routines. 51845 (line 1244) 51846* __satfractusqhq: Fixed-point fractional library routines. 51847 (line 1240) 51848* __satfractusqqq: Fixed-point fractional library routines. 51849 (line 1238) 51850* __satfractusqsa: Fixed-point fractional library routines. 51851 (line 1246) 51852* __satfractusqsq: Fixed-point fractional library routines. 51853 (line 1241) 51854* __satfractusqta: Fixed-point fractional library routines. 51855 (line 1248) 51856* __satfractusquda: Fixed-point fractional library routines. 51857 (line 1260) 51858* __satfractusqudq2: Fixed-point fractional library routines. 51859 (line 1254) 51860* __satfractusquha: Fixed-point fractional library routines. 51861 (line 1256) 51862* __satfractusquhq2: Fixed-point fractional library routines. 51863 (line 1252) 51864* __satfractusquqq2: Fixed-point fractional library routines. 51865 (line 1250) 51866* __satfractusqusa: Fixed-point fractional library routines. 51867 (line 1258) 51868* __satfractusquta: Fixed-point fractional library routines. 51869 (line 1262) 51870* __satfractutada: Fixed-point fractional library routines. 51871 (line 1377) 51872* __satfractutadq: Fixed-point fractional library routines. 51873 (line 1372) 51874* __satfractutaha: Fixed-point fractional library routines. 51875 (line 1374) 51876* __satfractutahq: Fixed-point fractional library routines. 51877 (line 1369) 51878* __satfractutaqq: Fixed-point fractional library routines. 51879 (line 1367) 51880* __satfractutasa: Fixed-point fractional library routines. 51881 (line 1376) 51882* __satfractutasq: Fixed-point fractional library routines. 51883 (line 1370) 51884* __satfractutata: Fixed-point fractional library routines. 51885 (line 1379) 51886* __satfractutauda2: Fixed-point fractional library routines. 51887 (line 1393) 51888* __satfractutaudq: Fixed-point fractional library routines. 51889 (line 1387) 51890* __satfractutauha2: Fixed-point fractional library routines. 51891 (line 1389) 51892* __satfractutauhq: Fixed-point fractional library routines. 51893 (line 1383) 51894* __satfractutauqq: Fixed-point fractional library routines. 51895 (line 1381) 51896* __satfractutausa2: Fixed-point fractional library routines. 51897 (line 1391) 51898* __satfractutausq: Fixed-point fractional library routines. 51899 (line 1385) 51900* __splitstack_find: Miscellaneous routines. 51901 (line 15) 51902* __ssaddda3: Fixed-point fractional library routines. 51903 (line 66) 51904* __ssadddq3: Fixed-point fractional library routines. 51905 (line 61) 51906* __ssaddha3: Fixed-point fractional library routines. 51907 (line 63) 51908* __ssaddhq3: Fixed-point fractional library routines. 51909 (line 59) 51910* __ssaddqq3: Fixed-point fractional library routines. 51911 (line 57) 51912* __ssaddsa3: Fixed-point fractional library routines. 51913 (line 65) 51914* __ssaddsq3: Fixed-point fractional library routines. 51915 (line 60) 51916* __ssaddta3: Fixed-point fractional library routines. 51917 (line 67) 51918* __ssashlda3: Fixed-point fractional library routines. 51919 (line 401) 51920* __ssashldq3: Fixed-point fractional library routines. 51921 (line 397) 51922* __ssashlha3: Fixed-point fractional library routines. 51923 (line 399) 51924* __ssashlhq3: Fixed-point fractional library routines. 51925 (line 395) 51926* __ssashlsa3: Fixed-point fractional library routines. 51927 (line 400) 51928* __ssashlsq3: Fixed-point fractional library routines. 51929 (line 396) 51930* __ssashlta3: Fixed-point fractional library routines. 51931 (line 402) 51932* __ssdivda3: Fixed-point fractional library routines. 51933 (line 260) 51934* __ssdivdq3: Fixed-point fractional library routines. 51935 (line 255) 51936* __ssdivha3: Fixed-point fractional library routines. 51937 (line 257) 51938* __ssdivhq3: Fixed-point fractional library routines. 51939 (line 253) 51940* __ssdivqq3: Fixed-point fractional library routines. 51941 (line 251) 51942* __ssdivsa3: Fixed-point fractional library routines. 51943 (line 259) 51944* __ssdivsq3: Fixed-point fractional library routines. 51945 (line 254) 51946* __ssdivta3: Fixed-point fractional library routines. 51947 (line 261) 51948* __ssmulda3: Fixed-point fractional library routines. 51949 (line 192) 51950* __ssmuldq3: Fixed-point fractional library routines. 51951 (line 187) 51952* __ssmulha3: Fixed-point fractional library routines. 51953 (line 189) 51954* __ssmulhq3: Fixed-point fractional library routines. 51955 (line 185) 51956* __ssmulqq3: Fixed-point fractional library routines. 51957 (line 183) 51958* __ssmulsa3: Fixed-point fractional library routines. 51959 (line 191) 51960* __ssmulsq3: Fixed-point fractional library routines. 51961 (line 186) 51962* __ssmulta3: Fixed-point fractional library routines. 51963 (line 193) 51964* __ssnegda2: Fixed-point fractional library routines. 51965 (line 315) 51966* __ssnegdq2: Fixed-point fractional library routines. 51967 (line 312) 51968* __ssnegha2: Fixed-point fractional library routines. 51969 (line 313) 51970* __ssneghq2: Fixed-point fractional library routines. 51971 (line 310) 51972* __ssnegqq2: Fixed-point fractional library routines. 51973 (line 309) 51974* __ssnegsa2: Fixed-point fractional library routines. 51975 (line 314) 51976* __ssnegsq2: Fixed-point fractional library routines. 51977 (line 311) 51978* __ssnegta2: Fixed-point fractional library routines. 51979 (line 316) 51980* __sssubda3: Fixed-point fractional library routines. 51981 (line 128) 51982* __sssubdq3: Fixed-point fractional library routines. 51983 (line 123) 51984* __sssubha3: Fixed-point fractional library routines. 51985 (line 125) 51986* __sssubhq3: Fixed-point fractional library routines. 51987 (line 121) 51988* __sssubqq3: Fixed-point fractional library routines. 51989 (line 119) 51990* __sssubsa3: Fixed-point fractional library routines. 51991 (line 127) 51992* __sssubsq3: Fixed-point fractional library routines. 51993 (line 122) 51994* __sssubta3: Fixed-point fractional library routines. 51995 (line 129) 51996* __subda3: Fixed-point fractional library routines. 51997 (line 106) 51998* __subdf3: Soft float library routines. 51999 (line 30) 52000* __subdq3: Fixed-point fractional library routines. 52001 (line 93) 52002* __subha3: Fixed-point fractional library routines. 52003 (line 103) 52004* __subhq3: Fixed-point fractional library routines. 52005 (line 91) 52006* __subqq3: Fixed-point fractional library routines. 52007 (line 89) 52008* __subsa3: Fixed-point fractional library routines. 52009 (line 105) 52010* __subsf3: Soft float library routines. 52011 (line 29) 52012* __subsq3: Fixed-point fractional library routines. 52013 (line 92) 52014* __subta3: Fixed-point fractional library routines. 52015 (line 107) 52016* __subtf3: Soft float library routines. 52017 (line 31) 52018* __subuda3: Fixed-point fractional library routines. 52019 (line 113) 52020* __subudq3: Fixed-point fractional library routines. 52021 (line 101) 52022* __subuha3: Fixed-point fractional library routines. 52023 (line 109) 52024* __subuhq3: Fixed-point fractional library routines. 52025 (line 97) 52026* __subuqq3: Fixed-point fractional library routines. 52027 (line 95) 52028* __subusa3: Fixed-point fractional library routines. 52029 (line 111) 52030* __subusq3: Fixed-point fractional library routines. 52031 (line 99) 52032* __subuta3: Fixed-point fractional library routines. 52033 (line 115) 52034* __subvdi3: Integer library routines. 52035 (line 122) 52036* __subvsi3: Integer library routines. 52037 (line 121) 52038* __subxf3: Soft float library routines. 52039 (line 33) 52040* __truncdfsf2: Soft float library routines. 52041 (line 75) 52042* __trunctfdf2: Soft float library routines. 52043 (line 72) 52044* __trunctfsf2: Soft float library routines. 52045 (line 74) 52046* __truncxfdf2: Soft float library routines. 52047 (line 71) 52048* __truncxfsf2: Soft float library routines. 52049 (line 73) 52050* __ucmpdi2: Integer library routines. 52051 (line 92) 52052* __ucmpti2: Integer library routines. 52053 (line 93) 52054* __udivdi3: Integer library routines. 52055 (line 52) 52056* __udivmoddi4: Integer library routines. 52057 (line 59) 52058* __udivmodti4: Integer library routines. 52059 (line 61) 52060* __udivsi3: Integer library routines. 52061 (line 50) 52062* __udivti3: Integer library routines. 52063 (line 54) 52064* __udivuda3: Fixed-point fractional library routines. 52065 (line 244) 52066* __udivudq3: Fixed-point fractional library routines. 52067 (line 238) 52068* __udivuha3: Fixed-point fractional library routines. 52069 (line 240) 52070* __udivuhq3: Fixed-point fractional library routines. 52071 (line 234) 52072* __udivuqq3: Fixed-point fractional library routines. 52073 (line 232) 52074* __udivusa3: Fixed-point fractional library routines. 52075 (line 242) 52076* __udivusq3: Fixed-point fractional library routines. 52077 (line 236) 52078* __udivuta3: Fixed-point fractional library routines. 52079 (line 246) 52080* __umoddi3: Integer library routines. 52081 (line 69) 52082* __umodsi3: Integer library routines. 52083 (line 67) 52084* __umodti3: Integer library routines. 52085 (line 71) 52086* __unorddf2: Soft float library routines. 52087 (line 172) 52088* __unordsf2: Soft float library routines. 52089 (line 171) 52090* __unordtf2: Soft float library routines. 52091 (line 173) 52092* __usadduda3: Fixed-point fractional library routines. 52093 (line 83) 52094* __usaddudq3: Fixed-point fractional library routines. 52095 (line 77) 52096* __usadduha3: Fixed-point fractional library routines. 52097 (line 79) 52098* __usadduhq3: Fixed-point fractional library routines. 52099 (line 73) 52100* __usadduqq3: Fixed-point fractional library routines. 52101 (line 71) 52102* __usaddusa3: Fixed-point fractional library routines. 52103 (line 81) 52104* __usaddusq3: Fixed-point fractional library routines. 52105 (line 75) 52106* __usadduta3: Fixed-point fractional library routines. 52107 (line 85) 52108* __usashluda3: Fixed-point fractional library routines. 52109 (line 419) 52110* __usashludq3: Fixed-point fractional library routines. 52111 (line 413) 52112* __usashluha3: Fixed-point fractional library routines. 52113 (line 415) 52114* __usashluhq3: Fixed-point fractional library routines. 52115 (line 409) 52116* __usashluqq3: Fixed-point fractional library routines. 52117 (line 407) 52118* __usashlusa3: Fixed-point fractional library routines. 52119 (line 417) 52120* __usashlusq3: Fixed-point fractional library routines. 52121 (line 411) 52122* __usashluta3: Fixed-point fractional library routines. 52123 (line 421) 52124* __usdivuda3: Fixed-point fractional library routines. 52125 (line 278) 52126* __usdivudq3: Fixed-point fractional library routines. 52127 (line 272) 52128* __usdivuha3: Fixed-point fractional library routines. 52129 (line 274) 52130* __usdivuhq3: Fixed-point fractional library routines. 52131 (line 268) 52132* __usdivuqq3: Fixed-point fractional library routines. 52133 (line 266) 52134* __usdivusa3: Fixed-point fractional library routines. 52135 (line 276) 52136* __usdivusq3: Fixed-point fractional library routines. 52137 (line 270) 52138* __usdivuta3: Fixed-point fractional library routines. 52139 (line 280) 52140* __usmuluda3: Fixed-point fractional library routines. 52141 (line 210) 52142* __usmuludq3: Fixed-point fractional library routines. 52143 (line 204) 52144* __usmuluha3: Fixed-point fractional library routines. 52145 (line 206) 52146* __usmuluhq3: Fixed-point fractional library routines. 52147 (line 200) 52148* __usmuluqq3: Fixed-point fractional library routines. 52149 (line 198) 52150* __usmulusa3: Fixed-point fractional library routines. 52151 (line 208) 52152* __usmulusq3: Fixed-point fractional library routines. 52153 (line 202) 52154* __usmuluta3: Fixed-point fractional library routines. 52155 (line 212) 52156* __usneguda2: Fixed-point fractional library routines. 52157 (line 329) 52158* __usnegudq2: Fixed-point fractional library routines. 52159 (line 324) 52160* __usneguha2: Fixed-point fractional library routines. 52161 (line 326) 52162* __usneguhq2: Fixed-point fractional library routines. 52163 (line 321) 52164* __usneguqq2: Fixed-point fractional library routines. 52165 (line 319) 52166* __usnegusa2: Fixed-point fractional library routines. 52167 (line 328) 52168* __usnegusq2: Fixed-point fractional library routines. 52169 (line 322) 52170* __usneguta2: Fixed-point fractional library routines. 52171 (line 331) 52172* __ussubuda3: Fixed-point fractional library routines. 52173 (line 146) 52174* __ussubudq3: Fixed-point fractional library routines. 52175 (line 140) 52176* __ussubuha3: Fixed-point fractional library routines. 52177 (line 142) 52178* __ussubuhq3: Fixed-point fractional library routines. 52179 (line 136) 52180* __ussubuqq3: Fixed-point fractional library routines. 52181 (line 134) 52182* __ussubusa3: Fixed-point fractional library routines. 52183 (line 144) 52184* __ussubusq3: Fixed-point fractional library routines. 52185 (line 138) 52186* __ussubuta3: Fixed-point fractional library routines. 52187 (line 148) 52188* abort: Portability. (line 20) 52189* abs: Arithmetic. (line 200) 52190* 'abs' and attributes: Expressions. (line 83) 52191* absence_set: Processor pipeline description. 52192 (line 223) 52193* 'absM2' instruction pattern: Standard Names. (line 879) 52194* absolute value: Arithmetic. (line 200) 52195* ABSU_EXPR: Unary and Binary Expressions. 52196 (line 6) 52197* ABS_EXPR: Unary and Binary Expressions. 52198 (line 6) 52199* access to operands: Accessors. (line 6) 52200* access to special operands: Special Accessors. (line 6) 52201* accessors: Accessors. (line 6) 52202* ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 48) 52203* 'ACCUMULATE_OUTGOING_ARGS' and stack frames: Function Entry. 52204 (line 140) 52205* ACCUM_TYPE_SIZE: Type Layout. (line 87) 52206* 'acosM2' instruction pattern: Standard Names. (line 966) 52207* ADA_LONG_TYPE_SIZE: Type Layout. (line 25) 52208* Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 52209 (line 6) 52210* ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 14) 52211* 'addM3' instruction pattern: Standard Names. (line 436) 52212* 'addMODEcc' instruction pattern: Standard Names. (line 1589) 52213* 'addptrM3' instruction pattern: Standard Names. (line 469) 52214* address constraints: Simple Constraints. (line 162) 52215* addressing modes: Addressing Modes. (line 6) 52216* address_operand: Machine-Independent Predicates. 52217 (line 62) 52218* address_operand <1>: Simple Constraints. (line 166) 52219* addr_diff_vec: Side Effects. (line 313) 52220* 'addr_diff_vec', length of: Insn Lengths. (line 26) 52221* ADDR_EXPR: Storage References. (line 6) 52222* addr_vec: Side Effects. (line 308) 52223* 'addr_vec', length of: Insn Lengths. (line 26) 52224* 'addvM4' instruction pattern: Standard Names. (line 452) 52225* ADJUST_FIELD_ALIGN: Storage Layout. (line 212) 52226* ADJUST_INSN_LENGTH: Insn Lengths. (line 41) 52227* ADJUST_REG_ALLOC_ORDER: Allocation Order. (line 22) 52228* aggregates as return values: Aggregate Return. (line 6) 52229* alias: Alias analysis. (line 6) 52230* 'allocate_stack' instruction pattern: Standard Names. (line 1956) 52231* ALL_REGS: Register Classes. (line 17) 52232* alternate entry points: Insns. (line 146) 52233* analyzer: Static Analyzer. (line 6) 52234* analyzer, debugging: Debugging the Analyzer. 52235 (line 6) 52236* analyzer, internals: Analyzer Internals. (line 6) 52237* anchored addresses: Anchored Addresses. (line 6) 52238* and: Arithmetic. (line 158) 52239* 'and' and attributes: Expressions. (line 50) 52240* 'and', canonicalization of: Insn Canonicalizations. 52241 (line 67) 52242* 'andM3' instruction pattern: Standard Names. (line 442) 52243* ANNOTATE_EXPR: Unary and Binary Expressions. 52244 (line 6) 52245* annotations: Annotations. (line 6) 52246* APPLY_RESULT_SIZE: Scalar Return. (line 112) 52247* ARGS_GROW_DOWNWARD: Frame Layout. (line 30) 52248* argument passing: Interface. (line 36) 52249* arguments in registers: Register Arguments. (line 6) 52250* arguments on stack: Stack Arguments. (line 6) 52251* ARG_POINTER_CFA_OFFSET: Frame Layout. (line 207) 52252* ARG_POINTER_REGNUM: Frame Registers. (line 40) 52253* 'ARG_POINTER_REGNUM' and virtual registers: Regs and Memory. 52254 (line 65) 52255* arg_pointer_rtx: Frame Registers. (line 104) 52256* arithmetic library: Soft float library routines. 52257 (line 6) 52258* arithmetic shift: Arithmetic. (line 173) 52259* arithmetic shift with signed saturation: Arithmetic. (line 173) 52260* arithmetic shift with unsigned saturation: Arithmetic. (line 173) 52261* arithmetic, in RTL: Arithmetic. (line 6) 52262* ARITHMETIC_TYPE_P: Types for C++. (line 59) 52263* array: Types. (line 6) 52264* ARRAY_RANGE_REF: Storage References. (line 6) 52265* ARRAY_REF: Storage References. (line 6) 52266* ARRAY_TYPE: Types. (line 6) 52267* ashift: Arithmetic. (line 173) 52268* 'ashift' and attributes: Expressions. (line 83) 52269* ashiftrt: Arithmetic. (line 190) 52270* 'ashiftrt' and attributes: Expressions. (line 83) 52271* 'ashlM3' instruction pattern: Standard Names. (line 828) 52272* 'ashrM3' instruction pattern: Standard Names. (line 840) 52273* 'asinM2' instruction pattern: Standard Names. (line 960) 52274* ASM_APP_OFF: File Framework. (line 76) 52275* ASM_APP_ON: File Framework. (line 69) 52276* ASM_COMMENT_START: File Framework. (line 64) 52277* ASM_DECLARE_COLD_FUNCTION_NAME: Label Output. (line 136) 52278* ASM_DECLARE_COLD_FUNCTION_SIZE: Label Output. (line 151) 52279* ASM_DECLARE_FUNCTION_NAME: Label Output. (line 108) 52280* ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 123) 52281* ASM_DECLARE_OBJECT_NAME: Label Output. (line 164) 52282* ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 192) 52283* ASM_FINAL_SPEC: Driver. (line 81) 52284* ASM_FINISH_DECLARE_OBJECT: Label Output. (line 200) 52285* ASM_FORMAT_PRIVATE_NAME: Label Output. (line 426) 52286* asm_fprintf: Instruction Output. (line 150) 52287* ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 160) 52288* ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 410) 52289* asm_input: Side Effects. (line 295) 52290* 'asm_input' and '/v': Flags. (line 65) 52291* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 80) 52292* asm_noperands: Insns. (line 327) 52293* ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 59) 52294* 'asm_operands' and '/v': Flags. (line 65) 52295* 'asm_operands', RTL sharing: Sharing. (line 48) 52296* 'asm_operands', usage: Assembler. (line 6) 52297* ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 8) 52298* ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 25) 52299* ASM_OUTPUT_ALIGN: Alignment Output. (line 66) 52300* ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 45) 52301* ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 29) 52302* ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 36) 52303* ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 89) 52304* ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 82) 52305* ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 71) 52306* ASM_OUTPUT_ASCII: Data Output. (line 60) 52307* ASM_OUTPUT_CASE_END: Dispatch Tables. (line 50) 52308* ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 37) 52309* ASM_OUTPUT_COMMON: Uninitialized Data. (line 9) 52310* ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 398) 52311* ASM_OUTPUT_DEF: Label Output. (line 447) 52312* ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 454) 52313* ASM_OUTPUT_DWARF_DATAREL: DWARF. (line 110) 52314* ASM_OUTPUT_DWARF_DELTA: DWARF. (line 89) 52315* ASM_OUTPUT_DWARF_OFFSET: DWARF. (line 98) 52316* ASM_OUTPUT_DWARF_PCREL: DWARF. (line 105) 52317* ASM_OUTPUT_DWARF_TABLE_REF: DWARF. (line 115) 52318* ASM_OUTPUT_DWARF_VMS_DELTA: DWARF. (line 93) 52319* ASM_OUTPUT_EXTERNAL: Label Output. (line 327) 52320* ASM_OUTPUT_FDESC: Data Output. (line 69) 52321* ASM_OUTPUT_FUNCTION_LABEL: Label Output. (line 16) 52322* ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 27) 52323* ASM_OUTPUT_LABEL: Label Output. (line 8) 52324* ASM_OUTPUT_LABELREF: Label Output. (line 349) 52325* ASM_OUTPUT_LABEL_REF: Label Output. (line 371) 52326* ASM_OUTPUT_LOCAL: Uninitialized Data. (line 69) 52327* ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 75) 52328* ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 51) 52329* ASM_OUTPUT_OPCODE: Instruction Output. (line 35) 52330* ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 118) 52331* ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 82) 52332* ASM_OUTPUT_REG_POP: Instruction Output. (line 206) 52333* ASM_OUTPUT_REG_PUSH: Instruction Output. (line 201) 52334* ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 45) 52335* ASM_OUTPUT_SKIP: Alignment Output. (line 53) 52336* ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 83) 52337* ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 93) 52338* ASM_OUTPUT_SYMBOL_REF: Label Output. (line 364) 52339* ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 98) 52340* ASM_OUTPUT_WEAKREF: Label Output. (line 259) 52341* ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 473) 52342* ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 66) 52343* ASM_SPEC: Driver. (line 73) 52344* ASM_STABD_OP: DBX Options. (line 34) 52345* ASM_STABN_OP: DBX Options. (line 41) 52346* ASM_STABS_OP: DBX Options. (line 28) 52347* ASM_WEAKEN_DECL: Label Output. (line 251) 52348* ASM_WEAKEN_LABEL: Label Output. (line 238) 52349* assembler format: File Framework. (line 6) 52350* assembler instructions in RTL: Assembler. (line 6) 52351* ASSEMBLER_DIALECT: Instruction Output. (line 172) 52352* assemble_name: Label Output. (line 8) 52353* assemble_name_raw: Label Output. (line 27) 52354* assigning attribute values to insns: Tagging Insns. (line 6) 52355* ASSUME_EXTENDED_UNWIND_CONTEXT: Frame Registers. (line 163) 52356* asterisk in template: Output Statement. (line 29) 52357* AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) 52358* 'atan2M3' instruction pattern: Standard Names. (line 1061) 52359* 'atanM2' instruction pattern: Standard Names. (line 972) 52360* atomic: GTY Options. (line 196) 52361* 'atomic_addMODE' instruction pattern: Standard Names. (line 2380) 52362* 'atomic_add_fetchMODE' instruction pattern: Standard Names. 52363 (line 2409) 52364* 'atomic_andMODE' instruction pattern: Standard Names. (line 2380) 52365* 'atomic_and_fetchMODE' instruction pattern: Standard Names. 52366 (line 2409) 52367* 'atomic_bit_test_and_complementMODE' instruction pattern: Standard Names. 52368 (line 2437) 52369* 'atomic_bit_test_and_resetMODE' instruction pattern: Standard Names. 52370 (line 2437) 52371* 'atomic_bit_test_and_setMODE' instruction pattern: Standard Names. 52372 (line 2437) 52373* 'atomic_compare_and_swapMODE' instruction pattern: Standard Names. 52374 (line 2316) 52375* 'atomic_exchangeMODE' instruction pattern: Standard Names. (line 2368) 52376* 'atomic_fetch_addMODE' instruction pattern: Standard Names. 52377 (line 2394) 52378* 'atomic_fetch_andMODE' instruction pattern: Standard Names. 52379 (line 2394) 52380* 'atomic_fetch_nandMODE' instruction pattern: Standard Names. 52381 (line 2394) 52382* 'atomic_fetch_orMODE' instruction pattern: Standard Names. (line 2394) 52383* 'atomic_fetch_subMODE' instruction pattern: Standard Names. 52384 (line 2394) 52385* 'atomic_fetch_xorMODE' instruction pattern: Standard Names. 52386 (line 2394) 52387* 'atomic_loadMODE' instruction pattern: Standard Names. (line 2347) 52388* 'atomic_nandMODE' instruction pattern: Standard Names. (line 2380) 52389* 'atomic_nand_fetchMODE' instruction pattern: Standard Names. 52390 (line 2409) 52391* 'atomic_orMODE' instruction pattern: Standard Names. (line 2380) 52392* 'atomic_or_fetchMODE' instruction pattern: Standard Names. (line 2409) 52393* 'atomic_storeMODE' instruction pattern: Standard Names. (line 2357) 52394* 'atomic_subMODE' instruction pattern: Standard Names. (line 2380) 52395* 'atomic_sub_fetchMODE' instruction pattern: Standard Names. 52396 (line 2409) 52397* 'atomic_test_and_set' instruction pattern: Standard Names. (line 2426) 52398* 'atomic_xorMODE' instruction pattern: Standard Names. (line 2380) 52399* 'atomic_xor_fetchMODE' instruction pattern: Standard Names. 52400 (line 2409) 52401* attr: Expressions. (line 163) 52402* attr <1>: Tagging Insns. (line 54) 52403* attribute expressions: Expressions. (line 6) 52404* attribute specifications: Attr Example. (line 6) 52405* attribute specifications example: Attr Example. (line 6) 52406* attributes: Attributes. (line 6) 52407* attributes, defining: Defining Attributes. 52408 (line 6) 52409* attributes, target-specific: Target Attributes. (line 6) 52410* ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 194) 52411* attr_flag: Expressions. (line 138) 52412* autoincrement addressing, availability: Portability. (line 20) 52413* autoincrement/decrement addressing: Simple Constraints. (line 30) 52414* automata_option: Processor pipeline description. 52415 (line 304) 52416* automaton based pipeline description: Processor pipeline description. 52417 (line 6) 52418* automaton based pipeline description <1>: Processor pipeline description. 52419 (line 49) 52420* automaton based scheduler: Processor pipeline description. 52421 (line 6) 52422* 'avgM3_ceil' instruction pattern: Standard Names. (line 860) 52423* 'avgM3_floor' instruction pattern: Standard Names. (line 848) 52424* AVOID_CCMODE_COPIES: Values in Registers. 52425 (line 148) 52426* backslash: Output Template. (line 46) 52427* barrier: Insns. (line 176) 52428* 'barrier' and '/f': Flags. (line 135) 52429* 'barrier' and '/v': Flags. (line 33) 52430* BASE_REG_CLASS: Register Classes. (line 111) 52431* basic block: Basic Blocks. (line 6) 52432* Basic Statements: Basic Statements. (line 6) 52433* basic-block.h: Control Flow. (line 6) 52434* basic_block: Basic Blocks. (line 6) 52435* BASIC_BLOCK: Basic Blocks. (line 14) 52436* BB_HEAD, BB_END: Maintaining the CFG. 52437 (line 76) 52438* bb_seq: GIMPLE sequences. (line 72) 52439* BIGGEST_ALIGNMENT: Storage Layout. (line 179) 52440* BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 205) 52441* BImode: Machine Modes. (line 22) 52442* BIND_EXPR: Unary and Binary Expressions. 52443 (line 6) 52444* BINFO_TYPE: Classes. (line 6) 52445* bit-fields: Bit-Fields. (line 6) 52446* BITFIELD_NBYTES_LIMITED: Storage Layout. (line 428) 52447* BITS_BIG_ENDIAN: Storage Layout. (line 11) 52448* 'BITS_BIG_ENDIAN', effect on 'sign_extract': Bit-Fields. (line 8) 52449* BITS_PER_UNIT: Machine Modes. (line 440) 52450* BITS_PER_WORD: Storage Layout. (line 50) 52451* bitwise complement: Arithmetic. (line 154) 52452* bitwise exclusive-or: Arithmetic. (line 168) 52453* bitwise inclusive-or: Arithmetic. (line 163) 52454* bitwise logical-and: Arithmetic. (line 158) 52455* BIT_AND_EXPR: Unary and Binary Expressions. 52456 (line 6) 52457* BIT_IOR_EXPR: Unary and Binary Expressions. 52458 (line 6) 52459* BIT_NOT_EXPR: Unary and Binary Expressions. 52460 (line 6) 52461* BIT_XOR_EXPR: Unary and Binary Expressions. 52462 (line 6) 52463* BLKmode: Machine Modes. (line 185) 52464* 'BLKmode', and function return values: Calls. (line 23) 52465* 'blockage' instruction pattern: Standard Names. (line 2156) 52466* Blocks: Blocks. (line 6) 52467* BLOCK_FOR_INSN, gimple_bb: Maintaining the CFG. 52468 (line 28) 52469* BLOCK_REG_PADDING: Register Arguments. (line 238) 52470* BND32mode: Machine Modes. (line 210) 52471* BND64mode: Machine Modes. (line 210) 52472* bool: Misc. (line 958) 52473* BOOLEAN_TYPE: Types. (line 6) 52474* BOOL_TYPE_SIZE: Type Layout. (line 43) 52475* branch prediction: Profile information. 52476 (line 24) 52477* BRANCH_COST: Costs. (line 104) 52478* break_out_memory_refs: Addressing Modes. (line 134) 52479* BREAK_STMT: Statements for C++. (line 6) 52480* BSS_SECTION_ASM_OP: Sections. (line 67) 52481* bswap: Arithmetic. (line 246) 52482* 'bswapM2' instruction pattern: Standard Names. (line 868) 52483* 'btruncM2' instruction pattern: Standard Names. (line 1078) 52484* build0: Macros and Functions. 52485 (line 16) 52486* build1: Macros and Functions. 52487 (line 17) 52488* build2: Macros and Functions. 52489 (line 18) 52490* build3: Macros and Functions. 52491 (line 19) 52492* build4: Macros and Functions. 52493 (line 20) 52494* build5: Macros and Functions. 52495 (line 21) 52496* build6: Macros and Functions. 52497 (line 22) 52498* 'builtin_longjmp' instruction pattern: Standard Names. (line 2054) 52499* 'builtin_setjmp_receiver' instruction pattern: Standard Names. 52500 (line 2044) 52501* 'builtin_setjmp_setup' instruction pattern: Standard Names. 52502 (line 2033) 52503* BYTES_BIG_ENDIAN: Storage Layout. (line 23) 52504* 'BYTES_BIG_ENDIAN', effect on 'subreg': Regs and Memory. (line 229) 52505* byte_mode: Machine Modes. (line 458) 52506* C statements for assembler output: Output Statement. (line 6) 52507* cache: GTY Options. (line 127) 52508* call: Flags. (line 230) 52509* call <1>: Side Effects. (line 92) 52510* 'call' instruction pattern: Standard Names. (line 1709) 52511* 'call' usage: Calls. (line 10) 52512* 'call', in 'call_insn': Flags. (line 129) 52513* 'call', in 'mem': Flags. (line 70) 52514* call-clobbered register: Register Basics. (line 35) 52515* call-clobbered register <1>: Register Basics. (line 50) 52516* call-clobbered register <2>: Register Basics. (line 58) 52517* call-clobbered register <3>: Register Basics. (line 76) 52518* call-saved register: Register Basics. (line 35) 52519* call-saved register <1>: Register Basics. (line 50) 52520* call-saved register <2>: Register Basics. (line 58) 52521* call-saved register <3>: Register Basics. (line 76) 52522* call-used register: Register Basics. (line 35) 52523* call-used register <1>: Register Basics. (line 50) 52524* call-used register <2>: Register Basics. (line 58) 52525* call-used register <3>: Register Basics. (line 76) 52526* calling conventions: Stack and Calling. (line 6) 52527* calling functions in RTL: Calls. (line 6) 52528* CALL_EXPR: Unary and Binary Expressions. 52529 (line 6) 52530* call_insn: Insns. (line 95) 52531* 'call_insn' and '/c': Flags. (line 129) 52532* 'call_insn' and '/f': Flags. (line 135) 52533* 'call_insn' and '/i': Flags. (line 120) 52534* 'call_insn' and '/j': Flags. (line 175) 52535* 'call_insn' and '/s': Flags. (line 38) 52536* 'call_insn' and '/s' <1>: Flags. (line 162) 52537* 'call_insn' and '/u': Flags. (line 28) 52538* 'call_insn' and '/u' <1>: Flags. (line 115) 52539* 'call_insn' and '/u' or '/i': Flags. (line 125) 52540* 'call_insn' and '/v': Flags. (line 33) 52541* CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 52542* 'call_pop' instruction pattern: Standard Names. (line 1737) 52543* CALL_POPS_ARGS: Stack Arguments. (line 138) 52544* CALL_REALLY_USED_REGISTERS: Register Basics. (line 49) 52545* CALL_USED_REGISTERS: Register Basics. (line 34) 52546* call_used_regs: Register Basics. (line 102) 52547* 'call_value' instruction pattern: Standard Names. (line 1729) 52548* 'call_value_pop' instruction pattern: Standard Names. (line 1737) 52549* canadian: Configure Terms. (line 6) 52550* canonicalization of instructions: Insn Canonicalizations. 52551 (line 6) 52552* 'canonicalize_funcptr_for_compare' instruction pattern: Standard Names. 52553 (line 1888) 52554* can_create_pseudo_p: Standard Names. (line 75) 52555* can_fallthru: Basic Blocks. (line 67) 52556* caret: Multi-Alternative. (line 53) 52557* caret <1>: Guidelines for Diagnostics. 52558 (line 159) 52559* 'casesi' instruction pattern: Standard Names. (line 1830) 52560* CASE_VECTOR_MODE: Misc. (line 26) 52561* CASE_VECTOR_PC_RELATIVE: Misc. (line 39) 52562* CASE_VECTOR_SHORTEN_MODE: Misc. (line 30) 52563* 'cbranchMODE4' instruction pattern: Standard Names. (line 1698) 52564* cc0: Regs and Memory. (line 329) 52565* cc0 <1>: CC0 Condition Codes. 52566 (line 6) 52567* 'cc0', RTL sharing: Sharing. (line 30) 52568* cc0_rtx: Regs and Memory. (line 355) 52569* CC1PLUS_SPEC: Driver. (line 63) 52570* CC1_SPEC: Driver. (line 55) 52571* CCmode: Machine Modes. (line 178) 52572* CCmode <1>: MODE_CC Condition Codes. 52573 (line 6) 52574* cc_status: CC0 Condition Codes. 52575 (line 6) 52576* CC_STATUS_MDEP: CC0 Condition Codes. 52577 (line 16) 52578* CC_STATUS_MDEP_INIT: CC0 Condition Codes. 52579 (line 22) 52580* CDImode: Machine Modes. (line 204) 52581* 'ceilM2' instruction pattern: Standard Names. (line 1097) 52582* CEIL_DIV_EXPR: Unary and Binary Expressions. 52583 (line 6) 52584* CEIL_MOD_EXPR: Unary and Binary Expressions. 52585 (line 6) 52586* CFA_FRAME_BASE_OFFSET: Frame Layout. (line 239) 52587* CFG verification: Maintaining the CFG. 52588 (line 116) 52589* CFG, Control Flow Graph: Control Flow. (line 6) 52590* cfghooks.h: Maintaining the CFG. 52591 (line 6) 52592* cgraph_finalize_function: Parsing pass. (line 51) 52593* chain_circular: GTY Options. (line 160) 52594* chain_next: GTY Options. (line 160) 52595* chain_prev: GTY Options. (line 160) 52596* change_address: Standard Names. (line 47) 52597* CHAR_TYPE_SIZE: Type Layout. (line 38) 52598* 'check_raw_ptrsM' instruction pattern: Standard Names. (line 330) 52599* 'check_stack' instruction pattern: Standard Names. (line 1974) 52600* 'check_war_ptrsM' instruction pattern: Standard Names. (line 349) 52601* CHImode: Machine Modes. (line 204) 52602* class definitions, register: Register Classes. (line 6) 52603* class preference constraints: Class Preferences. (line 6) 52604* class, scope: Classes. (line 6) 52605* classes of RTX codes: RTL Classes. (line 6) 52606* CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 52607* CLASSTYPE_HAS_MUTABLE: Classes. (line 82) 52608* CLASSTYPE_NON_POD_P: Classes. (line 87) 52609* CLASS_MAX_NREGS: Register Classes. (line 531) 52610* CLASS_TYPE_P: Types for C++. (line 63) 52611* Cleanups: Cleanups. (line 6) 52612* CLEANUP_DECL: Statements for C++. (line 6) 52613* CLEANUP_EXPR: Statements for C++. (line 6) 52614* CLEANUP_POINT_EXPR: Unary and Binary Expressions. 52615 (line 6) 52616* CLEANUP_STMT: Statements for C++. (line 6) 52617* 'clear_cache' instruction pattern: Standard Names. (line 2543) 52618* CLEAR_INSN_CACHE: Trampolines. (line 151) 52619* CLEAR_RATIO: Costs. (line 225) 52620* clobber: Side Effects. (line 106) 52621* clrsb: Arithmetic. (line 215) 52622* 'clrsbM2' instruction pattern: Standard Names. (line 1170) 52623* clz: Arithmetic. (line 222) 52624* 'clzM2' instruction pattern: Standard Names. (line 1186) 52625* CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 338) 52626* 'cmpmemM' instruction pattern: Standard Names. (line 1389) 52627* 'cmpstrM' instruction pattern: Standard Names. (line 1368) 52628* 'cmpstrnM' instruction pattern: Standard Names. (line 1355) 52629* code generation RTL sequences: Expander Definitions. 52630 (line 6) 52631* code iterators in '.md' files: Code Iterators. (line 6) 52632* codes, RTL expression: RTL Objects. (line 47) 52633* code_label: Insns. (line 125) 52634* CODE_LABEL: Basic Blocks. (line 50) 52635* 'code_label' and '/i': Flags. (line 48) 52636* 'code_label' and '/v': Flags. (line 33) 52637* CODE_LABEL_NUMBER: Insns. (line 125) 52638* COImode: Machine Modes. (line 204) 52639* COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 52640* COLLECT_EXPORT_LIST: Misc. (line 864) 52641* COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 52642 (line 43) 52643* COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 52644 (line 32) 52645* command-line options, guidelines for: Guidelines for Options. 52646 (line 6) 52647* commit_edge_insertions: Maintaining the CFG. 52648 (line 104) 52649* compare: Arithmetic. (line 46) 52650* 'compare', canonicalization of: Insn Canonicalizations. 52651 (line 36) 52652* COMPARE_MAX_PIECES: Costs. (line 220) 52653* comparison_operator: Machine-Independent Predicates. 52654 (line 110) 52655* compiler passes and files: Passes. (line 6) 52656* complement, bitwise: Arithmetic. (line 154) 52657* COMPLEX_CST: Constant expressions. 52658 (line 6) 52659* COMPLEX_EXPR: Unary and Binary Expressions. 52660 (line 6) 52661* complex_mode: Machine Modes. (line 302) 52662* COMPLEX_TYPE: Types. (line 6) 52663* COMPONENT_REF: Storage References. (line 6) 52664* Compound Expressions: Compound Expressions. 52665 (line 6) 52666* Compound Lvalues: Compound Lvalues. (line 6) 52667* COMPOUND_EXPR: Unary and Binary Expressions. 52668 (line 6) 52669* COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 52670 (line 6) 52671* COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 52672 (line 392) 52673* COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 52674 (line 392) 52675* computed jump: Edges. (line 127) 52676* computing the length of an insn: Insn Lengths. (line 6) 52677* concat: Regs and Memory. (line 407) 52678* concatn: Regs and Memory. (line 413) 52679* cond: Comparisons. (line 90) 52680* 'cond' and attributes: Expressions. (line 37) 52681* condition code register: Regs and Memory. (line 329) 52682* condition code status: Condition Code. (line 6) 52683* condition codes: Comparisons. (line 20) 52684* conditional execution: Conditional Execution. 52685 (line 6) 52686* Conditional Expressions: Conditional Expressions. 52687 (line 6) 52688* conditions, in patterns: Patterns. (line 55) 52689* 'cond_addMODE' instruction pattern: Standard Names. (line 1596) 52690* 'cond_andMODE' instruction pattern: Standard Names. (line 1596) 52691* 'cond_divMODE' instruction pattern: Standard Names. (line 1596) 52692* cond_exec: Side Effects. (line 253) 52693* COND_EXPR: Unary and Binary Expressions. 52694 (line 6) 52695* 'cond_fmaMODE' instruction pattern: Standard Names. (line 1634) 52696* 'cond_fmsMODE' instruction pattern: Standard Names. (line 1634) 52697* 'cond_fnmaMODE' instruction pattern: Standard Names. (line 1634) 52698* 'cond_fnmsMODE' instruction pattern: Standard Names. (line 1634) 52699* 'cond_iorMODE' instruction pattern: Standard Names. (line 1596) 52700* 'cond_modMODE' instruction pattern: Standard Names. (line 1596) 52701* 'cond_mulMODE' instruction pattern: Standard Names. (line 1596) 52702* 'cond_smaxMODE' instruction pattern: Standard Names. (line 1596) 52703* 'cond_sminMODE' instruction pattern: Standard Names. (line 1596) 52704* 'cond_subMODE' instruction pattern: Standard Names. (line 1596) 52705* 'cond_udivMODE' instruction pattern: Standard Names. (line 1596) 52706* 'cond_umaxMODE' instruction pattern: Standard Names. (line 1596) 52707* 'cond_uminMODE' instruction pattern: Standard Names. (line 1596) 52708* 'cond_umodMODE' instruction pattern: Standard Names. (line 1596) 52709* 'cond_xorMODE' instruction pattern: Standard Names. (line 1596) 52710* configuration file: Filesystem. (line 6) 52711* configuration file <1>: Host Misc. (line 6) 52712* configure terms: Configure Terms. (line 6) 52713* CONJ_EXPR: Unary and Binary Expressions. 52714 (line 6) 52715* const: Constants. (line 212) 52716* const0_rtx: Constants. (line 21) 52717* CONST0_RTX: Constants. (line 230) 52718* const1_rtx: Constants. (line 21) 52719* CONST1_RTX: Constants. (line 230) 52720* const2_rtx: Constants. (line 21) 52721* CONST2_RTX: Constants. (line 230) 52722* constant attributes: Constant Attributes. 52723 (line 6) 52724* constant definitions: Constant Definitions. 52725 (line 6) 52726* constants in constraints: Simple Constraints. (line 68) 52727* CONSTANT_ADDRESS_P: Addressing Modes. (line 28) 52728* CONSTANT_P: Addressing Modes. (line 35) 52729* CONSTANT_POOL_ADDRESS_P: Flags. (line 19) 52730* CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 74) 52731* constm1_rtx: Constants. (line 21) 52732* constraint modifier characters: Modifiers. (line 6) 52733* constraint, matching: Simple Constraints. (line 140) 52734* constraints: Constraints. (line 6) 52735* constraints, defining: Define Constraints. (line 6) 52736* constraints, machine specific: Machine Constraints. 52737 (line 6) 52738* constraints, testing: C Constraint Interface. 52739 (line 6) 52740* constraint_num: C Constraint Interface. 52741 (line 30) 52742* constraint_satisfied_p: C Constraint Interface. 52743 (line 42) 52744* CONSTRUCTOR: Unary and Binary Expressions. 52745 (line 6) 52746* constructors, automatic calls: Collect2. (line 15) 52747* constructors, output of: Initialization. (line 6) 52748* CONST_DECL: Declarations. (line 6) 52749* const_double: Constants. (line 37) 52750* 'const_double', RTL sharing: Sharing. (line 32) 52751* CONST_DOUBLE_LOW: Constants. (line 54) 52752* const_double_operand: Machine-Independent Predicates. 52753 (line 20) 52754* const_fixed: Constants. (line 93) 52755* const_int: Constants. (line 8) 52756* 'const_int' and attribute tests: Expressions. (line 47) 52757* 'const_int' and attributes: Expressions. (line 10) 52758* 'const_int', RTL sharing: Sharing. (line 23) 52759* const_int_operand: Machine-Independent Predicates. 52760 (line 15) 52761* const_poly_int: Constants. (line 100) 52762* 'const_poly_int', RTL sharing: Sharing. (line 25) 52763* const_string: Constants. (line 184) 52764* 'const_string' and attributes: Expressions. (line 20) 52765* const_true_rtx: Constants. (line 31) 52766* const_vector: Constants. (line 107) 52767* 'const_vector', RTL sharing: Sharing. (line 35) 52768* CONST_WIDE_INT: Constants. (line 67) 52769* CONST_WIDE_INT_ELT: Constants. (line 89) 52770* CONST_WIDE_INT_NUNITS: Constants. (line 84) 52771* CONST_WIDE_INT_VEC: Constants. (line 80) 52772* container: Containers. (line 6) 52773* CONTINUE_STMT: Statements for C++. (line 6) 52774* contributors: Contributors. (line 6) 52775* controlling register usage: Register Basics. (line 116) 52776* controlling the compilation driver: Driver. (line 6) 52777* conventions, run-time: Interface. (line 6) 52778* conversions: Conversions. (line 6) 52779* CONVERT_EXPR: Unary and Binary Expressions. 52780 (line 6) 52781* 'copysignM3' instruction pattern: Standard Names. (line 1142) 52782* copy_rtx: Addressing Modes. (line 189) 52783* copy_rtx_if_shared: Sharing. (line 67) 52784* 'cosM2' instruction pattern: Standard Names. (line 931) 52785* costs of instructions: Costs. (line 6) 52786* CPLUSPLUS_CPP_SPEC: Driver. (line 50) 52787* CPP_SPEC: Driver. (line 43) 52788* CPSImode: Machine Modes. (line 204) 52789* 'cpymemM' instruction pattern: Standard Names. (line 1244) 52790* CP_INTEGRAL_TYPE: Types for C++. (line 55) 52791* cp_namespace_decls: Namespaces. (line 49) 52792* CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 52793* CP_TYPE_CONST_P: Types for C++. (line 24) 52794* cp_type_quals: Types for C++. (line 6) 52795* cp_type_quals <1>: Types for C++. (line 16) 52796* CP_TYPE_RESTRICT_P: Types for C++. (line 30) 52797* CP_TYPE_VOLATILE_P: Types for C++. (line 27) 52798* CQImode: Machine Modes. (line 204) 52799* cross compilation and floating point: Floating Point. (line 6) 52800* CROSSING_JUMP_P: Flags. (line 10) 52801* crtl->args.pops_args: Function Entry. (line 111) 52802* crtl->args.pretend_args_size: Function Entry. (line 117) 52803* crtl->outgoing_args_size: Stack Arguments. (line 48) 52804* CRTSTUFF_T_CFLAGS: Target Fragment. (line 15) 52805* CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 19) 52806* CRT_CALL_STATIC_FUNCTION: Sections. (line 125) 52807* CSImode: Machine Modes. (line 204) 52808* 'cstoreMODE4' instruction pattern: Standard Names. (line 1659) 52809* CTImode: Machine Modes. (line 204) 52810* 'ctrapMM4' instruction pattern: Standard Names. (line 2125) 52811* ctz: Arithmetic. (line 230) 52812* 'ctzM2' instruction pattern: Standard Names. (line 1201) 52813* CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 339) 52814* CUMULATIVE_ARGS: Register Arguments. (line 137) 52815* current_function_is_leaf: Leaf Functions. (line 50) 52816* current_function_uses_only_leaf_regs: Leaf Functions. (line 50) 52817* current_insn_predicate: Conditional Execution. 52818 (line 27) 52819* C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 136) 52820* c_register_pragma: Misc. (line 440) 52821* c_register_pragma_with_expansion: Misc. (line 442) 52822* DAmode: Machine Modes. (line 154) 52823* data bypass: Processor pipeline description. 52824 (line 105) 52825* data bypass <1>: Processor pipeline description. 52826 (line 196) 52827* data dependence delays: Processor pipeline description. 52828 (line 6) 52829* Data Dependency Analysis: Dependency analysis. 52830 (line 6) 52831* data structures: Per-Function Data. (line 6) 52832* DATA_ABI_ALIGNMENT: Storage Layout. (line 263) 52833* DATA_ALIGNMENT: Storage Layout. (line 250) 52834* DATA_SECTION_ASM_OP: Sections. (line 52) 52835* DBR_OUTPUT_SEQEND: Instruction Output. (line 133) 52836* dbr_sequence_length: Instruction Output. (line 133) 52837* DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 100) 52838* DBX_CONTIN_CHAR: DBX Options. (line 63) 52839* DBX_CONTIN_LENGTH: DBX Options. (line 53) 52840* DBX_DEBUGGING_INFO: DBX Options. (line 8) 52841* DBX_FUNCTION_FIRST: DBX Options. (line 94) 52842* DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 106) 52843* DBX_NO_XREFS: DBX Options. (line 47) 52844* DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 8) 52845* DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 33) 52846* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 52847 (line 41) 52848* DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 8) 52849* DBX_REGISTER_NUMBER: All Debuggers. (line 8) 52850* DBX_REGPARM_STABS_CODE: DBX Options. (line 84) 52851* DBX_REGPARM_STABS_LETTER: DBX Options. (line 89) 52852* DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 79) 52853* DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 70) 52854* DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 75) 52855* DBX_USE_BINCL: DBX Options. (line 112) 52856* DCmode: Machine Modes. (line 199) 52857* DDmode: Machine Modes. (line 93) 52858* De Morgan's law: Insn Canonicalizations. 52859 (line 67) 52860* dead_or_set_p: define_peephole. (line 65) 52861* DEBUGGER_ARG_OFFSET: All Debuggers. (line 35) 52862* DEBUGGER_AUTO_OFFSET: All Debuggers. (line 27) 52863* debug_expr: Debug Information. (line 22) 52864* DEBUG_EXPR_DECL: Declarations. (line 6) 52865* debug_implicit_ptr: Debug Information. (line 27) 52866* debug_insn: Insns. (line 247) 52867* debug_marker: Debug Information. (line 37) 52868* debug_parameter_ref: Debug Information. (line 34) 52869* DEBUG_SYMS_TEXT: DBX Options. (line 24) 52870* decimal float library: Decimal float library routines. 52871 (line 6) 52872* declaration: Declarations. (line 6) 52873* declarations, RTL: RTL Declarations. (line 6) 52874* DECLARE_LIBRARY_RENAMES: Library Calls. (line 8) 52875* DECL_ALIGN: Declarations. (line 6) 52876* DECL_ANTICIPATED: Functions for C++. (line 42) 52877* DECL_ARGUMENTS: Function Basics. (line 36) 52878* DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 52879* DECL_ARTIFICIAL: Working with declarations. 52880 (line 24) 52881* DECL_ARTIFICIAL <1>: Function Basics. (line 6) 52882* DECL_ARTIFICIAL <2>: Function Properties. 52883 (line 47) 52884* DECL_ASSEMBLER_NAME: Function Basics. (line 6) 52885* DECL_ASSEMBLER_NAME <1>: Function Basics. (line 19) 52886* DECL_ATTRIBUTES: Attributes. (line 21) 52887* DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 52888* DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 52889* DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 52890* DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 52891* DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 52892* DECL_CONTEXT: Namespaces. (line 31) 52893* DECL_CONV_FN_P: Functions for C++. (line 105) 52894* DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 52895* DECL_DESTRUCTOR_P: Functions for C++. (line 95) 52896* DECL_EXTERNAL: Declarations. (line 6) 52897* DECL_EXTERNAL <1>: Function Properties. 52898 (line 25) 52899* DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 52900* DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 52901* DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 52902* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 52903 (line 61) 52904* DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 52905* DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 52906 (line 55) 52907* DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 52908* DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 52909* DECL_INITIAL: Declarations. (line 6) 52910* DECL_INITIAL <1>: Function Basics. (line 51) 52911* DECL_LINKONCE_P: Functions for C++. (line 50) 52912* DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 52913* DECL_MAIN_P: Functions for C++. (line 34) 52914* DECL_NAME: Working with declarations. 52915 (line 7) 52916* DECL_NAME <1>: Function Basics. (line 6) 52917* DECL_NAME <2>: Function Basics. (line 9) 52918* DECL_NAME <3>: Namespaces. (line 20) 52919* DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 52920* DECL_NAMESPACE_STD_P: Namespaces. (line 45) 52921* DECL_NONCONVERTING_P: Functions for C++. (line 80) 52922* DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 52923* DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 52924* DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 52925* DECL_PURE_P: Function Properties. 52926 (line 40) 52927* DECL_RESULT: Function Basics. (line 41) 52928* DECL_SAVED_TREE: Function Basics. (line 44) 52929* DECL_SIZE: Declarations. (line 6) 52930* DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 52931* DECL_STMT: Statements for C++. (line 6) 52932* DECL_STMT_DECL: Statements for C++. (line 6) 52933* DECL_THUNK_P: Functions for C++. (line 116) 52934* DECL_VIRTUAL_P: Function Properties. 52935 (line 44) 52936* DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 52937* default: GTY Options. (line 90) 52938* default_file_start: File Framework. (line 8) 52939* DEFAULT_GDB_EXTENSIONS: DBX Options. (line 17) 52940* DEFAULT_INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 199) 52941* DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 34) 52942* DEFAULT_SIGNED_CHAR: Type Layout. (line 117) 52943* define_address_constraint: Define Constraints. (line 113) 52944* define_asm_attributes: Tagging Insns. (line 73) 52945* define_attr: Defining Attributes. 52946 (line 6) 52947* define_automaton: Processor pipeline description. 52948 (line 53) 52949* define_bypass: Processor pipeline description. 52950 (line 196) 52951* define_code_attr: Code Iterators. (line 6) 52952* define_code_iterator: Code Iterators. (line 6) 52953* define_cond_exec: Conditional Execution. 52954 (line 13) 52955* define_constants: Constant Definitions. 52956 (line 6) 52957* define_constraint: Define Constraints. (line 45) 52958* define_cpu_unit: Processor pipeline description. 52959 (line 68) 52960* define_c_enum: Constant Definitions. 52961 (line 49) 52962* define_delay: Delay Slots. (line 25) 52963* define_enum: Constant Definitions. 52964 (line 118) 52965* define_enum_attr: Defining Attributes. 52966 (line 83) 52967* define_enum_attr <1>: Constant Definitions. 52968 (line 136) 52969* define_expand: Expander Definitions. 52970 (line 11) 52971* define_insn: Patterns. (line 6) 52972* 'define_insn' example: Example. (line 6) 52973* define_insn_and_rewrite: Insn Splitting. (line 234) 52974* define_insn_and_split: Insn Splitting. (line 190) 52975* define_insn_reservation: Processor pipeline description. 52976 (line 105) 52977* define_int_attr: Int Iterators. (line 6) 52978* define_int_iterator: Int Iterators. (line 6) 52979* define_memory_constraint: Define Constraints. (line 80) 52980* define_mode_attr: Substitutions. (line 6) 52981* define_mode_iterator: Defining Mode Iterators. 52982 (line 6) 52983* define_peephole: define_peephole. (line 6) 52984* define_peephole2: define_peephole2. (line 6) 52985* define_predicate: Defining Predicates. 52986 (line 6) 52987* define_query_cpu_unit: Processor pipeline description. 52988 (line 90) 52989* define_register_constraint: Define Constraints. (line 26) 52990* define_reservation: Processor pipeline description. 52991 (line 185) 52992* define_special_memory_constraint: Define Constraints. (line 99) 52993* define_special_predicate: Defining Predicates. 52994 (line 6) 52995* define_split: Insn Splitting. (line 32) 52996* define_subst: Define Subst. (line 6) 52997* define_subst <1>: Define Subst Example. 52998 (line 6) 52999* define_subst <2>: Define Subst Pattern Matching. 53000 (line 6) 53001* define_subst <3>: Define Subst Output Template. 53002 (line 6) 53003* define_subst <4>: Define Subst. (line 14) 53004* define_subst <5>: Subst Iterators. (line 6) 53005* define_subst_attr: Subst Iterators. (line 6) 53006* define_subst_attr <1>: Subst Iterators. (line 26) 53007* defining attributes and their values: Defining Attributes. 53008 (line 6) 53009* defining constraints: Define Constraints. (line 6) 53010* defining jump instruction patterns: Jump Patterns. (line 6) 53011* defining looping instruction patterns: Looping Patterns. (line 6) 53012* defining peephole optimizers: Peephole Definitions. 53013 (line 6) 53014* defining predicates: Defining Predicates. 53015 (line 6) 53016* defining RTL sequences for code generation: Expander Definitions. 53017 (line 6) 53018* delay slots, defining: Delay Slots. (line 6) 53019* deletable: GTY Options. (line 134) 53020* DELETE_IF_ORDINARY: Filesystem. (line 79) 53021* Dependent Patterns: Dependent Patterns. (line 6) 53022* desc: GTY Options. (line 90) 53023* descriptors for nested functions: Trampolines. (line 6) 53024* destructors, output of: Initialization. (line 6) 53025* deterministic finite state automaton: Processor pipeline description. 53026 (line 6) 53027* deterministic finite state automaton <1>: Processor pipeline description. 53028 (line 304) 53029* DFmode: Machine Modes. (line 76) 53030* diagnostics guidelines, fix-it hints: Guidelines for Diagnostics. 53031 (line 320) 53032* diagnostics, actionable: Guidelines for Diagnostics. 53033 (line 15) 53034* diagnostics, false positive: Guidelines for Diagnostics. 53035 (line 39) 53036* diagnostics, guidelines for: Guidelines for Diagnostics. 53037 (line 5) 53038* diagnostics, locations: Guidelines for Diagnostics. 53039 (line 159) 53040* diagnostics, true positive: Guidelines for Diagnostics. 53041 (line 39) 53042* digits in constraint: Simple Constraints. (line 128) 53043* DImode: Machine Modes. (line 45) 53044* directory options .md: Including Patterns. (line 45) 53045* DIR_SEPARATOR: Filesystem. (line 18) 53046* DIR_SEPARATOR_2: Filesystem. (line 19) 53047* disabling certain registers: Register Basics. (line 116) 53048* dispatch table: Dispatch Tables. (line 8) 53049* div: Arithmetic. (line 116) 53050* 'div' and attributes: Expressions. (line 83) 53051* division: Arithmetic. (line 116) 53052* division <1>: Arithmetic. (line 130) 53053* division <2>: Arithmetic. (line 136) 53054* 'divM3' instruction pattern: Standard Names. (line 442) 53055* 'divmodM4' instruction pattern: Standard Names. (line 808) 53056* dollar sign: Multi-Alternative. (line 57) 53057* DOLLARS_IN_IDENTIFIERS: Misc. (line 485) 53058* 'doloop_begin' instruction pattern: Standard Names. (line 1879) 53059* 'doloop_end' instruction pattern: Standard Names. (line 1867) 53060* DONE: Expander Definitions. 53061 (line 77) 53062* DONE <1>: Insn Splitting. (line 61) 53063* DONE <2>: define_peephole2. (line 76) 53064* DONT_USE_BUILTIN_SETJMP: Exception Region Output. 53065 (line 78) 53066* DOUBLE_TYPE_SIZE: Type Layout. (line 52) 53067* DO_BODY: Statements for C++. (line 6) 53068* DO_COND: Statements for C++. (line 6) 53069* DO_STMT: Statements for C++. (line 6) 53070* DQmode: Machine Modes. (line 118) 53071* driver: Driver. (line 6) 53072* DRIVER_SELF_SPECS: Driver. (line 8) 53073* dump examples: Dump examples. (line 6) 53074* dump setup: Dump setup. (line 6) 53075* dump types: Dump types. (line 6) 53076* dump verbosity: Dump output verbosity. 53077 (line 6) 53078* DUMPFILE_FORMAT: Filesystem. (line 67) 53079* dump_basic_block: Dump types. (line 29) 53080* dump_generic_expr: Dump types. (line 31) 53081* dump_gimple_stmt: Dump types. (line 33) 53082* dump_printf: Dump types. (line 6) 53083* DWARF2_ASM_LINE_DEBUG_INFO: DWARF. (line 45) 53084* DWARF2_ASM_VIEW_DEBUG_INFO: DWARF. (line 51) 53085* DWARF2_DEBUGGING_INFO: DWARF. (line 8) 53086* DWARF2_FRAME_INFO: DWARF. (line 25) 53087* DWARF2_FRAME_REG_OUT: Frame Registers. (line 149) 53088* DWARF2_UNWIND_INFO: Exception Region Output. 53089 (line 39) 53090* DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 146) 53091* DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 53092 (line 90) 53093* DWARF_FRAME_REGISTERS: Frame Registers. (line 109) 53094* DWARF_FRAME_REGNUM: Frame Registers. (line 141) 53095* DWARF_LAZY_REGISTER_VALUE: Frame Registers. (line 170) 53096* DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 134) 53097* DWARF_ZERO_REG: Frame Layout. (line 157) 53098* DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 84) 53099* 'E' in constraint: Simple Constraints. (line 87) 53100* earlyclobber operand: Modifiers. (line 25) 53101* edge: Edges. (line 6) 53102* edge in the flow graph: Edges. (line 6) 53103* edge iterators: Edges. (line 15) 53104* edge splitting: Maintaining the CFG. 53105 (line 104) 53106* EDGE_ABNORMAL: Edges. (line 127) 53107* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 53108* EDGE_ABNORMAL, EDGE_EH: Edges. (line 95) 53109* EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 121) 53110* EDGE_FALLTHRU, force_nonfallthru: Edges. (line 85) 53111* 'EDOM', implicit usage: Library Calls. (line 59) 53112* EH_FRAME_SECTION_NAME: Exception Region Output. 53113 (line 9) 53114* EH_FRAME_THROUGH_COLLECT2: Exception Region Output. 53115 (line 19) 53116* 'eh_return' instruction pattern: Standard Names. (line 2060) 53117* EH_RETURN_DATA_REGNO: Exception Handling. (line 6) 53118* EH_RETURN_HANDLER_RTX: Exception Handling. (line 38) 53119* EH_RETURN_STACKADJ_RTX: Exception Handling. (line 21) 53120* EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 53121 (line 29) 53122* EH_USES: Function Entry. (line 162) 53123* ei_edge: Edges. (line 43) 53124* ei_end_p: Edges. (line 27) 53125* ei_last: Edges. (line 23) 53126* ei_next: Edges. (line 35) 53127* ei_one_before_end_p: Edges. (line 31) 53128* ei_prev: Edges. (line 39) 53129* ei_safe_safe: Edges. (line 47) 53130* ei_start: Edges. (line 19) 53131* ELIMINABLE_REGS: Elimination. (line 34) 53132* ELSE_CLAUSE: Statements for C++. (line 6) 53133* Embedded C: Fixed-point fractional library routines. 53134 (line 6) 53135* Empty Statements: Empty Statements. (line 6) 53136* EMPTY_CLASS_EXPR: Statements for C++. (line 6) 53137* EMPTY_FIELD_BOUNDARY: Storage Layout. (line 341) 53138* Emulated TLS: Emulated TLS. (line 6) 53139* enabled: Disable Insn Alternatives. 53140 (line 6) 53141* ENDFILE_SPEC: Driver. (line 155) 53142* endianness: Portability. (line 20) 53143* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 10) 53144* entry_value: Debug Information. (line 30) 53145* enum reg_class: Register Classes. (line 70) 53146* ENUMERAL_TYPE: Types. (line 6) 53147* enumerations: Constant Definitions. 53148 (line 49) 53149* epilogue: Function Entry. (line 6) 53150* 'epilogue' instruction pattern: Standard Names. (line 2098) 53151* EPILOGUE_USES: Function Entry. (line 156) 53152* eq: Comparisons. (line 52) 53153* 'eq' and attributes: Expressions. (line 83) 53154* equal: Comparisons. (line 52) 53155* eq_attr: Expressions. (line 104) 53156* EQ_EXPR: Unary and Binary Expressions. 53157 (line 6) 53158* 'errno', implicit usage: Library Calls. (line 71) 53159* EXACT_DIV_EXPR: Unary and Binary Expressions. 53160 (line 6) 53161* examining SSA_NAMEs: SSA. (line 182) 53162* exception handling: Edges. (line 95) 53163* exception handling <1>: Exception Handling. (line 6) 53164* 'exception_receiver' instruction pattern: Standard Names. (line 2025) 53165* exclamation point: Multi-Alternative. (line 48) 53166* exclusion_set: Processor pipeline description. 53167 (line 223) 53168* exclusive-or, bitwise: Arithmetic. (line 168) 53169* EXIT_EXPR: Unary and Binary Expressions. 53170 (line 6) 53171* EXIT_IGNORE_STACK: Function Entry. (line 144) 53172* 'exp10M2' instruction pattern: Standard Names. (line 995) 53173* 'exp2M2' instruction pattern: Standard Names. (line 1002) 53174* expander definitions: Expander Definitions. 53175 (line 6) 53176* 'expm1M2' instruction pattern: Standard Names. (line 985) 53177* 'expM2' instruction pattern: Standard Names. (line 978) 53178* expression: Expression trees. (line 6) 53179* expression codes: RTL Objects. (line 47) 53180* EXPR_FILENAME: Working with declarations. 53181 (line 14) 53182* EXPR_LINENO: Working with declarations. 53183 (line 20) 53184* expr_list: Insns. (line 568) 53185* EXPR_STMT: Statements for C++. (line 6) 53186* EXPR_STMT_EXPR: Statements for C++. (line 6) 53187* 'extendMN2' instruction pattern: Standard Names. (line 1447) 53188* extensible constraints: Simple Constraints. (line 171) 53189* 'extract_last_M' instruction pattern: Standard Names. (line 543) 53190* EXTRA_SPECS: Driver. (line 182) 53191* 'extv' instruction pattern: Standard Names. (line 1538) 53192* 'extvM' instruction pattern: Standard Names. (line 1483) 53193* 'extvmisalignM' instruction pattern: Standard Names. (line 1493) 53194* 'extzv' instruction pattern: Standard Names. (line 1556) 53195* 'extzvM' instruction pattern: Standard Names. (line 1507) 53196* 'extzvmisalignM' instruction pattern: Standard Names. (line 1510) 53197* 'F' in constraint: Simple Constraints. (line 92) 53198* FAIL: Expander Definitions. 53199 (line 83) 53200* FAIL <1>: Insn Splitting. (line 68) 53201* FAIL <2>: define_peephole2. (line 83) 53202* fall-thru: Edges. (line 68) 53203* false positive: Guidelines for Diagnostics. 53204 (line 39) 53205* FATAL_EXIT_CODE: Host Misc. (line 6) 53206* FDL, GNU Free Documentation License: GNU Free Documentation License. 53207 (line 6) 53208* features, optional, in system conventions: Run-time Target. 53209 (line 59) 53210* ffs: Arithmetic. (line 210) 53211* 'ffsM2' instruction pattern: Standard Names. (line 1157) 53212* FIELD_DECL: Declarations. (line 6) 53213* files and passes of the compiler: Passes. (line 6) 53214* files, generated: Files. (line 6) 53215* file_end_indicate_exec_stack: File Framework. (line 39) 53216* final_absence_set: Processor pipeline description. 53217 (line 223) 53218* FINAL_PRESCAN_INSN: Instruction Output. (line 60) 53219* final_presence_set: Processor pipeline description. 53220 (line 223) 53221* final_sequence: Instruction Output. (line 144) 53222* FIND_BASE_TERM: Addressing Modes. (line 117) 53223* finite state automaton minimization: Processor pipeline description. 53224 (line 304) 53225* FINI_ARRAY_SECTION_ASM_OP: Sections. (line 113) 53226* FINI_SECTION_ASM_OP: Sections. (line 98) 53227* FIRST_PARM_OFFSET: Frame Layout. (line 59) 53228* 'FIRST_PARM_OFFSET' and virtual registers: Regs and Memory. 53229 (line 65) 53230* FIRST_PSEUDO_REGISTER: Register Basics. (line 8) 53231* FIRST_STACK_REG: Stack Registers. (line 26) 53232* FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 53233* fix: Conversions. (line 66) 53234* fix-it hints: Guidelines for Diagnostics. 53235 (line 320) 53236* fixed register: Register Basics. (line 15) 53237* fixed-point fractional library: Fixed-point fractional library routines. 53238 (line 6) 53239* FIXED_CONVERT_EXPR: Unary and Binary Expressions. 53240 (line 6) 53241* FIXED_CST: Constant expressions. 53242 (line 6) 53243* FIXED_POINT_TYPE: Types. (line 6) 53244* FIXED_REGISTERS: Register Basics. (line 14) 53245* fixed_regs: Register Basics. (line 102) 53246* fixed_size_mode: Machine Modes. (line 305) 53247* 'fixMN2' instruction pattern: Standard Names. (line 1414) 53248* 'fixunsMN2' instruction pattern: Standard Names. (line 1423) 53249* 'fixuns_truncMN2' instruction pattern: Standard Names. (line 1438) 53250* 'fix_truncMN2' instruction pattern: Standard Names. (line 1434) 53251* FIX_TRUNC_EXPR: Unary and Binary Expressions. 53252 (line 6) 53253* flags in RTL expression: Flags. (line 6) 53254* float: Conversions. (line 58) 53255* floating point and cross compilation: Floating Point. (line 6) 53256* 'floatMN2' instruction pattern: Standard Names. (line 1406) 53257* 'floatunsMN2' instruction pattern: Standard Names. (line 1410) 53258* FLOAT_EXPR: Unary and Binary Expressions. 53259 (line 6) 53260* float_extend: Conversions. (line 33) 53261* FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 32) 53262* FLOAT_STORE_FLAG_VALUE: Misc. (line 320) 53263* float_truncate: Conversions. (line 53) 53264* FLOAT_TYPE_SIZE: Type Layout. (line 48) 53265* FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 41) 53266* 'FLOAT_WORDS_BIG_ENDIAN', (lack of) effect on 'subreg': Regs and Memory. 53267 (line 234) 53268* 'floorM2' instruction pattern: Standard Names. (line 1069) 53269* FLOOR_DIV_EXPR: Unary and Binary Expressions. 53270 (line 6) 53271* FLOOR_MOD_EXPR: Unary and Binary Expressions. 53272 (line 6) 53273* flow-insensitive alias analysis: Alias analysis. (line 6) 53274* flow-sensitive alias analysis: Alias analysis. (line 6) 53275* fma: Arithmetic. (line 112) 53276* 'fmaM4' instruction pattern: Standard Names. (line 478) 53277* 'fmaxM3' instruction pattern: Standard Names. (line 509) 53278* 'fminM3' instruction pattern: Standard Names. (line 509) 53279* 'fmodM3' instruction pattern: Standard Names. (line 901) 53280* 'fmsM4' instruction pattern: Standard Names. (line 485) 53281* 'fnmaM4' instruction pattern: Standard Names. (line 491) 53282* 'fnmsM4' instruction pattern: Standard Names. (line 497) 53283* 'fold_extract_last_M' instruction pattern: Standard Names. (line 550) 53284* 'fold_left_plus_M' instruction pattern: Standard Names. (line 558) 53285* FORCE_CODE_SECTION_ALIGN: Sections. (line 149) 53286* force_reg: Standard Names. (line 36) 53287* FOR_BODY: Statements for C++. (line 6) 53288* FOR_COND: Statements for C++. (line 6) 53289* FOR_EXPR: Statements for C++. (line 6) 53290* FOR_INIT_STMT: Statements for C++. (line 6) 53291* FOR_STMT: Statements for C++. (line 6) 53292* for_user: GTY Options. (line 82) 53293* fractional types: Fixed-point fractional library routines. 53294 (line 6) 53295* 'fractMN2' instruction pattern: Standard Names. (line 1456) 53296* 'fractunsMN2' instruction pattern: Standard Names. (line 1471) 53297* fract_convert: Conversions. (line 82) 53298* FRACT_TYPE_SIZE: Type Layout. (line 67) 53299* frame layout: Frame Layout. (line 6) 53300* FRAME_ADDR_RTX: Frame Layout. (line 108) 53301* FRAME_GROWS_DOWNWARD: Frame Layout. (line 26) 53302* 'FRAME_GROWS_DOWNWARD' and virtual registers: Regs and Memory. 53303 (line 69) 53304* FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 225) 53305* frame_pointer_needed: Function Entry. (line 42) 53306* FRAME_POINTER_REGNUM: Frame Registers. (line 13) 53307* 'FRAME_POINTER_REGNUM' and virtual registers: Regs and Memory. 53308 (line 74) 53309* frame_pointer_rtx: Frame Registers. (line 104) 53310* frame_related: Flags. (line 238) 53311* 'frame_related', in 'insn', 'call_insn', 'jump_insn', 'barrier', and 'set': Flags. 53312 (line 135) 53313* 'frame_related', in 'mem': Flags. (line 74) 53314* 'frame_related', in 'reg': Flags. (line 102) 53315* 'frame_related', in 'symbol_ref': Flags. (line 179) 53316* frequency, count, BB_FREQ_BASE: Profile information. 53317 (line 30) 53318* 'ftruncM2' instruction pattern: Standard Names. (line 1429) 53319* function: Functions. (line 6) 53320* function <1>: Functions for C++. (line 6) 53321* function call conventions: Interface. (line 6) 53322* function entry and exit: Function Entry. (line 6) 53323* function entry point, alternate function entry point: Edges. 53324 (line 180) 53325* function properties: Function Properties. 53326 (line 6) 53327* function-call insns: Calls. (line 6) 53328* functions, leaf: Leaf Functions. (line 6) 53329* FUNCTION_ARG_REGNO_P: Register Arguments. (line 261) 53330* FUNCTION_BOUNDARY: Storage Layout. (line 176) 53331* FUNCTION_DECL: Functions. (line 6) 53332* FUNCTION_DECL <1>: Functions for C++. (line 6) 53333* FUNCTION_MODE: Misc. (line 375) 53334* FUNCTION_PROFILER: Profiling. (line 8) 53335* FUNCTION_TYPE: Types. (line 6) 53336* FUNCTION_VALUE: Scalar Return. (line 52) 53337* FUNCTION_VALUE_REGNO_P: Scalar Return. (line 78) 53338* fundamental type: Types. (line 6) 53339* 'G' in constraint: Simple Constraints. (line 96) 53340* 'g' in constraint: Simple Constraints. (line 118) 53341* garbage collector, invocation: Invoking the garbage collector. 53342 (line 6) 53343* garbage collector, troubleshooting: Troubleshooting. (line 6) 53344* 'gather_loadMN' instruction pattern: Standard Names. (line 232) 53345* GCC and portability: Portability. (line 6) 53346* GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 53347* gcov_type: Profile information. 53348 (line 41) 53349* ge: Comparisons. (line 72) 53350* 'ge' and attributes: Expressions. (line 83) 53351* gencodes: RTL passes. (line 18) 53352* general_operand: Machine-Independent Predicates. 53353 (line 104) 53354* GENERAL_REGS: Register Classes. (line 22) 53355* generated files: Files. (line 6) 53356* generating assembler output: Output Statement. (line 6) 53357* generating insns: RTL Template. (line 6) 53358* GENERIC: Parsing pass. (line 6) 53359* GENERIC <1>: GENERIC. (line 6) 53360* generic predicates: Machine-Independent Predicates. 53361 (line 6) 53362* genflags: RTL passes. (line 18) 53363* GEN_ERRNO_RTX: Library Calls. (line 71) 53364* get_attr: Expressions. (line 99) 53365* get_attr_length: Insn Lengths. (line 52) 53366* GET_CLASS_NARROWEST_MODE: Machine Modes. (line 430) 53367* GET_CODE: RTL Objects. (line 47) 53368* get_insns: Insns. (line 34) 53369* get_last_insn: Insns. (line 34) 53370* GET_MODE: Machine Modes. (line 377) 53371* GET_MODE_ALIGNMENT: Machine Modes. (line 417) 53372* GET_MODE_BITSIZE: Machine Modes. (line 401) 53373* GET_MODE_CLASS: Machine Modes. (line 391) 53374* GET_MODE_FBIT: Machine Modes. (line 408) 53375* GET_MODE_IBIT: Machine Modes. (line 404) 53376* GET_MODE_MASK: Machine Modes. (line 412) 53377* GET_MODE_NAME: Machine Modes. (line 388) 53378* GET_MODE_NUNITS: Machine Modes. (line 426) 53379* GET_MODE_SIZE: Machine Modes. (line 398) 53380* GET_MODE_UNIT_SIZE: Machine Modes. (line 420) 53381* GET_MODE_WIDER_MODE: Machine Modes. (line 394) 53382* GET_RTX_CLASS: RTL Classes. (line 6) 53383* GET_RTX_FORMAT: RTL Classes. (line 136) 53384* GET_RTX_LENGTH: RTL Classes. (line 133) 53385* 'get_thread_pointerMODE' instruction pattern: Standard Names. 53386 (line 2477) 53387* geu: Comparisons. (line 72) 53388* 'geu' and attributes: Expressions. (line 83) 53389* GE_EXPR: Unary and Binary Expressions. 53390 (line 6) 53391* GGC: Type Information. (line 6) 53392* ggc_collect: Invoking the garbage collector. 53393 (line 6) 53394* GIMPLE: Parsing pass. (line 13) 53395* GIMPLE <1>: Gimplification pass. 53396 (line 6) 53397* GIMPLE <2>: GIMPLE. (line 6) 53398* gimple: Tuple representation. 53399 (line 14) 53400* GIMPLE API: GIMPLE API. (line 6) 53401* GIMPLE class hierarchy: Class hierarchy of GIMPLE statements. 53402 (line 6) 53403* GIMPLE Exception Handling: GIMPLE Exception Handling. 53404 (line 6) 53405* GIMPLE instruction set: GIMPLE instruction set. 53406 (line 6) 53407* GIMPLE sequences: GIMPLE sequences. (line 6) 53408* GIMPLE statement iterators: Basic Blocks. (line 78) 53409* GIMPLE statement iterators <1>: Maintaining the CFG. 53410 (line 33) 53411* gimple_addresses_taken: Manipulating GIMPLE statements. 53412 (line 89) 53413* 'GIMPLE_ASM': 'GIMPLE_ASM'. (line 6) 53414* gimple_asm_clobber_op: 'GIMPLE_ASM'. (line 39) 53415* gimple_asm_input_op: 'GIMPLE_ASM'. (line 23) 53416* gimple_asm_nclobbers: 'GIMPLE_ASM'. (line 20) 53417* gimple_asm_ninputs: 'GIMPLE_ASM'. (line 14) 53418* gimple_asm_noutputs: 'GIMPLE_ASM'. (line 17) 53419* gimple_asm_output_op: 'GIMPLE_ASM'. (line 31) 53420* gimple_asm_set_clobber_op: 'GIMPLE_ASM'. (line 43) 53421* gimple_asm_set_input_op: 'GIMPLE_ASM'. (line 27) 53422* gimple_asm_set_output_op: 'GIMPLE_ASM'. (line 35) 53423* gimple_asm_set_volatile: 'GIMPLE_ASM'. (line 54) 53424* gimple_asm_string: 'GIMPLE_ASM'. (line 47) 53425* gimple_asm_volatile_p: 'GIMPLE_ASM'. (line 51) 53426* 'GIMPLE_ASSIGN': 'GIMPLE_ASSIGN'. (line 6) 53427* gimple_assign_cast_p: Logical Operators. (line 158) 53428* gimple_assign_cast_p <1>: 'GIMPLE_ASSIGN'. (line 104) 53429* gimple_assign_lhs: 'GIMPLE_ASSIGN'. (line 62) 53430* gimple_assign_lhs_ptr: 'GIMPLE_ASSIGN'. (line 65) 53431* gimple_assign_rhs1: 'GIMPLE_ASSIGN'. (line 68) 53432* gimple_assign_rhs1_ptr: 'GIMPLE_ASSIGN'. (line 71) 53433* gimple_assign_rhs2: 'GIMPLE_ASSIGN'. (line 75) 53434* gimple_assign_rhs2_ptr: 'GIMPLE_ASSIGN'. (line 78) 53435* gimple_assign_rhs3: 'GIMPLE_ASSIGN'. (line 82) 53436* gimple_assign_rhs3_ptr: 'GIMPLE_ASSIGN'. (line 85) 53437* gimple_assign_rhs_class: 'GIMPLE_ASSIGN'. (line 56) 53438* gimple_assign_rhs_code: 'GIMPLE_ASSIGN'. (line 52) 53439* gimple_assign_set_lhs: 'GIMPLE_ASSIGN'. (line 89) 53440* gimple_assign_set_rhs1: 'GIMPLE_ASSIGN'. (line 92) 53441* gimple_assign_set_rhs2: 'GIMPLE_ASSIGN'. (line 96) 53442* gimple_assign_set_rhs3: 'GIMPLE_ASSIGN'. (line 100) 53443* gimple_bb: Manipulating GIMPLE statements. 53444 (line 17) 53445* 'GIMPLE_BIND': 'GIMPLE_BIND'. (line 6) 53446* gimple_bind_add_seq: 'GIMPLE_BIND'. (line 34) 53447* gimple_bind_add_stmt: 'GIMPLE_BIND'. (line 31) 53448* gimple_bind_append_vars: 'GIMPLE_BIND'. (line 18) 53449* gimple_bind_block: 'GIMPLE_BIND'. (line 39) 53450* gimple_bind_body: 'GIMPLE_BIND'. (line 22) 53451* gimple_bind_set_block: 'GIMPLE_BIND'. (line 44) 53452* gimple_bind_set_body: 'GIMPLE_BIND'. (line 26) 53453* gimple_bind_set_vars: 'GIMPLE_BIND'. (line 14) 53454* gimple_bind_vars: 'GIMPLE_BIND'. (line 11) 53455* gimple_block: Manipulating GIMPLE statements. 53456 (line 20) 53457* gimple_build: GIMPLE API. (line 34) 53458* gimple_build <1>: GIMPLE API. (line 36) 53459* gimple_build <2>: GIMPLE API. (line 38) 53460* gimple_build <3>: GIMPLE API. (line 41) 53461* gimple_build <4>: GIMPLE API. (line 44) 53462* gimple_build <5>: GIMPLE API. (line 47) 53463* gimple_build_debug_begin_stmt: 'GIMPLE_DEBUG'. (line 72) 53464* gimple_build_debug_inline_entry: 'GIMPLE_DEBUG'. (line 82) 53465* gimple_build_nop: 'GIMPLE_NOP'. (line 6) 53466* gimple_build_omp_master: 'GIMPLE_OMP_MASTER'. 53467 (line 6) 53468* gimple_build_omp_ordered: 'GIMPLE_OMP_ORDERED'. 53469 (line 6) 53470* gimple_build_omp_return: 'GIMPLE_OMP_RETURN'. 53471 (line 6) 53472* gimple_build_omp_section: 'GIMPLE_OMP_SECTION'. 53473 (line 6) 53474* gimple_build_omp_sections_switch: 'GIMPLE_OMP_SECTIONS'. 53475 (line 13) 53476* gimple_build_wce: 'GIMPLE_WITH_CLEANUP_EXPR'. 53477 (line 6) 53478* 'GIMPLE_CALL': 'GIMPLE_CALL'. (line 6) 53479* gimple_call_arg: 'GIMPLE_CALL'. (line 67) 53480* gimple_call_arg_ptr: 'GIMPLE_CALL'. (line 71) 53481* gimple_call_chain: 'GIMPLE_CALL'. (line 58) 53482* gimple_call_copy_skip_args: 'GIMPLE_CALL'. (line 92) 53483* gimple_call_fn: 'GIMPLE_CALL'. (line 39) 53484* gimple_call_fndecl: 'GIMPLE_CALL'. (line 47) 53485* gimple_call_lhs: 'GIMPLE_CALL'. (line 30) 53486* gimple_call_lhs_ptr: 'GIMPLE_CALL'. (line 33) 53487* gimple_call_noreturn_p: 'GIMPLE_CALL'. (line 89) 53488* gimple_call_num_args: 'GIMPLE_CALL'. (line 64) 53489* gimple_call_return_type: 'GIMPLE_CALL'. (line 55) 53490* gimple_call_set_arg: 'GIMPLE_CALL'. (line 76) 53491* gimple_call_set_chain: 'GIMPLE_CALL'. (line 61) 53492* gimple_call_set_fn: 'GIMPLE_CALL'. (line 43) 53493* gimple_call_set_fndecl: 'GIMPLE_CALL'. (line 52) 53494* gimple_call_set_lhs: 'GIMPLE_CALL'. (line 36) 53495* gimple_call_set_tail: 'GIMPLE_CALL'. (line 81) 53496* gimple_call_tail_p: 'GIMPLE_CALL'. (line 86) 53497* 'GIMPLE_CATCH': 'GIMPLE_CATCH'. (line 6) 53498* gimple_catch_handler: 'GIMPLE_CATCH'. (line 19) 53499* gimple_catch_set_handler: 'GIMPLE_CATCH'. (line 26) 53500* gimple_catch_set_types: 'GIMPLE_CATCH'. (line 23) 53501* gimple_catch_types: 'GIMPLE_CATCH'. (line 12) 53502* gimple_catch_types_ptr: 'GIMPLE_CATCH'. (line 15) 53503* gimple_code: Manipulating GIMPLE statements. 53504 (line 14) 53505* 'GIMPLE_COND': 'GIMPLE_COND'. (line 6) 53506* gimple_cond_code: 'GIMPLE_COND'. (line 20) 53507* gimple_cond_false_label: 'GIMPLE_COND'. (line 59) 53508* gimple_cond_lhs: 'GIMPLE_COND'. (line 29) 53509* gimple_cond_make_false: 'GIMPLE_COND'. (line 63) 53510* gimple_cond_make_true: 'GIMPLE_COND'. (line 66) 53511* gimple_cond_rhs: 'GIMPLE_COND'. (line 37) 53512* gimple_cond_set_code: 'GIMPLE_COND'. (line 24) 53513* gimple_cond_set_false_label: 'GIMPLE_COND'. (line 54) 53514* gimple_cond_set_lhs: 'GIMPLE_COND'. (line 33) 53515* gimple_cond_set_rhs: 'GIMPLE_COND'. (line 41) 53516* gimple_cond_set_true_label: 'GIMPLE_COND'. (line 49) 53517* gimple_cond_true_label: 'GIMPLE_COND'. (line 45) 53518* gimple_convert: GIMPLE API. (line 50) 53519* gimple_copy: Manipulating GIMPLE statements. 53520 (line 146) 53521* 'GIMPLE_DEBUG': 'GIMPLE_DEBUG'. (line 6) 53522* 'GIMPLE_DEBUG_BEGIN_STMT': 'GIMPLE_DEBUG'. (line 6) 53523* 'GIMPLE_DEBUG_BIND': 'GIMPLE_DEBUG'. (line 6) 53524* gimple_debug_bind_get_value: 'GIMPLE_DEBUG'. (line 46) 53525* gimple_debug_bind_get_value_ptr: 'GIMPLE_DEBUG'. (line 50) 53526* gimple_debug_bind_get_var: 'GIMPLE_DEBUG'. (line 43) 53527* gimple_debug_bind_has_value_p: 'GIMPLE_DEBUG'. (line 68) 53528* gimple_debug_bind_p: Logical Operators. (line 162) 53529* gimple_debug_bind_reset_value: 'GIMPLE_DEBUG'. (line 64) 53530* gimple_debug_bind_set_value: 'GIMPLE_DEBUG'. (line 59) 53531* gimple_debug_bind_set_var: 'GIMPLE_DEBUG'. (line 55) 53532* 'GIMPLE_DEBUG_INLINE_ENTRY': 'GIMPLE_DEBUG'. (line 6) 53533* gimple_def_ops: Manipulating GIMPLE statements. 53534 (line 93) 53535* 'GIMPLE_EH_FILTER': 'GIMPLE_EH_FILTER'. (line 6) 53536* gimple_eh_filter_failure: 'GIMPLE_EH_FILTER'. (line 18) 53537* gimple_eh_filter_set_failure: 'GIMPLE_EH_FILTER'. (line 27) 53538* gimple_eh_filter_set_types: 'GIMPLE_EH_FILTER'. (line 22) 53539* gimple_eh_filter_types: 'GIMPLE_EH_FILTER'. (line 11) 53540* gimple_eh_filter_types_ptr: 'GIMPLE_EH_FILTER'. (line 14) 53541* gimple_eh_must_not_throw_fndecl: 'GIMPLE_EH_FILTER'. (line 32) 53542* gimple_eh_must_not_throw_set_fndecl: 'GIMPLE_EH_FILTER'. (line 36) 53543* gimple_expr_code: Manipulating GIMPLE statements. 53544 (line 30) 53545* gimple_expr_type: Manipulating GIMPLE statements. 53546 (line 23) 53547* 'GIMPLE_GOTO': 'GIMPLE_GOTO'. (line 6) 53548* gimple_goto_dest: 'GIMPLE_GOTO'. (line 9) 53549* gimple_goto_set_dest: 'GIMPLE_GOTO'. (line 12) 53550* gimple_has_mem_ops: Manipulating GIMPLE statements. 53551 (line 71) 53552* gimple_has_ops: Manipulating GIMPLE statements. 53553 (line 68) 53554* gimple_has_volatile_ops: Manipulating GIMPLE statements. 53555 (line 133) 53556* 'GIMPLE_LABEL': 'GIMPLE_LABEL'. (line 6) 53557* gimple_label_label: 'GIMPLE_LABEL'. (line 10) 53558* gimple_label_set_label: 'GIMPLE_LABEL'. (line 13) 53559* gimple_loaded_syms: Manipulating GIMPLE statements. 53560 (line 121) 53561* gimple_locus: Manipulating GIMPLE statements. 53562 (line 41) 53563* gimple_locus_empty_p: Manipulating GIMPLE statements. 53564 (line 47) 53565* gimple_modified_p: Manipulating GIMPLE statements. 53566 (line 129) 53567* 'GIMPLE_NOP': 'GIMPLE_NOP'. (line 6) 53568* gimple_nop_p: 'GIMPLE_NOP'. (line 9) 53569* gimple_no_warning_p: Manipulating GIMPLE statements. 53570 (line 50) 53571* gimple_num_ops: Logical Operators. (line 76) 53572* gimple_num_ops <1>: Manipulating GIMPLE statements. 53573 (line 74) 53574* 'GIMPLE_OMP_ATOMIC_LOAD': 'GIMPLE_OMP_ATOMIC_LOAD'. 53575 (line 6) 53576* gimple_omp_atomic_load_lhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 53577 (line 16) 53578* gimple_omp_atomic_load_rhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 53579 (line 24) 53580* gimple_omp_atomic_load_set_lhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 53581 (line 12) 53582* gimple_omp_atomic_load_set_rhs: 'GIMPLE_OMP_ATOMIC_LOAD'. 53583 (line 20) 53584* 'GIMPLE_OMP_ATOMIC_STORE': 'GIMPLE_OMP_ATOMIC_STORE'. 53585 (line 6) 53586* gimple_omp_atomic_store_set_val: 'GIMPLE_OMP_ATOMIC_STORE'. 53587 (line 11) 53588* gimple_omp_atomic_store_val: 'GIMPLE_OMP_ATOMIC_STORE'. 53589 (line 15) 53590* gimple_omp_body: 'GIMPLE_OMP_PARALLEL'. 53591 (line 23) 53592* 'GIMPLE_OMP_CONTINUE': 'GIMPLE_OMP_CONTINUE'. 53593 (line 6) 53594* gimple_omp_continue_control_def: 'GIMPLE_OMP_CONTINUE'. 53595 (line 12) 53596* gimple_omp_continue_control_def_ptr: 'GIMPLE_OMP_CONTINUE'. 53597 (line 17) 53598* gimple_omp_continue_control_use: 'GIMPLE_OMP_CONTINUE'. 53599 (line 26) 53600* gimple_omp_continue_control_use_ptr: 'GIMPLE_OMP_CONTINUE'. 53601 (line 31) 53602* gimple_omp_continue_set_control_def: 'GIMPLE_OMP_CONTINUE'. 53603 (line 21) 53604* gimple_omp_continue_set_control_use: 'GIMPLE_OMP_CONTINUE'. 53605 (line 35) 53606* 'GIMPLE_OMP_CRITICAL': 'GIMPLE_OMP_CRITICAL'. 53607 (line 6) 53608* gimple_omp_critical_name: 'GIMPLE_OMP_CRITICAL'. 53609 (line 12) 53610* gimple_omp_critical_name_ptr: 'GIMPLE_OMP_CRITICAL'. 53611 (line 16) 53612* gimple_omp_critical_set_name: 'GIMPLE_OMP_CRITICAL'. 53613 (line 21) 53614* 'GIMPLE_OMP_FOR': 'GIMPLE_OMP_FOR'. (line 6) 53615* gimple_omp_for_clauses: 'GIMPLE_OMP_FOR'. (line 17) 53616* gimple_omp_for_clauses_ptr: 'GIMPLE_OMP_FOR'. (line 20) 53617* gimple_omp_for_cond: 'GIMPLE_OMP_FOR'. (line 80) 53618* gimple_omp_for_final: 'GIMPLE_OMP_FOR'. (line 48) 53619* gimple_omp_for_final_ptr: 'GIMPLE_OMP_FOR'. (line 51) 53620* gimple_omp_for_incr: 'GIMPLE_OMP_FOR'. (line 58) 53621* gimple_omp_for_incr_ptr: 'GIMPLE_OMP_FOR'. (line 61) 53622* gimple_omp_for_index: 'GIMPLE_OMP_FOR'. (line 28) 53623* gimple_omp_for_index_ptr: 'GIMPLE_OMP_FOR'. (line 31) 53624* gimple_omp_for_initial: 'GIMPLE_OMP_FOR'. (line 38) 53625* gimple_omp_for_initial_ptr: 'GIMPLE_OMP_FOR'. (line 41) 53626* gimple_omp_for_pre_body: 'GIMPLE_OMP_FOR'. (line 67) 53627* gimple_omp_for_set_clauses: 'GIMPLE_OMP_FOR'. (line 23) 53628* gimple_omp_for_set_cond: 'GIMPLE_OMP_FOR'. (line 76) 53629* gimple_omp_for_set_final: 'GIMPLE_OMP_FOR'. (line 54) 53630* gimple_omp_for_set_incr: 'GIMPLE_OMP_FOR'. (line 64) 53631* gimple_omp_for_set_index: 'GIMPLE_OMP_FOR'. (line 34) 53632* gimple_omp_for_set_initial: 'GIMPLE_OMP_FOR'. (line 44) 53633* gimple_omp_for_set_pre_body: 'GIMPLE_OMP_FOR'. (line 71) 53634* 'GIMPLE_OMP_MASTER': 'GIMPLE_OMP_MASTER'. 53635 (line 6) 53636* 'GIMPLE_OMP_ORDERED': 'GIMPLE_OMP_ORDERED'. 53637 (line 6) 53638* 'GIMPLE_OMP_PARALLEL': 'GIMPLE_OMP_PARALLEL'. 53639 (line 6) 53640* gimple_omp_parallel_child_fn: 'GIMPLE_OMP_PARALLEL'. 53641 (line 42) 53642* gimple_omp_parallel_child_fn_ptr: 'GIMPLE_OMP_PARALLEL'. 53643 (line 47) 53644* gimple_omp_parallel_clauses: 'GIMPLE_OMP_PARALLEL'. 53645 (line 30) 53646* gimple_omp_parallel_clauses_ptr: 'GIMPLE_OMP_PARALLEL'. 53647 (line 33) 53648* gimple_omp_parallel_combined_p: 'GIMPLE_OMP_PARALLEL'. 53649 (line 15) 53650* gimple_omp_parallel_data_arg: 'GIMPLE_OMP_PARALLEL'. 53651 (line 56) 53652* gimple_omp_parallel_data_arg_ptr: 'GIMPLE_OMP_PARALLEL'. 53653 (line 61) 53654* gimple_omp_parallel_set_child_fn: 'GIMPLE_OMP_PARALLEL'. 53655 (line 52) 53656* gimple_omp_parallel_set_clauses: 'GIMPLE_OMP_PARALLEL'. 53657 (line 37) 53658* gimple_omp_parallel_set_combined_p: 'GIMPLE_OMP_PARALLEL'. 53659 (line 19) 53660* gimple_omp_parallel_set_data_arg: 'GIMPLE_OMP_PARALLEL'. 53661 (line 65) 53662* 'GIMPLE_OMP_RETURN': 'GIMPLE_OMP_RETURN'. 53663 (line 6) 53664* gimple_omp_return_nowait_p: 'GIMPLE_OMP_RETURN'. 53665 (line 13) 53666* gimple_omp_return_set_nowait: 'GIMPLE_OMP_RETURN'. 53667 (line 10) 53668* 'GIMPLE_OMP_SECTION': 'GIMPLE_OMP_SECTION'. 53669 (line 6) 53670* 'GIMPLE_OMP_SECTIONS': 'GIMPLE_OMP_SECTIONS'. 53671 (line 6) 53672* gimple_omp_sections_clauses: 'GIMPLE_OMP_SECTIONS'. 53673 (line 29) 53674* gimple_omp_sections_clauses_ptr: 'GIMPLE_OMP_SECTIONS'. 53675 (line 32) 53676* gimple_omp_sections_control: 'GIMPLE_OMP_SECTIONS'. 53677 (line 16) 53678* gimple_omp_sections_control_ptr: 'GIMPLE_OMP_SECTIONS'. 53679 (line 20) 53680* gimple_omp_sections_set_clauses: 'GIMPLE_OMP_SECTIONS'. 53681 (line 35) 53682* gimple_omp_sections_set_control: 'GIMPLE_OMP_SECTIONS'. 53683 (line 24) 53684* gimple_omp_section_last_p: 'GIMPLE_OMP_SECTION'. 53685 (line 11) 53686* gimple_omp_section_set_last: 'GIMPLE_OMP_SECTION'. 53687 (line 15) 53688* gimple_omp_set_body: 'GIMPLE_OMP_PARALLEL'. 53689 (line 26) 53690* 'GIMPLE_OMP_SINGLE': 'GIMPLE_OMP_SINGLE'. 53691 (line 6) 53692* gimple_omp_single_clauses: 'GIMPLE_OMP_SINGLE'. 53693 (line 13) 53694* gimple_omp_single_clauses_ptr: 'GIMPLE_OMP_SINGLE'. 53695 (line 16) 53696* gimple_omp_single_set_clauses: 'GIMPLE_OMP_SINGLE'. 53697 (line 19) 53698* gimple_op: Logical Operators. (line 79) 53699* gimple_op <1>: Manipulating GIMPLE statements. 53700 (line 80) 53701* gimple_ops: Logical Operators. (line 82) 53702* gimple_ops <1>: Manipulating GIMPLE statements. 53703 (line 77) 53704* gimple_op_ptr: Manipulating GIMPLE statements. 53705 (line 83) 53706* 'GIMPLE_PHI': 'GIMPLE_PHI'. (line 6) 53707* gimple_phi_arg: 'GIMPLE_PHI'. (line 24) 53708* gimple_phi_arg <1>: SSA. (line 62) 53709* gimple_phi_arg_def: SSA. (line 68) 53710* gimple_phi_arg_edge: SSA. (line 65) 53711* gimple_phi_capacity: 'GIMPLE_PHI'. (line 6) 53712* gimple_phi_num_args: 'GIMPLE_PHI'. (line 10) 53713* gimple_phi_num_args <1>: SSA. (line 58) 53714* gimple_phi_result: 'GIMPLE_PHI'. (line 15) 53715* gimple_phi_result <1>: SSA. (line 55) 53716* gimple_phi_result_ptr: 'GIMPLE_PHI'. (line 18) 53717* gimple_phi_set_arg: 'GIMPLE_PHI'. (line 28) 53718* gimple_phi_set_result: 'GIMPLE_PHI'. (line 21) 53719* gimple_plf: Manipulating GIMPLE statements. 53720 (line 64) 53721* 'GIMPLE_RESX': 'GIMPLE_RESX'. (line 6) 53722* gimple_resx_region: 'GIMPLE_RESX'. (line 12) 53723* gimple_resx_set_region: 'GIMPLE_RESX'. (line 15) 53724* 'GIMPLE_RETURN': 'GIMPLE_RETURN'. (line 6) 53725* gimple_return_retval: 'GIMPLE_RETURN'. (line 9) 53726* gimple_return_set_retval: 'GIMPLE_RETURN'. (line 12) 53727* gimple_seq_add_seq: GIMPLE sequences. (line 30) 53728* gimple_seq_add_stmt: GIMPLE sequences. (line 24) 53729* gimple_seq_alloc: GIMPLE sequences. (line 61) 53730* gimple_seq_copy: GIMPLE sequences. (line 65) 53731* gimple_seq_deep_copy: GIMPLE sequences. (line 36) 53732* gimple_seq_empty_p: GIMPLE sequences. (line 69) 53733* gimple_seq_first: GIMPLE sequences. (line 43) 53734* gimple_seq_init: GIMPLE sequences. (line 58) 53735* gimple_seq_last: GIMPLE sequences. (line 46) 53736* gimple_seq_reverse: GIMPLE sequences. (line 39) 53737* gimple_seq_set_first: GIMPLE sequences. (line 53) 53738* gimple_seq_set_last: GIMPLE sequences. (line 49) 53739* gimple_seq_singleton_p: GIMPLE sequences. (line 78) 53740* gimple_set_block: Manipulating GIMPLE statements. 53741 (line 38) 53742* gimple_set_def_ops: Manipulating GIMPLE statements. 53743 (line 96) 53744* gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 53745 (line 136) 53746* gimple_set_locus: Manipulating GIMPLE statements. 53747 (line 44) 53748* gimple_set_op: Manipulating GIMPLE statements. 53749 (line 86) 53750* gimple_set_plf: Manipulating GIMPLE statements. 53751 (line 60) 53752* gimple_set_use_ops: Manipulating GIMPLE statements. 53753 (line 103) 53754* gimple_set_vdef_ops: Manipulating GIMPLE statements. 53755 (line 117) 53756* gimple_set_visited: Manipulating GIMPLE statements. 53757 (line 53) 53758* gimple_set_vuse_ops: Manipulating GIMPLE statements. 53759 (line 110) 53760* gimple_simplify: GIMPLE API. (line 6) 53761* gimple_simplify <1>: GIMPLE API. (line 8) 53762* gimple_simplify <2>: GIMPLE API. (line 10) 53763* gimple_simplify <3>: GIMPLE API. (line 12) 53764* gimple_simplify <4>: GIMPLE API. (line 14) 53765* gimple_simplify <5>: GIMPLE API. (line 16) 53766* gimple_statement_with_ops: Tuple representation. 53767 (line 96) 53768* gimple_stored_syms: Manipulating GIMPLE statements. 53769 (line 125) 53770* 'GIMPLE_SWITCH': 'GIMPLE_SWITCH'. (line 6) 53771* gimple_switch_default_label: 'GIMPLE_SWITCH'. (line 41) 53772* gimple_switch_index: 'GIMPLE_SWITCH'. (line 24) 53773* gimple_switch_label: 'GIMPLE_SWITCH'. (line 31) 53774* gimple_switch_num_labels: 'GIMPLE_SWITCH'. (line 14) 53775* gimple_switch_set_default_label: 'GIMPLE_SWITCH'. (line 45) 53776* gimple_switch_set_index: 'GIMPLE_SWITCH'. (line 27) 53777* gimple_switch_set_label: 'GIMPLE_SWITCH'. (line 36) 53778* gimple_switch_set_num_labels: 'GIMPLE_SWITCH'. (line 19) 53779* 'GIMPLE_TRY': 'GIMPLE_TRY'. (line 6) 53780* gimple_try_catch_is_cleanup: 'GIMPLE_TRY'. (line 19) 53781* gimple_try_cleanup: 'GIMPLE_TRY'. (line 26) 53782* gimple_try_eval: 'GIMPLE_TRY'. (line 22) 53783* gimple_try_kind: 'GIMPLE_TRY'. (line 15) 53784* gimple_try_set_catch_is_cleanup: 'GIMPLE_TRY'. (line 30) 53785* gimple_try_set_cleanup: 'GIMPLE_TRY'. (line 38) 53786* gimple_try_set_eval: 'GIMPLE_TRY'. (line 34) 53787* gimple_use_ops: Manipulating GIMPLE statements. 53788 (line 100) 53789* gimple_vdef_ops: Manipulating GIMPLE statements. 53790 (line 114) 53791* gimple_visited_p: Manipulating GIMPLE statements. 53792 (line 57) 53793* gimple_vuse_ops: Manipulating GIMPLE statements. 53794 (line 107) 53795* gimple_wce_cleanup: 'GIMPLE_WITH_CLEANUP_EXPR'. 53796 (line 10) 53797* gimple_wce_cleanup_eh_only: 'GIMPLE_WITH_CLEANUP_EXPR'. 53798 (line 17) 53799* gimple_wce_set_cleanup: 'GIMPLE_WITH_CLEANUP_EXPR'. 53800 (line 13) 53801* gimple_wce_set_cleanup_eh_only: 'GIMPLE_WITH_CLEANUP_EXPR'. 53802 (line 20) 53803* 'GIMPLE_WITH_CLEANUP_EXPR': 'GIMPLE_WITH_CLEANUP_EXPR'. 53804 (line 6) 53805* gimplification: Parsing pass. (line 13) 53806* gimplification <1>: Gimplification pass. 53807 (line 6) 53808* gimplifier: Parsing pass. (line 13) 53809* gimplify_assign: 'GIMPLE_ASSIGN'. (line 41) 53810* gimplify_expr: Gimplification pass. 53811 (line 18) 53812* gimplify_function_tree: Gimplification pass. 53813 (line 18) 53814* GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 53815* global_regs: Register Basics. (line 102) 53816* 'GO_IF_LEGITIMATE_ADDRESS': Addressing Modes. (line 90) 53817* greater than: Comparisons. (line 60) 53818* greater than <1>: Comparisons. (line 64) 53819* greater than <2>: Comparisons. (line 72) 53820* gsi_after_labels: Sequence iterators. (line 74) 53821* gsi_bb: Sequence iterators. (line 82) 53822* gsi_commit_edge_inserts: Sequence iterators. (line 193) 53823* gsi_commit_edge_inserts <1>: Maintaining the CFG. 53824 (line 104) 53825* gsi_commit_one_edge_insert: Sequence iterators. (line 188) 53826* gsi_end_p: Sequence iterators. (line 59) 53827* gsi_end_p <1>: Maintaining the CFG. 53828 (line 48) 53829* gsi_for_stmt: Sequence iterators. (line 156) 53830* gsi_insert_after: Sequence iterators. (line 145) 53831* gsi_insert_after <1>: Maintaining the CFG. 53832 (line 60) 53833* gsi_insert_before: Sequence iterators. (line 134) 53834* gsi_insert_before <1>: Maintaining the CFG. 53835 (line 66) 53836* gsi_insert_on_edge: Sequence iterators. (line 173) 53837* gsi_insert_on_edge <1>: Maintaining the CFG. 53838 (line 104) 53839* gsi_insert_on_edge_immediate: Sequence iterators. (line 183) 53840* gsi_insert_seq_after: Sequence iterators. (line 152) 53841* gsi_insert_seq_before: Sequence iterators. (line 141) 53842* gsi_insert_seq_on_edge: Sequence iterators. (line 177) 53843* gsi_last: Sequence iterators. (line 49) 53844* gsi_last <1>: Maintaining the CFG. 53845 (line 44) 53846* gsi_last_bb: Sequence iterators. (line 55) 53847* gsi_link_after: Sequence iterators. (line 113) 53848* gsi_link_before: Sequence iterators. (line 103) 53849* gsi_link_seq_after: Sequence iterators. (line 108) 53850* gsi_link_seq_before: Sequence iterators. (line 97) 53851* gsi_move_after: Sequence iterators. (line 159) 53852* gsi_move_before: Sequence iterators. (line 164) 53853* gsi_move_to_bb_end: Sequence iterators. (line 169) 53854* gsi_next: Sequence iterators. (line 65) 53855* gsi_next <1>: Maintaining the CFG. 53856 (line 52) 53857* gsi_one_before_end_p: Sequence iterators. (line 62) 53858* gsi_prev: Sequence iterators. (line 68) 53859* gsi_prev <1>: Maintaining the CFG. 53860 (line 56) 53861* gsi_remove: Sequence iterators. (line 88) 53862* gsi_remove <1>: Maintaining the CFG. 53863 (line 72) 53864* gsi_replace: Sequence iterators. (line 128) 53865* gsi_seq: Sequence iterators. (line 85) 53866* gsi_split_seq_after: Sequence iterators. (line 118) 53867* gsi_split_seq_before: Sequence iterators. (line 123) 53868* gsi_start: Sequence iterators. (line 39) 53869* gsi_start <1>: Maintaining the CFG. 53870 (line 40) 53871* gsi_start_bb: Sequence iterators. (line 45) 53872* gsi_stmt: Sequence iterators. (line 71) 53873* gsi_stmt_ptr: Sequence iterators. (line 79) 53874* gt: Comparisons. (line 60) 53875* 'gt' and attributes: Expressions. (line 83) 53876* gtu: Comparisons. (line 64) 53877* 'gtu' and attributes: Expressions. (line 83) 53878* GTY: Type Information. (line 6) 53879* GT_EXPR: Unary and Binary Expressions. 53880 (line 6) 53881* guidelines for diagnostics: Guidelines for Diagnostics. 53882 (line 6) 53883* guidelines for options: Guidelines for Options. 53884 (line 6) 53885* guidelines, user experience: User Experience Guidelines. 53886 (line 6) 53887* 'H' in constraint: Simple Constraints. (line 96) 53888* HAmode: Machine Modes. (line 146) 53889* HANDLER: Statements for C++. (line 6) 53890* HANDLER_BODY: Statements for C++. (line 6) 53891* HANDLER_PARMS: Statements for C++. (line 6) 53892* HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 475) 53893* hard registers: Regs and Memory. (line 9) 53894* HARD_FRAME_POINTER_IS_ARG_POINTER: Frame Registers. (line 57) 53895* HARD_FRAME_POINTER_IS_FRAME_POINTER: Frame Registers. (line 50) 53896* HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 19) 53897* HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 10) 53898* HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 53899 (line 21) 53900* HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 53901 (line 39) 53902* HARD_REGNO_RENAME_OK: Values in Registers. 53903 (line 113) 53904* HAS_INIT_SECTION: Macros for Initialization. 53905 (line 18) 53906* HAS_LONG_COND_BRANCH: Misc. (line 8) 53907* HAS_LONG_UNCOND_BRANCH: Misc. (line 17) 53908* HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 53909* HAVE_POST_DECREMENT: Addressing Modes. (line 11) 53910* HAVE_POST_INCREMENT: Addressing Modes. (line 10) 53911* HAVE_POST_MODIFY_DISP: Addressing Modes. (line 17) 53912* HAVE_POST_MODIFY_REG: Addressing Modes. (line 23) 53913* HAVE_PRE_DECREMENT: Addressing Modes. (line 9) 53914* HAVE_PRE_INCREMENT: Addressing Modes. (line 8) 53915* HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 16) 53916* HAVE_PRE_MODIFY_REG: Addressing Modes. (line 22) 53917* HCmode: Machine Modes. (line 199) 53918* HFmode: Machine Modes. (line 61) 53919* high: Constants. (line 220) 53920* HImode: Machine Modes. (line 29) 53921* 'HImode', in 'insn': Insns. (line 291) 53922* HONOR_REG_ALLOC_ORDER: Allocation Order. (line 36) 53923* host configuration: Host Config. (line 6) 53924* host functions: Host Common. (line 6) 53925* host hooks: Host Common. (line 6) 53926* host makefile fragment: Host Fragment. (line 6) 53927* HOST_BIT_BUCKET: Filesystem. (line 51) 53928* HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 53929* HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 11) 53930* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 43) 53931* HOST_HOOKS_GT_PCH_GET_ADDRESS: Host Common. (line 15) 53932* HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 24) 53933* HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 53934* HOST_LONG_FORMAT: Host Misc. (line 45) 53935* HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 53936* HOST_OBJECT_SUFFIX: Filesystem. (line 40) 53937* HOST_PTR_PRINTF: Host Misc. (line 49) 53938* HOT_TEXT_SECTION_NAME: Sections. (line 42) 53939* HQmode: Machine Modes. (line 110) 53940* 'i' in constraint: Simple Constraints. (line 68) 53941* 'I' in constraint: Simple Constraints. (line 79) 53942* identifier: Identifiers. (line 6) 53943* IDENTIFIER_LENGTH: Identifiers. (line 22) 53944* IDENTIFIER_NODE: Identifiers. (line 6) 53945* IDENTIFIER_OPNAME_P: Identifiers. (line 27) 53946* IDENTIFIER_POINTER: Identifiers. (line 17) 53947* IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 53948* IEEE 754-2008: Decimal float library routines. 53949 (line 6) 53950* IFCVT_MACHDEP_INIT: Misc. (line 601) 53951* IFCVT_MODIFY_CANCEL: Misc. (line 595) 53952* IFCVT_MODIFY_FINAL: Misc. (line 589) 53953* IFCVT_MODIFY_INSN: Misc. (line 583) 53954* IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 575) 53955* IFCVT_MODIFY_TESTS: Misc. (line 565) 53956* IF_COND: Statements for C++. (line 6) 53957* IF_STMT: Statements for C++. (line 6) 53958* if_then_else: Comparisons. (line 80) 53959* 'if_then_else' and attributes: Expressions. (line 32) 53960* 'if_then_else' usage: Side Effects. (line 56) 53961* IMAGPART_EXPR: Unary and Binary Expressions. 53962 (line 6) 53963* Immediate Uses: SSA Operands. (line 258) 53964* immediate_operand: Machine-Independent Predicates. 53965 (line 10) 53966* IMMEDIATE_PREFIX: Instruction Output. (line 153) 53967* include: Including Patterns. (line 6) 53968* INCLUDE_DEFAULTS: Driver. (line 331) 53969* inclusive-or, bitwise: Arithmetic. (line 163) 53970* INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 188) 53971* INCOMING_REGNO: Register Basics. (line 129) 53972* INCOMING_REG_PARM_STACK_SPACE: Stack Arguments. (line 73) 53973* INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 133) 53974* INCOMING_STACK_BOUNDARY: Storage Layout. (line 171) 53975* INDEX_REG_CLASS: Register Classes. (line 140) 53976* 'indirect_jump' instruction pattern: Standard Names. (line 1826) 53977* indirect_operand: Machine-Independent Predicates. 53978 (line 70) 53979* INDIRECT_REF: Storage References. (line 6) 53980* initialization routines: Initialization. (line 6) 53981* INITIAL_ELIMINATION_OFFSET: Elimination. (line 68) 53982* INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 75) 53983* INIT_ARRAY_SECTION_ASM_OP: Sections. (line 106) 53984* INIT_CUMULATIVE_ARGS: Register Arguments. (line 158) 53985* INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 186) 53986* INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 180) 53987* INIT_ENVIRONMENT: Driver. (line 309) 53988* INIT_EXPANDERS: Per-Function Data. (line 36) 53989* INIT_EXPR: Unary and Binary Expressions. 53990 (line 6) 53991* init_machine_status: Per-Function Data. (line 42) 53992* init_one_libfunc: Library Calls. (line 15) 53993* INIT_SECTION_ASM_OP: Sections. (line 90) 53994* INIT_SECTION_ASM_OP <1>: Macros for Initialization. 53995 (line 9) 53996* inlining: Target Attributes. (line 103) 53997* insert_insn_on_edge: Maintaining the CFG. 53998 (line 104) 53999* insn: Insns. (line 63) 54000* 'insn' and '/f': Flags. (line 135) 54001* 'insn' and '/j': Flags. (line 171) 54002* 'insn' and '/s': Flags. (line 38) 54003* 'insn' and '/s' <1>: Flags. (line 162) 54004* 'insn' and '/u': Flags. (line 28) 54005* 'insn' and '/v': Flags. (line 33) 54006* insn attributes: Insn Attributes. (line 6) 54007* insn canonicalization: Insn Canonicalizations. 54008 (line 6) 54009* insn includes: Including Patterns. (line 6) 54010* insn lengths, computing: Insn Lengths. (line 6) 54011* insn notes, notes: Basic Blocks. (line 52) 54012* insn splitting: Insn Splitting. (line 6) 54013* insn-attr.h: Defining Attributes. 54014 (line 34) 54015* insns: Insns. (line 6) 54016* insns, generating: RTL Template. (line 6) 54017* insns, recognizing: RTL Template. (line 6) 54018* INSN_ANNULLED_BRANCH_P: Flags. (line 28) 54019* INSN_CODE: Insns. (line 318) 54020* INSN_DELETED_P: Flags. (line 33) 54021* INSN_FROM_TARGET_P: Flags. (line 38) 54022* insn_list: Insns. (line 568) 54023* INSN_REFERENCES_ARE_DELAYED: Misc. (line 502) 54024* INSN_SETS_ARE_DELAYED: Misc. (line 491) 54025* INSN_UID: Insns. (line 23) 54026* INSN_VAR_LOCATION: Insns. (line 247) 54027* instruction attributes: Insn Attributes. (line 6) 54028* instruction latency time: Processor pipeline description. 54029 (line 6) 54030* instruction latency time <1>: Processor pipeline description. 54031 (line 105) 54032* instruction latency time <2>: Processor pipeline description. 54033 (line 196) 54034* instruction patterns: Patterns. (line 6) 54035* instruction splitting: Insn Splitting. (line 6) 54036* 'insv' instruction pattern: Standard Names. (line 1562) 54037* 'insvM' instruction pattern: Standard Names. (line 1514) 54038* 'insvmisalignM' instruction pattern: Standard Names. (line 1524) 54039* int iterators in '.md' files: Int Iterators. (line 6) 54040* INT16_TYPE: Type Layout. (line 210) 54041* INT32_TYPE: Type Layout. (line 211) 54042* INT64_TYPE: Type Layout. (line 212) 54043* INT8_TYPE: Type Layout. (line 209) 54044* INTEGER_CST: Constant expressions. 54045 (line 6) 54046* INTEGER_TYPE: Types. (line 6) 54047* inter-procedural optimization passes: IPA passes. (line 6) 54048* Interdependence of Patterns: Dependent Patterns. (line 6) 54049* interfacing to GCC output: Interface. (line 6) 54050* interlock delays: Processor pipeline description. 54051 (line 6) 54052* intermediate representation lowering: Parsing pass. (line 13) 54053* INTMAX_TYPE: Type Layout. (line 186) 54054* INTPTR_TYPE: Type Layout. (line 233) 54055* introduction: Top. (line 6) 54056* INT_FAST16_TYPE: Type Layout. (line 226) 54057* INT_FAST32_TYPE: Type Layout. (line 227) 54058* INT_FAST64_TYPE: Type Layout. (line 228) 54059* INT_FAST8_TYPE: Type Layout. (line 225) 54060* INT_LEAST16_TYPE: Type Layout. (line 218) 54061* INT_LEAST32_TYPE: Type Layout. (line 219) 54062* INT_LEAST64_TYPE: Type Layout. (line 220) 54063* INT_LEAST8_TYPE: Type Layout. (line 217) 54064* INT_TYPE_SIZE: Type Layout. (line 11) 54065* INVOKE__main: Macros for Initialization. 54066 (line 50) 54067* in_struct: Flags. (line 254) 54068* 'in_struct', in 'code_label' and 'note': Flags. (line 48) 54069* 'in_struct', in 'insn' and 'jump_insn' and 'call_insn': Flags. 54070 (line 38) 54071* 'in_struct', in 'insn', 'call_insn', 'jump_insn' and 'jump_table_data': Flags. 54072 (line 162) 54073* 'in_struct', in 'subreg': Flags. (line 201) 54074* ior: Arithmetic. (line 163) 54075* 'ior' and attributes: Expressions. (line 50) 54076* 'ior', canonicalization of: Insn Canonicalizations. 54077 (line 67) 54078* 'iorM3' instruction pattern: Standard Names. (line 442) 54079* IPA passes: IPA passes. (line 6) 54080* IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 44) 54081* is_a: Machine Modes. (line 347) 54082* IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 129) 54083* is_gimple_addressable: Logical Operators. (line 113) 54084* is_gimple_asm_val: Logical Operators. (line 117) 54085* is_gimple_assign: Logical Operators. (line 149) 54086* is_gimple_call: Logical Operators. (line 152) 54087* is_gimple_call_addr: Logical Operators. (line 120) 54088* is_gimple_constant: Logical Operators. (line 128) 54089* is_gimple_debug: Logical Operators. (line 155) 54090* is_gimple_ip_invariant: Logical Operators. (line 137) 54091* is_gimple_ip_invariant_address: Logical Operators. (line 142) 54092* is_gimple_mem_ref_addr: Logical Operators. (line 124) 54093* is_gimple_min_invariant: Logical Operators. (line 131) 54094* is_gimple_omp: Logical Operators. (line 166) 54095* is_gimple_val: Logical Operators. (line 107) 54096* iterators in '.md' files: Iterators. (line 6) 54097* IV analysis on GIMPLE: Scalar evolutions. (line 6) 54098* IV analysis on RTL: loop-iv. (line 6) 54099* JMP_BUF_SIZE: Exception Region Output. 54100 (line 83) 54101* jump: Flags. (line 295) 54102* 'jump' instruction pattern: Standard Names. (line 1704) 54103* jump instruction patterns: Jump Patterns. (line 6) 54104* jump instructions and 'set': Side Effects. (line 56) 54105* 'jump', in 'call_insn': Flags. (line 175) 54106* 'jump', in 'insn': Flags. (line 171) 54107* 'jump', in 'mem': Flags. (line 59) 54108* Jumps: Jumps. (line 6) 54109* JUMP_ALIGN: Alignment Output. (line 8) 54110* jump_insn: Insns. (line 73) 54111* 'jump_insn' and '/f': Flags. (line 135) 54112* 'jump_insn' and '/j': Flags. (line 10) 54113* 'jump_insn' and '/s': Flags. (line 38) 54114* 'jump_insn' and '/s' <1>: Flags. (line 162) 54115* 'jump_insn' and '/u': Flags. (line 28) 54116* 'jump_insn' and '/v': Flags. (line 33) 54117* JUMP_LABEL: Insns. (line 80) 54118* JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 155) 54119* jump_table_data: Insns. (line 166) 54120* 'jump_table_data' and '/s': Flags. (line 162) 54121* 'jump_table_data' and '/v': Flags. (line 33) 54122* LABEL_ALIGN: Alignment Output. (line 42) 54123* LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 21) 54124* LABEL_ALTERNATE_NAME: Edges. (line 180) 54125* LABEL_ALT_ENTRY_P: Insns. (line 146) 54126* LABEL_DECL: Declarations. (line 6) 54127* LABEL_KIND: Insns. (line 146) 54128* LABEL_NUSES: Insns. (line 142) 54129* LABEL_PRESERVE_P: Flags. (line 48) 54130* label_ref: Constants. (line 199) 54131* 'label_ref' and '/v': Flags. (line 54) 54132* 'label_ref', RTL sharing: Sharing. (line 38) 54133* LABEL_REF_NONLOCAL_P: Flags. (line 54) 54134* language-dependent trees: Language-dependent trees. 54135 (line 6) 54136* language-independent intermediate representation: Parsing pass. 54137 (line 13) 54138* lang_hooks.gimplify_expr: Gimplification pass. 54139 (line 18) 54140* lang_hooks.parse_file: Parsing pass. (line 6) 54141* large return values: Aggregate Return. (line 6) 54142* LAST_STACK_REG: Stack Registers. (line 30) 54143* LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 54144* late IPA passes: Late IPA passes. (line 6) 54145* 'lceilMN2': Standard Names. (line 1137) 54146* LCSSA: LCSSA. (line 6) 54147* LDD_SUFFIX: Macros for Initialization. 54148 (line 121) 54149* 'ldexpM3' instruction pattern: Standard Names. (line 922) 54150* LD_FINI_SWITCH: Macros for Initialization. 54151 (line 28) 54152* LD_INIT_SWITCH: Macros for Initialization. 54153 (line 24) 54154* le: Comparisons. (line 76) 54155* 'le' and attributes: Expressions. (line 83) 54156* leaf functions: Leaf Functions. (line 6) 54157* leaf_function_p: Standard Names. (line 1788) 54158* LEAF_REGISTERS: Leaf Functions. (line 23) 54159* LEAF_REG_REMAP: Leaf Functions. (line 37) 54160* left rotate: Arithmetic. (line 195) 54161* left shift: Arithmetic. (line 173) 54162* LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 54163* LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 150) 54164* length: GTY Options. (line 47) 54165* less than: Comparisons. (line 68) 54166* less than or equal: Comparisons. (line 76) 54167* leu: Comparisons. (line 76) 54168* 'leu' and attributes: Expressions. (line 83) 54169* LE_EXPR: Unary and Binary Expressions. 54170 (line 6) 54171* 'lfloorMN2': Standard Names. (line 1132) 54172* LIB2FUNCS_EXTRA: Target Fragment. (line 11) 54173* LIBCALL_VALUE: Scalar Return. (line 56) 54174* 'libgcc.a': Library Calls. (line 6) 54175* LIBGCC2_CFLAGS: Target Fragment. (line 8) 54176* LIBGCC2_GNU_PREFIX: Type Layout. (line 102) 54177* LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 1047) 54178* LIBGCC_SPEC: Driver. (line 115) 54179* library subroutine names: Library Calls. (line 6) 54180* LIBRARY_PATH_ENV: Misc. (line 543) 54181* LIB_SPEC: Driver. (line 107) 54182* LIMIT_RELOAD_CLASS: Register Classes. (line 296) 54183* LINK_COMMAND_SPEC: Driver. (line 240) 54184* LINK_EH_SPEC: Driver. (line 142) 54185* LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 232) 54186* LINK_LIBGCC_SPECIAL_1: Driver. (line 227) 54187* LINK_SPEC: Driver. (line 100) 54188* list: Containers. (line 6) 54189* Liveness representation: Liveness information. 54190 (line 6) 54191* load address instruction: Simple Constraints. (line 162) 54192* LOAD_EXTEND_OP: Misc. (line 80) 54193* 'load_multiple' instruction pattern: Standard Names. (line 136) 54194* Local Register Allocator (LRA): RTL passes. (line 187) 54195* LOCAL_ALIGNMENT: Storage Layout. (line 284) 54196* LOCAL_CLASS_P: Classes. (line 70) 54197* LOCAL_DECL_ALIGNMENT: Storage Layout. (line 321) 54198* LOCAL_INCLUDE_DIR: Driver. (line 316) 54199* LOCAL_LABEL_PREFIX: Instruction Output. (line 151) 54200* LOCAL_REGNO: Register Basics. (line 143) 54201* location information: Guidelines for Diagnostics. 54202 (line 159) 54203* 'log10M2' instruction pattern: Standard Names. (line 1026) 54204* 'log1pM2' instruction pattern: Standard Names. (line 1016) 54205* 'log2M2' instruction pattern: Standard Names. (line 1033) 54206* 'logbM2' instruction pattern: Standard Names. (line 1040) 54207* Logical Operators: Logical Operators. (line 6) 54208* logical-and, bitwise: Arithmetic. (line 158) 54209* LOGICAL_OP_NON_SHORT_CIRCUIT: Costs. (line 294) 54210* 'logM2' instruction pattern: Standard Names. (line 1009) 54211* LOG_LINKS: Insns. (line 337) 54212* 'longjmp' and automatic variables: Interface. (line 52) 54213* LONG_ACCUM_TYPE_SIZE: Type Layout. (line 92) 54214* LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 57) 54215* LONG_FRACT_TYPE_SIZE: Type Layout. (line 72) 54216* LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 97) 54217* LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 77) 54218* LONG_LONG_TYPE_SIZE: Type Layout. (line 32) 54219* LONG_TYPE_SIZE: Type Layout. (line 21) 54220* Loop analysis: Loop representation. 54221 (line 6) 54222* Loop manipulation: Loop manipulation. (line 6) 54223* Loop querying: Loop querying. (line 6) 54224* Loop representation: Loop representation. 54225 (line 6) 54226* Loop-closed SSA form: LCSSA. (line 6) 54227* looping instruction patterns: Looping Patterns. (line 6) 54228* LOOP_ALIGN: Alignment Output. (line 29) 54229* LOOP_EXPR: Unary and Binary Expressions. 54230 (line 6) 54231* lowering, language-dependent intermediate representation: Parsing pass. 54232 (line 13) 54233* lo_sum: Arithmetic. (line 25) 54234* 'lrintMN2': Standard Names. (line 1122) 54235* 'lroundMN2': Standard Names. (line 1127) 54236* lshiftrt: Arithmetic. (line 190) 54237* 'lshiftrt' and attributes: Expressions. (line 83) 54238* LSHIFT_EXPR: Unary and Binary Expressions. 54239 (line 6) 54240* 'lshrM3' instruction pattern: Standard Names. (line 840) 54241* lt: Comparisons. (line 68) 54242* 'lt' and attributes: Expressions. (line 83) 54243* LTGT_EXPR: Unary and Binary Expressions. 54244 (line 6) 54245* lto: LTO. (line 6) 54246* ltrans: LTO. (line 6) 54247* ltu: Comparisons. (line 68) 54248* LT_EXPR: Unary and Binary Expressions. 54249 (line 6) 54250* 'm' in constraint: Simple Constraints. (line 17) 54251* machine attributes: Target Attributes. (line 6) 54252* machine description macros: Target Macros. (line 6) 54253* machine descriptions: Machine Desc. (line 6) 54254* machine mode conversions: Conversions. (line 6) 54255* machine mode wrapper classes: Machine Modes. (line 286) 54256* machine modes: Machine Modes. (line 6) 54257* machine specific constraints: Machine Constraints. 54258 (line 6) 54259* machine-independent predicates: Machine-Independent Predicates. 54260 (line 6) 54261* machine_mode: Machine Modes. (line 6) 54262* MACH_DEP_SECTION_ASM_FLAG: Sections. (line 120) 54263* macros, target description: Target Macros. (line 6) 54264* 'maddMN4' instruction pattern: Standard Names. (line 761) 54265* makefile fragment: Fragments. (line 6) 54266* makefile targets: Makefile. (line 6) 54267* MAKE_DECL_ONE_ONLY: Label Output. (line 281) 54268* make_safe_from: Expander Definitions. 54269 (line 151) 54270* MALLOC_ABI_ALIGNMENT: Storage Layout. (line 190) 54271* Manipulating GIMPLE statements: Manipulating GIMPLE statements. 54272 (line 6) 54273* marking roots: GGC Roots. (line 6) 54274* 'maskloadMN' instruction pattern: Standard Names. (line 396) 54275* 'maskstoreMN' instruction pattern: Standard Names. (line 403) 54276* 'mask_fold_left_plus_M' instruction pattern: Standard Names. 54277 (line 564) 54278* 'mask_gather_loadMN' instruction pattern: Standard Names. (line 249) 54279* MASK_RETURN_ADDR: Exception Region Output. 54280 (line 35) 54281* 'mask_scatter_storeMN' instruction pattern: Standard Names. 54282 (line 272) 54283* Match and Simplify: Match and Simplify. (line 6) 54284* matching constraint: Simple Constraints. (line 140) 54285* matching operands: Output Template. (line 49) 54286* match_dup: RTL Template. (line 73) 54287* match_dup <1>: define_peephole2. (line 28) 54288* 'match_dup' and attributes: Insn Lengths. (line 16) 54289* match_operand: RTL Template. (line 16) 54290* 'match_operand' and attributes: Expressions. (line 55) 54291* match_operator: RTL Template. (line 95) 54292* match_op_dup: RTL Template. (line 163) 54293* match_parallel: RTL Template. (line 172) 54294* match_par_dup: RTL Template. (line 219) 54295* match_scratch: RTL Template. (line 58) 54296* match_scratch <1>: define_peephole2. (line 28) 54297* 'match_test' and attributes: Expressions. (line 64) 54298* math library: Soft float library routines. 54299 (line 6) 54300* math, in RTL: Arithmetic. (line 6) 54301* matherr: Library Calls. (line 59) 54302* MATH_LIBRARY: Misc. (line 536) 54303* 'maxM3' instruction pattern: Standard Names. (line 503) 54304* MAX_BITSIZE_MODE_ANY_INT: Machine Modes. (line 444) 54305* MAX_BITSIZE_MODE_ANY_MODE: Machine Modes. (line 450) 54306* MAX_BITS_PER_WORD: Storage Layout. (line 54) 54307* MAX_CONDITIONAL_EXECUTE: Misc. (line 558) 54308* MAX_FIXED_MODE_SIZE: Storage Layout. (line 466) 54309* MAX_MOVE_MAX: Misc. (line 127) 54310* MAX_OFILE_ALIGNMENT: Storage Layout. (line 228) 54311* MAX_REGS_PER_ADDRESS: Addressing Modes. (line 42) 54312* MAX_STACK_ALIGNMENT: Storage Layout. (line 222) 54313* maybe_undef: GTY Options. (line 141) 54314* may_trap_p, tree_could_trap_p: Edges. (line 114) 54315* mcount: Profiling. (line 12) 54316* MD_EXEC_PREFIX: Driver. (line 271) 54317* MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 93) 54318* MD_HANDLE_UNWABI: Exception Handling. (line 112) 54319* MD_STARTFILE_PREFIX: Driver. (line 299) 54320* MD_STARTFILE_PREFIX_1: Driver. (line 304) 54321* mem: Regs and Memory. (line 396) 54322* 'mem' and '/c': Flags. (line 70) 54323* 'mem' and '/f': Flags. (line 74) 54324* 'mem' and '/j': Flags. (line 59) 54325* 'mem' and '/u': Flags. (line 78) 54326* 'mem' and '/v': Flags. (line 65) 54327* 'mem', RTL sharing: Sharing. (line 43) 54328* memory model: Memory model. (line 6) 54329* memory reference, nonoffsettable: Simple Constraints. (line 254) 54330* memory references in constraints: Simple Constraints. (line 17) 54331* 'memory_barrier' instruction pattern: Standard Names. (line 2172) 54332* 'memory_blockage' instruction pattern: Standard Names. (line 2163) 54333* MEMORY_MOVE_COST: Costs. (line 53) 54334* memory_operand: Machine-Independent Predicates. 54335 (line 57) 54336* MEM_ADDR_SPACE: Special Accessors. (line 48) 54337* MEM_ALIAS_SET: Special Accessors. (line 9) 54338* MEM_ALIGN: Special Accessors. (line 45) 54339* MEM_EXPR: Special Accessors. (line 19) 54340* MEM_KEEP_ALIAS_SET_P: Flags. (line 59) 54341* MEM_NOTRAP_P: Flags. (line 70) 54342* MEM_OFFSET: Special Accessors. (line 31) 54343* MEM_OFFSET_KNOWN_P: Special Accessors. (line 27) 54344* MEM_POINTER: Flags. (line 74) 54345* MEM_READONLY_P: Flags. (line 78) 54346* MEM_REF: Storage References. (line 6) 54347* MEM_SIZE: Special Accessors. (line 39) 54348* MEM_SIZE_KNOWN_P: Special Accessors. (line 35) 54349* 'mem_thread_fence' instruction pattern: Standard Names. (line 2462) 54350* MEM_VOLATILE_P: Flags. (line 65) 54351* METHOD_TYPE: Types. (line 6) 54352* MINIMUM_ALIGNMENT: Storage Layout. (line 334) 54353* MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 198) 54354* 'minM3' instruction pattern: Standard Names. (line 503) 54355* minus: Arithmetic. (line 38) 54356* 'minus' and attributes: Expressions. (line 83) 54357* 'minus', canonicalization of: Insn Canonicalizations. 54358 (line 27) 54359* MINUS_EXPR: Unary and Binary Expressions. 54360 (line 6) 54361* MIN_UNITS_PER_WORD: Storage Layout. (line 64) 54362* MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 54363* miscellaneous register hooks: Miscellaneous Register Hooks. 54364 (line 6) 54365* mnemonic attribute: Mnemonic Attribute. (line 6) 54366* mod: Arithmetic. (line 136) 54367* 'mod' and attributes: Expressions. (line 83) 54368* mode classes: Machine Modes. (line 226) 54369* mode iterators in '.md' files: Mode Iterators. (line 6) 54370* mode switching: Mode Switching. (line 6) 54371* MODE_ACCUM: Machine Modes. (line 256) 54372* MODE_BASE_REG_CLASS: Register Classes. (line 116) 54373* MODE_BASE_REG_REG_CLASS: Register Classes. (line 122) 54374* MODE_CC: Machine Modes. (line 271) 54375* MODE_CC <1>: MODE_CC Condition Codes. 54376 (line 6) 54377* MODE_CODE_BASE_REG_CLASS: Register Classes. (line 129) 54378* MODE_COMPLEX_FLOAT: Machine Modes. (line 267) 54379* MODE_COMPLEX_INT: Machine Modes. (line 264) 54380* MODE_DECIMAL_FLOAT: Machine Modes. (line 244) 54381* MODE_FLOAT: Machine Modes. (line 240) 54382* MODE_FRACT: Machine Modes. (line 248) 54383* MODE_INT: Machine Modes. (line 232) 54384* MODE_PARTIAL_INT: Machine Modes. (line 236) 54385* MODE_POINTER_BOUNDS: Machine Modes. (line 276) 54386* MODE_RANDOM: Machine Modes. (line 281) 54387* MODE_UACCUM: Machine Modes. (line 260) 54388* MODE_UFRACT: Machine Modes. (line 252) 54389* modifiers in constraints: Modifiers. (line 6) 54390* MODIFY_EXPR: Unary and Binary Expressions. 54391 (line 6) 54392* 'modM3' instruction pattern: Standard Names. (line 442) 54393* modulo scheduling: RTL passes. (line 123) 54394* MOVE_MAX: Misc. (line 122) 54395* MOVE_MAX_PIECES: Costs. (line 210) 54396* MOVE_RATIO: Costs. (line 149) 54397* 'movM' instruction pattern: Standard Names. (line 11) 54398* 'movmemM' instruction pattern: Standard Names. (line 1281) 54399* 'movmisalignM' instruction pattern: Standard Names. (line 125) 54400* 'movMODEcc' instruction pattern: Standard Names. (line 1576) 54401* 'movstr' instruction pattern: Standard Names. (line 1317) 54402* 'movstrictM' instruction pattern: Standard Names. (line 119) 54403* 'msubMN4' instruction pattern: Standard Names. (line 784) 54404* 'mulhisi3' instruction pattern: Standard Names. (line 737) 54405* 'mulM3' instruction pattern: Standard Names. (line 442) 54406* 'mulqihi3' instruction pattern: Standard Names. (line 741) 54407* 'mulsidi3' instruction pattern: Standard Names. (line 741) 54408* mult: Arithmetic. (line 93) 54409* 'mult' and attributes: Expressions. (line 83) 54410* 'mult', canonicalization of: Insn Canonicalizations. 54411 (line 27) 54412* 'mult', canonicalization of <1>: Insn Canonicalizations. 54413 (line 107) 54414* MULTIARCH_DIRNAME: Target Fragment. (line 173) 54415* MULTILIB_DEFAULTS: Driver. (line 256) 54416* MULTILIB_DIRNAMES: Target Fragment. (line 44) 54417* MULTILIB_EXCEPTIONS: Target Fragment. (line 70) 54418* MULTILIB_EXTRA_OPTS: Target Fragment. (line 135) 54419* MULTILIB_MATCHES: Target Fragment. (line 63) 54420* MULTILIB_OPTIONS: Target Fragment. (line 24) 54421* MULTILIB_OSDIRNAMES: Target Fragment. (line 142) 54422* MULTILIB_REQUIRED: Target Fragment. (line 82) 54423* MULTILIB_REUSE: Target Fragment. (line 103) 54424* multiple alternative constraints: Multi-Alternative. (line 6) 54425* MULTIPLE_SYMBOL_SPACES: Misc. (line 515) 54426* multiplication: Arithmetic. (line 93) 54427* multiplication with signed saturation: Arithmetic. (line 93) 54428* multiplication with unsigned saturation: Arithmetic. (line 93) 54429* MULT_EXPR: Unary and Binary Expressions. 54430 (line 6) 54431* MULT_HIGHPART_EXPR: Unary and Binary Expressions. 54432 (line 6) 54433* 'mulvM4' instruction pattern: Standard Names. (line 458) 54434* 'n' in constraint: Simple Constraints. (line 73) 54435* name: Identifiers. (line 6) 54436* named address spaces: Named Address Spaces. 54437 (line 6) 54438* named patterns and conditions: Patterns. (line 61) 54439* names, pattern: Standard Names. (line 6) 54440* namespace, scope: Namespaces. (line 6) 54441* NAMESPACE_DECL: Declarations. (line 6) 54442* NAMESPACE_DECL <1>: Namespaces. (line 6) 54443* NATIVE_SYSTEM_HEADER_COMPONENT: Driver. (line 326) 54444* ne: Comparisons. (line 56) 54445* 'ne' and attributes: Expressions. (line 83) 54446* 'nearbyintM2' instruction pattern: Standard Names. (line 1106) 54447* neg: Arithmetic. (line 82) 54448* 'neg' and attributes: Expressions. (line 83) 54449* 'neg', canonicalization of: Insn Canonicalizations. 54450 (line 27) 54451* NEGATE_EXPR: Unary and Binary Expressions. 54452 (line 6) 54453* negation: Arithmetic. (line 82) 54454* negation with signed saturation: Arithmetic. (line 82) 54455* negation with unsigned saturation: Arithmetic. (line 82) 54456* 'negM2' instruction pattern: Standard Names. (line 872) 54457* 'negMODEcc' instruction pattern: Standard Names. (line 1645) 54458* 'negvM3' instruction pattern: Standard Names. (line 875) 54459* nested functions, support for: Trampolines. (line 6) 54460* nested_ptr: GTY Options. (line 149) 54461* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks. (line 25) 54462* NEXT_INSN: Insns. (line 30) 54463* NEXT_OBJC_RUNTIME: Library Calls. (line 86) 54464* NE_EXPR: Unary and Binary Expressions. 54465 (line 6) 54466* nil: RTL Objects. (line 73) 54467* NM_FLAGS: Macros for Initialization. 54468 (line 110) 54469* nondeterministic finite state automaton: Processor pipeline description. 54470 (line 304) 54471* nonimmediate_operand: Machine-Independent Predicates. 54472 (line 100) 54473* nonlocal goto handler: Edges. (line 171) 54474* 'nonlocal_goto' instruction pattern: Standard Names. (line 1998) 54475* 'nonlocal_goto_receiver' instruction pattern: Standard Names. 54476 (line 2015) 54477* nonmemory_operand: Machine-Independent Predicates. 54478 (line 96) 54479* nonoffsettable memory reference: Simple Constraints. (line 254) 54480* NON_LVALUE_EXPR: Unary and Binary Expressions. 54481 (line 6) 54482* 'nop' instruction pattern: Standard Names. (line 1821) 54483* NOP_EXPR: Unary and Binary Expressions. 54484 (line 6) 54485* normal predicates: Predicates. (line 31) 54486* not: Arithmetic. (line 154) 54487* 'not' and attributes: Expressions. (line 50) 54488* not equal: Comparisons. (line 56) 54489* 'not', canonicalization of: Insn Canonicalizations. 54490 (line 27) 54491* note: Insns. (line 183) 54492* 'note' and '/i': Flags. (line 48) 54493* 'note' and '/v': Flags. (line 33) 54494* NOTE_INSN_BASIC_BLOCK: Basic Blocks. (line 50) 54495* NOTE_INSN_BASIC_BLOCK <1>: Basic Blocks. (line 52) 54496* NOTE_INSN_BEGIN_STMT: Insns. (line 233) 54497* NOTE_INSN_BLOCK_BEG: Insns. (line 208) 54498* NOTE_INSN_BLOCK_END: Insns. (line 208) 54499* NOTE_INSN_DELETED: Insns. (line 198) 54500* NOTE_INSN_DELETED_LABEL: Insns. (line 203) 54501* NOTE_INSN_EH_REGION_BEG: Insns. (line 214) 54502* NOTE_INSN_EH_REGION_END: Insns. (line 214) 54503* NOTE_INSN_FUNCTION_BEG: Insns. (line 221) 54504* NOTE_INSN_INLINE_ENTRY: Insns. (line 238) 54505* NOTE_INSN_VAR_LOCATION: Insns. (line 225) 54506* NOTE_LINE_NUMBER: Insns. (line 183) 54507* NOTE_SOURCE_FILE: Insns. (line 183) 54508* NOTE_VAR_LOCATION: Insns. (line 225) 54509* NOTICE_UPDATE_CC: CC0 Condition Codes. 54510 (line 30) 54511* 'notMODEcc' instruction pattern: Standard Names. (line 1652) 54512* NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 25) 54513* NO_DBX_FUNCTION_END: DBX Hooks. (line 19) 54514* NO_DBX_GCC_MARKER: File Names and DBX. (line 27) 54515* NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 22) 54516* NO_DOLLAR_IN_LABEL: Label Output. (line 64) 54517* NO_DOT_IN_LABEL: Label Output. (line 70) 54518* NO_FUNCTION_CSE: Costs. (line 289) 54519* NO_PROFILE_COUNTERS: Profiling. (line 27) 54520* NO_REGS: Register Classes. (line 17) 54521* Number of iterations analysis: Number of iterations. 54522 (line 6) 54523* NUM_MACHINE_MODES: Machine Modes. (line 383) 54524* NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 54525* NUM_POLY_INT_COEFFS: Overview of 'poly_int'. 54526 (line 24) 54527* N_REG_CLASSES: Register Classes. (line 81) 54528* 'o' in constraint: Simple Constraints. (line 23) 54529* OACC_CACHE: OpenACC. (line 6) 54530* OACC_DATA: OpenACC. (line 6) 54531* OACC_DECLARE: OpenACC. (line 6) 54532* OACC_ENTER_DATA: OpenACC. (line 6) 54533* OACC_EXIT_DATA: OpenACC. (line 6) 54534* OACC_HOST_DATA: OpenACC. (line 6) 54535* OACC_KERNELS: OpenACC. (line 6) 54536* OACC_LOOP: OpenACC. (line 6) 54537* OACC_PARALLEL: OpenACC. (line 6) 54538* OACC_SERIAL: OpenACC. (line 6) 54539* OACC_UPDATE: OpenACC. (line 6) 54540* OBJC_GEN_METHOD_LABEL: Label Output. (line 482) 54541* OBJC_JBLEN: Misc. (line 1042) 54542* OBJECT_FORMAT_COFF: Macros for Initialization. 54543 (line 96) 54544* offsettable address: Simple Constraints. (line 23) 54545* OFFSET_TYPE: Types. (line 6) 54546* OImode: Machine Modes. (line 51) 54547* OMP_ATOMIC: OpenMP. (line 6) 54548* OMP_CLAUSE: OpenMP. (line 6) 54549* OMP_CONTINUE: OpenMP. (line 6) 54550* OMP_CRITICAL: OpenMP. (line 6) 54551* OMP_FOR: OpenMP. (line 6) 54552* OMP_MASTER: OpenMP. (line 6) 54553* OMP_ORDERED: OpenMP. (line 6) 54554* OMP_PARALLEL: OpenMP. (line 6) 54555* OMP_RETURN: OpenMP. (line 6) 54556* OMP_SECTION: OpenMP. (line 6) 54557* OMP_SECTIONS: OpenMP. (line 6) 54558* OMP_SINGLE: OpenMP. (line 6) 54559* 'one_cmplM2' instruction pattern: Standard Names. (line 1241) 54560* operand access: Accessors. (line 6) 54561* Operand Access Routines: SSA Operands. (line 116) 54562* operand constraints: Constraints. (line 6) 54563* Operand Iterators: SSA Operands. (line 116) 54564* operand predicates: Predicates. (line 6) 54565* operand substitution: Output Template. (line 6) 54566* Operands: Operands. (line 6) 54567* operands: SSA Operands. (line 6) 54568* operands <1>: Patterns. (line 67) 54569* operator predicates: Predicates. (line 6) 54570* 'optc-gen.awk': Options. (line 6) 54571* OPTGROUP_ALL: Optimization groups. 54572 (line 28) 54573* OPTGROUP_INLINE: Optimization groups. 54574 (line 15) 54575* OPTGROUP_IPA: Optimization groups. 54576 (line 9) 54577* OPTGROUP_LOOP: Optimization groups. 54578 (line 12) 54579* OPTGROUP_OMP: Optimization groups. 54580 (line 18) 54581* OPTGROUP_OTHER: Optimization groups. 54582 (line 24) 54583* OPTGROUP_VEC: Optimization groups. 54584 (line 21) 54585* optimization dumps: Optimization info. (line 6) 54586* optimization groups: Optimization groups. 54587 (line 6) 54588* optimization info file names: Dump files and streams. 54589 (line 6) 54590* Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 54591* OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 8) 54592* option specification files: Options. (line 6) 54593* optional hardware or system features: Run-time Target. (line 59) 54594* options, directory search: Including Patterns. (line 45) 54595* options, guidelines for: Guidelines for Options. 54596 (line 6) 54597* OPTION_DEFAULT_SPECS: Driver. (line 25) 54598* opt_mode: Machine Modes. (line 322) 54599* order of register allocation: Allocation Order. (line 6) 54600* ordered_comparison_operator: Machine-Independent Predicates. 54601 (line 115) 54602* ORDERED_EXPR: Unary and Binary Expressions. 54603 (line 6) 54604* Ordering of Patterns: Pattern Ordering. (line 6) 54605* ORIGINAL_REGNO: Special Accessors. (line 53) 54606* other register constraints: Simple Constraints. (line 171) 54607* outgoing_args_size: Stack Arguments. (line 48) 54608* OUTGOING_REGNO: Register Basics. (line 136) 54609* OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 79) 54610* output of assembler code: File Framework. (line 6) 54611* output statements: Output Statement. (line 6) 54612* output templates: Output Template. (line 6) 54613* output_asm_insn: Output Statement. (line 52) 54614* OUTPUT_QUOTED_STRING: File Framework. (line 105) 54615* OVERLAPPING_REGISTER_NAMES: Instruction Output. (line 20) 54616* OVERLOAD: Functions for C++. (line 6) 54617* OVERRIDE_ABI_FORMAT: Register Arguments. (line 150) 54618* OVL_CURRENT: Functions for C++. (line 6) 54619* OVL_NEXT: Functions for C++. (line 6) 54620* 'p' in constraint: Simple Constraints. (line 162) 54621* PAD_VARARGS_DOWN: Register Arguments. (line 230) 54622* parallel: Side Effects. (line 209) 54623* parameters, c++ abi: C++ ABI. (line 6) 54624* parameters, d abi: D Language and ABI. (line 6) 54625* parameters, miscellaneous: Misc. (line 6) 54626* parameters, precompiled headers: PCH Target. (line 6) 54627* parity: Arithmetic. (line 242) 54628* 'parityM2' instruction pattern: Standard Names. (line 1228) 54629* PARM_BOUNDARY: Storage Layout. (line 150) 54630* PARM_DECL: Declarations. (line 6) 54631* PARSE_LDD_OUTPUT: Macros for Initialization. 54632 (line 125) 54633* pass dumps: Passes. (line 6) 54634* passes and files of the compiler: Passes. (line 6) 54635* passing arguments: Interface. (line 36) 54636* pass_duplicate_computed_gotos: Edges. (line 161) 54637* PATH_SEPARATOR: Filesystem. (line 31) 54638* PATTERN: Insns. (line 307) 54639* pattern conditions: Patterns. (line 55) 54640* pattern names: Standard Names. (line 6) 54641* Pattern Ordering: Pattern Ordering. (line 6) 54642* patterns: Patterns. (line 6) 54643* pc: Regs and Memory. (line 383) 54644* 'pc' and attributes: Insn Lengths. (line 20) 54645* 'pc', RTL sharing: Sharing. (line 28) 54646* PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 360) 54647* PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 64) 54648* PC_REGNUM: Register Basics. (line 150) 54649* pc_rtx: Regs and Memory. (line 388) 54650* PDImode: Machine Modes. (line 40) 54651* peephole optimization, RTL representation: Side Effects. (line 243) 54652* peephole optimizer definitions: Peephole Definitions. 54653 (line 6) 54654* per-function data: Per-Function Data. (line 6) 54655* percent sign: Output Template. (line 6) 54656* PHI nodes: SSA. (line 31) 54657* PIC: PIC. (line 6) 54658* PIC_OFFSET_TABLE_REGNUM: PIC. (line 15) 54659* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 25) 54660* pipeline hazard recognizer: Processor pipeline description. 54661 (line 6) 54662* pipeline hazard recognizer <1>: Processor pipeline description. 54663 (line 53) 54664* Plugins: Plugins. (line 6) 54665* plus: Arithmetic. (line 14) 54666* 'plus' and attributes: Expressions. (line 83) 54667* 'plus', canonicalization of: Insn Canonicalizations. 54668 (line 27) 54669* PLUS_EXPR: Unary and Binary Expressions. 54670 (line 6) 54671* Pmode: Misc. (line 363) 54672* pmode_register_operand: Machine-Independent Predicates. 54673 (line 34) 54674* pointer: Types. (line 6) 54675* POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 76) 54676* POINTER_DIFF_EXPR: Unary and Binary Expressions. 54677 (line 6) 54678* POINTER_PLUS_EXPR: Unary and Binary Expressions. 54679 (line 6) 54680* POINTER_SIZE: Storage Layout. (line 70) 54681* POINTER_TYPE: Types. (line 6) 54682* polynomial integers: poly_int. (line 6) 54683* poly_int: poly_int. (line 6) 54684* 'poly_int', invariant range: Overview of 'poly_int'. 54685 (line 31) 54686* 'poly_int', main typedefs: Overview of 'poly_int'. 54687 (line 46) 54688* 'poly_int', runtime value: Overview of 'poly_int'. 54689 (line 6) 54690* 'poly_int', template parameters: Overview of 'poly_int'. 54691 (line 24) 54692* 'poly_int', use in target-independent code: Consequences of using 'poly_int'. 54693 (line 32) 54694* 'poly_int', use in target-specific code: Consequences of using 'poly_int'. 54695 (line 40) 54696* POLY_INT_CST: Constant expressions. 54697 (line 6) 54698* popcount: Arithmetic. (line 238) 54699* 'popcountM2' instruction pattern: Standard Names. (line 1216) 54700* pops_args: Function Entry. (line 111) 54701* pop_operand: Machine-Independent Predicates. 54702 (line 87) 54703* portability: Portability. (line 6) 54704* position independent code: PIC. (line 6) 54705* POSTDECREMENT_EXPR: Unary and Binary Expressions. 54706 (line 6) 54707* POSTINCREMENT_EXPR: Unary and Binary Expressions. 54708 (line 6) 54709* post_dec: Incdec. (line 25) 54710* post_inc: Incdec. (line 30) 54711* POST_LINK_SPEC: Driver. (line 236) 54712* post_modify: Incdec. (line 33) 54713* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks. 54714 (line 34) 54715* POWI_MAX_MULTS: Misc. (line 927) 54716* 'powM3' instruction pattern: Standard Names. (line 1054) 54717* pragma: Misc. (line 420) 54718* PREDECREMENT_EXPR: Unary and Binary Expressions. 54719 (line 6) 54720* predefined macros: Run-time Target. (line 6) 54721* predicates: Predicates. (line 6) 54722* predicates and machine modes: Predicates. (line 31) 54723* predication: Conditional Execution. 54724 (line 6) 54725* predict.def: Profile information. 54726 (line 24) 54727* PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 40) 54728* PREFERRED_RELOAD_CLASS: Register Classes. (line 249) 54729* PREFERRED_STACK_BOUNDARY: Storage Layout. (line 164) 54730* prefetch: Side Effects. (line 323) 54731* 'prefetch' and '/v': Flags. (line 92) 54732* 'prefetch' instruction pattern: Standard Names. (line 2140) 54733* PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 92) 54734* PREINCREMENT_EXPR: Unary and Binary Expressions. 54735 (line 6) 54736* presence_set: Processor pipeline description. 54737 (line 223) 54738* preserving SSA form: SSA. (line 74) 54739* pretend_args_size: Function Entry. (line 117) 54740* prev_active_insn: define_peephole. (line 60) 54741* PREV_INSN: Insns. (line 26) 54742* pre_dec: Incdec. (line 8) 54743* PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 126) 54744* pre_inc: Incdec. (line 22) 54745* pre_modify: Incdec. (line 52) 54746* PRINT_OPERAND: Instruction Output. (line 95) 54747* PRINT_OPERAND_ADDRESS: Instruction Output. (line 122) 54748* PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 115) 54749* 'probe_stack' instruction pattern: Standard Names. (line 1990) 54750* 'probe_stack_address' instruction pattern: Standard Names. (line 1983) 54751* processor functional units: Processor pipeline description. 54752 (line 6) 54753* processor functional units <1>: Processor pipeline description. 54754 (line 68) 54755* processor pipeline description: Processor pipeline description. 54756 (line 6) 54757* product: Arithmetic. (line 93) 54758* profile feedback: Profile information. 54759 (line 14) 54760* profile representation: Profile information. 54761 (line 6) 54762* PROFILE_BEFORE_PROLOGUE: Profiling. (line 34) 54763* PROFILE_HOOK: Profiling. (line 22) 54764* profiling, code generation: Profiling. (line 6) 54765* program counter: Regs and Memory. (line 384) 54766* prologue: Function Entry. (line 6) 54767* 'prologue' instruction pattern: Standard Names. (line 2079) 54768* PROMOTE_MODE: Storage Layout. (line 87) 54769* pseudo registers: Regs and Memory. (line 9) 54770* PSImode: Machine Modes. (line 32) 54771* PTRDIFF_TYPE: Type Layout. (line 157) 54772* purge_dead_edges: Edges. (line 103) 54773* purge_dead_edges <1>: Maintaining the CFG. 54774 (line 81) 54775* push address instruction: Simple Constraints. (line 162) 54776* 'pushM1' instruction pattern: Standard Names. (line 429) 54777* PUSH_ARGS: Stack Arguments. (line 17) 54778* PUSH_ARGS_REVERSED: Stack Arguments. (line 25) 54779* push_operand: Machine-Independent Predicates. 54780 (line 80) 54781* push_reload: Addressing Modes. (line 176) 54782* PUSH_ROUNDING: Stack Arguments. (line 31) 54783* PUT_CODE: RTL Objects. (line 47) 54784* PUT_MODE: Machine Modes. (line 380) 54785* PUT_REG_NOTE_KIND: Insns. (line 369) 54786* QCmode: Machine Modes. (line 199) 54787* QFmode: Machine Modes. (line 57) 54788* QImode: Machine Modes. (line 25) 54789* 'QImode', in 'insn': Insns. (line 291) 54790* QQmode: Machine Modes. (line 106) 54791* qualified type: Types. (line 6) 54792* qualified type <1>: Types for C++. (line 6) 54793* querying function unit reservations: Processor pipeline description. 54794 (line 90) 54795* question mark: Multi-Alternative. (line 42) 54796* quotient: Arithmetic. (line 116) 54797* 'r' in constraint: Simple Constraints. (line 64) 54798* RDIV_EXPR: Unary and Binary Expressions. 54799 (line 6) 54800* READONLY_DATA_SECTION_ASM_OP: Sections. (line 62) 54801* real operands: SSA Operands. (line 6) 54802* REALPART_EXPR: Unary and Binary Expressions. 54803 (line 6) 54804* REAL_CST: Constant expressions. 54805 (line 6) 54806* REAL_LIBGCC_SPEC: Driver. (line 124) 54807* REAL_NM_FILE_NAME: Macros for Initialization. 54808 (line 105) 54809* REAL_TYPE: Types. (line 6) 54810* REAL_VALUE_ABS: Floating Point. (line 58) 54811* REAL_VALUE_ATOF: Floating Point. (line 39) 54812* REAL_VALUE_FIX: Floating Point. (line 31) 54813* REAL_VALUE_ISINF: Floating Point. (line 49) 54814* REAL_VALUE_ISNAN: Floating Point. (line 52) 54815* REAL_VALUE_NEGATE: Floating Point. (line 55) 54816* REAL_VALUE_NEGATIVE: Floating Point. (line 46) 54817* REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 153) 54818* REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 151) 54819* REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 152) 54820* REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 149) 54821* REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 150) 54822* REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 148) 54823* REAL_VALUE_TYPE: Floating Point. (line 25) 54824* REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 34) 54825* recognizing insns: RTL Template. (line 6) 54826* recog_data.operand: Instruction Output. (line 54) 54827* RECORD_TYPE: Types. (line 6) 54828* RECORD_TYPE <1>: Classes. (line 6) 54829* redirect_edge_and_branch: Profile information. 54830 (line 71) 54831* redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 54832 (line 89) 54833* 'reduc_and_scal_M' instruction pattern: Standard Names. (line 535) 54834* 'reduc_ior_scal_M' instruction pattern: Standard Names. (line 536) 54835* 'reduc_plus_scal_M' instruction pattern: Standard Names. (line 530) 54836* 'reduc_smax_scal_M' instruction pattern: Standard Names. (line 520) 54837* 'reduc_smin_scal_M' instruction pattern: Standard Names. (line 520) 54838* 'reduc_umax_scal_M' instruction pattern: Standard Names. (line 525) 54839* 'reduc_umin_scal_M' instruction pattern: Standard Names. (line 525) 54840* 'reduc_xor_scal_M' instruction pattern: Standard Names. (line 537) 54841* reference: Types. (line 6) 54842* REFERENCE_TYPE: Types. (line 6) 54843* reg: Regs and Memory. (line 9) 54844* 'reg' and '/f': Flags. (line 102) 54845* 'reg' and '/i': Flags. (line 97) 54846* 'reg' and '/v': Flags. (line 106) 54847* 'reg', RTL sharing: Sharing. (line 17) 54848* register allocation order: Allocation Order. (line 6) 54849* register class definitions: Register Classes. (line 6) 54850* register class preference constraints: Class Preferences. (line 6) 54851* register pairs: Values in Registers. 54852 (line 65) 54853* Register Transfer Language (RTL): RTL. (line 6) 54854* register usage: Registers. (line 6) 54855* registers arguments: Register Arguments. (line 6) 54856* registers in constraints: Simple Constraints. (line 64) 54857* REGISTER_MOVE_COST: Costs. (line 9) 54858* REGISTER_NAMES: Instruction Output. (line 8) 54859* register_operand: Machine-Independent Predicates. 54860 (line 29) 54861* REGISTER_PREFIX: Instruction Output. (line 150) 54862* REGISTER_TARGET_PRAGMAS: Misc. (line 420) 54863* REGMODE_NATURAL_SIZE: Regs and Memory. (line 191) 54864* REGMODE_NATURAL_SIZE <1>: Regs and Memory. (line 268) 54865* REGMODE_NATURAL_SIZE <2>: Values in Registers. 54866 (line 46) 54867* REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 172) 54868* REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 150) 54869* REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 160) 54870* REGNO_OK_FOR_BASE_P: Register Classes. (line 146) 54871* REGNO_OK_FOR_INDEX_P: Register Classes. (line 186) 54872* REGNO_REG_CLASS: Register Classes. (line 105) 54873* regs_ever_live: Function Entry. (line 29) 54874* regular expressions: Processor pipeline description. 54875 (line 6) 54876* regular expressions <1>: Processor pipeline description. 54877 (line 105) 54878* regular IPA passes: Regular IPA passes. (line 6) 54879* REG_ALLOC_ORDER: Allocation Order. (line 8) 54880* REG_BR_PRED: Insns. (line 541) 54881* REG_BR_PROB: Insns. (line 533) 54882* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 54883 (line 82) 54884* REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 54885 (line 52) 54886* REG_CALL_NOCF_CHECK: Insns. (line 557) 54887* REG_CC_SETTER: Insns. (line 505) 54888* REG_CC_USER: Insns. (line 505) 54889* reg_class_contents: Register Basics. (line 102) 54890* REG_CLASS_CONTENTS: Register Classes. (line 91) 54891* reg_class_for_constraint: C Constraint Interface. 54892 (line 48) 54893* REG_CLASS_NAMES: Register Classes. (line 86) 54894* REG_DEAD: Insns. (line 380) 54895* REG_DEAD, REG_UNUSED: Liveness information. 54896 (line 32) 54897* REG_DEP_ANTI: Insns. (line 527) 54898* REG_DEP_OUTPUT: Insns. (line 523) 54899* REG_DEP_TRUE: Insns. (line 520) 54900* REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 109) 54901* REG_EQUAL: Insns. (line 434) 54902* REG_EQUIV: Insns. (line 434) 54903* REG_EXPR: Special Accessors. (line 58) 54904* REG_FRAME_RELATED_EXPR: Insns. (line 547) 54905* REG_FUNCTION_VALUE_P: Flags. (line 97) 54906* REG_INC: Insns. (line 396) 54907* 'reg_label' and '/v': Flags. (line 54) 54908* REG_LABEL_OPERAND: Insns. (line 410) 54909* REG_LABEL_TARGET: Insns. (line 419) 54910* reg_names: Register Basics. (line 102) 54911* reg_names <1>: Instruction Output. (line 107) 54912* REG_NONNEG: Insns. (line 402) 54913* REG_NOTES: Insns. (line 344) 54914* REG_NOTE_KIND: Insns. (line 369) 54915* REG_OFFSET: Special Accessors. (line 62) 54916* REG_OK_STRICT: Addressing Modes. (line 99) 54917* REG_PARM_STACK_SPACE: Stack Arguments. (line 58) 54918* 'REG_PARM_STACK_SPACE', and 'TARGET_FUNCTION_ARG': Register Arguments. 54919 (line 49) 54920* REG_POINTER: Flags. (line 102) 54921* REG_SETJMP: Insns. (line 428) 54922* REG_UNUSED: Insns. (line 389) 54923* REG_USERVAR_P: Flags. (line 106) 54924* REG_VALUE_IN_UNWIND_CONTEXT: Frame Registers. (line 156) 54925* REG_WORDS_BIG_ENDIAN: Storage Layout. (line 35) 54926* relative costs: Costs. (line 6) 54927* RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 266) 54928* reloading: RTL passes. (line 170) 54929* reload_completed: Standard Names. (line 1788) 54930* 'reload_in' instruction pattern: Standard Names. (line 98) 54931* reload_in_progress: Standard Names. (line 57) 54932* 'reload_out' instruction pattern: Standard Names. (line 98) 54933* remainder: Arithmetic. (line 136) 54934* 'remainderM3' instruction pattern: Standard Names. (line 908) 54935* reorder: GTY Options. (line 175) 54936* representation of RTL: RTL. (line 6) 54937* reservation delays: Processor pipeline description. 54938 (line 6) 54939* 'restore_stack_block' instruction pattern: Standard Names. (line 1904) 54940* 'restore_stack_function' instruction pattern: Standard Names. 54941 (line 1904) 54942* 'restore_stack_nonlocal' instruction pattern: Standard Names. 54943 (line 1904) 54944* rest_of_decl_compilation: Parsing pass. (line 51) 54945* rest_of_type_compilation: Parsing pass. (line 51) 54946* RESULT_DECL: Declarations. (line 6) 54947* return: Side Effects. (line 72) 54948* 'return' instruction pattern: Standard Names. (line 1762) 54949* return values in registers: Scalar Return. (line 6) 54950* returning aggregate values: Aggregate Return. (line 6) 54951* returning structures and unions: Interface. (line 10) 54952* RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 64) 54953* RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 127) 54954* RETURN_ADDR_OFFSET: Exception Handling. (line 59) 54955* RETURN_ADDR_RTX: Frame Layout. (line 116) 54956* RETURN_EXPR: Statements for C++. (line 6) 54957* RETURN_STMT: Statements for C++. (line 6) 54958* return_val: Flags. (line 283) 54959* 'return_val', in 'call_insn': Flags. (line 120) 54960* 'return_val', in 'reg': Flags. (line 97) 54961* 'return_val', in 'symbol_ref': Flags. (line 216) 54962* reverse probability: Profile information. 54963 (line 66) 54964* REVERSE_CONDITION: MODE_CC Condition Codes. 54965 (line 92) 54966* REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 54967 (line 77) 54968* right rotate: Arithmetic. (line 195) 54969* right shift: Arithmetic. (line 190) 54970* 'rintM2' instruction pattern: Standard Names. (line 1114) 54971* RISC: Processor pipeline description. 54972 (line 6) 54973* RISC <1>: Processor pipeline description. 54974 (line 223) 54975* roots, marking: GGC Roots. (line 6) 54976* rotate: Arithmetic. (line 195) 54977* rotate <1>: Arithmetic. (line 195) 54978* rotatert: Arithmetic. (line 195) 54979* 'rotlM3' instruction pattern: Standard Names. (line 840) 54980* 'rotrM3' instruction pattern: Standard Names. (line 840) 54981* 'roundM2' instruction pattern: Standard Names. (line 1087) 54982* ROUND_DIV_EXPR: Unary and Binary Expressions. 54983 (line 6) 54984* ROUND_MOD_EXPR: Unary and Binary Expressions. 54985 (line 6) 54986* ROUND_TYPE_ALIGN: Storage Layout. (line 457) 54987* RSHIFT_EXPR: Unary and Binary Expressions. 54988 (line 6) 54989* 'rsqrtM2' instruction pattern: Standard Names. (line 888) 54990* RTL addition: Arithmetic. (line 14) 54991* RTL addition with signed saturation: Arithmetic. (line 14) 54992* RTL addition with unsigned saturation: Arithmetic. (line 14) 54993* RTL classes: RTL Classes. (line 6) 54994* RTL comparison: Arithmetic. (line 46) 54995* RTL comparison operations: Comparisons. (line 6) 54996* RTL constant expression types: Constants. (line 6) 54997* RTL constants: Constants. (line 6) 54998* RTL declarations: RTL Declarations. (line 6) 54999* RTL difference: Arithmetic. (line 38) 55000* RTL expression: RTL Objects. (line 6) 55001* RTL expressions for arithmetic: Arithmetic. (line 6) 55002* RTL format: RTL Classes. (line 73) 55003* RTL format characters: RTL Classes. (line 78) 55004* RTL function-call insns: Calls. (line 6) 55005* RTL insn template: RTL Template. (line 6) 55006* RTL integers: RTL Objects. (line 6) 55007* RTL memory expressions: Regs and Memory. (line 6) 55008* RTL object types: RTL Objects. (line 6) 55009* RTL postdecrement: Incdec. (line 6) 55010* RTL postincrement: Incdec. (line 6) 55011* RTL predecrement: Incdec. (line 6) 55012* RTL preincrement: Incdec. (line 6) 55013* RTL register expressions: Regs and Memory. (line 6) 55014* RTL representation: RTL. (line 6) 55015* RTL side effect expressions: Side Effects. (line 6) 55016* RTL strings: RTL Objects. (line 6) 55017* RTL structure sharing assumptions: Sharing. (line 6) 55018* RTL subtraction: Arithmetic. (line 38) 55019* RTL subtraction with signed saturation: Arithmetic. (line 38) 55020* RTL subtraction with unsigned saturation: Arithmetic. (line 38) 55021* RTL sum: Arithmetic. (line 14) 55022* RTL vectors: RTL Objects. (line 6) 55023* RTL_CONST_CALL_P: Flags. (line 115) 55024* RTL_CONST_OR_PURE_CALL_P: Flags. (line 125) 55025* RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 129) 55026* RTL_PURE_CALL_P: Flags. (line 120) 55027* RTX (See RTL): RTL Objects. (line 6) 55028* RTX codes, classes of: RTL Classes. (line 6) 55029* RTX_FRAME_RELATED_P: Flags. (line 135) 55030* run-time conventions: Interface. (line 6) 55031* run-time target specification: Run-time Target. (line 6) 55032* 's' in constraint: Simple Constraints. (line 100) 55033* SAD_EXPR: Vectors. (line 6) 55034* same_type_p: Types. (line 86) 55035* SAmode: Machine Modes. (line 150) 55036* 'satfractMN2' instruction pattern: Standard Names. (line 1464) 55037* 'satfractunsMN2' instruction pattern: Standard Names. (line 1477) 55038* satisfies_constraint_: C Constraint Interface. 55039 (line 36) 55040* sat_fract: Conversions. (line 90) 55041* SAVE_EXPR: Unary and Binary Expressions. 55042 (line 6) 55043* 'save_stack_block' instruction pattern: Standard Names. (line 1904) 55044* 'save_stack_function' instruction pattern: Standard Names. (line 1904) 55045* 'save_stack_nonlocal' instruction pattern: Standard Names. (line 1904) 55046* SBSS_SECTION_ASM_OP: Sections. (line 75) 55047* Scalar evolutions: Scalar evolutions. (line 6) 55048* scalars, returned as values: Scalar Return. (line 6) 55049* scalar_float_mode: Machine Modes. (line 293) 55050* scalar_int_mode: Machine Modes. (line 290) 55051* scalar_mode: Machine Modes. (line 296) 55052* 'scalbM3' instruction pattern: Standard Names. (line 915) 55053* 'scatter_storeMN' instruction pattern: Standard Names. (line 255) 55054* SCHED_GROUP_P: Flags. (line 162) 55055* SCmode: Machine Modes. (line 199) 55056* scratch: Regs and Memory. (line 320) 55057* scratch operands: Regs and Memory. (line 320) 55058* 'scratch', RTL sharing: Sharing. (line 38) 55059* scratch_operand: Machine-Independent Predicates. 55060 (line 49) 55061* SDATA_SECTION_ASM_OP: Sections. (line 57) 55062* 'sdiv_pow2M3' instruction pattern: Standard Names. (line 614) 55063* 'sdiv_pow2M3' instruction pattern <1>: Standard Names. (line 615) 55064* SDmode: Machine Modes. (line 88) 55065* 'sdot_prodM' instruction pattern: Standard Names. (line 569) 55066* search options: Including Patterns. (line 45) 55067* SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 391) 55068* SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 457) 55069* SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 392) 55070* SECONDARY_RELOAD_CLASS: Register Classes. (line 390) 55071* SELECT_CC_MODE: MODE_CC Condition Codes. 55072 (line 6) 55073* sequence: Side Effects. (line 258) 55074* Sequence iterators: Sequence iterators. (line 6) 55075* set: Side Effects. (line 15) 55076* 'set' and '/f': Flags. (line 135) 55077* 'setmemM' instruction pattern: Standard Names. (line 1328) 55078* SETUP_FRAME_ADDRESSES: Frame Layout. (line 94) 55079* SET_ASM_OP: Label Output. (line 451) 55080* SET_ASM_OP <1>: Label Output. (line 462) 55081* set_attr: Tagging Insns. (line 31) 55082* set_attr_alternative: Tagging Insns. (line 49) 55083* set_bb_seq: GIMPLE sequences. (line 75) 55084* SET_DEST: Side Effects. (line 69) 55085* SET_IS_RETURN_P: Flags. (line 171) 55086* SET_LABEL_KIND: Insns. (line 146) 55087* set_optab_libfunc: Library Calls. (line 15) 55088* SET_RATIO: Costs. (line 237) 55089* SET_SRC: Side Effects. (line 69) 55090* 'set_thread_pointerMODE' instruction pattern: Standard Names. 55091 (line 2477) 55092* SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 55093* SET_TYPE_STRUCTURAL_EQUALITY <1>: Types. (line 81) 55094* SFmode: Machine Modes. (line 69) 55095* sharing of RTL components: Sharing. (line 6) 55096* shift: Arithmetic. (line 173) 55097* SHIFT_COUNT_TRUNCATED: Misc. (line 134) 55098* SHLIB_SUFFIX: Macros for Initialization. 55099 (line 133) 55100* SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 82) 55101* SHORT_FRACT_TYPE_SIZE: Type Layout. (line 62) 55102* SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 108) 55103* SHORT_TYPE_SIZE: Type Layout. (line 15) 55104* shrink-wrapping separate components: Shrink-wrapping separate components. 55105 (line 6) 55106* 'sibcall_epilogue' instruction pattern: Standard Names. (line 2111) 55107* sibling call: Edges. (line 121) 55108* SIBLING_CALL_P: Flags. (line 175) 55109* signal-to-noise ratio (metaphorical usage for diagnostics): Guidelines for Diagnostics. 55110 (line 39) 55111* signed division: Arithmetic. (line 116) 55112* signed division with signed saturation: Arithmetic. (line 116) 55113* signed maximum: Arithmetic. (line 141) 55114* signed minimum: Arithmetic. (line 141) 55115* 'significandM2' instruction pattern: Standard Names. (line 1047) 55116* sign_extend: Conversions. (line 23) 55117* sign_extract: Bit-Fields. (line 8) 55118* 'sign_extract', canonicalization of: Insn Canonicalizations. 55119 (line 103) 55120* SIG_ATOMIC_TYPE: Type Layout. (line 208) 55121* SImode: Machine Modes. (line 37) 55122* simple constraints: Simple Constraints. (line 6) 55123* simple_return: Side Effects. (line 86) 55124* 'simple_return' instruction pattern: Standard Names. (line 1777) 55125* 'sincosM3' instruction pattern: Standard Names. (line 943) 55126* 'sinM2' instruction pattern: Standard Names. (line 937) 55127* SIZETYPE: Type Layout. (line 147) 55128* SIZE_ASM_OP: Label Output. (line 33) 55129* SIZE_TYPE: Type Layout. (line 131) 55130* skip: GTY Options. (line 76) 55131* SLOW_BYTE_ACCESS: Costs. (line 117) 55132* small IPA passes: Small IPA passes. (line 6) 55133* smax: Arithmetic. (line 141) 55134* smin: Arithmetic. (line 141) 55135* sms, swing, software pipelining: RTL passes. (line 123) 55136* 'smulhrsM3' instruction pattern: Standard Names. (line 604) 55137* 'smulhsM3' instruction pattern: Standard Names. (line 594) 55138* 'smulM3_highpart' instruction pattern: Standard Names. (line 753) 55139* soft float library: Soft float library routines. 55140 (line 6) 55141* source code, location information: Guidelines for Diagnostics. 55142 (line 159) 55143* special: GTY Options. (line 237) 55144* special predicates: Predicates. (line 31) 55145* SPECS: Target Fragment. (line 194) 55146* 'speculation_barrier' instruction pattern: Standard Names. (line 2178) 55147* speed of instructions: Costs. (line 6) 55148* splitting instructions: Insn Splitting. (line 6) 55149* split_block: Maintaining the CFG. 55150 (line 96) 55151* SQmode: Machine Modes. (line 114) 55152* sqrt: Arithmetic. (line 206) 55153* 'sqrtM2' instruction pattern: Standard Names. (line 882) 55154* square root: Arithmetic. (line 206) 55155* SSA: SSA. (line 6) 55156* 'ssaddM3' instruction pattern: Standard Names. (line 442) 55157* 'ssadM' instruction pattern: Standard Names. (line 578) 55158* 'ssashlM3' instruction pattern: Standard Names. (line 828) 55159* SSA_NAME_DEF_STMT: SSA. (line 184) 55160* SSA_NAME_VERSION: SSA. (line 189) 55161* 'ssdivM3' instruction pattern: Standard Names. (line 442) 55162* 'ssmaddMN4' instruction pattern: Standard Names. (line 776) 55163* 'ssmsubMN4' instruction pattern: Standard Names. (line 800) 55164* 'ssmulM3' instruction pattern: Standard Names. (line 442) 55165* 'ssnegM2' instruction pattern: Standard Names. (line 872) 55166* 'sssubM3' instruction pattern: Standard Names. (line 442) 55167* ss_abs: Arithmetic. (line 200) 55168* ss_ashift: Arithmetic. (line 173) 55169* ss_div: Arithmetic. (line 116) 55170* ss_minus: Arithmetic. (line 38) 55171* ss_mult: Arithmetic. (line 93) 55172* ss_neg: Arithmetic. (line 82) 55173* ss_plus: Arithmetic. (line 14) 55174* ss_truncate: Conversions. (line 43) 55175* stack arguments: Stack Arguments. (line 6) 55176* stack frame layout: Frame Layout. (line 6) 55177* stack smashing protection: Stack Smashing Protection. 55178 (line 6) 55179* STACK_ALIGNMENT_NEEDED: Frame Layout. (line 41) 55180* STACK_BOUNDARY: Storage Layout. (line 156) 55181* STACK_CHECK_BUILTIN: Stack Checking. (line 31) 55182* STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 83) 55183* STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 74) 55184* STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 90) 55185* STACK_CHECK_MOVING_SP: Stack Checking. (line 53) 55186* STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 45) 55187* STACK_CHECK_PROTECT: Stack Checking. (line 62) 55188* STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 38) 55189* STACK_DYNAMIC_OFFSET: Frame Layout. (line 67) 55190* 'STACK_DYNAMIC_OFFSET' and virtual registers: Regs and Memory. 55191 (line 83) 55192* STACK_GROWS_DOWNWARD: Frame Layout. (line 8) 55193* STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 89) 55194* STACK_POINTER_OFFSET: Frame Layout. (line 51) 55195* 'STACK_POINTER_OFFSET' and virtual registers: Regs and Memory. 55196 (line 93) 55197* STACK_POINTER_REGNUM: Frame Registers. (line 8) 55198* 'STACK_POINTER_REGNUM' and virtual registers: Regs and Memory. 55199 (line 83) 55200* stack_pointer_rtx: Frame Registers. (line 104) 55201* 'stack_protect_combined_set' instruction pattern: Standard Names. 55202 (line 2487) 55203* 'stack_protect_combined_test' instruction pattern: Standard Names. 55204 (line 2517) 55205* 'stack_protect_set' instruction pattern: Standard Names. (line 2503) 55206* 'stack_protect_test' instruction pattern: Standard Names. (line 2534) 55207* STACK_PUSH_CODE: Frame Layout. (line 12) 55208* STACK_REGS: Stack Registers. (line 19) 55209* STACK_REG_COVER_CLASS: Stack Registers. (line 22) 55210* STACK_SAVEAREA_MODE: Storage Layout. (line 473) 55211* STACK_SIZE_MODE: Storage Layout. (line 484) 55212* STACK_SLOT_ALIGNMENT: Storage Layout. (line 305) 55213* standard pattern names: Standard Names. (line 6) 55214* STANDARD_STARTFILE_PREFIX: Driver. (line 278) 55215* STANDARD_STARTFILE_PREFIX_1: Driver. (line 285) 55216* STANDARD_STARTFILE_PREFIX_2: Driver. (line 292) 55217* STARTFILE_SPEC: Driver. (line 147) 55218* Statement and operand traversals: Statement and operand traversals. 55219 (line 6) 55220* Statement Sequences: Statement Sequences. 55221 (line 6) 55222* Statements: Statements. (line 6) 55223* statements: Function Properties. 55224 (line 6) 55225* statements <1>: Statements for C++. (line 6) 55226* static analysis: Static Analyzer. (line 6) 55227* static analyzer: Static Analyzer. (line 6) 55228* static analyzer, debugging: Debugging the Analyzer. 55229 (line 5) 55230* static analyzer, internals: Analyzer Internals. (line 5) 55231* Static profile estimation: Profile information. 55232 (line 24) 55233* static single assignment: SSA. (line 6) 55234* STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 77) 55235* STATIC_CHAIN_REGNUM: Frame Registers. (line 76) 55236* 'stdarg.h' and register arguments: Register Arguments. (line 44) 55237* STDC_0_IN_SYSTEM_HEADERS: Misc. (line 384) 55238* STMT_EXPR: Unary and Binary Expressions. 55239 (line 6) 55240* STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 55241* storage layout: Storage Layout. (line 6) 55242* STORE_FLAG_VALUE: Misc. (line 235) 55243* STORE_MAX_PIECES: Costs. (line 215) 55244* 'store_multiple' instruction pattern: Standard Names. (line 159) 55245* strcpy: Storage Layout. (line 258) 55246* STRICT_ALIGNMENT: Storage Layout. (line 355) 55247* strict_low_part: RTL Declarations. (line 9) 55248* strict_memory_address_p: Addressing Modes. (line 186) 55249* STRING_CST: Constant expressions. 55250 (line 6) 55251* STRING_POOL_ADDRESS_P: Flags. (line 179) 55252* 'strlenM' instruction pattern: Standard Names. (line 1399) 55253* structure value address: Aggregate Return. (line 6) 55254* structures, returning: Interface. (line 10) 55255* STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 347) 55256* 'subM3' instruction pattern: Standard Names. (line 442) 55257* SUBOBJECT: Statements for C++. (line 6) 55258* SUBOBJECT_CLEANUP: Statements for C++. (line 6) 55259* subreg: Regs and Memory. (line 97) 55260* 'subreg' and '/s': Flags. (line 201) 55261* 'subreg' and '/u': Flags. (line 194) 55262* 'subreg' and '/u' and '/v': Flags. (line 184) 55263* 'subreg', in 'strict_low_part': RTL Declarations. (line 9) 55264* SUBREG_BYTE: Regs and Memory. (line 311) 55265* SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 184) 55266* SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 194) 55267* SUBREG_PROMOTED_VAR_P: Flags. (line 201) 55268* SUBREG_REG: Regs and Memory. (line 311) 55269* subst iterators in '.md' files: Subst Iterators. (line 6) 55270* 'subvM4' instruction pattern: Standard Names. (line 458) 55271* SUCCESS_EXIT_CODE: Host Misc. (line 12) 55272* support for nested functions: Trampolines. (line 6) 55273* SUPPORTS_INIT_PRIORITY: Macros for Initialization. 55274 (line 57) 55275* SUPPORTS_ONE_ONLY: Label Output. (line 290) 55276* SUPPORTS_WEAK: Label Output. (line 264) 55277* SWITCHABLE_TARGET: Run-time Target. (line 160) 55278* SWITCH_BODY: Statements for C++. (line 6) 55279* SWITCH_COND: Statements for C++. (line 6) 55280* SWITCH_STMT: Statements for C++. (line 6) 55281* symbolic label: Sharing. (line 20) 55282* SYMBOL_FLAG_ANCHOR: Special Accessors. (line 117) 55283* SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 99) 55284* SYMBOL_FLAG_FUNCTION: Special Accessors. (line 92) 55285* SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 113) 55286* SYMBOL_FLAG_LOCAL: Special Accessors. (line 95) 55287* SYMBOL_FLAG_SMALL: Special Accessors. (line 104) 55288* SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 108) 55289* symbol_ref: Constants. (line 189) 55290* 'symbol_ref' and '/f': Flags. (line 179) 55291* 'symbol_ref' and '/i': Flags. (line 216) 55292* 'symbol_ref' and '/u': Flags. (line 19) 55293* 'symbol_ref' and '/v': Flags. (line 220) 55294* 'symbol_ref', RTL sharing: Sharing. (line 20) 55295* SYMBOL_REF_ANCHOR_P: Special Accessors. (line 117) 55296* SYMBOL_REF_BLOCK: Special Accessors. (line 130) 55297* SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 135) 55298* SYMBOL_REF_CONSTANT: Special Accessors. (line 78) 55299* SYMBOL_REF_DATA: Special Accessors. (line 82) 55300* SYMBOL_REF_DECL: Special Accessors. (line 67) 55301* SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 99) 55302* SYMBOL_REF_FLAG: Flags. (line 220) 55303* 'SYMBOL_REF_FLAG', in 'TARGET_ENCODE_SECTION_INFO': Sections. 55304 (line 289) 55305* SYMBOL_REF_FLAGS: Special Accessors. (line 86) 55306* SYMBOL_REF_FUNCTION_P: Special Accessors. (line 92) 55307* SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 113) 55308* SYMBOL_REF_LOCAL_P: Special Accessors. (line 95) 55309* SYMBOL_REF_SMALL_P: Special Accessors. (line 104) 55310* SYMBOL_REF_TLS_MODEL: Special Accessors. (line 108) 55311* SYMBOL_REF_USED: Flags. (line 211) 55312* SYMBOL_REF_WEAK: Flags. (line 216) 55313* 'sync_addMODE' instruction pattern: Standard Names. (line 2232) 55314* 'sync_andMODE' instruction pattern: Standard Names. (line 2232) 55315* 'sync_compare_and_swapMODE' instruction pattern: Standard Names. 55316 (line 2192) 55317* 'sync_iorMODE' instruction pattern: Standard Names. (line 2232) 55318* 'sync_lock_releaseMODE' instruction pattern: Standard Names. 55319 (line 2297) 55320* 'sync_lock_test_and_setMODE' instruction pattern: Standard Names. 55321 (line 2271) 55322* 'sync_nandMODE' instruction pattern: Standard Names. (line 2232) 55323* 'sync_new_addMODE' instruction pattern: Standard Names. (line 2264) 55324* 'sync_new_andMODE' instruction pattern: Standard Names. (line 2264) 55325* 'sync_new_iorMODE' instruction pattern: Standard Names. (line 2264) 55326* 'sync_new_nandMODE' instruction pattern: Standard Names. (line 2264) 55327* 'sync_new_subMODE' instruction pattern: Standard Names. (line 2264) 55328* 'sync_new_xorMODE' instruction pattern: Standard Names. (line 2264) 55329* 'sync_old_addMODE' instruction pattern: Standard Names. (line 2247) 55330* 'sync_old_andMODE' instruction pattern: Standard Names. (line 2247) 55331* 'sync_old_iorMODE' instruction pattern: Standard Names. (line 2247) 55332* 'sync_old_nandMODE' instruction pattern: Standard Names. (line 2247) 55333* 'sync_old_subMODE' instruction pattern: Standard Names. (line 2247) 55334* 'sync_old_xorMODE' instruction pattern: Standard Names. (line 2247) 55335* 'sync_subMODE' instruction pattern: Standard Names. (line 2232) 55336* 'sync_xorMODE' instruction pattern: Standard Names. (line 2232) 55337* SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 176) 55338* SYSROOT_SUFFIX_SPEC: Driver. (line 171) 55339* SYSTEM_IMPLICIT_EXTERN_C: Misc. (line 415) 55340* 't-TARGET': Target Fragment. (line 6) 55341* table jump: Basic Blocks. (line 67) 55342* 'tablejump' instruction pattern: Standard Names. (line 1850) 55343* tag: GTY Options. (line 90) 55344* tagging insns: Tagging Insns. (line 6) 55345* tail calls: Tail Calls. (line 6) 55346* TAmode: Machine Modes. (line 158) 55347* 'tanM2' instruction pattern: Standard Names. (line 954) 55348* target attributes: Target Attributes. (line 6) 55349* target description macros: Target Macros. (line 6) 55350* target functions: Target Structure. (line 6) 55351* target hooks: Target Structure. (line 6) 55352* target makefile fragment: Target Fragment. (line 6) 55353* target specifications: Run-time Target. (line 6) 55354* targetm: Target Structure. (line 6) 55355* targets, makefile: Makefile. (line 6) 55356* TARGET_ABSOLUTE_BIGGEST_ALIGNMENT: Storage Layout. (line 185) 55357* TARGET_ADDITIONAL_ALLOCNO_CLASS_P: Register Classes. (line 639) 55358* TARGET_ADDRESS_COST: Costs. (line 344) 55359* TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 55360 (line 42) 55361* TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 55362 (line 89) 55363* TARGET_ADDR_SPACE_DEBUG: Named Address Spaces. 55364 (line 99) 55365* TARGET_ADDR_SPACE_DIAGNOSE_USAGE: Named Address Spaces. 55366 (line 103) 55367* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 55368 (line 59) 55369* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 55370 (line 67) 55371* TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 55372 (line 36) 55373* TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 55374 (line 74) 55375* TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 55376 (line 48) 55377* TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID: Named Address Spaces. 55378 (line 83) 55379* TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 432) 55380* TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 807) 55381* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 1064) 55382* TARGET_ALWAYS_STRIP_DOTDOT: Driver. (line 250) 55383* TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 92) 55384* TARGET_ARM_EABI_UNWINDER: Exception Region Output. 55385 (line 133) 55386* TARGET_ARRAY_MODE: Register Arguments. (line 373) 55387* TARGET_ARRAY_MODE_SUPPORTED_P: Register Arguments. (line 388) 55388* TARGET_ASAN_SHADOW_OFFSET: Misc. (line 1092) 55389* TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 11) 55390* TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 7) 55391* TARGET_ASM_ALIGNED_PDI_OP: Data Output. (line 10) 55392* TARGET_ASM_ALIGNED_PSI_OP: Data Output. (line 8) 55393* TARGET_ASM_ALIGNED_PTI_OP: Data Output. (line 12) 55394* TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 9) 55395* TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 13) 55396* TARGET_ASM_ASSEMBLE_UNDEFINED_DECL: Label Output. (line 231) 55397* TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 301) 55398* TARGET_ASM_BYTE_OP: Data Output. (line 6) 55399* TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 209) 55400* TARGET_ASM_CLOSE_PAREN: Data Output. (line 139) 55401* TARGET_ASM_CODE_END: File Framework. (line 57) 55402* TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 55403 (line 68) 55404* TARGET_ASM_DECLARE_CONSTANT_NAME: Label Output. (line 177) 55405* TARGET_ASM_DECL_END: Data Output. (line 44) 55406* TARGET_ASM_DESTRUCTOR: Macros for Initialization. 55407 (line 82) 55408* TARGET_ASM_ELF_FLAGS_NUMERIC: File Framework. (line 120) 55409* TARGET_ASM_EMIT_EXCEPT_PERSONALITY: Dispatch Tables. (line 89) 55410* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 82) 55411* TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 70) 55412* TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 337) 55413* TARGET_ASM_FILE_END: File Framework. (line 35) 55414* TARGET_ASM_FILE_START: File Framework. (line 8) 55415* TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 16) 55416* TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 29) 55417* TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 82) 55418* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 67) 55419* TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 61) 55420* TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 73) 55421* TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 18) 55422* TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 225) 55423* TARGET_ASM_FUNCTION_SECTION: File Framework. (line 132) 55424* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework. 55425 (line 142) 55426* TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC: Sections. (line 184) 55427* TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 222) 55428* TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 213) 55429* TARGET_ASM_INIT_SECTIONS: Sections. (line 164) 55430* TARGET_ASM_INTEGER: Data Output. (line 31) 55431* TARGET_ASM_INTERNAL_LABEL: Label Output. (line 380) 55432* TARGET_ASM_LTO_END: File Framework. (line 52) 55433* TARGET_ASM_LTO_START: File Framework. (line 47) 55434* TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 343) 55435* TARGET_ASM_MERGEABLE_RODATA_PREFIX: Sections. (line 233) 55436* TARGET_ASM_NAMED_SECTION: File Framework. (line 112) 55437* TARGET_ASM_OPEN_PAREN: Data Output. (line 138) 55438* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 48) 55439* TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 42) 55440* TARGET_ASM_OUTPUT_DWARF_DTPREL: DWARF. (line 121) 55441* TARGET_ASM_OUTPUT_IDENT: File Framework. (line 99) 55442* TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 167) 55443* TARGET_ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 91) 55444* TARGET_ASM_POST_CFI_STARTPROC: Dispatch Tables. (line 61) 55445* TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY: Function Entry. (line 9) 55446* TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 173) 55447* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 218) 55448* TARGET_ASM_RELOC_RW_MASK: Sections. (line 173) 55449* TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 242) 55450* TARGET_ASM_SELECT_SECTION: Sections. (line 191) 55451* TARGET_ASM_SHOULD_RESTORE_CFA_STATE: Dispatch Tables. (line 107) 55452* TARGET_ASM_TM_CLONE_TABLE_SECTION: Sections. (line 238) 55453* TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 81) 55454* TARGET_ASM_TTYPE: Exception Region Output. 55455 (line 127) 55456* TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 18) 55457* TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 14) 55458* TARGET_ASM_UNALIGNED_PDI_OP: Data Output. (line 17) 55459* TARGET_ASM_UNALIGNED_PSI_OP: Data Output. (line 15) 55460* TARGET_ASM_UNALIGNED_PTI_OP: Data Output. (line 19) 55461* TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 16) 55462* TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 20) 55463* TARGET_ASM_UNIQUE_SECTION: Sections. (line 213) 55464* TARGET_ASM_UNWIND_EMIT: Dispatch Tables. (line 96) 55465* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN: Dispatch Tables. (line 102) 55466* TARGET_ATOMIC_ALIGN_FOR_MODE: Misc. (line 1111) 55467* TARGET_ATOMIC_ASSIGN_EXPAND_FENV: Misc. (line 1117) 55468* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL: Misc. (line 1102) 55469* TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 10) 55470* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P: Target Attributes. (line 17) 55471* TARGET_BINDS_LOCAL_P: Sections. (line 320) 55472* TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 281) 55473* TARGET_BUILTIN_DECL: Misc. (line 637) 55474* TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 261) 55475* TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 101) 55476* TARGET_CALLEE_COPIES: Register Arguments. (line 124) 55477* TARGET_CALL_ARGS: Varargs. (line 123) 55478* TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks. 55479 (line 6) 55480* TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 234) 55481* TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 871) 55482* TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P: Register Classes. (line 610) 55483* TARGET_CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 55484 (line 55) 55485* TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 302) 55486* TARGET_CAN_CHANGE_MODE_CLASS: Register Classes. (line 543) 55487* 'TARGET_CAN_CHANGE_MODE_CLASS' and subreg semantics: Regs and Memory. 55488 (line 294) 55489* TARGET_CAN_ELIMINATE: Elimination. (line 58) 55490* TARGET_CAN_FOLLOW_JUMP: Misc. (line 793) 55491* TARGET_CAN_INLINE_P: Target Attributes. (line 173) 55492* TARGET_CAN_USE_DOLOOP_P: Misc. (line 757) 55493* TARGET_CASE_VALUES_THRESHOLD: Misc. (line 46) 55494* TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 55495 (line 120) 55496* TARGET_CHECK_BUILTIN_CALL: Misc. (line 669) 55497* TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 26) 55498* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target. (line 119) 55499* TARGET_CLASS_LIKELY_SPILLED_P: Register Classes. (line 499) 55500* TARGET_CLASS_MAX_NREGS: Register Classes. (line 515) 55501* TARGET_COMMUTATIVE_P: Misc. (line 800) 55502* TARGET_COMPARE_BY_PIECES_BRANCH_RATIO: Costs. (line 200) 55503* TARGET_COMPARE_VERSION_PRIORITY: Misc. (line 701) 55504* TARGET_COMPATIBLE_VECTOR_TYPES_P: Register Arguments. (line 350) 55505* TARGET_COMPUTE_FRAME_LAYOUT: Elimination. (line 74) 55506* TARGET_COMPUTE_PRESSURE_CLASSES: Register Classes. (line 655) 55507* TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 25) 55508* TARGET_CONDITIONAL_REGISTER_USAGE: Register Basics. (line 102) 55509* TARGET_CONSTANT_ALIGNMENT: Storage Layout. (line 271) 55510* TARGET_CONST_ANCHOR: Misc. (line 1075) 55511* TARGET_CONST_NOT_OK_FOR_DEBUG_P: Addressing Modes. (line 230) 55512* TARGET_CONVERT_TO_TYPE: Misc. (line 1022) 55513* TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 8) 55514* TARGET_CSTORE_MODE: Register Classes. (line 647) 55515* TARGET_CUSTOM_FUNCTION_DESCRIPTORS: Trampolines. (line 39) 55516* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 86) 55517* TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 37) 55518* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 61) 55519* TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 24) 55520* TARGET_CXX_DECL_MANGLING_CONTEXT: C++ ABI. (line 92) 55521* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 52) 55522* TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 17) 55523* TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 11) 55524* TARGET_CXX_GUARD_TYPE: C++ ABI. (line 6) 55525* TARGET_CXX_IMPLICIT_EXTERN_C: Misc. (line 407) 55526* TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 28) 55527* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 42) 55528* TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 68) 55529* TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 73) 55530* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 79) 55531* TARGET_C_EXCESS_PRECISION: Storage Layout. (line 109) 55532* TARGET_C_PREINCLUDE: Misc. (line 395) 55533* TARGET_DEBUG_UNWIND_INFO: DWARF. (line 32) 55534* TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 537) 55535* TARGET_DECLSPEC: Target Attributes. (line 72) 55536* TARGET_DEFAULT_PACK_STRUCT: Misc. (line 479) 55537* TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 123) 55538* TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 55) 55539* TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 465) 55540* TARGET_DELAY_SCHED2: DWARF. (line 77) 55541* TARGET_DELAY_VARTRACK: DWARF. (line 81) 55542* TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 221) 55543* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P: Register Classes. (line 603) 55544* TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 55) 55545* TARGET_DOLOOP_COST_FOR_ADDRESS: Misc. (line 746) 55546* TARGET_DOLOOP_COST_FOR_GENERIC: Misc. (line 735) 55547* TARGET_DWARF_CALLING_CONVENTION: DWARF. (line 12) 55548* TARGET_DWARF_FRAME_REG_MODE: Exception Region Output. 55549 (line 113) 55550* TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 165) 55551* TARGET_DWARF_POLY_INDETERMINATE_VALUE: Frame Layout. (line 177) 55552* TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 55553 (line 104) 55554* TARGET_D_CPU_VERSIONS: D Language and ABI. (line 6) 55555* TARGET_D_CRITSEC_SIZE: D Language and ABI. (line 17) 55556* TARGET_D_OS_VERSIONS: D Language and ABI. (line 13) 55557* TARGET_EDOM: Library Calls. (line 59) 55558* TARGET_EMPTY_RECORD_P: Aggregate Return. (line 86) 55559* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 67) 55560* TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 18) 55561* TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 23) 55562* TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 44) 55563* TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 35) 55564* TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 62) 55565* TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 48) 55566* TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 55) 55567* TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 40) 55568* TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 30) 55569* TARGET_ENCODE_SECTION_INFO: Sections. (line 263) 55570* 'TARGET_ENCODE_SECTION_INFO' and address validation: Addressing Modes. 55571 (line 82) 55572* 'TARGET_ENCODE_SECTION_INFO' usage: Instruction Output. (line 127) 55573* TARGET_END_CALL_ARGS: Varargs. (line 137) 55574* TARGET_ENUM_VA_LIST_P: Register Arguments. (line 285) 55575* TARGET_ESTIMATED_POLY_VALUE: Costs. (line 425) 55576* TARGET_EXCEPT_UNWIND_INFO: Exception Region Output. 55577 (line 46) 55578* TARGET_EXECUTABLE_SUFFIX: Misc. (line 858) 55579* TARGET_EXPAND_BUILTIN: Misc. (line 647) 55580* TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 64) 55581* TARGET_EXPAND_DIVMOD_LIBFUNC: Scheduling. (line 461) 55582* TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 543) 55583* TARGET_EXPR: Unary and Binary Expressions. 55584 (line 6) 55585* TARGET_EXTRA_INCLUDES: Misc. (line 937) 55586* TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 20) 55587* TARGET_EXTRA_PRE_INCLUDES: Misc. (line 944) 55588* TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 55589 (line 105) 55590* TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 540) 55591* target_flags: Run-time Target. (line 51) 55592* TARGET_FLAGS_REGNUM: MODE_CC Condition Codes. 55593 (line 133) 55594* TARGET_FLOATN_BUILTIN_P: Register Arguments. (line 438) 55595* TARGET_FLOATN_MODE: Register Arguments. (line 420) 55596* TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target. 55597 (line 179) 55598* TARGET_FNTYPE_ABI: Register Basics. (line 58) 55599* TARGET_FN_ABI_VA_LIST: Register Arguments. (line 297) 55600* TARGET_FOLD_BUILTIN: Misc. (line 684) 55601* TARGET_FORMAT_TYPES: Misc. (line 965) 55602* TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 8) 55603* TARGET_FUNCTION_ARG: Register Arguments. (line 10) 55604* TARGET_FUNCTION_ARG_ADVANCE: Register Arguments. (line 195) 55605* TARGET_FUNCTION_ARG_BOUNDARY: Register Arguments. (line 248) 55606* TARGET_FUNCTION_ARG_OFFSET: Register Arguments. (line 206) 55607* TARGET_FUNCTION_ARG_PADDING: Register Arguments. (line 214) 55608* TARGET_FUNCTION_ARG_ROUND_BOUNDARY: Register Arguments. (line 254) 55609* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 101) 55610* TARGET_FUNCTION_INCOMING_ARG: Register Arguments. (line 64) 55611* TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 6) 55612* TARGET_FUNCTION_VALUE: Scalar Return. (line 9) 55613* TARGET_FUNCTION_VALUE_REGNO_P: Scalar Return. (line 96) 55614* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc. (line 717) 55615* TARGET_GEN_CCMP_FIRST: Misc. (line 890) 55616* TARGET_GEN_CCMP_NEXT: Misc. (line 901) 55617* TARGET_GET_DRAP_RTX: Misc. (line 1058) 55618* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc. (line 710) 55619* TARGET_GET_MULTILIB_ABI_NAME: Register Basics. (line 99) 55620* TARGET_GET_PCH_VALIDITY: PCH Target. (line 6) 55621* TARGET_GET_RAW_ARG_MODE: Aggregate Return. (line 81) 55622* TARGET_GET_RAW_RESULT_MODE: Aggregate Return. (line 76) 55623* TARGET_GET_VALID_OPTION_VALUES: Stack Smashing Protection. 55624 (line 39) 55625* TARGET_GIMPLE_FOLD_BUILTIN: Misc. (line 694) 55626* TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 307) 55627* TARGET_GOACC_DIM_LIMIT: Addressing Modes. (line 540) 55628* TARGET_GOACC_FORK_JOIN: Addressing Modes. (line 544) 55629* TARGET_GOACC_REDUCTION: Addressing Modes. (line 555) 55630* TARGET_GOACC_VALIDATE_DIMS: Addressing Modes. (line 527) 55631* TARGET_HANDLE_C_OPTION: Run-time Target. (line 73) 55632* TARGET_HANDLE_GENERIC_ATTRIBUTE: Target Attributes. (line 93) 55633* TARGET_HANDLE_OPTION: Run-time Target. (line 59) 55634* TARGET_HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 76) 55635* TARGET_HARD_REGNO_MODE_OK: Values in Registers. 55636 (line 54) 55637* TARGET_HARD_REGNO_NREGS: Values in Registers. 55638 (line 10) 55639* TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 55640 (line 139) 55641* TARGET_HAS_IFUNC_P: Misc. (line 1106) 55642* TARGET_HAS_NO_HW_DIVIDE: Library Calls. (line 52) 55643* TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 884) 55644* TARGET_HAVE_COUNT_REG_DECR_P: Misc. (line 731) 55645* TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 55646 (line 63) 55647* TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 150) 55648* TARGET_HAVE_SPECULATION_SAFE_VALUE: Misc. (line 1189) 55649* TARGET_HAVE_SRODATA_SECTION: Sections. (line 309) 55650* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 155) 55651* TARGET_HAVE_TLS: Sections. (line 329) 55652* TARGET_INIT_BUILTINS: Misc. (line 621) 55653* TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 55654 (line 119) 55655* TARGET_INIT_LIBFUNCS: Library Calls. (line 15) 55656* TARGET_INIT_PIC_REG: Register Arguments. (line 88) 55657* TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 80) 55658* TARGET_INSN_CALLEE_ABI: Register Basics. (line 65) 55659* TARGET_INSN_COST: Costs. (line 380) 55660* TARGET_INSTANTIATE_DECLS: Storage Layout. (line 551) 55661* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 989) 55662* TARGET_INVALID_BINARY_OP: Misc. (line 1008) 55663* TARGET_INVALID_CONVERSION: Misc. (line 995) 55664* TARGET_INVALID_UNARY_OP: Misc. (line 1001) 55665* TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 774) 55666* TARGET_IN_SMALL_DATA_P: Sections. (line 305) 55667* TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS: Register Classes. (line 570) 55668* TARGET_KEEP_LEAF_WHEN_PROFILED: Profiling. (line 39) 55669* TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 48) 55670* TARGET_LEGITIMATE_COMBINED_INSN: Misc. (line 788) 55671* TARGET_LEGITIMATE_CONSTANT_P: Addressing Modes. (line 213) 55672* TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 129) 55673* TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes. (line 618) 55674* TARGET_LIBCALL_VALUE: Scalar Return. (line 65) 55675* TARGET_LIBC_HAS_FAST_FUNCTION: Library Calls. (line 82) 55676* TARGET_LIBC_HAS_FUNCTION: Library Calls. (line 77) 55677* TARGET_LIBFUNC_GNU_PREFIX: Library Calls. (line 24) 55678* TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 493) 55679* TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments. 55680 (line 412) 55681* TARGET_LIBGCC_SDATA_SECTION: Sections. (line 136) 55682* TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 499) 55683* TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 42) 55684* TARGET_LOAD_BOUNDS_FOR_ARG: Varargs. (line 153) 55685* TARGET_LOAD_RETURNED_BOUNDS: Varargs. (line 172) 55686* TARGET_LOOP_UNROLL_ADJUST: Misc. (line 918) 55687* TARGET_LRA_P: Register Classes. (line 577) 55688* TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 606) 55689* TARGET_MANGLE_ASSEMBLER_NAME: Label Output. (line 356) 55690* TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 253) 55691* TARGET_MANGLE_TYPE: Storage Layout. (line 555) 55692* TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 38) 55693* TARGET_MAX_NOCE_IFCVT_SEQ_COST: Costs. (line 390) 55694* TARGET_MD_ASM_ADJUST: Misc. (line 524) 55695* TARGET_MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 445) 55696* TARGET_MEMMODEL_CHECK: Misc. (line 1097) 55697* TARGET_MEMORY_MOVE_COST: Costs. (line 79) 55698* TARGET_MEM_CONSTRAINT: Addressing Modes. (line 107) 55699* TARGET_MEM_REF: Storage References. (line 6) 55700* TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 45) 55701* TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 37) 55702* TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 32) 55703* TARGET_MIN_ARITHMETIC_PRECISION: Misc. (line 63) 55704* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 112) 55705* TARGET_MODES_TIEABLE_P: Values in Registers. 55706 (line 123) 55707* TARGET_MODE_AFTER: Mode Switching. (line 57) 55708* TARGET_MODE_DEPENDENT_ADDRESS_P: Addressing Modes. (line 196) 55709* TARGET_MODE_EMIT: Mode Switching. (line 42) 55710* TARGET_MODE_ENTRY: Mode Switching. (line 64) 55711* TARGET_MODE_EXIT: Mode Switching. (line 71) 55712* TARGET_MODE_NEEDED: Mode Switching. (line 50) 55713* TARGET_MODE_PRIORITY: Mode Switching. (line 78) 55714* TARGET_MODE_REP_EXTENDED: Misc. (line 197) 55715* TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 509) 55716* TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 57) 55717* 'TARGET_MUST_PASS_IN_STACK', and 'TARGET_FUNCTION_ARG': Register Arguments. 55718 (line 49) 55719* TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 438) 55720* TARGET_NOCE_CONVERSION_PROFITABLE_P: Costs. (line 409) 55721* TARGET_NO_REGISTER_ALLOCATION: DWARF. (line 85) 55722* TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs. (line 415) 55723* TARGET_N_FORMAT_TYPES: Misc. (line 970) 55724* TARGET_OBJC_CONSTRUCT_STRING_OBJECT: Run-time Target. (line 88) 55725* TARGET_OBJC_DECLARE_CLASS_DEFINITION: Run-time Target. (line 109) 55726* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target. 55727 (line 104) 55728* TARGET_OBJECT_SUFFIX: Misc. (line 853) 55729* TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 45) 55730* TARGET_OFFLOAD_OPTIONS: Misc. (line 1140) 55731* TARGET_OMIT_STRUCT_RETURN_REG: Scalar Return. (line 117) 55732* TARGET_OMP_DEVICE_KIND_ARCH_ISA: Addressing Modes. (line 519) 55733* TARGET_OPTAB_SUPPORTED_P: Costs. (line 299) 55734* TARGET_OPTF: Misc. (line 952) 55735* TARGET_OPTION_FUNCTION_VERSIONS: Target Attributes. (line 165) 55736* TARGET_OPTION_INIT_STRUCT: Run-time Target. (line 156) 55737* TARGET_OPTION_OPTIMIZATION_TABLE: Run-time Target. (line 142) 55738* TARGET_OPTION_OVERRIDE: Target Attributes. (line 152) 55739* TARGET_OPTION_POST_STREAM_IN: Target Attributes. (line 133) 55740* TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 145) 55741* TARGET_OPTION_PRINT: Target Attributes. (line 139) 55742* TARGET_OPTION_RESTORE: Target Attributes. (line 127) 55743* TARGET_OPTION_SAVE: Target Attributes. (line 120) 55744* TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 108) 55745* TARGET_OS_CPP_BUILTINS: Run-time Target. (line 41) 55746* TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 974) 55747* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 980) 55748* TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 984) 55749* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 126) 55750* TARGET_PASS_BY_REFERENCE: Register Arguments. (line 112) 55751* TARGET_PCH_VALID_P: PCH Target. (line 11) 55752* TARGET_POSIX_IO: Misc. (line 550) 55753* TARGET_PREDICT_DOLOOP_P: Misc. (line 724) 55754* TARGET_PREFERRED_ELSE_VALUE: Addressing Modes. (line 563) 55755* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 284) 55756* TARGET_PREFERRED_RELOAD_CLASS: Register Classes. (line 213) 55757* TARGET_PREFERRED_RENAME_CLASS: Register Classes. (line 201) 55758* TARGET_PREPARE_PCH_SAVE: PCH Target. (line 34) 55759* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 144) 55760* TARGET_PROFILE_BEFORE_PROLOGUE: Sections. (line 313) 55761* TARGET_PROMOTED_TYPE: Misc. (line 1014) 55762* TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 126) 55763* TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 10) 55764* TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 250) 55765* TARGET_RECORD_OFFLOAD_SYMBOL: Misc. (line 1135) 55766* TARGET_REF_MAY_ALIAS_ERRNO: Register Arguments. (line 318) 55767* TARGET_REGISTER_MOVE_COST: Costs. (line 31) 55768* TARGET_REGISTER_PRIORITY: Register Classes. (line 582) 55769* TARGET_REGISTER_USAGE_LEVELING_P: Register Classes. (line 593) 55770* TARGET_RELAYOUT_FUNCTION: Target Attributes. (line 180) 55771* TARGET_RESET_LOCATION_VIEW: DWARF. (line 57) 55772* TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 658) 55773* TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 15) 55774* TARGET_RETURN_IN_MSB: Scalar Return. (line 124) 55775* TARGET_RETURN_POPS_ARGS: Stack Arguments. (line 98) 55776* TARGET_RTX_COSTS: Costs. (line 313) 55777* TARGET_RUN_TARGET_SELFTESTS: Misc. (line 1226) 55778* TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 334) 55779* TARGET_SCHED_ADJUST_COST: Scheduling. (line 35) 55780* TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 50) 55781* TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 294) 55782* TARGET_SCHED_CAN_SPECULATE_INSN: Scheduling. (line 354) 55783* TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 309) 55784* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 101) 55785* TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 255) 55786* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 172) 55787* TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 156) 55788* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 165) 55789* TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 144) 55790* TARGET_SCHED_DISPATCH: Scheduling. (line 370) 55791* TARGET_SCHED_DISPATCH_DO: Scheduling. (line 375) 55792* TARGET_SCHED_EXPOSED_PIPELINE: Scheduling. (line 379) 55793* TARGET_SCHED_FINISH: Scheduling. (line 122) 55794* TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 137) 55795* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling. (line 235) 55796* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling. (line 223) 55797* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 55798 (line 179) 55799* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 55800 (line 207) 55801* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling. (line 240) 55802* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling. (line 250) 55803* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling. (line 245) 55804* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling. (line 229) 55805* TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 313) 55806* TARGET_SCHED_FUSION_PRIORITY: Scheduling. (line 389) 55807* TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 335) 55808* TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 289) 55809* TARGET_SCHED_INIT: Scheduling. (line 111) 55810* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 161) 55811* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 153) 55812* TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 129) 55813* TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 298) 55814* TARGET_SCHED_ISSUE_RATE: Scheduling. (line 11) 55815* TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 267) 55816* TARGET_SCHED_MACRO_FUSION_P: Scheduling. (line 87) 55817* TARGET_SCHED_MACRO_FUSION_PAIR_P: Scheduling. (line 91) 55818* TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 328) 55819* TARGET_SCHED_REASSOCIATION_WIDTH: Scheduling. (line 384) 55820* TARGET_SCHED_REORDER: Scheduling. (line 58) 55821* TARGET_SCHED_REORDER2: Scheduling. (line 75) 55822* TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 305) 55823* TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 347) 55824* TARGET_SCHED_SMS_RES_MII: Scheduling. (line 361) 55825* TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 316) 55826* TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 22) 55827* TARGET_SECONDARY_MEMORY_NEEDED: Register Classes. (line 447) 55828* TARGET_SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 466) 55829* TARGET_SECONDARY_RELOAD: Register Classes. (line 312) 55830* TARGET_SECTION_TYPE_FLAGS: File Framework. (line 160) 55831* TARGET_SELECT_EARLY_REMAT_MODES: Register Classes. (line 488) 55832* TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P: Misc. (line 223) 55833* TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 71) 55834* TARGET_SET_CURRENT_FUNCTION: Misc. (line 835) 55835* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 33) 55836* TARGET_SET_UP_BY_PROLOGUE: Tail Calls. (line 29) 55837* TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 160) 55838* TARGET_SHRINK_WRAP_COMPONENTS_FOR_BB: Shrink-wrapping separate components. 55839 (line 36) 55840* TARGET_SHRINK_WRAP_DISQUALIFY_COMPONENTS: Shrink-wrapping separate components. 55841 (line 43) 55842* TARGET_SHRINK_WRAP_EMIT_EPILOGUE_COMPONENTS: Shrink-wrapping separate components. 55843 (line 54) 55844* TARGET_SHRINK_WRAP_EMIT_PROLOGUE_COMPONENTS: Shrink-wrapping separate components. 55845 (line 50) 55846* TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS: Shrink-wrapping separate components. 55847 (line 27) 55848* TARGET_SHRINK_WRAP_SET_HANDLED_COMPONENTS: Shrink-wrapping separate components. 55849 (line 58) 55850* TARGET_SIMD_CLONE_ADJUST: Addressing Modes. (line 506) 55851* TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN: Addressing Modes. 55852 (line 498) 55853* TARGET_SIMD_CLONE_USABLE: Addressing Modes. (line 510) 55854* TARGET_SIMT_VF: Addressing Modes. (line 516) 55855* TARGET_SLOW_UNALIGNED_ACCESS: Costs. (line 132) 55856* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments. 55857 (line 448) 55858* TARGET_SPECULATION_SAFE_VALUE: Misc. (line 1208) 55859* TARGET_SPILL_CLASS: Register Classes. (line 632) 55860* TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 269) 55861* TARGET_STACK_CLASH_PROTECTION_ALLOCA_PROBE_RANGE: Stack Checking. 55862 (line 97) 55863* TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 55864 (line 16) 55865* TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 55866 (line 6) 55867* TARGET_STACK_PROTECT_RUNTIME_ENABLED_P: Stack Smashing Protection. 55868 (line 25) 55869* TARGET_STARTING_FRAME_OFFSET: Frame Layout. (line 34) 55870* 'TARGET_STARTING_FRAME_OFFSET' and virtual registers: Regs and Memory. 55871 (line 74) 55872* TARGET_STATIC_CHAIN: Frame Registers. (line 90) 55873* TARGET_STATIC_RTX_ALIGNMENT: Storage Layout. (line 243) 55874* TARGET_STORE_BOUNDS_FOR_ARG: Varargs. (line 163) 55875* TARGET_STORE_RETURNED_BOUNDS: Varargs. (line 177) 55876* TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 107) 55877* TARGET_STRING_OBJECT_REF_TYPE_P: Run-time Target. (line 114) 55878* TARGET_STRIP_NAME_ENCODING: Sections. (line 300) 55879* TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 44) 55880* TARGET_SUPPORTS_SPLIT_STACK: Stack Smashing Protection. 55881 (line 30) 55882* TARGET_SUPPORTS_WEAK: Label Output. (line 272) 55883* TARGET_SUPPORTS_WIDE_INT: Misc. (line 1148) 55884* TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 55885 (line 98) 55886* TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 127) 55887* TARGET_TRAMPOLINE_INIT: Trampolines. (line 107) 55888* TARGET_TRANSLATE_MODE_ATTRIBUTE: Register Arguments. (line 325) 55889* TARGET_TRULY_NOOP_TRUNCATION: Misc. (line 184) 55890* TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 826) 55891* TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 55892 (line 73) 55893* TARGET_UNWIND_WORD_MODE: Storage Layout. (line 505) 55894* TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 1054) 55895* TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 123) 55896* TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 53) 55897* TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 248) 55898* TARGET_USE_BLOCKS_FOR_DECL_P: Addressing Modes. (line 255) 55899* TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs. (line 165) 55900* TARGET_USE_PSEUDO_PIC_REG: Register Arguments. (line 84) 55901* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 66) 55902* TARGET_VALID_POINTER_MODE: Register Arguments. (line 313) 55903* TARGET_VECTORIZE_ADD_STMT_COST: Addressing Modes. (line 461) 55904* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES: Addressing Modes. 55905 (line 376) 55906* TARGET_VECTORIZE_BUILTIN_GATHER: Addressing Modes. (line 484) 55907* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 266) 55908* TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION: Addressing Modes. 55909 (line 344) 55910* TARGET_VECTORIZE_BUILTIN_SCATTER: Addressing Modes. (line 491) 55911* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 55912 (line 292) 55913* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 55914 (line 336) 55915* TARGET_VECTORIZE_DESTROY_COST_DATA: Addressing Modes. (line 479) 55916* TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE: Addressing Modes. 55917 (line 445) 55918* TARGET_VECTORIZE_FINISH_COST: Addressing Modes. (line 472) 55919* TARGET_VECTORIZE_GET_MASK_MODE: Addressing Modes. (line 433) 55920* TARGET_VECTORIZE_INIT_COST: Addressing Modes. (line 452) 55921* TARGET_VECTORIZE_PREFERRED_SIMD_MODE: Addressing Modes. (line 361) 55922* TARGET_VECTORIZE_PREFERRED_VECTOR_ALIGNMENT: Addressing Modes. 55923 (line 298) 55924* TARGET_VECTORIZE_RELATED_MODE: Addressing Modes. (line 407) 55925* TARGET_VECTORIZE_SPLIT_REDUCTION: Addressing Modes. (line 368) 55926* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. 55927 (line 351) 55928* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 55929 (line 310) 55930* TARGET_VECTORIZE_VEC_PERM_CONST: Addressing Modes. (line 316) 55931* TARGET_VECTOR_ALIGNMENT: Storage Layout. (line 298) 55932* TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 345) 55933* TARGET_VERIFY_TYPE_CONTEXT: Misc. (line 1029) 55934* TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 303) 55935* TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 297) 55936* TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 286) 55937* TARGET_WANT_DEBUG_PUB_SECTIONS: DWARF. (line 72) 55938* TARGET_WARN_FUNC_RETURN: Tail Calls. (line 35) 55939* TARGET_WARN_PARAMETER_PASSING_ABI: Aggregate Return. (line 90) 55940* TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 308) 55941* TCmode: Machine Modes. (line 199) 55942* TDmode: Machine Modes. (line 97) 55943* TEMPLATE_DECL: Declarations. (line 6) 55944* Temporaries: Temporaries. (line 6) 55945* termination routines: Initialization. (line 6) 55946* testing constraints: C Constraint Interface. 55947 (line 6) 55948* TEXT_SECTION_ASM_OP: Sections. (line 37) 55949* TFmode: Machine Modes. (line 101) 55950* The Language: The Language. (line 6) 55951* THEN_CLAUSE: Statements for C++. (line 6) 55952* THREAD_MODEL_SPEC: Driver. (line 162) 55953* THROW_EXPR: Unary and Binary Expressions. 55954 (line 6) 55955* THUNK_DECL: Declarations. (line 6) 55956* THUNK_DELTA: Declarations. (line 6) 55957* TImode: Machine Modes. (line 48) 55958* 'TImode', in 'insn': Insns. (line 291) 55959* TLS_COMMON_ASM_OP: Sections. (line 80) 55960* TLS_SECTION_ASM_FLAG: Sections. (line 85) 55961* 'tm.h' macros: Target Macros. (line 6) 55962* TQFmode: Machine Modes. (line 65) 55963* TQmode: Machine Modes. (line 122) 55964* trampolines for nested functions: Trampolines. (line 6) 55965* TRAMPOLINE_ALIGNMENT: Trampolines. (line 101) 55966* TRAMPOLINE_SECTION: Trampolines. (line 92) 55967* TRAMPOLINE_SIZE: Trampolines. (line 97) 55968* TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 163) 55969* 'trap' instruction pattern: Standard Names. (line 2121) 55970* tree: Tree overview. (line 6) 55971* tree <1>: Macros and Functions. 55972 (line 6) 55973* Tree SSA: Tree SSA. (line 6) 55974* TREE_CHAIN: Macros and Functions. 55975 (line 6) 55976* TREE_CODE: Tree overview. (line 6) 55977* tree_fits_shwi_p: Constant expressions. 55978 (line 6) 55979* tree_fits_uhwi_p: Constant expressions. 55980 (line 6) 55981* TREE_INT_CST_ELT: Constant expressions. 55982 (line 6) 55983* tree_int_cst_equal: Constant expressions. 55984 (line 6) 55985* TREE_INT_CST_LOW: Constant expressions. 55986 (line 6) 55987* tree_int_cst_lt: Constant expressions. 55988 (line 6) 55989* TREE_INT_CST_NUNITS: Constant expressions. 55990 (line 6) 55991* TREE_LIST: Containers. (line 6) 55992* TREE_OPERAND: Expression trees. (line 6) 55993* TREE_PUBLIC: Function Basics. (line 6) 55994* TREE_PUBLIC <1>: Function Properties. 55995 (line 28) 55996* TREE_PURPOSE: Containers. (line 6) 55997* TREE_READONLY: Function Properties. 55998 (line 37) 55999* tree_size: Macros and Functions. 56000 (line 13) 56001* TREE_STATIC: Function Properties. 56002 (line 31) 56003* TREE_STRING_LENGTH: Constant expressions. 56004 (line 6) 56005* TREE_STRING_POINTER: Constant expressions. 56006 (line 6) 56007* TREE_THIS_VOLATILE: Function Properties. 56008 (line 34) 56009* tree_to_shwi: Constant expressions. 56010 (line 6) 56011* tree_to_uhwi: Constant expressions. 56012 (line 6) 56013* TREE_TYPE: Macros and Functions. 56014 (line 6) 56015* TREE_TYPE <1>: Types. (line 6) 56016* TREE_TYPE <2>: Working with declarations. 56017 (line 11) 56018* TREE_TYPE <3>: Expression trees. (line 6) 56019* TREE_TYPE <4>: Expression trees. (line 17) 56020* TREE_TYPE <5>: Function Basics. (line 47) 56021* TREE_TYPE <6>: Types for C++. (line 6) 56022* TREE_VALUE: Containers. (line 6) 56023* TREE_VEC: Containers. (line 6) 56024* TREE_VEC_ELT: Containers. (line 6) 56025* TREE_VEC_LENGTH: Containers. (line 6) 56026* true positive: Guidelines for Diagnostics. 56027 (line 39) 56028* truncate: Conversions. (line 38) 56029* 'truncMN2' instruction pattern: Standard Names. (line 1442) 56030* TRUNC_DIV_EXPR: Unary and Binary Expressions. 56031 (line 6) 56032* TRUNC_MOD_EXPR: Unary and Binary Expressions. 56033 (line 6) 56034* TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 56035 (line 6) 56036* TRUTH_AND_EXPR: Unary and Binary Expressions. 56037 (line 6) 56038* TRUTH_NOT_EXPR: Unary and Binary Expressions. 56039 (line 6) 56040* TRUTH_ORIF_EXPR: Unary and Binary Expressions. 56041 (line 6) 56042* TRUTH_OR_EXPR: Unary and Binary Expressions. 56043 (line 6) 56044* TRUTH_XOR_EXPR: Unary and Binary Expressions. 56045 (line 6) 56046* TRY_BLOCK: Statements for C++. (line 6) 56047* TRY_HANDLERS: Statements for C++. (line 6) 56048* TRY_STMTS: Statements for C++. (line 6) 56049* Tuple specific accessors: Tuple specific accessors. 56050 (line 6) 56051* tuples: Tuple representation. 56052 (line 6) 56053* type: Types. (line 6) 56054* type declaration: Declarations. (line 6) 56055* TYPENAME_TYPE: Types for C++. (line 6) 56056* TYPENAME_TYPE_FULLNAME: Types. (line 6) 56057* TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 56058* TYPEOF_TYPE: Types for C++. (line 6) 56059* TYPE_ALIGN: Types. (line 6) 56060* TYPE_ALIGN <1>: Types. (line 30) 56061* TYPE_ALIGN <2>: Types for C++. (line 6) 56062* TYPE_ALIGN <3>: Types for C++. (line 44) 56063* TYPE_ARG_TYPES: Types. (line 6) 56064* TYPE_ARG_TYPES <1>: Types for C++. (line 6) 56065* TYPE_ASM_OP: Label Output. (line 76) 56066* TYPE_ATTRIBUTES: Attributes. (line 24) 56067* TYPE_BINFO: Classes. (line 6) 56068* TYPE_BUILT_IN: Types for C++. (line 66) 56069* TYPE_CANONICAL: Types. (line 6) 56070* TYPE_CANONICAL <1>: Types. (line 41) 56071* TYPE_CONTEXT: Types. (line 6) 56072* TYPE_CONTEXT <1>: Types for C++. (line 6) 56073* TYPE_DECL: Declarations. (line 6) 56074* TYPE_FIELDS: Types. (line 6) 56075* TYPE_FIELDS <1>: Types for C++. (line 6) 56076* TYPE_FIELDS <2>: Classes. (line 6) 56077* TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 93) 56078* TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 78) 56079* TYPE_HAS_MUTABLE_P: Classes. (line 83) 56080* TYPE_HAS_NEW_OPERATOR: Classes. (line 90) 56081* TYPE_MAIN_VARIANT: Types. (line 6) 56082* TYPE_MAIN_VARIANT <1>: Types. (line 19) 56083* TYPE_MAIN_VARIANT <2>: Types for C++. (line 6) 56084* TYPE_MAX_VALUE: Types. (line 6) 56085* TYPE_METHOD_BASETYPE: Types. (line 6) 56086* TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 56087* TYPE_MIN_VALUE: Types. (line 6) 56088* TYPE_NAME: Types. (line 6) 56089* TYPE_NAME <1>: Types. (line 33) 56090* TYPE_NAME <2>: Types for C++. (line 6) 56091* TYPE_NAME <3>: Types for C++. (line 47) 56092* TYPE_NOTHROW_P: Functions for C++. (line 154) 56093* TYPE_OFFSET_BASETYPE: Types. (line 6) 56094* TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 56095* TYPE_OPERAND_FMT: Label Output. (line 87) 56096* TYPE_OVERLOADS_ARRAY_REF: Classes. (line 101) 56097* TYPE_OVERLOADS_ARROW: Classes. (line 104) 56098* TYPE_OVERLOADS_CALL_EXPR: Classes. (line 97) 56099* TYPE_POLYMORPHIC_P: Classes. (line 74) 56100* TYPE_PRECISION: Types. (line 6) 56101* TYPE_PRECISION <1>: Types for C++. (line 6) 56102* TYPE_PTRDATAMEM_P: Types for C++. (line 6) 56103* TYPE_PTRDATAMEM_P <1>: Types for C++. (line 69) 56104* TYPE_PTRFN_P: Types for C++. (line 76) 56105* TYPE_PTROBV_P: Types for C++. (line 6) 56106* TYPE_PTROB_P: Types for C++. (line 79) 56107* TYPE_PTR_P: Types for C++. (line 72) 56108* TYPE_QUAL_CONST: Types. (line 6) 56109* TYPE_QUAL_CONST <1>: Types for C++. (line 6) 56110* TYPE_QUAL_RESTRICT: Types. (line 6) 56111* TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 56112* TYPE_QUAL_VOLATILE: Types. (line 6) 56113* TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 56114* TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 56115* TYPE_SIZE: Types. (line 6) 56116* TYPE_SIZE <1>: Types. (line 25) 56117* TYPE_SIZE <2>: Types for C++. (line 6) 56118* TYPE_SIZE <3>: Types for C++. (line 39) 56119* TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 56120* TYPE_STRUCTURAL_EQUALITY_P <1>: Types. (line 77) 56121* TYPE_UNQUALIFIED: Types. (line 6) 56122* TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 56123* TYPE_VFIELD: Classes. (line 6) 56124* 'uaddvM4' instruction pattern: Standard Names. (line 461) 56125* 'uavgM3_ceil' instruction pattern: Standard Names. (line 860) 56126* 'uavgM3_floor' instruction pattern: Standard Names. (line 848) 56127* UDAmode: Machine Modes. (line 170) 56128* udiv: Arithmetic. (line 130) 56129* 'udivM3' instruction pattern: Standard Names. (line 442) 56130* 'udivmodM4' instruction pattern: Standard Names. (line 825) 56131* 'udot_prodM' instruction pattern: Standard Names. (line 570) 56132* UDQmode: Machine Modes. (line 138) 56133* UHAmode: Machine Modes. (line 162) 56134* UHQmode: Machine Modes. (line 130) 56135* UINT16_TYPE: Type Layout. (line 214) 56136* UINT32_TYPE: Type Layout. (line 215) 56137* UINT64_TYPE: Type Layout. (line 216) 56138* UINT8_TYPE: Type Layout. (line 213) 56139* UINTMAX_TYPE: Type Layout. (line 197) 56140* UINTPTR_TYPE: Type Layout. (line 234) 56141* UINT_FAST16_TYPE: Type Layout. (line 230) 56142* UINT_FAST32_TYPE: Type Layout. (line 231) 56143* UINT_FAST64_TYPE: Type Layout. (line 232) 56144* UINT_FAST8_TYPE: Type Layout. (line 229) 56145* UINT_LEAST16_TYPE: Type Layout. (line 222) 56146* UINT_LEAST32_TYPE: Type Layout. (line 223) 56147* UINT_LEAST64_TYPE: Type Layout. (line 224) 56148* UINT_LEAST8_TYPE: Type Layout. (line 221) 56149* 'umaddMN4' instruction pattern: Standard Names. (line 772) 56150* umax: Arithmetic. (line 149) 56151* 'umaxM3' instruction pattern: Standard Names. (line 442) 56152* umin: Arithmetic. (line 149) 56153* 'uminM3' instruction pattern: Standard Names. (line 442) 56154* umod: Arithmetic. (line 136) 56155* 'umodM3' instruction pattern: Standard Names. (line 442) 56156* 'umsubMN4' instruction pattern: Standard Names. (line 796) 56157* 'umulhisi3' instruction pattern: Standard Names. (line 744) 56158* 'umulhrsM3' instruction pattern: Standard Names. (line 605) 56159* 'umulhsM3' instruction pattern: Standard Names. (line 595) 56160* 'umulM3_highpart' instruction pattern: Standard Names. (line 758) 56161* 'umulqihi3' instruction pattern: Standard Names. (line 744) 56162* 'umulsidi3' instruction pattern: Standard Names. (line 744) 56163* 'umulvM4' instruction pattern: Standard Names. (line 466) 56164* unchanging: Flags. (line 307) 56165* 'unchanging', in 'call_insn': Flags. (line 115) 56166* 'unchanging', in 'jump_insn', 'call_insn' and 'insn': Flags. 56167 (line 28) 56168* 'unchanging', in 'mem': Flags. (line 78) 56169* 'unchanging', in 'subreg': Flags. (line 184) 56170* 'unchanging', in 'subreg' <1>: Flags. (line 194) 56171* 'unchanging', in 'symbol_ref': Flags. (line 19) 56172* UNEQ_EXPR: Unary and Binary Expressions. 56173 (line 6) 56174* UNGE_EXPR: Unary and Binary Expressions. 56175 (line 6) 56176* UNGT_EXPR: Unary and Binary Expressions. 56177 (line 6) 56178* unions, returning: Interface. (line 10) 56179* UNION_TYPE: Types. (line 6) 56180* UNION_TYPE <1>: Classes. (line 6) 56181* UNITS_PER_WORD: Storage Layout. (line 60) 56182* UNKNOWN_TYPE: Types. (line 6) 56183* UNKNOWN_TYPE <1>: Types for C++. (line 6) 56184* UNLE_EXPR: Unary and Binary Expressions. 56185 (line 6) 56186* UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 48) 56187* UNLT_EXPR: Unary and Binary Expressions. 56188 (line 6) 56189* UNORDERED_EXPR: Unary and Binary Expressions. 56190 (line 6) 56191* unshare_all_rtl: Sharing. (line 61) 56192* unsigned division: Arithmetic. (line 130) 56193* unsigned division with unsigned saturation: Arithmetic. (line 130) 56194* unsigned greater than: Comparisons. (line 64) 56195* unsigned greater than <1>: Comparisons. (line 72) 56196* unsigned less than: Comparisons. (line 68) 56197* unsigned less than <1>: Comparisons. (line 76) 56198* unsigned minimum and maximum: Arithmetic. (line 149) 56199* unsigned_fix: Conversions. (line 77) 56200* unsigned_float: Conversions. (line 62) 56201* unsigned_fract_convert: Conversions. (line 97) 56202* unsigned_sat_fract: Conversions. (line 103) 56203* unspec: Side Effects. (line 298) 56204* unspec <1>: Constant Definitions. 56205 (line 111) 56206* unspec_volatile: Side Effects. (line 298) 56207* unspec_volatile <1>: Constant Definitions. 56208 (line 99) 56209* 'untyped_call' instruction pattern: Standard Names. (line 1747) 56210* 'untyped_return' instruction pattern: Standard Names. (line 1810) 56211* UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 56212* update_ssa: SSA. (line 74) 56213* update_stmt: Manipulating GIMPLE statements. 56214 (line 140) 56215* update_stmt <1>: SSA Operands. (line 6) 56216* update_stmt_if_modified: Manipulating GIMPLE statements. 56217 (line 143) 56218* UQQmode: Machine Modes. (line 126) 56219* 'usaddM3' instruction pattern: Standard Names. (line 442) 56220* 'usadM' instruction pattern: Standard Names. (line 579) 56221* USAmode: Machine Modes. (line 166) 56222* 'usashlM3' instruction pattern: Standard Names. (line 828) 56223* 'usdivM3' instruction pattern: Standard Names. (line 442) 56224* use: Side Effects. (line 168) 56225* used: Flags. (line 325) 56226* 'used', in 'symbol_ref': Flags. (line 211) 56227* user: GTY Options. (line 244) 56228* user experience guidelines: User Experience Guidelines. 56229 (line 6) 56230* user gc: User GC. (line 6) 56231* USER_LABEL_PREFIX: Instruction Output. (line 152) 56232* USE_C_ALLOCA: Host Misc. (line 19) 56233* USE_LD_AS_NEEDED: Driver. (line 135) 56234* USE_LOAD_POST_DECREMENT: Costs. (line 254) 56235* USE_LOAD_POST_INCREMENT: Costs. (line 249) 56236* USE_LOAD_PRE_DECREMENT: Costs. (line 264) 56237* USE_LOAD_PRE_INCREMENT: Costs. (line 259) 56238* USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 205) 56239* USE_STORE_POST_DECREMENT: Costs. (line 274) 56240* USE_STORE_POST_INCREMENT: Costs. (line 269) 56241* USE_STORE_PRE_DECREMENT: Costs. (line 284) 56242* USE_STORE_PRE_INCREMENT: Costs. (line 279) 56243* USING_STMT: Statements for C++. (line 6) 56244* 'usmaddMN4' instruction pattern: Standard Names. (line 780) 56245* 'usmsubMN4' instruction pattern: Standard Names. (line 804) 56246* 'usmulhisi3' instruction pattern: Standard Names. (line 748) 56247* 'usmulM3' instruction pattern: Standard Names. (line 442) 56248* 'usmulqihi3' instruction pattern: Standard Names. (line 748) 56249* 'usmulsidi3' instruction pattern: Standard Names. (line 748) 56250* 'usnegM2' instruction pattern: Standard Names. (line 872) 56251* USQmode: Machine Modes. (line 134) 56252* 'ussubM3' instruction pattern: Standard Names. (line 442) 56253* 'usubvM4' instruction pattern: Standard Names. (line 466) 56254* us_ashift: Arithmetic. (line 173) 56255* us_minus: Arithmetic. (line 38) 56256* us_mult: Arithmetic. (line 93) 56257* us_neg: Arithmetic. (line 82) 56258* us_plus: Arithmetic. (line 14) 56259* us_truncate: Conversions. (line 48) 56260* UTAmode: Machine Modes. (line 174) 56261* UTQmode: Machine Modes. (line 142) 56262* 'V' in constraint: Simple Constraints. (line 43) 56263* values, returned by functions: Scalar Return. (line 6) 56264* varargs implementation: Varargs. (line 6) 56265* variable: Declarations. (line 6) 56266* Variable Location Debug Information in RTL: Debug Information. 56267 (line 6) 56268* VAR_DECL: Declarations. (line 6) 56269* var_location: Debug Information. (line 14) 56270* 'vashlM3' instruction pattern: Standard Names. (line 844) 56271* 'vashrM3' instruction pattern: Standard Names. (line 844) 56272* VA_ARG_EXPR: Unary and Binary Expressions. 56273 (line 6) 56274* 'vcondeqMN' instruction pattern: Standard Names. (line 385) 56275* 'vcondMN' instruction pattern: Standard Names. (line 372) 56276* 'vconduMN' instruction pattern: Standard Names. (line 382) 56277* 'vcond_mask_MN' instruction pattern: Standard Names. (line 392) 56278* vector: Containers. (line 6) 56279* vector operations: Vector Operations. (line 6) 56280* VECTOR_CST: Constant expressions. 56281 (line 6) 56282* VECTOR_STORE_FLAG_VALUE: Misc. (line 327) 56283* 'vec_cmpeqMN' instruction pattern: Standard Names. (line 365) 56284* 'vec_cmpMN' instruction pattern: Standard Names. (line 355) 56285* 'vec_cmpuMN' instruction pattern: Standard Names. (line 362) 56286* vec_concat: Vector Operations. (line 29) 56287* VEC_COND_EXPR: Vectors. (line 6) 56288* vec_duplicate: Vector Operations. (line 34) 56289* 'vec_duplicateM' instruction pattern: Standard Names. (line 298) 56290* VEC_DUPLICATE_EXPR: Vectors. (line 6) 56291* 'vec_extractMN' instruction pattern: Standard Names. (line 282) 56292* 'vec_initMN' instruction pattern: Standard Names. (line 291) 56293* 'vec_load_lanesMN' instruction pattern: Standard Names. (line 165) 56294* VEC_LSHIFT_EXPR: Vectors. (line 6) 56295* 'vec_mask_load_lanesMN' instruction pattern: Standard Names. 56296 (line 189) 56297* 'vec_mask_store_lanesMN' instruction pattern: Standard Names. 56298 (line 219) 56299* vec_merge: Vector Operations. (line 11) 56300* 'vec_packs_float_M' instruction pattern: Standard Names. (line 670) 56301* 'vec_packu_float_M' instruction pattern: Standard Names. (line 670) 56302* VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 56303* VEC_PACK_FLOAT_EXPR: Vectors. (line 6) 56304* VEC_PACK_SAT_EXPR: Vectors. (line 6) 56305* 'vec_pack_sbool_trunc_M' instruction pattern: Standard Names. 56306 (line 647) 56307* 'vec_pack_sfix_trunc_M' instruction pattern: Standard Names. 56308 (line 663) 56309* 'vec_pack_ssat_M' instruction pattern: Standard Names. (line 656) 56310* VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 56311* 'vec_pack_trunc_M' instruction pattern: Standard Names. (line 640) 56312* 'vec_pack_ufix_trunc_M' instruction pattern: Standard Names. 56313 (line 663) 56314* 'vec_pack_usat_M' instruction pattern: Standard Names. (line 656) 56315* 'vec_permM' instruction pattern: Standard Names. (line 410) 56316* 'vec_permM' instruction pattern <1>: Addressing Modes. (line 330) 56317* VEC_RSHIFT_EXPR: Vectors. (line 6) 56318* vec_select: Vector Operations. (line 19) 56319* vec_series: Vector Operations. (line 41) 56320* 'vec_seriesM' instruction pattern: Standard Names. (line 308) 56321* VEC_SERIES_EXPR: Vectors. (line 6) 56322* 'vec_setM' instruction pattern: Standard Names. (line 277) 56323* 'vec_shl_insert_M' instruction pattern: Standard Names. (line 621) 56324* 'vec_shl_M' instruction pattern: Standard Names. (line 628) 56325* 'vec_shr_M' instruction pattern: Standard Names. (line 634) 56326* 'vec_store_lanesMN' instruction pattern: Standard Names. (line 206) 56327* 'vec_unpacks_float_hi_M' instruction pattern: Standard Names. 56328 (line 700) 56329* 'vec_unpacks_float_lo_M' instruction pattern: Standard Names. 56330 (line 700) 56331* 'vec_unpacks_hi_M' instruction pattern: Standard Names. (line 677) 56332* 'vec_unpacks_lo_M' instruction pattern: Standard Names. (line 677) 56333* 'vec_unpacks_sbool_hi_M' instruction pattern: Standard Names. 56334 (line 691) 56335* 'vec_unpacks_sbool_lo_M' instruction pattern: Standard Names. 56336 (line 691) 56337* 'vec_unpacku_float_hi_M' instruction pattern: Standard Names. 56338 (line 700) 56339* 'vec_unpacku_float_lo_M' instruction pattern: Standard Names. 56340 (line 700) 56341* 'vec_unpacku_hi_M' instruction pattern: Standard Names. (line 684) 56342* 'vec_unpacku_lo_M' instruction pattern: Standard Names. (line 684) 56343* VEC_UNPACK_FIX_TRUNC_HI_EXPR: Vectors. (line 6) 56344* VEC_UNPACK_FIX_TRUNC_LO_EXPR: Vectors. (line 6) 56345* VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 56346* VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 56347* VEC_UNPACK_HI_EXPR: Vectors. (line 6) 56348* VEC_UNPACK_LO_EXPR: Vectors. (line 6) 56349* 'vec_unpack_sfix_trunc_hi_M' instruction pattern: Standard Names. 56350 (line 709) 56351* 'vec_unpack_sfix_trunc_lo_M' instruction pattern: Standard Names. 56352 (line 709) 56353* 'vec_unpack_ufix_trunc_hi_M' instruction pattern: Standard Names. 56354 (line 709) 56355* 'vec_unpack_ufix_trunc_lo_M' instruction pattern: Standard Names. 56356 (line 709) 56357* VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 56358* VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 56359* 'vec_widen_smult_even_M' instruction pattern: Standard Names. 56360 (line 719) 56361* 'vec_widen_smult_hi_M' instruction pattern: Standard Names. 56362 (line 719) 56363* 'vec_widen_smult_lo_M' instruction pattern: Standard Names. 56364 (line 719) 56365* 'vec_widen_smult_odd_M' instruction pattern: Standard Names. 56366 (line 719) 56367* 'vec_widen_sshiftl_hi_M' instruction pattern: Standard Names. 56368 (line 730) 56369* 'vec_widen_sshiftl_lo_M' instruction pattern: Standard Names. 56370 (line 730) 56371* 'vec_widen_umult_even_M' instruction pattern: Standard Names. 56372 (line 719) 56373* 'vec_widen_umult_hi_M' instruction pattern: Standard Names. 56374 (line 719) 56375* 'vec_widen_umult_lo_M' instruction pattern: Standard Names. 56376 (line 719) 56377* 'vec_widen_umult_odd_M' instruction pattern: Standard Names. 56378 (line 719) 56379* 'vec_widen_ushiftl_hi_M' instruction pattern: Standard Names. 56380 (line 730) 56381* 'vec_widen_ushiftl_lo_M' instruction pattern: Standard Names. 56382 (line 730) 56383* verify_flow_info: Maintaining the CFG. 56384 (line 116) 56385* virtual operands: SSA Operands. (line 6) 56386* VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 56387* VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 56388* VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 56389* VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 56390* VLIW: Processor pipeline description. 56391 (line 6) 56392* VLIW <1>: Processor pipeline description. 56393 (line 223) 56394* 'vlshrM3' instruction pattern: Standard Names. (line 844) 56395* VMS: Filesystem. (line 37) 56396* VMS_DEBUGGING_INFO: VMS Debug. (line 8) 56397* VOIDmode: Machine Modes. (line 192) 56398* VOID_TYPE: Types. (line 6) 56399* volatil: Flags. (line 339) 56400* 'volatil', in 'insn', 'call_insn', 'jump_insn', 'code_label', 'jump_table_data', 'barrier', and 'note': Flags. 56401 (line 33) 56402* 'volatil', in 'label_ref' and 'reg_label': Flags. (line 54) 56403* 'volatil', in 'mem', 'asm_operands', and 'asm_input': Flags. 56404 (line 65) 56405* 'volatil', in 'reg': Flags. (line 106) 56406* 'volatil', in 'subreg': Flags. (line 184) 56407* 'volatil', in 'subreg' <1>: Flags. (line 194) 56408* 'volatil', in 'symbol_ref': Flags. (line 220) 56409* volatile memory references: Flags. (line 340) 56410* 'volatile', in 'prefetch': Flags. (line 92) 56411* voting between constraint alternatives: Class Preferences. (line 6) 56412* 'vrotlM3' instruction pattern: Standard Names. (line 844) 56413* 'vrotrM3' instruction pattern: Standard Names. (line 844) 56414* walk_dominator_tree: SSA. (line 195) 56415* walk_gimple_op: Statement and operand traversals. 56416 (line 30) 56417* walk_gimple_seq: Statement and operand traversals. 56418 (line 47) 56419* walk_gimple_stmt: Statement and operand traversals. 56420 (line 10) 56421* WCHAR_TYPE: Type Layout. (line 165) 56422* WCHAR_TYPE_SIZE: Type Layout. (line 173) 56423* which_alternative: Output Statement. (line 58) 56424* WHILE_BODY: Statements for C++. (line 6) 56425* WHILE_COND: Statements for C++. (line 6) 56426* WHILE_STMT: Statements for C++. (line 6) 56427* 'while_ultMN' instruction pattern: Standard Names. (line 320) 56428* whopr: LTO. (line 6) 56429* 'widen_ssumM3' instruction pattern: Standard Names. (line 587) 56430* 'widen_usumM3' instruction pattern: Standard Names. (line 588) 56431* WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 110) 56432* 'window_save' instruction pattern: Standard Names. (line 2092) 56433* WINT_TYPE: Type Layout. (line 178) 56434* WORDS_BIG_ENDIAN: Storage Layout. (line 28) 56435* 'WORDS_BIG_ENDIAN', effect on 'subreg': Regs and Memory. (line 225) 56436* word_mode: Machine Modes. (line 458) 56437* WORD_REGISTER_OPERATIONS: Misc. (line 53) 56438* wpa: LTO. (line 6) 56439* 'X' in constraint: Simple Constraints. (line 122) 56440* 'x-HOST': Host Fragment. (line 6) 56441* XCmode: Machine Modes. (line 199) 56442* XCOFF_DEBUGGING_INFO: DBX Options. (line 12) 56443* XEXP: Accessors. (line 6) 56444* XFmode: Machine Modes. (line 82) 56445* XImode: Machine Modes. (line 54) 56446* XINT: Accessors. (line 6) 56447* 'xm-MACHINE.h': Filesystem. (line 6) 56448* 'xm-MACHINE.h' <1>: Host Misc. (line 6) 56449* xor: Arithmetic. (line 168) 56450* 'xor', canonicalization of: Insn Canonicalizations. 56451 (line 94) 56452* 'xorM3' instruction pattern: Standard Names. (line 442) 56453* 'xorsignM3' instruction pattern: Standard Names. (line 1149) 56454* XSTR: Accessors. (line 6) 56455* XVEC: Accessors. (line 38) 56456* XVECEXP: Accessors. (line 45) 56457* XVECLEN: Accessors. (line 41) 56458* XWINT: Accessors. (line 6) 56459* zero_extend: Conversions. (line 28) 56460* 'zero_extendMN2' instruction pattern: Standard Names. (line 1452) 56461* zero_extract: Bit-Fields. (line 30) 56462* 'zero_extract', canonicalization of: Insn Canonicalizations. 56463 (line 103) 56464 56465 56466 56467Tag Table: 56468Node: Top1789 56469Node: Contributing5229 56470Node: Portability5959 56471Node: Interface7747 56472Node: Libgcc10788 56473Node: Integer library routines12615 56474Node: Soft float library routines19583 56475Node: Decimal float library routines31521 56476Node: Fixed-point fractional library routines47279 56477Node: Exception handling routines147675 56478Node: Miscellaneous routines148782 56479Node: Languages150902 56480Node: Source Tree152449 56481Node: Configure Terms153031 56482Node: Top Level155987 56483Node: gcc Directory159572 56484Node: Subdirectories160524 56485Node: Configuration162692 56486Node: Config Fragments163412 56487Node: System Config164637 56488Node: Configuration Files165573 56489Node: Build168189 56490Node: Makefile168601 56491Ref: Makefile-Footnote-1175376 56492Ref: Makefile-Footnote-2175523 56493Node: Library Files175597 56494Node: Headers176159 56495Node: Documentation178242 56496Node: Texinfo Manuals179101 56497Node: Man Page Generation181430 56498Node: Miscellaneous Docs183343 56499Node: Front End184730 56500Node: Front End Directory188409 56501Node: Front End Config189725 56502Node: Front End Makefile192561 56503Node: Back End196329 56504Node: Testsuites201215 56505Node: Test Idioms202204 56506Node: Test Directives205602 56507Node: Directives206129 56508Node: Selectors217502 56509Node: Effective-Target Keywords218858 56510Ref: arm_fp_ok230809 56511Ref: arm_fp_dp_ok230976 56512Ref: arm_neon_ok232088 56513Ref: arm_neon_ok_no_float_abi232257 56514Ref: arm_neonv2_ok232424 56515Ref: arm_fp16_ok232591 56516Ref: arm_neon_fp16_ok232933 56517Ref: arm_vfp3_ok233865 56518Ref: arm_arch_v8a_hard_ok234008 56519Ref: arm_v8_1a_neon_ok234758 56520Ref: arm_v8_2a_fp16_scalar_ok235186 56521Ref: arm_v8_2a_fp16_neon_ok235637 56522Ref: arm_v8_2a_dotprod_neon_ok236112 56523Ref: arm_fp16fml_neon_ok236532 56524Ref: arm_coproc1_ok239032 56525Ref: arm_coproc2_ok239158 56526Ref: arm_coproc3_ok239386 56527Ref: arm_simd32_ok239753 56528Ref: arm_qbit_ok239931 56529Ref: arm_softfp_ok240123 56530Ref: arm_hard_ok240196 56531Ref: stack_size_et252104 56532Node: Add Options254497 56533Ref: arm_fp16_ieee255735 56534Ref: arm_fp16_alternative255990 56535Ref: stack_size_ao258385 56536Node: Require Support258747 56537Node: Final Actions261649 56538Node: Ada Tests270489 56539Node: C Tests271652 56540Node: LTO Testing276024 56541Node: gcov Testing277667 56542Node: profopt Testing280637 56543Node: compat Testing282352 56544Node: Torture Tests286592 56545Node: GIMPLE Tests288226 56546Node: RTL Tests289468 56547Node: Options290774 56548Node: Option file format291215 56549Node: Option properties298204 56550Node: Passes314367 56551Node: Parsing pass315240 56552Node: Gimplification pass318768 56553Node: Pass manager320601 56554Node: IPA passes322442 56555Node: Small IPA passes323335 56556Node: Regular IPA passes326772 56557Node: Late IPA passes331834 56558Node: Tree SSA passes332793 56559Node: RTL passes354333 56560Node: Optimization info366597 56561Node: Dump setup367416 56562Node: Optimization groups368545 56563Node: Dump files and streams369524 56564Node: Dump output verbosity370722 56565Node: Dump types371778 56566Node: Dump examples374120 56567Node: poly_int375601 56568Node: Overview of 'poly_int'377099 56569Node: Consequences of using 'poly_int'379707 56570Node: Comparisons involving 'poly_int'381348 56571Node: Comparison functions for 'poly_int'383006 56572Node: Properties of the 'poly_int' comparisons384219 56573Node: Comparing potentially-unordered 'poly_int's386669 56574Node: Comparing ordered 'poly_int's387590 56575Node: Checking for a 'poly_int' marker value389622 56576Node: Range checks on 'poly_int's390479 56577Node: Sorting 'poly_int's393143 56578Node: Arithmetic on 'poly_int's393922 56579Node: Using 'poly_int' with C++ arithmetic operators394739 56580Node: 'wi' arithmetic on 'poly_int's396278 56581Node: Division of 'poly_int's397140 56582Node: Other 'poly_int' arithmetic398657 56583Node: Alignment of 'poly_int's400071 56584Node: Computing bounds on 'poly_int's403354 56585Node: Converting 'poly_int's404749 56586Node: Miscellaneous 'poly_int' routines408302 56587Node: Guidelines for using 'poly_int'408948 56588Node: GENERIC413884 56589Node: Deficiencies415706 56590Node: Tree overview415947 56591Node: Macros and Functions420071 56592Node: Identifiers420896 56593Node: Containers422505 56594Node: Types423662 56595Node: Declarations435736 56596Node: Working with declarations436231 56597Node: Internal structure441835 56598Node: Current structure hierarchy442219 56599Node: Adding new DECL node types444312 56600Node: Attributes448596 56601Node: Expression trees449840 56602Node: Constant expressions451594 56603Node: Storage References457686 56604Node: Unary and Binary Expressions461205 56605Node: Vectors482107 56606Node: Statements489011 56607Node: Basic Statements489543 56608Node: Blocks494170 56609Node: Statement Sequences495871 56610Node: Empty Statements496204 56611Node: Jumps496778 56612Node: Cleanups497431 56613Node: OpenMP499472 56614Node: OpenACC505317 56615Node: Functions506434 56616Node: Function Basics506905 56617Node: Function Properties510589 56618Node: Language-dependent trees513370 56619Node: C and C++ Trees514257 56620Node: Types for C++517142 56621Node: Namespaces522112 56622Node: Classes525218 56623Node: Functions for C++530126 56624Node: Statements for C++536377 56625Node: C++ Expressions544430 56626Node: GIMPLE545935 56627Node: Tuple representation549600 56628Node: Class hierarchy of GIMPLE statements556560 56629Node: GIMPLE instruction set561548 56630Node: GIMPLE Exception Handling563180 56631Node: Temporaries565092 56632Ref: Temporaries-Footnote-1566410 56633Node: Operands566475 56634Node: Compound Expressions567236 56635Node: Compound Lvalues567470 56636Node: Conditional Expressions568232 56637Node: Logical Operators568891 56638Node: Manipulating GIMPLE statements576238 56639Node: Tuple specific accessors582174 56640Node: 'GIMPLE_ASM'583011 56641Node: 'GIMPLE_ASSIGN'585398 56642Node: 'GIMPLE_BIND'590108 56643Node: 'GIMPLE_CALL'591928 56644Node: 'GIMPLE_CATCH'596077 56645Node: 'GIMPLE_COND'597233 56646Node: 'GIMPLE_DEBUG'600034 56647Node: 'GIMPLE_EH_FILTER'604638 56648Node: 'GIMPLE_LABEL'606207 56649Node: 'GIMPLE_GOTO'606826 56650Node: 'GIMPLE_NOP'607355 56651Node: 'GIMPLE_OMP_ATOMIC_LOAD'607723 56652Node: 'GIMPLE_OMP_ATOMIC_STORE'608725 56653Node: 'GIMPLE_OMP_CONTINUE'609430 56654Node: 'GIMPLE_OMP_CRITICAL'610915 56655Node: 'GIMPLE_OMP_FOR'611915 56656Node: 'GIMPLE_OMP_MASTER'615337 56657Node: 'GIMPLE_OMP_ORDERED'615721 56658Node: 'GIMPLE_OMP_PARALLEL'616121 56659Node: 'GIMPLE_OMP_RETURN'618896 56660Node: 'GIMPLE_OMP_SECTION'619547 56661Node: 'GIMPLE_OMP_SECTIONS'620213 56662Node: 'GIMPLE_OMP_SINGLE'621829 56663Node: 'GIMPLE_PHI'622781 56664Node: 'GIMPLE_RESX'624066 56665Node: 'GIMPLE_RETURN'624791 56666Node: 'GIMPLE_SWITCH'625371 56667Node: 'GIMPLE_TRY'627252 56668Node: 'GIMPLE_WITH_CLEANUP_EXPR'629030 56669Node: GIMPLE sequences629913 56670Node: Sequence iterators633119 56671Node: Adding a new GIMPLE statement code641576 56672Node: Statement and operand traversals642921 56673Node: Tree SSA645513 56674Node: Annotations647301 56675Node: SSA Operands647706 56676Node: SSA661785 56677Node: Alias analysis671491 56678Node: Memory model675265 56679Node: RTL676624 56680Node: RTL Objects678812 56681Node: RTL Classes682696 56682Node: Accessors687995 56683Node: Special Accessors690168 56684Node: Flags695955 56685Node: Machine Modes711218 56686Node: Constants728624 56687Node: Regs and Memory740013 56688Node: Arithmetic759265 56689Node: Comparisons769440 56690Node: Bit-Fields773732 56691Node: Vector Operations775283 56692Node: Conversions777387 56693Node: RTL Declarations781885 56694Node: Side Effects782729 56695Node: Incdec799737 56696Node: Assembler803073 56697Node: Debug Information804618 56698Node: Insns806545 56699Node: Calls834403 56700Node: Sharing836996 56701Node: Reading RTL840191 56702Node: Control Flow841182 56703Node: Basic Blocks842950 56704Node: Edges848404 56705Node: Profile information857023 56706Node: Maintaining the CFG861707 56707Node: Liveness information867475 56708Node: Loop Analysis and Representation869601 56709Node: Loop representation870637 56710Node: Loop querying878003 56711Node: Loop manipulation880824 56712Node: LCSSA883160 56713Node: Scalar evolutions885229 56714Node: loop-iv888473 56715Node: Number of iterations890395 56716Node: Dependency analysis894476 56717Node: Machine Desc900827 56718Node: Overview903390 56719Node: Patterns905430 56720Node: Example910397 56721Node: RTL Template911858 56722Node: Output Template922514 56723Node: Output Statement926695 56724Node: Predicates931034 56725Node: Machine-Independent Predicates933952 56726Node: Defining Predicates938896 56727Node: Constraints944859 56728Node: Simple Constraints946328 56729Node: Multi-Alternative959168 56730Node: Class Preferences962377 56731Node: Modifiers963269 56732Node: Machine Constraints968002 56733Node: Disable Insn Alternatives1030106 56734Node: Define Constraints1033595 56735Node: C Constraint Interface1040989 56736Node: Standard Names1044139 56737Ref: shift patterns1080383 56738Ref: prologue instruction pattern1135163 56739Ref: window_save instruction pattern1135656 56740Ref: epilogue instruction pattern1135933 56741Node: Pattern Ordering1157909 56742Node: Dependent Patterns1159145 56743Node: Jump Patterns1160765 56744Ref: Jump Patterns-Footnote-11162910 56745Node: Looping Patterns1162958 56746Node: Insn Canonicalizations1168597 56747Node: Expander Definitions1173804 56748Node: Insn Splitting1182018 56749Node: Including Patterns1197046 56750Node: Peephole Definitions1198827 56751Node: define_peephole1200080 56752Node: define_peephole21206410 56753Node: Insn Attributes1210499 56754Node: Defining Attributes1211681 56755Ref: define_enum_attr1215173 56756Node: Expressions1216209 56757Node: Tagging Insns1222959 56758Node: Attr Example1227312 56759Node: Insn Lengths1229685 56760Node: Constant Attributes1233093 56761Node: Mnemonic Attribute1234269 56762Node: Delay Slots1235788 56763Node: Processor pipeline description1239011 56764Ref: Processor pipeline description-Footnote-11257823 56765Node: Conditional Execution1258147 56766Node: Define Subst1261630 56767Node: Define Subst Example1263665 56768Node: Define Subst Pattern Matching1266660 56769Node: Define Subst Output Template1267886 56770Node: Constant Definitions1270209 56771Ref: define_enum1273991 56772Node: Iterators1274479 56773Node: Mode Iterators1275124 56774Node: Defining Mode Iterators1276102 56775Node: Substitutions1277596 56776Node: Examples1279838 56777Node: Code Iterators1281286 56778Node: Int Iterators1284416 56779Node: Subst Iterators1286860 56780Node: Parameterized Names1288580 56781Node: Target Macros1292598 56782Node: Target Structure1295661 56783Node: Driver1298153 56784Node: Run-time Target1317123 56785Node: Per-Function Data1326656 56786Node: Storage Layout1329420 56787Node: Type Layout1356919 56788Node: Registers1370260 56789Node: Register Basics1371234 56790Node: Allocation Order1378796 56791Node: Values in Registers1381280 56792Node: Leaf Functions1388756 56793Node: Stack Registers1391615 56794Node: Register Classes1392887 56795Node: Stack and Calling1427669 56796Node: Frame Layout1428275 56797Node: Exception Handling1440110 56798Node: Stack Checking1446320 56799Node: Frame Registers1451945 56800Node: Elimination1460496 56801Node: Stack Arguments1464352 56802Node: Register Arguments1471548 56803Node: Scalar Return1496409 56804Node: Aggregate Return1502865 56805Node: Caller Saves1507419 56806Node: Function Entry1508161 56807Node: Profiling1519713 56808Node: Tail Calls1521823 56809Node: Shrink-wrapping separate components1523733 56810Node: Stack Smashing Protection1526774 56811Node: Miscellaneous Register Hooks1529263 56812Node: Varargs1530128 56813Node: Trampolines1539528 56814Node: Library Calls1548351 56815Node: Addressing Modes1553241 56816Node: Anchored Addresses1582248 56817Node: Condition Code1584891 56818Node: CC0 Condition Codes1587218 56819Node: MODE_CC Condition Codes1590464 56820Node: Costs1597290 56821Node: Scheduling1618661 56822Node: Sections1642583 56823Node: PIC1658802 56824Node: Assembler Format1660861 56825Node: File Framework1661999 56826Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1669598 56827Node: Data Output1672868 56828Node: Uninitialized Data1681156 56829Node: Label Output1686170 56830Node: Initialization1710781 56831Node: Macros for Initialization1716742 56832Node: Instruction Output1723461 56833Node: Dispatch Tables1734090 56834Node: Exception Region Output1739551 56835Node: Alignment Output1746633 56836Node: Debugging Info1750320 56837Node: All Debuggers1750974 56838Node: DBX Options1753746 56839Node: DBX Hooks1759184 56840Node: File Names and DBX1760493 56841Node: DWARF1762597 56842Node: VMS Debug1768412 56843Node: Floating Point1768991 56844Node: Mode Switching1771746 56845Node: Target Attributes1776183 56846Node: Emulated TLS1785599 56847Node: MIPS Coprocessors1788989 56848Node: PCH Target1790148 56849Node: C++ ABI1791990 56850Node: D Language and ABI1796782 56851Node: Named Address Spaces1797827 56852Node: Misc1803754 56853Ref: TARGET_SHIFT_TRUNCATION_MASK1811625 56854Node: Host Config1866959 56855Node: Host Common1868028 56856Node: Filesystem1870402 56857Node: Host Misc1874517 56858Node: Fragments1876966 56859Node: Target Fragment1878161 56860Node: Host Fragment1888973 56861Node: Collect21889213 56862Node: Header Dirs1891849 56863Node: Type Information1893272 56864Node: GTY Options1896548 56865Node: Inheritance and GTY1907806 56866Ref: Inheritance and GTY-Footnote-11909371 56867Node: User GC1909641 56868Node: GGC Roots1913380 56869Node: Files1914093 56870Node: Invoking the garbage collector1916800 56871Node: Troubleshooting1918305 56872Node: Plugins1919380 56873Node: Plugins loading1920509 56874Node: Plugin API1921608 56875Node: Plugins pass1929334 56876Node: Plugins GC1931305 56877Node: Plugins description1933022 56878Node: Plugins attr1933558 56879Node: Plugins recording1935837 56880Node: Plugins gate1936687 56881Node: Plugins tracking1937278 56882Node: Plugins building1937866 56883Node: LTO1941367 56884Node: LTO Overview1942239 56885Node: LTO object file layout1948066 56886Node: IPA1952696 56887Node: WHOPR1961746 56888Node: Internal flags1966306 56889Node: Match and Simplify1967717 56890Node: GIMPLE API1968679 56891Node: The Language1971474 56892Node: Static Analyzer1983449 56893Node: Analyzer Internals1983714 56894Node: Debugging the Analyzer1999356 56895Node: User Experience Guidelines2001967 56896Node: Guidelines for Diagnostics2002902 56897Ref: input_location_example2009963 56898Node: Guidelines for Options2019646 56899Node: Funding2019823 56900Node: GNU Project2022330 56901Node: Copying2022979 56902Node: GNU Free Documentation License2060489 56903Node: Contributors2085609 56904Node: Option Index2126585 56905Node: Concept Index2127462 56906 56907End Tag Table 56908