1This is gccint.info, produced by makeinfo version 6.4 from gccint.texi. 2 3Copyright (C) 1988-2017 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-2017 Free Software Foundation, Inc. 30 31 Permission is granted to copy, distribute and/or modify this document 32under the terms of the GNU Free Documentation License, Version 1.3 or 33any later version published by the Free Software Foundation; with the 34Invariant Sections being "Funding Free Software", the Front-Cover Texts 35being (a) (see below), and with the Back-Cover Texts being (b) (see 36below). A copy of the license is included in the section entitled "GNU 37Free Documentation License". 38 39 (a) The FSF's Front-Cover Text is: 40 41 A GNU Manual 42 43 (b) The FSF's Back-Cover Text is: 44 45 You have freedom to copy and modify this GNU Manual, like GNU software. 46Copies published by the Free Software Foundation raise funds for GNU 47development. 48 49 50File: gccint.info, Node: Top, Next: Contributing, Up: (DIR) 51 52Introduction 53************ 54 55This manual documents the internals of the GNU compilers, including how 56to port them to new targets and some information about how to write 57front ends for new languages. It corresponds to the compilers (GCC) 58version 6.5.0. The use of the GNU compilers is documented in a separate 59manual. *Note Introduction: (gcc)Top. 60 61 This manual is mainly a reference manual rather than a tutorial. It 62discusses how to contribute to GCC (*note Contributing::), the 63characteristics of the machines supported by GCC as hosts and targets 64(*note Portability::), how GCC relates to the ABIs on such systems 65(*note Interface::), and the characteristics of the languages for which 66GCC front ends are written (*note Languages::). It then describes the 67GCC source tree structure and build system, some of the interfaces to 68GCC front ends, and how support for a target system is implemented in 69GCC. 70 71 Additional tutorial information is linked to from 72<http://gcc.gnu.org/readings.html>. 73 74* Menu: 75 76* Contributing:: How to contribute to testing and developing GCC. 77* Portability:: Goals of GCC's portability features. 78* Interface:: Function-call interface of GCC output. 79* Libgcc:: Low-level runtime library used by GCC. 80* Languages:: Languages for which GCC front ends are written. 81* Source Tree:: GCC source tree structure and build system. 82* Testsuites:: GCC testsuites. 83* Options:: Option specification files. 84* Passes:: Order of passes, what they do, and what each file is for. 85* GENERIC:: Language-independent representation generated by Front Ends 86* GIMPLE:: Tuple representation used by Tree SSA optimizers 87* Tree SSA:: Analysis and optimization of GIMPLE 88* RTL:: Machine-dependent low-level intermediate representation. 89* Control Flow:: Maintaining and manipulating the control flow graph. 90* Loop Analysis and Representation:: Analysis and representation of loops 91* Machine Desc:: How to write machine description instruction patterns. 92* Target Macros:: How to write the machine description C macros and functions. 93* Host Config:: Writing the 'xm-MACHINE.h' file. 94* Fragments:: Writing the 't-TARGET' and 'x-HOST' files. 95* Collect2:: How 'collect2' works; how it finds 'ld'. 96* Header Dirs:: Understanding the standard header file directories. 97* Type Information:: GCC's memory management; generating type information. 98* Plugins:: Extending the compiler with plugins. 99* LTO:: Using Link-Time Optimization. 100 101* Match and Simplify:: How to write expression simplification patterns for GIMPLE and GENERIC 102* Funding:: How to help assure funding for free software. 103* GNU Project:: The GNU Project and GNU/Linux. 104 105* Copying:: GNU General Public License says 106 how you can copy and share GCC. 107* GNU Free Documentation License:: How you can copy and share this manual. 108* Contributors:: People who have contributed to GCC. 109 110* Option Index:: Index to command line options. 111* Concept Index:: Index of concepts and symbol names. 112 113 114File: gccint.info, Node: Contributing, Next: Portability, Up: Top 115 1161 Contributing to GCC Development 117********************************* 118 119If you would like to help pretest GCC releases to assure they work well, 120current development sources are available by SVN (see 121<http://gcc.gnu.org/svn.html>). Source and binary snapshots are also 122available for FTP; see <http://gcc.gnu.org/snapshots.html>. 123 124 If you would like to work on improvements to GCC, please read the 125advice at these URLs: 126 127 <http://gcc.gnu.org/contribute.html> 128 <http://gcc.gnu.org/contributewhy.html> 129 130for information on how to make useful contributions and avoid 131duplication of effort. Suggested projects are listed at 132<http://gcc.gnu.org/projects/>. 133 134 135File: gccint.info, Node: Portability, Next: Interface, Prev: Contributing, Up: Top 136 1372 GCC and Portability 138********************* 139 140GCC itself aims to be portable to any machine where 'int' is at least a 14132-bit type. It aims to target machines with a flat (non-segmented) 142byte addressed data address space (the code address space can be 143separate). Target ABIs may have 8, 16, 32 or 64-bit 'int' type. 'char' 144can be wider than 8 bits. 145 146 GCC gets most of the information about the target machine from a 147machine description which gives an algebraic formula for each of the 148machine's instructions. This is a very clean way to describe the 149target. But when the compiler needs information that is difficult to 150express in this fashion, ad-hoc parameters have been defined for machine 151descriptions. The purpose of portability is to reduce the total work 152needed on the compiler; it was not of interest for its own sake. 153 154 GCC does not contain machine dependent code, but it does contain code 155that depends on machine parameters such as endianness (whether the most 156significant byte has the highest or lowest address of the bytes in a 157word) and the availability of autoincrement addressing. In the 158RTL-generation pass, it is often necessary to have multiple strategies 159for generating code for a particular kind of syntax tree, strategies 160that are usable for different combinations of parameters. Often, not 161all possible cases have been addressed, but only the common ones or only 162the ones that have been encountered. As a result, a new target may 163require additional strategies. You will know if this happens because 164the compiler will call 'abort'. Fortunately, the new strategies can be 165added in a machine-independent fashion, and will affect only the target 166machines that need them. 167 168 169File: gccint.info, Node: Interface, Next: Libgcc, Prev: Portability, Up: Top 170 1713 Interfacing to GCC Output 172*************************** 173 174GCC is normally configured to use the same function calling convention 175normally in use on the target system. This is done with the 176machine-description macros described (*note Target Macros::). 177 178 However, returning of structure and union values is done differently on 179some target machines. As a result, functions compiled with PCC 180returning such types cannot be called from code compiled with GCC, and 181vice versa. This does not cause trouble often because few Unix library 182routines return structures or unions. 183 184 GCC code returns structures and unions that are 1, 2, 4 or 8 bytes long 185in the same registers used for 'int' or 'double' return values. (GCC 186typically allocates variables of such types in registers also.) 187Structures and unions of other sizes are returned by storing them into 188an address passed by the caller (usually in a register). The target 189hook 'TARGET_STRUCT_VALUE_RTX' tells GCC where to pass this address. 190 191 By contrast, PCC on most target machines returns structures and unions 192of any size by copying the data into an area of static storage, and then 193returning the address of that storage as if it were a pointer value. 194The caller must copy the data from that memory area to the place where 195the value is wanted. This is slower than the method used by GCC, and 196fails to be reentrant. 197 198 On some target machines, such as RISC machines and the 80386, the 199standard system convention is to pass to the subroutine the address of 200where to return the value. On these machines, GCC has been configured 201to be compatible with the standard compiler, when this method is used. 202It may not be compatible for structures of 1, 2, 4 or 8 bytes. 203 204 GCC uses the system's standard convention for passing arguments. On 205some machines, the first few arguments are passed in registers; in 206others, all are passed on the stack. It would be possible to use 207registers for argument passing on any machine, and this would probably 208result in a significant speedup. But the result would be complete 209incompatibility with code that follows the standard convention. So this 210change is practical only if you are switching to GCC as the sole C 211compiler for the system. We may implement register argument passing on 212certain machines once we have a complete GNU system so that we can 213compile the libraries with GCC. 214 215 On some machines (particularly the SPARC), certain types of arguments 216are passed "by invisible reference". This means that the value is 217stored in memory, and the address of the memory location is passed to 218the subroutine. 219 220 If you use 'longjmp', beware of automatic variables. ISO C says that 221automatic variables that are not declared 'volatile' have undefined 222values after a 'longjmp'. And this is all GCC promises to do, because 223it is very difficult to restore register variables correctly, and one of 224GCC's features is that it can put variables in registers without your 225asking it to. 226 227 228File: gccint.info, Node: Libgcc, Next: Languages, Prev: Interface, Up: Top 229 2304 The GCC low-level runtime library 231*********************************** 232 233GCC provides a low-level runtime library, 'libgcc.a' or 'libgcc_s.so.1' 234on some platforms. GCC generates calls to routines in this library 235automatically, whenever it needs to perform some operation that is too 236complicated to emit inline code for. 237 238 Most of the routines in 'libgcc' handle arithmetic operations that the 239target processor cannot perform directly. This includes integer 240multiply and divide on some machines, and all floating-point and 241fixed-point operations on other machines. 'libgcc' also includes 242routines for exception handling, and a handful of miscellaneous 243operations. 244 245 Some of these routines can be defined in mostly machine-independent C. 246Others must be hand-written in assembly language for each processor that 247needs them. 248 249 GCC will also generate calls to C library routines, such as 'memcpy' 250and 'memset', in some cases. The set of routines that GCC may possibly 251use is documented in *note (gcc)Other Builtins::. 252 253 These routines take arguments and return values of a specific machine 254mode, not a specific C type. *Note Machine Modes::, for an explanation 255of this concept. For illustrative purposes, in this chapter the 256floating point type 'float' is assumed to correspond to 'SFmode'; 257'double' to 'DFmode'; and 'long double' to both 'TFmode' and 'XFmode'. 258Similarly, the integer types 'int' and 'unsigned int' correspond to 259'SImode'; 'long' and 'unsigned long' to 'DImode'; and 'long long' and 260'unsigned long long' to 'TImode'. 261 262* Menu: 263 264* Integer library routines:: 265* Soft float library routines:: 266* Decimal float library routines:: 267* Fixed-point fractional library routines:: 268* Exception handling routines:: 269* Miscellaneous routines:: 270 271 272File: gccint.info, Node: Integer library routines, Next: Soft float library routines, Up: Libgcc 273 2744.1 Routines for integer arithmetic 275=================================== 276 277The integer arithmetic routines are used on platforms that don't provide 278hardware support for arithmetic operations on some modes. 279 2804.1.1 Arithmetic functions 281-------------------------- 282 283 -- Runtime Function: int __ashlsi3 (int A, int B) 284 -- Runtime Function: long __ashldi3 (long A, int B) 285 -- Runtime Function: long long __ashlti3 (long long A, int B) 286 These functions return the result of shifting A left by B bits. 287 288 -- Runtime Function: int __ashrsi3 (int A, int B) 289 -- Runtime Function: long __ashrdi3 (long A, int B) 290 -- Runtime Function: long long __ashrti3 (long long A, int B) 291 These functions return the result of arithmetically shifting A 292 right by B bits. 293 294 -- Runtime Function: int __divsi3 (int A, int B) 295 -- Runtime Function: long __divdi3 (long A, long B) 296 -- Runtime Function: long long __divti3 (long long A, long long B) 297 These functions return the quotient of the signed division of A and 298 B. 299 300 -- Runtime Function: int __lshrsi3 (int A, int B) 301 -- Runtime Function: long __lshrdi3 (long A, int B) 302 -- Runtime Function: long long __lshrti3 (long long A, int B) 303 These functions return the result of logically shifting A right by 304 B bits. 305 306 -- Runtime Function: int __modsi3 (int A, int B) 307 -- Runtime Function: long __moddi3 (long A, long B) 308 -- Runtime Function: long long __modti3 (long long A, long long B) 309 These functions return the remainder of the signed division of A 310 and B. 311 312 -- Runtime Function: int __mulsi3 (int A, int B) 313 -- Runtime Function: long __muldi3 (long A, long B) 314 -- Runtime Function: long long __multi3 (long long A, long long B) 315 These functions return the product of A and B. 316 317 -- Runtime Function: long __negdi2 (long A) 318 -- Runtime Function: long long __negti2 (long long A) 319 These functions return the negation of A. 320 321 -- Runtime Function: unsigned int __udivsi3 (unsigned int A, unsigned 322 int B) 323 -- Runtime Function: unsigned long __udivdi3 (unsigned long A, unsigned 324 long B) 325 -- Runtime Function: unsigned long long __udivti3 (unsigned long long 326 A, unsigned long long B) 327 These functions return the quotient of the unsigned division of A 328 and B. 329 330 -- Runtime Function: unsigned long __udivmoddi4 (unsigned long A, 331 unsigned long B, unsigned long *C) 332 -- Runtime Function: unsigned long long __udivmodti4 (unsigned long 333 long A, unsigned long long B, unsigned long long *C) 334 These functions calculate both the quotient and remainder of the 335 unsigned division of A and B. The return value is the quotient, 336 and the remainder is placed in variable pointed to by C. 337 338 -- Runtime Function: unsigned int __umodsi3 (unsigned int A, unsigned 339 int B) 340 -- Runtime Function: unsigned long __umoddi3 (unsigned long A, unsigned 341 long B) 342 -- Runtime Function: unsigned long long __umodti3 (unsigned long long 343 A, unsigned long long B) 344 These functions return the remainder of the unsigned division of A 345 and B. 346 3474.1.2 Comparison functions 348-------------------------- 349 350The following functions implement integral comparisons. These functions 351implement a low-level compare, upon which the higher level comparison 352operators (such as less than and greater than or equal to) can be 353constructed. The returned values lie in the range zero to two, to allow 354the high-level operators to be implemented by testing the returned 355result using either signed or unsigned comparison. 356 357 -- Runtime Function: int __cmpdi2 (long A, long B) 358 -- Runtime Function: int __cmpti2 (long long A, long long B) 359 These functions perform a signed comparison of A and B. If A is 360 less than B, they return 0; if A is greater than B, they return 2; 361 and if A and B are equal they return 1. 362 363 -- Runtime Function: int __ucmpdi2 (unsigned long A, unsigned long B) 364 -- Runtime Function: int __ucmpti2 (unsigned long long A, unsigned long 365 long B) 366 These functions perform an unsigned comparison of A and B. If A is 367 less than B, they return 0; if A is greater than B, they return 2; 368 and if A and B are equal they return 1. 369 3704.1.3 Trapping arithmetic functions 371----------------------------------- 372 373The following functions implement trapping arithmetic. These functions 374call the libc function 'abort' upon signed arithmetic overflow. 375 376 -- Runtime Function: int __absvsi2 (int A) 377 -- Runtime Function: long __absvdi2 (long A) 378 These functions return the absolute value of A. 379 380 -- Runtime Function: int __addvsi3 (int A, int B) 381 -- Runtime Function: long __addvdi3 (long A, long B) 382 These functions return the sum of A and B; that is 'A + B'. 383 384 -- Runtime Function: int __mulvsi3 (int A, int B) 385 -- Runtime Function: long __mulvdi3 (long A, long B) 386 The functions return the product of A and B; that is 'A * B'. 387 388 -- Runtime Function: int __negvsi2 (int A) 389 -- Runtime Function: long __negvdi2 (long A) 390 These functions return the negation of A; that is '-A'. 391 392 -- Runtime Function: int __subvsi3 (int A, int B) 393 -- Runtime Function: long __subvdi3 (long A, long B) 394 These functions return the difference between B and A; that is 'A - 395 B'. 396 3974.1.4 Bit operations 398-------------------- 399 400 -- Runtime Function: int __clzsi2 (unsigned int A) 401 -- Runtime Function: int __clzdi2 (unsigned long A) 402 -- Runtime Function: int __clzti2 (unsigned long long A) 403 These functions return the number of leading 0-bits in A, starting 404 at the most significant bit position. If A is zero, the result is 405 undefined. 406 407 -- Runtime Function: int __ctzsi2 (unsigned int A) 408 -- Runtime Function: int __ctzdi2 (unsigned long A) 409 -- Runtime Function: int __ctzti2 (unsigned long long A) 410 These functions return the number of trailing 0-bits in A, starting 411 at the least significant bit position. If A is zero, the result is 412 undefined. 413 414 -- Runtime Function: int __ffsdi2 (unsigned long A) 415 -- Runtime Function: int __ffsti2 (unsigned long long A) 416 These functions return the index of the least significant 1-bit in 417 A, or the value zero if A is zero. The least significant bit is 418 index one. 419 420 -- Runtime Function: int __paritysi2 (unsigned int A) 421 -- Runtime Function: int __paritydi2 (unsigned long A) 422 -- Runtime Function: int __parityti2 (unsigned long long A) 423 These functions return the value zero if the number of bits set in 424 A is even, and the value one otherwise. 425 426 -- Runtime Function: int __popcountsi2 (unsigned int A) 427 -- Runtime Function: int __popcountdi2 (unsigned long A) 428 -- Runtime Function: int __popcountti2 (unsigned long long A) 429 These functions return the number of bits set in A. 430 431 -- Runtime Function: int32_t __bswapsi2 (int32_t A) 432 -- Runtime Function: int64_t __bswapdi2 (int64_t A) 433 These functions return the A byteswapped. 434 435 436File: gccint.info, Node: Soft float library routines, Next: Decimal float library routines, Prev: Integer library routines, Up: Libgcc 437 4384.2 Routines for floating point emulation 439========================================= 440 441The software floating point library is used on machines which do not 442have hardware support for floating point. It is also used whenever 443'-msoft-float' is used to disable generation of floating point 444instructions. (Not all targets support this switch.) 445 446 For compatibility with other compilers, the floating point emulation 447routines can be renamed with the 'DECLARE_LIBRARY_RENAMES' macro (*note 448Library Calls::). In this section, the default names are used. 449 450 Presently the library does not support 'XFmode', which is used for 451'long double' on some architectures. 452 4534.2.1 Arithmetic functions 454-------------------------- 455 456 -- Runtime Function: float __addsf3 (float A, float B) 457 -- Runtime Function: double __adddf3 (double A, double B) 458 -- Runtime Function: long double __addtf3 (long double A, long double 459 B) 460 -- Runtime Function: long double __addxf3 (long double A, long double 461 B) 462 These functions return the sum of A and B. 463 464 -- Runtime Function: float __subsf3 (float A, float B) 465 -- Runtime Function: double __subdf3 (double A, double B) 466 -- Runtime Function: long double __subtf3 (long double A, long double 467 B) 468 -- Runtime Function: long double __subxf3 (long double A, long double 469 B) 470 These functions return the difference between B and A; that is, 471 A - B. 472 473 -- Runtime Function: float __mulsf3 (float A, float B) 474 -- Runtime Function: double __muldf3 (double A, double B) 475 -- Runtime Function: long double __multf3 (long double A, long double 476 B) 477 -- Runtime Function: long double __mulxf3 (long double A, long double 478 B) 479 These functions return the product of A and B. 480 481 -- Runtime Function: float __divsf3 (float A, float B) 482 -- Runtime Function: double __divdf3 (double A, double B) 483 -- Runtime Function: long double __divtf3 (long double A, long double 484 B) 485 -- Runtime Function: long double __divxf3 (long double A, long double 486 B) 487 These functions return the quotient of A and B; that is, A / B. 488 489 -- Runtime Function: float __negsf2 (float A) 490 -- Runtime Function: double __negdf2 (double A) 491 -- Runtime Function: long double __negtf2 (long double A) 492 -- Runtime Function: long double __negxf2 (long double A) 493 These functions return the negation of A. They simply flip the 494 sign bit, so they can produce negative zero and negative NaN. 495 4964.2.2 Conversion functions 497-------------------------- 498 499 -- Runtime Function: double __extendsfdf2 (float A) 500 -- Runtime Function: long double __extendsftf2 (float A) 501 -- Runtime Function: long double __extendsfxf2 (float A) 502 -- Runtime Function: long double __extenddftf2 (double A) 503 -- Runtime Function: long double __extenddfxf2 (double A) 504 These functions extend A to the wider mode of their return type. 505 506 -- Runtime Function: double __truncxfdf2 (long double A) 507 -- Runtime Function: double __trunctfdf2 (long double A) 508 -- Runtime Function: float __truncxfsf2 (long double A) 509 -- Runtime Function: float __trunctfsf2 (long double A) 510 -- Runtime Function: float __truncdfsf2 (double A) 511 These functions truncate A to the narrower mode of their return 512 type, rounding toward zero. 513 514 -- Runtime Function: int __fixsfsi (float A) 515 -- Runtime Function: int __fixdfsi (double A) 516 -- Runtime Function: int __fixtfsi (long double A) 517 -- Runtime Function: int __fixxfsi (long double A) 518 These functions convert A to a signed integer, rounding toward 519 zero. 520 521 -- Runtime Function: long __fixsfdi (float A) 522 -- Runtime Function: long __fixdfdi (double A) 523 -- Runtime Function: long __fixtfdi (long double A) 524 -- Runtime Function: long __fixxfdi (long double A) 525 These functions convert A to a signed long, rounding toward zero. 526 527 -- Runtime Function: long long __fixsfti (float A) 528 -- Runtime Function: long long __fixdfti (double A) 529 -- Runtime Function: long long __fixtfti (long double A) 530 -- Runtime Function: long long __fixxfti (long double A) 531 These functions convert A to a signed long long, rounding toward 532 zero. 533 534 -- Runtime Function: unsigned int __fixunssfsi (float A) 535 -- Runtime Function: unsigned int __fixunsdfsi (double A) 536 -- Runtime Function: unsigned int __fixunstfsi (long double A) 537 -- Runtime Function: unsigned int __fixunsxfsi (long double A) 538 These functions convert A to an unsigned integer, rounding toward 539 zero. Negative values all become zero. 540 541 -- Runtime Function: unsigned long __fixunssfdi (float A) 542 -- Runtime Function: unsigned long __fixunsdfdi (double A) 543 -- Runtime Function: unsigned long __fixunstfdi (long double A) 544 -- Runtime Function: unsigned long __fixunsxfdi (long double A) 545 These functions convert A to an unsigned long, rounding toward 546 zero. Negative values all become zero. 547 548 -- Runtime Function: unsigned long long __fixunssfti (float A) 549 -- Runtime Function: unsigned long long __fixunsdfti (double A) 550 -- Runtime Function: unsigned long long __fixunstfti (long double A) 551 -- Runtime Function: unsigned long long __fixunsxfti (long double A) 552 These functions convert A to an unsigned long long, rounding toward 553 zero. Negative values all become zero. 554 555 -- Runtime Function: float __floatsisf (int I) 556 -- Runtime Function: double __floatsidf (int I) 557 -- Runtime Function: long double __floatsitf (int I) 558 -- Runtime Function: long double __floatsixf (int I) 559 These functions convert I, a signed integer, to floating point. 560 561 -- Runtime Function: float __floatdisf (long I) 562 -- Runtime Function: double __floatdidf (long I) 563 -- Runtime Function: long double __floatditf (long I) 564 -- Runtime Function: long double __floatdixf (long I) 565 These functions convert I, a signed long, to floating point. 566 567 -- Runtime Function: float __floattisf (long long I) 568 -- Runtime Function: double __floattidf (long long I) 569 -- Runtime Function: long double __floattitf (long long I) 570 -- Runtime Function: long double __floattixf (long long I) 571 These functions convert I, a signed long long, to floating point. 572 573 -- Runtime Function: float __floatunsisf (unsigned int I) 574 -- Runtime Function: double __floatunsidf (unsigned int I) 575 -- Runtime Function: long double __floatunsitf (unsigned int I) 576 -- Runtime Function: long double __floatunsixf (unsigned int I) 577 These functions convert I, an unsigned integer, to floating point. 578 579 -- Runtime Function: float __floatundisf (unsigned long I) 580 -- Runtime Function: double __floatundidf (unsigned long I) 581 -- Runtime Function: long double __floatunditf (unsigned long I) 582 -- Runtime Function: long double __floatundixf (unsigned long I) 583 These functions convert I, an unsigned long, to floating point. 584 585 -- Runtime Function: float __floatuntisf (unsigned long long I) 586 -- Runtime Function: double __floatuntidf (unsigned long long I) 587 -- Runtime Function: long double __floatuntitf (unsigned long long I) 588 -- Runtime Function: long double __floatuntixf (unsigned long long I) 589 These functions convert I, an unsigned long long, to floating 590 point. 591 5924.2.3 Comparison functions 593-------------------------- 594 595There are two sets of basic comparison functions. 596 597 -- Runtime Function: int __cmpsf2 (float A, float B) 598 -- Runtime Function: int __cmpdf2 (double A, double B) 599 -- Runtime Function: int __cmptf2 (long double A, long double B) 600 These functions calculate a <=> b. That is, if A is less than B, 601 they return -1; if A is greater than B, they return 1; and if A and 602 B are equal they return 0. If either argument is NaN they return 603 1, but you should not rely on this; if NaN is a possibility, use 604 one of the higher-level comparison functions. 605 606 -- Runtime Function: int __unordsf2 (float A, float B) 607 -- Runtime Function: int __unorddf2 (double A, double B) 608 -- Runtime Function: int __unordtf2 (long double A, long double B) 609 These functions return a nonzero value if either argument is NaN, 610 otherwise 0. 611 612 There is also a complete group of higher level functions which 613correspond directly to comparison operators. They implement the ISO C 614semantics for floating-point comparisons, taking NaN into account. Pay 615careful attention to the return values defined for each set. Under the 616hood, all of these routines are implemented as 617 618 if (__unordXf2 (a, b)) 619 return E; 620 return __cmpXf2 (a, b); 621 622where E is a constant chosen to give the proper behavior for NaN. Thus, 623the meaning of the return value is different for each set. Do not rely 624on this implementation; only the semantics documented below are 625guaranteed. 626 627 -- Runtime Function: int __eqsf2 (float A, float B) 628 -- Runtime Function: int __eqdf2 (double A, double B) 629 -- Runtime Function: int __eqtf2 (long double A, long double B) 630 These functions return zero if neither argument is NaN, and A and B 631 are equal. 632 633 -- Runtime Function: int __nesf2 (float A, float B) 634 -- Runtime Function: int __nedf2 (double A, double B) 635 -- Runtime Function: int __netf2 (long double A, long double B) 636 These functions return a nonzero value if either argument is NaN, 637 or if A and B are unequal. 638 639 -- Runtime Function: int __gesf2 (float A, float B) 640 -- Runtime Function: int __gedf2 (double A, double B) 641 -- Runtime Function: int __getf2 (long double A, long double B) 642 These functions return a value greater than or equal to zero if 643 neither argument is NaN, and A is greater than or equal to B. 644 645 -- Runtime Function: int __ltsf2 (float A, float B) 646 -- Runtime Function: int __ltdf2 (double A, double B) 647 -- Runtime Function: int __lttf2 (long double A, long double B) 648 These functions return a value less than zero if neither argument 649 is NaN, and A is strictly less than B. 650 651 -- Runtime Function: int __lesf2 (float A, float B) 652 -- Runtime Function: int __ledf2 (double A, double B) 653 -- Runtime Function: int __letf2 (long double A, long double B) 654 These functions return a value less than or equal to zero if 655 neither argument is NaN, and A is less than or equal to B. 656 657 -- Runtime Function: int __gtsf2 (float A, float B) 658 -- Runtime Function: int __gtdf2 (double A, double B) 659 -- Runtime Function: int __gttf2 (long double A, long double B) 660 These functions return a value greater than zero if neither 661 argument is NaN, and A is strictly greater than B. 662 6634.2.4 Other floating-point functions 664------------------------------------ 665 666 -- Runtime Function: float __powisf2 (float A, int B) 667 -- Runtime Function: double __powidf2 (double A, int B) 668 -- Runtime Function: long double __powitf2 (long double A, int B) 669 -- Runtime Function: long double __powixf2 (long double A, int B) 670 These functions convert raise A to the power B. 671 672 -- Runtime Function: complex float __mulsc3 (float A, float B, float C, 673 float D) 674 -- Runtime Function: complex double __muldc3 (double A, double B, 675 double C, double D) 676 -- Runtime Function: complex long double __multc3 (long double A, long 677 double B, long double C, long double D) 678 -- Runtime Function: complex long double __mulxc3 (long double A, long 679 double B, long double C, long double D) 680 These functions return the product of A + iB and C + iD, following 681 the rules of C99 Annex G. 682 683 -- Runtime Function: complex float __divsc3 (float A, float B, float C, 684 float D) 685 -- Runtime Function: complex double __divdc3 (double A, double B, 686 double C, double D) 687 -- Runtime Function: complex long double __divtc3 (long double A, long 688 double B, long double C, long double D) 689 -- Runtime Function: complex long double __divxc3 (long double A, long 690 double B, long double C, long double D) 691 These functions return the quotient of A + iB and C + iD (i.e., (A 692 + iB) / (C + iD)), following the rules of C99 Annex G. 693 694 695File: gccint.info, Node: Decimal float library routines, Next: Fixed-point fractional library routines, Prev: Soft float library routines, Up: Libgcc 696 6974.3 Routines for decimal floating point emulation 698================================================= 699 700The software decimal floating point library implements IEEE 754-2008 701decimal floating point arithmetic and is only activated on selected 702targets. 703 704 The software decimal floating point library supports either DPD 705(Densely Packed Decimal) or BID (Binary Integer Decimal) encoding as 706selected at configure time. 707 7084.3.1 Arithmetic functions 709-------------------------- 710 711 -- Runtime Function: _Decimal32 __dpd_addsd3 (_Decimal32 A, _Decimal32 712 B) 713 -- Runtime Function: _Decimal32 __bid_addsd3 (_Decimal32 A, _Decimal32 714 B) 715 -- Runtime Function: _Decimal64 __dpd_adddd3 (_Decimal64 A, _Decimal64 716 B) 717 -- Runtime Function: _Decimal64 __bid_adddd3 (_Decimal64 A, _Decimal64 718 B) 719 -- Runtime Function: _Decimal128 __dpd_addtd3 (_Decimal128 A, 720 _Decimal128 B) 721 -- Runtime Function: _Decimal128 __bid_addtd3 (_Decimal128 A, 722 _Decimal128 B) 723 These functions return the sum of A and B. 724 725 -- Runtime Function: _Decimal32 __dpd_subsd3 (_Decimal32 A, _Decimal32 726 B) 727 -- Runtime Function: _Decimal32 __bid_subsd3 (_Decimal32 A, _Decimal32 728 B) 729 -- Runtime Function: _Decimal64 __dpd_subdd3 (_Decimal64 A, _Decimal64 730 B) 731 -- Runtime Function: _Decimal64 __bid_subdd3 (_Decimal64 A, _Decimal64 732 B) 733 -- Runtime Function: _Decimal128 __dpd_subtd3 (_Decimal128 A, 734 _Decimal128 B) 735 -- Runtime Function: _Decimal128 __bid_subtd3 (_Decimal128 A, 736 _Decimal128 B) 737 These functions return the difference between B and A; that is, 738 A - B. 739 740 -- Runtime Function: _Decimal32 __dpd_mulsd3 (_Decimal32 A, _Decimal32 741 B) 742 -- Runtime Function: _Decimal32 __bid_mulsd3 (_Decimal32 A, _Decimal32 743 B) 744 -- Runtime Function: _Decimal64 __dpd_muldd3 (_Decimal64 A, _Decimal64 745 B) 746 -- Runtime Function: _Decimal64 __bid_muldd3 (_Decimal64 A, _Decimal64 747 B) 748 -- Runtime Function: _Decimal128 __dpd_multd3 (_Decimal128 A, 749 _Decimal128 B) 750 -- Runtime Function: _Decimal128 __bid_multd3 (_Decimal128 A, 751 _Decimal128 B) 752 These functions return the product of A and B. 753 754 -- Runtime Function: _Decimal32 __dpd_divsd3 (_Decimal32 A, _Decimal32 755 B) 756 -- Runtime Function: _Decimal32 __bid_divsd3 (_Decimal32 A, _Decimal32 757 B) 758 -- Runtime Function: _Decimal64 __dpd_divdd3 (_Decimal64 A, _Decimal64 759 B) 760 -- Runtime Function: _Decimal64 __bid_divdd3 (_Decimal64 A, _Decimal64 761 B) 762 -- Runtime Function: _Decimal128 __dpd_divtd3 (_Decimal128 A, 763 _Decimal128 B) 764 -- Runtime Function: _Decimal128 __bid_divtd3 (_Decimal128 A, 765 _Decimal128 B) 766 These functions return the quotient of A and B; that is, A / B. 767 768 -- Runtime Function: _Decimal32 __dpd_negsd2 (_Decimal32 A) 769 -- Runtime Function: _Decimal32 __bid_negsd2 (_Decimal32 A) 770 -- Runtime Function: _Decimal64 __dpd_negdd2 (_Decimal64 A) 771 -- Runtime Function: _Decimal64 __bid_negdd2 (_Decimal64 A) 772 -- Runtime Function: _Decimal128 __dpd_negtd2 (_Decimal128 A) 773 -- Runtime Function: _Decimal128 __bid_negtd2 (_Decimal128 A) 774 These functions return the negation of A. They simply flip the 775 sign bit, so they can produce negative zero and negative NaN. 776 7774.3.2 Conversion functions 778-------------------------- 779 780 -- Runtime Function: _Decimal64 __dpd_extendsddd2 (_Decimal32 A) 781 -- Runtime Function: _Decimal64 __bid_extendsddd2 (_Decimal32 A) 782 -- Runtime Function: _Decimal128 __dpd_extendsdtd2 (_Decimal32 A) 783 -- Runtime Function: _Decimal128 __bid_extendsdtd2 (_Decimal32 A) 784 -- Runtime Function: _Decimal128 __dpd_extendddtd2 (_Decimal64 A) 785 -- Runtime Function: _Decimal128 __bid_extendddtd2 (_Decimal64 A) 786 -- Runtime Function: _Decimal32 __dpd_truncddsd2 (_Decimal64 A) 787 -- Runtime Function: _Decimal32 __bid_truncddsd2 (_Decimal64 A) 788 -- Runtime Function: _Decimal32 __dpd_trunctdsd2 (_Decimal128 A) 789 -- Runtime Function: _Decimal32 __bid_trunctdsd2 (_Decimal128 A) 790 -- Runtime Function: _Decimal64 __dpd_trunctddd2 (_Decimal128 A) 791 -- Runtime Function: _Decimal64 __bid_trunctddd2 (_Decimal128 A) 792 These functions convert the value A from one decimal floating type 793 to another. 794 795 -- Runtime Function: _Decimal64 __dpd_extendsfdd (float A) 796 -- Runtime Function: _Decimal64 __bid_extendsfdd (float A) 797 -- Runtime Function: _Decimal128 __dpd_extendsftd (float A) 798 -- Runtime Function: _Decimal128 __bid_extendsftd (float A) 799 -- Runtime Function: _Decimal128 __dpd_extenddftd (double A) 800 -- Runtime Function: _Decimal128 __bid_extenddftd (double A) 801 -- Runtime Function: _Decimal128 __dpd_extendxftd (long double A) 802 -- Runtime Function: _Decimal128 __bid_extendxftd (long double A) 803 -- Runtime Function: _Decimal32 __dpd_truncdfsd (double A) 804 -- Runtime Function: _Decimal32 __bid_truncdfsd (double A) 805 -- Runtime Function: _Decimal32 __dpd_truncxfsd (long double A) 806 -- Runtime Function: _Decimal32 __bid_truncxfsd (long double A) 807 -- Runtime Function: _Decimal32 __dpd_trunctfsd (long double A) 808 -- Runtime Function: _Decimal32 __bid_trunctfsd (long double A) 809 -- Runtime Function: _Decimal64 __dpd_truncxfdd (long double A) 810 -- Runtime Function: _Decimal64 __bid_truncxfdd (long double A) 811 -- Runtime Function: _Decimal64 __dpd_trunctfdd (long double A) 812 -- Runtime Function: _Decimal64 __bid_trunctfdd (long double A) 813 These functions convert the value of A from a binary floating type 814 to a decimal floating type of a different size. 815 816 -- Runtime Function: float __dpd_truncddsf (_Decimal64 A) 817 -- Runtime Function: float __bid_truncddsf (_Decimal64 A) 818 -- Runtime Function: float __dpd_trunctdsf (_Decimal128 A) 819 -- Runtime Function: float __bid_trunctdsf (_Decimal128 A) 820 -- Runtime Function: double __dpd_extendsddf (_Decimal32 A) 821 -- Runtime Function: double __bid_extendsddf (_Decimal32 A) 822 -- Runtime Function: double __dpd_trunctddf (_Decimal128 A) 823 -- Runtime Function: double __bid_trunctddf (_Decimal128 A) 824 -- Runtime Function: long double __dpd_extendsdxf (_Decimal32 A) 825 -- Runtime Function: long double __bid_extendsdxf (_Decimal32 A) 826 -- Runtime Function: long double __dpd_extendddxf (_Decimal64 A) 827 -- Runtime Function: long double __bid_extendddxf (_Decimal64 A) 828 -- Runtime Function: long double __dpd_trunctdxf (_Decimal128 A) 829 -- Runtime Function: long double __bid_trunctdxf (_Decimal128 A) 830 -- Runtime Function: long double __dpd_extendsdtf (_Decimal32 A) 831 -- Runtime Function: long double __bid_extendsdtf (_Decimal32 A) 832 -- Runtime Function: long double __dpd_extendddtf (_Decimal64 A) 833 -- Runtime Function: long double __bid_extendddtf (_Decimal64 A) 834 These functions convert the value of A from a decimal floating type 835 to a binary floating type of a different size. 836 837 -- Runtime Function: _Decimal32 __dpd_extendsfsd (float A) 838 -- Runtime Function: _Decimal32 __bid_extendsfsd (float A) 839 -- Runtime Function: _Decimal64 __dpd_extenddfdd (double A) 840 -- Runtime Function: _Decimal64 __bid_extenddfdd (double A) 841 -- Runtime Function: _Decimal128 __dpd_extendtftd (long double A) 842 -- Runtime Function: _Decimal128 __bid_extendtftd (long double A) 843 -- Runtime Function: float __dpd_truncsdsf (_Decimal32 A) 844 -- Runtime Function: float __bid_truncsdsf (_Decimal32 A) 845 -- Runtime Function: double __dpd_truncdddf (_Decimal64 A) 846 -- Runtime Function: double __bid_truncdddf (_Decimal64 A) 847 -- Runtime Function: long double __dpd_trunctdtf (_Decimal128 A) 848 -- Runtime Function: long double __bid_trunctdtf (_Decimal128 A) 849 These functions convert the value of A between decimal and binary 850 floating types of the same size. 851 852 -- Runtime Function: int __dpd_fixsdsi (_Decimal32 A) 853 -- Runtime Function: int __bid_fixsdsi (_Decimal32 A) 854 -- Runtime Function: int __dpd_fixddsi (_Decimal64 A) 855 -- Runtime Function: int __bid_fixddsi (_Decimal64 A) 856 -- Runtime Function: int __dpd_fixtdsi (_Decimal128 A) 857 -- Runtime Function: int __bid_fixtdsi (_Decimal128 A) 858 These functions convert A to a signed integer. 859 860 -- Runtime Function: long __dpd_fixsddi (_Decimal32 A) 861 -- Runtime Function: long __bid_fixsddi (_Decimal32 A) 862 -- Runtime Function: long __dpd_fixdddi (_Decimal64 A) 863 -- Runtime Function: long __bid_fixdddi (_Decimal64 A) 864 -- Runtime Function: long __dpd_fixtddi (_Decimal128 A) 865 -- Runtime Function: long __bid_fixtddi (_Decimal128 A) 866 These functions convert A to a signed long. 867 868 -- Runtime Function: unsigned int __dpd_fixunssdsi (_Decimal32 A) 869 -- Runtime Function: unsigned int __bid_fixunssdsi (_Decimal32 A) 870 -- Runtime Function: unsigned int __dpd_fixunsddsi (_Decimal64 A) 871 -- Runtime Function: unsigned int __bid_fixunsddsi (_Decimal64 A) 872 -- Runtime Function: unsigned int __dpd_fixunstdsi (_Decimal128 A) 873 -- Runtime Function: unsigned int __bid_fixunstdsi (_Decimal128 A) 874 These functions convert A to an unsigned integer. Negative values 875 all become zero. 876 877 -- Runtime Function: unsigned long __dpd_fixunssddi (_Decimal32 A) 878 -- Runtime Function: unsigned long __bid_fixunssddi (_Decimal32 A) 879 -- Runtime Function: unsigned long __dpd_fixunsdddi (_Decimal64 A) 880 -- Runtime Function: unsigned long __bid_fixunsdddi (_Decimal64 A) 881 -- Runtime Function: unsigned long __dpd_fixunstddi (_Decimal128 A) 882 -- Runtime Function: unsigned long __bid_fixunstddi (_Decimal128 A) 883 These functions convert A to an unsigned long. Negative values all 884 become zero. 885 886 -- Runtime Function: _Decimal32 __dpd_floatsisd (int I) 887 -- Runtime Function: _Decimal32 __bid_floatsisd (int I) 888 -- Runtime Function: _Decimal64 __dpd_floatsidd (int I) 889 -- Runtime Function: _Decimal64 __bid_floatsidd (int I) 890 -- Runtime Function: _Decimal128 __dpd_floatsitd (int I) 891 -- Runtime Function: _Decimal128 __bid_floatsitd (int I) 892 These functions convert I, a signed integer, to decimal floating 893 point. 894 895 -- Runtime Function: _Decimal32 __dpd_floatdisd (long I) 896 -- Runtime Function: _Decimal32 __bid_floatdisd (long I) 897 -- Runtime Function: _Decimal64 __dpd_floatdidd (long I) 898 -- Runtime Function: _Decimal64 __bid_floatdidd (long I) 899 -- Runtime Function: _Decimal128 __dpd_floatditd (long I) 900 -- Runtime Function: _Decimal128 __bid_floatditd (long I) 901 These functions convert I, a signed long, to decimal floating 902 point. 903 904 -- Runtime Function: _Decimal32 __dpd_floatunssisd (unsigned int I) 905 -- Runtime Function: _Decimal32 __bid_floatunssisd (unsigned int I) 906 -- Runtime Function: _Decimal64 __dpd_floatunssidd (unsigned int I) 907 -- Runtime Function: _Decimal64 __bid_floatunssidd (unsigned int I) 908 -- Runtime Function: _Decimal128 __dpd_floatunssitd (unsigned int I) 909 -- Runtime Function: _Decimal128 __bid_floatunssitd (unsigned int I) 910 These functions convert I, an unsigned integer, to decimal floating 911 point. 912 913 -- Runtime Function: _Decimal32 __dpd_floatunsdisd (unsigned long I) 914 -- Runtime Function: _Decimal32 __bid_floatunsdisd (unsigned long I) 915 -- Runtime Function: _Decimal64 __dpd_floatunsdidd (unsigned long I) 916 -- Runtime Function: _Decimal64 __bid_floatunsdidd (unsigned long I) 917 -- Runtime Function: _Decimal128 __dpd_floatunsditd (unsigned long I) 918 -- Runtime Function: _Decimal128 __bid_floatunsditd (unsigned long I) 919 These functions convert I, an unsigned long, to decimal floating 920 point. 921 9224.3.3 Comparison functions 923-------------------------- 924 925 -- Runtime Function: int __dpd_unordsd2 (_Decimal32 A, _Decimal32 B) 926 -- Runtime Function: int __bid_unordsd2 (_Decimal32 A, _Decimal32 B) 927 -- Runtime Function: int __dpd_unorddd2 (_Decimal64 A, _Decimal64 B) 928 -- Runtime Function: int __bid_unorddd2 (_Decimal64 A, _Decimal64 B) 929 -- Runtime Function: int __dpd_unordtd2 (_Decimal128 A, _Decimal128 B) 930 -- Runtime Function: int __bid_unordtd2 (_Decimal128 A, _Decimal128 B) 931 These functions return a nonzero value if either argument is NaN, 932 otherwise 0. 933 934 There is also a complete group of higher level functions which 935correspond directly to comparison operators. They implement the ISO C 936semantics for floating-point comparisons, taking NaN into account. Pay 937careful attention to the return values defined for each set. Under the 938hood, all of these routines are implemented as 939 940 if (__bid_unordXd2 (a, b)) 941 return E; 942 return __bid_cmpXd2 (a, b); 943 944where E is a constant chosen to give the proper behavior for NaN. Thus, 945the meaning of the return value is different for each set. Do not rely 946on this implementation; only the semantics documented below are 947guaranteed. 948 949 -- Runtime Function: int __dpd_eqsd2 (_Decimal32 A, _Decimal32 B) 950 -- Runtime Function: int __bid_eqsd2 (_Decimal32 A, _Decimal32 B) 951 -- Runtime Function: int __dpd_eqdd2 (_Decimal64 A, _Decimal64 B) 952 -- Runtime Function: int __bid_eqdd2 (_Decimal64 A, _Decimal64 B) 953 -- Runtime Function: int __dpd_eqtd2 (_Decimal128 A, _Decimal128 B) 954 -- Runtime Function: int __bid_eqtd2 (_Decimal128 A, _Decimal128 B) 955 These functions return zero if neither argument is NaN, and A and B 956 are equal. 957 958 -- Runtime Function: int __dpd_nesd2 (_Decimal32 A, _Decimal32 B) 959 -- Runtime Function: int __bid_nesd2 (_Decimal32 A, _Decimal32 B) 960 -- Runtime Function: int __dpd_nedd2 (_Decimal64 A, _Decimal64 B) 961 -- Runtime Function: int __bid_nedd2 (_Decimal64 A, _Decimal64 B) 962 -- Runtime Function: int __dpd_netd2 (_Decimal128 A, _Decimal128 B) 963 -- Runtime Function: int __bid_netd2 (_Decimal128 A, _Decimal128 B) 964 These functions return a nonzero value if either argument is NaN, 965 or if A and B are unequal. 966 967 -- Runtime Function: int __dpd_gesd2 (_Decimal32 A, _Decimal32 B) 968 -- Runtime Function: int __bid_gesd2 (_Decimal32 A, _Decimal32 B) 969 -- Runtime Function: int __dpd_gedd2 (_Decimal64 A, _Decimal64 B) 970 -- Runtime Function: int __bid_gedd2 (_Decimal64 A, _Decimal64 B) 971 -- Runtime Function: int __dpd_getd2 (_Decimal128 A, _Decimal128 B) 972 -- Runtime Function: int __bid_getd2 (_Decimal128 A, _Decimal128 B) 973 These functions return a value greater than or equal to zero if 974 neither argument is NaN, and A is greater than or equal to B. 975 976 -- Runtime Function: int __dpd_ltsd2 (_Decimal32 A, _Decimal32 B) 977 -- Runtime Function: int __bid_ltsd2 (_Decimal32 A, _Decimal32 B) 978 -- Runtime Function: int __dpd_ltdd2 (_Decimal64 A, _Decimal64 B) 979 -- Runtime Function: int __bid_ltdd2 (_Decimal64 A, _Decimal64 B) 980 -- Runtime Function: int __dpd_lttd2 (_Decimal128 A, _Decimal128 B) 981 -- Runtime Function: int __bid_lttd2 (_Decimal128 A, _Decimal128 B) 982 These functions return a value less than zero if neither argument 983 is NaN, and A is strictly less than B. 984 985 -- Runtime Function: int __dpd_lesd2 (_Decimal32 A, _Decimal32 B) 986 -- Runtime Function: int __bid_lesd2 (_Decimal32 A, _Decimal32 B) 987 -- Runtime Function: int __dpd_ledd2 (_Decimal64 A, _Decimal64 B) 988 -- Runtime Function: int __bid_ledd2 (_Decimal64 A, _Decimal64 B) 989 -- Runtime Function: int __dpd_letd2 (_Decimal128 A, _Decimal128 B) 990 -- Runtime Function: int __bid_letd2 (_Decimal128 A, _Decimal128 B) 991 These functions return a value less than or equal to zero if 992 neither argument is NaN, and A is less than or equal to B. 993 994 -- Runtime Function: int __dpd_gtsd2 (_Decimal32 A, _Decimal32 B) 995 -- Runtime Function: int __bid_gtsd2 (_Decimal32 A, _Decimal32 B) 996 -- Runtime Function: int __dpd_gtdd2 (_Decimal64 A, _Decimal64 B) 997 -- Runtime Function: int __bid_gtdd2 (_Decimal64 A, _Decimal64 B) 998 -- Runtime Function: int __dpd_gttd2 (_Decimal128 A, _Decimal128 B) 999 -- Runtime Function: int __bid_gttd2 (_Decimal128 A, _Decimal128 B) 1000 These functions return a value greater than zero if neither 1001 argument is NaN, and A is strictly greater than B. 1002 1003 1004File: gccint.info, Node: Fixed-point fractional library routines, Next: Exception handling routines, Prev: Decimal float library routines, Up: Libgcc 1005 10064.4 Routines for fixed-point fractional emulation 1007================================================= 1008 1009The software fixed-point library implements fixed-point fractional 1010arithmetic, and is only activated on selected targets. 1011 1012 For ease of comprehension 'fract' is an alias for the '_Fract' type, 1013'accum' an alias for '_Accum', and 'sat' an alias for '_Sat'. 1014 1015 For illustrative purposes, in this section the fixed-point fractional 1016type 'short fract' is assumed to correspond to machine mode 'QQmode'; 1017'unsigned short fract' to 'UQQmode'; 'fract' to 'HQmode'; 1018'unsigned fract' to 'UHQmode'; 'long fract' to 'SQmode'; 1019'unsigned long fract' to 'USQmode'; 'long long fract' to 'DQmode'; and 1020'unsigned long long fract' to 'UDQmode'. Similarly the fixed-point 1021accumulator type 'short accum' corresponds to 'HAmode'; 1022'unsigned short accum' to 'UHAmode'; 'accum' to 'SAmode'; 1023'unsigned accum' to 'USAmode'; 'long accum' to 'DAmode'; 1024'unsigned long accum' to 'UDAmode'; 'long long accum' to 'TAmode'; and 1025'unsigned long long accum' to 'UTAmode'. 1026 10274.4.1 Arithmetic functions 1028-------------------------- 1029 1030 -- Runtime Function: short fract __addqq3 (short fract A, short fract 1031 B) 1032 -- Runtime Function: fract __addhq3 (fract A, fract B) 1033 -- Runtime Function: long fract __addsq3 (long fract A, long fract B) 1034 -- Runtime Function: long long fract __adddq3 (long long fract A, long 1035 long fract B) 1036 -- Runtime Function: unsigned short fract __adduqq3 (unsigned short 1037 fract A, unsigned short fract B) 1038 -- Runtime Function: unsigned fract __adduhq3 (unsigned fract A, 1039 unsigned fract B) 1040 -- Runtime Function: unsigned long fract __addusq3 (unsigned long fract 1041 A, unsigned long fract B) 1042 -- Runtime Function: unsigned long long fract __addudq3 (unsigned long 1043 long fract A, unsigned long long fract B) 1044 -- Runtime Function: short accum __addha3 (short accum A, short accum 1045 B) 1046 -- Runtime Function: accum __addsa3 (accum A, accum B) 1047 -- Runtime Function: long accum __addda3 (long accum A, long accum B) 1048 -- Runtime Function: long long accum __addta3 (long long accum A, long 1049 long accum B) 1050 -- Runtime Function: unsigned short accum __adduha3 (unsigned short 1051 accum A, unsigned short accum B) 1052 -- Runtime Function: unsigned accum __addusa3 (unsigned accum A, 1053 unsigned accum B) 1054 -- Runtime Function: unsigned long accum __adduda3 (unsigned long accum 1055 A, unsigned long accum B) 1056 -- Runtime Function: unsigned long long accum __adduta3 (unsigned long 1057 long accum A, unsigned long long accum B) 1058 These functions return the sum of A and B. 1059 1060 -- Runtime Function: short fract __ssaddqq3 (short fract A, short fract 1061 B) 1062 -- Runtime Function: fract __ssaddhq3 (fract A, fract B) 1063 -- Runtime Function: long fract __ssaddsq3 (long fract A, long fract B) 1064 -- Runtime Function: long long fract __ssadddq3 (long long fract A, 1065 long long fract B) 1066 -- Runtime Function: short accum __ssaddha3 (short accum A, short accum 1067 B) 1068 -- Runtime Function: accum __ssaddsa3 (accum A, accum B) 1069 -- Runtime Function: long accum __ssaddda3 (long accum A, long accum B) 1070 -- Runtime Function: long long accum __ssaddta3 (long long accum A, 1071 long long accum B) 1072 These functions return the sum of A and B with signed saturation. 1073 1074 -- Runtime Function: unsigned short fract __usadduqq3 (unsigned short 1075 fract A, unsigned short fract B) 1076 -- Runtime Function: unsigned fract __usadduhq3 (unsigned fract A, 1077 unsigned fract B) 1078 -- Runtime Function: unsigned long fract __usaddusq3 (unsigned long 1079 fract A, unsigned long fract B) 1080 -- Runtime Function: unsigned long long fract __usaddudq3 (unsigned 1081 long long fract A, unsigned long long fract B) 1082 -- Runtime Function: unsigned short accum __usadduha3 (unsigned short 1083 accum A, unsigned short accum B) 1084 -- Runtime Function: unsigned accum __usaddusa3 (unsigned accum A, 1085 unsigned accum B) 1086 -- Runtime Function: unsigned long accum __usadduda3 (unsigned long 1087 accum A, unsigned long accum B) 1088 -- Runtime Function: unsigned long long accum __usadduta3 (unsigned 1089 long long accum A, unsigned long long accum B) 1090 These functions return the sum of A and B with unsigned saturation. 1091 1092 -- Runtime Function: short fract __subqq3 (short fract A, short fract 1093 B) 1094 -- Runtime Function: fract __subhq3 (fract A, fract B) 1095 -- Runtime Function: long fract __subsq3 (long fract A, long fract B) 1096 -- Runtime Function: long long fract __subdq3 (long long fract A, long 1097 long fract B) 1098 -- Runtime Function: unsigned short fract __subuqq3 (unsigned short 1099 fract A, unsigned short fract B) 1100 -- Runtime Function: unsigned fract __subuhq3 (unsigned fract A, 1101 unsigned fract B) 1102 -- Runtime Function: unsigned long fract __subusq3 (unsigned long fract 1103 A, unsigned long fract B) 1104 -- Runtime Function: unsigned long long fract __subudq3 (unsigned long 1105 long fract A, unsigned long long fract B) 1106 -- Runtime Function: short accum __subha3 (short accum A, short accum 1107 B) 1108 -- Runtime Function: accum __subsa3 (accum A, accum B) 1109 -- Runtime Function: long accum __subda3 (long accum A, long accum B) 1110 -- Runtime Function: long long accum __subta3 (long long accum A, long 1111 long accum B) 1112 -- Runtime Function: unsigned short accum __subuha3 (unsigned short 1113 accum A, unsigned short accum B) 1114 -- Runtime Function: unsigned accum __subusa3 (unsigned accum A, 1115 unsigned accum B) 1116 -- Runtime Function: unsigned long accum __subuda3 (unsigned long accum 1117 A, unsigned long accum B) 1118 -- Runtime Function: unsigned long long accum __subuta3 (unsigned long 1119 long accum A, unsigned long long accum B) 1120 These functions return the difference of A and B; that is, 'A - B'. 1121 1122 -- Runtime Function: short fract __sssubqq3 (short fract A, short fract 1123 B) 1124 -- Runtime Function: fract __sssubhq3 (fract A, fract B) 1125 -- Runtime Function: long fract __sssubsq3 (long fract A, long fract B) 1126 -- Runtime Function: long long fract __sssubdq3 (long long fract A, 1127 long long fract B) 1128 -- Runtime Function: short accum __sssubha3 (short accum A, short accum 1129 B) 1130 -- Runtime Function: accum __sssubsa3 (accum A, accum B) 1131 -- Runtime Function: long accum __sssubda3 (long accum A, long accum B) 1132 -- Runtime Function: long long accum __sssubta3 (long long accum A, 1133 long long accum B) 1134 These functions return the difference of A and B with signed 1135 saturation; that is, 'A - B'. 1136 1137 -- Runtime Function: unsigned short fract __ussubuqq3 (unsigned short 1138 fract A, unsigned short fract B) 1139 -- Runtime Function: unsigned fract __ussubuhq3 (unsigned fract A, 1140 unsigned fract B) 1141 -- Runtime Function: unsigned long fract __ussubusq3 (unsigned long 1142 fract A, unsigned long fract B) 1143 -- Runtime Function: unsigned long long fract __ussubudq3 (unsigned 1144 long long fract A, unsigned long long fract B) 1145 -- Runtime Function: unsigned short accum __ussubuha3 (unsigned short 1146 accum A, unsigned short accum B) 1147 -- Runtime Function: unsigned accum __ussubusa3 (unsigned accum A, 1148 unsigned accum B) 1149 -- Runtime Function: unsigned long accum __ussubuda3 (unsigned long 1150 accum A, unsigned long accum B) 1151 -- Runtime Function: unsigned long long accum __ussubuta3 (unsigned 1152 long long accum A, unsigned long long accum B) 1153 These functions return the difference of A and B with unsigned 1154 saturation; that is, 'A - B'. 1155 1156 -- Runtime Function: short fract __mulqq3 (short fract A, short fract 1157 B) 1158 -- Runtime Function: fract __mulhq3 (fract A, fract B) 1159 -- Runtime Function: long fract __mulsq3 (long fract A, long fract B) 1160 -- Runtime Function: long long fract __muldq3 (long long fract A, long 1161 long fract B) 1162 -- Runtime Function: unsigned short fract __muluqq3 (unsigned short 1163 fract A, unsigned short fract B) 1164 -- Runtime Function: unsigned fract __muluhq3 (unsigned fract A, 1165 unsigned fract B) 1166 -- Runtime Function: unsigned long fract __mulusq3 (unsigned long fract 1167 A, unsigned long fract B) 1168 -- Runtime Function: unsigned long long fract __muludq3 (unsigned long 1169 long fract A, unsigned long long fract B) 1170 -- Runtime Function: short accum __mulha3 (short accum A, short accum 1171 B) 1172 -- Runtime Function: accum __mulsa3 (accum A, accum B) 1173 -- Runtime Function: long accum __mulda3 (long accum A, long accum B) 1174 -- Runtime Function: long long accum __multa3 (long long accum A, long 1175 long accum B) 1176 -- Runtime Function: unsigned short accum __muluha3 (unsigned short 1177 accum A, unsigned short accum B) 1178 -- Runtime Function: unsigned accum __mulusa3 (unsigned accum A, 1179 unsigned accum B) 1180 -- Runtime Function: unsigned long accum __muluda3 (unsigned long accum 1181 A, unsigned long accum B) 1182 -- Runtime Function: unsigned long long accum __muluta3 (unsigned long 1183 long accum A, unsigned long long accum B) 1184 These functions return the product of A and B. 1185 1186 -- Runtime Function: short fract __ssmulqq3 (short fract A, short fract 1187 B) 1188 -- Runtime Function: fract __ssmulhq3 (fract A, fract B) 1189 -- Runtime Function: long fract __ssmulsq3 (long fract A, long fract B) 1190 -- Runtime Function: long long fract __ssmuldq3 (long long fract A, 1191 long long fract B) 1192 -- Runtime Function: short accum __ssmulha3 (short accum A, short accum 1193 B) 1194 -- Runtime Function: accum __ssmulsa3 (accum A, accum B) 1195 -- Runtime Function: long accum __ssmulda3 (long accum A, long accum B) 1196 -- Runtime Function: long long accum __ssmulta3 (long long accum A, 1197 long long accum B) 1198 These functions return the product of A and B with signed 1199 saturation. 1200 1201 -- Runtime Function: unsigned short fract __usmuluqq3 (unsigned short 1202 fract A, unsigned short fract B) 1203 -- Runtime Function: unsigned fract __usmuluhq3 (unsigned fract A, 1204 unsigned fract B) 1205 -- Runtime Function: unsigned long fract __usmulusq3 (unsigned long 1206 fract A, unsigned long fract B) 1207 -- Runtime Function: unsigned long long fract __usmuludq3 (unsigned 1208 long long fract A, unsigned long long fract B) 1209 -- Runtime Function: unsigned short accum __usmuluha3 (unsigned short 1210 accum A, unsigned short accum B) 1211 -- Runtime Function: unsigned accum __usmulusa3 (unsigned accum A, 1212 unsigned accum B) 1213 -- Runtime Function: unsigned long accum __usmuluda3 (unsigned long 1214 accum A, unsigned long accum B) 1215 -- Runtime Function: unsigned long long accum __usmuluta3 (unsigned 1216 long long accum A, unsigned long long accum B) 1217 These functions return the product of A and B with unsigned 1218 saturation. 1219 1220 -- Runtime Function: short fract __divqq3 (short fract A, short fract 1221 B) 1222 -- Runtime Function: fract __divhq3 (fract A, fract B) 1223 -- Runtime Function: long fract __divsq3 (long fract A, long fract B) 1224 -- Runtime Function: long long fract __divdq3 (long long fract A, long 1225 long fract B) 1226 -- Runtime Function: short accum __divha3 (short accum A, short accum 1227 B) 1228 -- Runtime Function: accum __divsa3 (accum A, accum B) 1229 -- Runtime Function: long accum __divda3 (long accum A, long accum B) 1230 -- Runtime Function: long long accum __divta3 (long long accum A, long 1231 long accum B) 1232 These functions return the quotient of the signed division of A and 1233 B. 1234 1235 -- Runtime Function: unsigned short fract __udivuqq3 (unsigned short 1236 fract A, unsigned short fract B) 1237 -- Runtime Function: unsigned fract __udivuhq3 (unsigned fract A, 1238 unsigned fract B) 1239 -- Runtime Function: unsigned long fract __udivusq3 (unsigned long 1240 fract A, unsigned long fract B) 1241 -- Runtime Function: unsigned long long fract __udivudq3 (unsigned long 1242 long fract A, unsigned long long fract B) 1243 -- Runtime Function: unsigned short accum __udivuha3 (unsigned short 1244 accum A, unsigned short accum B) 1245 -- Runtime Function: unsigned accum __udivusa3 (unsigned accum A, 1246 unsigned accum B) 1247 -- Runtime Function: unsigned long accum __udivuda3 (unsigned long 1248 accum A, unsigned long accum B) 1249 -- Runtime Function: unsigned long long accum __udivuta3 (unsigned long 1250 long accum A, unsigned long long accum B) 1251 These functions return the quotient of the unsigned division of A 1252 and B. 1253 1254 -- Runtime Function: short fract __ssdivqq3 (short fract A, short fract 1255 B) 1256 -- Runtime Function: fract __ssdivhq3 (fract A, fract B) 1257 -- Runtime Function: long fract __ssdivsq3 (long fract A, long fract B) 1258 -- Runtime Function: long long fract __ssdivdq3 (long long fract A, 1259 long long fract B) 1260 -- Runtime Function: short accum __ssdivha3 (short accum A, short accum 1261 B) 1262 -- Runtime Function: accum __ssdivsa3 (accum A, accum B) 1263 -- Runtime Function: long accum __ssdivda3 (long accum A, long accum B) 1264 -- Runtime Function: long long accum __ssdivta3 (long long accum A, 1265 long long accum B) 1266 These functions return the quotient of the signed division of A and 1267 B with signed saturation. 1268 1269 -- Runtime Function: unsigned short fract __usdivuqq3 (unsigned short 1270 fract A, unsigned short fract B) 1271 -- Runtime Function: unsigned fract __usdivuhq3 (unsigned fract A, 1272 unsigned fract B) 1273 -- Runtime Function: unsigned long fract __usdivusq3 (unsigned long 1274 fract A, unsigned long fract B) 1275 -- Runtime Function: unsigned long long fract __usdivudq3 (unsigned 1276 long long fract A, unsigned long long fract B) 1277 -- Runtime Function: unsigned short accum __usdivuha3 (unsigned short 1278 accum A, unsigned short accum B) 1279 -- Runtime Function: unsigned accum __usdivusa3 (unsigned accum A, 1280 unsigned accum B) 1281 -- Runtime Function: unsigned long accum __usdivuda3 (unsigned long 1282 accum A, unsigned long accum B) 1283 -- Runtime Function: unsigned long long accum __usdivuta3 (unsigned 1284 long long accum A, unsigned long long accum B) 1285 These functions return the quotient of the unsigned division of A 1286 and B with unsigned saturation. 1287 1288 -- Runtime Function: short fract __negqq2 (short fract A) 1289 -- Runtime Function: fract __neghq2 (fract A) 1290 -- Runtime Function: long fract __negsq2 (long fract A) 1291 -- Runtime Function: long long fract __negdq2 (long long fract A) 1292 -- Runtime Function: unsigned short fract __neguqq2 (unsigned short 1293 fract A) 1294 -- Runtime Function: unsigned fract __neguhq2 (unsigned fract A) 1295 -- Runtime Function: unsigned long fract __negusq2 (unsigned long fract 1296 A) 1297 -- Runtime Function: unsigned long long fract __negudq2 (unsigned long 1298 long fract A) 1299 -- Runtime Function: short accum __negha2 (short accum A) 1300 -- Runtime Function: accum __negsa2 (accum A) 1301 -- Runtime Function: long accum __negda2 (long accum A) 1302 -- Runtime Function: long long accum __negta2 (long long accum A) 1303 -- Runtime Function: unsigned short accum __neguha2 (unsigned short 1304 accum A) 1305 -- Runtime Function: unsigned accum __negusa2 (unsigned accum A) 1306 -- Runtime Function: unsigned long accum __neguda2 (unsigned long accum 1307 A) 1308 -- Runtime Function: unsigned long long accum __neguta2 (unsigned long 1309 long accum A) 1310 These functions return the negation of A. 1311 1312 -- Runtime Function: short fract __ssnegqq2 (short fract A) 1313 -- Runtime Function: fract __ssneghq2 (fract A) 1314 -- Runtime Function: long fract __ssnegsq2 (long fract A) 1315 -- Runtime Function: long long fract __ssnegdq2 (long long fract A) 1316 -- Runtime Function: short accum __ssnegha2 (short accum A) 1317 -- Runtime Function: accum __ssnegsa2 (accum A) 1318 -- Runtime Function: long accum __ssnegda2 (long accum A) 1319 -- Runtime Function: long long accum __ssnegta2 (long long accum A) 1320 These functions return the negation of A with signed saturation. 1321 1322 -- Runtime Function: unsigned short fract __usneguqq2 (unsigned short 1323 fract A) 1324 -- Runtime Function: unsigned fract __usneguhq2 (unsigned fract A) 1325 -- Runtime Function: unsigned long fract __usnegusq2 (unsigned long 1326 fract A) 1327 -- Runtime Function: unsigned long long fract __usnegudq2 (unsigned 1328 long long fract A) 1329 -- Runtime Function: unsigned short accum __usneguha2 (unsigned short 1330 accum A) 1331 -- Runtime Function: unsigned accum __usnegusa2 (unsigned accum A) 1332 -- Runtime Function: unsigned long accum __usneguda2 (unsigned long 1333 accum A) 1334 -- Runtime Function: unsigned long long accum __usneguta2 (unsigned 1335 long long accum A) 1336 These functions return the negation of A with unsigned saturation. 1337 1338 -- Runtime Function: short fract __ashlqq3 (short fract A, int B) 1339 -- Runtime Function: fract __ashlhq3 (fract A, int B) 1340 -- Runtime Function: long fract __ashlsq3 (long fract A, int B) 1341 -- Runtime Function: long long fract __ashldq3 (long long fract A, int 1342 B) 1343 -- Runtime Function: unsigned short fract __ashluqq3 (unsigned short 1344 fract A, int B) 1345 -- Runtime Function: unsigned fract __ashluhq3 (unsigned fract A, int 1346 B) 1347 -- Runtime Function: unsigned long fract __ashlusq3 (unsigned long 1348 fract A, int B) 1349 -- Runtime Function: unsigned long long fract __ashludq3 (unsigned long 1350 long fract A, int B) 1351 -- Runtime Function: short accum __ashlha3 (short accum A, int B) 1352 -- Runtime Function: accum __ashlsa3 (accum A, int B) 1353 -- Runtime Function: long accum __ashlda3 (long accum A, int B) 1354 -- Runtime Function: long long accum __ashlta3 (long long accum A, int 1355 B) 1356 -- Runtime Function: unsigned short accum __ashluha3 (unsigned short 1357 accum A, int B) 1358 -- Runtime Function: unsigned accum __ashlusa3 (unsigned accum A, int 1359 B) 1360 -- Runtime Function: unsigned long accum __ashluda3 (unsigned long 1361 accum A, int B) 1362 -- Runtime Function: unsigned long long accum __ashluta3 (unsigned long 1363 long accum A, int B) 1364 These functions return the result of shifting A left by B bits. 1365 1366 -- Runtime Function: short fract __ashrqq3 (short fract A, int B) 1367 -- Runtime Function: fract __ashrhq3 (fract A, int B) 1368 -- Runtime Function: long fract __ashrsq3 (long fract A, int B) 1369 -- Runtime Function: long long fract __ashrdq3 (long long fract A, int 1370 B) 1371 -- Runtime Function: short accum __ashrha3 (short accum A, int B) 1372 -- Runtime Function: accum __ashrsa3 (accum A, int B) 1373 -- Runtime Function: long accum __ashrda3 (long accum A, int B) 1374 -- Runtime Function: long long accum __ashrta3 (long long accum A, int 1375 B) 1376 These functions return the result of arithmetically shifting A 1377 right by B bits. 1378 1379 -- Runtime Function: unsigned short fract __lshruqq3 (unsigned short 1380 fract A, int B) 1381 -- Runtime Function: unsigned fract __lshruhq3 (unsigned fract A, int 1382 B) 1383 -- Runtime Function: unsigned long fract __lshrusq3 (unsigned long 1384 fract A, int B) 1385 -- Runtime Function: unsigned long long fract __lshrudq3 (unsigned long 1386 long fract A, int B) 1387 -- Runtime Function: unsigned short accum __lshruha3 (unsigned short 1388 accum A, int B) 1389 -- Runtime Function: unsigned accum __lshrusa3 (unsigned accum A, int 1390 B) 1391 -- Runtime Function: unsigned long accum __lshruda3 (unsigned long 1392 accum A, int B) 1393 -- Runtime Function: unsigned long long accum __lshruta3 (unsigned long 1394 long accum A, int B) 1395 These functions return the result of logically shifting A right by 1396 B bits. 1397 1398 -- Runtime Function: fract __ssashlhq3 (fract A, int B) 1399 -- Runtime Function: long fract __ssashlsq3 (long fract A, int B) 1400 -- Runtime Function: long long fract __ssashldq3 (long long fract A, 1401 int B) 1402 -- Runtime Function: short accum __ssashlha3 (short accum A, int B) 1403 -- Runtime Function: accum __ssashlsa3 (accum A, int B) 1404 -- Runtime Function: long accum __ssashlda3 (long accum A, int B) 1405 -- Runtime Function: long long accum __ssashlta3 (long long accum A, 1406 int B) 1407 These functions return the result of shifting A left by B bits with 1408 signed saturation. 1409 1410 -- Runtime Function: unsigned short fract __usashluqq3 (unsigned short 1411 fract A, int B) 1412 -- Runtime Function: unsigned fract __usashluhq3 (unsigned fract A, int 1413 B) 1414 -- Runtime Function: unsigned long fract __usashlusq3 (unsigned long 1415 fract A, int B) 1416 -- Runtime Function: unsigned long long fract __usashludq3 (unsigned 1417 long long fract A, int B) 1418 -- Runtime Function: unsigned short accum __usashluha3 (unsigned short 1419 accum A, int B) 1420 -- Runtime Function: unsigned accum __usashlusa3 (unsigned accum A, int 1421 B) 1422 -- Runtime Function: unsigned long accum __usashluda3 (unsigned long 1423 accum A, int B) 1424 -- Runtime Function: unsigned long long accum __usashluta3 (unsigned 1425 long long accum A, int B) 1426 These functions return the result of shifting A left by B bits with 1427 unsigned saturation. 1428 14294.4.2 Comparison functions 1430-------------------------- 1431 1432The following functions implement fixed-point comparisons. These 1433functions implement a low-level compare, upon which the higher level 1434comparison operators (such as less than and greater than or equal to) 1435can be constructed. The returned values lie in the range zero to two, 1436to allow the high-level operators to be implemented by testing the 1437returned result using either signed or unsigned comparison. 1438 1439 -- Runtime Function: int __cmpqq2 (short fract A, short fract B) 1440 -- Runtime Function: int __cmphq2 (fract A, fract B) 1441 -- Runtime Function: int __cmpsq2 (long fract A, long fract B) 1442 -- Runtime Function: int __cmpdq2 (long long fract A, long long fract 1443 B) 1444 -- Runtime Function: int __cmpuqq2 (unsigned short fract A, unsigned 1445 short fract B) 1446 -- Runtime Function: int __cmpuhq2 (unsigned fract A, unsigned fract B) 1447 -- Runtime Function: int __cmpusq2 (unsigned long fract A, unsigned 1448 long fract B) 1449 -- Runtime Function: int __cmpudq2 (unsigned long long fract A, 1450 unsigned long long fract B) 1451 -- Runtime Function: int __cmpha2 (short accum A, short accum B) 1452 -- Runtime Function: int __cmpsa2 (accum A, accum B) 1453 -- Runtime Function: int __cmpda2 (long accum A, long accum B) 1454 -- Runtime Function: int __cmpta2 (long long accum A, long long accum 1455 B) 1456 -- Runtime Function: int __cmpuha2 (unsigned short accum A, unsigned 1457 short accum B) 1458 -- Runtime Function: int __cmpusa2 (unsigned accum A, unsigned accum B) 1459 -- Runtime Function: int __cmpuda2 (unsigned long accum A, unsigned 1460 long accum B) 1461 -- Runtime Function: int __cmputa2 (unsigned long long accum A, 1462 unsigned long long accum B) 1463 These functions perform a signed or unsigned comparison of A and B 1464 (depending on the selected machine mode). If A is less than B, 1465 they return 0; if A is greater than B, they return 2; and if A and 1466 B are equal they return 1. 1467 14684.4.3 Conversion functions 1469-------------------------- 1470 1471 -- Runtime Function: fract __fractqqhq2 (short fract A) 1472 -- Runtime Function: long fract __fractqqsq2 (short fract A) 1473 -- Runtime Function: long long fract __fractqqdq2 (short fract A) 1474 -- Runtime Function: short accum __fractqqha (short fract A) 1475 -- Runtime Function: accum __fractqqsa (short fract A) 1476 -- Runtime Function: long accum __fractqqda (short fract A) 1477 -- Runtime Function: long long accum __fractqqta (short fract A) 1478 -- Runtime Function: unsigned short fract __fractqquqq (short fract A) 1479 -- Runtime Function: unsigned fract __fractqquhq (short fract A) 1480 -- Runtime Function: unsigned long fract __fractqqusq (short fract A) 1481 -- Runtime Function: unsigned long long fract __fractqqudq (short fract 1482 A) 1483 -- Runtime Function: unsigned short accum __fractqquha (short fract A) 1484 -- Runtime Function: unsigned accum __fractqqusa (short fract A) 1485 -- Runtime Function: unsigned long accum __fractqquda (short fract A) 1486 -- Runtime Function: unsigned long long accum __fractqquta (short fract 1487 A) 1488 -- Runtime Function: signed char __fractqqqi (short fract A) 1489 -- Runtime Function: short __fractqqhi (short fract A) 1490 -- Runtime Function: int __fractqqsi (short fract A) 1491 -- Runtime Function: long __fractqqdi (short fract A) 1492 -- Runtime Function: long long __fractqqti (short fract A) 1493 -- Runtime Function: float __fractqqsf (short fract A) 1494 -- Runtime Function: double __fractqqdf (short fract A) 1495 -- Runtime Function: short fract __fracthqqq2 (fract A) 1496 -- Runtime Function: long fract __fracthqsq2 (fract A) 1497 -- Runtime Function: long long fract __fracthqdq2 (fract A) 1498 -- Runtime Function: short accum __fracthqha (fract A) 1499 -- Runtime Function: accum __fracthqsa (fract A) 1500 -- Runtime Function: long accum __fracthqda (fract A) 1501 -- Runtime Function: long long accum __fracthqta (fract A) 1502 -- Runtime Function: unsigned short fract __fracthquqq (fract A) 1503 -- Runtime Function: unsigned fract __fracthquhq (fract A) 1504 -- Runtime Function: unsigned long fract __fracthqusq (fract A) 1505 -- Runtime Function: unsigned long long fract __fracthqudq (fract A) 1506 -- Runtime Function: unsigned short accum __fracthquha (fract A) 1507 -- Runtime Function: unsigned accum __fracthqusa (fract A) 1508 -- Runtime Function: unsigned long accum __fracthquda (fract A) 1509 -- Runtime Function: unsigned long long accum __fracthquta (fract A) 1510 -- Runtime Function: signed char __fracthqqi (fract A) 1511 -- Runtime Function: short __fracthqhi (fract A) 1512 -- Runtime Function: int __fracthqsi (fract A) 1513 -- Runtime Function: long __fracthqdi (fract A) 1514 -- Runtime Function: long long __fracthqti (fract A) 1515 -- Runtime Function: float __fracthqsf (fract A) 1516 -- Runtime Function: double __fracthqdf (fract A) 1517 -- Runtime Function: short fract __fractsqqq2 (long fract A) 1518 -- Runtime Function: fract __fractsqhq2 (long fract A) 1519 -- Runtime Function: long long fract __fractsqdq2 (long fract A) 1520 -- Runtime Function: short accum __fractsqha (long fract A) 1521 -- Runtime Function: accum __fractsqsa (long fract A) 1522 -- Runtime Function: long accum __fractsqda (long fract A) 1523 -- Runtime Function: long long accum __fractsqta (long fract A) 1524 -- Runtime Function: unsigned short fract __fractsquqq (long fract A) 1525 -- Runtime Function: unsigned fract __fractsquhq (long fract A) 1526 -- Runtime Function: unsigned long fract __fractsqusq (long fract A) 1527 -- Runtime Function: unsigned long long fract __fractsqudq (long fract 1528 A) 1529 -- Runtime Function: unsigned short accum __fractsquha (long fract A) 1530 -- Runtime Function: unsigned accum __fractsqusa (long fract A) 1531 -- Runtime Function: unsigned long accum __fractsquda (long fract A) 1532 -- Runtime Function: unsigned long long accum __fractsquta (long fract 1533 A) 1534 -- Runtime Function: signed char __fractsqqi (long fract A) 1535 -- Runtime Function: short __fractsqhi (long fract A) 1536 -- Runtime Function: int __fractsqsi (long fract A) 1537 -- Runtime Function: long __fractsqdi (long fract A) 1538 -- Runtime Function: long long __fractsqti (long fract A) 1539 -- Runtime Function: float __fractsqsf (long fract A) 1540 -- Runtime Function: double __fractsqdf (long fract A) 1541 -- Runtime Function: short fract __fractdqqq2 (long long fract A) 1542 -- Runtime Function: fract __fractdqhq2 (long long fract A) 1543 -- Runtime Function: long fract __fractdqsq2 (long long fract A) 1544 -- Runtime Function: short accum __fractdqha (long long fract A) 1545 -- Runtime Function: accum __fractdqsa (long long fract A) 1546 -- Runtime Function: long accum __fractdqda (long long fract A) 1547 -- Runtime Function: long long accum __fractdqta (long long fract A) 1548 -- Runtime Function: unsigned short fract __fractdquqq (long long fract 1549 A) 1550 -- Runtime Function: unsigned fract __fractdquhq (long long fract A) 1551 -- Runtime Function: unsigned long fract __fractdqusq (long long fract 1552 A) 1553 -- Runtime Function: unsigned long long fract __fractdqudq (long long 1554 fract A) 1555 -- Runtime Function: unsigned short accum __fractdquha (long long fract 1556 A) 1557 -- Runtime Function: unsigned accum __fractdqusa (long long fract A) 1558 -- Runtime Function: unsigned long accum __fractdquda (long long fract 1559 A) 1560 -- Runtime Function: unsigned long long accum __fractdquta (long long 1561 fract A) 1562 -- Runtime Function: signed char __fractdqqi (long long fract A) 1563 -- Runtime Function: short __fractdqhi (long long fract A) 1564 -- Runtime Function: int __fractdqsi (long long fract A) 1565 -- Runtime Function: long __fractdqdi (long long fract A) 1566 -- Runtime Function: long long __fractdqti (long long fract A) 1567 -- Runtime Function: float __fractdqsf (long long fract A) 1568 -- Runtime Function: double __fractdqdf (long long fract A) 1569 -- Runtime Function: short fract __fracthaqq (short accum A) 1570 -- Runtime Function: fract __fracthahq (short accum A) 1571 -- Runtime Function: long fract __fracthasq (short accum A) 1572 -- Runtime Function: long long fract __fracthadq (short accum A) 1573 -- Runtime Function: accum __fracthasa2 (short accum A) 1574 -- Runtime Function: long accum __fracthada2 (short accum A) 1575 -- Runtime Function: long long accum __fracthata2 (short accum A) 1576 -- Runtime Function: unsigned short fract __fracthauqq (short accum A) 1577 -- Runtime Function: unsigned fract __fracthauhq (short accum A) 1578 -- Runtime Function: unsigned long fract __fracthausq (short accum A) 1579 -- Runtime Function: unsigned long long fract __fracthaudq (short accum 1580 A) 1581 -- Runtime Function: unsigned short accum __fracthauha (short accum A) 1582 -- Runtime Function: unsigned accum __fracthausa (short accum A) 1583 -- Runtime Function: unsigned long accum __fracthauda (short accum A) 1584 -- Runtime Function: unsigned long long accum __fracthauta (short accum 1585 A) 1586 -- Runtime Function: signed char __fracthaqi (short accum A) 1587 -- Runtime Function: short __fracthahi (short accum A) 1588 -- Runtime Function: int __fracthasi (short accum A) 1589 -- Runtime Function: long __fracthadi (short accum A) 1590 -- Runtime Function: long long __fracthati (short accum A) 1591 -- Runtime Function: float __fracthasf (short accum A) 1592 -- Runtime Function: double __fracthadf (short accum A) 1593 -- Runtime Function: short fract __fractsaqq (accum A) 1594 -- Runtime Function: fract __fractsahq (accum A) 1595 -- Runtime Function: long fract __fractsasq (accum A) 1596 -- Runtime Function: long long fract __fractsadq (accum A) 1597 -- Runtime Function: short accum __fractsaha2 (accum A) 1598 -- Runtime Function: long accum __fractsada2 (accum A) 1599 -- Runtime Function: long long accum __fractsata2 (accum A) 1600 -- Runtime Function: unsigned short fract __fractsauqq (accum A) 1601 -- Runtime Function: unsigned fract __fractsauhq (accum A) 1602 -- Runtime Function: unsigned long fract __fractsausq (accum A) 1603 -- Runtime Function: unsigned long long fract __fractsaudq (accum A) 1604 -- Runtime Function: unsigned short accum __fractsauha (accum A) 1605 -- Runtime Function: unsigned accum __fractsausa (accum A) 1606 -- Runtime Function: unsigned long accum __fractsauda (accum A) 1607 -- Runtime Function: unsigned long long accum __fractsauta (accum A) 1608 -- Runtime Function: signed char __fractsaqi (accum A) 1609 -- Runtime Function: short __fractsahi (accum A) 1610 -- Runtime Function: int __fractsasi (accum A) 1611 -- Runtime Function: long __fractsadi (accum A) 1612 -- Runtime Function: long long __fractsati (accum A) 1613 -- Runtime Function: float __fractsasf (accum A) 1614 -- Runtime Function: double __fractsadf (accum A) 1615 -- Runtime Function: short fract __fractdaqq (long accum A) 1616 -- Runtime Function: fract __fractdahq (long accum A) 1617 -- Runtime Function: long fract __fractdasq (long accum A) 1618 -- Runtime Function: long long fract __fractdadq (long accum A) 1619 -- Runtime Function: short accum __fractdaha2 (long accum A) 1620 -- Runtime Function: accum __fractdasa2 (long accum A) 1621 -- Runtime Function: long long accum __fractdata2 (long accum A) 1622 -- Runtime Function: unsigned short fract __fractdauqq (long accum A) 1623 -- Runtime Function: unsigned fract __fractdauhq (long accum A) 1624 -- Runtime Function: unsigned long fract __fractdausq (long accum A) 1625 -- Runtime Function: unsigned long long fract __fractdaudq (long accum 1626 A) 1627 -- Runtime Function: unsigned short accum __fractdauha (long accum A) 1628 -- Runtime Function: unsigned accum __fractdausa (long accum A) 1629 -- Runtime Function: unsigned long accum __fractdauda (long accum A) 1630 -- Runtime Function: unsigned long long accum __fractdauta (long accum 1631 A) 1632 -- Runtime Function: signed char __fractdaqi (long accum A) 1633 -- Runtime Function: short __fractdahi (long accum A) 1634 -- Runtime Function: int __fractdasi (long accum A) 1635 -- Runtime Function: long __fractdadi (long accum A) 1636 -- Runtime Function: long long __fractdati (long accum A) 1637 -- Runtime Function: float __fractdasf (long accum A) 1638 -- Runtime Function: double __fractdadf (long accum A) 1639 -- Runtime Function: short fract __fracttaqq (long long accum A) 1640 -- Runtime Function: fract __fracttahq (long long accum A) 1641 -- Runtime Function: long fract __fracttasq (long long accum A) 1642 -- Runtime Function: long long fract __fracttadq (long long accum A) 1643 -- Runtime Function: short accum __fracttaha2 (long long accum A) 1644 -- Runtime Function: accum __fracttasa2 (long long accum A) 1645 -- Runtime Function: long accum __fracttada2 (long long accum A) 1646 -- Runtime Function: unsigned short fract __fracttauqq (long long accum 1647 A) 1648 -- Runtime Function: unsigned fract __fracttauhq (long long accum A) 1649 -- Runtime Function: unsigned long fract __fracttausq (long long accum 1650 A) 1651 -- Runtime Function: unsigned long long fract __fracttaudq (long long 1652 accum A) 1653 -- Runtime Function: unsigned short accum __fracttauha (long long accum 1654 A) 1655 -- Runtime Function: unsigned accum __fracttausa (long long accum A) 1656 -- Runtime Function: unsigned long accum __fracttauda (long long accum 1657 A) 1658 -- Runtime Function: unsigned long long accum __fracttauta (long long 1659 accum A) 1660 -- Runtime Function: signed char __fracttaqi (long long accum A) 1661 -- Runtime Function: short __fracttahi (long long accum A) 1662 -- Runtime Function: int __fracttasi (long long accum A) 1663 -- Runtime Function: long __fracttadi (long long accum A) 1664 -- Runtime Function: long long __fracttati (long long accum A) 1665 -- Runtime Function: float __fracttasf (long long accum A) 1666 -- Runtime Function: double __fracttadf (long long accum A) 1667 -- Runtime Function: short fract __fractuqqqq (unsigned short fract A) 1668 -- Runtime Function: fract __fractuqqhq (unsigned short fract A) 1669 -- Runtime Function: long fract __fractuqqsq (unsigned short fract A) 1670 -- Runtime Function: long long fract __fractuqqdq (unsigned short fract 1671 A) 1672 -- Runtime Function: short accum __fractuqqha (unsigned short fract A) 1673 -- Runtime Function: accum __fractuqqsa (unsigned short fract A) 1674 -- Runtime Function: long accum __fractuqqda (unsigned short fract A) 1675 -- Runtime Function: long long accum __fractuqqta (unsigned short fract 1676 A) 1677 -- Runtime Function: unsigned fract __fractuqquhq2 (unsigned short 1678 fract A) 1679 -- Runtime Function: unsigned long fract __fractuqqusq2 (unsigned short 1680 fract A) 1681 -- Runtime Function: unsigned long long fract __fractuqqudq2 (unsigned 1682 short fract A) 1683 -- Runtime Function: unsigned short accum __fractuqquha (unsigned short 1684 fract A) 1685 -- Runtime Function: unsigned accum __fractuqqusa (unsigned short fract 1686 A) 1687 -- Runtime Function: unsigned long accum __fractuqquda (unsigned short 1688 fract A) 1689 -- Runtime Function: unsigned long long accum __fractuqquta (unsigned 1690 short fract A) 1691 -- Runtime Function: signed char __fractuqqqi (unsigned short fract A) 1692 -- Runtime Function: short __fractuqqhi (unsigned short fract A) 1693 -- Runtime Function: int __fractuqqsi (unsigned short fract A) 1694 -- Runtime Function: long __fractuqqdi (unsigned short fract A) 1695 -- Runtime Function: long long __fractuqqti (unsigned short fract A) 1696 -- Runtime Function: float __fractuqqsf (unsigned short fract A) 1697 -- Runtime Function: double __fractuqqdf (unsigned short fract A) 1698 -- Runtime Function: short fract __fractuhqqq (unsigned fract A) 1699 -- Runtime Function: fract __fractuhqhq (unsigned fract A) 1700 -- Runtime Function: long fract __fractuhqsq (unsigned fract A) 1701 -- Runtime Function: long long fract __fractuhqdq (unsigned fract A) 1702 -- Runtime Function: short accum __fractuhqha (unsigned fract A) 1703 -- Runtime Function: accum __fractuhqsa (unsigned fract A) 1704 -- Runtime Function: long accum __fractuhqda (unsigned fract A) 1705 -- Runtime Function: long long accum __fractuhqta (unsigned fract A) 1706 -- Runtime Function: unsigned short fract __fractuhquqq2 (unsigned 1707 fract A) 1708 -- Runtime Function: unsigned long fract __fractuhqusq2 (unsigned fract 1709 A) 1710 -- Runtime Function: unsigned long long fract __fractuhqudq2 (unsigned 1711 fract A) 1712 -- Runtime Function: unsigned short accum __fractuhquha (unsigned fract 1713 A) 1714 -- Runtime Function: unsigned accum __fractuhqusa (unsigned fract A) 1715 -- Runtime Function: unsigned long accum __fractuhquda (unsigned fract 1716 A) 1717 -- Runtime Function: unsigned long long accum __fractuhquta (unsigned 1718 fract A) 1719 -- Runtime Function: signed char __fractuhqqi (unsigned fract A) 1720 -- Runtime Function: short __fractuhqhi (unsigned fract A) 1721 -- Runtime Function: int __fractuhqsi (unsigned fract A) 1722 -- Runtime Function: long __fractuhqdi (unsigned fract A) 1723 -- Runtime Function: long long __fractuhqti (unsigned fract A) 1724 -- Runtime Function: float __fractuhqsf (unsigned fract A) 1725 -- Runtime Function: double __fractuhqdf (unsigned fract A) 1726 -- Runtime Function: short fract __fractusqqq (unsigned long fract A) 1727 -- Runtime Function: fract __fractusqhq (unsigned long fract A) 1728 -- Runtime Function: long fract __fractusqsq (unsigned long fract A) 1729 -- Runtime Function: long long fract __fractusqdq (unsigned long fract 1730 A) 1731 -- Runtime Function: short accum __fractusqha (unsigned long fract A) 1732 -- Runtime Function: accum __fractusqsa (unsigned long fract A) 1733 -- Runtime Function: long accum __fractusqda (unsigned long fract A) 1734 -- Runtime Function: long long accum __fractusqta (unsigned long fract 1735 A) 1736 -- Runtime Function: unsigned short fract __fractusquqq2 (unsigned long 1737 fract A) 1738 -- Runtime Function: unsigned fract __fractusquhq2 (unsigned long fract 1739 A) 1740 -- Runtime Function: unsigned long long fract __fractusqudq2 (unsigned 1741 long fract A) 1742 -- Runtime Function: unsigned short accum __fractusquha (unsigned long 1743 fract A) 1744 -- Runtime Function: unsigned accum __fractusqusa (unsigned long fract 1745 A) 1746 -- Runtime Function: unsigned long accum __fractusquda (unsigned long 1747 fract A) 1748 -- Runtime Function: unsigned long long accum __fractusquta (unsigned 1749 long fract A) 1750 -- Runtime Function: signed char __fractusqqi (unsigned long fract A) 1751 -- Runtime Function: short __fractusqhi (unsigned long fract A) 1752 -- Runtime Function: int __fractusqsi (unsigned long fract A) 1753 -- Runtime Function: long __fractusqdi (unsigned long fract A) 1754 -- Runtime Function: long long __fractusqti (unsigned long fract A) 1755 -- Runtime Function: float __fractusqsf (unsigned long fract A) 1756 -- Runtime Function: double __fractusqdf (unsigned long fract A) 1757 -- Runtime Function: short fract __fractudqqq (unsigned long long fract 1758 A) 1759 -- Runtime Function: fract __fractudqhq (unsigned long long fract A) 1760 -- Runtime Function: long fract __fractudqsq (unsigned long long fract 1761 A) 1762 -- Runtime Function: long long fract __fractudqdq (unsigned long long 1763 fract A) 1764 -- Runtime Function: short accum __fractudqha (unsigned long long fract 1765 A) 1766 -- Runtime Function: accum __fractudqsa (unsigned long long fract A) 1767 -- Runtime Function: long accum __fractudqda (unsigned long long fract 1768 A) 1769 -- Runtime Function: long long accum __fractudqta (unsigned long long 1770 fract A) 1771 -- Runtime Function: unsigned short fract __fractudquqq2 (unsigned long 1772 long fract A) 1773 -- Runtime Function: unsigned fract __fractudquhq2 (unsigned long long 1774 fract A) 1775 -- Runtime Function: unsigned long fract __fractudqusq2 (unsigned long 1776 long fract A) 1777 -- Runtime Function: unsigned short accum __fractudquha (unsigned long 1778 long fract A) 1779 -- Runtime Function: unsigned accum __fractudqusa (unsigned long long 1780 fract A) 1781 -- Runtime Function: unsigned long accum __fractudquda (unsigned long 1782 long fract A) 1783 -- Runtime Function: unsigned long long accum __fractudquta (unsigned 1784 long long fract A) 1785 -- Runtime Function: signed char __fractudqqi (unsigned long long fract 1786 A) 1787 -- Runtime Function: short __fractudqhi (unsigned long long fract A) 1788 -- Runtime Function: int __fractudqsi (unsigned long long fract A) 1789 -- Runtime Function: long __fractudqdi (unsigned long long fract A) 1790 -- Runtime Function: long long __fractudqti (unsigned long long fract 1791 A) 1792 -- Runtime Function: float __fractudqsf (unsigned long long fract A) 1793 -- Runtime Function: double __fractudqdf (unsigned long long fract A) 1794 -- Runtime Function: short fract __fractuhaqq (unsigned short accum A) 1795 -- Runtime Function: fract __fractuhahq (unsigned short accum A) 1796 -- Runtime Function: long fract __fractuhasq (unsigned short accum A) 1797 -- Runtime Function: long long fract __fractuhadq (unsigned short accum 1798 A) 1799 -- Runtime Function: short accum __fractuhaha (unsigned short accum A) 1800 -- Runtime Function: accum __fractuhasa (unsigned short accum A) 1801 -- Runtime Function: long accum __fractuhada (unsigned short accum A) 1802 -- Runtime Function: long long accum __fractuhata (unsigned short accum 1803 A) 1804 -- Runtime Function: unsigned short fract __fractuhauqq (unsigned short 1805 accum A) 1806 -- Runtime Function: unsigned fract __fractuhauhq (unsigned short accum 1807 A) 1808 -- Runtime Function: unsigned long fract __fractuhausq (unsigned short 1809 accum A) 1810 -- Runtime Function: unsigned long long fract __fractuhaudq (unsigned 1811 short accum A) 1812 -- Runtime Function: unsigned accum __fractuhausa2 (unsigned short 1813 accum A) 1814 -- Runtime Function: unsigned long accum __fractuhauda2 (unsigned short 1815 accum A) 1816 -- Runtime Function: unsigned long long accum __fractuhauta2 (unsigned 1817 short accum A) 1818 -- Runtime Function: signed char __fractuhaqi (unsigned short accum A) 1819 -- Runtime Function: short __fractuhahi (unsigned short accum A) 1820 -- Runtime Function: int __fractuhasi (unsigned short accum A) 1821 -- Runtime Function: long __fractuhadi (unsigned short accum A) 1822 -- Runtime Function: long long __fractuhati (unsigned short accum A) 1823 -- Runtime Function: float __fractuhasf (unsigned short accum A) 1824 -- Runtime Function: double __fractuhadf (unsigned short accum A) 1825 -- Runtime Function: short fract __fractusaqq (unsigned accum A) 1826 -- Runtime Function: fract __fractusahq (unsigned accum A) 1827 -- Runtime Function: long fract __fractusasq (unsigned accum A) 1828 -- Runtime Function: long long fract __fractusadq (unsigned accum A) 1829 -- Runtime Function: short accum __fractusaha (unsigned accum A) 1830 -- Runtime Function: accum __fractusasa (unsigned accum A) 1831 -- Runtime Function: long accum __fractusada (unsigned accum A) 1832 -- Runtime Function: long long accum __fractusata (unsigned accum A) 1833 -- Runtime Function: unsigned short fract __fractusauqq (unsigned accum 1834 A) 1835 -- Runtime Function: unsigned fract __fractusauhq (unsigned accum A) 1836 -- Runtime Function: unsigned long fract __fractusausq (unsigned accum 1837 A) 1838 -- Runtime Function: unsigned long long fract __fractusaudq (unsigned 1839 accum A) 1840 -- Runtime Function: unsigned short accum __fractusauha2 (unsigned 1841 accum A) 1842 -- Runtime Function: unsigned long accum __fractusauda2 (unsigned accum 1843 A) 1844 -- Runtime Function: unsigned long long accum __fractusauta2 (unsigned 1845 accum A) 1846 -- Runtime Function: signed char __fractusaqi (unsigned accum A) 1847 -- Runtime Function: short __fractusahi (unsigned accum A) 1848 -- Runtime Function: int __fractusasi (unsigned accum A) 1849 -- Runtime Function: long __fractusadi (unsigned accum A) 1850 -- Runtime Function: long long __fractusati (unsigned accum A) 1851 -- Runtime Function: float __fractusasf (unsigned accum A) 1852 -- Runtime Function: double __fractusadf (unsigned accum A) 1853 -- Runtime Function: short fract __fractudaqq (unsigned long accum A) 1854 -- Runtime Function: fract __fractudahq (unsigned long accum A) 1855 -- Runtime Function: long fract __fractudasq (unsigned long accum A) 1856 -- Runtime Function: long long fract __fractudadq (unsigned long accum 1857 A) 1858 -- Runtime Function: short accum __fractudaha (unsigned long accum A) 1859 -- Runtime Function: accum __fractudasa (unsigned long accum A) 1860 -- Runtime Function: long accum __fractudada (unsigned long accum A) 1861 -- Runtime Function: long long accum __fractudata (unsigned long accum 1862 A) 1863 -- Runtime Function: unsigned short fract __fractudauqq (unsigned long 1864 accum A) 1865 -- Runtime Function: unsigned fract __fractudauhq (unsigned long accum 1866 A) 1867 -- Runtime Function: unsigned long fract __fractudausq (unsigned long 1868 accum A) 1869 -- Runtime Function: unsigned long long fract __fractudaudq (unsigned 1870 long accum A) 1871 -- Runtime Function: unsigned short accum __fractudauha2 (unsigned long 1872 accum A) 1873 -- Runtime Function: unsigned accum __fractudausa2 (unsigned long accum 1874 A) 1875 -- Runtime Function: unsigned long long accum __fractudauta2 (unsigned 1876 long accum A) 1877 -- Runtime Function: signed char __fractudaqi (unsigned long accum A) 1878 -- Runtime Function: short __fractudahi (unsigned long accum A) 1879 -- Runtime Function: int __fractudasi (unsigned long accum A) 1880 -- Runtime Function: long __fractudadi (unsigned long accum A) 1881 -- Runtime Function: long long __fractudati (unsigned long accum A) 1882 -- Runtime Function: float __fractudasf (unsigned long accum A) 1883 -- Runtime Function: double __fractudadf (unsigned long accum A) 1884 -- Runtime Function: short fract __fractutaqq (unsigned long long accum 1885 A) 1886 -- Runtime Function: fract __fractutahq (unsigned long long accum A) 1887 -- Runtime Function: long fract __fractutasq (unsigned long long accum 1888 A) 1889 -- Runtime Function: long long fract __fractutadq (unsigned long long 1890 accum A) 1891 -- Runtime Function: short accum __fractutaha (unsigned long long accum 1892 A) 1893 -- Runtime Function: accum __fractutasa (unsigned long long accum A) 1894 -- Runtime Function: long accum __fractutada (unsigned long long accum 1895 A) 1896 -- Runtime Function: long long accum __fractutata (unsigned long long 1897 accum A) 1898 -- Runtime Function: unsigned short fract __fractutauqq (unsigned long 1899 long accum A) 1900 -- Runtime Function: unsigned fract __fractutauhq (unsigned long long 1901 accum A) 1902 -- Runtime Function: unsigned long fract __fractutausq (unsigned long 1903 long accum A) 1904 -- Runtime Function: unsigned long long fract __fractutaudq (unsigned 1905 long long accum A) 1906 -- Runtime Function: unsigned short accum __fractutauha2 (unsigned long 1907 long accum A) 1908 -- Runtime Function: unsigned accum __fractutausa2 (unsigned long long 1909 accum A) 1910 -- Runtime Function: unsigned long accum __fractutauda2 (unsigned long 1911 long accum A) 1912 -- Runtime Function: signed char __fractutaqi (unsigned long long accum 1913 A) 1914 -- Runtime Function: short __fractutahi (unsigned long long accum A) 1915 -- Runtime Function: int __fractutasi (unsigned long long accum A) 1916 -- Runtime Function: long __fractutadi (unsigned long long accum A) 1917 -- Runtime Function: long long __fractutati (unsigned long long accum 1918 A) 1919 -- Runtime Function: float __fractutasf (unsigned long long accum A) 1920 -- Runtime Function: double __fractutadf (unsigned long long accum A) 1921 -- Runtime Function: short fract __fractqiqq (signed char A) 1922 -- Runtime Function: fract __fractqihq (signed char A) 1923 -- Runtime Function: long fract __fractqisq (signed char A) 1924 -- Runtime Function: long long fract __fractqidq (signed char A) 1925 -- Runtime Function: short accum __fractqiha (signed char A) 1926 -- Runtime Function: accum __fractqisa (signed char A) 1927 -- Runtime Function: long accum __fractqida (signed char A) 1928 -- Runtime Function: long long accum __fractqita (signed char A) 1929 -- Runtime Function: unsigned short fract __fractqiuqq (signed char A) 1930 -- Runtime Function: unsigned fract __fractqiuhq (signed char A) 1931 -- Runtime Function: unsigned long fract __fractqiusq (signed char A) 1932 -- Runtime Function: unsigned long long fract __fractqiudq (signed char 1933 A) 1934 -- Runtime Function: unsigned short accum __fractqiuha (signed char A) 1935 -- Runtime Function: unsigned accum __fractqiusa (signed char A) 1936 -- Runtime Function: unsigned long accum __fractqiuda (signed char A) 1937 -- Runtime Function: unsigned long long accum __fractqiuta (signed char 1938 A) 1939 -- Runtime Function: short fract __fracthiqq (short A) 1940 -- Runtime Function: fract __fracthihq (short A) 1941 -- Runtime Function: long fract __fracthisq (short A) 1942 -- Runtime Function: long long fract __fracthidq (short A) 1943 -- Runtime Function: short accum __fracthiha (short A) 1944 -- Runtime Function: accum __fracthisa (short A) 1945 -- Runtime Function: long accum __fracthida (short A) 1946 -- Runtime Function: long long accum __fracthita (short A) 1947 -- Runtime Function: unsigned short fract __fracthiuqq (short A) 1948 -- Runtime Function: unsigned fract __fracthiuhq (short A) 1949 -- Runtime Function: unsigned long fract __fracthiusq (short A) 1950 -- Runtime Function: unsigned long long fract __fracthiudq (short A) 1951 -- Runtime Function: unsigned short accum __fracthiuha (short A) 1952 -- Runtime Function: unsigned accum __fracthiusa (short A) 1953 -- Runtime Function: unsigned long accum __fracthiuda (short A) 1954 -- Runtime Function: unsigned long long accum __fracthiuta (short A) 1955 -- Runtime Function: short fract __fractsiqq (int A) 1956 -- Runtime Function: fract __fractsihq (int A) 1957 -- Runtime Function: long fract __fractsisq (int A) 1958 -- Runtime Function: long long fract __fractsidq (int A) 1959 -- Runtime Function: short accum __fractsiha (int A) 1960 -- Runtime Function: accum __fractsisa (int A) 1961 -- Runtime Function: long accum __fractsida (int A) 1962 -- Runtime Function: long long accum __fractsita (int A) 1963 -- Runtime Function: unsigned short fract __fractsiuqq (int A) 1964 -- Runtime Function: unsigned fract __fractsiuhq (int A) 1965 -- Runtime Function: unsigned long fract __fractsiusq (int A) 1966 -- Runtime Function: unsigned long long fract __fractsiudq (int A) 1967 -- Runtime Function: unsigned short accum __fractsiuha (int A) 1968 -- Runtime Function: unsigned accum __fractsiusa (int A) 1969 -- Runtime Function: unsigned long accum __fractsiuda (int A) 1970 -- Runtime Function: unsigned long long accum __fractsiuta (int A) 1971 -- Runtime Function: short fract __fractdiqq (long A) 1972 -- Runtime Function: fract __fractdihq (long A) 1973 -- Runtime Function: long fract __fractdisq (long A) 1974 -- Runtime Function: long long fract __fractdidq (long A) 1975 -- Runtime Function: short accum __fractdiha (long A) 1976 -- Runtime Function: accum __fractdisa (long A) 1977 -- Runtime Function: long accum __fractdida (long A) 1978 -- Runtime Function: long long accum __fractdita (long A) 1979 -- Runtime Function: unsigned short fract __fractdiuqq (long A) 1980 -- Runtime Function: unsigned fract __fractdiuhq (long A) 1981 -- Runtime Function: unsigned long fract __fractdiusq (long A) 1982 -- Runtime Function: unsigned long long fract __fractdiudq (long A) 1983 -- Runtime Function: unsigned short accum __fractdiuha (long A) 1984 -- Runtime Function: unsigned accum __fractdiusa (long A) 1985 -- Runtime Function: unsigned long accum __fractdiuda (long A) 1986 -- Runtime Function: unsigned long long accum __fractdiuta (long A) 1987 -- Runtime Function: short fract __fracttiqq (long long A) 1988 -- Runtime Function: fract __fracttihq (long long A) 1989 -- Runtime Function: long fract __fracttisq (long long A) 1990 -- Runtime Function: long long fract __fracttidq (long long A) 1991 -- Runtime Function: short accum __fracttiha (long long A) 1992 -- Runtime Function: accum __fracttisa (long long A) 1993 -- Runtime Function: long accum __fracttida (long long A) 1994 -- Runtime Function: long long accum __fracttita (long long A) 1995 -- Runtime Function: unsigned short fract __fracttiuqq (long long A) 1996 -- Runtime Function: unsigned fract __fracttiuhq (long long A) 1997 -- Runtime Function: unsigned long fract __fracttiusq (long long A) 1998 -- Runtime Function: unsigned long long fract __fracttiudq (long long 1999 A) 2000 -- Runtime Function: unsigned short accum __fracttiuha (long long A) 2001 -- Runtime Function: unsigned accum __fracttiusa (long long A) 2002 -- Runtime Function: unsigned long accum __fracttiuda (long long A) 2003 -- Runtime Function: unsigned long long accum __fracttiuta (long long 2004 A) 2005 -- Runtime Function: short fract __fractsfqq (float A) 2006 -- Runtime Function: fract __fractsfhq (float A) 2007 -- Runtime Function: long fract __fractsfsq (float A) 2008 -- Runtime Function: long long fract __fractsfdq (float A) 2009 -- Runtime Function: short accum __fractsfha (float A) 2010 -- Runtime Function: accum __fractsfsa (float A) 2011 -- Runtime Function: long accum __fractsfda (float A) 2012 -- Runtime Function: long long accum __fractsfta (float A) 2013 -- Runtime Function: unsigned short fract __fractsfuqq (float A) 2014 -- Runtime Function: unsigned fract __fractsfuhq (float A) 2015 -- Runtime Function: unsigned long fract __fractsfusq (float A) 2016 -- Runtime Function: unsigned long long fract __fractsfudq (float A) 2017 -- Runtime Function: unsigned short accum __fractsfuha (float A) 2018 -- Runtime Function: unsigned accum __fractsfusa (float A) 2019 -- Runtime Function: unsigned long accum __fractsfuda (float A) 2020 -- Runtime Function: unsigned long long accum __fractsfuta (float A) 2021 -- Runtime Function: short fract __fractdfqq (double A) 2022 -- Runtime Function: fract __fractdfhq (double A) 2023 -- Runtime Function: long fract __fractdfsq (double A) 2024 -- Runtime Function: long long fract __fractdfdq (double A) 2025 -- Runtime Function: short accum __fractdfha (double A) 2026 -- Runtime Function: accum __fractdfsa (double A) 2027 -- Runtime Function: long accum __fractdfda (double A) 2028 -- Runtime Function: long long accum __fractdfta (double A) 2029 -- Runtime Function: unsigned short fract __fractdfuqq (double A) 2030 -- Runtime Function: unsigned fract __fractdfuhq (double A) 2031 -- Runtime Function: unsigned long fract __fractdfusq (double A) 2032 -- Runtime Function: unsigned long long fract __fractdfudq (double A) 2033 -- Runtime Function: unsigned short accum __fractdfuha (double A) 2034 -- Runtime Function: unsigned accum __fractdfusa (double A) 2035 -- Runtime Function: unsigned long accum __fractdfuda (double A) 2036 -- Runtime Function: unsigned long long accum __fractdfuta (double A) 2037 These functions convert from fractional and signed non-fractionals 2038 to fractionals and signed non-fractionals, without saturation. 2039 2040 -- Runtime Function: fract __satfractqqhq2 (short fract A) 2041 -- Runtime Function: long fract __satfractqqsq2 (short fract A) 2042 -- Runtime Function: long long fract __satfractqqdq2 (short fract A) 2043 -- Runtime Function: short accum __satfractqqha (short fract A) 2044 -- Runtime Function: accum __satfractqqsa (short fract A) 2045 -- Runtime Function: long accum __satfractqqda (short fract A) 2046 -- Runtime Function: long long accum __satfractqqta (short fract A) 2047 -- Runtime Function: unsigned short fract __satfractqquqq (short fract 2048 A) 2049 -- Runtime Function: unsigned fract __satfractqquhq (short fract A) 2050 -- Runtime Function: unsigned long fract __satfractqqusq (short fract 2051 A) 2052 -- Runtime Function: unsigned long long fract __satfractqqudq (short 2053 fract A) 2054 -- Runtime Function: unsigned short accum __satfractqquha (short fract 2055 A) 2056 -- Runtime Function: unsigned accum __satfractqqusa (short fract A) 2057 -- Runtime Function: unsigned long accum __satfractqquda (short fract 2058 A) 2059 -- Runtime Function: unsigned long long accum __satfractqquta (short 2060 fract A) 2061 -- Runtime Function: short fract __satfracthqqq2 (fract A) 2062 -- Runtime Function: long fract __satfracthqsq2 (fract A) 2063 -- Runtime Function: long long fract __satfracthqdq2 (fract A) 2064 -- Runtime Function: short accum __satfracthqha (fract A) 2065 -- Runtime Function: accum __satfracthqsa (fract A) 2066 -- Runtime Function: long accum __satfracthqda (fract A) 2067 -- Runtime Function: long long accum __satfracthqta (fract A) 2068 -- Runtime Function: unsigned short fract __satfracthquqq (fract A) 2069 -- Runtime Function: unsigned fract __satfracthquhq (fract A) 2070 -- Runtime Function: unsigned long fract __satfracthqusq (fract A) 2071 -- Runtime Function: unsigned long long fract __satfracthqudq (fract A) 2072 -- Runtime Function: unsigned short accum __satfracthquha (fract A) 2073 -- Runtime Function: unsigned accum __satfracthqusa (fract A) 2074 -- Runtime Function: unsigned long accum __satfracthquda (fract A) 2075 -- Runtime Function: unsigned long long accum __satfracthquta (fract A) 2076 -- Runtime Function: short fract __satfractsqqq2 (long fract A) 2077 -- Runtime Function: fract __satfractsqhq2 (long fract A) 2078 -- Runtime Function: long long fract __satfractsqdq2 (long fract A) 2079 -- Runtime Function: short accum __satfractsqha (long fract A) 2080 -- Runtime Function: accum __satfractsqsa (long fract A) 2081 -- Runtime Function: long accum __satfractsqda (long fract A) 2082 -- Runtime Function: long long accum __satfractsqta (long fract A) 2083 -- Runtime Function: unsigned short fract __satfractsquqq (long fract 2084 A) 2085 -- Runtime Function: unsigned fract __satfractsquhq (long fract A) 2086 -- Runtime Function: unsigned long fract __satfractsqusq (long fract A) 2087 -- Runtime Function: unsigned long long fract __satfractsqudq (long 2088 fract A) 2089 -- Runtime Function: unsigned short accum __satfractsquha (long fract 2090 A) 2091 -- Runtime Function: unsigned accum __satfractsqusa (long fract A) 2092 -- Runtime Function: unsigned long accum __satfractsquda (long fract A) 2093 -- Runtime Function: unsigned long long accum __satfractsquta (long 2094 fract A) 2095 -- Runtime Function: short fract __satfractdqqq2 (long long fract A) 2096 -- Runtime Function: fract __satfractdqhq2 (long long fract A) 2097 -- Runtime Function: long fract __satfractdqsq2 (long long fract A) 2098 -- Runtime Function: short accum __satfractdqha (long long fract A) 2099 -- Runtime Function: accum __satfractdqsa (long long fract A) 2100 -- Runtime Function: long accum __satfractdqda (long long fract A) 2101 -- Runtime Function: long long accum __satfractdqta (long long fract A) 2102 -- Runtime Function: unsigned short fract __satfractdquqq (long long 2103 fract A) 2104 -- Runtime Function: unsigned fract __satfractdquhq (long long fract A) 2105 -- Runtime Function: unsigned long fract __satfractdqusq (long long 2106 fract A) 2107 -- Runtime Function: unsigned long long fract __satfractdqudq (long 2108 long fract A) 2109 -- Runtime Function: unsigned short accum __satfractdquha (long long 2110 fract A) 2111 -- Runtime Function: unsigned accum __satfractdqusa (long long fract A) 2112 -- Runtime Function: unsigned long accum __satfractdquda (long long 2113 fract A) 2114 -- Runtime Function: unsigned long long accum __satfractdquta (long 2115 long fract A) 2116 -- Runtime Function: short fract __satfracthaqq (short accum A) 2117 -- Runtime Function: fract __satfracthahq (short accum A) 2118 -- Runtime Function: long fract __satfracthasq (short accum A) 2119 -- Runtime Function: long long fract __satfracthadq (short accum A) 2120 -- Runtime Function: accum __satfracthasa2 (short accum A) 2121 -- Runtime Function: long accum __satfracthada2 (short accum A) 2122 -- Runtime Function: long long accum __satfracthata2 (short accum A) 2123 -- Runtime Function: unsigned short fract __satfracthauqq (short accum 2124 A) 2125 -- Runtime Function: unsigned fract __satfracthauhq (short accum A) 2126 -- Runtime Function: unsigned long fract __satfracthausq (short accum 2127 A) 2128 -- Runtime Function: unsigned long long fract __satfracthaudq (short 2129 accum A) 2130 -- Runtime Function: unsigned short accum __satfracthauha (short accum 2131 A) 2132 -- Runtime Function: unsigned accum __satfracthausa (short accum A) 2133 -- Runtime Function: unsigned long accum __satfracthauda (short accum 2134 A) 2135 -- Runtime Function: unsigned long long accum __satfracthauta (short 2136 accum A) 2137 -- Runtime Function: short fract __satfractsaqq (accum A) 2138 -- Runtime Function: fract __satfractsahq (accum A) 2139 -- Runtime Function: long fract __satfractsasq (accum A) 2140 -- Runtime Function: long long fract __satfractsadq (accum A) 2141 -- Runtime Function: short accum __satfractsaha2 (accum A) 2142 -- Runtime Function: long accum __satfractsada2 (accum A) 2143 -- Runtime Function: long long accum __satfractsata2 (accum A) 2144 -- Runtime Function: unsigned short fract __satfractsauqq (accum A) 2145 -- Runtime Function: unsigned fract __satfractsauhq (accum A) 2146 -- Runtime Function: unsigned long fract __satfractsausq (accum A) 2147 -- Runtime Function: unsigned long long fract __satfractsaudq (accum A) 2148 -- Runtime Function: unsigned short accum __satfractsauha (accum A) 2149 -- Runtime Function: unsigned accum __satfractsausa (accum A) 2150 -- Runtime Function: unsigned long accum __satfractsauda (accum A) 2151 -- Runtime Function: unsigned long long accum __satfractsauta (accum A) 2152 -- Runtime Function: short fract __satfractdaqq (long accum A) 2153 -- Runtime Function: fract __satfractdahq (long accum A) 2154 -- Runtime Function: long fract __satfractdasq (long accum A) 2155 -- Runtime Function: long long fract __satfractdadq (long accum A) 2156 -- Runtime Function: short accum __satfractdaha2 (long accum A) 2157 -- Runtime Function: accum __satfractdasa2 (long accum A) 2158 -- Runtime Function: long long accum __satfractdata2 (long accum A) 2159 -- Runtime Function: unsigned short fract __satfractdauqq (long accum 2160 A) 2161 -- Runtime Function: unsigned fract __satfractdauhq (long accum A) 2162 -- Runtime Function: unsigned long fract __satfractdausq (long accum A) 2163 -- Runtime Function: unsigned long long fract __satfractdaudq (long 2164 accum A) 2165 -- Runtime Function: unsigned short accum __satfractdauha (long accum 2166 A) 2167 -- Runtime Function: unsigned accum __satfractdausa (long accum A) 2168 -- Runtime Function: unsigned long accum __satfractdauda (long accum A) 2169 -- Runtime Function: unsigned long long accum __satfractdauta (long 2170 accum A) 2171 -- Runtime Function: short fract __satfracttaqq (long long accum A) 2172 -- Runtime Function: fract __satfracttahq (long long accum A) 2173 -- Runtime Function: long fract __satfracttasq (long long accum A) 2174 -- Runtime Function: long long fract __satfracttadq (long long accum A) 2175 -- Runtime Function: short accum __satfracttaha2 (long long accum A) 2176 -- Runtime Function: accum __satfracttasa2 (long long accum A) 2177 -- Runtime Function: long accum __satfracttada2 (long long accum A) 2178 -- Runtime Function: unsigned short fract __satfracttauqq (long long 2179 accum A) 2180 -- Runtime Function: unsigned fract __satfracttauhq (long long accum A) 2181 -- Runtime Function: unsigned long fract __satfracttausq (long long 2182 accum A) 2183 -- Runtime Function: unsigned long long fract __satfracttaudq (long 2184 long accum A) 2185 -- Runtime Function: unsigned short accum __satfracttauha (long long 2186 accum A) 2187 -- Runtime Function: unsigned accum __satfracttausa (long long accum A) 2188 -- Runtime Function: unsigned long accum __satfracttauda (long long 2189 accum A) 2190 -- Runtime Function: unsigned long long accum __satfracttauta (long 2191 long accum A) 2192 -- Runtime Function: short fract __satfractuqqqq (unsigned short fract 2193 A) 2194 -- Runtime Function: fract __satfractuqqhq (unsigned short fract A) 2195 -- Runtime Function: long fract __satfractuqqsq (unsigned short fract 2196 A) 2197 -- Runtime Function: long long fract __satfractuqqdq (unsigned short 2198 fract A) 2199 -- Runtime Function: short accum __satfractuqqha (unsigned short fract 2200 A) 2201 -- Runtime Function: accum __satfractuqqsa (unsigned short fract A) 2202 -- Runtime Function: long accum __satfractuqqda (unsigned short fract 2203 A) 2204 -- Runtime Function: long long accum __satfractuqqta (unsigned short 2205 fract A) 2206 -- Runtime Function: unsigned fract __satfractuqquhq2 (unsigned short 2207 fract A) 2208 -- Runtime Function: unsigned long fract __satfractuqqusq2 (unsigned 2209 short fract A) 2210 -- Runtime Function: unsigned long long fract __satfractuqqudq2 2211 (unsigned short fract A) 2212 -- Runtime Function: unsigned short accum __satfractuqquha (unsigned 2213 short fract A) 2214 -- Runtime Function: unsigned accum __satfractuqqusa (unsigned short 2215 fract A) 2216 -- Runtime Function: unsigned long accum __satfractuqquda (unsigned 2217 short fract A) 2218 -- Runtime Function: unsigned long long accum __satfractuqquta 2219 (unsigned short fract A) 2220 -- Runtime Function: short fract __satfractuhqqq (unsigned fract A) 2221 -- Runtime Function: fract __satfractuhqhq (unsigned fract A) 2222 -- Runtime Function: long fract __satfractuhqsq (unsigned fract A) 2223 -- Runtime Function: long long fract __satfractuhqdq (unsigned fract A) 2224 -- Runtime Function: short accum __satfractuhqha (unsigned fract A) 2225 -- Runtime Function: accum __satfractuhqsa (unsigned fract A) 2226 -- Runtime Function: long accum __satfractuhqda (unsigned fract A) 2227 -- Runtime Function: long long accum __satfractuhqta (unsigned fract A) 2228 -- Runtime Function: unsigned short fract __satfractuhquqq2 (unsigned 2229 fract A) 2230 -- Runtime Function: unsigned long fract __satfractuhqusq2 (unsigned 2231 fract A) 2232 -- Runtime Function: unsigned long long fract __satfractuhqudq2 2233 (unsigned fract A) 2234 -- Runtime Function: unsigned short accum __satfractuhquha (unsigned 2235 fract A) 2236 -- Runtime Function: unsigned accum __satfractuhqusa (unsigned fract A) 2237 -- Runtime Function: unsigned long accum __satfractuhquda (unsigned 2238 fract A) 2239 -- Runtime Function: unsigned long long accum __satfractuhquta 2240 (unsigned fract A) 2241 -- Runtime Function: short fract __satfractusqqq (unsigned long fract 2242 A) 2243 -- Runtime Function: fract __satfractusqhq (unsigned long fract A) 2244 -- Runtime Function: long fract __satfractusqsq (unsigned long fract A) 2245 -- Runtime Function: long long fract __satfractusqdq (unsigned long 2246 fract A) 2247 -- Runtime Function: short accum __satfractusqha (unsigned long fract 2248 A) 2249 -- Runtime Function: accum __satfractusqsa (unsigned long fract A) 2250 -- Runtime Function: long accum __satfractusqda (unsigned long fract A) 2251 -- Runtime Function: long long accum __satfractusqta (unsigned long 2252 fract A) 2253 -- Runtime Function: unsigned short fract __satfractusquqq2 (unsigned 2254 long fract A) 2255 -- Runtime Function: unsigned fract __satfractusquhq2 (unsigned long 2256 fract A) 2257 -- Runtime Function: unsigned long long fract __satfractusqudq2 2258 (unsigned long fract A) 2259 -- Runtime Function: unsigned short accum __satfractusquha (unsigned 2260 long fract A) 2261 -- Runtime Function: unsigned accum __satfractusqusa (unsigned long 2262 fract A) 2263 -- Runtime Function: unsigned long accum __satfractusquda (unsigned 2264 long fract A) 2265 -- Runtime Function: unsigned long long accum __satfractusquta 2266 (unsigned long fract A) 2267 -- Runtime Function: short fract __satfractudqqq (unsigned long long 2268 fract A) 2269 -- Runtime Function: fract __satfractudqhq (unsigned long long fract A) 2270 -- Runtime Function: long fract __satfractudqsq (unsigned long long 2271 fract A) 2272 -- Runtime Function: long long fract __satfractudqdq (unsigned long 2273 long fract A) 2274 -- Runtime Function: short accum __satfractudqha (unsigned long long 2275 fract A) 2276 -- Runtime Function: accum __satfractudqsa (unsigned long long fract A) 2277 -- Runtime Function: long accum __satfractudqda (unsigned long long 2278 fract A) 2279 -- Runtime Function: long long accum __satfractudqta (unsigned long 2280 long fract A) 2281 -- Runtime Function: unsigned short fract __satfractudquqq2 (unsigned 2282 long long fract A) 2283 -- Runtime Function: unsigned fract __satfractudquhq2 (unsigned long 2284 long fract A) 2285 -- Runtime Function: unsigned long fract __satfractudqusq2 (unsigned 2286 long long fract A) 2287 -- Runtime Function: unsigned short accum __satfractudquha (unsigned 2288 long long fract A) 2289 -- Runtime Function: unsigned accum __satfractudqusa (unsigned long 2290 long fract A) 2291 -- Runtime Function: unsigned long accum __satfractudquda (unsigned 2292 long long fract A) 2293 -- Runtime Function: unsigned long long accum __satfractudquta 2294 (unsigned long long fract A) 2295 -- Runtime Function: short fract __satfractuhaqq (unsigned short accum 2296 A) 2297 -- Runtime Function: fract __satfractuhahq (unsigned short accum A) 2298 -- Runtime Function: long fract __satfractuhasq (unsigned short accum 2299 A) 2300 -- Runtime Function: long long fract __satfractuhadq (unsigned short 2301 accum A) 2302 -- Runtime Function: short accum __satfractuhaha (unsigned short accum 2303 A) 2304 -- Runtime Function: accum __satfractuhasa (unsigned short accum A) 2305 -- Runtime Function: long accum __satfractuhada (unsigned short accum 2306 A) 2307 -- Runtime Function: long long accum __satfractuhata (unsigned short 2308 accum A) 2309 -- Runtime Function: unsigned short fract __satfractuhauqq (unsigned 2310 short accum A) 2311 -- Runtime Function: unsigned fract __satfractuhauhq (unsigned short 2312 accum A) 2313 -- Runtime Function: unsigned long fract __satfractuhausq (unsigned 2314 short accum A) 2315 -- Runtime Function: unsigned long long fract __satfractuhaudq 2316 (unsigned short accum A) 2317 -- Runtime Function: unsigned accum __satfractuhausa2 (unsigned short 2318 accum A) 2319 -- Runtime Function: unsigned long accum __satfractuhauda2 (unsigned 2320 short accum A) 2321 -- Runtime Function: unsigned long long accum __satfractuhauta2 2322 (unsigned short accum A) 2323 -- Runtime Function: short fract __satfractusaqq (unsigned accum A) 2324 -- Runtime Function: fract __satfractusahq (unsigned accum A) 2325 -- Runtime Function: long fract __satfractusasq (unsigned accum A) 2326 -- Runtime Function: long long fract __satfractusadq (unsigned accum A) 2327 -- Runtime Function: short accum __satfractusaha (unsigned accum A) 2328 -- Runtime Function: accum __satfractusasa (unsigned accum A) 2329 -- Runtime Function: long accum __satfractusada (unsigned accum A) 2330 -- Runtime Function: long long accum __satfractusata (unsigned accum A) 2331 -- Runtime Function: unsigned short fract __satfractusauqq (unsigned 2332 accum A) 2333 -- Runtime Function: unsigned fract __satfractusauhq (unsigned accum A) 2334 -- Runtime Function: unsigned long fract __satfractusausq (unsigned 2335 accum A) 2336 -- Runtime Function: unsigned long long fract __satfractusaudq 2337 (unsigned accum A) 2338 -- Runtime Function: unsigned short accum __satfractusauha2 (unsigned 2339 accum A) 2340 -- Runtime Function: unsigned long accum __satfractusauda2 (unsigned 2341 accum A) 2342 -- Runtime Function: unsigned long long accum __satfractusauta2 2343 (unsigned accum A) 2344 -- Runtime Function: short fract __satfractudaqq (unsigned long accum 2345 A) 2346 -- Runtime Function: fract __satfractudahq (unsigned long accum A) 2347 -- Runtime Function: long fract __satfractudasq (unsigned long accum A) 2348 -- Runtime Function: long long fract __satfractudadq (unsigned long 2349 accum A) 2350 -- Runtime Function: short accum __satfractudaha (unsigned long accum 2351 A) 2352 -- Runtime Function: accum __satfractudasa (unsigned long accum A) 2353 -- Runtime Function: long accum __satfractudada (unsigned long accum A) 2354 -- Runtime Function: long long accum __satfractudata (unsigned long 2355 accum A) 2356 -- Runtime Function: unsigned short fract __satfractudauqq (unsigned 2357 long accum A) 2358 -- Runtime Function: unsigned fract __satfractudauhq (unsigned long 2359 accum A) 2360 -- Runtime Function: unsigned long fract __satfractudausq (unsigned 2361 long accum A) 2362 -- Runtime Function: unsigned long long fract __satfractudaudq 2363 (unsigned long accum A) 2364 -- Runtime Function: unsigned short accum __satfractudauha2 (unsigned 2365 long accum A) 2366 -- Runtime Function: unsigned accum __satfractudausa2 (unsigned long 2367 accum A) 2368 -- Runtime Function: unsigned long long accum __satfractudauta2 2369 (unsigned long accum A) 2370 -- Runtime Function: short fract __satfractutaqq (unsigned long long 2371 accum A) 2372 -- Runtime Function: fract __satfractutahq (unsigned long long accum A) 2373 -- Runtime Function: long fract __satfractutasq (unsigned long long 2374 accum A) 2375 -- Runtime Function: long long fract __satfractutadq (unsigned long 2376 long accum A) 2377 -- Runtime Function: short accum __satfractutaha (unsigned long long 2378 accum A) 2379 -- Runtime Function: accum __satfractutasa (unsigned long long accum A) 2380 -- Runtime Function: long accum __satfractutada (unsigned long long 2381 accum A) 2382 -- Runtime Function: long long accum __satfractutata (unsigned long 2383 long accum A) 2384 -- Runtime Function: unsigned short fract __satfractutauqq (unsigned 2385 long long accum A) 2386 -- Runtime Function: unsigned fract __satfractutauhq (unsigned long 2387 long accum A) 2388 -- Runtime Function: unsigned long fract __satfractutausq (unsigned 2389 long long accum A) 2390 -- Runtime Function: unsigned long long fract __satfractutaudq 2391 (unsigned long long accum A) 2392 -- Runtime Function: unsigned short accum __satfractutauha2 (unsigned 2393 long long accum A) 2394 -- Runtime Function: unsigned accum __satfractutausa2 (unsigned long 2395 long accum A) 2396 -- Runtime Function: unsigned long accum __satfractutauda2 (unsigned 2397 long long accum A) 2398 -- Runtime Function: short fract __satfractqiqq (signed char A) 2399 -- Runtime Function: fract __satfractqihq (signed char A) 2400 -- Runtime Function: long fract __satfractqisq (signed char A) 2401 -- Runtime Function: long long fract __satfractqidq (signed char A) 2402 -- Runtime Function: short accum __satfractqiha (signed char A) 2403 -- Runtime Function: accum __satfractqisa (signed char A) 2404 -- Runtime Function: long accum __satfractqida (signed char A) 2405 -- Runtime Function: long long accum __satfractqita (signed char A) 2406 -- Runtime Function: unsigned short fract __satfractqiuqq (signed char 2407 A) 2408 -- Runtime Function: unsigned fract __satfractqiuhq (signed char A) 2409 -- Runtime Function: unsigned long fract __satfractqiusq (signed char 2410 A) 2411 -- Runtime Function: unsigned long long fract __satfractqiudq (signed 2412 char A) 2413 -- Runtime Function: unsigned short accum __satfractqiuha (signed char 2414 A) 2415 -- Runtime Function: unsigned accum __satfractqiusa (signed char A) 2416 -- Runtime Function: unsigned long accum __satfractqiuda (signed char 2417 A) 2418 -- Runtime Function: unsigned long long accum __satfractqiuta (signed 2419 char A) 2420 -- Runtime Function: short fract __satfracthiqq (short A) 2421 -- Runtime Function: fract __satfracthihq (short A) 2422 -- Runtime Function: long fract __satfracthisq (short A) 2423 -- Runtime Function: long long fract __satfracthidq (short A) 2424 -- Runtime Function: short accum __satfracthiha (short A) 2425 -- Runtime Function: accum __satfracthisa (short A) 2426 -- Runtime Function: long accum __satfracthida (short A) 2427 -- Runtime Function: long long accum __satfracthita (short A) 2428 -- Runtime Function: unsigned short fract __satfracthiuqq (short A) 2429 -- Runtime Function: unsigned fract __satfracthiuhq (short A) 2430 -- Runtime Function: unsigned long fract __satfracthiusq (short A) 2431 -- Runtime Function: unsigned long long fract __satfracthiudq (short A) 2432 -- Runtime Function: unsigned short accum __satfracthiuha (short A) 2433 -- Runtime Function: unsigned accum __satfracthiusa (short A) 2434 -- Runtime Function: unsigned long accum __satfracthiuda (short A) 2435 -- Runtime Function: unsigned long long accum __satfracthiuta (short A) 2436 -- Runtime Function: short fract __satfractsiqq (int A) 2437 -- Runtime Function: fract __satfractsihq (int A) 2438 -- Runtime Function: long fract __satfractsisq (int A) 2439 -- Runtime Function: long long fract __satfractsidq (int A) 2440 -- Runtime Function: short accum __satfractsiha (int A) 2441 -- Runtime Function: accum __satfractsisa (int A) 2442 -- Runtime Function: long accum __satfractsida (int A) 2443 -- Runtime Function: long long accum __satfractsita (int A) 2444 -- Runtime Function: unsigned short fract __satfractsiuqq (int A) 2445 -- Runtime Function: unsigned fract __satfractsiuhq (int A) 2446 -- Runtime Function: unsigned long fract __satfractsiusq (int A) 2447 -- Runtime Function: unsigned long long fract __satfractsiudq (int A) 2448 -- Runtime Function: unsigned short accum __satfractsiuha (int A) 2449 -- Runtime Function: unsigned accum __satfractsiusa (int A) 2450 -- Runtime Function: unsigned long accum __satfractsiuda (int A) 2451 -- Runtime Function: unsigned long long accum __satfractsiuta (int A) 2452 -- Runtime Function: short fract __satfractdiqq (long A) 2453 -- Runtime Function: fract __satfractdihq (long A) 2454 -- Runtime Function: long fract __satfractdisq (long A) 2455 -- Runtime Function: long long fract __satfractdidq (long A) 2456 -- Runtime Function: short accum __satfractdiha (long A) 2457 -- Runtime Function: accum __satfractdisa (long A) 2458 -- Runtime Function: long accum __satfractdida (long A) 2459 -- Runtime Function: long long accum __satfractdita (long A) 2460 -- Runtime Function: unsigned short fract __satfractdiuqq (long A) 2461 -- Runtime Function: unsigned fract __satfractdiuhq (long A) 2462 -- Runtime Function: unsigned long fract __satfractdiusq (long A) 2463 -- Runtime Function: unsigned long long fract __satfractdiudq (long A) 2464 -- Runtime Function: unsigned short accum __satfractdiuha (long A) 2465 -- Runtime Function: unsigned accum __satfractdiusa (long A) 2466 -- Runtime Function: unsigned long accum __satfractdiuda (long A) 2467 -- Runtime Function: unsigned long long accum __satfractdiuta (long A) 2468 -- Runtime Function: short fract __satfracttiqq (long long A) 2469 -- Runtime Function: fract __satfracttihq (long long A) 2470 -- Runtime Function: long fract __satfracttisq (long long A) 2471 -- Runtime Function: long long fract __satfracttidq (long long A) 2472 -- Runtime Function: short accum __satfracttiha (long long A) 2473 -- Runtime Function: accum __satfracttisa (long long A) 2474 -- Runtime Function: long accum __satfracttida (long long A) 2475 -- Runtime Function: long long accum __satfracttita (long long A) 2476 -- Runtime Function: unsigned short fract __satfracttiuqq (long long A) 2477 -- Runtime Function: unsigned fract __satfracttiuhq (long long A) 2478 -- Runtime Function: unsigned long fract __satfracttiusq (long long A) 2479 -- Runtime Function: unsigned long long fract __satfracttiudq (long 2480 long A) 2481 -- Runtime Function: unsigned short accum __satfracttiuha (long long A) 2482 -- Runtime Function: unsigned accum __satfracttiusa (long long A) 2483 -- Runtime Function: unsigned long accum __satfracttiuda (long long A) 2484 -- Runtime Function: unsigned long long accum __satfracttiuta (long 2485 long A) 2486 -- Runtime Function: short fract __satfractsfqq (float A) 2487 -- Runtime Function: fract __satfractsfhq (float A) 2488 -- Runtime Function: long fract __satfractsfsq (float A) 2489 -- Runtime Function: long long fract __satfractsfdq (float A) 2490 -- Runtime Function: short accum __satfractsfha (float A) 2491 -- Runtime Function: accum __satfractsfsa (float A) 2492 -- Runtime Function: long accum __satfractsfda (float A) 2493 -- Runtime Function: long long accum __satfractsfta (float A) 2494 -- Runtime Function: unsigned short fract __satfractsfuqq (float A) 2495 -- Runtime Function: unsigned fract __satfractsfuhq (float A) 2496 -- Runtime Function: unsigned long fract __satfractsfusq (float A) 2497 -- Runtime Function: unsigned long long fract __satfractsfudq (float A) 2498 -- Runtime Function: unsigned short accum __satfractsfuha (float A) 2499 -- Runtime Function: unsigned accum __satfractsfusa (float A) 2500 -- Runtime Function: unsigned long accum __satfractsfuda (float A) 2501 -- Runtime Function: unsigned long long accum __satfractsfuta (float A) 2502 -- Runtime Function: short fract __satfractdfqq (double A) 2503 -- Runtime Function: fract __satfractdfhq (double A) 2504 -- Runtime Function: long fract __satfractdfsq (double A) 2505 -- Runtime Function: long long fract __satfractdfdq (double A) 2506 -- Runtime Function: short accum __satfractdfha (double A) 2507 -- Runtime Function: accum __satfractdfsa (double A) 2508 -- Runtime Function: long accum __satfractdfda (double A) 2509 -- Runtime Function: long long accum __satfractdfta (double A) 2510 -- Runtime Function: unsigned short fract __satfractdfuqq (double A) 2511 -- Runtime Function: unsigned fract __satfractdfuhq (double A) 2512 -- Runtime Function: unsigned long fract __satfractdfusq (double A) 2513 -- Runtime Function: unsigned long long fract __satfractdfudq (double 2514 A) 2515 -- Runtime Function: unsigned short accum __satfractdfuha (double A) 2516 -- Runtime Function: unsigned accum __satfractdfusa (double A) 2517 -- Runtime Function: unsigned long accum __satfractdfuda (double A) 2518 -- Runtime Function: unsigned long long accum __satfractdfuta (double 2519 A) 2520 The functions convert from fractional and signed non-fractionals to 2521 fractionals, with saturation. 2522 2523 -- Runtime Function: unsigned char __fractunsqqqi (short fract A) 2524 -- Runtime Function: unsigned short __fractunsqqhi (short fract A) 2525 -- Runtime Function: unsigned int __fractunsqqsi (short fract A) 2526 -- Runtime Function: unsigned long __fractunsqqdi (short fract A) 2527 -- Runtime Function: unsigned long long __fractunsqqti (short fract A) 2528 -- Runtime Function: unsigned char __fractunshqqi (fract A) 2529 -- Runtime Function: unsigned short __fractunshqhi (fract A) 2530 -- Runtime Function: unsigned int __fractunshqsi (fract A) 2531 -- Runtime Function: unsigned long __fractunshqdi (fract A) 2532 -- Runtime Function: unsigned long long __fractunshqti (fract A) 2533 -- Runtime Function: unsigned char __fractunssqqi (long fract A) 2534 -- Runtime Function: unsigned short __fractunssqhi (long fract A) 2535 -- Runtime Function: unsigned int __fractunssqsi (long fract A) 2536 -- Runtime Function: unsigned long __fractunssqdi (long fract A) 2537 -- Runtime Function: unsigned long long __fractunssqti (long fract A) 2538 -- Runtime Function: unsigned char __fractunsdqqi (long long fract A) 2539 -- Runtime Function: unsigned short __fractunsdqhi (long long fract A) 2540 -- Runtime Function: unsigned int __fractunsdqsi (long long fract A) 2541 -- Runtime Function: unsigned long __fractunsdqdi (long long fract A) 2542 -- Runtime Function: unsigned long long __fractunsdqti (long long fract 2543 A) 2544 -- Runtime Function: unsigned char __fractunshaqi (short accum A) 2545 -- Runtime Function: unsigned short __fractunshahi (short accum A) 2546 -- Runtime Function: unsigned int __fractunshasi (short accum A) 2547 -- Runtime Function: unsigned long __fractunshadi (short accum A) 2548 -- Runtime Function: unsigned long long __fractunshati (short accum A) 2549 -- Runtime Function: unsigned char __fractunssaqi (accum A) 2550 -- Runtime Function: unsigned short __fractunssahi (accum A) 2551 -- Runtime Function: unsigned int __fractunssasi (accum A) 2552 -- Runtime Function: unsigned long __fractunssadi (accum A) 2553 -- Runtime Function: unsigned long long __fractunssati (accum A) 2554 -- Runtime Function: unsigned char __fractunsdaqi (long accum A) 2555 -- Runtime Function: unsigned short __fractunsdahi (long accum A) 2556 -- Runtime Function: unsigned int __fractunsdasi (long accum A) 2557 -- Runtime Function: unsigned long __fractunsdadi (long accum A) 2558 -- Runtime Function: unsigned long long __fractunsdati (long accum A) 2559 -- Runtime Function: unsigned char __fractunstaqi (long long accum A) 2560 -- Runtime Function: unsigned short __fractunstahi (long long accum A) 2561 -- Runtime Function: unsigned int __fractunstasi (long long accum A) 2562 -- Runtime Function: unsigned long __fractunstadi (long long accum A) 2563 -- Runtime Function: unsigned long long __fractunstati (long long accum 2564 A) 2565 -- Runtime Function: unsigned char __fractunsuqqqi (unsigned short 2566 fract A) 2567 -- Runtime Function: unsigned short __fractunsuqqhi (unsigned short 2568 fract A) 2569 -- Runtime Function: unsigned int __fractunsuqqsi (unsigned short fract 2570 A) 2571 -- Runtime Function: unsigned long __fractunsuqqdi (unsigned short 2572 fract A) 2573 -- Runtime Function: unsigned long long __fractunsuqqti (unsigned short 2574 fract A) 2575 -- Runtime Function: unsigned char __fractunsuhqqi (unsigned fract A) 2576 -- Runtime Function: unsigned short __fractunsuhqhi (unsigned fract A) 2577 -- Runtime Function: unsigned int __fractunsuhqsi (unsigned fract A) 2578 -- Runtime Function: unsigned long __fractunsuhqdi (unsigned fract A) 2579 -- Runtime Function: unsigned long long __fractunsuhqti (unsigned fract 2580 A) 2581 -- Runtime Function: unsigned char __fractunsusqqi (unsigned long fract 2582 A) 2583 -- Runtime Function: unsigned short __fractunsusqhi (unsigned long 2584 fract A) 2585 -- Runtime Function: unsigned int __fractunsusqsi (unsigned long fract 2586 A) 2587 -- Runtime Function: unsigned long __fractunsusqdi (unsigned long fract 2588 A) 2589 -- Runtime Function: unsigned long long __fractunsusqti (unsigned long 2590 fract A) 2591 -- Runtime Function: unsigned char __fractunsudqqi (unsigned long long 2592 fract A) 2593 -- Runtime Function: unsigned short __fractunsudqhi (unsigned long long 2594 fract A) 2595 -- Runtime Function: unsigned int __fractunsudqsi (unsigned long long 2596 fract A) 2597 -- Runtime Function: unsigned long __fractunsudqdi (unsigned long long 2598 fract A) 2599 -- Runtime Function: unsigned long long __fractunsudqti (unsigned long 2600 long fract A) 2601 -- Runtime Function: unsigned char __fractunsuhaqi (unsigned short 2602 accum A) 2603 -- Runtime Function: unsigned short __fractunsuhahi (unsigned short 2604 accum A) 2605 -- Runtime Function: unsigned int __fractunsuhasi (unsigned short accum 2606 A) 2607 -- Runtime Function: unsigned long __fractunsuhadi (unsigned short 2608 accum A) 2609 -- Runtime Function: unsigned long long __fractunsuhati (unsigned short 2610 accum A) 2611 -- Runtime Function: unsigned char __fractunsusaqi (unsigned accum A) 2612 -- Runtime Function: unsigned short __fractunsusahi (unsigned accum A) 2613 -- Runtime Function: unsigned int __fractunsusasi (unsigned accum A) 2614 -- Runtime Function: unsigned long __fractunsusadi (unsigned accum A) 2615 -- Runtime Function: unsigned long long __fractunsusati (unsigned accum 2616 A) 2617 -- Runtime Function: unsigned char __fractunsudaqi (unsigned long accum 2618 A) 2619 -- Runtime Function: unsigned short __fractunsudahi (unsigned long 2620 accum A) 2621 -- Runtime Function: unsigned int __fractunsudasi (unsigned long accum 2622 A) 2623 -- Runtime Function: unsigned long __fractunsudadi (unsigned long accum 2624 A) 2625 -- Runtime Function: unsigned long long __fractunsudati (unsigned long 2626 accum A) 2627 -- Runtime Function: unsigned char __fractunsutaqi (unsigned long long 2628 accum A) 2629 -- Runtime Function: unsigned short __fractunsutahi (unsigned long long 2630 accum A) 2631 -- Runtime Function: unsigned int __fractunsutasi (unsigned long long 2632 accum A) 2633 -- Runtime Function: unsigned long __fractunsutadi (unsigned long long 2634 accum A) 2635 -- Runtime Function: unsigned long long __fractunsutati (unsigned long 2636 long accum A) 2637 -- Runtime Function: short fract __fractunsqiqq (unsigned char A) 2638 -- Runtime Function: fract __fractunsqihq (unsigned char A) 2639 -- Runtime Function: long fract __fractunsqisq (unsigned char A) 2640 -- Runtime Function: long long fract __fractunsqidq (unsigned char A) 2641 -- Runtime Function: short accum __fractunsqiha (unsigned char A) 2642 -- Runtime Function: accum __fractunsqisa (unsigned char A) 2643 -- Runtime Function: long accum __fractunsqida (unsigned char A) 2644 -- Runtime Function: long long accum __fractunsqita (unsigned char A) 2645 -- Runtime Function: unsigned short fract __fractunsqiuqq (unsigned 2646 char A) 2647 -- Runtime Function: unsigned fract __fractunsqiuhq (unsigned char A) 2648 -- Runtime Function: unsigned long fract __fractunsqiusq (unsigned char 2649 A) 2650 -- Runtime Function: unsigned long long fract __fractunsqiudq (unsigned 2651 char A) 2652 -- Runtime Function: unsigned short accum __fractunsqiuha (unsigned 2653 char A) 2654 -- Runtime Function: unsigned accum __fractunsqiusa (unsigned char A) 2655 -- Runtime Function: unsigned long accum __fractunsqiuda (unsigned char 2656 A) 2657 -- Runtime Function: unsigned long long accum __fractunsqiuta (unsigned 2658 char A) 2659 -- Runtime Function: short fract __fractunshiqq (unsigned short A) 2660 -- Runtime Function: fract __fractunshihq (unsigned short A) 2661 -- Runtime Function: long fract __fractunshisq (unsigned short A) 2662 -- Runtime Function: long long fract __fractunshidq (unsigned short A) 2663 -- Runtime Function: short accum __fractunshiha (unsigned short A) 2664 -- Runtime Function: accum __fractunshisa (unsigned short A) 2665 -- Runtime Function: long accum __fractunshida (unsigned short A) 2666 -- Runtime Function: long long accum __fractunshita (unsigned short A) 2667 -- Runtime Function: unsigned short fract __fractunshiuqq (unsigned 2668 short A) 2669 -- Runtime Function: unsigned fract __fractunshiuhq (unsigned short A) 2670 -- Runtime Function: unsigned long fract __fractunshiusq (unsigned 2671 short A) 2672 -- Runtime Function: unsigned long long fract __fractunshiudq (unsigned 2673 short A) 2674 -- Runtime Function: unsigned short accum __fractunshiuha (unsigned 2675 short A) 2676 -- Runtime Function: unsigned accum __fractunshiusa (unsigned short A) 2677 -- Runtime Function: unsigned long accum __fractunshiuda (unsigned 2678 short A) 2679 -- Runtime Function: unsigned long long accum __fractunshiuta (unsigned 2680 short A) 2681 -- Runtime Function: short fract __fractunssiqq (unsigned int A) 2682 -- Runtime Function: fract __fractunssihq (unsigned int A) 2683 -- Runtime Function: long fract __fractunssisq (unsigned int A) 2684 -- Runtime Function: long long fract __fractunssidq (unsigned int A) 2685 -- Runtime Function: short accum __fractunssiha (unsigned int A) 2686 -- Runtime Function: accum __fractunssisa (unsigned int A) 2687 -- Runtime Function: long accum __fractunssida (unsigned int A) 2688 -- Runtime Function: long long accum __fractunssita (unsigned int A) 2689 -- Runtime Function: unsigned short fract __fractunssiuqq (unsigned int 2690 A) 2691 -- Runtime Function: unsigned fract __fractunssiuhq (unsigned int A) 2692 -- Runtime Function: unsigned long fract __fractunssiusq (unsigned int 2693 A) 2694 -- Runtime Function: unsigned long long fract __fractunssiudq (unsigned 2695 int A) 2696 -- Runtime Function: unsigned short accum __fractunssiuha (unsigned int 2697 A) 2698 -- Runtime Function: unsigned accum __fractunssiusa (unsigned int A) 2699 -- Runtime Function: unsigned long accum __fractunssiuda (unsigned int 2700 A) 2701 -- Runtime Function: unsigned long long accum __fractunssiuta (unsigned 2702 int A) 2703 -- Runtime Function: short fract __fractunsdiqq (unsigned long A) 2704 -- Runtime Function: fract __fractunsdihq (unsigned long A) 2705 -- Runtime Function: long fract __fractunsdisq (unsigned long A) 2706 -- Runtime Function: long long fract __fractunsdidq (unsigned long A) 2707 -- Runtime Function: short accum __fractunsdiha (unsigned long A) 2708 -- Runtime Function: accum __fractunsdisa (unsigned long A) 2709 -- Runtime Function: long accum __fractunsdida (unsigned long A) 2710 -- Runtime Function: long long accum __fractunsdita (unsigned long A) 2711 -- Runtime Function: unsigned short fract __fractunsdiuqq (unsigned 2712 long A) 2713 -- Runtime Function: unsigned fract __fractunsdiuhq (unsigned long A) 2714 -- Runtime Function: unsigned long fract __fractunsdiusq (unsigned long 2715 A) 2716 -- Runtime Function: unsigned long long fract __fractunsdiudq (unsigned 2717 long A) 2718 -- Runtime Function: unsigned short accum __fractunsdiuha (unsigned 2719 long A) 2720 -- Runtime Function: unsigned accum __fractunsdiusa (unsigned long A) 2721 -- Runtime Function: unsigned long accum __fractunsdiuda (unsigned long 2722 A) 2723 -- Runtime Function: unsigned long long accum __fractunsdiuta (unsigned 2724 long A) 2725 -- Runtime Function: short fract __fractunstiqq (unsigned long long A) 2726 -- Runtime Function: fract __fractunstihq (unsigned long long A) 2727 -- Runtime Function: long fract __fractunstisq (unsigned long long A) 2728 -- Runtime Function: long long fract __fractunstidq (unsigned long long 2729 A) 2730 -- Runtime Function: short accum __fractunstiha (unsigned long long A) 2731 -- Runtime Function: accum __fractunstisa (unsigned long long A) 2732 -- Runtime Function: long accum __fractunstida (unsigned long long A) 2733 -- Runtime Function: long long accum __fractunstita (unsigned long long 2734 A) 2735 -- Runtime Function: unsigned short fract __fractunstiuqq (unsigned 2736 long long A) 2737 -- Runtime Function: unsigned fract __fractunstiuhq (unsigned long long 2738 A) 2739 -- Runtime Function: unsigned long fract __fractunstiusq (unsigned long 2740 long A) 2741 -- Runtime Function: unsigned long long fract __fractunstiudq (unsigned 2742 long long A) 2743 -- Runtime Function: unsigned short accum __fractunstiuha (unsigned 2744 long long A) 2745 -- Runtime Function: unsigned accum __fractunstiusa (unsigned long long 2746 A) 2747 -- Runtime Function: unsigned long accum __fractunstiuda (unsigned long 2748 long A) 2749 -- Runtime Function: unsigned long long accum __fractunstiuta (unsigned 2750 long long A) 2751 These functions convert from fractionals to unsigned 2752 non-fractionals; and from unsigned non-fractionals to fractionals, 2753 without saturation. 2754 2755 -- Runtime Function: short fract __satfractunsqiqq (unsigned char A) 2756 -- Runtime Function: fract __satfractunsqihq (unsigned char A) 2757 -- Runtime Function: long fract __satfractunsqisq (unsigned char A) 2758 -- Runtime Function: long long fract __satfractunsqidq (unsigned char 2759 A) 2760 -- Runtime Function: short accum __satfractunsqiha (unsigned char A) 2761 -- Runtime Function: accum __satfractunsqisa (unsigned char A) 2762 -- Runtime Function: long accum __satfractunsqida (unsigned char A) 2763 -- Runtime Function: long long accum __satfractunsqita (unsigned char 2764 A) 2765 -- Runtime Function: unsigned short fract __satfractunsqiuqq (unsigned 2766 char A) 2767 -- Runtime Function: unsigned fract __satfractunsqiuhq (unsigned char 2768 A) 2769 -- Runtime Function: unsigned long fract __satfractunsqiusq (unsigned 2770 char A) 2771 -- Runtime Function: unsigned long long fract __satfractunsqiudq 2772 (unsigned char A) 2773 -- Runtime Function: unsigned short accum __satfractunsqiuha (unsigned 2774 char A) 2775 -- Runtime Function: unsigned accum __satfractunsqiusa (unsigned char 2776 A) 2777 -- Runtime Function: unsigned long accum __satfractunsqiuda (unsigned 2778 char A) 2779 -- Runtime Function: unsigned long long accum __satfractunsqiuta 2780 (unsigned char A) 2781 -- Runtime Function: short fract __satfractunshiqq (unsigned short A) 2782 -- Runtime Function: fract __satfractunshihq (unsigned short A) 2783 -- Runtime Function: long fract __satfractunshisq (unsigned short A) 2784 -- Runtime Function: long long fract __satfractunshidq (unsigned short 2785 A) 2786 -- Runtime Function: short accum __satfractunshiha (unsigned short A) 2787 -- Runtime Function: accum __satfractunshisa (unsigned short A) 2788 -- Runtime Function: long accum __satfractunshida (unsigned short A) 2789 -- Runtime Function: long long accum __satfractunshita (unsigned short 2790 A) 2791 -- Runtime Function: unsigned short fract __satfractunshiuqq (unsigned 2792 short A) 2793 -- Runtime Function: unsigned fract __satfractunshiuhq (unsigned short 2794 A) 2795 -- Runtime Function: unsigned long fract __satfractunshiusq (unsigned 2796 short A) 2797 -- Runtime Function: unsigned long long fract __satfractunshiudq 2798 (unsigned short A) 2799 -- Runtime Function: unsigned short accum __satfractunshiuha (unsigned 2800 short A) 2801 -- Runtime Function: unsigned accum __satfractunshiusa (unsigned short 2802 A) 2803 -- Runtime Function: unsigned long accum __satfractunshiuda (unsigned 2804 short A) 2805 -- Runtime Function: unsigned long long accum __satfractunshiuta 2806 (unsigned short A) 2807 -- Runtime Function: short fract __satfractunssiqq (unsigned int A) 2808 -- Runtime Function: fract __satfractunssihq (unsigned int A) 2809 -- Runtime Function: long fract __satfractunssisq (unsigned int A) 2810 -- Runtime Function: long long fract __satfractunssidq (unsigned int A) 2811 -- Runtime Function: short accum __satfractunssiha (unsigned int A) 2812 -- Runtime Function: accum __satfractunssisa (unsigned int A) 2813 -- Runtime Function: long accum __satfractunssida (unsigned int A) 2814 -- Runtime Function: long long accum __satfractunssita (unsigned int A) 2815 -- Runtime Function: unsigned short fract __satfractunssiuqq (unsigned 2816 int A) 2817 -- Runtime Function: unsigned fract __satfractunssiuhq (unsigned int A) 2818 -- Runtime Function: unsigned long fract __satfractunssiusq (unsigned 2819 int A) 2820 -- Runtime Function: unsigned long long fract __satfractunssiudq 2821 (unsigned int A) 2822 -- Runtime Function: unsigned short accum __satfractunssiuha (unsigned 2823 int A) 2824 -- Runtime Function: unsigned accum __satfractunssiusa (unsigned int A) 2825 -- Runtime Function: unsigned long accum __satfractunssiuda (unsigned 2826 int A) 2827 -- Runtime Function: unsigned long long accum __satfractunssiuta 2828 (unsigned int A) 2829 -- Runtime Function: short fract __satfractunsdiqq (unsigned long A) 2830 -- Runtime Function: fract __satfractunsdihq (unsigned long A) 2831 -- Runtime Function: long fract __satfractunsdisq (unsigned long A) 2832 -- Runtime Function: long long fract __satfractunsdidq (unsigned long 2833 A) 2834 -- Runtime Function: short accum __satfractunsdiha (unsigned long A) 2835 -- Runtime Function: accum __satfractunsdisa (unsigned long A) 2836 -- Runtime Function: long accum __satfractunsdida (unsigned long A) 2837 -- Runtime Function: long long accum __satfractunsdita (unsigned long 2838 A) 2839 -- Runtime Function: unsigned short fract __satfractunsdiuqq (unsigned 2840 long A) 2841 -- Runtime Function: unsigned fract __satfractunsdiuhq (unsigned long 2842 A) 2843 -- Runtime Function: unsigned long fract __satfractunsdiusq (unsigned 2844 long A) 2845 -- Runtime Function: unsigned long long fract __satfractunsdiudq 2846 (unsigned long A) 2847 -- Runtime Function: unsigned short accum __satfractunsdiuha (unsigned 2848 long A) 2849 -- Runtime Function: unsigned accum __satfractunsdiusa (unsigned long 2850 A) 2851 -- Runtime Function: unsigned long accum __satfractunsdiuda (unsigned 2852 long A) 2853 -- Runtime Function: unsigned long long accum __satfractunsdiuta 2854 (unsigned long A) 2855 -- Runtime Function: short fract __satfractunstiqq (unsigned long long 2856 A) 2857 -- Runtime Function: fract __satfractunstihq (unsigned long long A) 2858 -- Runtime Function: long fract __satfractunstisq (unsigned long long 2859 A) 2860 -- Runtime Function: long long fract __satfractunstidq (unsigned long 2861 long A) 2862 -- Runtime Function: short accum __satfractunstiha (unsigned long long 2863 A) 2864 -- Runtime Function: accum __satfractunstisa (unsigned long long A) 2865 -- Runtime Function: long accum __satfractunstida (unsigned long long 2866 A) 2867 -- Runtime Function: long long accum __satfractunstita (unsigned long 2868 long A) 2869 -- Runtime Function: unsigned short fract __satfractunstiuqq (unsigned 2870 long long A) 2871 -- Runtime Function: unsigned fract __satfractunstiuhq (unsigned long 2872 long A) 2873 -- Runtime Function: unsigned long fract __satfractunstiusq (unsigned 2874 long long A) 2875 -- Runtime Function: unsigned long long fract __satfractunstiudq 2876 (unsigned long long A) 2877 -- Runtime Function: unsigned short accum __satfractunstiuha (unsigned 2878 long long A) 2879 -- Runtime Function: unsigned accum __satfractunstiusa (unsigned long 2880 long A) 2881 -- Runtime Function: unsigned long accum __satfractunstiuda (unsigned 2882 long long A) 2883 -- Runtime Function: unsigned long long accum __satfractunstiuta 2884 (unsigned long long A) 2885 These functions convert from unsigned non-fractionals to 2886 fractionals, with saturation. 2887 2888 2889File: gccint.info, Node: Exception handling routines, Next: Miscellaneous routines, Prev: Fixed-point fractional library routines, Up: Libgcc 2890 28914.5 Language-independent routines for exception handling 2892======================================================== 2893 2894document me! 2895 2896 _Unwind_DeleteException 2897 _Unwind_Find_FDE 2898 _Unwind_ForcedUnwind 2899 _Unwind_GetGR 2900 _Unwind_GetIP 2901 _Unwind_GetLanguageSpecificData 2902 _Unwind_GetRegionStart 2903 _Unwind_GetTextRelBase 2904 _Unwind_GetDataRelBase 2905 _Unwind_RaiseException 2906 _Unwind_Resume 2907 _Unwind_SetGR 2908 _Unwind_SetIP 2909 _Unwind_FindEnclosingFunction 2910 _Unwind_SjLj_Register 2911 _Unwind_SjLj_Unregister 2912 _Unwind_SjLj_RaiseException 2913 _Unwind_SjLj_ForcedUnwind 2914 _Unwind_SjLj_Resume 2915 __deregister_frame 2916 __deregister_frame_info 2917 __deregister_frame_info_bases 2918 __register_frame 2919 __register_frame_info 2920 __register_frame_info_bases 2921 __register_frame_info_table 2922 __register_frame_info_table_bases 2923 __register_frame_table 2924 2925 2926File: gccint.info, Node: Miscellaneous routines, Prev: Exception handling routines, Up: Libgcc 2927 29284.6 Miscellaneous runtime library routines 2929========================================== 2930 29314.6.1 Cache control functions 2932----------------------------- 2933 2934 -- Runtime Function: void __clear_cache (char *BEG, char *END) 2935 This function clears the instruction cache between BEG and END. 2936 29374.6.2 Split stack functions and variables 2938----------------------------------------- 2939 2940 -- Runtime Function: void * __splitstack_find (void *SEGMENT_ARG, void 2941 *SP, size_t LEN, void **NEXT_SEGMENT, void **NEXT_SP, void 2942 **INITIAL_SP) 2943 When using '-fsplit-stack', this call may be used to iterate over 2944 the stack segments. It may be called like this: 2945 void *next_segment = NULL; 2946 void *next_sp = NULL; 2947 void *initial_sp = NULL; 2948 void *stack; 2949 size_t stack_size; 2950 while ((stack = __splitstack_find (next_segment, next_sp, 2951 &stack_size, &next_segment, 2952 &next_sp, &initial_sp)) 2953 != NULL) 2954 { 2955 /* Stack segment starts at stack and is 2956 stack_size bytes long. */ 2957 } 2958 2959 There is no way to iterate over the stack segments of a different 2960 thread. However, what is permitted is for one thread to call this 2961 with the SEGMENT_ARG and SP arguments NULL, to pass NEXT_SEGMENT, 2962 NEXT_SP, and INITIAL_SP to a different thread, and then to suspend 2963 one way or another. A different thread may run the subsequent 2964 '__splitstack_find' iterations. Of course, this will only work if 2965 the first thread is suspended while the second thread is calling 2966 '__splitstack_find'. If not, the second thread could be looking at 2967 the stack while it is changing, and anything could happen. 2968 2969 -- Variable: __morestack_segments 2970 -- Variable: __morestack_current_segment 2971 -- Variable: __morestack_initial_sp 2972 Internal variables used by the '-fsplit-stack' implementation. 2973 2974 2975File: gccint.info, Node: Languages, Next: Source Tree, Prev: Libgcc, Up: Top 2976 29775 Language Front Ends in GCC 2978**************************** 2979 2980The interface to front ends for languages in GCC, and in particular the 2981'tree' structure (*note GENERIC::), was initially designed for C, and 2982many aspects of it are still somewhat biased towards C and C-like 2983languages. It is, however, reasonably well suited to other procedural 2984languages, and front ends for many such languages have been written for 2985GCC. 2986 2987 Writing a compiler as a front end for GCC, rather than compiling 2988directly to assembler or generating C code which is then compiled by 2989GCC, has several advantages: 2990 2991 * GCC front ends benefit from the support for many different target 2992 machines already present in GCC. 2993 * GCC front ends benefit from all the optimizations in GCC. Some of 2994 these, such as alias analysis, may work better when GCC is 2995 compiling directly from source code then when it is compiling from 2996 generated C code. 2997 * Better debugging information is generated when compiling directly 2998 from source code than when going via intermediate generated C code. 2999 3000 Because of the advantages of writing a compiler as a GCC front end, GCC 3001front ends have also been created for languages very different from 3002those for which GCC was designed, such as the declarative 3003logic/functional language Mercury. For these reasons, it may also be 3004useful to implement compilers created for specialized purposes (for 3005example, as part of a research project) as GCC front ends. 3006 3007 3008File: gccint.info, Node: Source Tree, Next: Testsuites, Prev: Languages, Up: Top 3009 30106 Source Tree Structure and Build System 3011**************************************** 3012 3013This chapter describes the structure of the GCC source tree, and how GCC 3014is built. The user documentation for building and installing GCC is in 3015a separate manual (<http://gcc.gnu.org/install/>), with which it is 3016presumed that you are familiar. 3017 3018* Menu: 3019 3020* Configure Terms:: Configuration terminology and history. 3021* Top Level:: The top level source directory. 3022* gcc Directory:: The 'gcc' subdirectory. 3023 3024 3025File: gccint.info, Node: Configure Terms, Next: Top Level, Up: Source Tree 3026 30276.1 Configure Terms and History 3028=============================== 3029 3030The configure and build process has a long and colorful history, and can 3031be confusing to anyone who doesn't know why things are the way they are. 3032While there are other documents which describe the configuration process 3033in detail, here are a few things that everyone working on GCC should 3034know. 3035 3036 There are three system names that the build knows about: the machine 3037you are building on ("build"), the machine that you are building for 3038("host"), and the machine that GCC will produce code for ("target"). 3039When you configure GCC, you specify these with '--build=', '--host=', 3040and '--target='. 3041 3042 Specifying the host without specifying the build should be avoided, as 3043'configure' may (and once did) assume that the host you specify is also 3044the build, which may not be true. 3045 3046 If build, host, and target are all the same, this is called a "native". 3047If build and host are the same but target is different, this is called a 3048"cross". If build, host, and target are all different this is called a 3049"canadian" (for obscure reasons dealing with Canada's political party 3050and the background of the person working on the build at that time). If 3051host and target are the same, but build is different, you are using a 3052cross-compiler to build a native for a different system. Some people 3053call this a "host-x-host", "crossed native", or "cross-built native". 3054If build and target are the same, but host is different, you are using a 3055cross compiler to build a cross compiler that produces code for the 3056machine you're building on. This is rare, so there is no common way of 3057describing it. There is a proposal to call this a "crossback". 3058 3059 If build and host are the same, the GCC you are building will also be 3060used to build the target libraries (like 'libstdc++'). If build and 3061host are different, you must have already built and installed a cross 3062compiler that will be used to build the target libraries (if you 3063configured with '--target=foo-bar', this compiler will be called 3064'foo-bar-gcc'). 3065 3066 In the case of target libraries, the machine you're building for is the 3067machine you specified with '--target'. So, build is the machine you're 3068building on (no change there), host is the machine you're building for 3069(the target libraries are built for the target, so host is the target 3070you specified), and target doesn't apply (because you're not building a 3071compiler, you're building libraries). The configure/make process will 3072adjust these variables as needed. It also sets '$with_cross_host' to 3073the original '--host' value in case you need it. 3074 3075 The 'libiberty' support library is built up to three times: once for 3076the host, once for the target (even if they are the same), and once for 3077the build if build and host are different. This allows it to be used by 3078all programs which are generated in the course of the build process. 3079 3080 3081File: gccint.info, Node: Top Level, Next: gcc Directory, Prev: Configure Terms, Up: Source Tree 3082 30836.2 Top Level Source Directory 3084============================== 3085 3086The top level source directory in a GCC distribution contains several 3087files and directories that are shared with other software distributions 3088such as that of GNU Binutils. It also contains several subdirectories 3089that contain parts of GCC and its runtime libraries: 3090 3091'boehm-gc' 3092 The Boehm conservative garbage collector, used as part of the Java 3093 runtime library. 3094 3095'config' 3096 Autoconf macros and Makefile fragments used throughout the tree. 3097 3098'contrib' 3099 Contributed scripts that may be found useful in conjunction with 3100 GCC. One of these, 'contrib/texi2pod.pl', is used to generate man 3101 pages from Texinfo manuals as part of the GCC build process. 3102 3103'fixincludes' 3104 The support for fixing system headers to work with GCC. See 3105 'fixincludes/README' for more information. The headers fixed by 3106 this mechanism are installed in 'LIBSUBDIR/include-fixed'. Along 3107 with those headers, 'README-fixinc' is also installed, as 3108 'LIBSUBDIR/include-fixed/README'. 3109 3110'gcc' 3111 The main sources of GCC itself (except for runtime libraries), 3112 including optimizers, support for different target architectures, 3113 language front ends, and testsuites. *Note The 'gcc' Subdirectory: 3114 gcc Directory, for details. 3115 3116'gnattools' 3117 Support tools for GNAT. 3118 3119'include' 3120 Headers for the 'libiberty' library. 3121 3122'intl' 3123 GNU 'libintl', from GNU 'gettext', for systems which do not include 3124 it in 'libc'. 3125 3126'libada' 3127 The Ada runtime library. 3128 3129'libatomic' 3130 The runtime support library for atomic operations (e.g. for 3131 '__sync' and '__atomic'). 3132 3133'libcpp' 3134 The C preprocessor library. 3135 3136'libdecnumber' 3137 The Decimal Float support library. 3138 3139'libffi' 3140 The 'libffi' library, used as part of the Java runtime library. 3141 3142'libgcc' 3143 The GCC runtime library. 3144 3145'libgfortran' 3146 The Fortran runtime library. 3147 3148'libgo' 3149 The Go runtime library. The bulk of this library is mirrored from 3150 the master Go repository (http://code.google.com/p/go/). 3151 3152'libgomp' 3153 The GNU Offloading and Multi Processing Runtime Library. 3154 3155'libiberty' 3156 The 'libiberty' library, used for portability and for some 3157 generally useful data structures and algorithms. *Note 3158 Introduction: (libiberty)Top, for more information about this 3159 library. 3160 3161'libitm' 3162 The runtime support library for transactional memory. 3163 3164'libjava' 3165 The Java runtime library. 3166 3167'libobjc' 3168 The Objective-C and Objective-C++ runtime library. 3169 3170'libquadmath' 3171 The runtime support library for quad-precision math operations. 3172 3173'libssp' 3174 The Stack protector runtime library. 3175 3176'libstdc++-v3' 3177 The C++ runtime library. 3178 3179'lto-plugin' 3180 Plugin used by the linker if link-time optimizations are enabled. 3181 3182'maintainer-scripts' 3183 Scripts used by the 'gccadmin' account on 'gcc.gnu.org'. 3184 3185'zlib' 3186 The 'zlib' compression library, used by the Java front end, as part 3187 of the Java runtime library, and for compressing and uncompressing 3188 GCC's intermediate language in LTO object files. 3189 3190 The build system in the top level directory, including how recursion 3191into subdirectories works and how building runtime libraries for 3192multilibs is handled, is documented in a separate manual, included with 3193GNU Binutils. *Note GNU configure and build system: (configure)Top, for 3194details. 3195 3196 3197File: gccint.info, Node: gcc Directory, Prev: Top Level, Up: Source Tree 3198 31996.3 The 'gcc' Subdirectory 3200========================== 3201 3202The 'gcc' directory contains many files that are part of the C sources 3203of GCC, other files used as part of the configuration and build process, 3204and subdirectories including documentation and a testsuite. The files 3205that are sources of GCC are documented in a separate chapter. *Note 3206Passes and Files of the Compiler: Passes. 3207 3208* Menu: 3209 3210* Subdirectories:: Subdirectories of 'gcc'. 3211* Configuration:: The configuration process, and the files it uses. 3212* Build:: The build system in the 'gcc' directory. 3213* Makefile:: Targets in 'gcc/Makefile'. 3214* Library Files:: Library source files and headers under 'gcc/'. 3215* Headers:: Headers installed by GCC. 3216* Documentation:: Building documentation in GCC. 3217* Front End:: Anatomy of a language front end. 3218* Back End:: Anatomy of a target back end. 3219 3220 3221File: gccint.info, Node: Subdirectories, Next: Configuration, Up: gcc Directory 3222 32236.3.1 Subdirectories of 'gcc' 3224----------------------------- 3225 3226The 'gcc' directory contains the following subdirectories: 3227 3228'LANGUAGE' 3229 Subdirectories for various languages. Directories containing a 3230 file 'config-lang.in' are language subdirectories. The contents of 3231 the subdirectories 'c' (for C), 'cp' (for C++), 'objc' (for 3232 Objective-C), 'objcp' (for Objective-C++), and 'lto' (for LTO) are 3233 documented in this manual (*note Passes and Files of the Compiler: 3234 Passes.); those for other languages are not. *Note Anatomy of a 3235 Language Front End: Front End, for details of the files in these 3236 directories. 3237 3238'common' 3239 Source files shared between the compiler drivers (such as 'gcc') 3240 and the compilers proper (such as 'cc1'). If an architecture 3241 defines target hooks shared between those places, it also has a 3242 subdirectory in 'common/config'. *Note Target Structure::. 3243 3244'config' 3245 Configuration files for supported architectures and operating 3246 systems. *Note Anatomy of a Target Back End: Back End, for details 3247 of the files in this directory. 3248 3249'doc' 3250 Texinfo documentation for GCC, together with automatically 3251 generated man pages and support for converting the installation 3252 manual to HTML. *Note Documentation::. 3253 3254'ginclude' 3255 System headers installed by GCC, mainly those required by the C 3256 standard of freestanding implementations. *Note Headers Installed 3257 by GCC: Headers, for details of when these and other headers are 3258 installed. 3259 3260'po' 3261 Message catalogs with translations of messages produced by GCC into 3262 various languages, 'LANGUAGE.po'. This directory also contains 3263 'gcc.pot', the template for these message catalogues, 'exgettext', 3264 a wrapper around 'gettext' to extract the messages from the GCC 3265 sources and create 'gcc.pot', which is run by 'make gcc.pot', and 3266 'EXCLUDES', a list of files from which messages should not be 3267 extracted. 3268 3269'testsuite' 3270 The GCC testsuites (except for those for runtime libraries). *Note 3271 Testsuites::. 3272 3273 3274File: gccint.info, Node: Configuration, Next: Build, Prev: Subdirectories, Up: gcc Directory 3275 32766.3.2 Configuration in the 'gcc' Directory 3277------------------------------------------ 3278 3279The 'gcc' directory is configured with an Autoconf-generated script 3280'configure'. The 'configure' script is generated from 'configure.ac' 3281and 'aclocal.m4'. From the files 'configure.ac' and 'acconfig.h', 3282Autoheader generates the file 'config.in'. The file 'cstamp-h.in' is 3283used as a timestamp. 3284 3285* Menu: 3286 3287* Config Fragments:: Scripts used by 'configure'. 3288* System Config:: The 'config.build', 'config.host', and 3289 'config.gcc' files. 3290* Configuration Files:: Files created by running 'configure'. 3291 3292 3293File: gccint.info, Node: Config Fragments, Next: System Config, Up: Configuration 3294 32956.3.2.1 Scripts Used by 'configure' 3296................................... 3297 3298'configure' uses some other scripts to help in its work: 3299 3300 * The standard GNU 'config.sub' and 'config.guess' files, kept in the 3301 top level directory, are used. 3302 3303 * The file 'config.gcc' is used to handle configuration specific to 3304 the particular target machine. The file 'config.build' is used to 3305 handle configuration specific to the particular build machine. The 3306 file 'config.host' is used to handle configuration specific to the 3307 particular host machine. (In general, these should only be used 3308 for features that cannot reasonably be tested in Autoconf feature 3309 tests.) *Note The 'config.build'; 'config.host'; and 'config.gcc' 3310 Files: System Config, for details of the contents of these files. 3311 3312 * Each language subdirectory has a file 'LANGUAGE/config-lang.in' 3313 that is used for front-end-specific configuration. *Note The Front 3314 End 'config-lang.in' File: Front End Config, for details of this 3315 file. 3316 3317 * A helper script 'configure.frag' is used as part of creating the 3318 output of 'configure'. 3319 3320 3321File: gccint.info, Node: System Config, Next: Configuration Files, Prev: Config Fragments, Up: Configuration 3322 33236.3.2.2 The 'config.build'; 'config.host'; and 'config.gcc' Files 3324................................................................. 3325 3326The 'config.build' file contains specific rules for particular systems 3327which GCC is built on. This should be used as rarely as possible, as 3328the behavior of the build system can always be detected by autoconf. 3329 3330 The 'config.host' file contains specific rules for particular systems 3331which GCC will run on. This is rarely needed. 3332 3333 The 'config.gcc' file contains specific rules for particular systems 3334which GCC will generate code for. This is usually needed. 3335 3336 Each file has a list of the shell variables it sets, with descriptions, 3337at the top of the file. 3338 3339 FIXME: document the contents of these files, and what variables should 3340be set to control build, host and target configuration. 3341 3342 3343File: gccint.info, Node: Configuration Files, Prev: System Config, Up: Configuration 3344 33456.3.2.3 Files Created by 'configure' 3346.................................... 3347 3348Here we spell out what files will be set up by 'configure' in the 'gcc' 3349directory. Some other files are created as temporary files in the 3350configuration process, and are not used in the subsequent build; these 3351are not documented. 3352 3353 * 'Makefile' is constructed from 'Makefile.in', together with the 3354 host and target fragments (*note Makefile Fragments: Fragments.) 3355 't-TARGET' and 'x-HOST' from 'config', if any, and language 3356 Makefile fragments 'LANGUAGE/Make-lang.in'. 3357 * 'auto-host.h' contains information about the host machine 3358 determined by 'configure'. If the host machine is different from 3359 the build machine, then 'auto-build.h' is also created, containing 3360 such information about the build machine. 3361 * 'config.status' is a script that may be run to recreate the current 3362 configuration. 3363 * 'configargs.h' is a header containing details of the arguments 3364 passed to 'configure' to configure GCC, and of the thread model 3365 used. 3366 * 'cstamp-h' is used as a timestamp. 3367 * If a language 'config-lang.in' file (*note The Front End 3368 'config-lang.in' File: Front End Config.) sets 'outputs', then the 3369 files listed in 'outputs' there are also generated. 3370 3371 The following configuration headers are created from the Makefile, 3372using 'mkconfig.sh', rather than directly by 'configure'. 'config.h', 3373'bconfig.h' and 'tconfig.h' all contain the 'xm-MACHINE.h' header, if 3374any, appropriate to the host, build and target machines respectively, 3375the configuration headers for the target, and some definitions; for the 3376host and build machines, these include the autoconfigured headers 3377generated by 'configure'. The other configuration headers are 3378determined by 'config.gcc'. They also contain the typedefs for 'rtx', 3379'rtvec' and 'tree'. 3380 3381 * 'config.h', for use in programs that run on the host machine. 3382 * 'bconfig.h', for use in programs that run on the build machine. 3383 * 'tconfig.h', for use in programs and libraries for the target 3384 machine. 3385 * 'tm_p.h', which includes the header 'MACHINE-protos.h' that 3386 contains prototypes for functions in the target 'MACHINE.c' file. 3387 The header 'MACHINE-protos.h' can include prototypes of functions 3388 that use rtl and tree data structures inside appropriate '#ifdef 3389 RTX_CODE' and '#ifdef TREE_CODE' conditional code segements. The 3390 'MACHINE-protos.h' is included after the 'rtl.h' and/or 'tree.h' 3391 would have been included. The 'tm_p.h' also includes the header 3392 'tm-preds.h' which is generated by 'genpreds' program during the 3393 build to define the declarations and inline functions for the 3394 predicate functions. 3395 3396 3397File: gccint.info, Node: Build, Next: Makefile, Prev: Configuration, Up: gcc Directory 3398 33996.3.3 Build System in the 'gcc' Directory 3400----------------------------------------- 3401 3402FIXME: describe the build system, including what is built in what 3403stages. Also list the various source files that are used in the build 3404process but aren't source files of GCC itself and so aren't documented 3405below (*note Passes::). 3406 3407 3408File: gccint.info, Node: Makefile, Next: Library Files, Prev: Build, Up: gcc Directory 3409 34106.3.4 Makefile Targets 3411---------------------- 3412 3413These targets are available from the 'gcc' directory: 3414 3415'all' 3416 This is the default target. Depending on what your 3417 build/host/target configuration is, it coordinates all the things 3418 that need to be built. 3419 3420'doc' 3421 Produce info-formatted documentation and man pages. Essentially it 3422 calls 'make man' and 'make info'. 3423 3424'dvi' 3425 Produce DVI-formatted documentation. 3426 3427'pdf' 3428 Produce PDF-formatted documentation. 3429 3430'html' 3431 Produce HTML-formatted documentation. 3432 3433'man' 3434 Generate man pages. 3435 3436'info' 3437 Generate info-formatted pages. 3438 3439'mostlyclean' 3440 Delete the files made while building the compiler. 3441 3442'clean' 3443 That, and all the other files built by 'make all'. 3444 3445'distclean' 3446 That, and all the files created by 'configure'. 3447 3448'maintainer-clean' 3449 Distclean plus any file that can be generated from other files. 3450 Note that additional tools may be required beyond what is normally 3451 needed to build GCC. 3452 3453'srcextra' 3454 Generates files in the source directory that are not 3455 version-controlled but should go into a release tarball. 3456 3457'srcinfo' 3458'srcman' 3459 Copies the info-formatted and manpage documentation into the source 3460 directory usually for the purpose of generating a release tarball. 3461 3462'install' 3463 Installs GCC. 3464 3465'uninstall' 3466 Deletes installed files, though this is not supported. 3467 3468'check' 3469 Run the testsuite. This creates a 'testsuite' subdirectory that 3470 has various '.sum' and '.log' files containing the results of the 3471 testing. You can run subsets with, for example, 'make check-gcc'. 3472 You can specify specific tests by setting 'RUNTESTFLAGS' to be the 3473 name of the '.exp' file, optionally followed by (for some tests) an 3474 equals and a file wildcard, like: 3475 3476 make check-gcc RUNTESTFLAGS="execute.exp=19980413-*" 3477 3478 Note that running the testsuite may require additional tools be 3479 installed, such as Tcl or DejaGnu. 3480 3481 The toplevel tree from which you start GCC compilation is not the GCC 3482directory, but rather a complex Makefile that coordinates the various 3483steps of the build, including bootstrapping the compiler and using the 3484new compiler to build target libraries. 3485 3486 When GCC is configured for a native configuration, the default action 3487for 'make' is to do a full three-stage bootstrap. This means that GCC 3488is built three times--once with the native compiler, once with the 3489native-built compiler it just built, and once with the compiler it built 3490the second time. In theory, the last two should produce the same 3491results, which 'make compare' can check. Each stage is configured 3492separately and compiled into a separate directory, to minimize problems 3493due to ABI incompatibilities between the native compiler and GCC. 3494 3495 If you do a change, rebuilding will also start from the first stage and 3496"bubble" up the change through the three stages. Each stage is taken 3497from its build directory (if it had been built previously), rebuilt, and 3498copied to its subdirectory. This will allow you to, for example, 3499continue a bootstrap after fixing a bug which causes the stage2 build to 3500crash. It does not provide as good coverage of the compiler as 3501bootstrapping from scratch, but it ensures that the new code is 3502syntactically correct (e.g., that you did not use GCC extensions by 3503mistake), and avoids spurious bootstrap comparison failures(1). 3504 3505 Other targets available from the top level include: 3506 3507'bootstrap-lean' 3508 Like 'bootstrap', except that the various stages are removed once 3509 they're no longer needed. This saves disk space. 3510 3511'bootstrap2' 3512'bootstrap2-lean' 3513 Performs only the first two stages of bootstrap. Unlike a 3514 three-stage bootstrap, this does not perform a comparison to test 3515 that the compiler is running properly. Note that the disk space 3516 required by a "lean" bootstrap is approximately independent of the 3517 number of stages. 3518 3519'stageN-bubble (N = 1...4, profile, feedback)' 3520 Rebuild all the stages up to N, with the appropriate flags, 3521 "bubbling" the changes as described above. 3522 3523'all-stageN (N = 1...4, profile, feedback)' 3524 Assuming that stage N has already been built, rebuild it with the 3525 appropriate flags. This is rarely needed. 3526 3527'cleanstrap' 3528 Remove everything ('make clean') and rebuilds ('make bootstrap'). 3529 3530'compare' 3531 Compares the results of stages 2 and 3. This ensures that the 3532 compiler is running properly, since it should produce the same 3533 object files regardless of how it itself was compiled. 3534 3535'profiledbootstrap' 3536 Builds a compiler with profiling feedback information. In this 3537 case, the second and third stages are named 'profile' and 3538 'feedback', respectively. For more information, see *note Building 3539 with profile feedback: (gccinstall)Building. 3540 3541'restrap' 3542 Restart a bootstrap, so that everything that was not built with the 3543 system compiler is rebuilt. 3544 3545'stageN-start (N = 1...4, profile, feedback)' 3546 For each package that is bootstrapped, rename directories so that, 3547 for example, 'gcc' points to the stageN GCC, compiled with the 3548 stageN-1 GCC(2). 3549 3550 You will invoke this target if you need to test or debug the stageN 3551 GCC. If you only need to execute GCC (but you need not run 'make' 3552 either to rebuild it or to run test suites), you should be able to 3553 work directly in the 'stageN-gcc' directory. This makes it easier 3554 to debug multiple stages in parallel. 3555 3556'stage' 3557 For each package that is bootstrapped, relocate its build directory 3558 to indicate its stage. For example, if the 'gcc' directory points 3559 to the stage2 GCC, after invoking this target it will be renamed to 3560 'stage2-gcc'. 3561 3562 If you wish to use non-default GCC flags when compiling the stage2 and 3563stage3 compilers, set 'BOOT_CFLAGS' on the command line when doing 3564'make'. 3565 3566 Usually, the first stage only builds the languages that the compiler is 3567written in: typically, C and maybe Ada. If you are debugging a 3568miscompilation of a different stage2 front-end (for example, of the 3569Fortran front-end), you may want to have front-ends for other languages 3570in the first stage as well. To do so, set 'STAGE1_LANGUAGES' on the 3571command line when doing 'make'. 3572 3573 For example, in the aforementioned scenario of debugging a Fortran 3574front-end miscompilation caused by the stage1 compiler, you may need a 3575command like 3576 3577 make stage2-bubble STAGE1_LANGUAGES=c,fortran 3578 3579 Alternatively, you can use per-language targets to build and test 3580languages that are not enabled by default in stage1. For example, 'make 3581f951' will build a Fortran compiler even in the stage1 build directory. 3582 3583 ---------- Footnotes ---------- 3584 3585 (1) Except if the compiler was buggy and miscompiled some of the 3586files that were not modified. In this case, it's best to use 'make 3587restrap'. 3588 3589 (2) Customarily, the system compiler is also termed the 'stage0' GCC. 3590 3591 3592File: gccint.info, Node: Library Files, Next: Headers, Prev: Makefile, Up: gcc Directory 3593 35946.3.5 Library Source Files and Headers under the 'gcc' Directory 3595---------------------------------------------------------------- 3596 3597FIXME: list here, with explanation, all the C source files and headers 3598under the 'gcc' directory that aren't built into the GCC executable but 3599rather are part of runtime libraries and object files, such as 3600'crtstuff.c' and 'unwind-dw2.c'. *Note Headers Installed by GCC: 3601Headers, for more information about the 'ginclude' directory. 3602 3603 3604File: gccint.info, Node: Headers, Next: Documentation, Prev: Library Files, Up: gcc Directory 3605 36066.3.6 Headers Installed by GCC 3607------------------------------ 3608 3609In general, GCC expects the system C library to provide most of the 3610headers to be used with it. However, GCC will fix those headers if 3611necessary to make them work with GCC, and will install some headers 3612required of freestanding implementations. These headers are installed 3613in 'LIBSUBDIR/include'. Headers for non-C runtime libraries are also 3614installed by GCC; these are not documented here. (FIXME: document them 3615somewhere.) 3616 3617 Several of the headers GCC installs are in the 'ginclude' directory. 3618These headers, 'iso646.h', 'stdarg.h', 'stdbool.h', and 'stddef.h', are 3619installed in 'LIBSUBDIR/include', unless the target Makefile fragment 3620(*note Target Fragment::) overrides this by setting 'USER_H'. 3621 3622 In addition to these headers and those generated by fixing system 3623headers to work with GCC, some other headers may also be installed in 3624'LIBSUBDIR/include'. 'config.gcc' may set 'extra_headers'; this 3625specifies additional headers under 'config' to be installed on some 3626systems. 3627 3628 GCC installs its own version of '<float.h>', from 'ginclude/float.h'. 3629This is done to cope with command-line options that change the 3630representation of floating point numbers. 3631 3632 GCC also installs its own version of '<limits.h>'; this is generated 3633from 'glimits.h', together with 'limitx.h' and 'limity.h' if the system 3634also has its own version of '<limits.h>'. (GCC provides its own header 3635because it is required of ISO C freestanding implementations, but needs 3636to include the system header from its own header as well because other 3637standards such as POSIX specify additional values to be defined in 3638'<limits.h>'.) The system's '<limits.h>' header is used via 3639'LIBSUBDIR/include/syslimits.h', which is copied from 'gsyslimits.h' if 3640it does not need fixing to work with GCC; if it needs fixing, 3641'syslimits.h' is the fixed copy. 3642 3643 GCC can also install '<tgmath.h>'. It will do this when 'config.gcc' 3644sets 'use_gcc_tgmath' to 'yes'. 3645 3646 3647File: gccint.info, Node: Documentation, Next: Front End, Prev: Headers, Up: gcc Directory 3648 36496.3.7 Building Documentation 3650---------------------------- 3651 3652The main GCC documentation is in the form of manuals in Texinfo format. 3653These are installed in Info format; DVI versions may be generated by 3654'make dvi', PDF versions by 'make pdf', and HTML versions by 'make 3655html'. In addition, some man pages are generated from the Texinfo 3656manuals, there are some other text files with miscellaneous 3657documentation, and runtime libraries have their own documentation 3658outside the 'gcc' directory. FIXME: document the documentation for 3659runtime libraries somewhere. 3660 3661* Menu: 3662 3663* Texinfo Manuals:: GCC manuals in Texinfo format. 3664* Man Page Generation:: Generating man pages from Texinfo manuals. 3665* Miscellaneous Docs:: Miscellaneous text files with documentation. 3666 3667 3668File: gccint.info, Node: Texinfo Manuals, Next: Man Page Generation, Up: Documentation 3669 36706.3.7.1 Texinfo Manuals 3671....................... 3672 3673The manuals for GCC as a whole, and the C and C++ front ends, are in 3674files 'doc/*.texi'. Other front ends have their own manuals in files 3675'LANGUAGE/*.texi'. Common files 'doc/include/*.texi' are provided which 3676may be included in multiple manuals; the following files are in 3677'doc/include': 3678 3679'fdl.texi' 3680 The GNU Free Documentation License. 3681'funding.texi' 3682 The section "Funding Free Software". 3683'gcc-common.texi' 3684 Common definitions for manuals. 3685'gpl_v3.texi' 3686 The GNU General Public License. 3687'texinfo.tex' 3688 A copy of 'texinfo.tex' known to work with the GCC manuals. 3689 3690 DVI-formatted manuals are generated by 'make dvi', which uses 3691'texi2dvi' (via the Makefile macro '$(TEXI2DVI)'). PDF-formatted 3692manuals are generated by 'make pdf', which uses 'texi2pdf' (via the 3693Makefile macro '$(TEXI2PDF)'). HTML formatted manuals are generated by 3694'make html'. Info manuals are generated by 'make info' (which is run as 3695part of a bootstrap); this generates the manuals in the source 3696directory, using 'makeinfo' via the Makefile macro '$(MAKEINFO)', and 3697they are included in release distributions. 3698 3699 Manuals are also provided on the GCC web site, in both HTML and 3700PostScript forms. This is done via the script 3701'maintainer-scripts/update_web_docs_svn'. Each manual to be provided 3702online must be listed in the definition of 'MANUALS' in that file; a 3703file 'NAME.texi' must only appear once in the source tree, and the 3704output manual must have the same name as the source file. (However, 3705other Texinfo files, included in manuals but not themselves the root 3706files of manuals, may have names that appear more than once in the 3707source tree.) The manual file 'NAME.texi' should only include other 3708files in its own directory or in 'doc/include'. HTML manuals will be 3709generated by 'makeinfo --html', PostScript manuals by 'texi2dvi' and 3710'dvips', and PDF manuals by 'texi2pdf'. All Texinfo files that are 3711parts of manuals must be version-controlled, even if they are generated 3712files, for the generation of online manuals to work. 3713 3714 The installation manual, 'doc/install.texi', is also provided on the 3715GCC web site. The HTML version is generated by the script 3716'doc/install.texi2html'. 3717 3718 3719File: gccint.info, Node: Man Page Generation, Next: Miscellaneous Docs, Prev: Texinfo Manuals, Up: Documentation 3720 37216.3.7.2 Man Page Generation 3722........................... 3723 3724Because of user demand, in addition to full Texinfo manuals, man pages 3725are provided which contain extracts from those manuals. These man pages 3726are generated from the Texinfo manuals using 'contrib/texi2pod.pl' and 3727'pod2man'. (The man page for 'g++', 'cp/g++.1', just contains a '.so' 3728reference to 'gcc.1', but all the other man pages are generated from 3729Texinfo manuals.) 3730 3731 Because many systems may not have the necessary tools installed to 3732generate the man pages, they are only generated if the 'configure' 3733script detects that recent enough tools are installed, and the Makefiles 3734allow generating man pages to fail without aborting the build. Man 3735pages are also included in release distributions. They are generated in 3736the source directory. 3737 3738 Magic comments in Texinfo files starting '@c man' control what parts of 3739a Texinfo file go into a man page. Only a subset of Texinfo is 3740supported by 'texi2pod.pl', and it may be necessary to add support for 3741more Texinfo features to this script when generating new man pages. To 3742improve the man page output, some special Texinfo macros are provided in 3743'doc/include/gcc-common.texi' which 'texi2pod.pl' understands: 3744 3745'@gcctabopt' 3746 Use in the form '@table @gcctabopt' for tables of options, where 3747 for printed output the effect of '@code' is better than that of 3748 '@option' but for man page output a different effect is wanted. 3749'@gccoptlist' 3750 Use for summary lists of options in manuals. 3751'@gol' 3752 Use at the end of each line inside '@gccoptlist'. This is 3753 necessary to avoid problems with differences in how the 3754 '@gccoptlist' macro is handled by different Texinfo formatters. 3755 3756 FIXME: describe the 'texi2pod.pl' input language and magic comments in 3757more detail. 3758 3759 3760File: gccint.info, Node: Miscellaneous Docs, Prev: Man Page Generation, Up: Documentation 3761 37626.3.7.3 Miscellaneous Documentation 3763................................... 3764 3765In addition to the formal documentation that is installed by GCC, there 3766are several other text files in the 'gcc' subdirectory with 3767miscellaneous documentation: 3768 3769'ABOUT-GCC-NLS' 3770 Notes on GCC's Native Language Support. FIXME: this should be part 3771 of this manual rather than a separate file. 3772'ABOUT-NLS' 3773 Notes on the Free Translation Project. 3774'COPYING' 3775'COPYING3' 3776 The GNU General Public License, Versions 2 and 3. 3777'COPYING.LIB' 3778'COPYING3.LIB' 3779 The GNU Lesser General Public License, Versions 2.1 and 3. 3780'*ChangeLog*' 3781'*/ChangeLog*' 3782 Change log files for various parts of GCC. 3783'LANGUAGES' 3784 Details of a few changes to the GCC front-end interface. FIXME: 3785 the information in this file should be part of general 3786 documentation of the front-end interface in this manual. 3787'ONEWS' 3788 Information about new features in old versions of GCC. (For recent 3789 versions, the information is on the GCC web site.) 3790'README.Portability' 3791 Information about portability issues when writing code in GCC. 3792 FIXME: why isn't this part of this manual or of the GCC Coding 3793 Conventions? 3794 3795 FIXME: document such files in subdirectories, at least 'config', 'c', 3796'cp', 'objc', 'testsuite'. 3797 3798 3799File: gccint.info, Node: Front End, Next: Back End, Prev: Documentation, Up: gcc Directory 3800 38016.3.8 Anatomy of a Language Front End 3802------------------------------------- 3803 3804A front end for a language in GCC has the following parts: 3805 3806 * A directory 'LANGUAGE' under 'gcc' containing source files for that 3807 front end. *Note The Front End 'LANGUAGE' Directory: Front End 3808 Directory, for details. 3809 * A mention of the language in the list of supported languages in 3810 'gcc/doc/install.texi'. 3811 * A mention of the name under which the language's runtime library is 3812 recognized by '--enable-shared=PACKAGE' in the documentation of 3813 that option in 'gcc/doc/install.texi'. 3814 * A mention of any special prerequisites for building the front end 3815 in the documentation of prerequisites in 'gcc/doc/install.texi'. 3816 * Details of contributors to that front end in 3817 'gcc/doc/contrib.texi'. If the details are in that front end's own 3818 manual then there should be a link to that manual's list in 3819 'contrib.texi'. 3820 * Information about support for that language in 3821 'gcc/doc/frontends.texi'. 3822 * Information about standards for that language, and the front end's 3823 support for them, in 'gcc/doc/standards.texi'. This may be a link 3824 to such information in the front end's own manual. 3825 * Details of source file suffixes for that language and '-x LANG' 3826 options supported, in 'gcc/doc/invoke.texi'. 3827 * Entries in 'default_compilers' in 'gcc.c' for source file suffixes 3828 for that language. 3829 * Preferably testsuites, which may be under 'gcc/testsuite' or 3830 runtime library directories. FIXME: document somewhere how to 3831 write testsuite harnesses. 3832 * Probably a runtime library for the language, outside the 'gcc' 3833 directory. FIXME: document this further. 3834 * Details of the directories of any runtime libraries in 3835 'gcc/doc/sourcebuild.texi'. 3836 * Check targets in 'Makefile.def' for the top-level 'Makefile' to 3837 check just the compiler or the compiler and runtime library for the 3838 language. 3839 3840 If the front end is added to the official GCC source repository, the 3841following are also necessary: 3842 3843 * At least one Bugzilla component for bugs in that front end and 3844 runtime libraries. This category needs to be added to the Bugzilla 3845 database. 3846 * Normally, one or more maintainers of that front end listed in 3847 'MAINTAINERS'. 3848 * Mentions on the GCC web site in 'index.html' and 'frontends.html', 3849 with any relevant links on 'readings.html'. (Front ends that are 3850 not an official part of GCC may also be listed on 'frontends.html', 3851 with relevant links.) 3852 * A news item on 'index.html', and possibly an announcement on the 3853 <gcc-announce@gcc.gnu.org> mailing list. 3854 * The front end's manuals should be mentioned in 3855 'maintainer-scripts/update_web_docs_svn' (*note Texinfo Manuals::) 3856 and the online manuals should be linked to from 3857 'onlinedocs/index.html'. 3858 * Any old releases or CVS repositories of the front end, before its 3859 inclusion in GCC, should be made available on the GCC FTP site 3860 <ftp://gcc.gnu.org/pub/gcc/old-releases/>. 3861 * The release and snapshot script 'maintainer-scripts/gcc_release' 3862 should be updated to generate appropriate tarballs for this front 3863 end. 3864 * If this front end includes its own version files that include the 3865 current date, 'maintainer-scripts/update_version' should be updated 3866 accordingly. 3867 3868* Menu: 3869 3870* Front End Directory:: The front end 'LANGUAGE' directory. 3871* Front End Config:: The front end 'config-lang.in' file. 3872* Front End Makefile:: The front end 'Make-lang.in' file. 3873 3874 3875File: gccint.info, Node: Front End Directory, Next: Front End Config, Up: Front End 3876 38776.3.8.1 The Front End 'LANGUAGE' Directory 3878.......................................... 3879 3880A front end 'LANGUAGE' directory contains the source files of that front 3881end (but not of any runtime libraries, which should be outside the 'gcc' 3882directory). This includes documentation, and possibly some subsidiary 3883programs built alongside the front end. Certain files are special and 3884other parts of the compiler depend on their names: 3885 3886'config-lang.in' 3887 This file is required in all language subdirectories. *Note The 3888 Front End 'config-lang.in' File: Front End Config, for details of 3889 its contents 3890'Make-lang.in' 3891 This file is required in all language subdirectories. *Note The 3892 Front End 'Make-lang.in' File: Front End Makefile, for details of 3893 its contents. 3894'lang.opt' 3895 This file registers the set of switches that the front end accepts 3896 on the command line, and their '--help' text. *Note Options::. 3897'lang-specs.h' 3898 This file provides entries for 'default_compilers' in 'gcc.c' which 3899 override the default of giving an error that a compiler for that 3900 language is not installed. 3901'LANGUAGE-tree.def' 3902 This file, which need not exist, defines any language-specific tree 3903 codes. 3904 3905 3906File: gccint.info, Node: Front End Config, Next: Front End Makefile, Prev: Front End Directory, Up: Front End 3907 39086.3.8.2 The Front End 'config-lang.in' File 3909........................................... 3910 3911Each language subdirectory contains a 'config-lang.in' file. This file 3912is a shell script that may define some variables describing the 3913language: 3914 3915'language' 3916 This definition must be present, and gives the name of the language 3917 for some purposes such as arguments to '--enable-languages'. 3918'lang_requires' 3919 If defined, this variable lists (space-separated) language front 3920 ends other than C that this front end requires to be enabled (with 3921 the names given being their 'language' settings). For example, the 3922 Java front end depends on the C++ front end, so sets 3923 'lang_requires=c++'. 3924'subdir_requires' 3925 If defined, this variable lists (space-separated) front end 3926 directories other than C that this front end requires to be 3927 present. For example, the Objective-C++ front end uses source 3928 files from the C++ and Objective-C front ends, so sets 3929 'subdir_requires="cp objc"'. 3930'target_libs' 3931 If defined, this variable lists (space-separated) targets in the 3932 top level 'Makefile' to build the runtime libraries for this 3933 language, such as 'target-libobjc'. 3934'lang_dirs' 3935 If defined, this variable lists (space-separated) top level 3936 directories (parallel to 'gcc'), apart from the runtime libraries, 3937 that should not be configured if this front end is not built. 3938'build_by_default' 3939 If defined to 'no', this language front end is not built unless 3940 enabled in a '--enable-languages' argument. Otherwise, front ends 3941 are built by default, subject to any special logic in 3942 'configure.ac' (as is present to disable the Ada front end if the 3943 Ada compiler is not already installed). 3944'boot_language' 3945 If defined to 'yes', this front end is built in stage1 of the 3946 bootstrap. This is only relevant to front ends written in their 3947 own languages. 3948'compilers' 3949 If defined, a space-separated list of compiler executables that 3950 will be run by the driver. The names here will each end with 3951 '\$(exeext)'. 3952'outputs' 3953 If defined, a space-separated list of files that should be 3954 generated by 'configure' substituting values in them. This 3955 mechanism can be used to create a file 'LANGUAGE/Makefile' from 3956 'LANGUAGE/Makefile.in', but this is deprecated, building everything 3957 from the single 'gcc/Makefile' is preferred. 3958'gtfiles' 3959 If defined, a space-separated list of files that should be scanned 3960 by 'gengtype.c' to generate the garbage collection tables and 3961 routines for this language. This excludes the files that are 3962 common to all front ends. *Note Type Information::. 3963 3964 3965File: gccint.info, Node: Front End Makefile, Prev: Front End Config, Up: Front End 3966 39676.3.8.3 The Front End 'Make-lang.in' File 3968......................................... 3969 3970Each language subdirectory contains a 'Make-lang.in' file. It contains 3971targets 'LANG.HOOK' (where 'LANG' is the setting of 'language' in 3972'config-lang.in') for the following values of 'HOOK', and any other 3973Makefile rules required to build those targets (which may if necessary 3974use other Makefiles specified in 'outputs' in 'config-lang.in', although 3975this is deprecated). It also adds any testsuite targets that can use 3976the standard rule in 'gcc/Makefile.in' to the variable 'lang_checks'. 3977 3978'all.cross' 3979'start.encap' 3980'rest.encap' 3981 FIXME: exactly what goes in each of these targets? 3982'tags' 3983 Build an 'etags' 'TAGS' file in the language subdirectory in the 3984 source tree. 3985'info' 3986 Build info documentation for the front end, in the build directory. 3987 This target is only called by 'make bootstrap' if a suitable 3988 version of 'makeinfo' is available, so does not need to check for 3989 this, and should fail if an error occurs. 3990'dvi' 3991 Build DVI documentation for the front end, in the build directory. 3992 This should be done using '$(TEXI2DVI)', with appropriate '-I' 3993 arguments pointing to directories of included files. 3994'pdf' 3995 Build PDF documentation for the front end, in the build directory. 3996 This should be done using '$(TEXI2PDF)', with appropriate '-I' 3997 arguments pointing to directories of included files. 3998'html' 3999 Build HTML documentation for the front end, in the build directory. 4000'man' 4001 Build generated man pages for the front end from Texinfo manuals 4002 (*note Man Page Generation::), in the build directory. This target 4003 is only called if the necessary tools are available, but should 4004 ignore errors so as not to stop the build if errors occur; man 4005 pages are optional and the tools involved may be installed in a 4006 broken way. 4007'install-common' 4008 Install everything that is part of the front end, apart from the 4009 compiler executables listed in 'compilers' in 'config-lang.in'. 4010'install-info' 4011 Install info documentation for the front end, if it is present in 4012 the source directory. This target should have dependencies on info 4013 files that should be installed. 4014'install-man' 4015 Install man pages for the front end. This target should ignore 4016 errors. 4017'install-plugin' 4018 Install headers needed for plugins. 4019'srcextra' 4020 Copies its dependencies into the source directory. This generally 4021 should be used for generated files such as Bison output files which 4022 are not version-controlled, but should be included in any release 4023 tarballs. This target will be executed during a bootstrap if 4024 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4025 option. 4026'srcinfo' 4027'srcman' 4028 Copies its dependencies into the source directory. These targets 4029 will be executed during a bootstrap if 4030 '--enable-generated-files-in-srcdir' was specified as a 'configure' 4031 option. 4032'uninstall' 4033 Uninstall files installed by installing the compiler. This is 4034 currently documented not to be supported, so the hook need not do 4035 anything. 4036'mostlyclean' 4037'clean' 4038'distclean' 4039'maintainer-clean' 4040 The language parts of the standard GNU '*clean' targets. *Note 4041 Standard Targets for Users: (standards)Standard Targets, for 4042 details of the standard targets. For GCC, 'maintainer-clean' 4043 should delete all generated files in the source directory that are 4044 not version-controlled, but should not delete anything that is. 4045 4046 'Make-lang.in' must also define a variable 'LANG_OBJS' to a list of 4047host object files that are used by that language. 4048 4049 4050File: gccint.info, Node: Back End, Prev: Front End, Up: gcc Directory 4051 40526.3.9 Anatomy of a Target Back End 4053---------------------------------- 4054 4055A back end for a target architecture in GCC has the following parts: 4056 4057 * A directory 'MACHINE' under 'gcc/config', containing a machine 4058 description 'MACHINE.md' file (*note Machine Descriptions: Machine 4059 Desc.), header files 'MACHINE.h' and 'MACHINE-protos.h' and a 4060 source file 'MACHINE.c' (*note Target Description Macros and 4061 Functions: Target Macros.), possibly a target Makefile fragment 4062 't-MACHINE' (*note The Target Makefile Fragment: Target Fragment.), 4063 and maybe some other files. The names of these files may be 4064 changed from the defaults given by explicit specifications in 4065 'config.gcc'. 4066 * If necessary, a file 'MACHINE-modes.def' in the 'MACHINE' 4067 directory, containing additional machine modes to represent 4068 condition codes. *Note Condition Code::, for further details. 4069 * An optional 'MACHINE.opt' file in the 'MACHINE' directory, 4070 containing a list of target-specific options. You can also add 4071 other option files using the 'extra_options' variable in 4072 'config.gcc'. *Note Options::. 4073 * Entries in 'config.gcc' (*note The 'config.gcc' File: System 4074 Config.) for the systems with this target architecture. 4075 * Documentation in 'gcc/doc/invoke.texi' for any command-line options 4076 supported by this target (*note Run-time Target Specification: 4077 Run-time Target.). This means both entries in the summary table of 4078 options and details of the individual options. 4079 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4080 attributes supported (*note Defining target-specific uses of 4081 '__attribute__': Target Attributes.), including where the same 4082 attribute is already supported on some targets, which are 4083 enumerated in the manual. 4084 * Documentation in 'gcc/doc/extend.texi' for any target-specific 4085 pragmas supported. 4086 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4087 built-in functions supported. 4088 * Documentation in 'gcc/doc/extend.texi' of any target-specific 4089 format checking styles supported. 4090 * Documentation in 'gcc/doc/md.texi' of any target-specific 4091 constraint letters (*note Constraints for Particular Machines: 4092 Machine Constraints.). 4093 * A note in 'gcc/doc/contrib.texi' under the person or people who 4094 contributed the target support. 4095 * Entries in 'gcc/doc/install.texi' for all target triplets supported 4096 with this target architecture, giving details of any special notes 4097 about installation for this target, or saying that there are no 4098 special notes if there are none. 4099 * Possibly other support outside the 'gcc' directory for runtime 4100 libraries. FIXME: reference docs for this. The 'libstdc++' 4101 porting manual needs to be installed as info for this to work, or 4102 to be a chapter of this manual. 4103 4104 If the back end is added to the official GCC source repository, the 4105following are also necessary: 4106 4107 * An entry for the target architecture in 'readings.html' on the GCC 4108 web site, with any relevant links. 4109 * Details of the properties of the back end and target architecture 4110 in 'backends.html' on the GCC web site. 4111 * A news item about the contribution of support for that target 4112 architecture, in 'index.html' on the GCC web site. 4113 * Normally, one or more maintainers of that target listed in 4114 'MAINTAINERS'. Some existing architectures may be unmaintained, 4115 but it would be unusual to add support for a target that does not 4116 have a maintainer when support is added. 4117 * Target triplets covering all 'config.gcc' stanzas for the target, 4118 in the list in 'contrib/config-list.mk'. 4119 4120 4121File: gccint.info, Node: Testsuites, Next: Options, Prev: Source Tree, Up: Top 4122 41237 Testsuites 4124************ 4125 4126GCC contains several testsuites to help maintain compiler quality. Most 4127of the runtime libraries and language front ends in GCC have testsuites. 4128Currently only the C language testsuites are documented here; FIXME: 4129document the others. 4130 4131* Menu: 4132 4133* Test Idioms:: Idioms used in testsuite code. 4134* Test Directives:: Directives used within DejaGnu tests. 4135* Ada Tests:: The Ada language testsuites. 4136* C Tests:: The C language testsuites. 4137* libgcj Tests:: The Java library testsuites. 4138* LTO Testing:: Support for testing link-time optimizations. 4139* gcov Testing:: Support for testing gcov. 4140* profopt Testing:: Support for testing profile-directed optimizations. 4141* compat Testing:: Support for testing binary compatibility. 4142* Torture Tests:: Support for torture testing using multiple options. 4143 4144 4145File: gccint.info, Node: Test Idioms, Next: Test Directives, Up: Testsuites 4146 41477.1 Idioms Used in Testsuite Code 4148================================= 4149 4150In general, C testcases have a trailing '-N.c', starting with '-1.c', in 4151case other testcases with similar names are added later. If the test is 4152a test of some well-defined feature, it should have a name referring to 4153that feature such as 'FEATURE-1.c'. If it does not test a well-defined 4154feature but just happens to exercise a bug somewhere in the compiler, 4155and a bug report has been filed for this bug in the GCC bug database, 4156'prBUG-NUMBER-1.c' is the appropriate form of name. Otherwise (for 4157miscellaneous bugs not filed in the GCC bug database), and previously 4158more generally, test cases are named after the date on which they were 4159added. This allows people to tell at a glance whether a test failure is 4160because of a recently found bug that has not yet been fixed, or whether 4161it may be a regression, but does not give any other information about 4162the bug or where discussion of it may be found. Some other language 4163testsuites follow similar conventions. 4164 4165 In the 'gcc.dg' testsuite, it is often necessary to test that an error 4166is indeed a hard error and not just a warning--for example, where it is 4167a constraint violation in the C standard, which must become an error 4168with '-pedantic-errors'. The following idiom, where the first line 4169shown is line LINE of the file and the line that generates the error, is 4170used for this: 4171 4172 /* { dg-bogus "warning" "warning in place of error" } */ 4173 /* { dg-error "REGEXP" "MESSAGE" { target *-*-* } LINE } */ 4174 4175 It may be necessary to check that an expression is an integer constant 4176expression and has a certain value. To check that 'E' has value 'V', an 4177idiom similar to the following is used: 4178 4179 char x[((E) == (V) ? 1 : -1)]; 4180 4181 In 'gcc.dg' tests, '__typeof__' is sometimes used to make assertions 4182about the types of expressions. See, for example, 4183'gcc.dg/c99-condexpr-1.c'. The more subtle uses depend on the exact 4184rules for the types of conditional expressions in the C standard; see, 4185for example, 'gcc.dg/c99-intconst-1.c'. 4186 4187 It is useful to be able to test that optimizations are being made 4188properly. This cannot be done in all cases, but it can be done where 4189the optimization will lead to code being optimized away (for example, 4190where flow analysis or alias analysis should show that certain code 4191cannot be called) or to functions not being called because they have 4192been expanded as built-in functions. Such tests go in 4193'gcc.c-torture/execute'. Where code should be optimized away, a call to 4194a nonexistent function such as 'link_failure ()' may be inserted; a 4195definition 4196 4197 #ifndef __OPTIMIZE__ 4198 void 4199 link_failure (void) 4200 { 4201 abort (); 4202 } 4203 #endif 4204 4205will also be needed so that linking still succeeds when the test is run 4206without optimization. When all calls to a built-in function should have 4207been optimized and no calls to the non-built-in version of the function 4208should remain, that function may be defined as 'static' to call 'abort 4209()' (although redeclaring a function as static may not work on all 4210targets). 4211 4212 All testcases must be portable. Target-specific testcases must have 4213appropriate code to avoid causing failures on unsupported systems; 4214unfortunately, the mechanisms for this differ by directory. 4215 4216 FIXME: discuss non-C testsuites here. 4217 4218 4219File: gccint.info, Node: Test Directives, Next: Ada Tests, Prev: Test Idioms, Up: Testsuites 4220 42217.2 Directives used within DejaGnu tests 4222======================================== 4223 4224* Menu: 4225 4226* Directives:: Syntax and descriptions of test directives. 4227* Selectors:: Selecting targets to which a test applies. 4228* Effective-Target Keywords:: Keywords describing target attributes. 4229* Add Options:: Features for 'dg-add-options' 4230* Require Support:: Variants of 'dg-require-SUPPORT' 4231* Final Actions:: Commands for use in 'dg-final' 4232 4233 4234File: gccint.info, Node: Directives, Next: Selectors, Up: Test Directives 4235 42367.2.1 Syntax and Descriptions of test directives 4237------------------------------------------------ 4238 4239Test directives appear within comments in a test source file and begin 4240with 'dg-'. Some of these are defined within DejaGnu and others are 4241local to the GCC testsuite. 4242 4243 The order in which test directives appear in a test can be important: 4244directives local to GCC sometimes override information used by the 4245DejaGnu directives, which know nothing about the GCC directives, so the 4246DejaGnu directives must precede GCC directives. 4247 4248 Several test directives include selectors (*note Selectors::) which are 4249usually preceded by the keyword 'target' or 'xfail'. 4250 42517.2.1.1 Specify how to build the test 4252..................................... 4253 4254'{ dg-do DO-WHAT-KEYWORD [{ target/xfail SELECTOR }] }' 4255 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 4256 is executed. It is one of: 4257 4258 'preprocess' 4259 Compile with '-E' to run only the preprocessor. 4260 'compile' 4261 Compile with '-S' to produce an assembly code file. 4262 'assemble' 4263 Compile with '-c' to produce a relocatable object file. 4264 'link' 4265 Compile, assemble, and link to produce an executable file. 4266 'run' 4267 Produce and run an executable file, which is expected to 4268 return an exit code of 0. 4269 4270 The default is 'compile'. That can be overridden for a set of 4271 tests by redefining 'dg-do-what-default' within the '.exp' file for 4272 those tests. 4273 4274 If the directive includes the optional '{ target SELECTOR }' then 4275 the test is skipped unless the target system matches the SELECTOR. 4276 4277 If DO-WHAT-KEYWORD is 'run' and the directive includes the optional 4278 '{ xfail SELECTOR }' and the selector is met then the test is 4279 expected to fail. The 'xfail' clause is ignored for other values 4280 of DO-WHAT-KEYWORD; those tests can use directive 'dg-xfail-if'. 4281 42827.2.1.2 Specify additional compiler options 4283........................................... 4284 4285'{ dg-options OPTIONS [{ target SELECTOR }] }' 4286 This DejaGnu directive provides a list of compiler options, to be 4287 used if the target system matches SELECTOR, that replace the 4288 default options used for this set of tests. 4289 4290'{ dg-add-options FEATURE ... }' 4291 Add any compiler options that are needed to access certain 4292 features. This directive does nothing on targets that enable the 4293 features by default, or that don't provide them at all. It must 4294 come after all 'dg-options' directives. For supported values of 4295 FEATURE see *note Add Options::. 4296 4297'{ dg-additional-options OPTIONS [{ target SELECTOR }] }' 4298 This directive provides a list of compiler options, to be used if 4299 the target system matches SELECTOR, that are added to the default 4300 options used for this set of tests. 4301 43027.2.1.3 Modify the test timeout value 4303..................................... 4304 4305The normal timeout limit, in seconds, is found by searching the 4306following in order: 4307 4308 * the value defined by an earlier 'dg-timeout' directive in the test 4309 4310 * variable TOOL_TIMEOUT defined by the set of tests 4311 4312 * GCC,TIMEOUT set in the target board 4313 4314 * 300 4315 4316'{ dg-timeout N [{target SELECTOR }] }' 4317 Set the time limit for the compilation and for the execution of the 4318 test to the specified number of seconds. 4319 4320'{ dg-timeout-factor X [{ target SELECTOR }] }' 4321 Multiply the normal time limit for compilation and execution of the 4322 test by the specified floating-point factor. 4323 43247.2.1.4 Skip a test for some targets 4325.................................... 4326 4327'{ dg-skip-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4328 Arguments INCLUDE-OPTS and EXCLUDE-OPTS are lists in which each 4329 element is a string of zero or more GCC options. Skip the test if 4330 all of the following conditions are met: 4331 * the test system is included in SELECTOR 4332 4333 * for at least one of the option strings in INCLUDE-OPTS, every 4334 option from that string is in the set of options with which 4335 the test would be compiled; use '"*"' for an INCLUDE-OPTS list 4336 that matches any options; that is the default if INCLUDE-OPTS 4337 is not specified 4338 4339 * for each of the option strings in EXCLUDE-OPTS, at least one 4340 option from that string is not in the set of options with 4341 which the test would be compiled; use '""' for an empty 4342 EXCLUDE-OPTS list; that is the default if EXCLUDE-OPTS is not 4343 specified 4344 4345 For example, to skip a test if option '-Os' is present: 4346 4347 /* { dg-skip-if "" { *-*-* } { "-Os" } { "" } } */ 4348 4349 To skip a test if both options '-O2' and '-g' are present: 4350 4351 /* { dg-skip-if "" { *-*-* } { "-O2 -g" } { "" } } */ 4352 4353 To skip a test if either '-O2' or '-O3' is present: 4354 4355 /* { dg-skip-if "" { *-*-* } { "-O2" "-O3" } { "" } } */ 4356 4357 To skip a test unless option '-Os' is present: 4358 4359 /* { dg-skip-if "" { *-*-* } { "*" } { "-Os" } } */ 4360 4361 To skip a test if either '-O2' or '-O3' is used with '-g' but not 4362 if '-fpic' is also present: 4363 4364 /* { dg-skip-if "" { *-*-* } { "-O2 -g" "-O3 -g" } { "-fpic" } } */ 4365 4366'{ dg-require-effective-target KEYWORD [{ SELECTOR }] }' 4367 Skip the test if the test target, including current multilib flags, 4368 is not covered by the effective-target keyword. If the directive 4369 includes the optional '{ SELECTOR }' then the effective-target test 4370 is only performed if the target system matches the SELECTOR. This 4371 directive must appear after any 'dg-do' directive in the test and 4372 before any 'dg-additional-sources' directive. *Note 4373 Effective-Target Keywords::. 4374 4375'{ dg-require-SUPPORT args }' 4376 Skip the test if the target does not provide the required support. 4377 These directives must appear after any 'dg-do' directive in the 4378 test and before any 'dg-additional-sources' directive. They 4379 require at least one argument, which can be an empty string if the 4380 specific procedure does not examine the argument. *Note Require 4381 Support::, for a complete list of these directives. 4382 43837.2.1.5 Expect a test to fail for some targets 4384.............................................. 4385 4386'{ dg-xfail-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4387 Expect the test to fail if the conditions (which are the same as 4388 for 'dg-skip-if') are met. This does not affect the execute step. 4389 4390'{ dg-xfail-run-if COMMENT { SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]] }' 4391 Expect the execute step of a test to fail if the conditions (which 4392 are the same as for 'dg-skip-if') are met. 4393 43947.2.1.6 Expect the test executable to fail 4395.......................................... 4396 4397'{ dg-shouldfail COMMENT [{ SELECTOR } [{ INCLUDE-OPTS } [{ EXCLUDE-OPTS }]]] }' 4398 Expect the test executable to return a nonzero exit status if the 4399 conditions (which are the same as for 'dg-skip-if') are met. 4400 44017.2.1.7 Verify compiler messages 4402................................ 4403 4404'{ dg-error REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4405 This DejaGnu directive appears on a source line that is expected to 4406 get an error message, or else specifies the source line associated 4407 with the message. If there is no message for that line or if the 4408 text of that message is not matched by REGEXP then the check fails 4409 and COMMENT is included in the 'FAIL' message. The check does not 4410 look for the string 'error' unless it is part of REGEXP. 4411 4412'{ dg-warning REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4413 This DejaGnu directive appears on a source line that is expected to 4414 get a warning message, or else specifies the source line associated 4415 with the message. If there is no message for that line or if the 4416 text of that message is not matched by REGEXP then the check fails 4417 and COMMENT is included in the 'FAIL' message. The check does not 4418 look for the string 'warning' unless it is part of REGEXP. 4419 4420'{ dg-message REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4421 The line is expected to get a message other than an error or 4422 warning. If there is no message for that line or if the text of 4423 that message is not matched by REGEXP then the check fails and 4424 COMMENT is included in the 'FAIL' message. 4425 4426'{ dg-bogus REGEXP [COMMENT [{ target/xfail SELECTOR } [LINE] }]] }' 4427 This DejaGnu directive appears on a source line that should not get 4428 a message matching REGEXP, or else specifies the source line 4429 associated with the bogus message. It is usually used with 'xfail' 4430 to indicate that the message is a known problem for a particular 4431 set of targets. 4432 4433'{ dg-excess-errors COMMENT [{ target/xfail SELECTOR }] }' 4434 This DejaGnu directive indicates that the test is expected to fail 4435 due to compiler messages that are not handled by 'dg-error', 4436 'dg-warning' or 'dg-bogus'. For this directive 'xfail' has the 4437 same effect as 'target'. 4438 4439'{ dg-prune-output REGEXP }' 4440 Prune messages matching REGEXP from the test output. 4441 44427.2.1.8 Verify output of the test executable 4443............................................ 4444 4445'{ dg-output REGEXP [{ target/xfail SELECTOR }] }' 4446 This DejaGnu directive compares REGEXP to the combined output that 4447 the test executable writes to 'stdout' and 'stderr'. 4448 44497.2.1.9 Specify additional files for a test 4450........................................... 4451 4452'{ dg-additional-files "FILELIST" }' 4453 Specify additional files, other than source files, that must be 4454 copied to the system where the compiler runs. 4455 4456'{ dg-additional-sources "FILELIST" }' 4457 Specify additional source files to appear in the compile line 4458 following the main test file. 4459 44607.2.1.10 Add checks at the end of a test 4461........................................ 4462 4463'{ dg-final { LOCAL-DIRECTIVE } }' 4464 This DejaGnu directive is placed within a comment anywhere in the 4465 source file and is processed after the test has been compiled and 4466 run. Multiple 'dg-final' commands are processed in the order in 4467 which they appear in the source file. *Note Final Actions::, for a 4468 list of directives that can be used within 'dg-final'. 4469 4470 4471File: gccint.info, Node: Selectors, Next: Effective-Target Keywords, Prev: Directives, Up: Test Directives 4472 44737.2.2 Selecting targets to which a test applies 4474----------------------------------------------- 4475 4476Several test directives include SELECTORs to limit the targets for which 4477a test is run or to declare that a test is expected to fail on 4478particular targets. 4479 4480 A selector is: 4481 * one or more target triplets, possibly including wildcard 4482 characters; use '*-*-*' to match any target 4483 * a single effective-target keyword (*note Effective-Target 4484 Keywords::) 4485 * a logical expression 4486 4487 Depending on the context, the selector specifies whether a test is 4488skipped and reported as unsupported or is expected to fail. A context 4489that allows either 'target' or 'xfail' also allows '{ target SELECTOR1 4490xfail SELECTOR2 }' to skip the test for targets that don't match 4491SELECTOR1 and the test to fail for targets that match SELECTOR2. 4492 4493 A selector expression appears within curly braces and uses a single 4494logical operator: one of '!', '&&', or '||'. An operand is another 4495selector expression, an effective-target keyword, a single target 4496triplet, or a list of target triplets within quotes or curly braces. 4497For example: 4498 4499 { target { ! "hppa*-*-* ia64*-*-*" } } 4500 { target { powerpc*-*-* && lp64 } } 4501 { xfail { lp64 || vect_no_align } } 4502 4503 4504File: gccint.info, Node: Effective-Target Keywords, Next: Add Options, Prev: Selectors, Up: Test Directives 4505 45067.2.3 Keywords describing target attributes 4507------------------------------------------- 4508 4509Effective-target keywords identify sets of targets that support 4510particular functionality. They are used to limit tests to be run only 4511for particular targets, or to specify that particular sets of targets 4512are expected to fail some tests. 4513 4514 Effective-target keywords are defined in 'lib/target-supports.exp' in 4515the GCC testsuite, with the exception of those that are documented as 4516being local to a particular test directory. 4517 4518 The 'effective target' takes into account all of the compiler options 4519with which the test will be compiled, including the multilib options. 4520By convention, keywords ending in '_nocache' can also include options 4521specified for the particular test in an earlier 'dg-options' or 4522'dg-add-options' directive. 4523 45247.2.3.1 Data type sizes 4525....................... 4526 4527'ilp32' 4528 Target has 32-bit 'int', 'long', and pointers. 4529 4530'lp64' 4531 Target has 32-bit 'int', 64-bit 'long' and pointers. 4532 4533'llp64' 4534 Target has 32-bit 'int' and 'long', 64-bit 'long long' and 4535 pointers. 4536 4537'double64' 4538 Target has 64-bit 'double'. 4539 4540'double64plus' 4541 Target has 'double' that is 64 bits or longer. 4542 4543'longdouble128' 4544 Target has 128-bit 'long double'. 4545 4546'int32plus' 4547 Target has 'int' that is at 32 bits or longer. 4548 4549'int16' 4550 Target has 'int' that is 16 bits or shorter. 4551 4552'long_neq_int' 4553 Target has 'int' and 'long' with different sizes. 4554 4555'large_double' 4556 Target supports 'double' that is longer than 'float'. 4557 4558'large_long_double' 4559 Target supports 'long double' that is longer than 'double'. 4560 4561'ptr32plus' 4562 Target has pointers that are 32 bits or longer. 4563 4564'size32plus' 4565 Target supports array and structure sizes that are 32 bits or 4566 longer. 4567 4568'4byte_wchar_t' 4569 Target has 'wchar_t' that is at least 4 bytes. 4570 45717.2.3.2 Fortran-specific attributes 4572................................... 4573 4574'fortran_integer_16' 4575 Target supports Fortran 'integer' that is 16 bytes or longer. 4576 4577'fortran_large_int' 4578 Target supports Fortran 'integer' kinds larger than 'integer(8)'. 4579 4580'fortran_large_real' 4581 Target supports Fortran 'real' kinds larger than 'real(8)'. 4582 45837.2.3.3 Vector-specific attributes 4584.................................. 4585 4586'vect_condition' 4587 Target supports vector conditional operations. 4588 4589'vect_double' 4590 Target supports hardware vectors of 'double'. 4591 4592'vect_float' 4593 Target supports hardware vectors of 'float'. 4594 4595'vect_int' 4596 Target supports hardware vectors of 'int'. 4597 4598'vect_long' 4599 Target supports hardware vectors of 'long'. 4600 4601'vect_long_long' 4602 Target supports hardware vectors of 'long long'. 4603 4604'vect_aligned_arrays' 4605 Target aligns arrays to vector alignment boundary. 4606 4607'vect_hw_misalign' 4608 Target supports a vector misalign access. 4609 4610'vect_no_align' 4611 Target does not support a vector alignment mechanism. 4612 4613'vect_no_int_min_max' 4614 Target does not support a vector min and max instruction on 'int'. 4615 4616'vect_no_int_add' 4617 Target does not support a vector add instruction on 'int'. 4618 4619'vect_no_bitwise' 4620 Target does not support vector bitwise instructions. 4621 4622'vect_char_mult' 4623 Target supports 'vector char' multiplication. 4624 4625'vect_short_mult' 4626 Target supports 'vector short' multiplication. 4627 4628'vect_int_mult' 4629 Target supports 'vector int' multiplication. 4630 4631'vect_extract_even_odd' 4632 Target supports vector even/odd element extraction. 4633 4634'vect_extract_even_odd_wide' 4635 Target supports vector even/odd element extraction of vectors with 4636 elements 'SImode' or larger. 4637 4638'vect_interleave' 4639 Target supports vector interleaving. 4640 4641'vect_strided' 4642 Target supports vector interleaving and extract even/odd. 4643 4644'vect_strided_wide' 4645 Target supports vector interleaving and extract even/odd for wide 4646 element types. 4647 4648'vect_perm' 4649 Target supports vector permutation. 4650 4651'vect_shift' 4652 Target supports a hardware vector shift operation. 4653 4654'vect_widen_sum_hi_to_si' 4655 Target supports a vector widening summation of 'short' operands 4656 into 'int' results, or can promote (unpack) from 'short' to 'int'. 4657 4658'vect_widen_sum_qi_to_hi' 4659 Target supports a vector widening summation of 'char' operands into 4660 'short' results, or can promote (unpack) from 'char' to 'short'. 4661 4662'vect_widen_sum_qi_to_si' 4663 Target supports a vector widening summation of 'char' operands into 4664 'int' results. 4665 4666'vect_widen_mult_qi_to_hi' 4667 Target supports a vector widening multiplication of 'char' operands 4668 into 'short' results, or can promote (unpack) from 'char' to 4669 'short' and perform non-widening multiplication of 'short'. 4670 4671'vect_widen_mult_hi_to_si' 4672 Target supports a vector widening multiplication of 'short' 4673 operands into 'int' results, or can promote (unpack) from 'short' 4674 to 'int' and perform non-widening multiplication of 'int'. 4675 4676'vect_widen_mult_si_to_di_pattern' 4677 Target supports a vector widening multiplication of 'int' operands 4678 into 'long' results. 4679 4680'vect_sdot_qi' 4681 Target supports a vector dot-product of 'signed char'. 4682 4683'vect_udot_qi' 4684 Target supports a vector dot-product of 'unsigned char'. 4685 4686'vect_sdot_hi' 4687 Target supports a vector dot-product of 'signed short'. 4688 4689'vect_udot_hi' 4690 Target supports a vector dot-product of 'unsigned short'. 4691 4692'vect_pack_trunc' 4693 Target supports a vector demotion (packing) of 'short' to 'char' 4694 and from 'int' to 'short' using modulo arithmetic. 4695 4696'vect_unpack' 4697 Target supports a vector promotion (unpacking) of 'char' to 'short' 4698 and from 'char' to 'int'. 4699 4700'vect_intfloat_cvt' 4701 Target supports conversion from 'signed int' to 'float'. 4702 4703'vect_uintfloat_cvt' 4704 Target supports conversion from 'unsigned int' to 'float'. 4705 4706'vect_floatint_cvt' 4707 Target supports conversion from 'float' to 'signed int'. 4708 4709'vect_floatuint_cvt' 4710 Target supports conversion from 'float' to 'unsigned int'. 4711 4712'vect_max_reduc' 4713 Target supports max reduction for vectors. 4714 47157.2.3.4 Thread Local Storage attributes 4716....................................... 4717 4718'tls' 4719 Target supports thread-local storage. 4720 4721'tls_native' 4722 Target supports native (rather than emulated) thread-local storage. 4723 4724'tls_runtime' 4725 Test system supports executing TLS executables. 4726 47277.2.3.5 Decimal floating point attributes 4728......................................... 4729 4730'dfp' 4731 Targets supports compiling decimal floating point extension to C. 4732 4733'dfp_nocache' 4734 Including the options used to compile this particular test, the 4735 target supports compiling decimal floating point extension to C. 4736 4737'dfprt' 4738 Test system can execute decimal floating point tests. 4739 4740'dfprt_nocache' 4741 Including the options used to compile this particular test, the 4742 test system can execute decimal floating point tests. 4743 4744'hard_dfp' 4745 Target generates decimal floating point instructions with current 4746 options. 4747 47487.2.3.6 ARM-specific attributes 4749............................... 4750 4751'arm32' 4752 ARM target generates 32-bit code. 4753 4754'arm_eabi' 4755 ARM target adheres to the ABI for the ARM Architecture. 4756 4757'arm_fp_ok' 4758 ARM target defines '__ARM_FP' using '-mfloat-abi=softfp' or 4759 equivalent options. Some multilibs may be incompatible with these 4760 options. 4761 4762'arm_hf_eabi' 4763 ARM target adheres to the VFP and Advanced SIMD Register Arguments 4764 variant of the ABI for the ARM Architecture (as selected with 4765 '-mfloat-abi=hard'). 4766 4767'arm_hard_vfp_ok' 4768 ARM target supports '-mfpu=vfp -mfloat-abi=hard'. Some multilibs 4769 may be incompatible with these options. 4770 4771'arm_iwmmxt_ok' 4772 ARM target supports '-mcpu=iwmmxt'. Some multilibs may be 4773 incompatible with this option. 4774 4775'arm_neon' 4776 ARM target supports generating NEON instructions. 4777 4778'arm_tune_string_ops_prefer_neon' 4779 Test CPU tune supports inlining string operations with NEON 4780 instructions. 4781 4782'arm_neon_hw' 4783 Test system supports executing NEON instructions. 4784 4785'arm_neonv2_hw' 4786 Test system supports executing NEON v2 instructions. 4787 4788'arm_neon_ok' 4789 ARM Target supports '-mfpu=neon -mfloat-abi=softfp' or compatible 4790 options. Some multilibs may be incompatible with these options. 4791 4792'arm_neonv2_ok' 4793 ARM Target supports '-mfpu=neon-vfpv4 -mfloat-abi=softfp' or 4794 compatible options. Some multilibs may be incompatible with these 4795 options. 4796 4797'arm_neon_fp16_ok' 4798 ARM Target supports '-mfpu=neon-fp16 -mfloat-abi=softfp' or 4799 compatible options, including '-mfp16-format=ieee' if necessary to 4800 obtain the '__fp16' type. Some multilibs may be incompatible with 4801 these options. 4802 4803'arm_neon_fp16_hw' 4804 Test system supports executing Neon half-precision float 4805 instructions. (Implies previous.) 4806 4807'arm_thumb1_ok' 4808 ARM target generates Thumb-1 code for '-mthumb'. 4809 4810'arm_thumb2_ok' 4811 ARM target generates Thumb-2 code for '-mthumb'. 4812 4813'arm_vfp_ok' 4814 ARM target supports '-mfpu=vfp -mfloat-abi=softfp'. Some multilibs 4815 may be incompatible with these options. 4816 4817'arm_vfp3_ok' 4818 ARM target supports '-mfpu=vfp3 -mfloat-abi=softfp'. Some 4819 multilibs may be incompatible with these options. 4820 4821'arm_v8_vfp_ok' 4822 ARM target supports '-mfpu=fp-armv8 -mfloat-abi=softfp'. Some 4823 multilibs may be incompatible with these options. 4824 4825'arm_v8_neon_ok' 4826 ARM target supports '-mfpu=neon-fp-armv8 -mfloat-abi=softfp'. Some 4827 multilibs may be incompatible with these options. 4828 4829'arm_v8_1a_neon_ok' 4830 ARM target supports options to generate ARMv8.1 Adv.SIMD 4831 instructions. Some multilibs may be incompatible with these 4832 options. 4833 4834'arm_v8_1a_neon_hw' 4835 ARM target supports executing ARMv8.1 Adv.SIMD instructions. Some 4836 multilibs may be incompatible with the options needed. Implies 4837 arm_v8_1a_neon_ok. 4838 4839'arm_prefer_ldrd_strd' 4840 ARM target prefers 'LDRD' and 'STRD' instructions over 'LDM' and 4841 'STM' instructions. 4842 48437.2.3.7 AArch64-specific attributes 4844................................... 4845 4846'aarch64_asm_<ext>_ok' 4847 AArch64 assembler supports the architecture extension 'ext' via the 4848 '.arch_extension' pseudo-op. 4849'aarch64_tiny' 4850 AArch64 target which generates instruction sequences for tiny 4851 memory model. 4852'aarch64_small' 4853 AArch64 target which generates instruction sequences for small 4854 memory model. 4855'aarch64_large' 4856 AArch64 target which generates instruction sequences for large 4857 memory model. 4858'aarch64_little_endian' 4859 AArch64 target which generates instruction sequences for little 4860 endian. 4861'aarch64_big_endian' 4862 AArch64 target which generates instruction sequences for big 4863 endian. 4864'aarch64_small_fpic' 4865 Binutils installed on test system supports relocation types 4866 required by -fpic for AArch64 small memory model. 4867 48687.2.3.8 MIPS-specific attributes 4869................................ 4870 4871'mips64' 4872 MIPS target supports 64-bit instructions. 4873 4874'nomips16' 4875 MIPS target does not produce MIPS16 code. 4876 4877'mips16_attribute' 4878 MIPS target can generate MIPS16 code. 4879 4880'mips_loongson' 4881 MIPS target is a Loongson-2E or -2F target using an ABI that 4882 supports the Loongson vector modes. 4883 4884'mips_newabi_large_long_double' 4885 MIPS target supports 'long double' larger than 'double' when using 4886 the new ABI. 4887 4888'mpaired_single' 4889 MIPS target supports '-mpaired-single'. 4890 48917.2.3.9 PowerPC-specific attributes 4892................................... 4893 4894'dfp_hw' 4895 PowerPC target supports executing hardware DFP instructions. 4896 4897'p8vector_hw' 4898 PowerPC target supports executing VSX instructions (ISA 2.07). 4899 4900'powerpc64' 4901 Test system supports executing 64-bit instructions. 4902 4903'powerpc_altivec' 4904 PowerPC target supports AltiVec. 4905 4906'powerpc_altivec_ok' 4907 PowerPC target supports '-maltivec'. 4908 4909'powerpc_eabi_ok' 4910 PowerPC target supports '-meabi'. 4911 4912'powerpc_elfv2' 4913 PowerPC target supports '-mabi=elfv2'. 4914 4915'powerpc_fprs' 4916 PowerPC target supports floating-point registers. 4917 4918'powerpc_hard_double' 4919 PowerPC target supports hardware double-precision floating-point. 4920 4921'powerpc_htm_ok' 4922 PowerPC target supports '-mhtm' 4923 4924'powerpc_p8vector_ok' 4925 PowerPC target supports '-mpower8-vector' 4926 4927'powerpc_ppu_ok' 4928 PowerPC target supports '-mcpu=cell'. 4929 4930'powerpc_spe' 4931 PowerPC target supports PowerPC SPE. 4932 4933'powerpc_spe_nocache' 4934 Including the options used to compile this particular test, the 4935 PowerPC target supports PowerPC SPE. 4936 4937'powerpc_spu' 4938 PowerPC target supports PowerPC SPU. 4939 4940'powerpc_vsx_ok' 4941 PowerPC target supports '-mvsx'. 4942 4943'powerpc_405_nocache' 4944 Including the options used to compile this particular test, the 4945 PowerPC target supports PowerPC 405. 4946 4947'ppc_recip_hw' 4948 PowerPC target supports executing reciprocal estimate instructions. 4949 4950'spu_auto_overlay' 4951 SPU target has toolchain that supports automatic overlay 4952 generation. 4953 4954'vmx_hw' 4955 PowerPC target supports executing AltiVec instructions. 4956 4957'vsx_hw' 4958 PowerPC target supports executing VSX instructions (ISA 2.06). 4959 49607.2.3.10 Other hardware attributes 4961.................................. 4962 4963'avx' 4964 Target supports compiling 'avx' instructions. 4965 4966'avx_runtime' 4967 Target supports the execution of 'avx' instructions. 4968 4969'cell_hw' 4970 Test system can execute AltiVec and Cell PPU instructions. 4971 4972'coldfire_fpu' 4973 Target uses a ColdFire FPU. 4974 4975'hard_float' 4976 Target supports FPU instructions. 4977 4978'non_strict_align' 4979 Target does not require strict alignment. 4980 4981'sqrt_insn' 4982 Target has a square root instruction that the compiler can 4983 generate. 4984 4985'sse' 4986 Target supports compiling 'sse' instructions. 4987 4988'sse_runtime' 4989 Target supports the execution of 'sse' instructions. 4990 4991'sse2' 4992 Target supports compiling 'sse2' instructions. 4993 4994'sse2_runtime' 4995 Target supports the execution of 'sse2' instructions. 4996 4997'sync_char_short' 4998 Target supports atomic operations on 'char' and 'short'. 4999 5000'sync_int_long' 5001 Target supports atomic operations on 'int' and 'long'. 5002 5003'ultrasparc_hw' 5004 Test environment appears to run executables on a simulator that 5005 accepts only 'EM_SPARC' executables and chokes on 'EM_SPARC32PLUS' 5006 or 'EM_SPARCV9' executables. 5007 5008'vect_cmdline_needed' 5009 Target requires a command line argument to enable a SIMD 5010 instruction set. 5011 5012'pie_copyreloc' 5013 The x86-64 target linker supports PIE with copy reloc. 5014 50157.2.3.11 Environment attributes 5016............................... 5017 5018'c' 5019 The language for the compiler under test is C. 5020 5021'c++' 5022 The language for the compiler under test is C++. 5023 5024'c99_runtime' 5025 Target provides a full C99 runtime. 5026 5027'correct_iso_cpp_string_wchar_protos' 5028 Target 'string.h' and 'wchar.h' headers provide C++ required 5029 overloads for 'strchr' etc. functions. 5030 5031'dummy_wcsftime' 5032 Target uses a dummy 'wcsftime' function that always returns zero. 5033 5034'fd_truncate' 5035 Target can truncate a file from a file descriptor, as used by 5036 'libgfortran/io/unix.c:fd_truncate'; i.e. 'ftruncate' or 'chsize'. 5037 5038'freestanding' 5039 Target is 'freestanding' as defined in section 4 of the C99 5040 standard. Effectively, it is a target which supports no extra 5041 headers or libraries other than what is considered essential. 5042 5043'init_priority' 5044 Target supports constructors with initialization priority 5045 arguments. 5046 5047'inttypes_types' 5048 Target has the basic signed and unsigned types in 'inttypes.h'. 5049 This is for tests that GCC's notions of these types agree with 5050 those in the header, as some systems have only 'inttypes.h'. 5051 5052'lax_strtofp' 5053 Target might have errors of a few ULP in string to floating-point 5054 conversion functions and overflow is not always detected correctly 5055 by those functions. 5056 5057'mempcpy' 5058 Target provides 'mempcpy' function. 5059 5060'mmap' 5061 Target supports 'mmap'. 5062 5063'newlib' 5064 Target supports Newlib. 5065 5066'pow10' 5067 Target provides 'pow10' function. 5068 5069'pthread' 5070 Target can compile using 'pthread.h' with no errors or warnings. 5071 5072'pthread_h' 5073 Target has 'pthread.h'. 5074 5075'run_expensive_tests' 5076 Expensive testcases (usually those that consume excessive amounts 5077 of CPU time) should be run on this target. This can be enabled by 5078 setting the 'GCC_TEST_RUN_EXPENSIVE' environment variable to a 5079 non-empty string. 5080 5081'simulator' 5082 Test system runs executables on a simulator (i.e. slowly) rather 5083 than hardware (i.e. fast). 5084 5085'stabs' 5086 Target supports the stabs debugging format. 5087 5088'stdint_types' 5089 Target has the basic signed and unsigned C types in 'stdint.h'. 5090 This will be obsolete when GCC ensures a working 'stdint.h' for all 5091 targets. 5092 5093'stpcpy' 5094 Target provides 'stpcpy' function. 5095 5096'trampolines' 5097 Target supports trampolines. 5098 5099'uclibc' 5100 Target supports uClibc. 5101 5102'unwrapped' 5103 Target does not use a status wrapper. 5104 5105'vxworks_kernel' 5106 Target is a VxWorks kernel. 5107 5108'vxworks_rtp' 5109 Target is a VxWorks RTP. 5110 5111'wchar' 5112 Target supports wide characters. 5113 51147.2.3.12 Other attributes 5115......................... 5116 5117'automatic_stack_alignment' 5118 Target supports automatic stack alignment. 5119 5120'cxa_atexit' 5121 Target uses '__cxa_atexit'. 5122 5123'default_packed' 5124 Target has packed layout of structure members by default. 5125 5126'fgraphite' 5127 Target supports Graphite optimizations. 5128 5129'fixed_point' 5130 Target supports fixed-point extension to C. 5131 5132'fopenacc' 5133 Target supports OpenACC via '-fopenacc'. 5134 5135'fopenmp' 5136 Target supports OpenMP via '-fopenmp'. 5137 5138'fpic' 5139 Target supports '-fpic' and '-fPIC'. 5140 5141'freorder' 5142 Target supports '-freorder-blocks-and-partition'. 5143 5144'fstack_protector' 5145 Target supports '-fstack-protector'. 5146 5147'gas' 5148 Target uses GNU 'as'. 5149 5150'gc_sections' 5151 Target supports '--gc-sections'. 5152 5153'gld' 5154 Target uses GNU 'ld'. 5155 5156'keeps_null_pointer_checks' 5157 Target keeps null pointer checks, either due to the use of 5158 '-fno-delete-null-pointer-checks' or hardwired into the target. 5159 5160'lto' 5161 Compiler has been configured to support link-time optimization 5162 (LTO). 5163 5164'naked_functions' 5165 Target supports the 'naked' function attribute. 5166 5167'named_sections' 5168 Target supports named sections. 5169 5170'natural_alignment_32' 5171 Target uses natural alignment (aligned to type size) for types of 5172 32 bits or less. 5173 5174'target_natural_alignment_64' 5175 Target uses natural alignment (aligned to type size) for types of 5176 64 bits or less. 5177 5178'nonpic' 5179 Target does not generate PIC by default. 5180 5181'pie_enabled' 5182 Target generates PIE by default. 5183 5184'pcc_bitfield_type_matters' 5185 Target defines 'PCC_BITFIELD_TYPE_MATTERS'. 5186 5187'pe_aligned_commons' 5188 Target supports '-mpe-aligned-commons'. 5189 5190'pie' 5191 Target supports '-pie', '-fpie' and '-fPIE'. 5192 5193'rdynamic' 5194 Target supports '-rdynamic'. 5195 5196'section_anchors' 5197 Target supports section anchors. 5198 5199'short_enums' 5200 Target defaults to short enums. 5201 5202'static' 5203 Target supports '-static'. 5204 5205'static_libgfortran' 5206 Target supports statically linking 'libgfortran'. 5207 5208'string_merging' 5209 Target supports merging string constants at link time. 5210 5211'ucn' 5212 Target supports compiling and assembling UCN. 5213 5214'ucn_nocache' 5215 Including the options used to compile this particular test, the 5216 target supports compiling and assembling UCN. 5217 5218'unaligned_stack' 5219 Target does not guarantee that its 'STACK_BOUNDARY' is greater than 5220 or equal to the required vector alignment. 5221 5222'vector_alignment_reachable' 5223 Vector alignment is reachable for types of 32 bits or less. 5224 5225'vector_alignment_reachable_for_64bit' 5226 Vector alignment is reachable for types of 64 bits or less. 5227 5228'wchar_t_char16_t_compatible' 5229 Target supports 'wchar_t' that is compatible with 'char16_t'. 5230 5231'wchar_t_char32_t_compatible' 5232 Target supports 'wchar_t' that is compatible with 'char32_t'. 5233 5234'comdat_group' 5235 Target uses comdat groups. 5236 52377.2.3.13 Local to tests in 'gcc.target/i386' 5238............................................ 5239 5240'3dnow' 5241 Target supports compiling '3dnow' instructions. 5242 5243'aes' 5244 Target supports compiling 'aes' instructions. 5245 5246'fma4' 5247 Target supports compiling 'fma4' instructions. 5248 5249'ms_hook_prologue' 5250 Target supports attribute 'ms_hook_prologue'. 5251 5252'pclmul' 5253 Target supports compiling 'pclmul' instructions. 5254 5255'sse3' 5256 Target supports compiling 'sse3' instructions. 5257 5258'sse4' 5259 Target supports compiling 'sse4' instructions. 5260 5261'sse4a' 5262 Target supports compiling 'sse4a' instructions. 5263 5264'ssse3' 5265 Target supports compiling 'ssse3' instructions. 5266 5267'vaes' 5268 Target supports compiling 'vaes' instructions. 5269 5270'vpclmul' 5271 Target supports compiling 'vpclmul' instructions. 5272 5273'xop' 5274 Target supports compiling 'xop' instructions. 5275 52767.2.3.14 Local to tests in 'gcc.target/spu/ea' 5277.............................................. 5278 5279'ealib' 5280 Target '__ea' library functions are available. 5281 52827.2.3.15 Local to tests in 'gcc.test-framework' 5283............................................... 5284 5285'no' 5286 Always returns 0. 5287 5288'yes' 5289 Always returns 1. 5290 5291 5292File: gccint.info, Node: Add Options, Next: Require Support, Prev: Effective-Target Keywords, Up: Test Directives 5293 52947.2.4 Features for 'dg-add-options' 5295----------------------------------- 5296 5297The supported values of FEATURE for directive 'dg-add-options' are: 5298 5299'arm_fp' 5300 '__ARM_FP' definition. Only ARM targets support this feature, and 5301 only then in certain modes; see the *note arm_fp_ok effective 5302 target keyword: arm_fp_ok. 5303 5304'arm_neon' 5305 NEON support. Only ARM targets support this feature, and only then 5306 in certain modes; see the *note arm_neon_ok effective target 5307 keyword: arm_neon_ok. 5308 5309'arm_neon_fp16' 5310 NEON and half-precision floating point support. Only ARM targets 5311 support this feature, and only then in certain modes; see the *note 5312 arm_neon_fp16_ok effective target keyword: arm_neon_fp16_ok. 5313 5314'arm_vfp3' 5315 arm vfp3 floating point support; see the *note arm_vfp3_ok 5316 effective target keyword: arm_vfp3_ok. 5317 5318'bind_pic_locally' 5319 Add the target-specific flags needed to enable functions to bind 5320 locally when using pic/PIC passes in the testsuite. 5321 5322'c99_runtime' 5323 Add the target-specific flags needed to access the C99 runtime. 5324 5325'ieee' 5326 Add the target-specific flags needed to enable full IEEE compliance 5327 mode. 5328 5329'mips16_attribute' 5330 'mips16' function attributes. Only MIPS targets support this 5331 feature, and only then in certain modes. 5332 5333'tls' 5334 Add the target-specific flags needed to use thread-local storage. 5335 5336 5337File: gccint.info, Node: Require Support, Next: Final Actions, Prev: Add Options, Up: Test Directives 5338 53397.2.5 Variants of 'dg-require-SUPPORT' 5340-------------------------------------- 5341 5342A few of the 'dg-require' directives take arguments. 5343 5344'dg-require-iconv CODESET' 5345 Skip the test if the target does not support iconv. CODESET is the 5346 codeset to convert to. 5347 5348'dg-require-profiling PROFOPT' 5349 Skip the test if the target does not support profiling with option 5350 PROFOPT. 5351 5352'dg-require-visibility VIS' 5353 Skip the test if the target does not support the 'visibility' 5354 attribute. If VIS is '""', support for 'visibility("hidden")' is 5355 checked, for 'visibility("VIS")' otherwise. 5356 5357 The original 'dg-require' directives were defined before there was 5358support for effective-target keywords. The directives that do not take 5359arguments could be replaced with effective-target keywords. 5360 5361'dg-require-alias ""' 5362 Skip the test if the target does not support the 'alias' attribute. 5363 5364'dg-require-ascii-locale ""' 5365 Skip the test if the host does not support an ASCII locale. 5366 5367'dg-require-compat-dfp ""' 5368 Skip this test unless both compilers in a 'compat' testsuite 5369 support decimal floating point. 5370 5371'dg-require-cxa-atexit ""' 5372 Skip the test if the target does not support '__cxa_atexit'. This 5373 is equivalent to 'dg-require-effective-target cxa_atexit'. 5374 5375'dg-require-dll ""' 5376 Skip the test if the target does not support DLL attributes. 5377 5378'dg-require-fork ""' 5379 Skip the test if the target does not support 'fork'. 5380 5381'dg-require-gc-sections ""' 5382 Skip the test if the target's linker does not support the 5383 '--gc-sections' flags. This is equivalent to 5384 'dg-require-effective-target gc-sections'. 5385 5386'dg-require-host-local ""' 5387 Skip the test if the host is remote, rather than the same as the 5388 build system. Some tests are incompatible with DejaGnu's handling 5389 of remote hosts, which involves copying the source file to the host 5390 and compiling it with a relative path and "'-o a.out'". 5391 5392'dg-require-mkfifo ""' 5393 Skip the test if the target does not support 'mkfifo'. 5394 5395'dg-require-named-sections ""' 5396 Skip the test is the target does not support named sections. This 5397 is equivalent to 'dg-require-effective-target named_sections'. 5398 5399'dg-require-weak ""' 5400 Skip the test if the target does not support weak symbols. 5401 5402'dg-require-weak-override ""' 5403 Skip the test if the target does not support overriding weak 5404 symbols. 5405 5406 5407File: gccint.info, Node: Final Actions, Prev: Require Support, Up: Test Directives 5408 54097.2.6 Commands for use in 'dg-final' 5410------------------------------------ 5411 5412The GCC testsuite defines the following directives to be used within 5413'dg-final'. 5414 54157.2.6.1 Scan a particular file 5416.............................. 5417 5418'scan-file FILENAME REGEXP [{ target/xfail SELECTOR }]' 5419 Passes if REGEXP matches text in FILENAME. 5420'scan-file-not FILENAME REGEXP [{ target/xfail SELECTOR }]' 5421 Passes if REGEXP does not match text in FILENAME. 5422'scan-module MODULE REGEXP [{ target/xfail SELECTOR }]' 5423 Passes if REGEXP matches in Fortran module MODULE. 5424 54257.2.6.2 Scan the assembly output 5426................................ 5427 5428'scan-assembler REGEX [{ target/xfail SELECTOR }]' 5429 Passes if REGEX matches text in the test's assembler output. 5430 5431'scan-assembler-not REGEX [{ target/xfail SELECTOR }]' 5432 Passes if REGEX does not match text in the test's assembler output. 5433 5434'scan-assembler-times REGEX NUM [{ target/xfail SELECTOR }]' 5435 Passes if REGEX is matched exactly NUM times in the test's 5436 assembler output. 5437 5438'scan-assembler-dem REGEX [{ target/xfail SELECTOR }]' 5439 Passes if REGEX matches text in the test's demangled assembler 5440 output. 5441 5442'scan-assembler-dem-not REGEX [{ target/xfail SELECTOR }]' 5443 Passes if REGEX does not match text in the test's demangled 5444 assembler output. 5445 5446'scan-hidden SYMBOL [{ target/xfail SELECTOR }]' 5447 Passes if SYMBOL is defined as a hidden symbol in the test's 5448 assembly output. 5449 5450'scan-not-hidden SYMBOL [{ target/xfail SELECTOR }]' 5451 Passes if SYMBOL is not defined as a hidden symbol in the test's 5452 assembly output. 5453 54547.2.6.3 Scan optimization dump files 5455.................................... 5456 5457These commands are available for KIND of 'tree', 'rtl', and 'ipa'. 5458 5459'scan-KIND-dump REGEX SUFFIX [{ target/xfail SELECTOR }]' 5460 Passes if REGEX matches text in the dump file with suffix SUFFIX. 5461 5462'scan-KIND-dump-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5463 Passes if REGEX does not match text in the dump file with suffix 5464 SUFFIX. 5465 5466'scan-KIND-dump-times REGEX NUM SUFFIX [{ target/xfail SELECTOR }]' 5467 Passes if REGEX is found exactly NUM times in the dump file with 5468 suffix SUFFIX. 5469 5470'scan-KIND-dump-dem REGEX SUFFIX [{ target/xfail SELECTOR }]' 5471 Passes if REGEX matches demangled text in the dump file with suffix 5472 SUFFIX. 5473 5474'scan-KIND-dump-dem-not REGEX SUFFIX [{ target/xfail SELECTOR }]' 5475 Passes if REGEX does not match demangled text in the dump file with 5476 suffix SUFFIX. 5477 54787.2.6.4 Verify that an output files exists or not 5479................................................. 5480 5481'output-exists [{ target/xfail SELECTOR }]' 5482 Passes if compiler output file exists. 5483 5484'output-exists-not [{ target/xfail SELECTOR }]' 5485 Passes if compiler output file does not exist. 5486 54877.2.6.5 Check for LTO tests 5488........................... 5489 5490'scan-symbol REGEXP [{ target/xfail SELECTOR }]' 5491 Passes if the pattern is present in the final executable. 5492 54937.2.6.6 Checks for 'gcov' tests 5494............................... 5495 5496'run-gcov SOURCEFILE' 5497 Check line counts in 'gcov' tests. 5498 5499'run-gcov [branches] [calls] { OPTS SOURCEFILE }' 5500 Check branch and/or call counts, in addition to line counts, in 5501 'gcov' tests. 5502 55037.2.6.7 Clean up generated test files 5504..................................... 5505 5506Usually the test-framework removes files that were generated during 5507testing. If a testcase, for example, uses any dumping mechanism to 5508inspect a passes dump file, the testsuite recognized the dump option 5509passed to the tool and schedules a final cleanup to remove these files. 5510 5511 There are, however, following additional cleanup directives that can be 5512used to annotate a testcase "manually". 5513'cleanup-coverage-files' 5514 Removes coverage data files generated for this test. 5515 5516'cleanup-modules "LIST-OF-EXTRA-MODULES"' 5517 Removes Fortran module files generated for this test, excluding the 5518 module names listed in keep-modules. Cleaning up module files is 5519 usually done automatically by the testsuite by looking at the 5520 source files and removing the modules after the test has been 5521 executed. 5522 module MoD1 5523 end module MoD1 5524 module Mod2 5525 end module Mod2 5526 module moD3 5527 end module moD3 5528 module mod4 5529 end module mod4 5530 ! { dg-final { cleanup-modules "mod1 mod2" } } ! redundant 5531 ! { dg-final { keep-modules "mod3 mod4" } } 5532 5533'keep-modules "LIST-OF-MODULES-NOT-TO-DELETE"' 5534 Whitespace separated list of module names that should not be 5535 deleted by cleanup-modules. If the list of modules is empty, all 5536 modules defined in this file are kept. 5537 module maybe_unneeded 5538 end module maybe_unneeded 5539 module keep1 5540 end module keep1 5541 module keep2 5542 end module keep2 5543 ! { dg-final { keep-modules "keep1 keep2" } } ! just keep these two 5544 ! { dg-final { keep-modules "" } } ! keep all 5545 5546'dg-keep-saved-temps "LIST-OF-SUFFIXES-NOT-TO-DELETE"' 5547 Whitespace separated list of suffixes that should not be deleted 5548 automatically in a testcase that uses '-save-temps'. 5549 // { dg-options "-save-temps -fpch-preprocess -I." } 5550 int main() { return 0; } 5551 // { dg-keep-saved-temps ".s" } ! just keep assembler file 5552 // { dg-keep-saved-temps ".s" ".i" } ! ... and .i 5553 // { dg-keep-saved-temps ".ii" ".o" } ! or just .ii and .o 5554 5555'cleanup-profile-file' 5556 Removes profiling files generated for this test. 5557 5558'cleanup-repo-files' 5559 Removes files generated for this test for '-frepo'. 5560 5561 5562File: gccint.info, Node: Ada Tests, Next: C Tests, Prev: Test Directives, Up: Testsuites 5563 55647.3 Ada Language Testsuites 5565=========================== 5566 5567The Ada testsuite includes executable tests from the ACATS testsuite, 5568publicly available at <http://www.ada-auth.org/acats.html>. 5569 5570 These tests are integrated in the GCC testsuite in the 'ada/acats' 5571directory, and enabled automatically when running 'make check', assuming 5572the Ada language has been enabled when configuring GCC. 5573 5574 You can also run the Ada testsuite independently, using 'make 5575check-ada', or run a subset of the tests by specifying which chapter to 5576run, e.g.: 5577 5578 $ make check-ada CHAPTERS="c3 c9" 5579 5580 The tests are organized by directory, each directory corresponding to a 5581chapter of the Ada Reference Manual. So for example, 'c9' corresponds 5582to chapter 9, which deals with tasking features of the language. 5583 5584 There is also an extra chapter called 'gcc' containing a template for 5585creating new executable tests, although this is deprecated in favor of 5586the 'gnat.dg' testsuite. 5587 5588 The tests are run using two 'sh' scripts: 'run_acats' and 'run_all.sh'. 5589To run the tests using a simulator or a cross target, see the small 5590customization section at the top of 'run_all.sh'. 5591 5592 These tests are run using the build tree: they can be run without doing 5593a 'make install'. 5594 5595 5596File: gccint.info, Node: C Tests, Next: libgcj Tests, Prev: Ada Tests, Up: Testsuites 5597 55987.4 C Language Testsuites 5599========================= 5600 5601GCC contains the following C language testsuites, in the 'gcc/testsuite' 5602directory: 5603 5604'gcc.dg' 5605 This contains tests of particular features of the C compiler, using 5606 the more modern 'dg' harness. Correctness tests for various 5607 compiler features should go here if possible. 5608 5609 Magic comments determine whether the file is preprocessed, 5610 compiled, linked or run. In these tests, error and warning message 5611 texts are compared against expected texts or regular expressions 5612 given in comments. These tests are run with the options '-ansi 5613 -pedantic' unless other options are given in the test. Except as 5614 noted below they are not run with multiple optimization options. 5615'gcc.dg/compat' 5616 This subdirectory contains tests for binary compatibility using 5617 'lib/compat.exp', which in turn uses the language-independent 5618 support (*note Support for testing binary compatibility: compat 5619 Testing.). 5620'gcc.dg/cpp' 5621 This subdirectory contains tests of the preprocessor. 5622'gcc.dg/debug' 5623 This subdirectory contains tests for debug formats. Tests in this 5624 subdirectory are run for each debug format that the compiler 5625 supports. 5626'gcc.dg/format' 5627 This subdirectory contains tests of the '-Wformat' format checking. 5628 Tests in this directory are run with and without '-DWIDE'. 5629'gcc.dg/noncompile' 5630 This subdirectory contains tests of code that should not compile 5631 and does not need any special compilation options. They are run 5632 with multiple optimization options, since sometimes invalid code 5633 crashes the compiler with optimization. 5634'gcc.dg/special' 5635 FIXME: describe this. 5636 5637'gcc.c-torture' 5638 This contains particular code fragments which have historically 5639 broken easily. These tests are run with multiple optimization 5640 options, so tests for features which only break at some 5641 optimization levels belong here. This also contains tests to check 5642 that certain optimizations occur. It might be worthwhile to 5643 separate the correctness tests cleanly from the code quality tests, 5644 but it hasn't been done yet. 5645 5646'gcc.c-torture/compat' 5647 FIXME: describe this. 5648 5649 This directory should probably not be used for new tests. 5650'gcc.c-torture/compile' 5651 This testsuite contains test cases that should compile, but do not 5652 need to link or run. These test cases are compiled with several 5653 different combinations of optimization options. All warnings are 5654 disabled for these test cases, so this directory is not suitable if 5655 you wish to test for the presence or absence of compiler warnings. 5656 While special options can be set, and tests disabled on specific 5657 platforms, by the use of '.x' files, mostly these test cases should 5658 not contain platform dependencies. FIXME: discuss how defines such 5659 as 'NO_LABEL_VALUES' and 'STACK_SIZE' are used. 5660'gcc.c-torture/execute' 5661 This testsuite contains test cases that should compile, link and 5662 run; otherwise the same comments as for 'gcc.c-torture/compile' 5663 apply. 5664'gcc.c-torture/execute/ieee' 5665 This contains tests which are specific to IEEE floating point. 5666'gcc.c-torture/unsorted' 5667 FIXME: describe this. 5668 5669 This directory should probably not be used for new tests. 5670'gcc.misc-tests' 5671 This directory contains C tests that require special handling. 5672 Some of these tests have individual expect files, and others share 5673 special-purpose expect files: 5674 5675 'bprob*.c' 5676 Test '-fbranch-probabilities' using 5677 'gcc.misc-tests/bprob.exp', which in turn uses the generic, 5678 language-independent framework (*note Support for testing 5679 profile-directed optimizations: profopt Testing.). 5680 5681 'gcov*.c' 5682 Test 'gcov' output using 'gcov.exp', which in turn uses the 5683 language-independent support (*note Support for testing gcov: 5684 gcov Testing.). 5685 5686 'i386-pf-*.c' 5687 Test i386-specific support for data prefetch using 5688 'i386-prefetch.exp'. 5689 5690'gcc.test-framework' 5691 'dg-*.c' 5692 Test the testsuite itself using 5693 'gcc.test-framework/test-framework.exp'. 5694 5695 FIXME: merge in 'testsuite/README.gcc' and discuss the format of test 5696cases and magic comments more. 5697 5698 5699File: gccint.info, Node: libgcj Tests, Next: LTO Testing, Prev: C Tests, Up: Testsuites 5700 57017.5 The Java library testsuites. 5702================================ 5703 5704Runtime tests are executed via 'make check' in the 5705'TARGET/libjava/testsuite' directory in the build tree. Additional 5706runtime tests can be checked into this testsuite. 5707 5708 Regression testing of the core packages in libgcj is also covered by 5709the Mauve testsuite. The Mauve Project develops tests for the Java 5710Class Libraries. These tests are run as part of libgcj testing by 5711placing the Mauve tree within the libjava testsuite sources at 5712'libjava/testsuite/libjava.mauve/mauve', or by specifying the location 5713of that tree when invoking 'make', as in 'make MAUVEDIR=~/mauve check'. 5714 5715 To detect regressions, a mechanism in 'mauve.exp' compares the failures 5716for a test run against the list of expected failures in 5717'libjava/testsuite/libjava.mauve/xfails' from the source hierarchy. 5718Update this file when adding new failing tests to Mauve, or when fixing 5719bugs in libgcj that had caused Mauve test failures. 5720 5721 We encourage developers to contribute test cases to Mauve. 5722 5723 5724File: gccint.info, Node: LTO Testing, Next: gcov Testing, Prev: libgcj Tests, Up: Testsuites 5725 57267.6 Support for testing link-time optimizations 5727=============================================== 5728 5729Tests for link-time optimizations usually require multiple source files 5730that are compiled separately, perhaps with different sets of options. 5731There are several special-purpose test directives used for these tests. 5732 5733'{ dg-lto-do DO-WHAT-KEYWORD }' 5734 DO-WHAT-KEYWORD specifies how the test is compiled and whether it 5735 is executed. It is one of: 5736 5737 'assemble' 5738 Compile with '-c' to produce a relocatable object file. 5739 'link' 5740 Compile, assemble, and link to produce an executable file. 5741 'run' 5742 Produce and run an executable file, which is expected to 5743 return an exit code of 0. 5744 5745 The default is 'assemble'. That can be overridden for a set of 5746 tests by redefining 'dg-do-what-default' within the '.exp' file for 5747 those tests. 5748 5749 Unlike 'dg-do', 'dg-lto-do' does not support an optional 'target' 5750 or 'xfail' list. Use 'dg-skip-if', 'dg-xfail-if', or 5751 'dg-xfail-run-if'. 5752 5753'{ dg-lto-options { { OPTIONS } [{ OPTIONS }] } [{ target SELECTOR }]}' 5754 This directive provides a list of one or more sets of compiler 5755 options to override LTO_OPTIONS. Each test will be compiled and 5756 run with each of these sets of options. 5757 5758'{ dg-extra-ld-options OPTIONS [{ target SELECTOR }]}' 5759 This directive adds OPTIONS to the linker options used. 5760 5761'{ dg-suppress-ld-options OPTIONS [{ target SELECTOR }]}' 5762 This directive removes OPTIONS from the set of linker options used. 5763 5764 5765File: gccint.info, Node: gcov Testing, Next: profopt Testing, Prev: LTO Testing, Up: Testsuites 5766 57677.7 Support for testing 'gcov' 5768============================== 5769 5770Language-independent support for testing 'gcov', and for checking that 5771branch profiling produces expected values, is provided by the expect 5772file 'lib/gcov.exp'. 'gcov' tests also rely on procedures in 5773'lib/gcc-dg.exp' to compile and run the test program. A typical 'gcov' 5774test contains the following DejaGnu commands within comments: 5775 5776 { dg-options "-fprofile-arcs -ftest-coverage" } 5777 { dg-do run { target native } } 5778 { dg-final { run-gcov sourcefile } } 5779 5780 Checks of 'gcov' output can include line counts, branch percentages, 5781and call return percentages. All of these checks are requested via 5782commands that appear in comments in the test's source file. Commands to 5783check line counts are processed by default. Commands to check branch 5784percentages and call return percentages are processed if the 'run-gcov' 5785command has arguments 'branches' or 'calls', respectively. For example, 5786the following specifies checking both, as well as passing '-b' to 5787'gcov': 5788 5789 { dg-final { run-gcov branches calls { -b sourcefile } } } 5790 5791 A line count command appears within a comment on the source line that 5792is expected to get the specified count and has the form 'count(CNT)'. A 5793test should only check line counts for lines that will get the same 5794count for any architecture. 5795 5796 Commands to check branch percentages ('branch') and call return 5797percentages ('returns') are very similar to each other. A beginning 5798command appears on or before the first of a range of lines that will 5799report the percentage, and the ending command follows that range of 5800lines. The beginning command can include a list of percentages, all of 5801which are expected to be found within the range. A range is terminated 5802by the next command of the same kind. A command 'branch(end)' or 5803'returns(end)' marks the end of a range without starting a new one. For 5804example: 5805 5806 if (i > 10 && j > i && j < 20) /* branch(27 50 75) */ 5807 /* branch(end) */ 5808 foo (i, j); 5809 5810 For a call return percentage, the value specified is the percentage of 5811calls reported to return. For a branch percentage, the value is either 5812the expected percentage or 100 minus that value, since the direction of 5813a branch can differ depending on the target or the optimization level. 5814 5815 Not all branches and calls need to be checked. A test should not check 5816for branches that might be optimized away or replaced with predicated 5817instructions. Don't check for calls inserted by the compiler or ones 5818that might be inlined or optimized away. 5819 5820 A single test can check for combinations of line counts, branch 5821percentages, and call return percentages. The command to check a line 5822count must appear on the line that will report that count, but commands 5823to check branch percentages and call return percentages can bracket the 5824lines that report them. 5825 5826 5827File: gccint.info, Node: profopt Testing, Next: compat Testing, Prev: gcov Testing, Up: Testsuites 5828 58297.8 Support for testing profile-directed optimizations 5830====================================================== 5831 5832The file 'profopt.exp' provides language-independent support for 5833checking correct execution of a test built with profile-directed 5834optimization. This testing requires that a test program be built and 5835executed twice. The first time it is compiled to generate profile data, 5836and the second time it is compiled to use the data that was generated 5837during the first execution. The second execution is to verify that the 5838test produces the expected results. 5839 5840 To check that the optimization actually generated better code, a test 5841can be built and run a third time with normal optimizations to verify 5842that the performance is better with the profile-directed optimizations. 5843'profopt.exp' has the beginnings of this kind of support. 5844 5845 'profopt.exp' provides generic support for profile-directed 5846optimizations. Each set of tests that uses it provides information 5847about a specific optimization: 5848 5849'tool' 5850 tool being tested, e.g., 'gcc' 5851 5852'profile_option' 5853 options used to generate profile data 5854 5855'feedback_option' 5856 options used to optimize using that profile data 5857 5858'prof_ext' 5859 suffix of profile data files 5860 5861'PROFOPT_OPTIONS' 5862 list of options with which to run each test, similar to the lists 5863 for torture tests 5864 5865'{ dg-final-generate { LOCAL-DIRECTIVE } }' 5866 This directive is similar to 'dg-final', but the LOCAL-DIRECTIVE is 5867 run after the generation of profile data. 5868 5869'{ dg-final-use { LOCAL-DIRECTIVE } }' 5870 The LOCAL-DIRECTIVE is run after the profile data have been used. 5871 5872 5873File: gccint.info, Node: compat Testing, Next: Torture Tests, Prev: profopt Testing, Up: Testsuites 5874 58757.9 Support for testing binary compatibility 5876============================================ 5877 5878The file 'compat.exp' provides language-independent support for binary 5879compatibility testing. It supports testing interoperability of two 5880compilers that follow the same ABI, or of multiple sets of compiler 5881options that should not affect binary compatibility. It is intended to 5882be used for testsuites that complement ABI testsuites. 5883 5884 A test supported by this framework has three parts, each in a separate 5885source file: a main program and two pieces that interact with each other 5886to split up the functionality being tested. 5887 5888'TESTNAME_main.SUFFIX' 5889 Contains the main program, which calls a function in file 5890 'TESTNAME_x.SUFFIX'. 5891 5892'TESTNAME_x.SUFFIX' 5893 Contains at least one call to a function in 'TESTNAME_y.SUFFIX'. 5894 5895'TESTNAME_y.SUFFIX' 5896 Shares data with, or gets arguments from, 'TESTNAME_x.SUFFIX'. 5897 5898 Within each test, the main program and one functional piece are 5899compiled by the GCC under test. The other piece can be compiled by an 5900alternate compiler. If no alternate compiler is specified, then all 5901three source files are all compiled by the GCC under test. You can 5902specify pairs of sets of compiler options. The first element of such a 5903pair specifies options used with the GCC under test, and the second 5904element of the pair specifies options used with the alternate compiler. 5905Each test is compiled with each pair of options. 5906 5907 'compat.exp' defines default pairs of compiler options. These can be 5908overridden by defining the environment variable 'COMPAT_OPTIONS' as: 5909 5910 COMPAT_OPTIONS="[list [list {TST1} {ALT1}] 5911 ...[list {TSTN} {ALTN}]]" 5912 5913 where TSTI and ALTI are lists of options, with TSTI used by the 5914compiler under test and ALTI used by the alternate compiler. For 5915example, with '[list [list {-g -O0} {-O3}] [list {-fpic} {-fPIC -O2}]]', 5916the test is first built with '-g -O0' by the compiler under test and 5917with '-O3' by the alternate compiler. The test is built a second time 5918using '-fpic' by the compiler under test and '-fPIC -O2' by the 5919alternate compiler. 5920 5921 An alternate compiler is specified by defining an environment variable 5922to be the full pathname of an installed compiler; for C define 5923'ALT_CC_UNDER_TEST', and for C++ define 'ALT_CXX_UNDER_TEST'. These 5924will be written to the 'site.exp' file used by DejaGnu. The default is 5925to build each test with the compiler under test using the first of each 5926pair of compiler options from 'COMPAT_OPTIONS'. When 5927'ALT_CC_UNDER_TEST' or 'ALT_CXX_UNDER_TEST' is 'same', each test is 5928built using the compiler under test but with combinations of the options 5929from 'COMPAT_OPTIONS'. 5930 5931 To run only the C++ compatibility suite using the compiler under test 5932and another version of GCC using specific compiler options, do the 5933following from 'OBJDIR/gcc': 5934 5935 rm site.exp 5936 make -k \ 5937 ALT_CXX_UNDER_TEST=${alt_prefix}/bin/g++ \ 5938 COMPAT_OPTIONS="LISTS AS SHOWN ABOVE" \ 5939 check-c++ \ 5940 RUNTESTFLAGS="compat.exp" 5941 5942 A test that fails when the source files are compiled with different 5943compilers, but passes when the files are compiled with the same 5944compiler, demonstrates incompatibility of the generated code or runtime 5945support. A test that fails for the alternate compiler but passes for 5946the compiler under test probably tests for a bug that was fixed in the 5947compiler under test but is present in the alternate compiler. 5948 5949 The binary compatibility tests support a small number of test framework 5950commands that appear within comments in a test file. 5951 5952'dg-require-*' 5953 These commands can be used in 'TESTNAME_main.SUFFIX' to skip the 5954 test if specific support is not available on the target. 5955 5956'dg-options' 5957 The specified options are used for compiling this particular source 5958 file, appended to the options from 'COMPAT_OPTIONS'. When this 5959 command appears in 'TESTNAME_main.SUFFIX' the options are also used 5960 to link the test program. 5961 5962'dg-xfail-if' 5963 This command can be used in a secondary source file to specify that 5964 compilation is expected to fail for particular options on 5965 particular targets. 5966 5967 5968File: gccint.info, Node: Torture Tests, Prev: compat Testing, Up: Testsuites 5969 59707.10 Support for torture testing using multiple options 5971======================================================= 5972 5973Throughout the compiler testsuite there are several directories whose 5974tests are run multiple times, each with a different set of options. 5975These are known as torture tests. 'lib/torture-options.exp' defines 5976procedures to set up these lists: 5977 5978'torture-init' 5979 Initialize use of torture lists. 5980'set-torture-options' 5981 Set lists of torture options to use for tests with and without 5982 loops. Optionally combine a set of torture options with a set of 5983 other options, as is done with Objective-C runtime options. 5984'torture-finish' 5985 Finalize use of torture lists. 5986 5987 The '.exp' file for a set of tests that use torture options must 5988include calls to these three procedures if: 5989 5990 * It calls 'gcc-dg-runtest' and overrides DG_TORTURE_OPTIONS. 5991 5992 * It calls ${TOOL}'-torture' or ${TOOL}'-torture-execute', where TOOL 5993 is 'c', 'fortran', or 'objc'. 5994 5995 * It calls 'dg-pch'. 5996 5997 It is not necessary for a '.exp' file that calls 'gcc-dg-runtest' to 5998call the torture procedures if the tests should use the list in 5999DG_TORTURE_OPTIONS defined in 'gcc-dg.exp'. 6000 6001 Most uses of torture options can override the default lists by defining 6002TORTURE_OPTIONS or add to the default list by defining 6003ADDITIONAL_TORTURE_OPTIONS. Define these in a '.dejagnurc' file or add 6004them to the 'site.exp' file; for example 6005 6006 set ADDITIONAL_TORTURE_OPTIONS [list \ 6007 { -O2 -ftree-loop-linear } \ 6008 { -O2 -fpeel-loops } ] 6009 6010 6011File: gccint.info, Node: Options, Next: Passes, Prev: Testsuites, Up: Top 6012 60138 Option specification files 6014**************************** 6015 6016Most GCC command-line options are described by special option definition 6017files, the names of which conventionally end in '.opt'. This chapter 6018describes the format of these files. 6019 6020* Menu: 6021 6022* Option file format:: The general layout of the files 6023* Option properties:: Supported option properties 6024 6025 6026File: gccint.info, Node: Option file format, Next: Option properties, Up: Options 6027 60288.1 Option file format 6029====================== 6030 6031Option files are a simple list of records in which each field occupies 6032its own line and in which the records themselves are separated by blank 6033lines. Comments may appear on their own line anywhere within the file 6034and are preceded by semicolons. Whitespace is allowed before the 6035semicolon. 6036 6037 The files can contain the following types of record: 6038 6039 * A language definition record. These records have two fields: the 6040 string 'Language' and the name of the language. Once a language 6041 has been declared in this way, it can be used as an option 6042 property. *Note Option properties::. 6043 6044 * A target specific save record to save additional information. 6045 These records have two fields: the string 'TargetSave', and a 6046 declaration type to go in the 'cl_target_option' structure. 6047 6048 * A variable record to define a variable used to store option 6049 information. These records have two fields: the string 'Variable', 6050 and a declaration of the type and name of the variable, optionally 6051 with an initializer (but without any trailing ';'). These records 6052 may be used for variables used for many options where declaring the 6053 initializer in a single option definition record, or duplicating it 6054 in many records, would be inappropriate, or for variables set in 6055 option handlers rather than referenced by 'Var' properties. 6056 6057 * A variable record to define a variable used to store option 6058 information. These records have two fields: the string 6059 'TargetVariable', and a declaration of the type and name of the 6060 variable, optionally with an initializer (but without any trailing 6061 ';'). 'TargetVariable' is a combination of 'Variable' and 6062 'TargetSave' records in that the variable is defined in the 6063 'gcc_options' structure, but these variables are also stored in the 6064 'cl_target_option' structure. The variables are saved in the 6065 target save code and restored in the target restore code. 6066 6067 * A variable record to record any additional files that the 6068 'options.h' file should include. This is useful to provide 6069 enumeration or structure definitions needed for target variables. 6070 These records have two fields: the string 'HeaderInclude' and the 6071 name of the include file. 6072 6073 * A variable record to record any additional files that the 6074 'options.c' or 'options-save.c' file should include. This is 6075 useful to provide inline functions needed for target variables 6076 and/or '#ifdef' sequences to properly set up the initialization. 6077 These records have two fields: the string 'SourceInclude' and the 6078 name of the include file. 6079 6080 * An enumeration record to define a set of strings that may be used 6081 as arguments to an option or options. These records have three 6082 fields: the string 'Enum', a space-separated list of properties and 6083 help text used to describe the set of strings in '--help' output. 6084 Properties use the same format as option properties; the following 6085 are valid: 6086 'Name(NAME)' 6087 This property is required; NAME must be a name (suitable for 6088 use in C identifiers) used to identify the set of strings in 6089 'Enum' option properties. 6090 6091 'Type(TYPE)' 6092 This property is required; TYPE is the C type for variables 6093 set by options using this enumeration together with 'Var'. 6094 6095 'UnknownError(MESSAGE)' 6096 The message MESSAGE will be used as an error message if the 6097 argument is invalid; for enumerations without 'UnknownError', 6098 a generic error message is used. MESSAGE should contain a 6099 single '%qs' format, which will be used to format the invalid 6100 argument. 6101 6102 * An enumeration value record to define one of the strings in a set 6103 given in an 'Enum' record. These records have two fields: the 6104 string 'EnumValue' and a space-separated list of properties. 6105 Properties use the same format as option properties; the following 6106 are valid: 6107 'Enum(NAME)' 6108 This property is required; NAME says which 'Enum' record this 6109 'EnumValue' record corresponds to. 6110 6111 'String(STRING)' 6112 This property is required; STRING is the string option 6113 argument being described by this record. 6114 6115 'Value(VALUE)' 6116 This property is required; it says what value (representable 6117 as 'int') should be used for the given string. 6118 6119 'Canonical' 6120 This property is optional. If present, it says the present 6121 string is the canonical one among all those with the given 6122 value. Other strings yielding that value will be mapped to 6123 this one so specs do not need to handle them. 6124 6125 'DriverOnly' 6126 This property is optional. If present, the present string 6127 will only be accepted by the driver. This is used for cases 6128 such as '-march=native' that are processed by the driver so 6129 that 'gcc -v' shows how the options chosen depended on the 6130 system on which the compiler was run. 6131 6132 * An option definition record. These records have the following 6133 fields: 6134 1. the name of the option, with the leading "-" removed 6135 2. a space-separated list of option properties (*note Option 6136 properties::) 6137 3. the help text to use for '--help' (omitted if the second field 6138 contains the 'Undocumented' property). 6139 6140 By default, all options beginning with "f", "W" or "m" are 6141 implicitly assumed to take a "no-" form. This form should not be 6142 listed separately. If an option beginning with one of these 6143 letters does not have a "no-" form, you can use the 6144 'RejectNegative' property to reject it. 6145 6146 The help text is automatically line-wrapped before being displayed. 6147 Normally the name of the option is printed on the left-hand side of 6148 the output and the help text is printed on the right. However, if 6149 the help text contains a tab character, the text to the left of the 6150 tab is used instead of the option's name and the text to the right 6151 of the tab forms the help text. This allows you to elaborate on 6152 what type of argument the option takes. 6153 6154 * A target mask record. These records have one field of the form 6155 'Mask(X)'. The options-processing script will automatically 6156 allocate a bit in 'target_flags' (*note Run-time Target::) for each 6157 mask name X and set the macro 'MASK_X' to the appropriate bitmask. 6158 It will also declare a 'TARGET_X' macro that has the value 1 when 6159 bit 'MASK_X' is set and 0 otherwise. 6160 6161 They are primarily intended to declare target masks that are not 6162 associated with user options, either because these masks represent 6163 internal switches or because the options are not available on all 6164 configurations and yet the masks always need to be defined. 6165 6166 6167File: gccint.info, Node: Option properties, Prev: Option file format, Up: Options 6168 61698.2 Option properties 6170===================== 6171 6172The second field of an option record can specify any of the following 6173properties. When an option takes an argument, it is enclosed in 6174parentheses following the option property name. The parser that handles 6175option files is quite simplistic, and will be tricked by any nested 6176parentheses within the argument text itself; in this case, the entire 6177option argument can be wrapped in curly braces within the parentheses to 6178demarcate it, e.g.: 6179 6180 Condition({defined (USE_CYGWIN_LIBSTDCXX_WRAPPERS)}) 6181 6182'Common' 6183 The option is available for all languages and targets. 6184 6185'Target' 6186 The option is available for all languages but is target-specific. 6187 6188'Driver' 6189 The option is handled by the compiler driver using code not shared 6190 with the compilers proper ('cc1' etc.). 6191 6192'LANGUAGE' 6193 The option is available when compiling for the given language. 6194 6195 It is possible to specify several different languages for the same 6196 option. Each LANGUAGE must have been declared by an earlier 6197 'Language' record. *Note Option file format::. 6198 6199'RejectDriver' 6200 The option is only handled by the compilers proper ('cc1' etc.) and 6201 should not be accepted by the driver. 6202 6203'RejectNegative' 6204 The option does not have a "no-" form. All options beginning with 6205 "f", "W" or "m" are assumed to have a "no-" form unless this 6206 property is used. 6207 6208'Negative(OTHERNAME)' 6209 The option will turn off another option OTHERNAME, which is the 6210 option name with the leading "-" removed. This chain action will 6211 propagate through the 'Negative' property of the option to be 6212 turned off. 6213 6214 As a consequence, if you have a group of mutually-exclusive 6215 options, their 'Negative' properties should form a circular chain. 6216 For example, if options '-A', '-B' and '-C' are mutually exclusive, 6217 their respective 'Negative' properties should be 'Negative(B)', 6218 'Negative(C)' and 'Negative(A)'. 6219 6220'Joined' 6221'Separate' 6222 The option takes a mandatory argument. 'Joined' indicates that the 6223 option and argument can be included in the same 'argv' entry (as 6224 with '-mflush-func=NAME', for example). 'Separate' indicates that 6225 the option and argument can be separate 'argv' entries (as with 6226 '-o'). An option is allowed to have both of these properties. 6227 6228'JoinedOrMissing' 6229 The option takes an optional argument. If the argument is given, 6230 it will be part of the same 'argv' entry as the option itself. 6231 6232 This property cannot be used alongside 'Joined' or 'Separate'. 6233 6234'MissingArgError(MESSAGE)' 6235 For an option marked 'Joined' or 'Separate', the message MESSAGE 6236 will be used as an error message if the mandatory argument is 6237 missing; for options without 'MissingArgError', a generic error 6238 message is used. MESSAGE should contain a single '%qs' format, 6239 which will be used to format the name of the option passed. 6240 6241'Args(N)' 6242 For an option marked 'Separate', indicate that it takes N 6243 arguments. The default is 1. 6244 6245'UInteger' 6246 The option's argument is a non-negative integer. The option parser 6247 will check and convert the argument before passing it to the 6248 relevant option handler. 'UInteger' should also be used on options 6249 like '-falign-loops' where both '-falign-loops' and 6250 '-falign-loops'=N are supported to make sure the saved options are 6251 given a full integer. 6252 6253'ToLower' 6254 The option's argument should be converted to lowercase as part of 6255 putting it in canonical form, and before comparing with the strings 6256 indicated by any 'Enum' property. 6257 6258'NoDriverArg' 6259 For an option marked 'Separate', the option only takes an argument 6260 in the compiler proper, not in the driver. This is for 6261 compatibility with existing options that are used both directly and 6262 via '-Wp,'; new options should not have this property. 6263 6264'Var(VAR)' 6265 The state of this option should be stored in variable VAR (actually 6266 a macro for 'global_options.x_VAR'). The way that the state is 6267 stored depends on the type of option: 6268 6269 * If the option uses the 'Mask' or 'InverseMask' properties, VAR 6270 is the integer variable that contains the mask. 6271 6272 * If the option is a normal on/off switch, VAR is an integer 6273 variable that is nonzero when the option is enabled. The 6274 options parser will set the variable to 1 when the positive 6275 form of the option is used and 0 when the "no-" form is used. 6276 6277 * If the option takes an argument and has the 'UInteger' 6278 property, VAR is an integer variable that stores the value of 6279 the argument. 6280 6281 * If the option takes an argument and has the 'Enum' property, 6282 VAR is a variable (type given in the 'Type' property of the 6283 'Enum' record whose 'Name' property has the same argument as 6284 the 'Enum' property of this option) that stores the value of 6285 the argument. 6286 6287 * If the option has the 'Defer' property, VAR is a pointer to a 6288 'VEC(cl_deferred_option,heap)' that stores the option for 6289 later processing. (VAR is declared with type 'void *' and 6290 needs to be cast to 'VEC(cl_deferred_option,heap)' before 6291 use.) 6292 6293 * Otherwise, if the option takes an argument, VAR is a pointer 6294 to the argument string. The pointer will be null if the 6295 argument is optional and wasn't given. 6296 6297 The option-processing script will usually zero-initialize VAR. You 6298 can modify this behavior using 'Init'. 6299 6300'Var(VAR, SET)' 6301 The option controls an integer variable VAR and is active when VAR 6302 equals SET. The option parser will set VAR to SET when the 6303 positive form of the option is used and '!SET' when the "no-" form 6304 is used. 6305 6306 VAR is declared in the same way as for the single-argument form 6307 described above. 6308 6309'Init(VALUE)' 6310 The variable specified by the 'Var' property should be statically 6311 initialized to VALUE. If more than one option using the same 6312 variable specifies 'Init', all must specify the same initializer. 6313 6314'Mask(NAME)' 6315 The option is associated with a bit in the 'target_flags' variable 6316 (*note Run-time Target::) and is active when that bit is set. You 6317 may also specify 'Var' to select a variable other than 6318 'target_flags'. 6319 6320 The options-processing script will automatically allocate a unique 6321 bit for the option. If the option is attached to 'target_flags', 6322 the script will set the macro 'MASK_NAME' to the appropriate 6323 bitmask. It will also declare a 'TARGET_NAME' macro that has the 6324 value 1 when the option is active and 0 otherwise. If you use 6325 'Var' to attach the option to a different variable, the bitmask 6326 macro with be called 'OPTION_MASK_NAME'. 6327 6328'InverseMask(OTHERNAME)' 6329'InverseMask(OTHERNAME, THISNAME)' 6330 The option is the inverse of another option that has the 6331 'Mask(OTHERNAME)' property. If THISNAME is given, the 6332 options-processing script will declare a 'TARGET_THISNAME' macro 6333 that is 1 when the option is active and 0 otherwise. 6334 6335'Enum(NAME)' 6336 The option's argument is a string from the set of strings 6337 associated with the corresponding 'Enum' record. The string is 6338 checked and converted to the integer specified in the corresponding 6339 'EnumValue' record before being passed to option handlers. 6340 6341'Defer' 6342 The option should be stored in a vector, specified with 'Var', for 6343 later processing. 6344 6345'Alias(OPT)' 6346'Alias(OPT, ARG)' 6347'Alias(OPT, POSARG, NEGARG)' 6348 The option is an alias for '-OPT' (or the negative form of that 6349 option, depending on 'NegativeAlias'). In the first form, any 6350 argument passed to the alias is considered to be passed to '-OPT', 6351 and '-OPT' is considered to be negated if the alias is used in 6352 negated form. In the second form, the alias may not be negated or 6353 have an argument, and POSARG is considered to be passed as an 6354 argument to '-OPT'. In the third form, the alias may not have an 6355 argument, if the alias is used in the positive form then POSARG is 6356 considered to be passed to '-OPT', and if the alias is used in the 6357 negative form then NEGARG is considered to be passed to '-OPT'. 6358 6359 Aliases should not specify 'Var' or 'Mask' or 'UInteger'. Aliases 6360 should normally specify the same languages as the target of the 6361 alias; the flags on the target will be used to determine any 6362 diagnostic for use of an option for the wrong language, while those 6363 on the alias will be used to identify what command-line text is the 6364 option and what text is any argument to that option. 6365 6366 When an 'Alias' definition is used for an option, driver specs do 6367 not need to handle it and no 'OPT_' enumeration value is defined 6368 for it; only the canonical form of the option will be seen in those 6369 places. 6370 6371'NegativeAlias' 6372 For an option marked with 'Alias(OPT)', the option is considered to 6373 be an alias for the positive form of '-OPT' if negated and for the 6374 negative form of '-OPT' if not negated. 'NegativeAlias' may not be 6375 used with the forms of 'Alias' taking more than one argument. 6376 6377'Ignore' 6378 This option is ignored apart from printing any warning specified 6379 using 'Warn'. The option will not be seen by specs and no 'OPT_' 6380 enumeration value is defined for it. 6381 6382'SeparateAlias' 6383 For an option marked with 'Joined', 'Separate' and 'Alias', the 6384 option only acts as an alias when passed a separate argument; with 6385 a joined argument it acts as a normal option, with an 'OPT_' 6386 enumeration value. This is for compatibility with the Java '-d' 6387 option and should not be used for new options. 6388 6389'Warn(MESSAGE)' 6390 If this option is used, output the warning MESSAGE. MESSAGE is a 6391 format string, either taking a single operand with a '%qs' format 6392 which is the option name, or not taking any operands, which is 6393 passed to the 'warning' function. If an alias is marked 'Warn', 6394 the target of the alias must not also be marked 'Warn'. 6395 6396'Report' 6397 The state of the option should be printed by '-fverbose-asm'. 6398 6399'Warning' 6400 This is a warning option and should be shown as such in '--help' 6401 output. This flag does not currently affect anything other than 6402 '--help'. 6403 6404'Optimization' 6405 This is an optimization option. It should be shown as such in 6406 '--help' output, and any associated variable named using 'Var' 6407 should be saved and restored when the optimization level is changed 6408 with 'optimize' attributes. 6409 6410'Undocumented' 6411 The option is deliberately missing documentation and should not be 6412 included in the '--help' output. 6413 6414'Condition(COND)' 6415 The option should only be accepted if preprocessor condition COND 6416 is true. Note that any C declarations associated with the option 6417 will be present even if COND is false; COND simply controls whether 6418 the option is accepted and whether it is printed in the '--help' 6419 output. 6420 6421'Save' 6422 Build the 'cl_target_option' structure to hold a copy of the 6423 option, add the functions 'cl_target_option_save' and 6424 'cl_target_option_restore' to save and restore the options. 6425 6426'SetByCombined' 6427 The option may also be set by a combined option such as 6428 '-ffast-math'. This causes the 'gcc_options' struct to have a 6429 field 'frontend_set_NAME', where 'NAME' is the name of the field 6430 holding the value of this option (without the leading 'x_'). This 6431 gives the front end a way to indicate that the value has been set 6432 explicitly and should not be changed by the combined option. For 6433 example, some front ends use this to prevent '-ffast-math' and 6434 '-fno-fast-math' from changing the value of '-fmath-errno' for 6435 languages that do not use 'errno'. 6436 6437'EnabledBy(OPT)' 6438'EnabledBy(OPT || OPT2)' 6439'EnabledBy(OPT && OPT2)' 6440 If not explicitly set, the option is set to the value of '-OPT'; 6441 multiple options can be given, separated by '||'. The third form 6442 using '&&' specifies that the option is only set if both OPT and 6443 OPT2 are set. The options OPT and OPT2 must have the 'Common' 6444 property; otherwise, use 'LangEnabledBy'. 6445 6446'LangEnabledBy(LANGUAGE, OPT)' 6447'LangEnabledBy(LANGUAGE, OPT, POSARG, NEGARG)' 6448 When compiling for the given language, the option is set to the 6449 value of '-OPT', if not explicitly set. OPT can be also a list of 6450 '||' separated options. In the second form, if OPT is used in the 6451 positive form then POSARG is considered to be passed to the option, 6452 and if OPT is used in the negative form then NEGARG is considered 6453 to be passed to the option. It is possible to specify several 6454 different languages. Each LANGUAGE must have been declared by an 6455 earlier 'Language' record. *Note Option file format::. 6456 6457'NoDWARFRecord' 6458 The option is omitted from the producer string written by 6459 '-grecord-gcc-switches'. 6460 6461'PchIgnore' 6462 Even if this is a target option, this option will not be recorded / 6463 compared to determine if a precompiled header file matches. 6464 6465'CPP(VAR)' 6466 The state of this option should be kept in sync with the 6467 preprocessor option VAR. If this property is set, then properties 6468 'Var' and 'Init' must be set as well. 6469 6470'CppReason(CPP_W_ENUM)' 6471 This warning option corresponds to 'cpplib.h' warning reason code 6472 CPP_W_ENUM. This should only be used for warning options of the 6473 C-family front-ends. 6474 6475 6476File: gccint.info, Node: Passes, Next: GENERIC, Prev: Options, Up: Top 6477 64789 Passes and Files of the Compiler 6479********************************** 6480 6481This chapter is dedicated to giving an overview of the optimization and 6482code generation passes of the compiler. In the process, it describes 6483some of the language front end interface, though this description is no 6484where near complete. 6485 6486* Menu: 6487 6488* Parsing pass:: The language front end turns text into bits. 6489* Cilk Plus Transformation:: Transform Cilk Plus Code to equivalent C/C++. 6490* Gimplification pass:: The bits are turned into something we can optimize. 6491* Pass manager:: Sequencing the optimization passes. 6492* Tree SSA passes:: Optimizations on a high-level representation. 6493* RTL passes:: Optimizations on a low-level representation. 6494* Optimization info:: Dumping optimization information from passes. 6495 6496 6497File: gccint.info, Node: Parsing pass, Next: Cilk Plus Transformation, Up: Passes 6498 64999.1 Parsing pass 6500================ 6501 6502The language front end is invoked only once, via 6503'lang_hooks.parse_file', to parse the entire input. The language front 6504end may use any intermediate language representation deemed appropriate. 6505The C front end uses GENERIC trees (*note GENERIC::), plus a double 6506handful of language specific tree codes defined in 'c-common.def'. The 6507Fortran front end uses a completely different private representation. 6508 6509 At some point the front end must translate the representation used in 6510the front end to a representation understood by the language-independent 6511portions of the compiler. Current practice takes one of two forms. The 6512C front end manually invokes the gimplifier (*note GIMPLE::) on each 6513function, and uses the gimplifier callbacks to convert the 6514language-specific tree nodes directly to GIMPLE before passing the 6515function off to be compiled. The Fortran front end converts from a 6516private representation to GENERIC, which is later lowered to GIMPLE when 6517the function is compiled. Which route to choose probably depends on how 6518well GENERIC (plus extensions) can be made to match up with the source 6519language and necessary parsing data structures. 6520 6521 BUG: Gimplification must occur before nested function lowering, and 6522nested function lowering must be done by the front end before passing 6523the data off to cgraph. 6524 6525 TODO: Cgraph should control nested function lowering. It would only be 6526invoked when it is certain that the outer-most function is used. 6527 6528 TODO: Cgraph needs a gimplify_function callback. It should be invoked 6529when (1) it is certain that the function is used, (2) warning flags 6530specified by the user require some amount of compilation in order to 6531honor, (3) the language indicates that semantic analysis is not complete 6532until gimplification occurs. Hum... this sounds overly complicated. 6533Perhaps we should just have the front end gimplify always; in most cases 6534it's only one function call. 6535 6536 The front end needs to pass all function definitions and top level 6537declarations off to the middle-end so that they can be compiled and 6538emitted to the object file. For a simple procedural language, it is 6539usually most convenient to do this as each top level declaration or 6540definition is seen. There is also a distinction to be made between 6541generating functional code and generating complete debug information. 6542The only thing that is absolutely required for functional code is that 6543function and data _definitions_ be passed to the middle-end. For 6544complete debug information, function, data and type declarations should 6545all be passed as well. 6546 6547 In any case, the front end needs each complete top-level function or 6548data declaration, and each data definition should be passed to 6549'rest_of_decl_compilation'. Each complete type definition should be 6550passed to 'rest_of_type_compilation'. Each function definition should 6551be passed to 'cgraph_finalize_function'. 6552 6553 TODO: I know rest_of_compilation currently has all sorts of RTL 6554generation semantics. I plan to move all code generation bits (both 6555Tree and RTL) to compile_function. Should we hide cgraph from the front 6556ends and move back to rest_of_compilation as the official interface? 6557Possibly we should rename all three interfaces such that the names match 6558in some meaningful way and that is more descriptive than "rest_of". 6559 6560 The middle-end will, at its option, emit the function and data 6561definitions immediately or queue them for later processing. 6562 6563 6564File: gccint.info, Node: Cilk Plus Transformation, Next: Gimplification pass, Prev: Parsing pass, Up: Passes 6565 65669.2 Cilk Plus Transformation 6567============================ 6568 6569If Cilk Plus generation (flag '-fcilkplus') is enabled, all the Cilk 6570Plus code is transformed into equivalent C and C++ functions. Majority 6571of this transformation occurs toward the end of the parsing and right 6572before the gimplification pass. 6573 6574 These are the major components to the Cilk Plus language extension: 6575 * Array Notations: During parsing phase, all the array notation 6576 specific information is stored in 'ARRAY_NOTATION_REF' tree using 6577 the function 'c_parser_array_notation'. During the end of parsing, 6578 we check the entire function to see if there are any array notation 6579 specific code (using the function 'contains_array_notation_expr'). 6580 If this function returns true, then we expand them using either 6581 'expand_array_notation_exprs' or 'build_array_notation_expr'. For 6582 the cases where array notations are inside conditions, they are 6583 transformed using the function 'fix_conditional_array_notations'. 6584 The C language-specific routines are located in 6585 'c/c-array-notation.c' and the equivalent C++ routines are in the 6586 file 'cp/cp-array-notation.c'. Common routines such as functions 6587 to initialize built-in functions are stored in 6588 'array-notation-common.c'. 6589 6590 * Cilk keywords: 6591 * '_Cilk_spawn': The '_Cilk_spawn' keyword is parsed and the 6592 function it contains is marked as a spawning function. The 6593 spawning function is called the spawner. At the end of the 6594 parsing phase, appropriate built-in functions are added to the 6595 spawner that are defined in the Cilk runtime. The appropriate 6596 locations of these functions, and the internal structures are 6597 detailed in 'cilk_init_builtins' in the file 'cilk-common.c'. 6598 The pointers to Cilk functions and fields of internal 6599 structures are described in 'cilk.h'. The built-in functions 6600 are described in 'cilk-builtins.def'. 6601 6602 During gimplification, a new "spawn-helper" function is 6603 created. The spawned function is replaced with a spawn helper 6604 function in the spawner. The spawned function-call is moved 6605 into the spawn helper. The main function that does these 6606 transformations is 'gimplify_cilk_spawn' in 'c-family/cilk.c'. 6607 In the spawn-helper, the gimplification function 6608 'gimplify_call_expr', inserts a function call 6609 '__cilkrts_detach'. This function is expanded by 6610 'builtin_expand_cilk_detach' located in 'c-family/cilk.c'. 6611 6612 * '_Cilk_sync': '_Cilk_sync' is parsed like a keyword. During 6613 gimplification, the function 'gimplify_cilk_sync' in 6614 'c-family/cilk.c', will replace this keyword with a set of 6615 functions that are stored in the Cilk runtime. One of the 6616 internal functions inserted during gimplification, 6617 '__cilkrts_pop_frame' must be expanded by the compiler and is 6618 done by 'builtin_expand_cilk_pop_frame' in 'cilk-common.c'. 6619 6620 Documentation about Cilk Plus and language specification is provided 6621under the "Learn" section in <https://www.cilkplus.org>. It is worth 6622mentioning that the current implementation follows ABI 1.1. 6623 6624 6625File: gccint.info, Node: Gimplification pass, Next: Pass manager, Prev: Cilk Plus Transformation, Up: Passes 6626 66279.3 Gimplification pass 6628======================= 6629 6630"Gimplification" is a whimsical term for the process of converting the 6631intermediate representation of a function into the GIMPLE language 6632(*note GIMPLE::). The term stuck, and so words like "gimplification", 6633"gimplify", "gimplifier" and the like are sprinkled throughout this 6634section of code. 6635 6636 While a front end may certainly choose to generate GIMPLE directly if 6637it chooses, this can be a moderately complex process unless the 6638intermediate language used by the front end is already fairly simple. 6639Usually it is easier to generate GENERIC trees plus extensions and let 6640the language-independent gimplifier do most of the work. 6641 6642 The main entry point to this pass is 'gimplify_function_tree' located 6643in 'gimplify.c'. From here we process the entire function gimplifying 6644each statement in turn. The main workhorse for this pass is 6645'gimplify_expr'. Approximately everything passes through here at least 6646once, and it is from here that we invoke the 'lang_hooks.gimplify_expr' 6647callback. 6648 6649 The callback should examine the expression in question and return 6650'GS_UNHANDLED' if the expression is not a language specific construct 6651that requires attention. Otherwise it should alter the expression in 6652some way to such that forward progress is made toward producing valid 6653GIMPLE. If the callback is certain that the transformation is complete 6654and the expression is valid GIMPLE, it should return 'GS_ALL_DONE'. 6655Otherwise it should return 'GS_OK', which will cause the expression to 6656be processed again. If the callback encounters an error during the 6657transformation (because the front end is relying on the gimplification 6658process to finish semantic checks), it should return 'GS_ERROR'. 6659 6660 6661File: gccint.info, Node: Pass manager, Next: Tree SSA passes, Prev: Gimplification pass, Up: Passes 6662 66639.4 Pass manager 6664================ 6665 6666The pass manager is located in 'passes.c', 'tree-optimize.c' and 6667'tree-pass.h'. It processes passes as described in 'passes.def'. Its 6668job is to run all of the individual passes in the correct order, and 6669take care of standard bookkeeping that applies to every pass. 6670 6671 The theory of operation is that each pass defines a structure that 6672represents everything we need to know about that pass--when it should be 6673run, how it should be run, what intermediate language form or 6674on-the-side data structures it needs. We register the pass to be run in 6675some particular order, and the pass manager arranges for everything to 6676happen in the correct order. 6677 6678 The actuality doesn't completely live up to the theory at present. 6679Command-line switches and 'timevar_id_t' enumerations must still be 6680defined elsewhere. The pass manager validates constraints but does not 6681attempt to (re-)generate data structures or lower intermediate language 6682form based on the requirements of the next pass. Nevertheless, what is 6683present is useful, and a far sight better than nothing at all. 6684 6685 Each pass should have a unique name. Each pass may have its own dump 6686file (for GCC debugging purposes). Passes with a name starting with a 6687star do not dump anything. Sometimes passes are supposed to share a 6688dump file / option name. To still give these unique names, you can use 6689a prefix that is delimited by a space from the part that is used for the 6690dump file / option name. E.g. When the pass name is "ud dce", the name 6691used for dump file/options is "dce". 6692 6693 TODO: describe the global variables set up by the pass manager, and a 6694brief description of how a new pass should use it. I need to look at 6695what info RTL passes use first... 6696 6697 6698File: gccint.info, Node: Tree SSA passes, Next: RTL passes, Prev: Pass manager, Up: Passes 6699 67009.5 Tree SSA passes 6701=================== 6702 6703The following briefly describes the Tree optimization passes that are 6704run after gimplification and what source files they are located in. 6705 6706 * Remove useless statements 6707 6708 This pass is an extremely simple sweep across the gimple code in 6709 which we identify obviously dead code and remove it. Here we do 6710 things like simplify 'if' statements with constant conditions, 6711 remove exception handling constructs surrounding code that 6712 obviously cannot throw, remove lexical bindings that contain no 6713 variables, and other assorted simplistic cleanups. The idea is to 6714 get rid of the obvious stuff quickly rather than wait until later 6715 when it's more work to get rid of it. This pass is located in 6716 'tree-cfg.c' and described by 'pass_remove_useless_stmts'. 6717 6718 * OpenMP lowering 6719 6720 If OpenMP generation ('-fopenmp') is enabled, this pass lowers 6721 OpenMP constructs into GIMPLE. 6722 6723 Lowering of OpenMP constructs involves creating replacement 6724 expressions for local variables that have been mapped using data 6725 sharing clauses, exposing the control flow of most synchronization 6726 directives and adding region markers to facilitate the creation of 6727 the control flow graph. The pass is located in 'omp-low.c' and is 6728 described by 'pass_lower_omp'. 6729 6730 * OpenMP expansion 6731 6732 If OpenMP generation ('-fopenmp') is enabled, this pass expands 6733 parallel regions into their own functions to be invoked by the 6734 thread library. The pass is located in 'omp-low.c' and is 6735 described by 'pass_expand_omp'. 6736 6737 * Lower control flow 6738 6739 This pass flattens 'if' statements ('COND_EXPR') and moves lexical 6740 bindings ('BIND_EXPR') out of line. After this pass, all 'if' 6741 statements will have exactly two 'goto' statements in its 'then' 6742 and 'else' arms. Lexical binding information for each statement 6743 will be found in 'TREE_BLOCK' rather than being inferred from its 6744 position under a 'BIND_EXPR'. This pass is found in 'gimple-low.c' 6745 and is described by 'pass_lower_cf'. 6746 6747 * Lower exception handling control flow 6748 6749 This pass decomposes high-level exception handling constructs 6750 ('TRY_FINALLY_EXPR' and 'TRY_CATCH_EXPR') into a form that 6751 explicitly represents the control flow involved. After this pass, 6752 'lookup_stmt_eh_region' will return a non-negative number for any 6753 statement that may have EH control flow semantics; examine 6754 'tree_can_throw_internal' or 'tree_can_throw_external' for exact 6755 semantics. Exact control flow may be extracted from 6756 'foreach_reachable_handler'. The EH region nesting tree is defined 6757 in 'except.h' and built in 'except.c'. The lowering pass itself is 6758 in 'tree-eh.c' and is described by 'pass_lower_eh'. 6759 6760 * Build the control flow graph 6761 6762 This pass decomposes a function into basic blocks and creates all 6763 of the edges that connect them. It is located in 'tree-cfg.c' and 6764 is described by 'pass_build_cfg'. 6765 6766 * Find all referenced variables 6767 6768 This pass walks the entire function and collects an array of all 6769 variables referenced in the function, 'referenced_vars'. The index 6770 at which a variable is found in the array is used as a UID for the 6771 variable within this function. This data is needed by the SSA 6772 rewriting routines. The pass is located in 'tree-dfa.c' and is 6773 described by 'pass_referenced_vars'. 6774 6775 * Enter static single assignment form 6776 6777 This pass rewrites the function such that it is in SSA form. After 6778 this pass, all 'is_gimple_reg' variables will be referenced by 6779 'SSA_NAME', and all occurrences of other variables will be 6780 annotated with 'VDEFS' and 'VUSES'; PHI nodes will have been 6781 inserted as necessary for each basic block. This pass is located 6782 in 'tree-ssa.c' and is described by 'pass_build_ssa'. 6783 6784 * Warn for uninitialized variables 6785 6786 This pass scans the function for uses of 'SSA_NAME's that are fed 6787 by default definition. For non-parameter variables, such uses are 6788 uninitialized. The pass is run twice, before and after 6789 optimization (if turned on). In the first pass we only warn for 6790 uses that are positively uninitialized; in the second pass we warn 6791 for uses that are possibly uninitialized. The pass is located in 6792 'tree-ssa.c' and is defined by 'pass_early_warn_uninitialized' and 6793 'pass_late_warn_uninitialized'. 6794 6795 * Dead code elimination 6796 6797 This pass scans the function for statements without side effects 6798 whose result is unused. It does not do memory life analysis, so 6799 any value that is stored in memory is considered used. The pass is 6800 run multiple times throughout the optimization process. It is 6801 located in 'tree-ssa-dce.c' and is described by 'pass_dce'. 6802 6803 * Dominator optimizations 6804 6805 This pass performs trivial dominator-based copy and constant 6806 propagation, expression simplification, and jump threading. It is 6807 run multiple times throughout the optimization process. It is 6808 located in 'tree-ssa-dom.c' and is described by 'pass_dominator'. 6809 6810 * Forward propagation of single-use variables 6811 6812 This pass attempts to remove redundant computation by substituting 6813 variables that are used once into the expression that uses them and 6814 seeing if the result can be simplified. It is located in 6815 'tree-ssa-forwprop.c' and is described by 'pass_forwprop'. 6816 6817 * Copy Renaming 6818 6819 This pass attempts to change the name of compiler temporaries 6820 involved in copy operations such that SSA->normal can coalesce the 6821 copy away. When compiler temporaries are copies of user variables, 6822 it also renames the compiler temporary to the user variable 6823 resulting in better use of user symbols. It is located in 6824 'tree-ssa-copyrename.c' and is described by 'pass_copyrename'. 6825 6826 * PHI node optimizations 6827 6828 This pass recognizes forms of PHI inputs that can be represented as 6829 conditional expressions and rewrites them into straight line code. 6830 It is located in 'tree-ssa-phiopt.c' and is described by 6831 'pass_phiopt'. 6832 6833 * May-alias optimization 6834 6835 This pass performs a flow sensitive SSA-based points-to analysis. 6836 The resulting may-alias, must-alias, and escape analysis 6837 information is used to promote variables from in-memory addressable 6838 objects to non-aliased variables that can be renamed into SSA form. 6839 We also update the 'VDEF'/'VUSE' memory tags for non-renameable 6840 aggregates so that we get fewer false kills. The pass is located 6841 in 'tree-ssa-alias.c' and is described by 'pass_may_alias'. 6842 6843 Interprocedural points-to information is located in 6844 'tree-ssa-structalias.c' and described by 'pass_ipa_pta'. 6845 6846 * Profiling 6847 6848 This pass instruments the function in order to collect runtime 6849 block and value profiling data. Such data may be fed back into the 6850 compiler on a subsequent run so as to allow optimization based on 6851 expected execution frequencies. The pass is located in 6852 'tree-profile.c' and is described by 'pass_ipa_tree_profile'. 6853 6854 * Static profile estimation 6855 6856 This pass implements series of heuristics to guess propababilities 6857 of branches. The resulting predictions are turned into edge 6858 profile by propagating branches across the control flow graphs. 6859 The pass is located in 'tree-profile.c' and is described by 6860 'pass_profile'. 6861 6862 * Lower complex arithmetic 6863 6864 This pass rewrites complex arithmetic operations into their 6865 component scalar arithmetic operations. The pass is located in 6866 'tree-complex.c' and is described by 'pass_lower_complex'. 6867 6868 * Scalar replacement of aggregates 6869 6870 This pass rewrites suitable non-aliased local aggregate variables 6871 into a set of scalar variables. The resulting scalar variables are 6872 rewritten into SSA form, which allows subsequent optimization 6873 passes to do a significantly better job with them. The pass is 6874 located in 'tree-sra.c' and is described by 'pass_sra'. 6875 6876 * Dead store elimination 6877 6878 This pass eliminates stores to memory that are subsequently 6879 overwritten by another store, without any intervening loads. The 6880 pass is located in 'tree-ssa-dse.c' and is described by 'pass_dse'. 6881 6882 * Tail recursion elimination 6883 6884 This pass transforms tail recursion into a loop. It is located in 6885 'tree-tailcall.c' and is described by 'pass_tail_recursion'. 6886 6887 * Forward store motion 6888 6889 This pass sinks stores and assignments down the flowgraph closer to 6890 their use point. The pass is located in 'tree-ssa-sink.c' and is 6891 described by 'pass_sink_code'. 6892 6893 * Partial redundancy elimination 6894 6895 This pass eliminates partially redundant computations, as well as 6896 performing load motion. The pass is located in 'tree-ssa-pre.c' 6897 and is described by 'pass_pre'. 6898 6899 Just before partial redundancy elimination, if 6900 '-funsafe-math-optimizations' is on, GCC tries to convert divisions 6901 to multiplications by the reciprocal. The pass is located in 6902 'tree-ssa-math-opts.c' and is described by 'pass_cse_reciprocal'. 6903 6904 * Full redundancy elimination 6905 6906 This is a simpler form of PRE that only eliminates redundancies 6907 that occur on all paths. It is located in 'tree-ssa-pre.c' and 6908 described by 'pass_fre'. 6909 6910 * Loop optimization 6911 6912 The main driver of the pass is placed in 'tree-ssa-loop.c' and 6913 described by 'pass_loop'. 6914 6915 The optimizations performed by this pass are: 6916 6917 Loop invariant motion. This pass moves only invariants that would 6918 be hard to handle on RTL level (function calls, operations that 6919 expand to nontrivial sequences of insns). With '-funswitch-loops' 6920 it also moves operands of conditions that are invariant out of the 6921 loop, so that we can use just trivial invariantness analysis in 6922 loop unswitching. The pass also includes store motion. The pass 6923 is implemented in 'tree-ssa-loop-im.c'. 6924 6925 Canonical induction variable creation. This pass creates a simple 6926 counter for number of iterations of the loop and replaces the exit 6927 condition of the loop using it, in case when a complicated analysis 6928 is necessary to determine the number of iterations. Later 6929 optimizations then may determine the number easily. The pass is 6930 implemented in 'tree-ssa-loop-ivcanon.c'. 6931 6932 Induction variable optimizations. This pass performs standard 6933 induction variable optimizations, including strength reduction, 6934 induction variable merging and induction variable elimination. The 6935 pass is implemented in 'tree-ssa-loop-ivopts.c'. 6936 6937 Loop unswitching. This pass moves the conditional jumps that are 6938 invariant out of the loops. To achieve this, a duplicate of the 6939 loop is created for each possible outcome of conditional jump(s). 6940 The pass is implemented in 'tree-ssa-loop-unswitch.c'. 6941 6942 The optimizations also use various utility functions contained in 6943 'tree-ssa-loop-manip.c', 'cfgloop.c', 'cfgloopanal.c' and 6944 'cfgloopmanip.c'. 6945 6946 Vectorization. This pass transforms loops to operate on vector 6947 types instead of scalar types. Data parallelism across loop 6948 iterations is exploited to group data elements from consecutive 6949 iterations into a vector and operate on them in parallel. 6950 Depending on available target support the loop is conceptually 6951 unrolled by a factor 'VF' (vectorization factor), which is the 6952 number of elements operated upon in parallel in each iteration, and 6953 the 'VF' copies of each scalar operation are fused to form a vector 6954 operation. Additional loop transformations such as peeling and 6955 versioning may take place to align the number of iterations, and to 6956 align the memory accesses in the loop. The pass is implemented in 6957 'tree-vectorizer.c' (the main driver), 'tree-vect-loop.c' and 6958 'tree-vect-loop-manip.c' (loop specific parts and general loop 6959 utilities), 'tree-vect-slp' (loop-aware SLP functionality), 6960 'tree-vect-stmts.c' and 'tree-vect-data-refs.c'. Analysis of data 6961 references is in 'tree-data-ref.c'. 6962 6963 SLP Vectorization. This pass performs vectorization of 6964 straight-line code. The pass is implemented in 'tree-vectorizer.c' 6965 (the main driver), 'tree-vect-slp.c', 'tree-vect-stmts.c' and 6966 'tree-vect-data-refs.c'. 6967 6968 Autoparallelization. This pass splits the loop iteration space to 6969 run into several threads. The pass is implemented in 6970 'tree-parloops.c'. 6971 6972 Graphite is a loop transformation framework based on the polyhedral 6973 model. Graphite stands for Gimple Represented as Polyhedra. The 6974 internals of this infrastructure are documented in 6975 <http://gcc.gnu.org/wiki/Graphite>. The passes working on this 6976 representation are implemented in the various 'graphite-*' files. 6977 6978 * Tree level if-conversion for vectorizer 6979 6980 This pass applies if-conversion to simple loops to help vectorizer. 6981 We identify if convertible loops, if-convert statements and merge 6982 basic blocks in one big block. The idea is to present loop in such 6983 form so that vectorizer can have one to one mapping between 6984 statements and available vector operations. This pass is located 6985 in 'tree-if-conv.c' and is described by 'pass_if_conversion'. 6986 6987 * Conditional constant propagation 6988 6989 This pass relaxes a lattice of values in order to identify those 6990 that must be constant even in the presence of conditional branches. 6991 The pass is located in 'tree-ssa-ccp.c' and is described by 6992 'pass_ccp'. 6993 6994 A related pass that works on memory loads and stores, and not just 6995 register values, is located in 'tree-ssa-ccp.c' and described by 6996 'pass_store_ccp'. 6997 6998 * Conditional copy propagation 6999 7000 This is similar to constant propagation but the lattice of values 7001 is the "copy-of" relation. It eliminates redundant copies from the 7002 code. The pass is located in 'tree-ssa-copy.c' and described by 7003 'pass_copy_prop'. 7004 7005 A related pass that works on memory copies, and not just register 7006 copies, is located in 'tree-ssa-copy.c' and described by 7007 'pass_store_copy_prop'. 7008 7009 * Value range propagation 7010 7011 This transformation is similar to constant propagation but instead 7012 of propagating single constant values, it propagates known value 7013 ranges. The implementation is based on Patterson's range 7014 propagation algorithm (Accurate Static Branch Prediction by Value 7015 Range Propagation, J. R. C. Patterson, PLDI '95). In contrast to 7016 Patterson's algorithm, this implementation does not propagate 7017 branch probabilities nor it uses more than a single range per SSA 7018 name. This means that the current implementation cannot be used 7019 for branch prediction (though adapting it would not be difficult). 7020 The pass is located in 'tree-vrp.c' and is described by 'pass_vrp'. 7021 7022 * Folding built-in functions 7023 7024 This pass simplifies built-in functions, as applicable, with 7025 constant arguments or with inferable string lengths. It is located 7026 in 'tree-ssa-ccp.c' and is described by 'pass_fold_builtins'. 7027 7028 * Split critical edges 7029 7030 This pass identifies critical edges and inserts empty basic blocks 7031 such that the edge is no longer critical. The pass is located in 7032 'tree-cfg.c' and is described by 'pass_split_crit_edges'. 7033 7034 * Control dependence dead code elimination 7035 7036 This pass is a stronger form of dead code elimination that can 7037 eliminate unnecessary control flow statements. It is located in 7038 'tree-ssa-dce.c' and is described by 'pass_cd_dce'. 7039 7040 * Tail call elimination 7041 7042 This pass identifies function calls that may be rewritten into 7043 jumps. No code transformation is actually applied here, but the 7044 data and control flow problem is solved. The code transformation 7045 requires target support, and so is delayed until RTL. In the 7046 meantime 'CALL_EXPR_TAILCALL' is set indicating the possibility. 7047 The pass is located in 'tree-tailcall.c' and is described by 7048 'pass_tail_calls'. The RTL transformation is handled by 7049 'fixup_tail_calls' in 'calls.c'. 7050 7051 * Warn for function return without value 7052 7053 For non-void functions, this pass locates return statements that do 7054 not specify a value and issues a warning. Such a statement may 7055 have been injected by falling off the end of the function. This 7056 pass is run last so that we have as much time as possible to prove 7057 that the statement is not reachable. It is located in 'tree-cfg.c' 7058 and is described by 'pass_warn_function_return'. 7059 7060 * Leave static single assignment form 7061 7062 This pass rewrites the function such that it is in normal form. At 7063 the same time, we eliminate as many single-use temporaries as 7064 possible, so the intermediate language is no longer GIMPLE, but 7065 GENERIC. The pass is located in 'tree-outof-ssa.c' and is 7066 described by 'pass_del_ssa'. 7067 7068 * Merge PHI nodes that feed into one another 7069 7070 This is part of the CFG cleanup passes. It attempts to join PHI 7071 nodes from a forwarder CFG block into another block with PHI nodes. 7072 The pass is located in 'tree-cfgcleanup.c' and is described by 7073 'pass_merge_phi'. 7074 7075 * Return value optimization 7076 7077 If a function always returns the same local variable, and that 7078 local variable is an aggregate type, then the variable is replaced 7079 with the return value for the function (i.e., the function's 7080 DECL_RESULT). This is equivalent to the C++ named return value 7081 optimization applied to GIMPLE. The pass is located in 7082 'tree-nrv.c' and is described by 'pass_nrv'. 7083 7084 * Return slot optimization 7085 7086 If a function returns a memory object and is called as 'var = 7087 foo()', this pass tries to change the call so that the address of 7088 'var' is sent to the caller to avoid an extra memory copy. This 7089 pass is located in 'tree-nrv.c' and is described by 7090 'pass_return_slot'. 7091 7092 * Optimize calls to '__builtin_object_size' 7093 7094 This is a propagation pass similar to CCP that tries to remove 7095 calls to '__builtin_object_size' when the size of the object can be 7096 computed at compile-time. This pass is located in 7097 'tree-object-size.c' and is described by 'pass_object_sizes'. 7098 7099 * Loop invariant motion 7100 7101 This pass removes expensive loop-invariant computations out of 7102 loops. The pass is located in 'tree-ssa-loop.c' and described by 7103 'pass_lim'. 7104 7105 * Loop nest optimizations 7106 7107 This is a family of loop transformations that works on loop nests. 7108 It includes loop interchange, scaling, skewing and reversal and 7109 they are all geared to the optimization of data locality in array 7110 traversals and the removal of dependencies that hamper 7111 optimizations such as loop parallelization and vectorization. The 7112 pass is located in 'tree-loop-linear.c' and described by 7113 'pass_linear_transform'. 7114 7115 * Removal of empty loops 7116 7117 This pass removes loops with no code in them. The pass is located 7118 in 'tree-ssa-loop-ivcanon.c' and described by 'pass_empty_loop'. 7119 7120 * Unrolling of small loops 7121 7122 This pass completely unrolls loops with few iterations. The pass 7123 is located in 'tree-ssa-loop-ivcanon.c' and described by 7124 'pass_complete_unroll'. 7125 7126 * Predictive commoning 7127 7128 This pass makes the code reuse the computations from the previous 7129 iterations of the loops, especially loads and stores to memory. It 7130 does so by storing the values of these computations to a bank of 7131 temporary variables that are rotated at the end of loop. To avoid 7132 the need for this rotation, the loop is then unrolled and the 7133 copies of the loop body are rewritten to use the appropriate 7134 version of the temporary variable. This pass is located in 7135 'tree-predcom.c' and described by 'pass_predcom'. 7136 7137 * Array prefetching 7138 7139 This pass issues prefetch instructions for array references inside 7140 loops. The pass is located in 'tree-ssa-loop-prefetch.c' and 7141 described by 'pass_loop_prefetch'. 7142 7143 * Reassociation 7144 7145 This pass rewrites arithmetic expressions to enable optimizations 7146 that operate on them, like redundancy elimination and 7147 vectorization. The pass is located in 'tree-ssa-reassoc.c' and 7148 described by 'pass_reassoc'. 7149 7150 * Optimization of 'stdarg' functions 7151 7152 This pass tries to avoid the saving of register arguments into the 7153 stack on entry to 'stdarg' functions. If the function doesn't use 7154 any 'va_start' macros, no registers need to be saved. If 7155 'va_start' macros are used, the 'va_list' variables don't escape 7156 the function, it is only necessary to save registers that will be 7157 used in 'va_arg' macros. For instance, if 'va_arg' is only used 7158 with integral types in the function, floating point registers don't 7159 need to be saved. This pass is located in 'tree-stdarg.c' and 7160 described by 'pass_stdarg'. 7161 7162 7163File: gccint.info, Node: RTL passes, Next: Optimization info, Prev: Tree SSA passes, Up: Passes 7164 71659.6 RTL passes 7166============== 7167 7168The following briefly describes the RTL generation and optimization 7169passes that are run after the Tree optimization passes. 7170 7171 * RTL generation 7172 7173 The source files for RTL generation include 'stmt.c', 'calls.c', 7174 'expr.c', 'explow.c', 'expmed.c', 'function.c', 'optabs.c' and 7175 'emit-rtl.c'. Also, the file 'insn-emit.c', generated from the 7176 machine description by the program 'genemit', is used in this pass. 7177 The header file 'expr.h' is used for communication within this 7178 pass. 7179 7180 The header files 'insn-flags.h' and 'insn-codes.h', generated from 7181 the machine description by the programs 'genflags' and 'gencodes', 7182 tell this pass which standard names are available for use and which 7183 patterns correspond to them. 7184 7185 * Generation of exception landing pads 7186 7187 This pass generates the glue that handles communication between the 7188 exception handling library routines and the exception handlers 7189 within the function. Entry points in the function that are invoked 7190 by the exception handling library are called "landing pads". The 7191 code for this pass is located in 'except.c'. 7192 7193 * Control flow graph cleanup 7194 7195 This pass removes unreachable code, simplifies jumps to next, jumps 7196 to jump, jumps across jumps, etc. The pass is run multiple times. 7197 For historical reasons, it is occasionally referred to as the "jump 7198 optimization pass". The bulk of the code for this pass is in 7199 'cfgcleanup.c', and there are support routines in 'cfgrtl.c' and 7200 'jump.c'. 7201 7202 * Forward propagation of single-def values 7203 7204 This pass attempts to remove redundant computation by substituting 7205 variables that come from a single definition, and seeing if the 7206 result can be simplified. It performs copy propagation and 7207 addressing mode selection. The pass is run twice, with values 7208 being propagated into loops only on the second run. The code is 7209 located in 'fwprop.c'. 7210 7211 * Common subexpression elimination 7212 7213 This pass removes redundant computation within basic blocks, and 7214 optimizes addressing modes based on cost. The pass is run twice. 7215 The code for this pass is located in 'cse.c'. 7216 7217 * Global common subexpression elimination 7218 7219 This pass performs two different types of GCSE depending on whether 7220 you are optimizing for size or not (LCM based GCSE tends to 7221 increase code size for a gain in speed, while Morel-Renvoise based 7222 GCSE does not). When optimizing for size, GCSE is done using 7223 Morel-Renvoise Partial Redundancy Elimination, with the exception 7224 that it does not try to move invariants out of loops--that is left 7225 to the loop optimization pass. If MR PRE GCSE is done, code 7226 hoisting (aka unification) is also done, as well as load motion. 7227 If you are optimizing for speed, LCM (lazy code motion) based GCSE 7228 is done. LCM is based on the work of Knoop, Ruthing, and Steffen. 7229 LCM based GCSE also does loop invariant code motion. We also 7230 perform load and store motion when optimizing for speed. 7231 Regardless of which type of GCSE is used, the GCSE pass also 7232 performs global constant and copy propagation. The source file for 7233 this pass is 'gcse.c', and the LCM routines are in 'lcm.c'. 7234 7235 * Loop optimization 7236 7237 This pass performs several loop related optimizations. The source 7238 files 'cfgloopanal.c' and 'cfgloopmanip.c' contain generic loop 7239 analysis and manipulation code. Initialization and finalization of 7240 loop structures is handled by 'loop-init.c'. A loop invariant 7241 motion pass is implemented in 'loop-invariant.c'. Basic block 7242 level optimizations--unrolling, and peeling loops-- are implemented 7243 in 'loop-unroll.c'. Replacing of the exit condition of loops by 7244 special machine-dependent instructions is handled by 7245 'loop-doloop.c'. 7246 7247 * Jump bypassing 7248 7249 This pass is an aggressive form of GCSE that transforms the control 7250 flow graph of a function by propagating constants into conditional 7251 branch instructions. The source file for this pass is 'gcse.c'. 7252 7253 * If conversion 7254 7255 This pass attempts to replace conditional branches and surrounding 7256 assignments with arithmetic, boolean value producing comparison 7257 instructions, and conditional move instructions. In the very last 7258 invocation after reload/LRA, it will generate predicated 7259 instructions when supported by the target. The code is located in 7260 'ifcvt.c'. 7261 7262 * Web construction 7263 7264 This pass splits independent uses of each pseudo-register. This 7265 can improve effect of the other transformation, such as CSE or 7266 register allocation. The code for this pass is located in 'web.c'. 7267 7268 * Instruction combination 7269 7270 This pass attempts to combine groups of two or three instructions 7271 that are related by data flow into single instructions. It 7272 combines the RTL expressions for the instructions by substitution, 7273 simplifies the result using algebra, and then attempts to match the 7274 result against the machine description. The code is located in 7275 'combine.c'. 7276 7277 * Mode switching optimization 7278 7279 This pass looks for instructions that require the processor to be 7280 in a specific "mode" and minimizes the number of mode changes 7281 required to satisfy all users. What these modes are, and what they 7282 apply to are completely target-specific. The code for this pass is 7283 located in 'mode-switching.c'. 7284 7285 * Modulo scheduling 7286 7287 This pass looks at innermost loops and reorders their instructions 7288 by overlapping different iterations. Modulo scheduling is 7289 performed immediately before instruction scheduling. The code for 7290 this pass is located in 'modulo-sched.c'. 7291 7292 * Instruction scheduling 7293 7294 This pass looks for instructions whose output will not be available 7295 by the time that it is used in subsequent instructions. Memory 7296 loads and floating point instructions often have this behavior on 7297 RISC machines. It re-orders instructions within a basic block to 7298 try to separate the definition and use of items that otherwise 7299 would cause pipeline stalls. This pass is performed twice, before 7300 and after register allocation. The code for this pass is located 7301 in 'haifa-sched.c', 'sched-deps.c', 'sched-ebb.c', 'sched-rgn.c' 7302 and 'sched-vis.c'. 7303 7304 * Register allocation 7305 7306 These passes make sure that all occurrences of pseudo registers are 7307 eliminated, either by allocating them to a hard register, replacing 7308 them by an equivalent expression (e.g. a constant) or by placing 7309 them on the stack. This is done in several subpasses: 7310 7311 * The integrated register allocator (IRA). It is called 7312 integrated because coalescing, register live range splitting, 7313 and hard register preferencing are done on-the-fly during 7314 coloring. It also has better integration with the reload/LRA 7315 pass. Pseudo-registers spilled by the allocator or the 7316 reload/LRA have still a chance to get hard-registers if the 7317 reload/LRA evicts some pseudo-registers from hard-registers. 7318 The allocator helps to choose better pseudos for spilling 7319 based on their live ranges and to coalesce stack slots 7320 allocated for the spilled pseudo-registers. IRA is a regional 7321 register allocator which is transformed into Chaitin-Briggs 7322 allocator if there is one region. By default, IRA chooses 7323 regions using register pressure but the user can force it to 7324 use one region or regions corresponding to all loops. 7325 7326 Source files of the allocator are 'ira.c', 'ira-build.c', 7327 'ira-costs.c', 'ira-conflicts.c', 'ira-color.c', 'ira-emit.c', 7328 'ira-lives', plus header files 'ira.h' and 'ira-int.h' used 7329 for the communication between the allocator and the rest of 7330 the compiler and between the IRA files. 7331 7332 * Reloading. This pass renumbers pseudo registers with the 7333 hardware registers numbers they were allocated. Pseudo 7334 registers that did not get hard registers are replaced with 7335 stack slots. Then it finds instructions that are invalid 7336 because a value has failed to end up in a register, or has 7337 ended up in a register of the wrong kind. It fixes up these 7338 instructions by reloading the problematical values temporarily 7339 into registers. Additional instructions are generated to do 7340 the copying. 7341 7342 The reload pass also optionally eliminates the frame pointer 7343 and inserts instructions to save and restore call-clobbered 7344 registers around calls. 7345 7346 Source files are 'reload.c' and 'reload1.c', plus the header 7347 'reload.h' used for communication between them. 7348 7349 * This pass is a modern replacement of the reload pass. Source 7350 files are 'lra.c', 'lra-assign.c', 'lra-coalesce.c', 7351 'lra-constraints.c', 'lra-eliminations.c', 'lra-lives.c', 7352 'lra-remat.c', 'lra-spills.c', the header 'lra-int.h' used for 7353 communication between them, and the header 'lra.h' used for 7354 communication between LRA and the rest of compiler. 7355 7356 Unlike the reload pass, intermediate LRA decisions are 7357 reflected in RTL as much as possible. This reduces the number 7358 of target-dependent macros and hooks, leaving instruction 7359 constraints as the primary source of control. 7360 7361 LRA is run on targets for which TARGET_LRA_P returns true. 7362 7363 * Basic block reordering 7364 7365 This pass implements profile guided code positioning. If profile 7366 information is not available, various types of static analysis are 7367 performed to make the predictions normally coming from the profile 7368 feedback (IE execution frequency, branch probability, etc). It is 7369 implemented in the file 'bb-reorder.c', and the various prediction 7370 routines are in 'predict.c'. 7371 7372 * Variable tracking 7373 7374 This pass computes where the variables are stored at each position 7375 in code and generates notes describing the variable locations to 7376 RTL code. The location lists are then generated according to these 7377 notes to debug information if the debugging information format 7378 supports location lists. The code is located in 'var-tracking.c'. 7379 7380 * Delayed branch scheduling 7381 7382 This optional pass attempts to find instructions that can go into 7383 the delay slots of other instructions, usually jumps and calls. 7384 The code for this pass is located in 'reorg.c'. 7385 7386 * Branch shortening 7387 7388 On many RISC machines, branch instructions have a limited range. 7389 Thus, longer sequences of instructions must be used for long 7390 branches. In this pass, the compiler figures out what how far each 7391 instruction will be from each other instruction, and therefore 7392 whether the usual instructions, or the longer sequences, must be 7393 used for each branch. The code for this pass is located in 7394 'final.c'. 7395 7396 * Register-to-stack conversion 7397 7398 Conversion from usage of some hard registers to usage of a register 7399 stack may be done at this point. Currently, this is supported only 7400 for the floating-point registers of the Intel 80387 coprocessor. 7401 The code for this pass is located in 'reg-stack.c'. 7402 7403 * Final 7404 7405 This pass outputs the assembler code for the function. The source 7406 files are 'final.c' plus 'insn-output.c'; the latter is generated 7407 automatically from the machine description by the tool 'genoutput'. 7408 The header file 'conditions.h' is used for communication between 7409 these files. 7410 7411 * Debugging information output 7412 7413 This is run after final because it must output the stack slot 7414 offsets for pseudo registers that did not get hard registers. 7415 Source files are 'dbxout.c' for DBX symbol table format, 'sdbout.c' 7416 for SDB symbol table format, 'dwarfout.c' for DWARF symbol table 7417 format, files 'dwarf2out.c' and 'dwarf2asm.c' for DWARF2 symbol 7418 table format, and 'vmsdbgout.c' for VMS debug symbol table format. 7419 7420 7421File: gccint.info, Node: Optimization info, Prev: RTL passes, Up: Passes 7422 74239.7 Optimization info 7424===================== 7425 7426This section is describes dump infrastructure which is common to both 7427pass dumps as well as optimization dumps. The goal for this 7428infrastructure is to provide both gcc developers and users detailed 7429information about various compiler transformations and optimizations. 7430 7431* Menu: 7432 7433* Dump setup:: Setup of optimization dumps. 7434* Optimization groups:: Groups made up of optimization passes. 7435* Dump files and streams:: Dump output file names and streams. 7436* Dump output verbosity:: How much information to dump. 7437* Dump types:: Various types of dump functions. 7438* Dump examples:: Sample usage. 7439 7440 7441File: gccint.info, Node: Dump setup, Next: Optimization groups, Up: Optimization info 7442 74439.7.1 Dump setup 7444---------------- 7445 7446A dump_manager class is defined in 'dumpfile.h'. Various passes 7447register dumping pass-specific information via 'dump_register' in 7448'passes.c'. During the registration, an optimization pass can select 7449its optimization group (*note Optimization groups::). After that 7450optimization information corresponding to the entire group (presumably 7451from multiple passes) can be output via command-line switches. Note 7452that if a pass does not fit into any of the pre-defined groups, it can 7453select 'OPTGROUP_NONE'. 7454 7455 Note that in general, a pass need not know its dump output file name, 7456whether certain flags are enabled, etc. However, for legacy reasons, 7457passes could also call 'dump_begin' which returns a stream in case the 7458particular pass has optimization dumps enabled. A pass could call 7459'dump_end' when the dump has ended. These methods should go away once 7460all the passes are converted to use the new dump infrastructure. 7461 7462 The recommended way to setup the dump output is via 'dump_start' and 7463'dump_end'. 7464 7465 7466File: gccint.info, Node: Optimization groups, Next: Dump files and streams, Prev: Dump setup, Up: Optimization info 7467 74689.7.2 Optimization groups 7469------------------------- 7470 7471The optimization passes are grouped into several categories. Currently 7472defined categories in 'dumpfile.h' are 7473 7474'OPTGROUP_IPA' 7475 IPA optimization passes. Enabled by '-ipa' 7476 7477'OPTGROUP_LOOP' 7478 Loop optimization passes. Enabled by '-loop'. 7479 7480'OPTGROUP_INLINE' 7481 Inlining passes. Enabled by '-inline'. 7482 7483'OPTGROUP_VEC' 7484 Vectorization passes. Enabled by '-vec'. 7485 7486'OPTGROUP_OTHER' 7487 All other optimization passes which do not fall into one of the 7488 above. 7489 7490'OPTGROUP_ALL' 7491 All optimization passes. Enabled by '-all'. 7492 7493 By using groups a user could selectively enable optimization 7494information only for a group of passes. By default, the optimization 7495information for all the passes is dumped. 7496 7497 7498File: gccint.info, Node: Dump files and streams, Next: Dump output verbosity, Prev: Optimization groups, Up: Optimization info 7499 75009.7.3 Dump files and streams 7501---------------------------- 7502 7503There are two separate output streams available for outputting 7504optimization information from passes. Note that both these streams 7505accept 'stderr' and 'stdout' as valid streams and thus it is possible to 7506dump output to standard output or error. This is specially handy for 7507outputting all available information in a single file by redirecting 7508'stderr'. 7509 7510'pstream' 7511 This stream is for pass-specific dump output. For example, 7512 '-fdump-tree-vect=foo.v' dumps tree vectorization pass output into 7513 the given file name 'foo.v'. If the file name is not provided, the 7514 default file name is based on the source file and pass number. 7515 Note that one could also use special file names 'stdout' and 7516 'stderr' for dumping to standard output and standard error 7517 respectively. 7518 7519'alt_stream' 7520 This steam is used for printing optimization specific output in 7521 response to the '-fopt-info'. Again a file name can be given. If 7522 the file name is not given, it defaults to 'stderr'. 7523 7524 7525File: gccint.info, Node: Dump output verbosity, Next: Dump types, Prev: Dump files and streams, Up: Optimization info 7526 75279.7.4 Dump output verbosity 7528--------------------------- 7529 7530The dump verbosity has the following options 7531 7532'optimized' 7533 Print information when an optimization is successfully applied. It 7534 is up to a pass to decide which information is relevant. For 7535 example, the vectorizer passes print the source location of loops 7536 which got successfully vectorized. 7537 7538'missed' 7539 Print information about missed optimizations. Individual passes 7540 control which information to include in the output. For example, 7541 7542 gcc -O2 -ftree-vectorize -fopt-info-vec-missed 7543 7544 will print information about missed optimization opportunities from 7545 vectorization passes on stderr. 7546 7547'note' 7548 Print verbose information about optimizations, such as certain 7549 transformations, more detailed messages about decisions etc. 7550 7551'all' 7552 Print detailed optimization information. This includes OPTIMIZED, 7553 MISSED, and NOTE. 7554 7555 7556File: gccint.info, Node: Dump types, Next: Dump examples, Prev: Dump output verbosity, Up: Optimization info 7557 75589.7.5 Dump types 7559---------------- 7560 7561'dump_printf' 7562 7563 This is a generic method for doing formatted output. It takes an 7564 additional argument 'dump_kind' which signifies the type of dump. 7565 This method outputs information only when the dumps are enabled for 7566 this particular 'dump_kind'. Note that the caller doesn't need to 7567 know if the particular dump is enabled or not, or even the file 7568 name. The caller only needs to decide which dump output 7569 information is relevant, and under what conditions. This 7570 determines the associated flags. 7571 7572 Consider the following example from 'loop-unroll.c' where an 7573 informative message about a loop (along with its location) is 7574 printed when any of the following flags is enabled 7575 7576 - optimization messages 7577 - RTL dumps 7578 - detailed dumps 7579 7580 int report_flags = MSG_OPTIMIZED_LOCATIONS | TDF_RTL | TDF_DETAILS; 7581 dump_printf_loc (report_flags, locus, 7582 "loop turned into non-loop; it never loops.\n"); 7583 7584'dump_basic_block' 7585 Output basic block. 7586'dump_generic_expr' 7587 Output generic expression. 7588'dump_gimple_stmt' 7589 Output gimple statement. 7590 7591 Note that the above methods also have variants prefixed with 7592 '_loc', such as 'dump_printf_loc', which are similar except they 7593 also output the source location information. 7594 7595 7596File: gccint.info, Node: Dump examples, Prev: Dump types, Up: Optimization info 7597 75989.7.6 Dump examples 7599------------------- 7600 7601 gcc -O3 -fopt-info-missed=missed.all 7602 7603 outputs missed optimization report from all the passes into 7604'missed.all'. 7605 7606 As another example, 7607 gcc -O3 -fopt-info-inline-optimized-missed=inline.txt 7608 7609 will output information about missed optimizations as well as optimized 7610locations from all the inlining passes into 'inline.txt'. 7611 7612 If the FILENAME is provided, then the dumps from all the applicable 7613optimizations are concatenated into the 'filename'. Otherwise the dump 7614is output onto 'stderr'. If OPTIONS is omitted, it defaults to 7615'all-all', which means dump all available optimization info from all the 7616passes. In the following example, all optimization info is output on to 7617'stderr'. 7618 7619 gcc -O3 -fopt-info 7620 7621 Note that '-fopt-info-vec-missed' behaves the same as 7622'-fopt-info-missed-vec'. 7623 7624 As another example, consider 7625 7626 gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt 7627 7628 Here the two output file names 'vec.miss' and 'loop.opt' are in 7629conflict since only one output file is allowed. In this case, only the 7630first option takes effect and the subsequent options are ignored. Thus 7631only the 'vec.miss' is produced which containts dumps from the 7632vectorizer about missed opportunities. 7633 7634 7635File: gccint.info, Node: GENERIC, Next: GIMPLE, Prev: Passes, Up: Top 7636 763710 GENERIC 7638********** 7639 7640The purpose of GENERIC is simply to provide a language-independent way 7641of representing an entire function in trees. To this end, it was 7642necessary to add a few new tree codes to the back end, but almost 7643everything was already there. If you can express it with the codes in 7644'gcc/tree.def', it's GENERIC. 7645 7646 Early on, there was a great deal of debate about how to think about 7647statements in a tree IL. In GENERIC, a statement is defined as any 7648expression whose value, if any, is ignored. A statement will always 7649have 'TREE_SIDE_EFFECTS' set (or it will be discarded), but a 7650non-statement expression may also have side effects. A 'CALL_EXPR', for 7651instance. 7652 7653 It would be possible for some local optimizations to work on the 7654GENERIC form of a function; indeed, the adapted tree inliner works fine 7655on GENERIC, but the current compiler performs inlining after lowering to 7656GIMPLE (a restricted form described in the next section). Indeed, 7657currently the frontends perform this lowering before handing off to 7658'tree_rest_of_compilation', but this seems inelegant. 7659 7660* Menu: 7661 7662* Deficiencies:: Topics net yet covered in this document. 7663* Tree overview:: All about 'tree's. 7664* Types:: Fundamental and aggregate types. 7665* Declarations:: Type declarations and variables. 7666* Attributes:: Declaration and type attributes. 7667* Expressions: Expression trees. Operating on data. 7668* Statements:: Control flow and related trees. 7669* Functions:: Function bodies, linkage, and other aspects. 7670* Language-dependent trees:: Topics and trees specific to language front ends. 7671* C and C++ Trees:: Trees specific to C and C++. 7672* Java Trees:: Trees specific to Java. 7673 7674 7675File: gccint.info, Node: Deficiencies, Next: Tree overview, Up: GENERIC 7676 767710.1 Deficiencies 7678================= 7679 7680There are many places in which this document is incomplet and incorrekt. 7681It is, as of yet, only _preliminary_ documentation. 7682 7683 7684File: gccint.info, Node: Tree overview, Next: Types, Prev: Deficiencies, Up: GENERIC 7685 768610.2 Overview 7687============= 7688 7689The central data structure used by the internal representation is the 7690'tree'. These nodes, while all of the C type 'tree', are of many 7691varieties. A 'tree' is a pointer type, but the object to which it 7692points may be of a variety of types. From this point forward, we will 7693refer to trees in ordinary type, rather than in 'this font', except when 7694talking about the actual C type 'tree'. 7695 7696 You can tell what kind of node a particular tree is by using the 7697'TREE_CODE' macro. Many, many macros take trees as input and return 7698trees as output. However, most macros require a certain kind of tree 7699node as input. In other words, there is a type-system for trees, but it 7700is not reflected in the C type-system. 7701 7702 For safety, it is useful to configure GCC with '--enable-checking'. 7703Although this results in a significant performance penalty (since all 7704tree types are checked at run-time), and is therefore inappropriate in a 7705release version, it is extremely helpful during the development process. 7706 7707 Many macros behave as predicates. Many, although not all, of these 7708predicates end in '_P'. Do not rely on the result type of these macros 7709being of any particular type. You may, however, rely on the fact that 7710the type can be compared to '0', so that statements like 7711 if (TEST_P (t) && !TEST_P (y)) 7712 x = 1; 7713and 7714 int i = (TEST_P (t) != 0); 7715are legal. Macros that return 'int' values now may be changed to return 7716'tree' values, or other pointers in the future. Even those that 7717continue to return 'int' may return multiple nonzero codes where 7718previously they returned only zero and one. Therefore, you should not 7719write code like 7720 if (TEST_P (t) == 1) 7721as this code is not guaranteed to work correctly in the future. 7722 7723 You should not take the address of values returned by the macros or 7724functions described here. In particular, no guarantee is given that the 7725values are lvalues. 7726 7727 In general, the names of macros are all in uppercase, while the names 7728of functions are entirely in lowercase. There are rare exceptions to 7729this rule. You should assume that any macro or function whose name is 7730made up entirely of uppercase letters may evaluate its arguments more 7731than once. You may assume that a macro or function whose name is made 7732up entirely of lowercase letters will evaluate its arguments only once. 7733 7734 The 'error_mark_node' is a special tree. Its tree code is 7735'ERROR_MARK', but since there is only ever one node with that code, the 7736usual practice is to compare the tree against 'error_mark_node'. (This 7737test is just a test for pointer equality.) If an error has occurred 7738during front-end processing the flag 'errorcount' will be set. If the 7739front end has encountered code it cannot handle, it will issue a message 7740to the user and set 'sorrycount'. When these flags are set, any macro 7741or function which normally returns a tree of a particular kind may 7742instead return the 'error_mark_node'. Thus, if you intend to do any 7743processing of erroneous code, you must be prepared to deal with the 7744'error_mark_node'. 7745 7746 Occasionally, a particular tree slot (like an operand to an expression, 7747or a particular field in a declaration) will be referred to as "reserved 7748for the back end". These slots are used to store RTL when the tree is 7749converted to RTL for use by the GCC back end. However, if that process 7750is not taking place (e.g., if the front end is being hooked up to an 7751intelligent editor), then those slots may be used by the back end 7752presently in use. 7753 7754 If you encounter situations that do not match this documentation, such 7755as tree nodes of types not mentioned here, or macros documented to 7756return entities of a particular kind that instead return entities of 7757some different kind, you have found a bug, either in the front end or in 7758the documentation. Please report these bugs as you would any other bug. 7759 7760* Menu: 7761 7762* Macros and Functions::Macros and functions that can be used with all trees. 7763* Identifiers:: The names of things. 7764* Containers:: Lists and vectors. 7765 7766 7767File: gccint.info, Node: Macros and Functions, Next: Identifiers, Up: Tree overview 7768 776910.2.1 Trees 7770------------ 7771 7772All GENERIC trees have two fields in common. First, 'TREE_CHAIN' is a 7773pointer that can be used as a singly-linked list to other trees. The 7774other is 'TREE_TYPE'. Many trees store the type of an expression or 7775declaration in this field. 7776 7777 These are some other functions for handling trees: 7778 7779'tree_size' 7780 Return the number of bytes a tree takes. 7781 7782'build0' 7783'build1' 7784'build2' 7785'build3' 7786'build4' 7787'build5' 7788'build6' 7789 7790 These functions build a tree and supply values to put in each 7791 parameter. The basic signature is 'code, type, [operands]'. 7792 'code' is the 'TREE_CODE', and 'type' is a tree representing the 7793 'TREE_TYPE'. These are followed by the operands, each of which is 7794 also a tree. 7795 7796 7797File: gccint.info, Node: Identifiers, Next: Containers, Prev: Macros and Functions, Up: Tree overview 7798 779910.2.2 Identifiers 7800------------------ 7801 7802An 'IDENTIFIER_NODE' represents a slightly more general concept than the 7803standard C or C++ concept of identifier. In particular, an 7804'IDENTIFIER_NODE' may contain a '$', or other extraordinary characters. 7805 7806 There are never two distinct 'IDENTIFIER_NODE's representing the same 7807identifier. Therefore, you may use pointer equality to compare 7808'IDENTIFIER_NODE's, rather than using a routine like 'strcmp'. Use 7809'get_identifier' to obtain the unique 'IDENTIFIER_NODE' for a supplied 7810string. 7811 7812 You can use the following macros to access identifiers: 7813'IDENTIFIER_POINTER' 7814 The string represented by the identifier, represented as a 'char*'. 7815 This string is always 'NUL'-terminated, and contains no embedded 7816 'NUL' characters. 7817 7818'IDENTIFIER_LENGTH' 7819 The length of the string returned by 'IDENTIFIER_POINTER', not 7820 including the trailing 'NUL'. This value of 'IDENTIFIER_LENGTH 7821 (x)' is always the same as 'strlen (IDENTIFIER_POINTER (x))'. 7822 7823'IDENTIFIER_OPNAME_P' 7824 This predicate holds if the identifier represents the name of an 7825 overloaded operator. In this case, you should not depend on the 7826 contents of either the 'IDENTIFIER_POINTER' or the 7827 'IDENTIFIER_LENGTH'. 7828 7829'IDENTIFIER_TYPENAME_P' 7830 This predicate holds if the identifier represents the name of a 7831 user-defined conversion operator. In this case, the 'TREE_TYPE' of 7832 the 'IDENTIFIER_NODE' holds the type to which the conversion 7833 operator converts. 7834 7835 7836File: gccint.info, Node: Containers, Prev: Identifiers, Up: Tree overview 7837 783810.2.3 Containers 7839----------------- 7840 7841Two common container data structures can be represented directly with 7842tree nodes. A 'TREE_LIST' is a singly linked list containing two trees 7843per node. These are the 'TREE_PURPOSE' and 'TREE_VALUE' of each node. 7844(Often, the 'TREE_PURPOSE' contains some kind of tag, or additional 7845information, while the 'TREE_VALUE' contains the majority of the 7846payload. In other cases, the 'TREE_PURPOSE' is simply 'NULL_TREE', 7847while in still others both the 'TREE_PURPOSE' and 'TREE_VALUE' are of 7848equal stature.) Given one 'TREE_LIST' node, the next node is found by 7849following the 'TREE_CHAIN'. If the 'TREE_CHAIN' is 'NULL_TREE', then 7850you have reached the end of the list. 7851 7852 A 'TREE_VEC' is a simple vector. The 'TREE_VEC_LENGTH' is an integer 7853(not a tree) giving the number of nodes in the vector. The nodes 7854themselves are accessed using the 'TREE_VEC_ELT' macro, which takes two 7855arguments. The first is the 'TREE_VEC' in question; the second is an 7856integer indicating which element in the vector is desired. The elements 7857are indexed from zero. 7858 7859 7860File: gccint.info, Node: Types, Next: Declarations, Prev: Tree overview, Up: GENERIC 7861 786210.3 Types 7863========== 7864 7865All types have corresponding tree nodes. However, you should not assume 7866that there is exactly one tree node corresponding to each type. There 7867are often multiple nodes corresponding to the same type. 7868 7869 For the most part, different kinds of types have different tree codes. 7870(For example, pointer types use a 'POINTER_TYPE' code while arrays use 7871an 'ARRAY_TYPE' code.) However, pointers to member functions use the 7872'RECORD_TYPE' code. Therefore, when writing a 'switch' statement that 7873depends on the code associated with a particular type, you should take 7874care to handle pointers to member functions under the 'RECORD_TYPE' case 7875label. 7876 7877 The following functions and macros deal with cv-qualification of types: 7878'TYPE_MAIN_VARIANT' 7879 This macro returns the unqualified version of a type. It may be 7880 applied to an unqualified type, but it is not always the identity 7881 function in that case. 7882 7883 A few other macros and functions are usable with all types: 7884'TYPE_SIZE' 7885 The number of bits required to represent the type, represented as 7886 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 7887 'NULL_TREE'. 7888 7889'TYPE_ALIGN' 7890 The alignment of the type, in bits, represented as an 'int'. 7891 7892'TYPE_NAME' 7893 This macro returns a declaration (in the form of a 'TYPE_DECL') for 7894 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 7895 as you might expect, given its name!) You can look at the 7896 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 7897 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 7898 built-in type, the result of a typedef, or a named class type. 7899 7900'TYPE_CANONICAL' 7901 This macro returns the "canonical" type for the given type node. 7902 Canonical types are used to improve performance in the C++ and 7903 Objective-C++ front ends by allowing efficient comparison between 7904 two type nodes in 'same_type_p': if the 'TYPE_CANONICAL' values of 7905 the types are equal, the types are equivalent; otherwise, the types 7906 are not equivalent. The notion of equivalence for canonical types 7907 is the same as the notion of type equivalence in the language 7908 itself. For instance, 7909 7910 When 'TYPE_CANONICAL' is 'NULL_TREE', there is no canonical type 7911 for the given type node. In this case, comparison between this 7912 type and any other type requires the compiler to perform a deep, 7913 "structural" comparison to see if the two type nodes have the same 7914 form and properties. 7915 7916 The canonical type for a node is always the most fundamental type 7917 in the equivalence class of types. For instance, 'int' is its own 7918 canonical type. A typedef 'I' of 'int' will have 'int' as its 7919 canonical type. Similarly, 'I*' and a typedef 'IP' (defined to 7920 'I*') will has 'int*' as their canonical type. When building a new 7921 type node, be sure to set 'TYPE_CANONICAL' to the appropriate 7922 canonical type. If the new type is a compound type (built from 7923 other types), and any of those other types require structural 7924 equality, use 'SET_TYPE_STRUCTURAL_EQUALITY' to ensure that the new 7925 type also requires structural equality. Finally, if for some 7926 reason you cannot guarantee that 'TYPE_CANONICAL' will point to the 7927 canonical type, use 'SET_TYPE_STRUCTURAL_EQUALITY' to make sure 7928 that the new type-and any type constructed based on it-requires 7929 structural equality. If you suspect that the canonical type system 7930 is miscomparing types, pass '--param verify-canonical-types=1' to 7931 the compiler or configure with '--enable-checking' to force the 7932 compiler to verify its canonical-type comparisons against the 7933 structural comparisons; the compiler will then print any warnings 7934 if the canonical types miscompare. 7935 7936'TYPE_STRUCTURAL_EQUALITY_P' 7937 This predicate holds when the node requires structural equality 7938 checks, e.g., when 'TYPE_CANONICAL' is 'NULL_TREE'. 7939 7940'SET_TYPE_STRUCTURAL_EQUALITY' 7941 This macro states that the type node it is given requires 7942 structural equality checks, e.g., it sets 'TYPE_CANONICAL' to 7943 'NULL_TREE'. 7944 7945'same_type_p' 7946 This predicate takes two types as input, and holds if they are the 7947 same type. For example, if one type is a 'typedef' for the other, 7948 or both are 'typedef's for the same type. This predicate also 7949 holds if the two trees given as input are simply copies of one 7950 another; i.e., there is no difference between them at the source 7951 level, but, for whatever reason, a duplicate has been made in the 7952 representation. You should never use '==' (pointer equality) to 7953 compare types; always use 'same_type_p' instead. 7954 7955 Detailed below are the various kinds of types, and the macros that can 7956be used to access them. Although other kinds of types are used 7957elsewhere in G++, the types described here are the only ones that you 7958will encounter while examining the intermediate representation. 7959 7960'VOID_TYPE' 7961 Used to represent the 'void' type. 7962 7963'INTEGER_TYPE' 7964 Used to represent the various integral types, including 'char', 7965 'short', 'int', 'long', and 'long long'. This code is not used for 7966 enumeration types, nor for the 'bool' type. The 'TYPE_PRECISION' 7967 is the number of bits used in the representation, represented as an 7968 'unsigned int'. (Note that in the general case this is not the 7969 same value as 'TYPE_SIZE'; suppose that there were a 24-bit integer 7970 type, but that alignment requirements for the ABI required 32-bit 7971 alignment. Then, 'TYPE_SIZE' would be an 'INTEGER_CST' for 32, 7972 while 'TYPE_PRECISION' would be 24.) The integer type is unsigned 7973 if 'TYPE_UNSIGNED' holds; otherwise, it is signed. 7974 7975 The 'TYPE_MIN_VALUE' is an 'INTEGER_CST' for the smallest integer 7976 that may be represented by this type. Similarly, the 7977 'TYPE_MAX_VALUE' is an 'INTEGER_CST' for the largest integer that 7978 may be represented by this type. 7979 7980'REAL_TYPE' 7981 Used to represent the 'float', 'double', and 'long double' types. 7982 The number of bits in the floating-point representation is given by 7983 'TYPE_PRECISION', as in the 'INTEGER_TYPE' case. 7984 7985'FIXED_POINT_TYPE' 7986 Used to represent the 'short _Fract', '_Fract', 'long _Fract', 7987 'long long _Fract', 'short _Accum', '_Accum', 'long _Accum', and 7988 'long long _Accum' types. The number of bits in the fixed-point 7989 representation is given by 'TYPE_PRECISION', as in the 7990 'INTEGER_TYPE' case. There may be padding bits, fractional bits 7991 and integral bits. The number of fractional bits is given by 7992 'TYPE_FBIT', and the number of integral bits is given by 7993 'TYPE_IBIT'. The fixed-point type is unsigned if 'TYPE_UNSIGNED' 7994 holds; otherwise, it is signed. The fixed-point type is saturating 7995 if 'TYPE_SATURATING' holds; otherwise, it is not saturating. 7996 7997'COMPLEX_TYPE' 7998 Used to represent GCC built-in '__complex__' data types. The 7999 'TREE_TYPE' is the type of the real and imaginary parts. 8000 8001'ENUMERAL_TYPE' 8002 Used to represent an enumeration type. The 'TYPE_PRECISION' gives 8003 (as an 'int'), the number of bits used to represent the type. If 8004 there are no negative enumeration constants, 'TYPE_UNSIGNED' will 8005 hold. The minimum and maximum enumeration constants may be 8006 obtained with 'TYPE_MIN_VALUE' and 'TYPE_MAX_VALUE', respectively; 8007 each of these macros returns an 'INTEGER_CST'. 8008 8009 The actual enumeration constants themselves may be obtained by 8010 looking at the 'TYPE_VALUES'. This macro will return a 8011 'TREE_LIST', containing the constants. The 'TREE_PURPOSE' of each 8012 node will be an 'IDENTIFIER_NODE' giving the name of the constant; 8013 the 'TREE_VALUE' will be an 'INTEGER_CST' giving the value assigned 8014 to that constant. These constants will appear in the order in 8015 which they were declared. The 'TREE_TYPE' of each of these 8016 constants will be the type of enumeration type itself. 8017 8018'BOOLEAN_TYPE' 8019 Used to represent the 'bool' type. 8020 8021'POINTER_TYPE' 8022 Used to represent pointer types, and pointer to data member types. 8023 The 'TREE_TYPE' gives the type to which this type points. 8024 8025'REFERENCE_TYPE' 8026 Used to represent reference types. The 'TREE_TYPE' gives the type 8027 to which this type refers. 8028 8029'FUNCTION_TYPE' 8030 Used to represent the type of non-member functions and of static 8031 member functions. The 'TREE_TYPE' gives the return type of the 8032 function. The 'TYPE_ARG_TYPES' are a 'TREE_LIST' of the argument 8033 types. The 'TREE_VALUE' of each node in this list is the type of 8034 the corresponding argument; the 'TREE_PURPOSE' is an expression for 8035 the default argument value, if any. If the last node in the list 8036 is 'void_list_node' (a 'TREE_LIST' node whose 'TREE_VALUE' is the 8037 'void_type_node'), then functions of this type do not take variable 8038 arguments. Otherwise, they do take a variable number of arguments. 8039 8040 Note that in C (but not in C++) a function declared like 'void f()' 8041 is an unprototyped function taking a variable number of arguments; 8042 the 'TYPE_ARG_TYPES' of such a function will be 'NULL'. 8043 8044'METHOD_TYPE' 8045 Used to represent the type of a non-static member function. Like a 8046 'FUNCTION_TYPE', the return type is given by the 'TREE_TYPE'. The 8047 type of '*this', i.e., the class of which functions of this type 8048 are a member, is given by the 'TYPE_METHOD_BASETYPE'. The 8049 'TYPE_ARG_TYPES' is the parameter list, as for a 'FUNCTION_TYPE', 8050 and includes the 'this' argument. 8051 8052'ARRAY_TYPE' 8053 Used to represent array types. The 'TREE_TYPE' gives the type of 8054 the elements in the array. If the array-bound is present in the 8055 type, the 'TYPE_DOMAIN' is an 'INTEGER_TYPE' whose 'TYPE_MIN_VALUE' 8056 and 'TYPE_MAX_VALUE' will be the lower and upper bounds of the 8057 array, respectively. The 'TYPE_MIN_VALUE' will always be an 8058 'INTEGER_CST' for zero, while the 'TYPE_MAX_VALUE' will be one less 8059 than the number of elements in the array, i.e., the highest value 8060 which may be used to index an element in the array. 8061 8062'RECORD_TYPE' 8063 Used to represent 'struct' and 'class' types, as well as pointers 8064 to member functions and similar constructs in other languages. 8065 'TYPE_FIELDS' contains the items contained in this type, each of 8066 which can be a 'FIELD_DECL', 'VAR_DECL', 'CONST_DECL', or 8067 'TYPE_DECL'. You may not make any assumptions about the ordering 8068 of the fields in the type or whether one or more of them overlap. 8069 8070'UNION_TYPE' 8071 Used to represent 'union' types. Similar to 'RECORD_TYPE' except 8072 that all 'FIELD_DECL' nodes in 'TYPE_FIELD' start at bit position 8073 zero. 8074 8075'QUAL_UNION_TYPE' 8076 Used to represent part of a variant record in Ada. Similar to 8077 'UNION_TYPE' except that each 'FIELD_DECL' has a 'DECL_QUALIFIER' 8078 field, which contains a boolean expression that indicates whether 8079 the field is present in the object. The type will only have one 8080 field, so each field's 'DECL_QUALIFIER' is only evaluated if none 8081 of the expressions in the previous fields in 'TYPE_FIELDS' are 8082 nonzero. Normally these expressions will reference a field in the 8083 outer object using a 'PLACEHOLDER_EXPR'. 8084 8085'LANG_TYPE' 8086 This node is used to represent a language-specific type. The front 8087 end must handle it. 8088 8089'OFFSET_TYPE' 8090 This node is used to represent a pointer-to-data member. For a 8091 data member 'X::m' the 'TYPE_OFFSET_BASETYPE' is 'X' and the 8092 'TREE_TYPE' is the type of 'm'. 8093 8094 There are variables whose values represent some of the basic types. 8095These include: 8096'void_type_node' 8097 A node for 'void'. 8098 8099'integer_type_node' 8100 A node for 'int'. 8101 8102'unsigned_type_node.' 8103 A node for 'unsigned int'. 8104 8105'char_type_node.' 8106 A node for 'char'. 8107It may sometimes be useful to compare one of these variables with a type 8108in hand, using 'same_type_p'. 8109 8110 8111File: gccint.info, Node: Declarations, Next: Attributes, Prev: Types, Up: GENERIC 8112 811310.4 Declarations 8114================= 8115 8116This section covers the various kinds of declarations that appear in the 8117internal representation, except for declarations of functions 8118(represented by 'FUNCTION_DECL' nodes), which are described in *note 8119Functions::. 8120 8121* Menu: 8122 8123* Working with declarations:: Macros and functions that work on 8124declarations. 8125* Internal structure:: How declaration nodes are represented. 8126 8127 8128File: gccint.info, Node: Working with declarations, Next: Internal structure, Up: Declarations 8129 813010.4.1 Working with declarations 8131-------------------------------- 8132 8133Some macros can be used with any kind of declaration. These include: 8134'DECL_NAME' 8135 This macro returns an 'IDENTIFIER_NODE' giving the name of the 8136 entity. 8137 8138'TREE_TYPE' 8139 This macro returns the type of the entity declared. 8140 8141'EXPR_FILENAME' 8142 This macro returns the name of the file in which the entity was 8143 declared, as a 'char*'. For an entity declared implicitly by the 8144 compiler (like '__builtin_memcpy'), this will be the string 8145 '"<internal>"'. 8146 8147'EXPR_LINENO' 8148 This macro returns the line number at which the entity was 8149 declared, as an 'int'. 8150 8151'DECL_ARTIFICIAL' 8152 This predicate holds if the declaration was implicitly generated by 8153 the compiler. For example, this predicate will hold of an 8154 implicitly declared member function, or of the 'TYPE_DECL' 8155 implicitly generated for a class type. Recall that in C++ code 8156 like: 8157 struct S {}; 8158 is roughly equivalent to C code like: 8159 struct S {}; 8160 typedef struct S S; 8161 The implicitly generated 'typedef' declaration is represented by a 8162 'TYPE_DECL' for which 'DECL_ARTIFICIAL' holds. 8163 8164 The various kinds of declarations include: 8165'LABEL_DECL' 8166 These nodes are used to represent labels in function bodies. For 8167 more information, see *note Functions::. These nodes only appear 8168 in block scopes. 8169 8170'CONST_DECL' 8171 These nodes are used to represent enumeration constants. The value 8172 of the constant is given by 'DECL_INITIAL' which will be an 8173 'INTEGER_CST' with the same type as the 'TREE_TYPE' of the 8174 'CONST_DECL', i.e., an 'ENUMERAL_TYPE'. 8175 8176'RESULT_DECL' 8177 These nodes represent the value returned by a function. When a 8178 value is assigned to a 'RESULT_DECL', that indicates that the value 8179 should be returned, via bitwise copy, by the function. You can use 8180 'DECL_SIZE' and 'DECL_ALIGN' on a 'RESULT_DECL', just as with a 8181 'VAR_DECL'. 8182 8183'TYPE_DECL' 8184 These nodes represent 'typedef' declarations. The 'TREE_TYPE' is 8185 the type declared to have the name given by 'DECL_NAME'. In some 8186 cases, there is no associated name. 8187 8188'VAR_DECL' 8189 These nodes represent variables with namespace or block scope, as 8190 well as static data members. The 'DECL_SIZE' and 'DECL_ALIGN' are 8191 analogous to 'TYPE_SIZE' and 'TYPE_ALIGN'. For a declaration, you 8192 should always use the 'DECL_SIZE' and 'DECL_ALIGN' rather than the 8193 'TYPE_SIZE' and 'TYPE_ALIGN' given by the 'TREE_TYPE', since 8194 special attributes may have been applied to the variable to give it 8195 a particular size and alignment. You may use the predicates 8196 'DECL_THIS_STATIC' or 'DECL_THIS_EXTERN' to test whether the 8197 storage class specifiers 'static' or 'extern' were used to declare 8198 a variable. 8199 8200 If this variable is initialized (but does not require a 8201 constructor), the 'DECL_INITIAL' will be an expression for the 8202 initializer. The initializer should be evaluated, and a bitwise 8203 copy into the variable performed. If the 'DECL_INITIAL' is the 8204 'error_mark_node', there is an initializer, but it is given by an 8205 explicit statement later in the code; no bitwise copy is required. 8206 8207 GCC provides an extension that allows either automatic variables, 8208 or global variables, to be placed in particular registers. This 8209 extension is being used for a particular 'VAR_DECL' if 8210 'DECL_REGISTER' holds for the 'VAR_DECL', and if 8211 'DECL_ASSEMBLER_NAME' is not equal to 'DECL_NAME'. In that case, 8212 'DECL_ASSEMBLER_NAME' is the name of the register into which the 8213 variable will be placed. 8214 8215'PARM_DECL' 8216 Used to represent a parameter to a function. Treat these nodes 8217 similarly to 'VAR_DECL' nodes. These nodes only appear in the 8218 'DECL_ARGUMENTS' for a 'FUNCTION_DECL'. 8219 8220 The 'DECL_ARG_TYPE' for a 'PARM_DECL' is the type that will 8221 actually be used when a value is passed to this function. It may 8222 be a wider type than the 'TREE_TYPE' of the parameter; for example, 8223 the ordinary type might be 'short' while the 'DECL_ARG_TYPE' is 8224 'int'. 8225 8226'DEBUG_EXPR_DECL' 8227 Used to represent an anonymous debug-information temporary created 8228 to hold an expression as it is optimized away, so that its value 8229 can be referenced in debug bind statements. 8230 8231'FIELD_DECL' 8232 These nodes represent non-static data members. The 'DECL_SIZE' and 8233 'DECL_ALIGN' behave as for 'VAR_DECL' nodes. The position of the 8234 field within the parent record is specified by a combination of 8235 three attributes. 'DECL_FIELD_OFFSET' is the position, counting in 8236 bytes, of the 'DECL_OFFSET_ALIGN'-bit sized word containing the bit 8237 of the field closest to the beginning of the structure. 8238 'DECL_FIELD_BIT_OFFSET' is the bit offset of the first bit of the 8239 field within this word; this may be nonzero even for fields that 8240 are not bit-fields, since 'DECL_OFFSET_ALIGN' may be greater than 8241 the natural alignment of the field's type. 8242 8243 If 'DECL_C_BIT_FIELD' holds, this field is a bit-field. In a 8244 bit-field, 'DECL_BIT_FIELD_TYPE' also contains the type that was 8245 originally specified for it, while DECL_TYPE may be a modified type 8246 with lesser precision, according to the size of the bit field. 8247 8248'NAMESPACE_DECL' 8249 Namespaces provide a name hierarchy for other declarations. They 8250 appear in the 'DECL_CONTEXT' of other '_DECL' nodes. 8251 8252 8253File: gccint.info, Node: Internal structure, Prev: Working with declarations, Up: Declarations 8254 825510.4.2 Internal structure 8256------------------------- 8257 8258'DECL' nodes are represented internally as a hierarchy of structures. 8259 8260* Menu: 8261 8262* Current structure hierarchy:: The current DECL node structure 8263hierarchy. 8264* Adding new DECL node types:: How to add a new DECL node to a 8265frontend. 8266 8267 8268File: gccint.info, Node: Current structure hierarchy, Next: Adding new DECL node types, Up: Internal structure 8269 827010.4.2.1 Current structure hierarchy 8271.................................... 8272 8273'struct tree_decl_minimal' 8274 This is the minimal structure to inherit from in order for common 8275 'DECL' macros to work. The fields it contains are a unique ID, 8276 source location, context, and name. 8277 8278'struct tree_decl_common' 8279 This structure inherits from 'struct tree_decl_minimal'. It 8280 contains fields that most 'DECL' nodes need, such as a field to 8281 store alignment, machine mode, size, and attributes. 8282 8283'struct tree_field_decl' 8284 This structure inherits from 'struct tree_decl_common'. It is used 8285 to represent 'FIELD_DECL'. 8286 8287'struct tree_label_decl' 8288 This structure inherits from 'struct tree_decl_common'. It is used 8289 to represent 'LABEL_DECL'. 8290 8291'struct tree_translation_unit_decl' 8292 This structure inherits from 'struct tree_decl_common'. It is used 8293 to represent 'TRANSLATION_UNIT_DECL'. 8294 8295'struct tree_decl_with_rtl' 8296 This structure inherits from 'struct tree_decl_common'. It 8297 contains a field to store the low-level RTL associated with a 8298 'DECL' node. 8299 8300'struct tree_result_decl' 8301 This structure inherits from 'struct tree_decl_with_rtl'. It is 8302 used to represent 'RESULT_DECL'. 8303 8304'struct tree_const_decl' 8305 This structure inherits from 'struct tree_decl_with_rtl'. It is 8306 used to represent 'CONST_DECL'. 8307 8308'struct tree_parm_decl' 8309 This structure inherits from 'struct tree_decl_with_rtl'. It is 8310 used to represent 'PARM_DECL'. 8311 8312'struct tree_decl_with_vis' 8313 This structure inherits from 'struct tree_decl_with_rtl'. It 8314 contains fields necessary to store visibility information, as well 8315 as a section name and assembler name. 8316 8317'struct tree_var_decl' 8318 This structure inherits from 'struct tree_decl_with_vis'. It is 8319 used to represent 'VAR_DECL'. 8320 8321'struct tree_function_decl' 8322 This structure inherits from 'struct tree_decl_with_vis'. It is 8323 used to represent 'FUNCTION_DECL'. 8324 8325 8326File: gccint.info, Node: Adding new DECL node types, Prev: Current structure hierarchy, Up: Internal structure 8327 832810.4.2.2 Adding new DECL node types 8329................................... 8330 8331Adding a new 'DECL' tree consists of the following steps 8332 8333Add a new tree code for the 'DECL' node 8334 For language specific 'DECL' nodes, there is a '.def' file in each 8335 frontend directory where the tree code should be added. For 'DECL' 8336 nodes that are part of the middle-end, the code should be added to 8337 'tree.def'. 8338 8339Create a new structure type for the 'DECL' node 8340 These structures should inherit from one of the existing structures 8341 in the language hierarchy by using that structure as the first 8342 member. 8343 8344 struct tree_foo_decl 8345 { 8346 struct tree_decl_with_vis common; 8347 } 8348 8349 Would create a structure name 'tree_foo_decl' that inherits from 8350 'struct tree_decl_with_vis'. 8351 8352 For language specific 'DECL' nodes, this new structure type should 8353 go in the appropriate '.h' file. For 'DECL' nodes that are part of 8354 the middle-end, the structure type should go in 'tree.h'. 8355 8356Add a member to the tree structure enumerator for the node 8357 For garbage collection and dynamic checking purposes, each 'DECL' 8358 node structure type is required to have a unique enumerator value 8359 specified with it. For language specific 'DECL' nodes, this new 8360 enumerator value should go in the appropriate '.def' file. For 8361 'DECL' nodes that are part of the middle-end, the enumerator values 8362 are specified in 'treestruct.def'. 8363 8364Update 'union tree_node' 8365 In order to make your new structure type usable, it must be added 8366 to 'union tree_node'. For language specific 'DECL' nodes, a new 8367 entry should be added to the appropriate '.h' file of the form 8368 struct tree_foo_decl GTY ((tag ("TS_VAR_DECL"))) foo_decl; 8369 For 'DECL' nodes that are part of the middle-end, the additional 8370 member goes directly into 'union tree_node' in 'tree.h'. 8371 8372Update dynamic checking info 8373 In order to be able to check whether accessing a named portion of 8374 'union tree_node' is legal, and whether a certain 'DECL' node 8375 contains one of the enumerated 'DECL' node structures in the 8376 hierarchy, a simple lookup table is used. This lookup table needs 8377 to be kept up to date with the tree structure hierarchy, or else 8378 checking and containment macros will fail inappropriately. 8379 8380 For language specific 'DECL' nodes, their is an 'init_ts' function 8381 in an appropriate '.c' file, which initializes the lookup table. 8382 Code setting up the table for new 'DECL' nodes should be added 8383 there. For each 'DECL' tree code and enumerator value representing 8384 a member of the inheritance hierarchy, the table should contain 1 8385 if that tree code inherits (directly or indirectly) from that 8386 member. Thus, a 'FOO_DECL' node derived from 'struct 8387 decl_with_rtl', and enumerator value 'TS_FOO_DECL', would be set up 8388 as follows 8389 tree_contains_struct[FOO_DECL][TS_FOO_DECL] = 1; 8390 tree_contains_struct[FOO_DECL][TS_DECL_WRTL] = 1; 8391 tree_contains_struct[FOO_DECL][TS_DECL_COMMON] = 1; 8392 tree_contains_struct[FOO_DECL][TS_DECL_MINIMAL] = 1; 8393 8394 For 'DECL' nodes that are part of the middle-end, the setup code 8395 goes into 'tree.c'. 8396 8397Add macros to access any new fields and flags 8398 8399 Each added field or flag should have a macro that is used to access 8400 it, that performs appropriate checking to ensure only the right 8401 type of 'DECL' nodes access the field. 8402 8403 These macros generally take the following form 8404 #define FOO_DECL_FIELDNAME(NODE) FOO_DECL_CHECK(NODE)->foo_decl.fieldname 8405 However, if the structure is simply a base class for further 8406 structures, something like the following should be used 8407 #define BASE_STRUCT_CHECK(T) CONTAINS_STRUCT_CHECK(T, TS_BASE_STRUCT) 8408 #define BASE_STRUCT_FIELDNAME(NODE) \ 8409 (BASE_STRUCT_CHECK(NODE)->base_struct.fieldname 8410 8411 Reading them from the generated 'all-tree.def' file (which in turn 8412 includes all the 'tree.def' files), 'gencheck.c' is used during 8413 GCC's build to generate the '*_CHECK' macros for all tree codes. 8414 8415 8416File: gccint.info, Node: Attributes, Next: Expression trees, Prev: Declarations, Up: GENERIC 8417 841810.5 Attributes in trees 8419======================== 8420 8421Attributes, as specified using the '__attribute__' keyword, are 8422represented internally as a 'TREE_LIST'. The 'TREE_PURPOSE' is the name 8423of the attribute, as an 'IDENTIFIER_NODE'. The 'TREE_VALUE' is a 8424'TREE_LIST' of the arguments of the attribute, if any, or 'NULL_TREE' if 8425there are no arguments; the arguments are stored as the 'TREE_VALUE' of 8426successive entries in the list, and may be identifiers or expressions. 8427The 'TREE_CHAIN' of the attribute is the next attribute in a list of 8428attributes applying to the same declaration or type, or 'NULL_TREE' if 8429there are no further attributes in the list. 8430 8431 Attributes may be attached to declarations and to types; these 8432attributes may be accessed with the following macros. All attributes 8433are stored in this way, and many also cause other changes to the 8434declaration or type or to other internal compiler data structures. 8435 8436 -- Tree Macro: tree DECL_ATTRIBUTES (tree DECL) 8437 This macro returns the attributes on the declaration DECL. 8438 8439 -- Tree Macro: tree TYPE_ATTRIBUTES (tree TYPE) 8440 This macro returns the attributes on the type TYPE. 8441 8442 8443File: gccint.info, Node: Expression trees, Next: Statements, Prev: Attributes, Up: GENERIC 8444 844510.6 Expressions 8446================ 8447 8448The internal representation for expressions is for the most part quite 8449straightforward. However, there are a few facts that one must bear in 8450mind. In particular, the expression "tree" is actually a directed 8451acyclic graph. (For example there may be many references to the integer 8452constant zero throughout the source program; many of these will be 8453represented by the same expression node.) You should not rely on 8454certain kinds of node being shared, nor should you rely on certain kinds 8455of nodes being unshared. 8456 8457 The following macros can be used with all expression nodes: 8458 8459'TREE_TYPE' 8460 Returns the type of the expression. This value may not be 8461 precisely the same type that would be given the expression in the 8462 original program. 8463 8464 In what follows, some nodes that one might expect to always have type 8465'bool' are documented to have either integral or boolean type. At some 8466point in the future, the C front end may also make use of this same 8467intermediate representation, and at this point these nodes will 8468certainly have integral type. The previous sentence is not meant to 8469imply that the C++ front end does not or will not give these nodes 8470integral type. 8471 8472 Below, we list the various kinds of expression nodes. Except where 8473noted otherwise, the operands to an expression are accessed using the 8474'TREE_OPERAND' macro. For example, to access the first operand to a 8475binary plus expression 'expr', use: 8476 8477 TREE_OPERAND (expr, 0) 8478 8479 As this example indicates, the operands are zero-indexed. 8480 8481* Menu: 8482 8483* Constants: Constant expressions. 8484* Storage References:: 8485* Unary and Binary Expressions:: 8486* Vectors:: 8487 8488 8489File: gccint.info, Node: Constant expressions, Next: Storage References, Up: Expression trees 8490 849110.6.1 Constant expressions 8492--------------------------- 8493 8494The table below begins with constants, moves on to unary expressions, 8495then proceeds to binary expressions, and concludes with various other 8496kinds of expressions: 8497 8498'INTEGER_CST' 8499 These nodes represent integer constants. Note that the type of 8500 these constants is obtained with 'TREE_TYPE'; they are not always 8501 of type 'int'. In particular, 'char' constants are represented 8502 with 'INTEGER_CST' nodes. The value of the integer constant 'e' is 8503 represented in an array of HOST_WIDE_INT. There are enough elements 8504 in the array to represent the value without taking extra elements 8505 for redundant 0s or -1. The number of elements used to represent 8506 'e' is available via 'TREE_INT_CST_NUNITS'. Element 'i' can be 8507 extracted by using 'TREE_INT_CST_ELT (e, i)'. 'TREE_INT_CST_LOW' 8508 is a shorthand for 'TREE_INT_CST_ELT (e, 0)'. 8509 8510 The functions 'tree_fits_shwi_p' and 'tree_fits_uhwi_p' can be used 8511 to tell if the value is small enough to fit in a signed 8512 HOST_WIDE_INT or an unsigned HOST_WIDE_INT respectively. The value 8513 can then be extracted using 'tree_to_shwi' and 'tree_to_uhwi'. 8514 8515'REAL_CST' 8516 8517 FIXME: Talk about how to obtain representations of this constant, 8518 do comparisons, and so forth. 8519 8520'FIXED_CST' 8521 8522 These nodes represent fixed-point constants. The type of these 8523 constants is obtained with 'TREE_TYPE'. 'TREE_FIXED_CST_PTR' 8524 points to a 'struct fixed_value'; 'TREE_FIXED_CST' returns the 8525 structure itself. 'struct fixed_value' contains 'data' with the 8526 size of two 'HOST_BITS_PER_WIDE_INT' and 'mode' as the associated 8527 fixed-point machine mode for 'data'. 8528 8529'COMPLEX_CST' 8530 These nodes are used to represent complex number constants, that is 8531 a '__complex__' whose parts are constant nodes. The 8532 'TREE_REALPART' and 'TREE_IMAGPART' return the real and the 8533 imaginary parts respectively. 8534 8535'VECTOR_CST' 8536 These nodes are used to represent vector constants, whose parts are 8537 constant nodes. Each individual constant node is either an integer 8538 or a double constant node. The first operand is a 'TREE_LIST' of 8539 the constant nodes and is accessed through 'TREE_VECTOR_CST_ELTS'. 8540 8541'STRING_CST' 8542 These nodes represent string-constants. The 'TREE_STRING_LENGTH' 8543 returns the length of the string, as an 'int'. The 8544 'TREE_STRING_POINTER' is a 'char*' containing the string itself. 8545 The string may not be 'NUL'-terminated, and it may contain embedded 8546 'NUL' characters. Therefore, the 'TREE_STRING_LENGTH' includes the 8547 trailing 'NUL' if it is present. 8548 8549 For wide string constants, the 'TREE_STRING_LENGTH' is the number 8550 of bytes in the string, and the 'TREE_STRING_POINTER' points to an 8551 array of the bytes of the string, as represented on the target 8552 system (that is, as integers in the target endianness). Wide and 8553 non-wide string constants are distinguished only by the 'TREE_TYPE' 8554 of the 'STRING_CST'. 8555 8556 FIXME: The formats of string constants are not well-defined when 8557 the target system bytes are not the same width as host system 8558 bytes. 8559 8560 8561File: gccint.info, Node: Storage References, Next: Unary and Binary Expressions, Prev: Constant expressions, Up: Expression trees 8562 856310.6.2 References to storage 8564---------------------------- 8565 8566'ARRAY_REF' 8567 These nodes represent array accesses. The first operand is the 8568 array; the second is the index. To calculate the address of the 8569 memory accessed, you must scale the index by the size of the type 8570 of the array elements. The type of these expressions must be the 8571 type of a component of the array. The third and fourth operands 8572 are used after gimplification to represent the lower bound and 8573 component size but should not be used directly; call 8574 'array_ref_low_bound' and 'array_ref_element_size' instead. 8575 8576'ARRAY_RANGE_REF' 8577 These nodes represent access to a range (or "slice") of an array. 8578 The operands are the same as that for 'ARRAY_REF' and have the same 8579 meanings. The type of these expressions must be an array whose 8580 component type is the same as that of the first operand. The range 8581 of that array type determines the amount of data these expressions 8582 access. 8583 8584'TARGET_MEM_REF' 8585 These nodes represent memory accesses whose address directly map to 8586 an addressing mode of the target architecture. The first argument 8587 is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed 8588 address. The second argument is 'TMR_BASE' and the third one is 8589 'TMR_INDEX'. The fourth argument is 'TMR_STEP' and must be an 8590 'INTEGER_CST'. The fifth argument is 'TMR_OFFSET' and must be an 8591 'INTEGER_CST'. Any of the arguments may be NULL if the appropriate 8592 component does not appear in the address. Address of the 8593 'TARGET_MEM_REF' is determined in the following way. 8594 8595 &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET 8596 8597 The sixth argument is the reference to the original memory access, 8598 which is preserved for the purposes of the RTL alias analysis. The 8599 seventh argument is a tag representing the results of tree level 8600 alias analysis. 8601 8602'ADDR_EXPR' 8603 These nodes are used to represent the address of an object. (These 8604 expressions will always have pointer or reference type.) The 8605 operand may be another expression, or it may be a declaration. 8606 8607 As an extension, GCC allows users to take the address of a label. 8608 In this case, the operand of the 'ADDR_EXPR' will be a 8609 'LABEL_DECL'. The type of such an expression is 'void*'. 8610 8611 If the object addressed is not an lvalue, a temporary is created, 8612 and the address of the temporary is used. 8613 8614'INDIRECT_REF' 8615 These nodes are used to represent the object pointed to by a 8616 pointer. The operand is the pointer being dereferenced; it will 8617 always have pointer or reference type. 8618 8619'MEM_REF' 8620 These nodes are used to represent the object pointed to by a 8621 pointer offset by a constant. The first operand is the pointer 8622 being dereferenced; it will always have pointer or reference type. 8623 The second operand is a pointer constant. Its type is specifying 8624 the type to be used for type-based alias analysis. 8625 8626'COMPONENT_REF' 8627 These nodes represent non-static data member accesses. The first 8628 operand is the object (rather than a pointer to it); the second 8629 operand is the 'FIELD_DECL' for the data member. The third operand 8630 represents the byte offset of the field, but should not be used 8631 directly; call 'component_ref_field_offset' instead. 8632 8633 8634File: gccint.info, Node: Unary and Binary Expressions, Next: Vectors, Prev: Storage References, Up: Expression trees 8635 863610.6.3 Unary and Binary Expressions 8637----------------------------------- 8638 8639'NEGATE_EXPR' 8640 These nodes represent unary negation of the single operand, for 8641 both integer and floating-point types. The type of negation can be 8642 determined by looking at the type of the expression. 8643 8644 The behavior of this operation on signed arithmetic overflow is 8645 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8646 8647'ABS_EXPR' 8648 These nodes represent the absolute value of the single operand, for 8649 both integer and floating-point types. This is typically used to 8650 implement the 'abs', 'labs' and 'llabs' builtins for integer types, 8651 and the 'fabs', 'fabsf' and 'fabsl' builtins for floating point 8652 types. The type of abs operation can be determined by looking at 8653 the type of the expression. 8654 8655 This node is not used for complex types. To represent the modulus 8656 or complex abs of a complex value, use the 'BUILT_IN_CABS', 8657 'BUILT_IN_CABSF' or 'BUILT_IN_CABSL' builtins, as used to implement 8658 the C99 'cabs', 'cabsf' and 'cabsl' built-in functions. 8659 8660'BIT_NOT_EXPR' 8661 These nodes represent bitwise complement, and will always have 8662 integral type. The only operand is the value to be complemented. 8663 8664'TRUTH_NOT_EXPR' 8665 These nodes represent logical negation, and will always have 8666 integral (or boolean) type. The operand is the value being 8667 negated. The type of the operand and that of the result are always 8668 of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 8669 8670'PREDECREMENT_EXPR' 8671'PREINCREMENT_EXPR' 8672'POSTDECREMENT_EXPR' 8673'POSTINCREMENT_EXPR' 8674 These nodes represent increment and decrement expressions. The 8675 value of the single operand is computed, and the operand 8676 incremented or decremented. In the case of 'PREDECREMENT_EXPR' and 8677 'PREINCREMENT_EXPR', the value of the expression is the value 8678 resulting after the increment or decrement; in the case of 8679 'POSTDECREMENT_EXPR' and 'POSTINCREMENT_EXPR' is the value before 8680 the increment or decrement occurs. The type of the operand, like 8681 that of the result, will be either integral, boolean, or 8682 floating-point. 8683 8684'FIX_TRUNC_EXPR' 8685 These nodes represent conversion of a floating-point value to an 8686 integer. The single operand will have a floating-point type, while 8687 the complete expression will have an integral (or boolean) type. 8688 The operand is rounded towards zero. 8689 8690'FLOAT_EXPR' 8691 These nodes represent conversion of an integral (or boolean) value 8692 to a floating-point value. The single operand will have integral 8693 type, while the complete expression will have a floating-point 8694 type. 8695 8696 FIXME: How is the operand supposed to be rounded? Is this 8697 dependent on '-mieee'? 8698 8699'COMPLEX_EXPR' 8700 These nodes are used to represent complex numbers constructed from 8701 two expressions of the same (integer or real) type. The first 8702 operand is the real part and the second operand is the imaginary 8703 part. 8704 8705'CONJ_EXPR' 8706 These nodes represent the conjugate of their operand. 8707 8708'REALPART_EXPR' 8709'IMAGPART_EXPR' 8710 These nodes represent respectively the real and the imaginary parts 8711 of complex numbers (their sole argument). 8712 8713'NON_LVALUE_EXPR' 8714 These nodes indicate that their one and only operand is not an 8715 lvalue. A back end can treat these identically to the single 8716 operand. 8717 8718'NOP_EXPR' 8719 These nodes are used to represent conversions that do not require 8720 any code-generation. For example, conversion of a 'char*' to an 8721 'int*' does not require any code be generated; such a conversion is 8722 represented by a 'NOP_EXPR'. The single operand is the expression 8723 to be converted. The conversion from a pointer to a reference is 8724 also represented with a 'NOP_EXPR'. 8725 8726'CONVERT_EXPR' 8727 These nodes are similar to 'NOP_EXPR's, but are used in those 8728 situations where code may need to be generated. For example, if an 8729 'int*' is converted to an 'int' code may need to be generated on 8730 some platforms. These nodes are never used for C++-specific 8731 conversions, like conversions between pointers to different classes 8732 in an inheritance hierarchy. Any adjustments that need to be made 8733 in such cases are always indicated explicitly. Similarly, a 8734 user-defined conversion is never represented by a 'CONVERT_EXPR'; 8735 instead, the function calls are made explicit. 8736 8737'FIXED_CONVERT_EXPR' 8738 These nodes are used to represent conversions that involve 8739 fixed-point values. For example, from a fixed-point value to 8740 another fixed-point value, from an integer to a fixed-point value, 8741 from a fixed-point value to an integer, from a floating-point value 8742 to a fixed-point value, or from a fixed-point value to a 8743 floating-point value. 8744 8745'LSHIFT_EXPR' 8746'RSHIFT_EXPR' 8747 These nodes represent left and right shifts, respectively. The 8748 first operand is the value to shift; it will always be of integral 8749 type. The second operand is an expression for the number of bits 8750 by which to shift. Right shift should be treated as arithmetic, 8751 i.e., the high-order bits should be zero-filled when the expression 8752 has unsigned type and filled with the sign bit when the expression 8753 has signed type. Note that the result is undefined if the second 8754 operand is larger than or equal to the first operand's type size. 8755 Unlike most nodes, these can have a vector as first operand and a 8756 scalar as second operand. 8757 8758'BIT_IOR_EXPR' 8759'BIT_XOR_EXPR' 8760'BIT_AND_EXPR' 8761 These nodes represent bitwise inclusive or, bitwise exclusive or, 8762 and bitwise and, respectively. Both operands will always have 8763 integral type. 8764 8765'TRUTH_ANDIF_EXPR' 8766'TRUTH_ORIF_EXPR' 8767 These nodes represent logical "and" and logical "or", respectively. 8768 These operators are not strict; i.e., the second operand is 8769 evaluated only if the value of the expression is not determined by 8770 evaluation of the first operand. The type of the operands and that 8771 of the result are always of 'BOOLEAN_TYPE' or 'INTEGER_TYPE'. 8772 8773'TRUTH_AND_EXPR' 8774'TRUTH_OR_EXPR' 8775'TRUTH_XOR_EXPR' 8776 These nodes represent logical and, logical or, and logical 8777 exclusive or. They are strict; both arguments are always 8778 evaluated. There are no corresponding operators in C or C++, but 8779 the front end will sometimes generate these expressions anyhow, if 8780 it can tell that strictness does not matter. The type of the 8781 operands and that of the result are always of 'BOOLEAN_TYPE' or 8782 'INTEGER_TYPE'. 8783 8784'POINTER_PLUS_EXPR' 8785 This node represents pointer arithmetic. The first operand is 8786 always a pointer/reference type. The second operand is always an 8787 unsigned integer type compatible with sizetype. This is the only 8788 binary arithmetic operand that can operate on pointer types. 8789 8790'PLUS_EXPR' 8791'MINUS_EXPR' 8792'MULT_EXPR' 8793 These nodes represent various binary arithmetic operations. 8794 Respectively, these operations are addition, subtraction (of the 8795 second operand from the first) and multiplication. Their operands 8796 may have either integral or floating type, but there will never be 8797 case in which one operand is of floating type and the other is of 8798 integral type. 8799 8800 The behavior of these operations on signed arithmetic overflow is 8801 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8802 8803'MULT_HIGHPART_EXPR' 8804 This node represents the "high-part" of a widening multiplication. 8805 For an integral type with B bits of precision, the result is the 8806 most significant B bits of the full 2B product. 8807 8808'RDIV_EXPR' 8809 This node represents a floating point division operation. 8810 8811'TRUNC_DIV_EXPR' 8812'FLOOR_DIV_EXPR' 8813'CEIL_DIV_EXPR' 8814'ROUND_DIV_EXPR' 8815 These nodes represent integer division operations that return an 8816 integer result. 'TRUNC_DIV_EXPR' rounds towards zero, 8817 'FLOOR_DIV_EXPR' rounds towards negative infinity, 'CEIL_DIV_EXPR' 8818 rounds towards positive infinity and 'ROUND_DIV_EXPR' rounds to the 8819 closest integer. Integer division in C and C++ is truncating, i.e. 8820 'TRUNC_DIV_EXPR'. 8821 8822 The behavior of these operations on signed arithmetic overflow, 8823 when dividing the minimum signed integer by minus one, is 8824 controlled by the 'flag_wrapv' and 'flag_trapv' variables. 8825 8826'TRUNC_MOD_EXPR' 8827'FLOOR_MOD_EXPR' 8828'CEIL_MOD_EXPR' 8829'ROUND_MOD_EXPR' 8830 These nodes represent the integer remainder or modulus operation. 8831 The integer modulus of two operands 'a' and 'b' is defined as 'a - 8832 (a/b)*b' where the division calculated using the corresponding 8833 division operator. Hence for 'TRUNC_MOD_EXPR' this definition 8834 assumes division using truncation towards zero, i.e. 8835 'TRUNC_DIV_EXPR'. Integer remainder in C and C++ uses truncating 8836 division, i.e. 'TRUNC_MOD_EXPR'. 8837 8838'EXACT_DIV_EXPR' 8839 The 'EXACT_DIV_EXPR' code is used to represent integer divisions 8840 where the numerator is known to be an exact multiple of the 8841 denominator. This allows the backend to choose between the faster 8842 of 'TRUNC_DIV_EXPR', 'CEIL_DIV_EXPR' and 'FLOOR_DIV_EXPR' for the 8843 current target. 8844 8845'LT_EXPR' 8846'LE_EXPR' 8847'GT_EXPR' 8848'GE_EXPR' 8849'EQ_EXPR' 8850'NE_EXPR' 8851 These nodes represent the less than, less than or equal to, greater 8852 than, greater than or equal to, equal, and not equal comparison 8853 operators. The first and second operands will either be both of 8854 integral type, both of floating type or both of vector type. The 8855 result type of these expressions will always be of integral, 8856 boolean or signed integral vector type. These operations return 8857 the result type's zero value for false, the result type's one value 8858 for true, and a vector whose elements are zero (false) or minus one 8859 (true) for vectors. 8860 8861 For floating point comparisons, if we honor IEEE NaNs and either 8862 operand is NaN, then 'NE_EXPR' always returns true and the 8863 remaining operators always return false. On some targets, 8864 comparisons against an IEEE NaN, other than equality and 8865 inequality, may generate a floating point exception. 8866 8867'ORDERED_EXPR' 8868'UNORDERED_EXPR' 8869 These nodes represent non-trapping ordered and unordered comparison 8870 operators. These operations take two floating point operands and 8871 determine whether they are ordered or unordered relative to each 8872 other. If either operand is an IEEE NaN, their comparison is 8873 defined to be unordered, otherwise the comparison is defined to be 8874 ordered. The result type of these expressions will always be of 8875 integral or boolean type. These operations return the result 8876 type's zero value for false, and the result type's one value for 8877 true. 8878 8879'UNLT_EXPR' 8880'UNLE_EXPR' 8881'UNGT_EXPR' 8882'UNGE_EXPR' 8883'UNEQ_EXPR' 8884'LTGT_EXPR' 8885 These nodes represent the unordered comparison operators. These 8886 operations take two floating point operands and determine whether 8887 the operands are unordered or are less than, less than or equal to, 8888 greater than, greater than or equal to, or equal respectively. For 8889 example, 'UNLT_EXPR' returns true if either operand is an IEEE NaN 8890 or the first operand is less than the second. With the possible 8891 exception of 'LTGT_EXPR', all of these operations are guaranteed 8892 not to generate a floating point exception. The result type of 8893 these expressions will always be of integral or boolean type. 8894 These operations return the result type's zero value for false, and 8895 the result type's one value for true. 8896 8897'MODIFY_EXPR' 8898 These nodes represent assignment. The left-hand side is the first 8899 operand; the right-hand side is the second operand. The left-hand 8900 side will be a 'VAR_DECL', 'INDIRECT_REF', 'COMPONENT_REF', or 8901 other lvalue. 8902 8903 These nodes are used to represent not only assignment with '=' but 8904 also compound assignments (like '+='), by reduction to '=' 8905 assignment. In other words, the representation for 'i += 3' looks 8906 just like that for 'i = i + 3'. 8907 8908'INIT_EXPR' 8909 These nodes are just like 'MODIFY_EXPR', but are used only when a 8910 variable is initialized, rather than assigned to subsequently. 8911 This means that we can assume that the target of the initialization 8912 is not used in computing its own value; any reference to the lhs in 8913 computing the rhs is undefined. 8914 8915'COMPOUND_EXPR' 8916 These nodes represent comma-expressions. The first operand is an 8917 expression whose value is computed and thrown away prior to the 8918 evaluation of the second operand. The value of the entire 8919 expression is the value of the second operand. 8920 8921'COND_EXPR' 8922 These nodes represent '?:' expressions. The first operand is of 8923 boolean or integral type. If it evaluates to a nonzero value, the 8924 second operand should be evaluated, and returned as the value of 8925 the expression. Otherwise, the third operand is evaluated, and 8926 returned as the value of the expression. 8927 8928 The second operand must have the same type as the entire 8929 expression, unless it unconditionally throws an exception or calls 8930 a noreturn function, in which case it should have void type. The 8931 same constraints apply to the third operand. This allows array 8932 bounds checks to be represented conveniently as '(i >= 0 && i < 10) 8933 ? i : abort()'. 8934 8935 As a GNU extension, the C language front-ends allow the second 8936 operand of the '?:' operator may be omitted in the source. For 8937 example, 'x ? : 3' is equivalent to 'x ? x : 3', assuming that 'x' 8938 is an expression without side-effects. In the tree representation, 8939 however, the second operand is always present, possibly protected 8940 by 'SAVE_EXPR' if the first argument does cause side-effects. 8941 8942'CALL_EXPR' 8943 These nodes are used to represent calls to functions, including 8944 non-static member functions. 'CALL_EXPR's are implemented as 8945 expression nodes with a variable number of operands. Rather than 8946 using 'TREE_OPERAND' to extract them, it is preferable to use the 8947 specialized accessor macros and functions that operate specifically 8948 on 'CALL_EXPR' nodes. 8949 8950 'CALL_EXPR_FN' returns a pointer to the function to call; it is 8951 always an expression whose type is a 'POINTER_TYPE'. 8952 8953 The number of arguments to the call is returned by 8954 'call_expr_nargs', while the arguments themselves can be accessed 8955 with the 'CALL_EXPR_ARG' macro. The arguments are zero-indexed and 8956 numbered left-to-right. You can iterate over the arguments using 8957 'FOR_EACH_CALL_EXPR_ARG', as in: 8958 8959 tree call, arg; 8960 call_expr_arg_iterator iter; 8961 FOR_EACH_CALL_EXPR_ARG (arg, iter, call) 8962 /* arg is bound to successive arguments of call. */ 8963 ...; 8964 8965 For non-static member functions, there will be an operand 8966 corresponding to the 'this' pointer. There will always be 8967 expressions corresponding to all of the arguments, even if the 8968 function is declared with default arguments and some arguments are 8969 not explicitly provided at the call sites. 8970 8971 'CALL_EXPR's also have a 'CALL_EXPR_STATIC_CHAIN' operand that is 8972 used to implement nested functions. This operand is otherwise 8973 null. 8974 8975'CLEANUP_POINT_EXPR' 8976 These nodes represent full-expressions. The single operand is an 8977 expression to evaluate. Any destructor calls engendered by the 8978 creation of temporaries during the evaluation of that expression 8979 should be performed immediately after the expression is evaluated. 8980 8981'CONSTRUCTOR' 8982 These nodes represent the brace-enclosed initializers for a 8983 structure or an array. They contain a sequence of component values 8984 made out of a vector of constructor_elt, which is a ('INDEX', 8985 'VALUE') pair. 8986 8987 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is a 'RECORD_TYPE', 8988 'UNION_TYPE' or 'QUAL_UNION_TYPE' then the 'INDEX' of each node in 8989 the sequence will be a 'FIELD_DECL' and the 'VALUE' will be the 8990 expression used to initialize that field. 8991 8992 If the 'TREE_TYPE' of the 'CONSTRUCTOR' is an 'ARRAY_TYPE', then 8993 the 'INDEX' of each node in the sequence will be an 'INTEGER_CST' 8994 or a 'RANGE_EXPR' of two 'INTEGER_CST's. A single 'INTEGER_CST' 8995 indicates which element of the array is being assigned to. A 8996 'RANGE_EXPR' indicates an inclusive range of elements to 8997 initialize. In both cases the 'VALUE' is the corresponding 8998 initializer. It is re-evaluated for each element of a 8999 'RANGE_EXPR'. If the 'INDEX' is 'NULL_TREE', then the initializer 9000 is for the next available array element. 9001 9002 In the front end, you should not depend on the fields appearing in 9003 any particular order. However, in the middle end, fields must 9004 appear in declaration order. You should not assume that all fields 9005 will be represented. Unrepresented fields will be cleared 9006 (zeroed), unless the CONSTRUCTOR_NO_CLEARING flag is set, in which 9007 case their value becomes undefined. 9008 9009'COMPOUND_LITERAL_EXPR' 9010 These nodes represent ISO C99 compound literals. The 9011 'COMPOUND_LITERAL_EXPR_DECL_EXPR' is a 'DECL_EXPR' containing an 9012 anonymous 'VAR_DECL' for the unnamed object represented by the 9013 compound literal; the 'DECL_INITIAL' of that 'VAR_DECL' is a 9014 'CONSTRUCTOR' representing the brace-enclosed list of initializers 9015 in the compound literal. That anonymous 'VAR_DECL' can also be 9016 accessed directly by the 'COMPOUND_LITERAL_EXPR_DECL' macro. 9017 9018'SAVE_EXPR' 9019 9020 A 'SAVE_EXPR' represents an expression (possibly involving 9021 side-effects) that is used more than once. The side-effects should 9022 occur only the first time the expression is evaluated. Subsequent 9023 uses should just reuse the computed value. The first operand to 9024 the 'SAVE_EXPR' is the expression to evaluate. The side-effects 9025 should be executed where the 'SAVE_EXPR' is first encountered in a 9026 depth-first preorder traversal of the expression tree. 9027 9028'TARGET_EXPR' 9029 A 'TARGET_EXPR' represents a temporary object. The first operand 9030 is a 'VAR_DECL' for the temporary variable. The second operand is 9031 the initializer for the temporary. The initializer is evaluated 9032 and, if non-void, copied (bitwise) into the temporary. If the 9033 initializer is void, that means that it will perform the 9034 initialization itself. 9035 9036 Often, a 'TARGET_EXPR' occurs on the right-hand side of an 9037 assignment, or as the second operand to a comma-expression which is 9038 itself the right-hand side of an assignment, etc. In this case, we 9039 say that the 'TARGET_EXPR' is "normal"; otherwise, we say it is 9040 "orphaned". For a normal 'TARGET_EXPR' the temporary variable 9041 should be treated as an alias for the left-hand side of the 9042 assignment, rather than as a new temporary variable. 9043 9044 The third operand to the 'TARGET_EXPR', if present, is a 9045 cleanup-expression (i.e., destructor call) for the temporary. If 9046 this expression is orphaned, then this expression must be executed 9047 when the statement containing this expression is complete. These 9048 cleanups must always be executed in the order opposite to that in 9049 which they were encountered. Note that if a temporary is created 9050 on one branch of a conditional operator (i.e., in the second or 9051 third operand to a 'COND_EXPR'), the cleanup must be run only if 9052 that branch is actually executed. 9053 9054'VA_ARG_EXPR' 9055 This node is used to implement support for the C/C++ variable 9056 argument-list mechanism. It represents expressions like 'va_arg 9057 (ap, type)'. Its 'TREE_TYPE' yields the tree representation for 9058 'type' and its sole argument yields the representation for 'ap'. 9059 9060'ANNOTATE_EXPR' 9061 This node is used to attach markers to an expression. The first 9062 operand is the annotated expression, the second is an 'INTEGER_CST' 9063 with a value from 'enum annot_expr_kind'. 9064 9065 9066File: gccint.info, Node: Vectors, Prev: Unary and Binary Expressions, Up: Expression trees 9067 906810.6.4 Vectors 9069-------------- 9070 9071'VEC_LSHIFT_EXPR' 9072'VEC_RSHIFT_EXPR' 9073 These nodes represent whole vector left and right shifts, 9074 respectively. The first operand is the vector to shift; it will 9075 always be of vector type. The second operand is an expression for 9076 the number of bits by which to shift. Note that the result is 9077 undefined if the second operand is larger than or equal to the 9078 first operand's type size. 9079 9080'VEC_WIDEN_MULT_HI_EXPR' 9081'VEC_WIDEN_MULT_LO_EXPR' 9082 These nodes represent widening vector multiplication of the high 9083 and low parts of the two input vectors, respectively. Their 9084 operands are vectors that contain the same number of elements ('N') 9085 of the same integral type. The result is a vector that contains 9086 half as many elements, of an integral type whose size is twice as 9087 wide. In the case of 'VEC_WIDEN_MULT_HI_EXPR' the high 'N/2' 9088 elements of the two vector are multiplied to produce the vector of 9089 'N/2' products. In the case of 'VEC_WIDEN_MULT_LO_EXPR' the low 9090 'N/2' elements of the two vector are multiplied to produce the 9091 vector of 'N/2' products. 9092 9093'VEC_UNPACK_HI_EXPR' 9094'VEC_UNPACK_LO_EXPR' 9095 These nodes represent unpacking of the high and low parts of the 9096 input vector, respectively. The single operand is a vector that 9097 contains 'N' elements of the same integral or floating point type. 9098 The result is a vector that contains half as many elements, of an 9099 integral or floating point type whose size is twice as wide. In 9100 the case of 'VEC_UNPACK_HI_EXPR' the high 'N/2' elements of the 9101 vector are extracted and widened (promoted). In the case of 9102 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the vector are 9103 extracted and widened (promoted). 9104 9105'VEC_UNPACK_FLOAT_HI_EXPR' 9106'VEC_UNPACK_FLOAT_LO_EXPR' 9107 These nodes represent unpacking of the high and low parts of the 9108 input vector, where the values are converted from fixed point to 9109 floating point. The single operand is a vector that contains 'N' 9110 elements of the same integral type. The result is a vector that 9111 contains half as many elements of a floating point type whose size 9112 is twice as wide. In the case of 'VEC_UNPACK_HI_EXPR' the high 9113 'N/2' elements of the vector are extracted, converted and widened. 9114 In the case of 'VEC_UNPACK_LO_EXPR' the low 'N/2' elements of the 9115 vector are extracted, converted and widened. 9116 9117'VEC_PACK_TRUNC_EXPR' 9118 This node represents packing of truncated elements of the two input 9119 vectors into the output vector. Input operands are vectors that 9120 contain the same number of elements of the same integral or 9121 floating point type. The result is a vector that contains twice as 9122 many elements of an integral or floating point type whose size is 9123 half as wide. The elements of the two vectors are demoted and 9124 merged (concatenated) to form the output vector. 9125 9126'VEC_PACK_SAT_EXPR' 9127 This node represents packing of elements of the two input vectors 9128 into the output vector using saturation. Input operands are 9129 vectors that contain the same number of elements of the same 9130 integral type. The result is a vector that contains twice as many 9131 elements of an integral type whose size is half as wide. The 9132 elements of the two vectors are demoted and merged (concatenated) 9133 to form the output vector. 9134 9135'VEC_PACK_FIX_TRUNC_EXPR' 9136 This node represents packing of elements of the two input vectors 9137 into the output vector, where the values are converted from 9138 floating point to fixed point. Input operands are vectors that 9139 contain the same number of elements of a floating point type. The 9140 result is a vector that contains twice as many elements of an 9141 integral type whose size is half as wide. The elements of the two 9142 vectors are merged (concatenated) to form the output vector. 9143 9144'VEC_COND_EXPR' 9145 These nodes represent '?:' expressions. The three operands must be 9146 vectors of the same size and number of elements. The second and 9147 third operands must have the same type as the entire expression. 9148 The first operand is of signed integral vector type. If an element 9149 of the first operand evaluates to a zero value, the corresponding 9150 element of the result is taken from the third operand. If it 9151 evaluates to a minus one value, it is taken from the second 9152 operand. It should never evaluate to any other value currently, 9153 but optimizations should not rely on that property. In contrast 9154 with a 'COND_EXPR', all operands are always evaluated. 9155 9156'SAD_EXPR' 9157 This node represents the Sum of Absolute Differences operation. 9158 The three operands must be vectors of integral types. The first 9159 and second operand must have the same type. The size of the vector 9160 element of the third operand must be at lease twice of the size of 9161 the vector element of the first and second one. The SAD is 9162 calculated between the first and second operands, added to the 9163 third operand, and returned. 9164 9165 9166File: gccint.info, Node: Statements, Next: Functions, Prev: Expression trees, Up: GENERIC 9167 916810.7 Statements 9169=============== 9170 9171Most statements in GIMPLE are assignment statements, represented by 9172'GIMPLE_ASSIGN'. No other C expressions can appear at statement level; 9173a reference to a volatile object is converted into a 'GIMPLE_ASSIGN'. 9174 9175 There are also several varieties of complex statements. 9176 9177* Menu: 9178 9179* Basic Statements:: 9180* Blocks:: 9181* Statement Sequences:: 9182* Empty Statements:: 9183* Jumps:: 9184* Cleanups:: 9185* OpenMP:: 9186* OpenACC:: 9187 9188 9189File: gccint.info, Node: Basic Statements, Next: Blocks, Up: Statements 9190 919110.7.1 Basic Statements 9192----------------------- 9193 9194'ASM_EXPR' 9195 9196 Used to represent an inline assembly statement. For an inline 9197 assembly statement like: 9198 asm ("mov x, y"); 9199 The 'ASM_STRING' macro will return a 'STRING_CST' node for '"mov x, 9200 y"'. If the original statement made use of the extended-assembly 9201 syntax, then 'ASM_OUTPUTS', 'ASM_INPUTS', and 'ASM_CLOBBERS' will 9202 be the outputs, inputs, and clobbers for the statement, represented 9203 as 'STRING_CST' nodes. The extended-assembly syntax looks like: 9204 asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); 9205 The first string is the 'ASM_STRING', containing the instruction 9206 template. The next two strings are the output and inputs, 9207 respectively; this statement has no clobbers. As this example 9208 indicates, "plain" assembly statements are merely a special case of 9209 extended assembly statements; they have no cv-qualifiers, outputs, 9210 inputs, or clobbers. All of the strings will be 'NUL'-terminated, 9211 and will contain no embedded 'NUL'-characters. 9212 9213 If the assembly statement is declared 'volatile', or if the 9214 statement was not an extended assembly statement, and is therefore 9215 implicitly volatile, then the predicate 'ASM_VOLATILE_P' will hold 9216 of the 'ASM_EXPR'. 9217 9218'DECL_EXPR' 9219 9220 Used to represent a local declaration. The 'DECL_EXPR_DECL' macro 9221 can be used to obtain the entity declared. This declaration may be 9222 a 'LABEL_DECL', indicating that the label declared is a local 9223 label. (As an extension, GCC allows the declaration of labels with 9224 scope.) In C, this declaration may be a 'FUNCTION_DECL', 9225 indicating the use of the GCC nested function extension. For more 9226 information, *note Functions::. 9227 9228'LABEL_EXPR' 9229 9230 Used to represent a label. The 'LABEL_DECL' declared by this 9231 statement can be obtained with the 'LABEL_EXPR_LABEL' macro. The 9232 'IDENTIFIER_NODE' giving the name of the label can be obtained from 9233 the 'LABEL_DECL' with 'DECL_NAME'. 9234 9235'GOTO_EXPR' 9236 9237 Used to represent a 'goto' statement. The 'GOTO_DESTINATION' will 9238 usually be a 'LABEL_DECL'. However, if the "computed goto" 9239 extension has been used, the 'GOTO_DESTINATION' will be an 9240 arbitrary expression indicating the destination. This expression 9241 will always have pointer type. 9242 9243'RETURN_EXPR' 9244 9245 Used to represent a 'return' statement. Operand 0 represents the 9246 value to return. It should either be the 'RESULT_DECL' for the 9247 containing function, or a 'MODIFY_EXPR' or 'INIT_EXPR' setting the 9248 function's 'RESULT_DECL'. It will be 'NULL_TREE' if the statement 9249 was just 9250 return; 9251 9252'LOOP_EXPR' 9253 These nodes represent "infinite" loops. The 'LOOP_EXPR_BODY' 9254 represents the body of the loop. It should be executed forever, 9255 unless an 'EXIT_EXPR' is encountered. 9256 9257'EXIT_EXPR' 9258 These nodes represent conditional exits from the nearest enclosing 9259 'LOOP_EXPR'. The single operand is the condition; if it is 9260 nonzero, then the loop should be exited. An 'EXIT_EXPR' will only 9261 appear within a 'LOOP_EXPR'. 9262 9263'SWITCH_STMT' 9264 9265 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 9266 the expression on which the switch is occurring. See the 9267 documentation for an 'IF_STMT' for more information on the 9268 representation used for the condition. The 'SWITCH_STMT_BODY' is 9269 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 9270 original type of switch expression as given in the source, before 9271 any compiler conversions. 9272 9273'CASE_LABEL_EXPR' 9274 9275 Use to represent a 'case' label, range of 'case' labels, or a 9276 'default' label. If 'CASE_LOW' is 'NULL_TREE', then this is a 9277 'default' label. Otherwise, if 'CASE_HIGH' is 'NULL_TREE', then 9278 this is an ordinary 'case' label. In this case, 'CASE_LOW' is an 9279 expression giving the value of the label. Both 'CASE_LOW' and 9280 'CASE_HIGH' are 'INTEGER_CST' nodes. These values will have the 9281 same type as the condition expression in the switch statement. 9282 9283 Otherwise, if both 'CASE_LOW' and 'CASE_HIGH' are defined, the 9284 statement is a range of case labels. Such statements originate 9285 with the extension that allows users to write things of the form: 9286 case 2 ... 5: 9287 The first value will be 'CASE_LOW', while the second will be 9288 'CASE_HIGH'. 9289 9290 9291File: gccint.info, Node: Blocks, Next: Statement Sequences, Prev: Basic Statements, Up: Statements 9292 929310.7.2 Blocks 9294------------- 9295 9296Block scopes and the variables they declare in GENERIC are expressed 9297using the 'BIND_EXPR' code, which in previous versions of GCC was 9298primarily used for the C statement-expression extension. 9299 9300 Variables in a block are collected into 'BIND_EXPR_VARS' in declaration 9301order through their 'TREE_CHAIN' field. Any runtime initialization is 9302moved out of 'DECL_INITIAL' and into a statement in the controlled 9303block. When gimplifying from C or C++, this initialization replaces the 9304'DECL_STMT'. These variables will never require cleanups. The scope of 9305these variables is just the body 9306 9307 Variable-length arrays (VLAs) complicate this process, as their size 9308often refers to variables initialized earlier in the block and their 9309initialization involves an explicit stack allocation. To handle this, 9310we add an indirection and replace them with a pointer to stack space 9311allocated by means of 'alloca'. In most cases, we also arrange for this 9312space to be reclaimed when the enclosing 'BIND_EXPR' is exited, the 9313exception to this being when there is an explicit call to 'alloca' in 9314the source code, in which case the stack is left depressed on exit of 9315the 'BIND_EXPR'. 9316 9317 A C++ program will usually contain more 'BIND_EXPR's than there are 9318syntactic blocks in the source code, since several C++ constructs have 9319implicit scopes associated with them. On the other hand, although the 9320C++ front end uses pseudo-scopes to handle cleanups for objects with 9321destructors, these don't translate into the GIMPLE form; multiple 9322declarations at the same level use the same 'BIND_EXPR'. 9323 9324 9325File: gccint.info, Node: Statement Sequences, Next: Empty Statements, Prev: Blocks, Up: Statements 9326 932710.7.3 Statement Sequences 9328-------------------------- 9329 9330Multiple statements at the same nesting level are collected into a 9331'STATEMENT_LIST'. Statement lists are modified and traversed using the 9332interface in 'tree-iterator.h'. 9333 9334 9335File: gccint.info, Node: Empty Statements, Next: Jumps, Prev: Statement Sequences, Up: Statements 9336 933710.7.4 Empty Statements 9338----------------------- 9339 9340Whenever possible, statements with no effect are discarded. But if they 9341are nested within another construct which cannot be discarded for some 9342reason, they are instead replaced with an empty statement, generated by 9343'build_empty_stmt'. Initially, all empty statements were shared, after 9344the pattern of the Java front end, but this caused a lot of trouble in 9345practice. 9346 9347 An empty statement is represented as '(void)0'. 9348 9349 9350File: gccint.info, Node: Jumps, Next: Cleanups, Prev: Empty Statements, Up: Statements 9351 935210.7.5 Jumps 9353------------ 9354 9355Other jumps are expressed by either 'GOTO_EXPR' or 'RETURN_EXPR'. 9356 9357 The operand of a 'GOTO_EXPR' must be either a label or a variable 9358containing the address to jump to. 9359 9360 The operand of a 'RETURN_EXPR' is either 'NULL_TREE', 'RESULT_DECL', or 9361a 'MODIFY_EXPR' which sets the return value. It would be nice to move 9362the 'MODIFY_EXPR' into a separate statement, but the special return 9363semantics in 'expand_return' make that difficult. It may still happen 9364in the future, perhaps by moving most of that logic into 9365'expand_assignment'. 9366 9367 9368File: gccint.info, Node: Cleanups, Next: OpenMP, Prev: Jumps, Up: Statements 9369 937010.7.6 Cleanups 9371--------------- 9372 9373Destructors for local C++ objects and similar dynamic cleanups are 9374represented in GIMPLE by a 'TRY_FINALLY_EXPR'. 'TRY_FINALLY_EXPR' has 9375two operands, both of which are a sequence of statements to execute. 9376The first sequence is executed. When it completes the second sequence 9377is executed. 9378 9379 The first sequence may complete in the following ways: 9380 9381 1. Execute the last statement in the sequence and fall off the end. 9382 9383 2. Execute a goto statement ('GOTO_EXPR') to an ordinary label outside 9384 the sequence. 9385 9386 3. Execute a return statement ('RETURN_EXPR'). 9387 9388 4. Throw an exception. This is currently not explicitly represented 9389 in GIMPLE. 9390 9391 The second sequence is not executed if the first sequence completes by 9392calling 'setjmp' or 'exit' or any other function that does not return. 9393The second sequence is also not executed if the first sequence completes 9394via a non-local goto or a computed goto (in general the compiler does 9395not know whether such a goto statement exits the first sequence or not, 9396so we assume that it doesn't). 9397 9398 After the second sequence is executed, if it completes normally by 9399falling off the end, execution continues wherever the first sequence 9400would have continued, by falling off the end, or doing a goto, etc. 9401 9402 'TRY_FINALLY_EXPR' complicates the flow graph, since the cleanup needs 9403to appear on every edge out of the controlled block; this reduces the 9404freedom to move code across these edges. Therefore, the EH lowering 9405pass which runs before most of the optimization passes eliminates these 9406expressions by explicitly adding the cleanup to each edge. Rethrowing 9407the exception is represented using 'RESX_EXPR'. 9408 9409 9410File: gccint.info, Node: OpenMP, Next: OpenACC, Prev: Cleanups, Up: Statements 9411 941210.7.7 OpenMP 9413------------- 9414 9415All the statements starting with 'OMP_' represent directives and clauses 9416used by the OpenMP API <http://www.openmp.org/>. 9417 9418'OMP_PARALLEL' 9419 9420 Represents '#pragma omp parallel [clause1 ... clauseN]'. It has 9421 four operands: 9422 9423 Operand 'OMP_PARALLEL_BODY' is valid while in GENERIC and High 9424 GIMPLE forms. It contains the body of code to be executed by all 9425 the threads. During GIMPLE lowering, this operand becomes 'NULL' 9426 and the body is emitted linearly after 'OMP_PARALLEL'. 9427 9428 Operand 'OMP_PARALLEL_CLAUSES' is the list of clauses associated 9429 with the directive. 9430 9431 Operand 'OMP_PARALLEL_FN' is created by 'pass_lower_omp', it 9432 contains the 'FUNCTION_DECL' for the function that will contain the 9433 body of the parallel region. 9434 9435 Operand 'OMP_PARALLEL_DATA_ARG' is also created by 9436 'pass_lower_omp'. If there are shared variables to be communicated 9437 to the children threads, this operand will contain the 'VAR_DECL' 9438 that contains all the shared values and variables. 9439 9440'OMP_FOR' 9441 9442 Represents '#pragma omp for [clause1 ... clauseN]'. It has six 9443 operands: 9444 9445 Operand 'OMP_FOR_BODY' contains the loop body. 9446 9447 Operand 'OMP_FOR_CLAUSES' is the list of clauses associated with 9448 the directive. 9449 9450 Operand 'OMP_FOR_INIT' is the loop initialization code of the form 9451 'VAR = N1'. 9452 9453 Operand 'OMP_FOR_COND' is the loop conditional expression of the 9454 form 'VAR {<,>,<=,>=} N2'. 9455 9456 Operand 'OMP_FOR_INCR' is the loop index increment of the form 'VAR 9457 {+=,-=} INCR'. 9458 9459 Operand 'OMP_FOR_PRE_BODY' contains side-effect code from operands 9460 'OMP_FOR_INIT', 'OMP_FOR_COND' and 'OMP_FOR_INC'. These 9461 side-effects are part of the 'OMP_FOR' block but must be evaluated 9462 before the start of loop body. 9463 9464 The loop index variable 'VAR' must be a signed integer variable, 9465 which is implicitly private to each thread. Bounds 'N1' and 'N2' 9466 and the increment expression 'INCR' are required to be loop 9467 invariant integer expressions that are evaluated without any 9468 synchronization. The evaluation order, frequency of evaluation and 9469 side-effects are unspecified by the standard. 9470 9471'OMP_SECTIONS' 9472 9473 Represents '#pragma omp sections [clause1 ... clauseN]'. 9474 9475 Operand 'OMP_SECTIONS_BODY' contains the sections body, which in 9476 turn contains a set of 'OMP_SECTION' nodes for each of the 9477 concurrent sections delimited by '#pragma omp section'. 9478 9479 Operand 'OMP_SECTIONS_CLAUSES' is the list of clauses associated 9480 with the directive. 9481 9482'OMP_SECTION' 9483 9484 Section delimiter for 'OMP_SECTIONS'. 9485 9486'OMP_SINGLE' 9487 9488 Represents '#pragma omp single'. 9489 9490 Operand 'OMP_SINGLE_BODY' contains the body of code to be executed 9491 by a single thread. 9492 9493 Operand 'OMP_SINGLE_CLAUSES' is the list of clauses associated with 9494 the directive. 9495 9496'OMP_MASTER' 9497 9498 Represents '#pragma omp master'. 9499 9500 Operand 'OMP_MASTER_BODY' contains the body of code to be executed 9501 by the master thread. 9502 9503'OMP_ORDERED' 9504 9505 Represents '#pragma omp ordered'. 9506 9507 Operand 'OMP_ORDERED_BODY' contains the body of code to be executed 9508 in the sequential order dictated by the loop index variable. 9509 9510'OMP_CRITICAL' 9511 9512 Represents '#pragma omp critical [name]'. 9513 9514 Operand 'OMP_CRITICAL_BODY' is the critical section. 9515 9516 Operand 'OMP_CRITICAL_NAME' is an optional identifier to label the 9517 critical section. 9518 9519'OMP_RETURN' 9520 9521 This does not represent any OpenMP directive, it is an artificial 9522 marker to indicate the end of the body of an OpenMP. It is used by 9523 the flow graph ('tree-cfg.c') and OpenMP region building code 9524 ('omp-low.c'). 9525 9526'OMP_CONTINUE' 9527 9528 Similarly, this instruction does not represent an OpenMP directive, 9529 it is used by 'OMP_FOR' (and similar codes) as well as 9530 'OMP_SECTIONS' to mark the place where the code needs to loop to 9531 the next iteration, or the next section, respectively. 9532 9533 In some cases, 'OMP_CONTINUE' is placed right before 'OMP_RETURN'. 9534 But if there are cleanups that need to occur right after the 9535 looping body, it will be emitted between 'OMP_CONTINUE' and 9536 'OMP_RETURN'. 9537 9538'OMP_ATOMIC' 9539 9540 Represents '#pragma omp atomic'. 9541 9542 Operand 0 is the address at which the atomic operation is to be 9543 performed. 9544 9545 Operand 1 is the expression to evaluate. The gimplifier tries 9546 three alternative code generation strategies. Whenever possible, 9547 an atomic update built-in is used. If that fails, a 9548 compare-and-swap loop is attempted. If that also fails, a regular 9549 critical section around the expression is used. 9550 9551'OMP_CLAUSE' 9552 9553 Represents clauses associated with one of the 'OMP_' directives. 9554 Clauses are represented by separate subcodes defined in 'tree.h'. 9555 Clauses codes can be one of: 'OMP_CLAUSE_PRIVATE', 9556 'OMP_CLAUSE_SHARED', 'OMP_CLAUSE_FIRSTPRIVATE', 9557 'OMP_CLAUSE_LASTPRIVATE', 'OMP_CLAUSE_COPYIN', 9558 'OMP_CLAUSE_COPYPRIVATE', 'OMP_CLAUSE_IF', 9559 'OMP_CLAUSE_NUM_THREADS', 'OMP_CLAUSE_SCHEDULE', 9560 'OMP_CLAUSE_NOWAIT', 'OMP_CLAUSE_ORDERED', 'OMP_CLAUSE_DEFAULT', 9561 'OMP_CLAUSE_REDUCTION', 'OMP_CLAUSE_COLLAPSE', 'OMP_CLAUSE_UNTIED', 9562 'OMP_CLAUSE_FINAL', and 'OMP_CLAUSE_MERGEABLE'. Each code 9563 represents the corresponding OpenMP clause. 9564 9565 Clauses associated with the same directive are chained together via 9566 'OMP_CLAUSE_CHAIN'. Those clauses that accept a list of variables 9567 are restricted to exactly one, accessed with 'OMP_CLAUSE_VAR'. 9568 Therefore, multiple variables under the same clause 'C' need to be 9569 represented as multiple 'C' clauses chained together. This 9570 facilitates adding new clauses during compilation. 9571 9572 9573File: gccint.info, Node: OpenACC, Prev: OpenMP, Up: Statements 9574 957510.7.8 OpenACC 9576-------------- 9577 9578All the statements starting with 'OACC_' represent directives and 9579clauses used by the OpenACC API <http://www.openacc.org/>. 9580 9581'OACC_CACHE' 9582 9583 Represents '#pragma acc cache (var ...)'. 9584 9585'OACC_DATA' 9586 9587 Represents '#pragma acc data [clause1 ... clauseN]'. 9588 9589'OACC_DECLARE' 9590 9591 Represents '#pragma acc declare [clause1 ... clauseN]'. 9592 9593'OACC_ENTER_DATA' 9594 9595 Represents '#pragma acc enter data [clause1 ... clauseN]'. 9596 9597'OACC_EXIT_DATA' 9598 9599 Represents '#pragma acc exit data [clause1 ... clauseN]'. 9600 9601'OACC_HOST_DATA' 9602 9603 Represents '#pragma acc host_data [clause1 ... clauseN]'. 9604 9605'OACC_KERNELS' 9606 9607 Represents '#pragma acc kernels [clause1 ... clauseN]'. 9608 9609'OACC_LOOP' 9610 9611 Represents '#pragma acc loop [clause1 ... clauseN]'. 9612 9613 See the description of the 'OMP_FOR' code. 9614 9615'OACC_PARALLEL' 9616 9617 Represents '#pragma acc parallel [clause1 ... clauseN]'. 9618 9619'OACC_UPDATE' 9620 9621 Represents '#pragma acc update [clause1 ... clauseN]'. 9622 9623 9624File: gccint.info, Node: Functions, Next: Language-dependent trees, Prev: Statements, Up: GENERIC 9625 962610.8 Functions 9627============== 9628 9629A function is represented by a 'FUNCTION_DECL' node. It stores the 9630basic pieces of the function such as body, parameters, and return type 9631as well as information on the surrounding context, visibility, and 9632linkage. 9633 9634* Menu: 9635 9636* Function Basics:: Function names, body, and parameters. 9637* Function Properties:: Context, linkage, etc. 9638 9639 9640File: gccint.info, Node: Function Basics, Next: Function Properties, Up: Functions 9641 964210.8.1 Function Basics 9643---------------------- 9644 9645A function has four core parts: the name, the parameters, the result, 9646and the body. The following macros and functions access these parts of 9647a 'FUNCTION_DECL' as well as other basic features: 9648'DECL_NAME' 9649 This macro returns the unqualified name of the function, as an 9650 'IDENTIFIER_NODE'. For an instantiation of a function template, 9651 the 'DECL_NAME' is the unqualified name of the template, not 9652 something like 'f<int>'. The value of 'DECL_NAME' is undefined 9653 when used on a constructor, destructor, overloaded operator, or 9654 type-conversion operator, or any function that is implicitly 9655 generated by the compiler. See below for macros that can be used 9656 to distinguish these cases. 9657 9658'DECL_ASSEMBLER_NAME' 9659 This macro returns the mangled name of the function, also an 9660 'IDENTIFIER_NODE'. This name does not contain leading underscores 9661 on systems that prefix all identifiers with underscores. The 9662 mangled name is computed in the same way on all platforms; if 9663 special processing is required to deal with the object file format 9664 used on a particular platform, it is the responsibility of the back 9665 end to perform those modifications. (Of course, the back end 9666 should not modify 'DECL_ASSEMBLER_NAME' itself.) 9667 9668 Using 'DECL_ASSEMBLER_NAME' will cause additional memory to be 9669 allocated (for the mangled name of the entity) so it should be used 9670 only when emitting assembly code. It should not be used within the 9671 optimizers to determine whether or not two declarations are the 9672 same, even though some of the existing optimizers do use it in that 9673 way. These uses will be removed over time. 9674 9675'DECL_ARGUMENTS' 9676 This macro returns the 'PARM_DECL' for the first argument to the 9677 function. Subsequent 'PARM_DECL' nodes can be obtained by 9678 following the 'TREE_CHAIN' links. 9679 9680'DECL_RESULT' 9681 This macro returns the 'RESULT_DECL' for the function. 9682 9683'DECL_SAVED_TREE' 9684 This macro returns the complete body of the function. 9685 9686'TREE_TYPE' 9687 This macro returns the 'FUNCTION_TYPE' or 'METHOD_TYPE' for the 9688 function. 9689 9690'DECL_INITIAL' 9691 A function that has a definition in the current translation unit 9692 will have a non-'NULL' 'DECL_INITIAL'. However, back ends should 9693 not make use of the particular value given by 'DECL_INITIAL'. 9694 9695 It should contain a tree of 'BLOCK' nodes that mirrors the scopes 9696 that variables are bound in the function. Each block contains a 9697 list of decls declared in a basic block, a pointer to a chain of 9698 blocks at the next lower scope level, then a pointer to the next 9699 block at the same level and a backpointer to the parent 'BLOCK' or 9700 'FUNCTION_DECL'. So given a function as follows: 9701 9702 void foo() 9703 { 9704 int a; 9705 { 9706 int b; 9707 } 9708 int c; 9709 } 9710 9711 you would get the following: 9712 9713 tree foo = FUNCTION_DECL; 9714 tree decl_a = VAR_DECL; 9715 tree decl_b = VAR_DECL; 9716 tree decl_c = VAR_DECL; 9717 tree block_a = BLOCK; 9718 tree block_b = BLOCK; 9719 tree block_c = BLOCK; 9720 BLOCK_VARS(block_a) = decl_a; 9721 BLOCK_SUBBLOCKS(block_a) = block_b; 9722 BLOCK_CHAIN(block_a) = block_c; 9723 BLOCK_SUPERCONTEXT(block_a) = foo; 9724 BLOCK_VARS(block_b) = decl_b; 9725 BLOCK_SUPERCONTEXT(block_b) = block_a; 9726 BLOCK_VARS(block_c) = decl_c; 9727 BLOCK_SUPERCONTEXT(block_c) = foo; 9728 DECL_INITIAL(foo) = block_a; 9729 9730 9731File: gccint.info, Node: Function Properties, Prev: Function Basics, Up: Functions 9732 973310.8.2 Function Properties 9734-------------------------- 9735 9736To determine the scope of a function, you can use the 'DECL_CONTEXT' 9737macro. This macro will return the class (either a 'RECORD_TYPE' or a 9738'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 9739a member. For a virtual function, this macro returns the class in which 9740the function was actually defined, not the base class in which the 9741virtual declaration occurred. 9742 9743 In C, the 'DECL_CONTEXT' for a function maybe another function. This 9744representation indicates that the GNU nested function extension is in 9745use. For details on the semantics of nested functions, see the GCC 9746Manual. The nested function can refer to local variables in its 9747containing function. Such references are not explicitly marked in the 9748tree structure; back ends must look at the 'DECL_CONTEXT' for the 9749referenced 'VAR_DECL'. If the 'DECL_CONTEXT' for the referenced 9750'VAR_DECL' is not the same as the function currently being processed, 9751and neither 'DECL_EXTERNAL' nor 'TREE_STATIC' hold, then the reference 9752is to a local variable in a containing function, and the back end must 9753take appropriate action. 9754 9755'DECL_EXTERNAL' 9756 This predicate holds if the function is undefined. 9757 9758'TREE_PUBLIC' 9759 This predicate holds if the function has external linkage. 9760 9761'TREE_STATIC' 9762 This predicate holds if the function has been defined. 9763 9764'TREE_THIS_VOLATILE' 9765 This predicate holds if the function does not return normally. 9766 9767'TREE_READONLY' 9768 This predicate holds if the function can only read its arguments. 9769 9770'DECL_PURE_P' 9771 This predicate holds if the function can only read its arguments, 9772 but may also read global memory. 9773 9774'DECL_VIRTUAL_P' 9775 This predicate holds if the function is virtual. 9776 9777'DECL_ARTIFICIAL' 9778 This macro holds if the function was implicitly generated by the 9779 compiler, rather than explicitly declared. In addition to 9780 implicitly generated class member functions, this macro holds for 9781 the special functions created to implement static initialization 9782 and destruction, to compute run-time type information, and so 9783 forth. 9784 9785'DECL_FUNCTION_SPECIFIC_TARGET' 9786 This macro returns a tree node that holds the target options that 9787 are to be used to compile this particular function or 'NULL_TREE' 9788 if the function is to be compiled with the target options specified 9789 on the command line. 9790 9791'DECL_FUNCTION_SPECIFIC_OPTIMIZATION' 9792 This macro returns a tree node that holds the optimization options 9793 that are to be used to compile this particular function or 9794 'NULL_TREE' if the function is to be compiled with the optimization 9795 options specified on the command line. 9796 9797 9798File: gccint.info, Node: Language-dependent trees, Next: C and C++ Trees, Prev: Functions, Up: GENERIC 9799 980010.9 Language-dependent trees 9801============================= 9802 9803Front ends may wish to keep some state associated with various GENERIC 9804trees while parsing. To support this, trees provide a set of flags that 9805may be used by the front end. They are accessed using 9806'TREE_LANG_FLAG_n' where 'n' is currently 0 through 6. 9807 9808 If necessary, a front end can use some language-dependent tree codes in 9809its GENERIC representation, so long as it provides a hook for converting 9810them to GIMPLE and doesn't expect them to work with any (hypothetical) 9811optimizers that run before the conversion to GIMPLE. The intermediate 9812representation used while parsing C and C++ looks very little like 9813GENERIC, but the C and C++ gimplifier hooks are perfectly happy to take 9814it as input and spit out GIMPLE. 9815 9816 9817File: gccint.info, Node: C and C++ Trees, Next: Java Trees, Prev: Language-dependent trees, Up: GENERIC 9818 981910.10 C and C++ Trees 9820===================== 9821 9822This section documents the internal representation used by GCC to 9823represent C and C++ source programs. When presented with a C or C++ 9824source program, GCC parses the program, performs semantic analysis 9825(including the generation of error messages), and then produces the 9826internal representation described here. This representation contains a 9827complete representation for the entire translation unit provided as 9828input to the front end. This representation is then typically processed 9829by a code-generator in order to produce machine code, but could also be 9830used in the creation of source browsers, intelligent editors, automatic 9831documentation generators, interpreters, and any other programs needing 9832the ability to process C or C++ code. 9833 9834 This section explains the internal representation. In particular, it 9835documents the internal representation for C and C++ source constructs, 9836and the macros, functions, and variables that can be used to access 9837these constructs. The C++ representation is largely a superset of the 9838representation used in the C front end. There is only one construct 9839used in C that does not appear in the C++ front end and that is the GNU 9840"nested function" extension. Many of the macros documented here do not 9841apply in C because the corresponding language constructs do not appear 9842in C. 9843 9844 The C and C++ front ends generate a mix of GENERIC trees and ones 9845specific to C and C++. These language-specific trees are higher-level 9846constructs than the ones in GENERIC to make the parser's job easier. 9847This section describes those trees that aren't part of GENERIC as well 9848as aspects of GENERIC trees that are treated in a language-specific 9849manner. 9850 9851 If you are developing a "back end", be it is a code-generator or some 9852other tool, that uses this representation, you may occasionally find 9853that you need to ask questions not easily answered by the functions and 9854macros available here. If that situation occurs, it is quite likely 9855that GCC already supports the functionality you desire, but that the 9856interface is simply not documented here. In that case, you should ask 9857the GCC maintainers (via mail to <gcc@gcc.gnu.org>) about documenting 9858the functionality you require. Similarly, if you find yourself writing 9859functions that do not deal directly with your back end, but instead 9860might be useful to other people using the GCC front end, you should 9861submit your patches for inclusion in GCC. 9862 9863* Menu: 9864 9865* Types for C++:: Fundamental and aggregate types. 9866* Namespaces:: Namespaces. 9867* Classes:: Classes. 9868* Functions for C++:: Overloading and accessors for C++. 9869* Statements for C++:: Statements specific to C and C++. 9870* C++ Expressions:: From 'typeid' to 'throw'. 9871 9872 9873File: gccint.info, Node: Types for C++, Next: Namespaces, Up: C and C++ Trees 9874 987510.10.1 Types for C++ 9876--------------------- 9877 9878In C++, an array type is not qualified; rather the type of the array 9879elements is qualified. This situation is reflected in the intermediate 9880representation. The macros described here will always examine the 9881qualification of the underlying element type when applied to an array 9882type. (If the element type is itself an array, then the recursion 9883continues until a non-array type is found, and the qualification of this 9884type is examined.) So, for example, 'CP_TYPE_CONST_P' will hold of the 9885type 'const int ()[7]', denoting an array of seven 'int's. 9886 9887 The following functions and macros deal with cv-qualification of types: 9888'cp_type_quals' 9889 This function returns the set of type qualifiers applied to this 9890 type. This value is 'TYPE_UNQUALIFIED' if no qualifiers have been 9891 applied. The 'TYPE_QUAL_CONST' bit is set if the type is 9892 'const'-qualified. The 'TYPE_QUAL_VOLATILE' bit is set if the type 9893 is 'volatile'-qualified. The 'TYPE_QUAL_RESTRICT' bit is set if 9894 the type is 'restrict'-qualified. 9895 9896'CP_TYPE_CONST_P' 9897 This macro holds if the type is 'const'-qualified. 9898 9899'CP_TYPE_VOLATILE_P' 9900 This macro holds if the type is 'volatile'-qualified. 9901 9902'CP_TYPE_RESTRICT_P' 9903 This macro holds if the type is 'restrict'-qualified. 9904 9905'CP_TYPE_CONST_NON_VOLATILE_P' 9906 This predicate holds for a type that is 'const'-qualified, but 9907 _not_ 'volatile'-qualified; other cv-qualifiers are ignored as 9908 well: only the 'const'-ness is tested. 9909 9910 A few other macros and functions are usable with all types: 9911'TYPE_SIZE' 9912 The number of bits required to represent the type, represented as 9913 an 'INTEGER_CST'. For an incomplete type, 'TYPE_SIZE' will be 9914 'NULL_TREE'. 9915 9916'TYPE_ALIGN' 9917 The alignment of the type, in bits, represented as an 'int'. 9918 9919'TYPE_NAME' 9920 This macro returns a declaration (in the form of a 'TYPE_DECL') for 9921 the type. (Note this macro does _not_ return an 'IDENTIFIER_NODE', 9922 as you might expect, given its name!) You can look at the 9923 'DECL_NAME' of the 'TYPE_DECL' to obtain the actual name of the 9924 type. The 'TYPE_NAME' will be 'NULL_TREE' for a type that is not a 9925 built-in type, the result of a typedef, or a named class type. 9926 9927'CP_INTEGRAL_TYPE' 9928 This predicate holds if the type is an integral type. Notice that 9929 in C++, enumerations are _not_ integral types. 9930 9931'ARITHMETIC_TYPE_P' 9932 This predicate holds if the type is an integral type (in the C++ 9933 sense) or a floating point type. 9934 9935'CLASS_TYPE_P' 9936 This predicate holds for a class-type. 9937 9938'TYPE_BUILT_IN' 9939 This predicate holds for a built-in type. 9940 9941'TYPE_PTRDATAMEM_P' 9942 This predicate holds if the type is a pointer to data member. 9943 9944'TYPE_PTR_P' 9945 This predicate holds if the type is a pointer type, and the pointee 9946 is not a data member. 9947 9948'TYPE_PTRFN_P' 9949 This predicate holds for a pointer to function type. 9950 9951'TYPE_PTROB_P' 9952 This predicate holds for a pointer to object type. Note however 9953 that it does not hold for the generic pointer to object type 'void 9954 *'. You may use 'TYPE_PTROBV_P' to test for a pointer to object 9955 type as well as 'void *'. 9956 9957 The table below describes types specific to C and C++ as well as 9958language-dependent info about GENERIC types. 9959 9960'POINTER_TYPE' 9961 Used to represent pointer types, and pointer to data member types. 9962 If 'TREE_TYPE' is a pointer to data member type, then 9963 'TYPE_PTRDATAMEM_P' will hold. For a pointer to data member type 9964 of the form 'T X::*', 'TYPE_PTRMEM_CLASS_TYPE' will be the type 9965 'X', while 'TYPE_PTRMEM_POINTED_TO_TYPE' will be the type 'T'. 9966 9967'RECORD_TYPE' 9968 Used to represent 'struct' and 'class' types in C and C++. If 9969 'TYPE_PTRMEMFUNC_P' holds, then this type is a pointer-to-member 9970 type. In that case, the 'TYPE_PTRMEMFUNC_FN_TYPE' is a 9971 'POINTER_TYPE' pointing to a 'METHOD_TYPE'. The 'METHOD_TYPE' is 9972 the type of a function pointed to by the pointer-to-member 9973 function. If 'TYPE_PTRMEMFUNC_P' does not hold, this type is a 9974 class type. For more information, *note Classes::. 9975 9976'UNKNOWN_TYPE' 9977 This node is used to represent a type the knowledge of which is 9978 insufficient for a sound processing. 9979 9980'TYPENAME_TYPE' 9981 Used to represent a construct of the form 'typename T::A'. The 9982 'TYPE_CONTEXT' is 'T'; the 'TYPE_NAME' is an 'IDENTIFIER_NODE' for 9983 'A'. If the type is specified via a template-id, then 9984 'TYPENAME_TYPE_FULLNAME' yields a 'TEMPLATE_ID_EXPR'. The 9985 'TREE_TYPE' is non-'NULL' if the node is implicitly generated in 9986 support for the implicit typename extension; in which case the 9987 'TREE_TYPE' is a type node for the base-class. 9988 9989'TYPEOF_TYPE' 9990 Used to represent the '__typeof__' extension. The 'TYPE_FIELDS' is 9991 the expression the type of which is being represented. 9992 9993 9994File: gccint.info, Node: Namespaces, Next: Classes, Prev: Types for C++, Up: C and C++ Trees 9995 999610.10.2 Namespaces 9997------------------ 9998 9999The root of the entire intermediate representation is the variable 10000'global_namespace'. This is the namespace specified with '::' in C++ 10001source code. All other namespaces, types, variables, functions, and so 10002forth can be found starting with this namespace. 10003 10004 However, except for the fact that it is distinguished as the root of 10005the representation, the global namespace is no different from any other 10006namespace. Thus, in what follows, we describe namespaces generally, 10007rather than the global namespace in particular. 10008 10009 A namespace is represented by a 'NAMESPACE_DECL' node. 10010 10011 The following macros and functions can be used on a 'NAMESPACE_DECL': 10012 10013'DECL_NAME' 10014 This macro is used to obtain the 'IDENTIFIER_NODE' corresponding to 10015 the unqualified name of the name of the namespace (*note 10016 Identifiers::). The name of the global namespace is '::', even 10017 though in C++ the global namespace is unnamed. However, you should 10018 use comparison with 'global_namespace', rather than 'DECL_NAME' to 10019 determine whether or not a namespace is the global one. An unnamed 10020 namespace will have a 'DECL_NAME' equal to 10021 'anonymous_namespace_name'. Within a single translation unit, all 10022 unnamed namespaces will have the same name. 10023 10024'DECL_CONTEXT' 10025 This macro returns the enclosing namespace. The 'DECL_CONTEXT' for 10026 the 'global_namespace' is 'NULL_TREE'. 10027 10028'DECL_NAMESPACE_ALIAS' 10029 If this declaration is for a namespace alias, then 10030 'DECL_NAMESPACE_ALIAS' is the namespace for which this one is an 10031 alias. 10032 10033 Do not attempt to use 'cp_namespace_decls' for a namespace which is 10034 an alias. Instead, follow 'DECL_NAMESPACE_ALIAS' links until you 10035 reach an ordinary, non-alias, namespace, and call 10036 'cp_namespace_decls' there. 10037 10038'DECL_NAMESPACE_STD_P' 10039 This predicate holds if the namespace is the special '::std' 10040 namespace. 10041 10042'cp_namespace_decls' 10043 This function will return the declarations contained in the 10044 namespace, including types, overloaded functions, other namespaces, 10045 and so forth. If there are no declarations, this function will 10046 return 'NULL_TREE'. The declarations are connected through their 10047 'TREE_CHAIN' fields. 10048 10049 Although most entries on this list will be declarations, 10050 'TREE_LIST' nodes may also appear. In this case, the 'TREE_VALUE' 10051 will be an 'OVERLOAD'. The value of the 'TREE_PURPOSE' is 10052 unspecified; back ends should ignore this value. As with the other 10053 kinds of declarations returned by 'cp_namespace_decls', the 10054 'TREE_CHAIN' will point to the next declaration in this list. 10055 10056 For more information on the kinds of declarations that can occur on 10057 this list, *Note Declarations::. Some declarations will not appear 10058 on this list. In particular, no 'FIELD_DECL', 'LABEL_DECL', or 10059 'PARM_DECL' nodes will appear here. 10060 10061 This function cannot be used with namespaces that have 10062 'DECL_NAMESPACE_ALIAS' set. 10063 10064 10065File: gccint.info, Node: Classes, Next: Functions for C++, Prev: Namespaces, Up: C and C++ Trees 10066 1006710.10.3 Classes 10068--------------- 10069 10070Besides namespaces, the other high-level scoping construct in C++ is the 10071class. (Throughout this manual the term "class" is used to mean the 10072types referred to in the ANSI/ISO C++ Standard as classes; these include 10073types defined with the 'class', 'struct', and 'union' keywords.) 10074 10075 A class type is represented by either a 'RECORD_TYPE' or a 10076'UNION_TYPE'. A class declared with the 'union' tag is represented by a 10077'UNION_TYPE', while classes declared with either the 'struct' or the 10078'class' tag are represented by 'RECORD_TYPE's. You can use the 10079'CLASSTYPE_DECLARED_CLASS' macro to discern whether or not a particular 10080type is a 'class' as opposed to a 'struct'. This macro will be true 10081only for classes declared with the 'class' tag. 10082 10083 Almost all non-function members are available on the 'TYPE_FIELDS' 10084list. Given one member, the next can be found by following the 10085'TREE_CHAIN'. You should not depend in any way on the order in which 10086fields appear on this list. All nodes on this list will be 'DECL' 10087nodes. A 'FIELD_DECL' is used to represent a non-static data member, a 10088'VAR_DECL' is used to represent a static data member, and a 'TYPE_DECL' 10089is used to represent a type. Note that the 'CONST_DECL' for an 10090enumeration constant will appear on this list, if the enumeration type 10091was declared in the class. (Of course, the 'TYPE_DECL' for the 10092enumeration type will appear here as well.) There are no entries for 10093base classes on this list. In particular, there is no 'FIELD_DECL' for 10094the "base-class portion" of an object. 10095 10096 The 'TYPE_VFIELD' is a compiler-generated field used to point to 10097virtual function tables. It may or may not appear on the 'TYPE_FIELDS' 10098list. However, back ends should handle the 'TYPE_VFIELD' just like all 10099the entries on the 'TYPE_FIELDS' list. 10100 10101 The function members are available on the 'TYPE_METHODS' list. Again, 10102subsequent members are found by following the 'TREE_CHAIN' field. If a 10103function is overloaded, each of the overloaded functions appears; no 10104'OVERLOAD' nodes appear on the 'TYPE_METHODS' list. Implicitly declared 10105functions (including default constructors, copy constructors, assignment 10106operators, and destructors) will appear on this list as well. 10107 10108 Every class has an associated "binfo", which can be obtained with 10109'TYPE_BINFO'. Binfos are used to represent base-classes. The binfo 10110given by 'TYPE_BINFO' is the degenerate case, whereby every class is 10111considered to be its own base-class. The base binfos for a particular 10112binfo are held in a vector, whose length is obtained with 10113'BINFO_N_BASE_BINFOS'. The base binfos themselves are obtained with 10114'BINFO_BASE_BINFO' and 'BINFO_BASE_ITERATE'. To add a new binfo, use 10115'BINFO_BASE_APPEND'. The vector of base binfos can be obtained with 10116'BINFO_BASE_BINFOS', but normally you do not need to use that. The 10117class type associated with a binfo is given by 'BINFO_TYPE'. It is not 10118always the case that 'BINFO_TYPE (TYPE_BINFO (x))', because of typedefs 10119and qualified types. Neither is it the case that 'TYPE_BINFO 10120(BINFO_TYPE (y))' is the same binfo as 'y'. The reason is that if 'y' 10121is a binfo representing a base-class 'B' of a derived class 'D', then 10122'BINFO_TYPE (y)' will be 'B', and 'TYPE_BINFO (BINFO_TYPE (y))' will be 10123'B' as its own base-class, rather than as a base-class of 'D'. 10124 10125 The access to a base type can be found with 'BINFO_BASE_ACCESS'. This 10126will produce 'access_public_node', 'access_private_node' or 10127'access_protected_node'. If bases are always public, 10128'BINFO_BASE_ACCESSES' may be 'NULL'. 10129 10130 'BINFO_VIRTUAL_P' is used to specify whether the binfo is inherited 10131virtually or not. The other flags, 'BINFO_FLAG_0' to 'BINFO_FLAG_6', 10132can be used for language specific use. 10133 10134 The following macros can be used on a tree node representing a 10135class-type. 10136 10137'LOCAL_CLASS_P' 10138 This predicate holds if the class is local class _i.e._ declared 10139 inside a function body. 10140 10141'TYPE_POLYMORPHIC_P' 10142 This predicate holds if the class has at least one virtual function 10143 (declared or inherited). 10144 10145'TYPE_HAS_DEFAULT_CONSTRUCTOR' 10146 This predicate holds whenever its argument represents a class-type 10147 with default constructor. 10148 10149'CLASSTYPE_HAS_MUTABLE' 10150'TYPE_HAS_MUTABLE_P' 10151 These predicates hold for a class-type having a mutable data 10152 member. 10153 10154'CLASSTYPE_NON_POD_P' 10155 This predicate holds only for class-types that are not PODs. 10156 10157'TYPE_HAS_NEW_OPERATOR' 10158 This predicate holds for a class-type that defines 'operator new'. 10159 10160'TYPE_HAS_ARRAY_NEW_OPERATOR' 10161 This predicate holds for a class-type for which 'operator new[]' is 10162 defined. 10163 10164'TYPE_OVERLOADS_CALL_EXPR' 10165 This predicate holds for class-type for which the function call 10166 'operator()' is overloaded. 10167 10168'TYPE_OVERLOADS_ARRAY_REF' 10169 This predicate holds for a class-type that overloads 'operator[]' 10170 10171'TYPE_OVERLOADS_ARROW' 10172 This predicate holds for a class-type for which 'operator->' is 10173 overloaded. 10174 10175 10176File: gccint.info, Node: Functions for C++, Next: Statements for C++, Prev: Classes, Up: C and C++ Trees 10177 1017810.10.4 Functions for C++ 10179------------------------- 10180 10181A function is represented by a 'FUNCTION_DECL' node. A set of 10182overloaded functions is sometimes represented by an 'OVERLOAD' node. 10183 10184 An 'OVERLOAD' node is not a declaration, so none of the 'DECL_' macros 10185should be used on an 'OVERLOAD'. An 'OVERLOAD' node is similar to a 10186'TREE_LIST'. Use 'OVL_CURRENT' to get the function associated with an 10187'OVERLOAD' node; use 'OVL_NEXT' to get the next 'OVERLOAD' node in the 10188list of overloaded functions. The macros 'OVL_CURRENT' and 'OVL_NEXT' 10189are actually polymorphic; you can use them to work with 'FUNCTION_DECL' 10190nodes as well as with overloads. In the case of a 'FUNCTION_DECL', 10191'OVL_CURRENT' will always return the function itself, and 'OVL_NEXT' 10192will always be 'NULL_TREE'. 10193 10194 To determine the scope of a function, you can use the 'DECL_CONTEXT' 10195macro. This macro will return the class (either a 'RECORD_TYPE' or a 10196'UNION_TYPE') or namespace (a 'NAMESPACE_DECL') of which the function is 10197a member. For a virtual function, this macro returns the class in which 10198the function was actually defined, not the base class in which the 10199virtual declaration occurred. 10200 10201 If a friend function is defined in a class scope, the 10202'DECL_FRIEND_CONTEXT' macro can be used to determine the class in which 10203it was defined. For example, in 10204 class C { friend void f() {} }; 10205the 'DECL_CONTEXT' for 'f' will be the 'global_namespace', but the 10206'DECL_FRIEND_CONTEXT' will be the 'RECORD_TYPE' for 'C'. 10207 10208 The following macros and functions can be used on a 'FUNCTION_DECL': 10209'DECL_MAIN_P' 10210 This predicate holds for a function that is the program entry point 10211 '::code'. 10212 10213'DECL_LOCAL_FUNCTION_P' 10214 This predicate holds if the function was declared at block scope, 10215 even though it has a global scope. 10216 10217'DECL_ANTICIPATED' 10218 This predicate holds if the function is a built-in function but its 10219 prototype is not yet explicitly declared. 10220 10221'DECL_EXTERN_C_FUNCTION_P' 10222 This predicate holds if the function is declared as an ''extern 10223 "C"'' function. 10224 10225'DECL_LINKONCE_P' 10226 This macro holds if multiple copies of this function may be emitted 10227 in various translation units. It is the responsibility of the 10228 linker to merge the various copies. Template instantiations are 10229 the most common example of functions for which 'DECL_LINKONCE_P' 10230 holds; G++ instantiates needed templates in all translation units 10231 which require them, and then relies on the linker to remove 10232 duplicate instantiations. 10233 10234 FIXME: This macro is not yet implemented. 10235 10236'DECL_FUNCTION_MEMBER_P' 10237 This macro holds if the function is a member of a class, rather 10238 than a member of a namespace. 10239 10240'DECL_STATIC_FUNCTION_P' 10241 This predicate holds if the function a static member function. 10242 10243'DECL_NONSTATIC_MEMBER_FUNCTION_P' 10244 This macro holds for a non-static member function. 10245 10246'DECL_CONST_MEMFUNC_P' 10247 This predicate holds for a 'const'-member function. 10248 10249'DECL_VOLATILE_MEMFUNC_P' 10250 This predicate holds for a 'volatile'-member function. 10251 10252'DECL_CONSTRUCTOR_P' 10253 This macro holds if the function is a constructor. 10254 10255'DECL_NONCONVERTING_P' 10256 This predicate holds if the constructor is a non-converting 10257 constructor. 10258 10259'DECL_COMPLETE_CONSTRUCTOR_P' 10260 This predicate holds for a function which is a constructor for an 10261 object of a complete type. 10262 10263'DECL_BASE_CONSTRUCTOR_P' 10264 This predicate holds for a function which is a constructor for a 10265 base class sub-object. 10266 10267'DECL_COPY_CONSTRUCTOR_P' 10268 This predicate holds for a function which is a copy-constructor. 10269 10270'DECL_DESTRUCTOR_P' 10271 This macro holds if the function is a destructor. 10272 10273'DECL_COMPLETE_DESTRUCTOR_P' 10274 This predicate holds if the function is the destructor for an 10275 object a complete type. 10276 10277'DECL_OVERLOADED_OPERATOR_P' 10278 This macro holds if the function is an overloaded operator. 10279 10280'DECL_CONV_FN_P' 10281 This macro holds if the function is a type-conversion operator. 10282 10283'DECL_GLOBAL_CTOR_P' 10284 This predicate holds if the function is a file-scope initialization 10285 function. 10286 10287'DECL_GLOBAL_DTOR_P' 10288 This predicate holds if the function is a file-scope finalization 10289 function. 10290 10291'DECL_THUNK_P' 10292 This predicate holds if the function is a thunk. 10293 10294 These functions represent stub code that adjusts the 'this' pointer 10295 and then jumps to another function. When the jumped-to function 10296 returns, control is transferred directly to the caller, without 10297 returning to the thunk. The first parameter to the thunk is always 10298 the 'this' pointer; the thunk should add 'THUNK_DELTA' to this 10299 value. (The 'THUNK_DELTA' is an 'int', not an 'INTEGER_CST'.) 10300 10301 Then, if 'THUNK_VCALL_OFFSET' (an 'INTEGER_CST') is nonzero the 10302 adjusted 'this' pointer must be adjusted again. The complete 10303 calculation is given by the following pseudo-code: 10304 10305 this += THUNK_DELTA 10306 if (THUNK_VCALL_OFFSET) 10307 this += (*((ptrdiff_t **) this))[THUNK_VCALL_OFFSET] 10308 10309 Finally, the thunk should jump to the location given by 10310 'DECL_INITIAL'; this will always be an expression for the address 10311 of a function. 10312 10313'DECL_NON_THUNK_FUNCTION_P' 10314 This predicate holds if the function is _not_ a thunk function. 10315 10316'GLOBAL_INIT_PRIORITY' 10317 If either 'DECL_GLOBAL_CTOR_P' or 'DECL_GLOBAL_DTOR_P' holds, then 10318 this gives the initialization priority for the function. The 10319 linker will arrange that all functions for which 10320 'DECL_GLOBAL_CTOR_P' holds are run in increasing order of priority 10321 before 'main' is called. When the program exits, all functions for 10322 which 'DECL_GLOBAL_DTOR_P' holds are run in the reverse order. 10323 10324'TYPE_RAISES_EXCEPTIONS' 10325 This macro returns the list of exceptions that a (member-)function 10326 can raise. The returned list, if non 'NULL', is comprised of nodes 10327 whose 'TREE_VALUE' represents a type. 10328 10329'TYPE_NOTHROW_P' 10330 This predicate holds when the exception-specification of its 10331 arguments is of the form ''()''. 10332 10333'DECL_ARRAY_DELETE_OPERATOR_P' 10334 This predicate holds if the function an overloaded 'operator 10335 delete[]'. 10336 10337 10338File: gccint.info, Node: Statements for C++, Next: C++ Expressions, Prev: Functions for C++, Up: C and C++ Trees 10339 1034010.10.5 Statements for C++ 10341-------------------------- 10342 10343A function that has a definition in the current translation unit will 10344have a non-'NULL' 'DECL_INITIAL'. However, back ends should not make 10345use of the particular value given by 'DECL_INITIAL'. 10346 10347 The 'DECL_SAVED_TREE' macro will give the complete body of the 10348function. 10349 1035010.10.5.1 Statements 10351.................... 10352 10353There are tree nodes corresponding to all of the source-level statement 10354constructs, used within the C and C++ frontends. These are enumerated 10355here, together with a list of the various macros that can be used to 10356obtain information about them. There are a few macros that can be used 10357with all statements: 10358 10359'STMT_IS_FULL_EXPR_P' 10360 In C++, statements normally constitute "full expressions"; 10361 temporaries created during a statement are destroyed when the 10362 statement is complete. However, G++ sometimes represents 10363 expressions by statements; these statements will not have 10364 'STMT_IS_FULL_EXPR_P' set. Temporaries created during such 10365 statements should be destroyed when the innermost enclosing 10366 statement with 'STMT_IS_FULL_EXPR_P' set is exited. 10367 10368 Here is the list of the various statement nodes, and the macros used to 10369access them. This documentation describes the use of these nodes in 10370non-template functions (including instantiations of template functions). 10371In template functions, the same nodes are used, but sometimes in 10372slightly different ways. 10373 10374 Many of the statements have substatements. For example, a 'while' loop 10375will have a body, which is itself a statement. If the substatement is 10376'NULL_TREE', it is considered equivalent to a statement consisting of a 10377single ';', i.e., an expression statement in which the expression has 10378been omitted. A substatement may in fact be a list of statements, 10379connected via their 'TREE_CHAIN's. So, you should always process the 10380statement tree by looping over substatements, like this: 10381 void process_stmt (stmt) 10382 tree stmt; 10383 { 10384 while (stmt) 10385 { 10386 switch (TREE_CODE (stmt)) 10387 { 10388 case IF_STMT: 10389 process_stmt (THEN_CLAUSE (stmt)); 10390 /* More processing here. */ 10391 break; 10392 10393 ... 10394 } 10395 10396 stmt = TREE_CHAIN (stmt); 10397 } 10398 } 10399 In other words, while the 'then' clause of an 'if' statement in C++ can 10400be only one statement (although that one statement may be a compound 10401statement), the intermediate representation will sometimes use several 10402statements chained together. 10403 10404'BREAK_STMT' 10405 10406 Used to represent a 'break' statement. There are no additional 10407 fields. 10408 10409'CILK_SPAWN_STMT' 10410 10411 Used to represent a spawning function in the Cilk Plus language 10412 extension. This tree has one field that holds the name of the 10413 spawning function. '_Cilk_spawn' can be written in C in the 10414 following way: 10415 10416 _Cilk_spawn <function_name> (<parameters>); 10417 10418 Detailed description for usage and functionality of '_Cilk_spawn' 10419 can be found at <https://www.cilkplus.org>. 10420 10421'CILK_SYNC_STMT' 10422 10423 This statement is part of the Cilk Plus language extension. It 10424 indicates that the current function cannot continue in parallel 10425 with its spawned children. There are no additional fields. 10426 '_Cilk_sync' can be written in C in the following way: 10427 10428 _Cilk_sync; 10429 10430'CLEANUP_STMT' 10431 10432 Used to represent an action that should take place upon exit from 10433 the enclosing scope. Typically, these actions are calls to 10434 destructors for local objects, but back ends cannot rely on this 10435 fact. If these nodes are in fact representing such destructors, 10436 'CLEANUP_DECL' will be the 'VAR_DECL' destroyed. Otherwise, 10437 'CLEANUP_DECL' will be 'NULL_TREE'. In any case, the 10438 'CLEANUP_EXPR' is the expression to execute. The cleanups executed 10439 on exit from a scope should be run in the reverse order of the 10440 order in which the associated 'CLEANUP_STMT's were encountered. 10441 10442'CONTINUE_STMT' 10443 10444 Used to represent a 'continue' statement. There are no additional 10445 fields. 10446 10447'CTOR_STMT' 10448 10449 Used to mark the beginning (if 'CTOR_BEGIN_P' holds) or end (if 10450 'CTOR_END_P' holds of the main body of a constructor. See also 10451 'SUBOBJECT' for more information on how to use these nodes. 10452 10453'DO_STMT' 10454 10455 Used to represent a 'do' loop. The body of the loop is given by 10456 'DO_BODY' while the termination condition for the loop is given by 10457 'DO_COND'. The condition for a 'do'-statement is always an 10458 expression. 10459 10460'EMPTY_CLASS_EXPR' 10461 10462 Used to represent a temporary object of a class with no data whose 10463 address is never taken. (All such objects are interchangeable.) 10464 The 'TREE_TYPE' represents the type of the object. 10465 10466'EXPR_STMT' 10467 10468 Used to represent an expression statement. Use 'EXPR_STMT_EXPR' to 10469 obtain the expression. 10470 10471'FOR_STMT' 10472 10473 Used to represent a 'for' statement. The 'FOR_INIT_STMT' is the 10474 initialization statement for the loop. The 'FOR_COND' is the 10475 termination condition. The 'FOR_EXPR' is the expression executed 10476 right before the 'FOR_COND' on each loop iteration; often, this 10477 expression increments a counter. The body of the loop is given by 10478 'FOR_BODY'. Note that 'FOR_INIT_STMT' and 'FOR_BODY' return 10479 statements, while 'FOR_COND' and 'FOR_EXPR' return expressions. 10480 10481'HANDLER' 10482 10483 Used to represent a C++ 'catch' block. The 'HANDLER_TYPE' is the 10484 type of exception that will be caught by this handler; it is equal 10485 (by pointer equality) to 'NULL' if this handler is for all types. 10486 'HANDLER_PARMS' is the 'DECL_STMT' for the catch parameter, and 10487 'HANDLER_BODY' is the code for the block itself. 10488 10489'IF_STMT' 10490 10491 Used to represent an 'if' statement. The 'IF_COND' is the 10492 expression. 10493 10494 If the condition is a 'TREE_LIST', then the 'TREE_PURPOSE' is a 10495 statement (usually a 'DECL_STMT'). Each time the condition is 10496 evaluated, the statement should be executed. Then, the 10497 'TREE_VALUE' should be used as the conditional expression itself. 10498 This representation is used to handle C++ code like this: 10499 10500 C++ distinguishes between this and 'COND_EXPR' for handling 10501 templates. 10502 10503 if (int i = 7) ... 10504 10505 where there is a new local variable (or variables) declared within 10506 the condition. 10507 10508 The 'THEN_CLAUSE' represents the statement given by the 'then' 10509 condition, while the 'ELSE_CLAUSE' represents the statement given 10510 by the 'else' condition. 10511 10512'SUBOBJECT' 10513 10514 In a constructor, these nodes are used to mark the point at which a 10515 subobject of 'this' is fully constructed. If, after this point, an 10516 exception is thrown before a 'CTOR_STMT' with 'CTOR_END_P' set is 10517 encountered, the 'SUBOBJECT_CLEANUP' must be executed. The 10518 cleanups must be executed in the reverse order in which they 10519 appear. 10520 10521'SWITCH_STMT' 10522 10523 Used to represent a 'switch' statement. The 'SWITCH_STMT_COND' is 10524 the expression on which the switch is occurring. See the 10525 documentation for an 'IF_STMT' for more information on the 10526 representation used for the condition. The 'SWITCH_STMT_BODY' is 10527 the body of the switch statement. The 'SWITCH_STMT_TYPE' is the 10528 original type of switch expression as given in the source, before 10529 any compiler conversions. 10530 10531'TRY_BLOCK' 10532 Used to represent a 'try' block. The body of the try block is 10533 given by 'TRY_STMTS'. Each of the catch blocks is a 'HANDLER' 10534 node. The first handler is given by 'TRY_HANDLERS'. Subsequent 10535 handlers are obtained by following the 'TREE_CHAIN' link from one 10536 handler to the next. The body of the handler is given by 10537 'HANDLER_BODY'. 10538 10539 If 'CLEANUP_P' holds of the 'TRY_BLOCK', then the 'TRY_HANDLERS' 10540 will not be a 'HANDLER' node. Instead, it will be an expression 10541 that should be executed if an exception is thrown in the try block. 10542 It must rethrow the exception after executing that code. And, if 10543 an exception is thrown while the expression is executing, 10544 'terminate' must be called. 10545 10546'USING_STMT' 10547 Used to represent a 'using' directive. The namespace is given by 10548 'USING_STMT_NAMESPACE', which will be a NAMESPACE_DECL. This node 10549 is needed inside template functions, to implement using directives 10550 during instantiation. 10551 10552'WHILE_STMT' 10553 10554 Used to represent a 'while' loop. The 'WHILE_COND' is the 10555 termination condition for the loop. See the documentation for an 10556 'IF_STMT' for more information on the representation used for the 10557 condition. 10558 10559 The 'WHILE_BODY' is the body of the loop. 10560 10561 10562File: gccint.info, Node: C++ Expressions, Prev: Statements for C++, Up: C and C++ Trees 10563 1056410.10.6 C++ Expressions 10565----------------------- 10566 10567This section describes expressions specific to the C and C++ front ends. 10568 10569'TYPEID_EXPR' 10570 10571 Used to represent a 'typeid' expression. 10572 10573'NEW_EXPR' 10574'VEC_NEW_EXPR' 10575 10576 Used to represent a call to 'new' and 'new[]' respectively. 10577 10578'DELETE_EXPR' 10579'VEC_DELETE_EXPR' 10580 10581 Used to represent a call to 'delete' and 'delete[]' respectively. 10582 10583'MEMBER_REF' 10584 10585 Represents a reference to a member of a class. 10586 10587'THROW_EXPR' 10588 10589 Represents an instance of 'throw' in the program. Operand 0, which 10590 is the expression to throw, may be 'NULL_TREE'. 10591 10592'AGGR_INIT_EXPR' 10593 An 'AGGR_INIT_EXPR' represents the initialization as the return 10594 value of a function call, or as the result of a constructor. An 10595 'AGGR_INIT_EXPR' will only appear as a full-expression, or as the 10596 second operand of a 'TARGET_EXPR'. 'AGGR_INIT_EXPR's have a 10597 representation similar to that of 'CALL_EXPR's. You can use the 10598 'AGGR_INIT_EXPR_FN' and 'AGGR_INIT_EXPR_ARG' macros to access the 10599 function to call and the arguments to pass. 10600 10601 If 'AGGR_INIT_VIA_CTOR_P' holds of the 'AGGR_INIT_EXPR', then the 10602 initialization is via a constructor call. The address of the 10603 'AGGR_INIT_EXPR_SLOT' operand, which is always a 'VAR_DECL', is 10604 taken, and this value replaces the first argument in the argument 10605 list. 10606 10607 In either case, the expression is void. 10608 10609 10610File: gccint.info, Node: Java Trees, Prev: C and C++ Trees, Up: GENERIC 10611 1061210.11 Java Trees 10613================ 10614 10615 10616File: gccint.info, Node: GIMPLE, Next: Tree SSA, Prev: GENERIC, Up: Top 10617 1061811 GIMPLE 10619********* 10620 10621GIMPLE is a three-address representation derived from GENERIC by 10622breaking down GENERIC expressions into tuples of no more than 3 operands 10623(with some exceptions like function calls). GIMPLE was heavily 10624influenced by the SIMPLE IL used by the McCAT compiler project at McGill 10625University, though we have made some different choices. For one thing, 10626SIMPLE doesn't support 'goto'. 10627 10628 Temporaries are introduced to hold intermediate values needed to 10629compute complex expressions. Additionally, all the control structures 10630used in GENERIC are lowered into conditional jumps, lexical scopes are 10631removed and exception regions are converted into an on the side 10632exception region tree. 10633 10634 The compiler pass which converts GENERIC into GIMPLE is referred to as 10635the 'gimplifier'. The gimplifier works recursively, generating GIMPLE 10636tuples out of the original GENERIC expressions. 10637 10638 One of the early implementation strategies used for the GIMPLE 10639representation was to use the same internal data structures used by 10640front ends to represent parse trees. This simplified implementation 10641because we could leverage existing functionality and interfaces. 10642However, GIMPLE is a much more restrictive representation than abstract 10643syntax trees (AST), therefore it does not require the full structural 10644complexity provided by the main tree data structure. 10645 10646 The GENERIC representation of a function is stored in the 10647'DECL_SAVED_TREE' field of the associated 'FUNCTION_DECL' tree node. It 10648is converted to GIMPLE by a call to 'gimplify_function_tree'. 10649 10650 If a front end wants to include language-specific tree codes in the 10651tree representation which it provides to the back end, it must provide a 10652definition of 'LANG_HOOKS_GIMPLIFY_EXPR' which knows how to convert the 10653front end trees to GIMPLE. Usually such a hook will involve much of the 10654same code for expanding front end trees to RTL. This function can 10655return fully lowered GIMPLE, or it can return GENERIC trees and let the 10656main gimplifier lower them the rest of the way; this is often simpler. 10657GIMPLE that is not fully lowered is known as "High GIMPLE" and consists 10658of the IL before the pass 'pass_lower_cf'. High GIMPLE contains some 10659container statements like lexical scopes (represented by 'GIMPLE_BIND') 10660and nested expressions (e.g., 'GIMPLE_TRY'), while "Low GIMPLE" exposes 10661all of the implicit jumps for control and exception expressions directly 10662in the IL and EH region trees. 10663 10664 The C and C++ front ends currently convert directly from front end 10665trees to GIMPLE, and hand that off to the back end rather than first 10666converting to GENERIC. Their gimplifier hooks know about all the 10667'_STMT' nodes and how to convert them to GENERIC forms. There was some 10668work done on a genericization pass which would run first, but the 10669existence of 'STMT_EXPR' meant that in order to convert all of the C 10670statements into GENERIC equivalents would involve walking the entire 10671tree anyway, so it was simpler to lower all the way. This might change 10672in the future if someone writes an optimization pass which would work 10673better with higher-level trees, but currently the optimizers all expect 10674GIMPLE. 10675 10676 You can request to dump a C-like representation of the GIMPLE form with 10677the flag '-fdump-tree-gimple'. 10678 10679* Menu: 10680 10681* Tuple representation:: 10682* Class hierarchy of GIMPLE statements:: 10683* GIMPLE instruction set:: 10684* GIMPLE Exception Handling:: 10685* Temporaries:: 10686* Operands:: 10687* Manipulating GIMPLE statements:: 10688* Tuple specific accessors:: 10689* GIMPLE sequences:: 10690* Sequence iterators:: 10691* Adding a new GIMPLE statement code:: 10692* Statement and operand traversals:: 10693 10694 10695File: gccint.info, Node: Tuple representation, Next: Class hierarchy of GIMPLE statements, Up: GIMPLE 10696 1069711.1 Tuple representation 10698========================= 10699 10700GIMPLE instructions are tuples of variable size divided in two groups: a 10701header describing the instruction and its locations, and a variable 10702length body with all the operands. Tuples are organized into a 10703hierarchy with 3 main classes of tuples. 10704 1070511.1.1 'gimple' (gsbase) 10706------------------------ 10707 10708This is the root of the hierarchy, it holds basic information needed by 10709most GIMPLE statements. There are some fields that may not be relevant 10710to every GIMPLE statement, but those were moved into the base structure 10711to take advantage of holes left by other fields (thus making the 10712structure more compact). The structure takes 4 words (32 bytes) on 64 10713bit hosts: 10714 10715Field Size (bits) 10716'code' 8 10717'subcode' 16 10718'no_warning' 1 10719'visited' 1 10720'nontemporal_move' 1 10721'plf' 2 10722'modified' 1 10723'has_volatile_ops' 1 10724'references_memory_p' 1 10725'uid' 32 10726'location' 32 10727'num_ops' 32 10728'bb' 64 10729'block' 63 10730Total size 32 bytes 10731 10732 * 'code' Main identifier for a GIMPLE instruction. 10733 10734 * 'subcode' Used to distinguish different variants of the same basic 10735 instruction or provide flags applicable to a given code. The 10736 'subcode' flags field has different uses depending on the code of 10737 the instruction, but mostly it distinguishes instructions of the 10738 same family. The most prominent use of this field is in 10739 assignments, where subcode indicates the operation done on the RHS 10740 of the assignment. For example, a = b + c is encoded as 10741 'GIMPLE_ASSIGN <PLUS_EXPR, a, b, c>'. 10742 10743 * 'no_warning' Bitflag to indicate whether a warning has already been 10744 issued on this statement. 10745 10746 * 'visited' General purpose "visited" marker. Set and cleared by 10747 each pass when needed. 10748 10749 * 'nontemporal_move' Bitflag used in assignments that represent 10750 non-temporal moves. Although this bitflag is only used in 10751 assignments, it was moved into the base to take advantage of the 10752 bit holes left by the previous fields. 10753 10754 * 'plf' Pass Local Flags. This 2-bit mask can be used as general 10755 purpose markers by any pass. Passes are responsible for clearing 10756 and setting these two flags accordingly. 10757 10758 * 'modified' Bitflag to indicate whether the statement has been 10759 modified. Used mainly by the operand scanner to determine when to 10760 re-scan a statement for operands. 10761 10762 * 'has_volatile_ops' Bitflag to indicate whether this statement 10763 contains operands that have been marked volatile. 10764 10765 * 'references_memory_p' Bitflag to indicate whether this statement 10766 contains memory references (i.e., its operands are either global 10767 variables, or pointer dereferences or anything that must reside in 10768 memory). 10769 10770 * 'uid' This is an unsigned integer used by passes that want to 10771 assign IDs to every statement. These IDs must be assigned and used 10772 by each pass. 10773 10774 * 'location' This is a 'location_t' identifier to specify source code 10775 location for this statement. It is inherited from the front end. 10776 10777 * 'num_ops' Number of operands that this statement has. This 10778 specifies the size of the operand vector embedded in the tuple. 10779 Only used in some tuples, but it is declared in the base tuple to 10780 take advantage of the 32-bit hole left by the previous fields. 10781 10782 * 'bb' Basic block holding the instruction. 10783 10784 * 'block' Lexical block holding this statement. Also used for debug 10785 information generation. 10786 1078711.1.2 'gimple_statement_with_ops' 10788---------------------------------- 10789 10790This tuple is actually split in two: 'gimple_statement_with_ops_base' 10791and 'gimple_statement_with_ops'. This is needed to accommodate the way 10792the operand vector is allocated. The operand vector is defined to be an 10793array of 1 element. So, to allocate a dynamic number of operands, the 10794memory allocator ('gimple_alloc') simply allocates enough memory to hold 10795the structure itself plus 'N - 1' operands which run "off the end" of 10796the structure. For example, to allocate space for a tuple with 3 10797operands, 'gimple_alloc' reserves 'sizeof (struct 10798gimple_statement_with_ops) + 2 * sizeof (tree)' bytes. 10799 10800 On the other hand, several fields in this tuple need to be shared with 10801the 'gimple_statement_with_memory_ops' tuple. So, these common fields 10802are placed in 'gimple_statement_with_ops_base' which is then inherited 10803from the other two tuples. 10804 10805'gsbase' 256 10806'def_ops' 64 10807'use_ops' 64 10808'op' 'num_ops' * 64 10809Total 48 + 8 * 'num_ops' bytes 10810size 10811 10812 * 'gsbase' Inherited from 'struct gimple'. 10813 10814 * 'def_ops' Array of pointers into the operand array indicating all 10815 the slots that contain a variable written-to by the statement. 10816 This array is also used for immediate use chaining. Note that it 10817 would be possible to not rely on this array, but the changes 10818 required to implement this are pretty invasive. 10819 10820 * 'use_ops' Similar to 'def_ops' but for variables read by the 10821 statement. 10822 10823 * 'op' Array of trees with 'num_ops' slots. 10824 1082511.1.3 'gimple_statement_with_memory_ops' 10826----------------------------------------- 10827 10828This tuple is essentially identical to 'gimple_statement_with_ops', 10829except that it contains 4 additional fields to hold vectors related 10830memory stores and loads. Similar to the previous case, the structure is 10831split in two to accommodate for the operand vector 10832('gimple_statement_with_memory_ops_base' and 10833'gimple_statement_with_memory_ops'). 10834 10835Field Size (bits) 10836'gsbase' 256 10837'def_ops' 64 10838'use_ops' 64 10839'vdef_ops' 64 10840'vuse_ops' 64 10841'stores' 64 10842'loads' 64 10843'op' 'num_ops' * 64 10844Total size 80 + 8 * 'num_ops' bytes 10845 10846 * 'vdef_ops' Similar to 'def_ops' but for 'VDEF' operators. There is 10847 one entry per memory symbol written by this statement. This is 10848 used to maintain the memory SSA use-def and def-def chains. 10849 10850 * 'vuse_ops' Similar to 'use_ops' but for 'VUSE' operators. There is 10851 one entry per memory symbol loaded by this statement. This is used 10852 to maintain the memory SSA use-def chains. 10853 10854 * 'stores' Bitset with all the UIDs for the symbols written-to by the 10855 statement. This is different than 'vdef_ops' in that all the 10856 affected symbols are mentioned in this set. If memory partitioning 10857 is enabled, the 'vdef_ops' vector will refer to memory partitions. 10858 Furthermore, no SSA information is stored in this set. 10859 10860 * 'loads' Similar to 'stores', but for memory loads. (Note that 10861 there is some amount of redundancy here, it should be possible to 10862 reduce memory utilization further by removing these sets). 10863 10864 All the other tuples are defined in terms of these three basic ones. 10865Each tuple will add some fields. 10866 10867 10868File: gccint.info, Node: Class hierarchy of GIMPLE statements, Next: GIMPLE instruction set, Prev: Tuple representation, Up: GIMPLE 10869 1087011.2 Class hierarchy of GIMPLE statements 10871========================================= 10872 10873The following diagram shows the C++ inheritance hierarchy of statement 10874kinds, along with their relationships to 'GSS_' values (layouts) and 10875'GIMPLE_' values (codes): 10876 10877 gimple 10878 | layout: GSS_BASE 10879 | used for 4 codes: GIMPLE_ERROR_MARK 10880 | GIMPLE_NOP 10881 | GIMPLE_OMP_SECTIONS_SWITCH 10882 | GIMPLE_PREDICT 10883 | 10884 + gimple_statement_with_ops_base 10885 | | (no GSS layout) 10886 | | 10887 | + gimple_statement_with_ops 10888 | | | layout: GSS_WITH_OPS 10889 | | | 10890 | | + gcond 10891 | | | code: GIMPLE_COND 10892 | | | 10893 | | + gdebug 10894 | | | code: GIMPLE_DEBUG 10895 | | | 10896 | | + ggoto 10897 | | | code: GIMPLE_GOTO 10898 | | | 10899 | | + glabel 10900 | | | code: GIMPLE_LABEL 10901 | | | 10902 | | + gswitch 10903 | | code: GIMPLE_SWITCH 10904 | | 10905 | + gimple_statement_with_memory_ops_base 10906 | | layout: GSS_WITH_MEM_OPS_BASE 10907 | | 10908 | + gimple_statement_with_memory_ops 10909 | | | layout: GSS_WITH_MEM_OPS 10910 | | | 10911 | | + gassign 10912 | | | code GIMPLE_ASSIGN 10913 | | | 10914 | | + greturn 10915 | | code GIMPLE_RETURN 10916 | | 10917 | + gcall 10918 | | layout: GSS_CALL, code: GIMPLE_CALL 10919 | | 10920 | + gasm 10921 | | layout: GSS_ASM, code: GIMPLE_ASM 10922 | | 10923 | + gtransaction 10924 | layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION 10925 | 10926 + gimple_statement_omp 10927 | | layout: GSS_OMP. Used for code GIMPLE_OMP_SECTION 10928 | | 10929 | + gomp_critical 10930 | | layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL 10931 | | 10932 | + gomp_for 10933 | | layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR 10934 | | 10935 | + gomp_parallel_layout 10936 | | | layout: GSS_OMP_PARALLEL_LAYOUT 10937 | | | 10938 | | + gimple_statement_omp_taskreg 10939 | | | | 10940 | | | + gomp_parallel 10941 | | | | code: GIMPLE_OMP_PARALLEL 10942 | | | | 10943 | | | + gomp_task 10944 | | | code: GIMPLE_OMP_TASK 10945 | | | 10946 | | + gimple_statement_omp_target 10947 | | code: GIMPLE_OMP_TARGET 10948 | | 10949 | + gomp_sections 10950 | | layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS 10951 | | 10952 | + gimple_statement_omp_single_layout 10953 | | layout: GSS_OMP_SINGLE_LAYOUT 10954 | | 10955 | + gomp_single 10956 | | code: GIMPLE_OMP_SINGLE 10957 | | 10958 | + gomp_teams 10959 | code: GIMPLE_OMP_TEAMS 10960 | 10961 + gbind 10962 | layout: GSS_BIND, code: GIMPLE_BIND 10963 | 10964 + gcatch 10965 | layout: GSS_CATCH, code: GIMPLE_CATCH 10966 | 10967 + geh_filter 10968 | layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER 10969 | 10970 + geh_else 10971 | layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE 10972 | 10973 + geh_mnt 10974 | layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW 10975 | 10976 + gphi 10977 | layout: GSS_PHI, code: GIMPLE_PHI 10978 | 10979 + gimple_statement_eh_ctrl 10980 | | layout: GSS_EH_CTRL 10981 | | 10982 | + gresx 10983 | | code: GIMPLE_RESX 10984 | | 10985 | + geh_dispatch 10986 | code: GIMPLE_EH_DISPATCH 10987 | 10988 + gtry 10989 | layout: GSS_TRY, code: GIMPLE_TRY 10990 | 10991 + gimple_statement_wce 10992 | layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR 10993 | 10994 + gomp_continue 10995 | layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE 10996 | 10997 + gomp_atomic_load 10998 | layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD 10999 | 11000 + gimple_statement_omp_atomic_store_layout 11001 | layout: GSS_OMP_ATOMIC_STORE_LAYOUT, 11002 | code: GIMPLE_OMP_ATOMIC_STORE 11003 | 11004 + gomp_atomic_store 11005 | code: GIMPLE_OMP_ATOMIC_STORE 11006 | 11007 + gomp_return 11008 code: GIMPLE_OMP_RETURN 11009 11010 11011File: gccint.info, Node: GIMPLE instruction set, Next: GIMPLE Exception Handling, Prev: Class hierarchy of GIMPLE statements, Up: GIMPLE 11012 1101311.3 GIMPLE instruction set 11014=========================== 11015 11016The following table briefly describes the GIMPLE instruction set. 11017 11018Instruction High GIMPLE Low GIMPLE 11019'GIMPLE_ASM' x x 11020'GIMPLE_ASSIGN' x x 11021'GIMPLE_BIND' x 11022'GIMPLE_CALL' x x 11023'GIMPLE_CATCH' x 11024'GIMPLE_COND' x x 11025'GIMPLE_DEBUG' x x 11026'GIMPLE_EH_FILTER' x 11027'GIMPLE_GOTO' x x 11028'GIMPLE_LABEL' x x 11029'GIMPLE_NOP' x x 11030'GIMPLE_OMP_ATOMIC_LOAD' x x 11031'GIMPLE_OMP_ATOMIC_STORE' x x 11032'GIMPLE_OMP_CONTINUE' x x 11033'GIMPLE_OMP_CRITICAL' x x 11034'GIMPLE_OMP_FOR' x x 11035'GIMPLE_OMP_MASTER' x x 11036'GIMPLE_OMP_ORDERED' x x 11037'GIMPLE_OMP_PARALLEL' x x 11038'GIMPLE_OMP_RETURN' x x 11039'GIMPLE_OMP_SECTION' x x 11040'GIMPLE_OMP_SECTIONS' x x 11041'GIMPLE_OMP_SECTIONS_SWITCH' x x 11042'GIMPLE_OMP_SINGLE' x x 11043'GIMPLE_PHI' x 11044'GIMPLE_RESX' x 11045'GIMPLE_RETURN' x x 11046'GIMPLE_SWITCH' x x 11047'GIMPLE_TRY' x 11048 11049 11050File: gccint.info, Node: GIMPLE Exception Handling, Next: Temporaries, Prev: GIMPLE instruction set, Up: GIMPLE 11051 1105211.4 Exception Handling 11053======================= 11054 11055Other exception handling constructs are represented using 11056'GIMPLE_TRY_CATCH'. 'GIMPLE_TRY_CATCH' has two operands. The first 11057operand is a sequence of statements to execute. If executing these 11058statements does not throw an exception, then the second operand is 11059ignored. Otherwise, if an exception is thrown, then the second operand 11060of the 'GIMPLE_TRY_CATCH' is checked. The second operand may have the 11061following forms: 11062 11063 1. A sequence of statements to execute. When an exception occurs, 11064 these statements are executed, and then the exception is rethrown. 11065 11066 2. A sequence of 'GIMPLE_CATCH' statements. Each 'GIMPLE_CATCH' has a 11067 list of applicable exception types and handler code. If the thrown 11068 exception matches one of the caught types, the associated handler 11069 code is executed. If the handler code falls off the bottom, 11070 execution continues after the original 'GIMPLE_TRY_CATCH'. 11071 11072 3. A 'GIMPLE_EH_FILTER' statement. This has a list of permitted 11073 exception types, and code to handle a match failure. If the thrown 11074 exception does not match one of the allowed types, the associated 11075 match failure code is executed. If the thrown exception does 11076 match, it continues unwinding the stack looking for the next 11077 handler. 11078 11079 Currently throwing an exception is not directly represented in GIMPLE, 11080since it is implemented by calling a function. At some point in the 11081future we will want to add some way to express that the call will throw 11082an exception of a known type. 11083 11084 Just before running the optimizers, the compiler lowers the high-level 11085EH constructs above into a set of 'goto's, magic labels, and EH regions. 11086Continuing to unwind at the end of a cleanup is represented with a 11087'GIMPLE_RESX'. 11088 11089 11090File: gccint.info, Node: Temporaries, Next: Operands, Prev: GIMPLE Exception Handling, Up: GIMPLE 11091 1109211.5 Temporaries 11093================ 11094 11095When gimplification encounters a subexpression that is too complex, it 11096creates a new temporary variable to hold the value of the subexpression, 11097and adds a new statement to initialize it before the current statement. 11098These special temporaries are known as 'expression temporaries', and are 11099allocated using 'get_formal_tmp_var'. The compiler tries to always 11100evaluate identical expressions into the same temporary, to simplify 11101elimination of redundant calculations. 11102 11103 We can only use expression temporaries when we know that it will not be 11104reevaluated before its value is used, and that it will not be otherwise 11105modified(1). Other temporaries can be allocated using 11106'get_initialized_tmp_var' or 'create_tmp_var'. 11107 11108 Currently, an expression like 'a = b + 5' is not reduced any further. 11109We tried converting it to something like 11110 T1 = b + 5; 11111 a = T1; 11112 but this bloated the representation for minimal benefit. However, a 11113variable which must live in memory cannot appear in an expression; its 11114value is explicitly loaded into a temporary first. Similarly, storing 11115the value of an expression to a memory variable goes through a 11116temporary. 11117 11118 ---------- Footnotes ---------- 11119 11120 (1) These restrictions are derived from those in Morgan 4.8. 11121 11122 11123File: gccint.info, Node: Operands, Next: Manipulating GIMPLE statements, Prev: Temporaries, Up: GIMPLE 11124 1112511.6 Operands 11126============= 11127 11128In general, expressions in GIMPLE consist of an operation and the 11129appropriate number of simple operands; these operands must either be a 11130GIMPLE rvalue ('is_gimple_val'), i.e. a constant or a register variable. 11131More complex operands are factored out into temporaries, so that 11132 a = b + c + d 11133 becomes 11134 T1 = b + c; 11135 a = T1 + d; 11136 11137 The same rule holds for arguments to a 'GIMPLE_CALL'. 11138 11139 The target of an assignment is usually a variable, but can also be a 11140'MEM_REF' or a compound lvalue as described below. 11141 11142* Menu: 11143 11144* Compound Expressions:: 11145* Compound Lvalues:: 11146* Conditional Expressions:: 11147* Logical Operators:: 11148 11149 11150File: gccint.info, Node: Compound Expressions, Next: Compound Lvalues, Up: Operands 11151 1115211.6.1 Compound Expressions 11153--------------------------- 11154 11155The left-hand side of a C comma expression is simply moved into a 11156separate statement. 11157 11158 11159File: gccint.info, Node: Compound Lvalues, Next: Conditional Expressions, Prev: Compound Expressions, Up: Operands 11160 1116111.6.2 Compound Lvalues 11162----------------------- 11163 11164Currently compound lvalues involving array and structure field 11165references are not broken down; an expression like 'a.b[2] = 42' is not 11166reduced any further (though complex array subscripts are). This 11167restriction is a workaround for limitations in later optimizers; if we 11168were to convert this to 11169 11170 T1 = &a.b; 11171 T1[2] = 42; 11172 11173 alias analysis would not remember that the reference to 'T1[2]' came by 11174way of 'a.b', so it would think that the assignment could alias another 11175member of 'a'; this broke 'struct-alias-1.c'. Future optimizer 11176improvements may make this limitation unnecessary. 11177 11178 11179File: gccint.info, Node: Conditional Expressions, Next: Logical Operators, Prev: Compound Lvalues, Up: Operands 11180 1118111.6.3 Conditional Expressions 11182------------------------------ 11183 11184A C '?:' expression is converted into an 'if' statement with each branch 11185assigning to the same temporary. So, 11186 11187 a = b ? c : d; 11188 becomes 11189 if (b == 1) 11190 T1 = c; 11191 else 11192 T1 = d; 11193 a = T1; 11194 11195 The GIMPLE level if-conversion pass re-introduces '?:' expression, if 11196appropriate. It is used to vectorize loops with conditions using vector 11197conditional operations. 11198 11199 Note that in GIMPLE, 'if' statements are represented using 11200'GIMPLE_COND', as described below. 11201 11202 11203File: gccint.info, Node: Logical Operators, Prev: Conditional Expressions, Up: Operands 11204 1120511.6.4 Logical Operators 11206------------------------ 11207 11208Except when they appear in the condition operand of a 'GIMPLE_COND', 11209logical 'and' and 'or' operators are simplified as follows: 'a = b && c' 11210becomes 11211 11212 T1 = (bool)b; 11213 if (T1 == true) 11214 T1 = (bool)c; 11215 a = T1; 11216 11217 Note that 'T1' in this example cannot be an expression temporary, 11218because it has two different assignments. 11219 1122011.6.5 Manipulating operands 11221---------------------------- 11222 11223All gimple operands are of type 'tree'. But only certain types of trees 11224are allowed to be used as operand tuples. Basic validation is 11225controlled by the function 'get_gimple_rhs_class', which given a tree 11226code, returns an 'enum' with the following values of type 'enum 11227gimple_rhs_class' 11228 11229 * 'GIMPLE_INVALID_RHS' The tree cannot be used as a GIMPLE operand. 11230 11231 * 'GIMPLE_TERNARY_RHS' The tree is a valid GIMPLE ternary operation. 11232 11233 * 'GIMPLE_BINARY_RHS' The tree is a valid GIMPLE binary operation. 11234 11235 * 'GIMPLE_UNARY_RHS' The tree is a valid GIMPLE unary operation. 11236 11237 * 'GIMPLE_SINGLE_RHS' The tree is a single object, that cannot be 11238 split into simpler operands (for instance, 'SSA_NAME', 'VAR_DECL', 11239 'COMPONENT_REF', etc). 11240 11241 This operand class also acts as an escape hatch for tree nodes that 11242 may be flattened out into the operand vector, but would need more 11243 than two slots on the RHS. For instance, a 'COND_EXPR' expression 11244 of the form '(a op b) ? x : y' could be flattened out on the 11245 operand vector using 4 slots, but it would also require additional 11246 processing to distinguish 'c = a op b' from 'c = a op b ? x : y'. 11247 Something similar occurs with 'ASSERT_EXPR'. In time, these 11248 special case tree expressions should be flattened into the operand 11249 vector. 11250 11251 For tree nodes in the categories 'GIMPLE_TERNARY_RHS', 11252'GIMPLE_BINARY_RHS' and 'GIMPLE_UNARY_RHS', they cannot be stored inside 11253tuples directly. They first need to be flattened and separated into 11254individual components. For instance, given the GENERIC expression 11255 11256 a = b + c 11257 11258 its tree representation is: 11259 11260 MODIFY_EXPR <VAR_DECL <a>, PLUS_EXPR <VAR_DECL <b>, VAR_DECL <c>>> 11261 11262 In this case, the GIMPLE form for this statement is logically identical 11263to its GENERIC form but in GIMPLE, the 'PLUS_EXPR' on the RHS of the 11264assignment is not represented as a tree, instead the two operands are 11265taken out of the 'PLUS_EXPR' sub-tree and flattened into the GIMPLE 11266tuple as follows: 11267 11268 GIMPLE_ASSIGN <PLUS_EXPR, VAR_DECL <a>, VAR_DECL <b>, VAR_DECL <c>> 11269 1127011.6.6 Operand vector allocation 11271-------------------------------- 11272 11273The operand vector is stored at the bottom of the three tuple structures 11274that accept operands. This means, that depending on the code of a given 11275statement, its operand vector will be at different offsets from the base 11276of the structure. To access tuple operands use the following accessors 11277 11278 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 11279 Returns the number of operands in statement G. 11280 11281 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 11282 Returns operand 'I' from statement 'G'. 11283 11284 -- GIMPLE function: tree * gimple_ops (gimple g) 11285 Returns a pointer into the operand vector for statement 'G'. This 11286 is computed using an internal table called 'gimple_ops_offset_'[]. 11287 This table is indexed by the gimple code of 'G'. 11288 11289 When the compiler is built, this table is filled-in using the sizes 11290 of the structures used by each statement code defined in 11291 gimple.def. Since the operand vector is at the bottom of the 11292 structure, for a gimple code 'C' the offset is computed as sizeof 11293 (struct-of 'C') - sizeof (tree). 11294 11295 This mechanism adds one memory indirection to every access when 11296 using 'gimple_op'(), if this becomes a bottleneck, a pass can 11297 choose to memoize the result from 'gimple_ops'() and use that to 11298 access the operands. 11299 1130011.6.7 Operand validation 11301------------------------- 11302 11303When adding a new operand to a gimple statement, the operand will be 11304validated according to what each tuple accepts in its operand vector. 11305These predicates are called by the 'gimple_NAME_set_...()'. Each tuple 11306will use one of the following predicates (Note, this list is not 11307exhaustive): 11308 11309 -- GIMPLE function: bool is_gimple_val (tree t) 11310 Returns true if t is a "GIMPLE value", which are all the 11311 non-addressable stack variables (variables for which 11312 'is_gimple_reg' returns true) and constants (expressions for which 11313 'is_gimple_min_invariant' returns true). 11314 11315 -- GIMPLE function: bool is_gimple_addressable (tree t) 11316 Returns true if t is a symbol or memory reference whose address can 11317 be taken. 11318 11319 -- GIMPLE function: bool is_gimple_asm_val (tree t) 11320 Similar to 'is_gimple_val' but it also accepts hard registers. 11321 11322 -- GIMPLE function: bool is_gimple_call_addr (tree t) 11323 Return true if t is a valid expression to use as the function 11324 called by a 'GIMPLE_CALL'. 11325 11326 -- GIMPLE function: bool is_gimple_mem_ref_addr (tree t) 11327 Return true if t is a valid expression to use as first operand of a 11328 'MEM_REF' expression. 11329 11330 -- GIMPLE function: bool is_gimple_constant (tree t) 11331 Return true if t is a valid gimple constant. 11332 11333 -- GIMPLE function: bool is_gimple_min_invariant (tree t) 11334 Return true if t is a valid minimal invariant. This is different 11335 from constants, in that the specific value of t may not be known at 11336 compile time, but it is known that it doesn't change (e.g., the 11337 address of a function local variable). 11338 11339 -- GIMPLE function: bool is_gimple_ip_invariant (tree t) 11340 Return true if t is an interprocedural invariant. This means that 11341 t is a valid invariant in all functions (e.g. it can be an address 11342 of a global variable but not of a local one). 11343 11344 -- GIMPLE function: bool is_gimple_ip_invariant_address (tree t) 11345 Return true if t is an 'ADDR_EXPR' that does not change once the 11346 program is running (and which is valid in all functions). 11347 1134811.6.8 Statement validation 11349--------------------------- 11350 11351 -- GIMPLE function: bool is_gimple_assign (gimple g) 11352 Return true if the code of g is 'GIMPLE_ASSIGN'. 11353 11354 -- GIMPLE function: bool is_gimple_call (gimple g) 11355 Return true if the code of g is 'GIMPLE_CALL'. 11356 11357 -- GIMPLE function: bool is_gimple_debug (gimple g) 11358 Return true if the code of g is 'GIMPLE_DEBUG'. 11359 11360 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple g) 11361 Return true if g is a 'GIMPLE_ASSIGN' that performs a type cast 11362 operation. 11363 11364 -- GIMPLE function: bool gimple_debug_bind_p (gimple g) 11365 Return true if g is a 'GIMPLE_DEBUG' that binds the value of an 11366 expression to a variable. 11367 11368 -- GIMPLE function: bool is_gimple_omp (gimple g) 11369 Return true if g is any of the OpenMP codes. 11370 11371 11372File: gccint.info, Node: Manipulating GIMPLE statements, Next: Tuple specific accessors, Prev: Operands, Up: GIMPLE 11373 1137411.7 Manipulating GIMPLE statements 11375=================================== 11376 11377This section documents all the functions available to handle each of the 11378GIMPLE instructions. 11379 1138011.7.1 Common accessors 11381----------------------- 11382 11383The following are common accessors for gimple statements. 11384 11385 -- GIMPLE function: enum gimple_code gimple_code (gimple g) 11386 Return the code for statement 'G'. 11387 11388 -- GIMPLE function: basic_block gimple_bb (gimple g) 11389 Return the basic block to which statement 'G' belongs to. 11390 11391 -- GIMPLE function: tree gimple_block (gimple g) 11392 Return the lexical scope block holding statement 'G'. 11393 11394 -- GIMPLE function: tree gimple_expr_type (gimple stmt) 11395 Return the type of the main expression computed by 'STMT'. Return 11396 'void_type_node' if 'STMT' computes nothing. This will only return 11397 something meaningful for 'GIMPLE_ASSIGN', 'GIMPLE_COND' and 11398 'GIMPLE_CALL'. For all other tuple codes, it will return 11399 'void_type_node'. 11400 11401 -- GIMPLE function: enum tree_code gimple_expr_code (gimple stmt) 11402 Return the tree code for the expression computed by 'STMT'. This 11403 is only meaningful for 'GIMPLE_CALL', 'GIMPLE_ASSIGN' and 11404 'GIMPLE_COND'. If 'STMT' is 'GIMPLE_CALL', it will return 11405 'CALL_EXPR'. For 'GIMPLE_COND', it returns the code of the 11406 comparison predicate. For 'GIMPLE_ASSIGN' it returns the code of 11407 the operation performed by the 'RHS' of the assignment. 11408 11409 -- GIMPLE function: void gimple_set_block (gimple g, tree block) 11410 Set the lexical scope block of 'G' to 'BLOCK'. 11411 11412 -- GIMPLE function: location_t gimple_locus (gimple g) 11413 Return locus information for statement 'G'. 11414 11415 -- GIMPLE function: void gimple_set_locus (gimple g, location_t locus) 11416 Set locus information for statement 'G'. 11417 11418 -- GIMPLE function: bool gimple_locus_empty_p (gimple g) 11419 Return true if 'G' does not have locus information. 11420 11421 -- GIMPLE function: bool gimple_no_warning_p (gimple stmt) 11422 Return true if no warnings should be emitted for statement 'STMT'. 11423 11424 -- GIMPLE function: void gimple_set_visited (gimple stmt, bool 11425 visited_p) 11426 Set the visited status on statement 'STMT' to 'VISITED_P'. 11427 11428 -- GIMPLE function: bool gimple_visited_p (gimple stmt) 11429 Return the visited status on statement 'STMT'. 11430 11431 -- GIMPLE function: void gimple_set_plf (gimple stmt, enum plf_mask 11432 plf, bool val_p) 11433 Set pass local flag 'PLF' on statement 'STMT' to 'VAL_P'. 11434 11435 -- GIMPLE function: unsigned int gimple_plf (gimple stmt, enum plf_mask 11436 plf) 11437 Return the value of pass local flag 'PLF' on statement 'STMT'. 11438 11439 -- GIMPLE function: bool gimple_has_ops (gimple g) 11440 Return true if statement 'G' has register or memory operands. 11441 11442 -- GIMPLE function: bool gimple_has_mem_ops (gimple g) 11443 Return true if statement 'G' has memory operands. 11444 11445 -- GIMPLE function: unsigned gimple_num_ops (gimple g) 11446 Return the number of operands for statement 'G'. 11447 11448 -- GIMPLE function: tree * gimple_ops (gimple g) 11449 Return the array of operands for statement 'G'. 11450 11451 -- GIMPLE function: tree gimple_op (gimple g, unsigned i) 11452 Return operand 'I' for statement 'G'. 11453 11454 -- GIMPLE function: tree * gimple_op_ptr (gimple g, unsigned i) 11455 Return a pointer to operand 'I' for statement 'G'. 11456 11457 -- GIMPLE function: void gimple_set_op (gimple g, unsigned i, tree op) 11458 Set operand 'I' of statement 'G' to 'OP'. 11459 11460 -- GIMPLE function: bitmap gimple_addresses_taken (gimple stmt) 11461 Return the set of symbols that have had their address taken by 11462 'STMT'. 11463 11464 -- GIMPLE function: struct def_optype_d * gimple_def_ops (gimple g) 11465 Return the set of 'DEF' operands for statement 'G'. 11466 11467 -- GIMPLE function: void gimple_set_def_ops (gimple g, struct 11468 def_optype_d *def) 11469 Set 'DEF' to be the set of 'DEF' operands for statement 'G'. 11470 11471 -- GIMPLE function: struct use_optype_d * gimple_use_ops (gimple g) 11472 Return the set of 'USE' operands for statement 'G'. 11473 11474 -- GIMPLE function: void gimple_set_use_ops (gimple g, struct 11475 use_optype_d *use) 11476 Set 'USE' to be the set of 'USE' operands for statement 'G'. 11477 11478 -- GIMPLE function: struct voptype_d * gimple_vuse_ops (gimple g) 11479 Return the set of 'VUSE' operands for statement 'G'. 11480 11481 -- GIMPLE function: void gimple_set_vuse_ops (gimple g, struct 11482 voptype_d *ops) 11483 Set 'OPS' to be the set of 'VUSE' operands for statement 'G'. 11484 11485 -- GIMPLE function: struct voptype_d * gimple_vdef_ops (gimple g) 11486 Return the set of 'VDEF' operands for statement 'G'. 11487 11488 -- GIMPLE function: void gimple_set_vdef_ops (gimple g, struct 11489 voptype_d *ops) 11490 Set 'OPS' to be the set of 'VDEF' operands for statement 'G'. 11491 11492 -- GIMPLE function: bitmap gimple_loaded_syms (gimple g) 11493 Return the set of symbols loaded by statement 'G'. Each element of 11494 the set is the 'DECL_UID' of the corresponding symbol. 11495 11496 -- GIMPLE function: bitmap gimple_stored_syms (gimple g) 11497 Return the set of symbols stored by statement 'G'. Each element of 11498 the set is the 'DECL_UID' of the corresponding symbol. 11499 11500 -- GIMPLE function: bool gimple_modified_p (gimple g) 11501 Return true if statement 'G' has operands and the modified field 11502 has been set. 11503 11504 -- GIMPLE function: bool gimple_has_volatile_ops (gimple stmt) 11505 Return true if statement 'STMT' contains volatile operands. 11506 11507 -- GIMPLE function: void gimple_set_has_volatile_ops (gimple stmt, bool 11508 volatilep) 11509 Return true if statement 'STMT' contains volatile operands. 11510 11511 -- GIMPLE function: void update_stmt (gimple s) 11512 Mark statement 'S' as modified, and update it. 11513 11514 -- GIMPLE function: void update_stmt_if_modified (gimple s) 11515 Update statement 'S' if it has been marked modified. 11516 11517 -- GIMPLE function: gimple gimple_copy (gimple stmt) 11518 Return a deep copy of statement 'STMT'. 11519 11520 11521File: gccint.info, Node: Tuple specific accessors, Next: GIMPLE sequences, Prev: Manipulating GIMPLE statements, Up: GIMPLE 11522 1152311.8 Tuple specific accessors 11524============================= 11525 11526* Menu: 11527 11528* GIMPLE_ASM:: 11529* GIMPLE_ASSIGN:: 11530* GIMPLE_BIND:: 11531* GIMPLE_CALL:: 11532* GIMPLE_CATCH:: 11533* GIMPLE_COND:: 11534* GIMPLE_DEBUG:: 11535* GIMPLE_EH_FILTER:: 11536* GIMPLE_LABEL:: 11537* GIMPLE_GOTO:: 11538* GIMPLE_NOP:: 11539* GIMPLE_OMP_ATOMIC_LOAD:: 11540* GIMPLE_OMP_ATOMIC_STORE:: 11541* GIMPLE_OMP_CONTINUE:: 11542* GIMPLE_OMP_CRITICAL:: 11543* GIMPLE_OMP_FOR:: 11544* GIMPLE_OMP_MASTER:: 11545* GIMPLE_OMP_ORDERED:: 11546* GIMPLE_OMP_PARALLEL:: 11547* GIMPLE_OMP_RETURN:: 11548* GIMPLE_OMP_SECTION:: 11549* GIMPLE_OMP_SECTIONS:: 11550* GIMPLE_OMP_SINGLE:: 11551* GIMPLE_PHI:: 11552* GIMPLE_RESX:: 11553* GIMPLE_RETURN:: 11554* GIMPLE_SWITCH:: 11555* GIMPLE_TRY:: 11556* GIMPLE_WITH_CLEANUP_EXPR:: 11557 11558 11559File: gccint.info, Node: GIMPLE_ASM, Next: GIMPLE_ASSIGN, Up: Tuple specific accessors 11560 1156111.8.1 'GIMPLE_ASM' 11562------------------- 11563 11564 -- GIMPLE function: gasm *gimple_build_asm_vec ( const char *string, 11565 vec<tree, va_gc> *inputs, vec<tree, va_gc> *outputs, vec<tree, 11566 va_gc> *clobbers, vec<tree, va_gc> *labels) 11567 Build a 'GIMPLE_ASM' statement. This statement is used for 11568 building in-line assembly constructs. 'STRING' is the assembly 11569 code. 'INPUTS', 'OUTPUTS', 'CLOBBERS' and 'LABELS' are the inputs, 11570 outputs, clobbered registers and labels. 11571 11572 -- GIMPLE function: unsigned gimple_asm_ninputs (const gasm *g) 11573 Return the number of input operands for 'GIMPLE_ASM' 'G'. 11574 11575 -- GIMPLE function: unsigned gimple_asm_noutputs (const gasm *g) 11576 Return the number of output operands for 'GIMPLE_ASM' 'G'. 11577 11578 -- GIMPLE function: unsigned gimple_asm_nclobbers (const gasm *g) 11579 Return the number of clobber operands for 'GIMPLE_ASM' 'G'. 11580 11581 -- GIMPLE function: tree gimple_asm_input_op (const gasm *g, unsigned 11582 index) 11583 Return input operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11584 11585 -- GIMPLE function: void gimple_asm_set_input_op (gasm *g, unsigned 11586 index, tree in_op) 11587 Set 'IN_OP' to be input operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11588 11589 -- GIMPLE function: tree gimple_asm_output_op (const gasm *g, unsigned 11590 index) 11591 Return output operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11592 11593 -- GIMPLE function: void gimple_asm_set_output_op (gasm *g, unsigned 11594 index, tree out_op) 11595 Set 'OUT_OP' to be output operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11596 11597 -- GIMPLE function: tree gimple_asm_clobber_op (const gasm *g, unsigned 11598 index) 11599 Return clobber operand 'INDEX' of 'GIMPLE_ASM' 'G'. 11600 11601 -- GIMPLE function: void gimple_asm_set_clobber_op (gasm *g, unsigned 11602 index, tree clobber_op) 11603 Set 'CLOBBER_OP' to be clobber operand 'INDEX' in 'GIMPLE_ASM' 'G'. 11604 11605 -- GIMPLE function: const char * gimple_asm_string (const gasm *g) 11606 Return the string representing the assembly instruction in 11607 'GIMPLE_ASM' 'G'. 11608 11609 -- GIMPLE function: bool gimple_asm_volatile_p (const gasm *g) 11610 Return true if 'G' is an asm statement marked volatile. 11611 11612 -- GIMPLE function: void gimple_asm_set_volatile (gasm *g, bool 11613 volatile_p) 11614 Mark asm statement 'G' as volatile or non-volatile based on 11615 'VOLATILE_P'. 11616 11617 11618File: gccint.info, Node: GIMPLE_ASSIGN, Next: GIMPLE_BIND, Prev: GIMPLE_ASM, Up: Tuple specific accessors 11619 1162011.8.2 'GIMPLE_ASSIGN' 11621---------------------- 11622 11623 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, tree rhs) 11624 Build a 'GIMPLE_ASSIGN' statement. The left-hand side is an lvalue 11625 passed in lhs. The right-hand side can be either a unary or binary 11626 tree expression. The expression tree rhs will be flattened and its 11627 operands assigned to the corresponding operand slots in the new 11628 statement. This function is useful when you already have a tree 11629 expression that you want to convert into a tuple. However, try to 11630 avoid building expression trees for the sole purpose of calling 11631 this function. If you already have the operands in separate trees, 11632 it is better to use 'gimple_build_assign' with 'enum tree_code' 11633 argument and separate arguments for each operand. 11634 11635 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11636 tree_code subcode, tree op1, tree op2, tree op3) 11637 This function is similar to two operand 'gimple_build_assign', but 11638 is used to build a 'GIMPLE_ASSIGN' statement when the operands of 11639 the right-hand side of the assignment are already split into 11640 different operands. 11641 11642 The left-hand side is an lvalue passed in lhs. Subcode is the 11643 'tree_code' for the right-hand side of the assignment. Op1, op2 11644 and op3 are the operands. 11645 11646 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11647 tree_code subcode, tree op1, tree op2) 11648 Like the above 5 operand 'gimple_build_assign', but with the last 11649 argument 'NULL' - this overload should not be used for 11650 'GIMPLE_TERNARY_RHS' assignments. 11651 11652 -- GIMPLE function: gassign *gimple_build_assign (tree lhs, enum 11653 tree_code subcode, tree op1) 11654 Like the above 4 operand 'gimple_build_assign', but with the last 11655 argument 'NULL' - this overload should be used only for 11656 'GIMPLE_UNARY_RHS' and 'GIMPLE_SINGLE_RHS' assignments. 11657 11658 -- GIMPLE function: gimple gimplify_assign (tree dst, tree src, 11659 gimple_seq *seq_p) 11660 Build a new 'GIMPLE_ASSIGN' tuple and append it to the end of 11661 '*SEQ_P'. 11662 11663 'DST'/'SRC' are the destination and source respectively. You can pass 11664ungimplified trees in 'DST' or 'SRC', in which case they will be 11665converted to a gimple operand if necessary. 11666 11667 This function returns the newly created 'GIMPLE_ASSIGN' tuple. 11668 11669 -- GIMPLE function: enum tree_code gimple_assign_rhs_code (gimple g) 11670 Return the code of the expression computed on the 'RHS' of 11671 assignment statement 'G'. 11672 11673 -- GIMPLE function: enum gimple_rhs_class gimple_assign_rhs_class 11674 (gimple g) 11675 Return the gimple rhs class of the code for the expression computed 11676 on the rhs of assignment statement 'G'. This will never return 11677 'GIMPLE_INVALID_RHS'. 11678 11679 -- GIMPLE function: tree gimple_assign_lhs (gimple g) 11680 Return the 'LHS' of assignment statement 'G'. 11681 11682 -- GIMPLE function: tree * gimple_assign_lhs_ptr (gimple g) 11683 Return a pointer to the 'LHS' of assignment statement 'G'. 11684 11685 -- GIMPLE function: tree gimple_assign_rhs1 (gimple g) 11686 Return the first operand on the 'RHS' of assignment statement 'G'. 11687 11688 -- GIMPLE function: tree * gimple_assign_rhs1_ptr (gimple g) 11689 Return the address of the first operand on the 'RHS' of assignment 11690 statement 'G'. 11691 11692 -- GIMPLE function: tree gimple_assign_rhs2 (gimple g) 11693 Return the second operand on the 'RHS' of assignment statement 'G'. 11694 11695 -- GIMPLE function: tree * gimple_assign_rhs2_ptr (gimple g) 11696 Return the address of the second operand on the 'RHS' of assignment 11697 statement 'G'. 11698 11699 -- GIMPLE function: tree gimple_assign_rhs3 (gimple g) 11700 Return the third operand on the 'RHS' of assignment statement 'G'. 11701 11702 -- GIMPLE function: tree * gimple_assign_rhs3_ptr (gimple g) 11703 Return the address of the third operand on the 'RHS' of assignment 11704 statement 'G'. 11705 11706 -- GIMPLE function: void gimple_assign_set_lhs (gimple g, tree lhs) 11707 Set 'LHS' to be the 'LHS' operand of assignment statement 'G'. 11708 11709 -- GIMPLE function: void gimple_assign_set_rhs1 (gimple g, tree rhs) 11710 Set 'RHS' to be the first operand on the 'RHS' of assignment 11711 statement 'G'. 11712 11713 -- GIMPLE function: void gimple_assign_set_rhs2 (gimple g, tree rhs) 11714 Set 'RHS' to be the second operand on the 'RHS' of assignment 11715 statement 'G'. 11716 11717 -- GIMPLE function: void gimple_assign_set_rhs3 (gimple g, tree rhs) 11718 Set 'RHS' to be the third operand on the 'RHS' of assignment 11719 statement 'G'. 11720 11721 -- GIMPLE function: bool gimple_assign_cast_p (const_gimple s) 11722 Return true if 'S' is a type-cast assignment. 11723 11724 11725File: gccint.info, Node: GIMPLE_BIND, Next: GIMPLE_CALL, Prev: GIMPLE_ASSIGN, Up: Tuple specific accessors 11726 1172711.8.3 'GIMPLE_BIND' 11728-------------------- 11729 11730 -- GIMPLE function: gbind *gimple_build_bind (tree vars, gimple_seq 11731 body) 11732 Build a 'GIMPLE_BIND' statement with a list of variables in 'VARS' 11733 and a body of statements in sequence 'BODY'. 11734 11735 -- GIMPLE function: tree gimple_bind_vars (const gbind *g) 11736 Return the variables declared in the 'GIMPLE_BIND' statement 'G'. 11737 11738 -- GIMPLE function: void gimple_bind_set_vars (gbind *g, tree vars) 11739 Set 'VARS' to be the set of variables declared in the 'GIMPLE_BIND' 11740 statement 'G'. 11741 11742 -- GIMPLE function: void gimple_bind_append_vars (gbind *g, tree vars) 11743 Append 'VARS' to the set of variables declared in the 'GIMPLE_BIND' 11744 statement 'G'. 11745 11746 -- GIMPLE function: gimple_seq gimple_bind_body (gbind *g) 11747 Return the GIMPLE sequence contained in the 'GIMPLE_BIND' statement 11748 'G'. 11749 11750 -- GIMPLE function: void gimple_bind_set_body (gbind *g, gimple_seq 11751 seq) 11752 Set 'SEQ' to be sequence contained in the 'GIMPLE_BIND' statement 11753 'G'. 11754 11755 -- GIMPLE function: void gimple_bind_add_stmt (gbind *gs, gimple stmt) 11756 Append a statement to the end of a 'GIMPLE_BIND''s body. 11757 11758 -- GIMPLE function: void gimple_bind_add_seq (gbind *gs, gimple_seq 11759 seq) 11760 Append a sequence of statements to the end of a 'GIMPLE_BIND''s 11761 body. 11762 11763 -- GIMPLE function: tree gimple_bind_block (const gbind *g) 11764 Return the 'TREE_BLOCK' node associated with 'GIMPLE_BIND' 11765 statement 'G'. This is analogous to the 'BIND_EXPR_BLOCK' field in 11766 trees. 11767 11768 -- GIMPLE function: void gimple_bind_set_block (gbind *g, tree block) 11769 Set 'BLOCK' to be the 'TREE_BLOCK' node associated with 11770 'GIMPLE_BIND' statement 'G'. 11771 11772 11773File: gccint.info, Node: GIMPLE_CALL, Next: GIMPLE_CATCH, Prev: GIMPLE_BIND, Up: Tuple specific accessors 11774 1177511.8.4 'GIMPLE_CALL' 11776-------------------- 11777 11778 -- GIMPLE function: gcall *gimple_build_call (tree fn, unsigned nargs, 11779 ...) 11780 Build a 'GIMPLE_CALL' statement to function 'FN'. The argument 11781 'FN' must be either a 'FUNCTION_DECL' or a gimple call address as 11782 determined by 'is_gimple_call_addr'. 'NARGS' are the number of 11783 arguments. The rest of the arguments follow the argument 'NARGS', 11784 and must be trees that are valid as rvalues in gimple (i.e., each 11785 operand is validated with 'is_gimple_operand'). 11786 11787 -- GIMPLE function: gcall *gimple_build_call_from_tree (tree call_expr) 11788 Build a 'GIMPLE_CALL' from a 'CALL_EXPR' node. The arguments and 11789 the function are taken from the expression directly. This routine 11790 assumes that 'call_expr' is already in GIMPLE form. That is, its 11791 operands are GIMPLE values and the function call needs no further 11792 simplification. All the call flags in 'call_expr' are copied over 11793 to the new 'GIMPLE_CALL'. 11794 11795 -- GIMPLE function: gcall *gimple_build_call_vec (tree fn, 'vec<tree>' 11796 args) 11797 Identical to 'gimple_build_call' but the arguments are stored in a 11798 'vec<tree>'. 11799 11800 -- GIMPLE function: tree gimple_call_lhs (gimple g) 11801 Return the 'LHS' of call statement 'G'. 11802 11803 -- GIMPLE function: tree * gimple_call_lhs_ptr (gimple g) 11804 Return a pointer to the 'LHS' of call statement 'G'. 11805 11806 -- GIMPLE function: void gimple_call_set_lhs (gimple g, tree lhs) 11807 Set 'LHS' to be the 'LHS' operand of call statement 'G'. 11808 11809 -- GIMPLE function: tree gimple_call_fn (gimple g) 11810 Return the tree node representing the function called by call 11811 statement 'G'. 11812 11813 -- GIMPLE function: void gimple_call_set_fn (gcall *g, tree fn) 11814 Set 'FN' to be the function called by call statement 'G'. This has 11815 to be a gimple value specifying the address of the called function. 11816 11817 -- GIMPLE function: tree gimple_call_fndecl (gimple g) 11818 If a given 'GIMPLE_CALL''s callee is a 'FUNCTION_DECL', return it. 11819 Otherwise return 'NULL'. This function is analogous to 11820 'get_callee_fndecl' in 'GENERIC'. 11821 11822 -- GIMPLE function: tree gimple_call_set_fndecl (gimple g, tree fndecl) 11823 Set the called function to 'FNDECL'. 11824 11825 -- GIMPLE function: tree gimple_call_return_type (const gcall *g) 11826 Return the type returned by call statement 'G'. 11827 11828 -- GIMPLE function: tree gimple_call_chain (gimple g) 11829 Return the static chain for call statement 'G'. 11830 11831 -- GIMPLE function: void gimple_call_set_chain (gcall *g, tree chain) 11832 Set 'CHAIN' to be the static chain for call statement 'G'. 11833 11834 -- GIMPLE function: unsigned gimple_call_num_args (gimple g) 11835 Return the number of arguments used by call statement 'G'. 11836 11837 -- GIMPLE function: tree gimple_call_arg (gimple g, unsigned index) 11838 Return the argument at position 'INDEX' for call statement 'G'. 11839 The first argument is 0. 11840 11841 -- GIMPLE function: tree * gimple_call_arg_ptr (gimple g, unsigned 11842 index) 11843 Return a pointer to the argument at position 'INDEX' for call 11844 statement 'G'. 11845 11846 -- GIMPLE function: void gimple_call_set_arg (gimple g, unsigned index, 11847 tree arg) 11848 Set 'ARG' to be the argument at position 'INDEX' for call statement 11849 'G'. 11850 11851 -- GIMPLE function: void gimple_call_set_tail (gcall *s) 11852 Mark call statement 'S' as being a tail call (i.e., a call just 11853 before the exit of a function). These calls are candidate for tail 11854 call optimization. 11855 11856 -- GIMPLE function: bool gimple_call_tail_p (gcall *s) 11857 Return true if 'GIMPLE_CALL' 'S' is marked as a tail call. 11858 11859 -- GIMPLE function: bool gimple_call_noreturn_p (gimple s) 11860 Return true if 'S' is a noreturn call. 11861 11862 -- GIMPLE function: gimple gimple_call_copy_skip_args (gcall *stmt, 11863 bitmap args_to_skip) 11864 Build a 'GIMPLE_CALL' identical to 'STMT' but skipping the 11865 arguments in the positions marked by the set 'ARGS_TO_SKIP'. 11866 11867 11868File: gccint.info, Node: GIMPLE_CATCH, Next: GIMPLE_COND, Prev: GIMPLE_CALL, Up: Tuple specific accessors 11869 1187011.8.5 'GIMPLE_CATCH' 11871--------------------- 11872 11873 -- GIMPLE function: gcatch *gimple_build_catch (tree types, gimple_seq 11874 handler) 11875 Build a 'GIMPLE_CATCH' statement. 'TYPES' are the tree types this 11876 catch handles. 'HANDLER' is a sequence of statements with the code 11877 for the handler. 11878 11879 -- GIMPLE function: tree gimple_catch_types (const gcatch *g) 11880 Return the types handled by 'GIMPLE_CATCH' statement 'G'. 11881 11882 -- GIMPLE function: tree * gimple_catch_types_ptr (gcatch *g) 11883 Return a pointer to the types handled by 'GIMPLE_CATCH' statement 11884 'G'. 11885 11886 -- GIMPLE function: gimple_seq gimple_catch_handler (gcatch *g) 11887 Return the GIMPLE sequence representing the body of the handler of 11888 'GIMPLE_CATCH' statement 'G'. 11889 11890 -- GIMPLE function: void gimple_catch_set_types (gcatch *g, tree t) 11891 Set 'T' to be the set of types handled by 'GIMPLE_CATCH' 'G'. 11892 11893 -- GIMPLE function: void gimple_catch_set_handler (gcatch *g, 11894 gimple_seq handler) 11895 Set 'HANDLER' to be the body of 'GIMPLE_CATCH' 'G'. 11896 11897 11898File: gccint.info, Node: GIMPLE_COND, Next: GIMPLE_DEBUG, Prev: GIMPLE_CATCH, Up: Tuple specific accessors 11899 1190011.8.6 'GIMPLE_COND' 11901-------------------- 11902 11903 -- GIMPLE function: gcond *gimple_build_cond ( enum tree_code 11904 pred_code, tree lhs, tree rhs, tree t_label, tree f_label) 11905 Build a 'GIMPLE_COND' statement. 'A' 'GIMPLE_COND' statement 11906 compares 'LHS' and 'RHS' and if the condition in 'PRED_CODE' is 11907 true, jump to the label in 't_label', otherwise jump to the label 11908 in 'f_label'. 'PRED_CODE' are relational operator tree codes like 11909 'EQ_EXPR', 'LT_EXPR', 'LE_EXPR', 'NE_EXPR', etc. 11910 11911 -- GIMPLE function: gcond *gimple_build_cond_from_tree (tree cond, tree 11912 t_label, tree f_label) 11913 Build a 'GIMPLE_COND' statement from the conditional expression 11914 tree 'COND'. 'T_LABEL' and 'F_LABEL' are as in 11915 'gimple_build_cond'. 11916 11917 -- GIMPLE function: enum tree_code gimple_cond_code (gimple g) 11918 Return the code of the predicate computed by conditional statement 11919 'G'. 11920 11921 -- GIMPLE function: void gimple_cond_set_code (gcond *g, enum tree_code 11922 code) 11923 Set 'CODE' to be the predicate code for the conditional statement 11924 'G'. 11925 11926 -- GIMPLE function: tree gimple_cond_lhs (gimple g) 11927 Return the 'LHS' of the predicate computed by conditional statement 11928 'G'. 11929 11930 -- GIMPLE function: void gimple_cond_set_lhs (gcond *g, tree lhs) 11931 Set 'LHS' to be the 'LHS' operand of the predicate computed by 11932 conditional statement 'G'. 11933 11934 -- GIMPLE function: tree gimple_cond_rhs (gimple g) 11935 Return the 'RHS' operand of the predicate computed by conditional 11936 'G'. 11937 11938 -- GIMPLE function: void gimple_cond_set_rhs (gcond *g, tree rhs) 11939 Set 'RHS' to be the 'RHS' operand of the predicate computed by 11940 conditional statement 'G'. 11941 11942 -- GIMPLE function: tree gimple_cond_true_label (const gcond *g) 11943 Return the label used by conditional statement 'G' when its 11944 predicate evaluates to true. 11945 11946 -- GIMPLE function: void gimple_cond_set_true_label (gcond *g, tree 11947 label) 11948 Set 'LABEL' to be the label used by conditional statement 'G' when 11949 its predicate evaluates to true. 11950 11951 -- GIMPLE function: void gimple_cond_set_false_label (gcond *g, tree 11952 label) 11953 Set 'LABEL' to be the label used by conditional statement 'G' when 11954 its predicate evaluates to false. 11955 11956 -- GIMPLE function: tree gimple_cond_false_label (const gcond *g) 11957 Return the label used by conditional statement 'G' when its 11958 predicate evaluates to false. 11959 11960 -- GIMPLE function: void gimple_cond_make_false (gcond *g) 11961 Set the conditional 'COND_STMT' to be of the form 'if (1 == 0)'. 11962 11963 -- GIMPLE function: void gimple_cond_make_true (gcond *g) 11964 Set the conditional 'COND_STMT' to be of the form 'if (1 == 1)'. 11965 11966 11967File: gccint.info, Node: GIMPLE_DEBUG, Next: GIMPLE_EH_FILTER, Prev: GIMPLE_COND, Up: Tuple specific accessors 11968 1196911.8.7 'GIMPLE_DEBUG' 11970--------------------- 11971 11972 -- GIMPLE function: gdebug *gimple_build_debug_bind (tree var, tree 11973 value, gimple stmt) 11974 Build a 'GIMPLE_DEBUG' statement with 'GIMPLE_DEBUG_BIND' of 11975 'subcode'. The effect of this statement is to tell debug 11976 information generation machinery that the value of user variable 11977 'var' is given by 'value' at that point, and to remain with that 11978 value until 'var' runs out of scope, a dynamically-subsequent debug 11979 bind statement overrides the binding, or conflicting values reach a 11980 control flow merge point. Even if components of the 'value' 11981 expression change afterwards, the variable is supposed to retain 11982 the same value, though not necessarily the same location. 11983 11984 It is expected that 'var' be most often a tree for automatic user 11985 variables ('VAR_DECL' or 'PARM_DECL') that satisfy the requirements 11986 for gimple registers, but it may also be a tree for a scalarized 11987 component of a user variable ('ARRAY_REF', 'COMPONENT_REF'), or a 11988 debug temporary ('DEBUG_EXPR_DECL'). 11989 11990 As for 'value', it can be an arbitrary tree expression, but it is 11991 recommended that it be in a suitable form for a gimple assignment 11992 'RHS'. It is not expected that user variables that could appear as 11993 'var' ever appear in 'value', because in the latter we'd have their 11994 'SSA_NAME's instead, but even if they were not in SSA form, user 11995 variables appearing in 'value' are to be regarded as part of the 11996 executable code space, whereas those in 'var' are to be regarded as 11997 part of the source code space. There is no way to refer to the 11998 value bound to a user variable within a 'value' expression. 11999 12000 If 'value' is 'GIMPLE_DEBUG_BIND_NOVALUE', debug information 12001 generation machinery is informed that the variable 'var' is 12002 unbound, i.e., that its value is indeterminate, which sometimes 12003 means it is really unavailable, and other times that the compiler 12004 could not keep track of it. 12005 12006 Block and location information for the newly-created stmt are taken 12007 from 'stmt', if given. 12008 12009 -- GIMPLE function: tree gimple_debug_bind_get_var (gimple stmt) 12010 Return the user variable VAR that is bound at 'stmt'. 12011 12012 -- GIMPLE function: tree gimple_debug_bind_get_value (gimple stmt) 12013 Return the value expression that is bound to a user variable at 12014 'stmt'. 12015 12016 -- GIMPLE function: tree * gimple_debug_bind_get_value_ptr (gimple 12017 stmt) 12018 Return a pointer to the value expression that is bound to a user 12019 variable at 'stmt'. 12020 12021 -- GIMPLE function: void gimple_debug_bind_set_var (gimple stmt, tree 12022 var) 12023 Modify the user variable bound at 'stmt' to VAR. 12024 12025 -- GIMPLE function: void gimple_debug_bind_set_value (gimple stmt, tree 12026 var) 12027 Modify the value bound to the user variable bound at 'stmt' to 12028 VALUE. 12029 12030 -- GIMPLE function: void gimple_debug_bind_reset_value (gimple stmt) 12031 Modify the value bound to the user variable bound at 'stmt' so that 12032 the variable becomes unbound. 12033 12034 -- GIMPLE function: bool gimple_debug_bind_has_value_p (gimple stmt) 12035 Return 'TRUE' if 'stmt' binds a user variable to a value, and 12036 'FALSE' if it unbinds the variable. 12037 12038 12039File: gccint.info, Node: GIMPLE_EH_FILTER, Next: GIMPLE_LABEL, Prev: GIMPLE_DEBUG, Up: Tuple specific accessors 12040 1204111.8.8 'GIMPLE_EH_FILTER' 12042------------------------- 12043 12044 -- GIMPLE function: geh_filter *gimple_build_eh_filter (tree types, 12045 gimple_seq failure) 12046 Build a 'GIMPLE_EH_FILTER' statement. 'TYPES' are the filter's 12047 types. 'FAILURE' is a sequence with the filter's failure action. 12048 12049 -- GIMPLE function: tree gimple_eh_filter_types (gimple g) 12050 Return the types handled by 'GIMPLE_EH_FILTER' statement 'G'. 12051 12052 -- GIMPLE function: tree * gimple_eh_filter_types_ptr (gimple g) 12053 Return a pointer to the types handled by 'GIMPLE_EH_FILTER' 12054 statement 'G'. 12055 12056 -- GIMPLE function: gimple_seq gimple_eh_filter_failure (gimple g) 12057 Return the sequence of statement to execute when 'GIMPLE_EH_FILTER' 12058 statement fails. 12059 12060 -- GIMPLE function: void gimple_eh_filter_set_types (geh_filter *g, 12061 tree types) 12062 Set 'TYPES' to be the set of types handled by 'GIMPLE_EH_FILTER' 12063 'G'. 12064 12065 -- GIMPLE function: void gimple_eh_filter_set_failure (geh_filter *g, 12066 gimple_seq failure) 12067 Set 'FAILURE' to be the sequence of statements to execute on 12068 failure for 'GIMPLE_EH_FILTER' 'G'. 12069 12070 -- GIMPLE function: tree gimple_eh_must_not_throw_fndecl ( geh_mnt 12071 *eh_mnt_stmt) 12072 Get the function decl to be called by the MUST_NOT_THROW region. 12073 12074 -- GIMPLE function: void gimple_eh_must_not_throw_set_fndecl ( geh_mnt 12075 *eh_mnt_stmt, tree decl) 12076 Set the function decl to be called by GS to DECL. 12077 12078 12079File: gccint.info, Node: GIMPLE_LABEL, Next: GIMPLE_GOTO, Prev: GIMPLE_EH_FILTER, Up: Tuple specific accessors 12080 1208111.8.9 'GIMPLE_LABEL' 12082--------------------- 12083 12084 -- GIMPLE function: glabel *gimple_build_label (tree label) 12085 Build a 'GIMPLE_LABEL' statement with corresponding to the tree 12086 label, 'LABEL'. 12087 12088 -- GIMPLE function: tree gimple_label_label (const glabel *g) 12089 Return the 'LABEL_DECL' node used by 'GIMPLE_LABEL' statement 'G'. 12090 12091 -- GIMPLE function: void gimple_label_set_label (glabel *g, tree label) 12092 Set 'LABEL' to be the 'LABEL_DECL' node used by 'GIMPLE_LABEL' 12093 statement 'G'. 12094 12095 12096File: gccint.info, Node: GIMPLE_GOTO, Next: GIMPLE_NOP, Prev: GIMPLE_LABEL, Up: Tuple specific accessors 12097 1209811.8.10 'GIMPLE_GOTO' 12099--------------------- 12100 12101 -- GIMPLE function: ggoto *gimple_build_goto (tree dest) 12102 Build a 'GIMPLE_GOTO' statement to label 'DEST'. 12103 12104 -- GIMPLE function: tree gimple_goto_dest (gimple g) 12105 Return the destination of the unconditional jump 'G'. 12106 12107 -- GIMPLE function: void gimple_goto_set_dest (ggoto *g, tree dest) 12108 Set 'DEST' to be the destination of the unconditional jump 'G'. 12109 12110 12111File: gccint.info, Node: GIMPLE_NOP, Next: GIMPLE_OMP_ATOMIC_LOAD, Prev: GIMPLE_GOTO, Up: Tuple specific accessors 12112 1211311.8.11 'GIMPLE_NOP' 12114-------------------- 12115 12116 -- GIMPLE function: gimple gimple_build_nop (void) 12117 Build a 'GIMPLE_NOP' statement. 12118 12119 -- GIMPLE function: bool gimple_nop_p (gimple g) 12120 Returns 'TRUE' if statement 'G' is a 'GIMPLE_NOP'. 12121 12122 12123File: gccint.info, Node: GIMPLE_OMP_ATOMIC_LOAD, Next: GIMPLE_OMP_ATOMIC_STORE, Prev: GIMPLE_NOP, Up: Tuple specific accessors 12124 1212511.8.12 'GIMPLE_OMP_ATOMIC_LOAD' 12126-------------------------------- 12127 12128 -- GIMPLE function: gomp_atomic_load *gimple_build_omp_atomic_load ( 12129 tree lhs, tree rhs) 12130 Build a 'GIMPLE_OMP_ATOMIC_LOAD' statement. 'LHS' is the left-hand 12131 side of the assignment. 'RHS' is the right-hand side of the 12132 assignment. 12133 12134 -- GIMPLE function: void gimple_omp_atomic_load_set_lhs ( 12135 gomp_atomic_load *g, tree lhs) 12136 Set the 'LHS' of an atomic load. 12137 12138 -- GIMPLE function: tree gimple_omp_atomic_load_lhs ( const 12139 gomp_atomic_load *g) 12140 Get the 'LHS' of an atomic load. 12141 12142 -- GIMPLE function: void gimple_omp_atomic_load_set_rhs ( 12143 gomp_atomic_load *g, tree rhs) 12144 Set the 'RHS' of an atomic set. 12145 12146 -- GIMPLE function: tree gimple_omp_atomic_load_rhs ( const 12147 gomp_atomic_load *g) 12148 Get the 'RHS' of an atomic set. 12149 12150 12151File: gccint.info, Node: GIMPLE_OMP_ATOMIC_STORE, Next: GIMPLE_OMP_CONTINUE, Prev: GIMPLE_OMP_ATOMIC_LOAD, Up: Tuple specific accessors 12152 1215311.8.13 'GIMPLE_OMP_ATOMIC_STORE' 12154--------------------------------- 12155 12156 -- GIMPLE function: gomp_atomic_store *gimple_build_omp_atomic_store ( 12157 tree val) 12158 Build a 'GIMPLE_OMP_ATOMIC_STORE' statement. 'VAL' is the value to 12159 be stored. 12160 12161 -- GIMPLE function: void gimple_omp_atomic_store_set_val ( 12162 gomp_atomic_store *g, tree val) 12163 Set the value being stored in an atomic store. 12164 12165 -- GIMPLE function: tree gimple_omp_atomic_store_val ( const 12166 gomp_atomic_store *g) 12167 Return the value being stored in an atomic store. 12168 12169 12170File: gccint.info, Node: GIMPLE_OMP_CONTINUE, Next: GIMPLE_OMP_CRITICAL, Prev: GIMPLE_OMP_ATOMIC_STORE, Up: Tuple specific accessors 12171 1217211.8.14 'GIMPLE_OMP_CONTINUE' 12173----------------------------- 12174 12175 -- GIMPLE function: gomp_continue *gimple_build_omp_continue ( tree 12176 control_def, tree control_use) 12177 Build a 'GIMPLE_OMP_CONTINUE' statement. 'CONTROL_DEF' is the 12178 definition of the control variable. 'CONTROL_USE' is the use of 12179 the control variable. 12180 12181 -- GIMPLE function: tree gimple_omp_continue_control_def ( const 12182 gomp_continue *s) 12183 Return the definition of the control variable on a 12184 'GIMPLE_OMP_CONTINUE' in 'S'. 12185 12186 -- GIMPLE function: tree gimple_omp_continue_control_def_ptr ( 12187 gomp_continue *s) 12188 Same as above, but return the pointer. 12189 12190 -- GIMPLE function: tree gimple_omp_continue_set_control_def ( 12191 gomp_continue *s) 12192 Set the control variable definition for a 'GIMPLE_OMP_CONTINUE' 12193 statement in 'S'. 12194 12195 -- GIMPLE function: tree gimple_omp_continue_control_use ( const 12196 gomp_continue *s) 12197 Return the use of the control variable on a 'GIMPLE_OMP_CONTINUE' 12198 in 'S'. 12199 12200 -- GIMPLE function: tree gimple_omp_continue_control_use_ptr ( 12201 gomp_continue *s) 12202 Same as above, but return the pointer. 12203 12204 -- GIMPLE function: tree gimple_omp_continue_set_control_use ( 12205 gomp_continue *s) 12206 Set the control variable use for a 'GIMPLE_OMP_CONTINUE' statement 12207 in 'S'. 12208 12209 12210File: gccint.info, Node: GIMPLE_OMP_CRITICAL, Next: GIMPLE_OMP_FOR, Prev: GIMPLE_OMP_CONTINUE, Up: Tuple specific accessors 12211 1221211.8.15 'GIMPLE_OMP_CRITICAL' 12213----------------------------- 12214 12215 -- GIMPLE function: gomp_critical *gimple_build_omp_critical ( 12216 gimple_seq body, tree name) 12217 Build a 'GIMPLE_OMP_CRITICAL' statement. 'BODY' is the sequence of 12218 statements for which only one thread can execute. 'NAME' is an 12219 optional identifier for this critical block. 12220 12221 -- GIMPLE function: tree gimple_omp_critical_name ( const gomp_critical 12222 *g) 12223 Return the name associated with 'OMP_CRITICAL' statement 'G'. 12224 12225 -- GIMPLE function: tree * gimple_omp_critical_name_ptr ( gomp_critical 12226 *g) 12227 Return a pointer to the name associated with 'OMP' critical 12228 statement 'G'. 12229 12230 -- GIMPLE function: void gimple_omp_critical_set_name ( gomp_critical 12231 *g, tree name) 12232 Set 'NAME' to be the name associated with 'OMP' critical statement 12233 'G'. 12234 12235 12236File: gccint.info, Node: GIMPLE_OMP_FOR, Next: GIMPLE_OMP_MASTER, Prev: GIMPLE_OMP_CRITICAL, Up: Tuple specific accessors 12237 1223811.8.16 'GIMPLE_OMP_FOR' 12239------------------------ 12240 12241 -- GIMPLE function: gomp_for *gimple_build_omp_for (gimple_seq body, 12242 tree clauses, tree index, tree initial, tree final, tree incr, 12243 gimple_seq pre_body, enum tree_code omp_for_cond) 12244 Build a 'GIMPLE_OMP_FOR' statement. 'BODY' is sequence of 12245 statements inside the for loop. 'CLAUSES', are any of the loop 12246 construct's clauses. 'PRE_BODY' is the sequence of statements that 12247 are loop invariant. 'INDEX' is the index variable. 'INITIAL' is 12248 the initial value of 'INDEX'. 'FINAL' is final value of 'INDEX'. 12249 OMP_FOR_COND is the predicate used to compare 'INDEX' and 'FINAL'. 12250 'INCR' is the increment expression. 12251 12252 -- GIMPLE function: tree gimple_omp_for_clauses (gimple g) 12253 Return the clauses associated with 'OMP_FOR' 'G'. 12254 12255 -- GIMPLE function: tree * gimple_omp_for_clauses_ptr (gimple g) 12256 Return a pointer to the 'OMP_FOR' 'G'. 12257 12258 -- GIMPLE function: void gimple_omp_for_set_clauses (gimple g, tree 12259 clauses) 12260 Set 'CLAUSES' to be the list of clauses associated with 'OMP_FOR' 12261 'G'. 12262 12263 -- GIMPLE function: tree gimple_omp_for_index (gimple g) 12264 Return the index variable for 'OMP_FOR' 'G'. 12265 12266 -- GIMPLE function: tree * gimple_omp_for_index_ptr (gimple g) 12267 Return a pointer to the index variable for 'OMP_FOR' 'G'. 12268 12269 -- GIMPLE function: void gimple_omp_for_set_index (gimple g, tree 12270 index) 12271 Set 'INDEX' to be the index variable for 'OMP_FOR' 'G'. 12272 12273 -- GIMPLE function: tree gimple_omp_for_initial (gimple g) 12274 Return the initial value for 'OMP_FOR' 'G'. 12275 12276 -- GIMPLE function: tree * gimple_omp_for_initial_ptr (gimple g) 12277 Return a pointer to the initial value for 'OMP_FOR' 'G'. 12278 12279 -- GIMPLE function: void gimple_omp_for_set_initial (gimple g, tree 12280 initial) 12281 Set 'INITIAL' to be the initial value for 'OMP_FOR' 'G'. 12282 12283 -- GIMPLE function: tree gimple_omp_for_final (gimple g) 12284 Return the final value for 'OMP_FOR' 'G'. 12285 12286 -- GIMPLE function: tree * gimple_omp_for_final_ptr (gimple g) 12287 turn a pointer to the final value for 'OMP_FOR' 'G'. 12288 12289 -- GIMPLE function: void gimple_omp_for_set_final (gimple g, tree 12290 final) 12291 Set 'FINAL' to be the final value for 'OMP_FOR' 'G'. 12292 12293 -- GIMPLE function: tree gimple_omp_for_incr (gimple g) 12294 Return the increment value for 'OMP_FOR' 'G'. 12295 12296 -- GIMPLE function: tree * gimple_omp_for_incr_ptr (gimple g) 12297 Return a pointer to the increment value for 'OMP_FOR' 'G'. 12298 12299 -- GIMPLE function: void gimple_omp_for_set_incr (gimple g, tree incr) 12300 Set 'INCR' to be the increment value for 'OMP_FOR' 'G'. 12301 12302 -- GIMPLE function: gimple_seq gimple_omp_for_pre_body (gimple g) 12303 Return the sequence of statements to execute before the 'OMP_FOR' 12304 statement 'G' starts. 12305 12306 -- GIMPLE function: void gimple_omp_for_set_pre_body (gimple g, 12307 gimple_seq pre_body) 12308 Set 'PRE_BODY' to be the sequence of statements to execute before 12309 the 'OMP_FOR' statement 'G' starts. 12310 12311 -- GIMPLE function: void gimple_omp_for_set_cond (gimple g, enum 12312 tree_code cond) 12313 Set 'COND' to be the condition code for 'OMP_FOR' 'G'. 12314 12315 -- GIMPLE function: enum tree_code gimple_omp_for_cond (gimple g) 12316 Return the condition code associated with 'OMP_FOR' 'G'. 12317 12318 12319File: gccint.info, Node: GIMPLE_OMP_MASTER, Next: GIMPLE_OMP_ORDERED, Prev: GIMPLE_OMP_FOR, Up: Tuple specific accessors 12320 1232111.8.17 'GIMPLE_OMP_MASTER' 12322--------------------------- 12323 12324 -- GIMPLE function: gimple gimple_build_omp_master (gimple_seq body) 12325 Build a 'GIMPLE_OMP_MASTER' statement. 'BODY' is the sequence of 12326 statements to be executed by just the master. 12327 12328 12329File: gccint.info, Node: GIMPLE_OMP_ORDERED, Next: GIMPLE_OMP_PARALLEL, Prev: GIMPLE_OMP_MASTER, Up: Tuple specific accessors 12330 1233111.8.18 'GIMPLE_OMP_ORDERED' 12332---------------------------- 12333 12334 -- GIMPLE function: gimple gimple_build_omp_ordered (gimple_seq body) 12335 Build a 'GIMPLE_OMP_ORDERED' statement. 12336 12337 'BODY' is the sequence of statements inside a loop that will executed 12338in sequence. 12339 12340 12341File: gccint.info, Node: GIMPLE_OMP_PARALLEL, Next: GIMPLE_OMP_RETURN, Prev: GIMPLE_OMP_ORDERED, Up: Tuple specific accessors 12342 1234311.8.19 'GIMPLE_OMP_PARALLEL' 12344----------------------------- 12345 12346 -- GIMPLE function: gomp_parallel *gimple_build_omp_parallel 12347 (gimple_seq body, tree clauses, tree child_fn, tree data_arg) 12348 Build a 'GIMPLE_OMP_PARALLEL' statement. 12349 12350 'BODY' is sequence of statements which are executed in parallel. 12351'CLAUSES', are the 'OMP' parallel construct's clauses. 'CHILD_FN' is 12352the function created for the parallel threads to execute. 'DATA_ARG' 12353are the shared data argument(s). 12354 12355 -- GIMPLE function: bool gimple_omp_parallel_combined_p (gimple g) 12356 Return true if 'OMP' parallel statement 'G' has the 12357 'GF_OMP_PARALLEL_COMBINED' flag set. 12358 12359 -- GIMPLE function: void gimple_omp_parallel_set_combined_p (gimple g) 12360 Set the 'GF_OMP_PARALLEL_COMBINED' field in 'OMP' parallel 12361 statement 'G'. 12362 12363 -- GIMPLE function: gimple_seq gimple_omp_body (gimple g) 12364 Return the body for the 'OMP' statement 'G'. 12365 12366 -- GIMPLE function: void gimple_omp_set_body (gimple g, gimple_seq 12367 body) 12368 Set 'BODY' to be the body for the 'OMP' statement 'G'. 12369 12370 -- GIMPLE function: tree gimple_omp_parallel_clauses (gimple g) 12371 Return the clauses associated with 'OMP_PARALLEL' 'G'. 12372 12373 -- GIMPLE function: tree * gimple_omp_parallel_clauses_ptr ( 12374 gomp_parallel *g) 12375 Return a pointer to the clauses associated with 'OMP_PARALLEL' 'G'. 12376 12377 -- GIMPLE function: void gimple_omp_parallel_set_clauses ( 12378 gomp_parallel *g, tree clauses) 12379 Set 'CLAUSES' to be the list of clauses associated with 12380 'OMP_PARALLEL' 'G'. 12381 12382 -- GIMPLE function: tree gimple_omp_parallel_child_fn ( const 12383 gomp_parallel *g) 12384 Return the child function used to hold the body of 'OMP_PARALLEL' 12385 'G'. 12386 12387 -- GIMPLE function: tree * gimple_omp_parallel_child_fn_ptr ( 12388 gomp_parallel *g) 12389 Return a pointer to the child function used to hold the body of 12390 'OMP_PARALLEL' 'G'. 12391 12392 -- GIMPLE function: void gimple_omp_parallel_set_child_fn ( 12393 gomp_parallel *g, tree child_fn) 12394 Set 'CHILD_FN' to be the child function for 'OMP_PARALLEL' 'G'. 12395 12396 -- GIMPLE function: tree gimple_omp_parallel_data_arg ( const 12397 gomp_parallel *g) 12398 Return the artificial argument used to send variables and values 12399 from the parent to the children threads in 'OMP_PARALLEL' 'G'. 12400 12401 -- GIMPLE function: tree * gimple_omp_parallel_data_arg_ptr ( 12402 gomp_parallel *g) 12403 Return a pointer to the data argument for 'OMP_PARALLEL' 'G'. 12404 12405 -- GIMPLE function: void gimple_omp_parallel_set_data_arg ( 12406 gomp_parallel *g, tree data_arg) 12407 Set 'DATA_ARG' to be the data argument for 'OMP_PARALLEL' 'G'. 12408 12409 12410File: gccint.info, Node: GIMPLE_OMP_RETURN, Next: GIMPLE_OMP_SECTION, Prev: GIMPLE_OMP_PARALLEL, Up: Tuple specific accessors 12411 1241211.8.20 'GIMPLE_OMP_RETURN' 12413--------------------------- 12414 12415 -- GIMPLE function: gimple gimple_build_omp_return (bool wait_p) 12416 Build a 'GIMPLE_OMP_RETURN' statement. 'WAIT_P' is true if this is 12417 a non-waiting return. 12418 12419 -- GIMPLE function: void gimple_omp_return_set_nowait (gimple s) 12420 Set the nowait flag on 'GIMPLE_OMP_RETURN' statement 'S'. 12421 12422 -- GIMPLE function: bool gimple_omp_return_nowait_p (gimple g) 12423 Return true if 'OMP' return statement 'G' has the 12424 'GF_OMP_RETURN_NOWAIT' flag set. 12425 12426 12427File: gccint.info, Node: GIMPLE_OMP_SECTION, Next: GIMPLE_OMP_SECTIONS, Prev: GIMPLE_OMP_RETURN, Up: Tuple specific accessors 12428 1242911.8.21 'GIMPLE_OMP_SECTION' 12430---------------------------- 12431 12432 -- GIMPLE function: gimple gimple_build_omp_section (gimple_seq body) 12433 Build a 'GIMPLE_OMP_SECTION' statement for a sections statement. 12434 12435 'BODY' is the sequence of statements in the section. 12436 12437 -- GIMPLE function: bool gimple_omp_section_last_p (gimple g) 12438 Return true if 'OMP' section statement 'G' has the 12439 'GF_OMP_SECTION_LAST' flag set. 12440 12441 -- GIMPLE function: void gimple_omp_section_set_last (gimple g) 12442 Set the 'GF_OMP_SECTION_LAST' flag on 'G'. 12443 12444 12445File: gccint.info, Node: GIMPLE_OMP_SECTIONS, Next: GIMPLE_OMP_SINGLE, Prev: GIMPLE_OMP_SECTION, Up: Tuple specific accessors 12446 1244711.8.22 'GIMPLE_OMP_SECTIONS' 12448----------------------------- 12449 12450 -- GIMPLE function: gomp_sections *gimple_build_omp_sections ( 12451 gimple_seq body, tree clauses) 12452 Build a 'GIMPLE_OMP_SECTIONS' statement. 'BODY' is a sequence of 12453 section statements. 'CLAUSES' are any of the 'OMP' sections 12454 construct's clauses: private, firstprivate, lastprivate, reduction, 12455 and nowait. 12456 12457 -- GIMPLE function: gimple gimple_build_omp_sections_switch (void) 12458 Build a 'GIMPLE_OMP_SECTIONS_SWITCH' statement. 12459 12460 -- GIMPLE function: tree gimple_omp_sections_control (gimple g) 12461 Return the control variable associated with the 12462 'GIMPLE_OMP_SECTIONS' in 'G'. 12463 12464 -- GIMPLE function: tree * gimple_omp_sections_control_ptr (gimple g) 12465 Return a pointer to the clauses associated with the 12466 'GIMPLE_OMP_SECTIONS' in 'G'. 12467 12468 -- GIMPLE function: void gimple_omp_sections_set_control (gimple g, 12469 tree control) 12470 Set 'CONTROL' to be the set of clauses associated with the 12471 'GIMPLE_OMP_SECTIONS' in 'G'. 12472 12473 -- GIMPLE function: tree gimple_omp_sections_clauses (gimple g) 12474 Return the clauses associated with 'OMP_SECTIONS' 'G'. 12475 12476 -- GIMPLE function: tree * gimple_omp_sections_clauses_ptr (gimple g) 12477 Return a pointer to the clauses associated with 'OMP_SECTIONS' 'G'. 12478 12479 -- GIMPLE function: void gimple_omp_sections_set_clauses (gimple g, 12480 tree clauses) 12481 Set 'CLAUSES' to be the set of clauses associated with 12482 'OMP_SECTIONS' 'G'. 12483 12484 12485File: gccint.info, Node: GIMPLE_OMP_SINGLE, Next: GIMPLE_PHI, Prev: GIMPLE_OMP_SECTIONS, Up: Tuple specific accessors 12486 1248711.8.23 'GIMPLE_OMP_SINGLE' 12488--------------------------- 12489 12490 -- GIMPLE function: gomp_single *gimple_build_omp_single ( gimple_seq 12491 body, tree clauses) 12492 Build a 'GIMPLE_OMP_SINGLE' statement. 'BODY' is the sequence of 12493 statements that will be executed once. 'CLAUSES' are any of the 12494 'OMP' single construct's clauses: private, firstprivate, 12495 copyprivate, nowait. 12496 12497 -- GIMPLE function: tree gimple_omp_single_clauses (gimple g) 12498 Return the clauses associated with 'OMP_SINGLE' 'G'. 12499 12500 -- GIMPLE function: tree * gimple_omp_single_clauses_ptr (gimple g) 12501 Return a pointer to the clauses associated with 'OMP_SINGLE' 'G'. 12502 12503 -- GIMPLE function: void gimple_omp_single_set_clauses ( gomp_single 12504 *g, tree clauses) 12505 Set 'CLAUSES' to be the clauses associated with 'OMP_SINGLE' 'G'. 12506 12507 12508File: gccint.info, Node: GIMPLE_PHI, Next: GIMPLE_RESX, Prev: GIMPLE_OMP_SINGLE, Up: Tuple specific accessors 12509 1251011.8.24 'GIMPLE_PHI' 12511-------------------- 12512 12513 -- GIMPLE function: unsigned gimple_phi_capacity (gimple g) 12514 Return the maximum number of arguments supported by 'GIMPLE_PHI' 12515 'G'. 12516 12517 -- GIMPLE function: unsigned gimple_phi_num_args (gimple g) 12518 Return the number of arguments in 'GIMPLE_PHI' 'G'. This must 12519 always be exactly the number of incoming edges for the basic block 12520 holding 'G'. 12521 12522 -- GIMPLE function: tree gimple_phi_result (gimple g) 12523 Return the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12524 12525 -- GIMPLE function: tree * gimple_phi_result_ptr (gimple g) 12526 Return a pointer to the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12527 12528 -- GIMPLE function: void gimple_phi_set_result (gphi *g, tree result) 12529 Set 'RESULT' to be the 'SSA' name created by 'GIMPLE_PHI' 'G'. 12530 12531 -- GIMPLE function: struct phi_arg_d * gimple_phi_arg (gimple g, index) 12532 Return the 'PHI' argument corresponding to incoming edge 'INDEX' 12533 for 'GIMPLE_PHI' 'G'. 12534 12535 -- GIMPLE function: void gimple_phi_set_arg (gphi *g, index, struct 12536 phi_arg_d * phiarg) 12537 Set 'PHIARG' to be the argument corresponding to incoming edge 12538 'INDEX' for 'GIMPLE_PHI' 'G'. 12539 12540 12541File: gccint.info, Node: GIMPLE_RESX, Next: GIMPLE_RETURN, Prev: GIMPLE_PHI, Up: Tuple specific accessors 12542 1254311.8.25 'GIMPLE_RESX' 12544--------------------- 12545 12546 -- GIMPLE function: gresx *gimple_build_resx (int region) 12547 Build a 'GIMPLE_RESX' statement which is a statement. This 12548 statement is a placeholder for _Unwind_Resume before we know if a 12549 function call or a branch is needed. 'REGION' is the exception 12550 region from which control is flowing. 12551 12552 -- GIMPLE function: int gimple_resx_region (const gresx *g) 12553 Return the region number for 'GIMPLE_RESX' 'G'. 12554 12555 -- GIMPLE function: void gimple_resx_set_region (gresx *g, int region) 12556 Set 'REGION' to be the region number for 'GIMPLE_RESX' 'G'. 12557 12558 12559File: gccint.info, Node: GIMPLE_RETURN, Next: GIMPLE_SWITCH, Prev: GIMPLE_RESX, Up: Tuple specific accessors 12560 1256111.8.26 'GIMPLE_RETURN' 12562----------------------- 12563 12564 -- GIMPLE function: greturn *gimple_build_return (tree retval) 12565 Build a 'GIMPLE_RETURN' statement whose return value is retval. 12566 12567 -- GIMPLE function: tree gimple_return_retval (const greturn *g) 12568 Return the return value for 'GIMPLE_RETURN' 'G'. 12569 12570 -- GIMPLE function: void gimple_return_set_retval (greturn *g, tree 12571 retval) 12572 Set 'RETVAL' to be the return value for 'GIMPLE_RETURN' 'G'. 12573 12574 12575File: gccint.info, Node: GIMPLE_SWITCH, Next: GIMPLE_TRY, Prev: GIMPLE_RETURN, Up: Tuple specific accessors 12576 1257711.8.27 'GIMPLE_SWITCH' 12578----------------------- 12579 12580 -- GIMPLE function: gswitch *gimple_build_switch (tree index, tree 12581 default_label, 'vec'<tree> *args) 12582 Build a 'GIMPLE_SWITCH' statement. 'INDEX' is the index variable 12583 to switch on, and 'DEFAULT_LABEL' represents the default label. 12584 'ARGS' is a vector of 'CASE_LABEL_EXPR' trees that contain the 12585 non-default case labels. Each label is a tree of code 12586 'CASE_LABEL_EXPR'. 12587 12588 -- GIMPLE function: unsigned gimple_switch_num_labels ( const gswitch 12589 *g) 12590 Return the number of labels associated with the switch statement 12591 'G'. 12592 12593 -- GIMPLE function: void gimple_switch_set_num_labels (gswitch *g, 12594 unsigned nlabels) 12595 Set 'NLABELS' to be the number of labels for the switch statement 12596 'G'. 12597 12598 -- GIMPLE function: tree gimple_switch_index (const gswitch *g) 12599 Return the index variable used by the switch statement 'G'. 12600 12601 -- GIMPLE function: void gimple_switch_set_index (gswitch *g, tree 12602 index) 12603 Set 'INDEX' to be the index variable for switch statement 'G'. 12604 12605 -- GIMPLE function: tree gimple_switch_label (const gswitch *g, 12606 unsigned index) 12607 Return the label numbered 'INDEX'. The default label is 0, 12608 followed by any labels in a switch statement. 12609 12610 -- GIMPLE function: void gimple_switch_set_label (gswitch *g, unsigned 12611 index, tree label) 12612 Set the label number 'INDEX' to 'LABEL'. 0 is always the default 12613 label. 12614 12615 -- GIMPLE function: tree gimple_switch_default_label ( const gswitch 12616 *g) 12617 Return the default label for a switch statement. 12618 12619 -- GIMPLE function: void gimple_switch_set_default_label (gswitch *g, 12620 tree label) 12621 Set the default label for a switch statement. 12622 12623 12624File: gccint.info, Node: GIMPLE_TRY, Next: GIMPLE_WITH_CLEANUP_EXPR, Prev: GIMPLE_SWITCH, Up: Tuple specific accessors 12625 1262611.8.28 'GIMPLE_TRY' 12627-------------------- 12628 12629 -- GIMPLE function: gtry *gimple_build_try (gimple_seq eval, gimple_seq 12630 cleanup, unsigned int kind) 12631 Build a 'GIMPLE_TRY' statement. 'EVAL' is a sequence with the 12632 expression to evaluate. 'CLEANUP' is a sequence of statements to 12633 run at clean-up time. 'KIND' is the enumeration value 12634 'GIMPLE_TRY_CATCH' if this statement denotes a try/catch construct 12635 or 'GIMPLE_TRY_FINALLY' if this statement denotes a try/finally 12636 construct. 12637 12638 -- GIMPLE function: enum gimple_try_flags gimple_try_kind (gimple g) 12639 Return the kind of try block represented by 'GIMPLE_TRY' 'G'. This 12640 is either 'GIMPLE_TRY_CATCH' or 'GIMPLE_TRY_FINALLY'. 12641 12642 -- GIMPLE function: bool gimple_try_catch_is_cleanup (gimple g) 12643 Return the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 12644 12645 -- GIMPLE function: gimple_seq gimple_try_eval (gimple g) 12646 Return the sequence of statements used as the body for 'GIMPLE_TRY' 12647 'G'. 12648 12649 -- GIMPLE function: gimple_seq gimple_try_cleanup (gimple g) 12650 Return the sequence of statements used as the cleanup body for 12651 'GIMPLE_TRY' 'G'. 12652 12653 -- GIMPLE function: void gimple_try_set_catch_is_cleanup (gimple g, 12654 bool catch_is_cleanup) 12655 Set the 'GIMPLE_TRY_CATCH_IS_CLEANUP' flag. 12656 12657 -- GIMPLE function: void gimple_try_set_eval (gtry *g, gimple_seq eval) 12658 Set 'EVAL' to be the sequence of statements to use as the body for 12659 'GIMPLE_TRY' 'G'. 12660 12661 -- GIMPLE function: void gimple_try_set_cleanup (gtry *g, gimple_seq 12662 cleanup) 12663 Set 'CLEANUP' to be the sequence of statements to use as the 12664 cleanup body for 'GIMPLE_TRY' 'G'. 12665 12666 12667File: gccint.info, Node: GIMPLE_WITH_CLEANUP_EXPR, Prev: GIMPLE_TRY, Up: Tuple specific accessors 12668 1266911.8.29 'GIMPLE_WITH_CLEANUP_EXPR' 12670---------------------------------- 12671 12672 -- GIMPLE function: gimple gimple_build_wce (gimple_seq cleanup) 12673 Build a 'GIMPLE_WITH_CLEANUP_EXPR' statement. 'CLEANUP' is the 12674 clean-up expression. 12675 12676 -- GIMPLE function: gimple_seq gimple_wce_cleanup (gimple g) 12677 Return the cleanup sequence for cleanup statement 'G'. 12678 12679 -- GIMPLE function: void gimple_wce_set_cleanup (gimple g, gimple_seq 12680 cleanup) 12681 Set 'CLEANUP' to be the cleanup sequence for 'G'. 12682 12683 -- GIMPLE function: bool gimple_wce_cleanup_eh_only (gimple g) 12684 Return the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 12685 12686 -- GIMPLE function: void gimple_wce_set_cleanup_eh_only (gimple g, bool 12687 eh_only_p) 12688 Set the 'CLEANUP_EH_ONLY' flag for a 'WCE' tuple. 12689 12690 12691File: gccint.info, Node: GIMPLE sequences, Next: Sequence iterators, Prev: Tuple specific accessors, Up: GIMPLE 12692 1269311.9 GIMPLE sequences 12694===================== 12695 12696GIMPLE sequences are the tuple equivalent of 'STATEMENT_LIST''s used in 12697'GENERIC'. They are used to chain statements together, and when used in 12698conjunction with sequence iterators, provide a framework for iterating 12699through statements. 12700 12701 GIMPLE sequences are of type struct 'gimple_sequence', but are more 12702commonly passed by reference to functions dealing with sequences. The 12703type for a sequence pointer is 'gimple_seq' which is the same as struct 12704'gimple_sequence' *. When declaring a local sequence, you can define a 12705local variable of type struct 'gimple_sequence'. When declaring a 12706sequence allocated on the garbage collected heap, use the function 12707'gimple_seq_alloc' documented below. 12708 12709 There are convenience functions for iterating through sequences in the 12710section entitled Sequence Iterators. 12711 12712 Below is a list of functions to manipulate and query sequences. 12713 12714 -- GIMPLE function: void gimple_seq_add_stmt (gimple_seq *seq, gimple 12715 g) 12716 Link a gimple statement to the end of the sequence *'SEQ' if 'G' is 12717 not 'NULL'. If *'SEQ' is 'NULL', allocate a sequence before 12718 linking. 12719 12720 -- GIMPLE function: void gimple_seq_add_seq (gimple_seq *dest, 12721 gimple_seq src) 12722 Append sequence 'SRC' to the end of sequence *'DEST' if 'SRC' is 12723 not 'NULL'. If *'DEST' is 'NULL', allocate a new sequence before 12724 appending. 12725 12726 -- GIMPLE function: gimple_seq gimple_seq_deep_copy (gimple_seq src) 12727 Perform a deep copy of sequence 'SRC' and return the result. 12728 12729 -- GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq) 12730 Reverse the order of the statements in the sequence 'SEQ'. Return 12731 'SEQ'. 12732 12733 -- GIMPLE function: gimple gimple_seq_first (gimple_seq s) 12734 Return the first statement in sequence 'S'. 12735 12736 -- GIMPLE function: gimple gimple_seq_last (gimple_seq s) 12737 Return the last statement in sequence 'S'. 12738 12739 -- GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple 12740 last) 12741 Set the last statement in sequence 'S' to the statement in 'LAST'. 12742 12743 -- GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple 12744 first) 12745 Set the first statement in sequence 'S' to the statement in 12746 'FIRST'. 12747 12748 -- GIMPLE function: void gimple_seq_init (gimple_seq s) 12749 Initialize sequence 'S' to an empty sequence. 12750 12751 -- GIMPLE function: gimple_seq gimple_seq_alloc (void) 12752 Allocate a new sequence in the garbage collected store and return 12753 it. 12754 12755 -- GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq 12756 src) 12757 Copy the sequence 'SRC' into the sequence 'DEST'. 12758 12759 -- GIMPLE function: bool gimple_seq_empty_p (gimple_seq s) 12760 Return true if the sequence 'S' is empty. 12761 12762 -- GIMPLE function: gimple_seq bb_seq (basic_block bb) 12763 Returns the sequence of statements in 'BB'. 12764 12765 -- GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq) 12766 Sets the sequence of statements in 'BB' to 'SEQ'. 12767 12768 -- GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq) 12769 Determine whether 'SEQ' contains exactly one statement. 12770 12771 12772File: gccint.info, Node: Sequence iterators, Next: Adding a new GIMPLE statement code, Prev: GIMPLE sequences, Up: GIMPLE 12773 1277411.10 Sequence iterators 12775======================== 12776 12777Sequence iterators are convenience constructs for iterating through 12778statements in a sequence. Given a sequence 'SEQ', here is a typical use 12779of gimple sequence iterators: 12780 12781 gimple_stmt_iterator gsi; 12782 12783 for (gsi = gsi_start (seq); !gsi_end_p (gsi); gsi_next (&gsi)) 12784 { 12785 gimple g = gsi_stmt (gsi); 12786 /* Do something with gimple statement G. */ 12787 } 12788 12789 Backward iterations are possible: 12790 12791 for (gsi = gsi_last (seq); !gsi_end_p (gsi); gsi_prev (&gsi)) 12792 12793 Forward and backward iterations on basic blocks are possible with 12794'gsi_start_bb' and 'gsi_last_bb'. 12795 12796 In the documentation below we sometimes refer to enum 12797'gsi_iterator_update'. The valid options for this enumeration are: 12798 12799 * 'GSI_NEW_STMT' Only valid when a single statement is added. Move 12800 the iterator to it. 12801 12802 * 'GSI_SAME_STMT' Leave the iterator at the same statement. 12803 12804 * 'GSI_CONTINUE_LINKING' Move iterator to whatever position is 12805 suitable for linking other statements in the same direction. 12806 12807 Below is a list of the functions used to manipulate and use statement 12808iterators. 12809 12810 -- GIMPLE function: gimple_stmt_iterator gsi_start (gimple_seq seq) 12811 Return a new iterator pointing to the sequence 'SEQ''s first 12812 statement. If 'SEQ' is empty, the iterator's basic block is 12813 'NULL'. Use 'gsi_start_bb' instead when the iterator needs to 12814 always have the correct basic block set. 12815 12816 -- GIMPLE function: gimple_stmt_iterator gsi_start_bb (basic_block bb) 12817 Return a new iterator pointing to the first statement in basic 12818 block 'BB'. 12819 12820 -- GIMPLE function: gimple_stmt_iterator gsi_last (gimple_seq seq) 12821 Return a new iterator initially pointing to the last statement of 12822 sequence 'SEQ'. If 'SEQ' is empty, the iterator's basic block is 12823 'NULL'. Use 'gsi_last_bb' instead when the iterator needs to 12824 always have the correct basic block set. 12825 12826 -- GIMPLE function: gimple_stmt_iterator gsi_last_bb (basic_block bb) 12827 Return a new iterator pointing to the last statement in basic block 12828 'BB'. 12829 12830 -- GIMPLE function: bool gsi_end_p (gimple_stmt_iterator i) 12831 Return 'TRUE' if at the end of 'I'. 12832 12833 -- GIMPLE function: bool gsi_one_before_end_p (gimple_stmt_iterator i) 12834 Return 'TRUE' if we're one statement before the end of 'I'. 12835 12836 -- GIMPLE function: void gsi_next (gimple_stmt_iterator *i) 12837 Advance the iterator to the next gimple statement. 12838 12839 -- GIMPLE function: void gsi_prev (gimple_stmt_iterator *i) 12840 Advance the iterator to the previous gimple statement. 12841 12842 -- GIMPLE function: gimple gsi_stmt (gimple_stmt_iterator i) 12843 Return the current stmt. 12844 12845 -- GIMPLE function: gimple_stmt_iterator gsi_after_labels (basic_block 12846 bb) 12847 Return a block statement iterator that points to the first 12848 non-label statement in block 'BB'. 12849 12850 -- GIMPLE function: gimple * gsi_stmt_ptr (gimple_stmt_iterator *i) 12851 Return a pointer to the current stmt. 12852 12853 -- GIMPLE function: basic_block gsi_bb (gimple_stmt_iterator i) 12854 Return the basic block associated with this iterator. 12855 12856 -- GIMPLE function: gimple_seq gsi_seq (gimple_stmt_iterator i) 12857 Return the sequence associated with this iterator. 12858 12859 -- GIMPLE function: void gsi_remove (gimple_stmt_iterator *i, bool 12860 remove_eh_info) 12861 Remove the current stmt from the sequence. The iterator is updated 12862 to point to the next statement. When 'REMOVE_EH_INFO' is true we 12863 remove the statement pointed to by iterator 'I' from the 'EH' 12864 tables. Otherwise we do not modify the 'EH' tables. Generally, 12865 'REMOVE_EH_INFO' should be true when the statement is going to be 12866 removed from the 'IL' and not reinserted elsewhere. 12867 12868 -- GIMPLE function: void gsi_link_seq_before (gimple_stmt_iterator *i, 12869 gimple_seq seq, enum gsi_iterator_update mode) 12870 Links the sequence of statements 'SEQ' before the statement pointed 12871 by iterator 'I'. 'MODE' indicates what to do with the iterator 12872 after insertion (see 'enum gsi_iterator_update' above). 12873 12874 -- GIMPLE function: void gsi_link_before (gimple_stmt_iterator *i, 12875 gimple g, enum gsi_iterator_update mode) 12876 Links statement 'G' before the statement pointed-to by iterator 12877 'I'. Updates iterator 'I' according to 'MODE'. 12878 12879 -- GIMPLE function: void gsi_link_seq_after (gimple_stmt_iterator *i, 12880 gimple_seq seq, enum gsi_iterator_update mode) 12881 Links sequence 'SEQ' after the statement pointed-to by iterator 12882 'I'. 'MODE' is as in 'gsi_insert_after'. 12883 12884 -- GIMPLE function: void gsi_link_after (gimple_stmt_iterator *i, 12885 gimple g, enum gsi_iterator_update mode) 12886 Links statement 'G' after the statement pointed-to by iterator 'I'. 12887 'MODE' is as in 'gsi_insert_after'. 12888 12889 -- GIMPLE function: gimple_seq gsi_split_seq_after 12890 (gimple_stmt_iterator i) 12891 Move all statements in the sequence after 'I' to a new sequence. 12892 Return this new sequence. 12893 12894 -- GIMPLE function: gimple_seq gsi_split_seq_before 12895 (gimple_stmt_iterator *i) 12896 Move all statements in the sequence before 'I' to a new sequence. 12897 Return this new sequence. 12898 12899 -- GIMPLE function: void gsi_replace (gimple_stmt_iterator *i, gimple 12900 stmt, bool update_eh_info) 12901 Replace the statement pointed-to by 'I' to 'STMT'. If 12902 'UPDATE_EH_INFO' is true, the exception handling information of the 12903 original statement is moved to the new statement. 12904 12905 -- GIMPLE function: void gsi_insert_before (gimple_stmt_iterator *i, 12906 gimple stmt, enum gsi_iterator_update mode) 12907 Insert statement 'STMT' before the statement pointed-to by iterator 12908 'I', update 'STMT''s basic block and scan it for new operands. 12909 'MODE' specifies how to update iterator 'I' after insertion (see 12910 enum 'gsi_iterator_update'). 12911 12912 -- GIMPLE function: void gsi_insert_seq_before (gimple_stmt_iterator 12913 *i, gimple_seq seq, enum gsi_iterator_update mode) 12914 Like 'gsi_insert_before', but for all the statements in 'SEQ'. 12915 12916 -- GIMPLE function: void gsi_insert_after (gimple_stmt_iterator *i, 12917 gimple stmt, enum gsi_iterator_update mode) 12918 Insert statement 'STMT' after the statement pointed-to by iterator 12919 'I', update 'STMT''s basic block and scan it for new operands. 12920 'MODE' specifies how to update iterator 'I' after insertion (see 12921 enum 'gsi_iterator_update'). 12922 12923 -- GIMPLE function: void gsi_insert_seq_after (gimple_stmt_iterator *i, 12924 gimple_seq seq, enum gsi_iterator_update mode) 12925 Like 'gsi_insert_after', but for all the statements in 'SEQ'. 12926 12927 -- GIMPLE function: gimple_stmt_iterator gsi_for_stmt (gimple stmt) 12928 Finds iterator for 'STMT'. 12929 12930 -- GIMPLE function: void gsi_move_after (gimple_stmt_iterator *from, 12931 gimple_stmt_iterator *to) 12932 Move the statement at 'FROM' so it comes right after the statement 12933 at 'TO'. 12934 12935 -- GIMPLE function: void gsi_move_before (gimple_stmt_iterator *from, 12936 gimple_stmt_iterator *to) 12937 Move the statement at 'FROM' so it comes right before the statement 12938 at 'TO'. 12939 12940 -- GIMPLE function: void gsi_move_to_bb_end (gimple_stmt_iterator 12941 *from, basic_block bb) 12942 Move the statement at 'FROM' to the end of basic block 'BB'. 12943 12944 -- GIMPLE function: void gsi_insert_on_edge (edge e, gimple stmt) 12945 Add 'STMT' to the pending list of edge 'E'. No actual insertion is 12946 made until a call to 'gsi_commit_edge_inserts'() is made. 12947 12948 -- GIMPLE function: void gsi_insert_seq_on_edge (edge e, gimple_seq 12949 seq) 12950 Add the sequence of statements in 'SEQ' to the pending list of edge 12951 'E'. No actual insertion is made until a call to 12952 'gsi_commit_edge_inserts'() is made. 12953 12954 -- GIMPLE function: basic_block gsi_insert_on_edge_immediate (edge e, 12955 gimple stmt) 12956 Similar to 'gsi_insert_on_edge'+'gsi_commit_edge_inserts'. If a 12957 new block has to be created, it is returned. 12958 12959 -- GIMPLE function: void gsi_commit_one_edge_insert (edge e, 12960 basic_block *new_bb) 12961 Commit insertions pending at edge 'E'. If a new block is created, 12962 set 'NEW_BB' to this block, otherwise set it to 'NULL'. 12963 12964 -- GIMPLE function: void gsi_commit_edge_inserts (void) 12965 This routine will commit all pending edge insertions, creating any 12966 new basic blocks which are necessary. 12967 12968 12969File: gccint.info, Node: Adding a new GIMPLE statement code, Next: Statement and operand traversals, Prev: Sequence iterators, Up: GIMPLE 12970 1297111.11 Adding a new GIMPLE statement code 12972======================================== 12973 12974The first step in adding a new GIMPLE statement code, is modifying the 12975file 'gimple.def', which contains all the GIMPLE codes. Then you must 12976add a corresponding gimple subclass located in 'gimple.h'. This in 12977turn, will require you to add a corresponding 'GTY' tag in 12978'gsstruct.def', and code to handle this tag in 'gss_for_code' which is 12979located in 'gimple.c'. 12980 12981 In order for the garbage collector to know the size of the structure 12982you created in 'gimple.h', you need to add a case to handle your new 12983GIMPLE statement in 'gimple_size' which is located in 'gimple.c'. 12984 12985 You will probably want to create a function to build the new gimple 12986statement in 'gimple.c'. The function should be called 12987'gimple_build_NEW-TUPLE-NAME', and should return the new tuple as a 12988pointer to the appropriate gimple subclass. 12989 12990 If your new statement requires accessors for any members or operands it 12991may have, put simple inline accessors in 'gimple.h' and any non-trivial 12992accessors in 'gimple.c' with a corresponding prototype in 'gimple.h'. 12993 12994 You should add the new statement subclass to the class hierarchy 12995diagram in 'gimple.texi'. 12996 12997 12998File: gccint.info, Node: Statement and operand traversals, Prev: Adding a new GIMPLE statement code, Up: GIMPLE 12999 1300011.12 Statement and operand traversals 13001====================================== 13002 13003There are two functions available for walking statements and sequences: 13004'walk_gimple_stmt' and 'walk_gimple_seq', accordingly, and a third 13005function for walking the operands in a statement: 'walk_gimple_op'. 13006 13007 -- GIMPLE function: tree walk_gimple_stmt (gimple_stmt_iterator *gsi, 13008 walk_stmt_fn callback_stmt, walk_tree_fn callback_op, struct 13009 walk_stmt_info *wi) 13010 This function is used to walk the current statement in 'GSI', 13011 optionally using traversal state stored in 'WI'. If 'WI' is 13012 'NULL', no state is kept during the traversal. 13013 13014 The callback 'CALLBACK_STMT' is called. If 'CALLBACK_STMT' returns 13015 true, it means that the callback function has handled all the 13016 operands of the statement and it is not necessary to walk its 13017 operands. 13018 13019 If 'CALLBACK_STMT' is 'NULL' or it returns false, 'CALLBACK_OP' is 13020 called on each operand of the statement via 'walk_gimple_op'. If 13021 'walk_gimple_op' returns non-'NULL' for any operand, the remaining 13022 operands are not scanned. 13023 13024 The return value is that returned by the last call to 13025 'walk_gimple_op', or 'NULL_TREE' if no 'CALLBACK_OP' is specified. 13026 13027 -- GIMPLE function: tree walk_gimple_op (gimple stmt, walk_tree_fn 13028 callback_op, struct walk_stmt_info *wi) 13029 Use this function to walk the operands of statement 'STMT'. Every 13030 operand is walked via 'walk_tree' with optional state information 13031 in 'WI'. 13032 13033 'CALLBACK_OP' is called on each operand of 'STMT' via 'walk_tree'. 13034 Additional parameters to 'walk_tree' must be stored in 'WI'. For 13035 each operand 'OP', 'walk_tree' is called as: 13036 13037 walk_tree (&OP, CALLBACK_OP, WI, PSET) 13038 13039 If 'CALLBACK_OP' returns non-'NULL' for an operand, the remaining 13040 operands are not scanned. The return value is that returned by the 13041 last call to 'walk_tree', or 'NULL_TREE' if no 'CALLBACK_OP' is 13042 specified. 13043 13044 -- GIMPLE function: tree walk_gimple_seq (gimple_seq seq, walk_stmt_fn 13045 callback_stmt, walk_tree_fn callback_op, struct walk_stmt_info 13046 *wi) 13047 This function walks all the statements in the sequence 'SEQ' 13048 calling 'walk_gimple_stmt' on each one. 'WI' is as in 13049 'walk_gimple_stmt'. If 'walk_gimple_stmt' returns non-'NULL', the 13050 walk is stopped and the value returned. Otherwise, all the 13051 statements are walked and 'NULL_TREE' returned. 13052 13053 13054File: gccint.info, Node: Tree SSA, Next: RTL, Prev: GIMPLE, Up: Top 13055 1305612 Analysis and Optimization of GIMPLE tuples 13057********************************************* 13058 13059GCC uses three main intermediate languages to represent the program 13060during compilation: GENERIC, GIMPLE and RTL. GENERIC is a 13061language-independent representation generated by each front end. It is 13062used to serve as an interface between the parser and optimizer. GENERIC 13063is a common representation that is able to represent programs written in 13064all the languages supported by GCC. 13065 13066 GIMPLE and RTL are used to optimize the program. GIMPLE is used for 13067target and language independent optimizations (e.g., inlining, constant 13068propagation, tail call elimination, redundancy elimination, etc). Much 13069like GENERIC, GIMPLE is a language independent, tree based 13070representation. However, it differs from GENERIC in that the GIMPLE 13071grammar is more restrictive: expressions contain no more than 3 operands 13072(except function calls), it has no control flow structures and 13073expressions with side-effects are only allowed on the right hand side of 13074assignments. See the chapter describing GENERIC and GIMPLE for more 13075details. 13076 13077 This chapter describes the data structures and functions used in the 13078GIMPLE optimizers (also known as "tree optimizers" or "middle end"). In 13079particular, it focuses on all the macros, data structures, functions and 13080programming constructs needed to implement optimization passes for 13081GIMPLE. 13082 13083* Menu: 13084 13085* Annotations:: Attributes for variables. 13086* SSA Operands:: SSA names referenced by GIMPLE statements. 13087* SSA:: Static Single Assignment representation. 13088* Alias analysis:: Representing aliased loads and stores. 13089* Memory model:: Memory model used by the middle-end. 13090 13091 13092File: gccint.info, Node: Annotations, Next: SSA Operands, Up: Tree SSA 13093 1309412.1 Annotations 13095================ 13096 13097The optimizers need to associate attributes with variables during the 13098optimization process. For instance, we need to know whether a variable 13099has aliases. All these attributes are stored in data structures called 13100annotations which are then linked to the field 'ann' in 'struct 13101tree_common'. 13102 13103 13104File: gccint.info, Node: SSA Operands, Next: SSA, Prev: Annotations, Up: Tree SSA 13105 1310612.2 SSA Operands 13107================= 13108 13109Almost every GIMPLE statement will contain a reference to a variable or 13110memory location. Since statements come in different shapes and sizes, 13111their operands are going to be located at various spots inside the 13112statement's tree. To facilitate access to the statement's operands, 13113they are organized into lists associated inside each statement's 13114annotation. Each element in an operand list is a pointer to a 13115'VAR_DECL', 'PARM_DECL' or 'SSA_NAME' tree node. This provides a very 13116convenient way of examining and replacing operands. 13117 13118 Data flow analysis and optimization is done on all tree nodes 13119representing variables. Any node for which 'SSA_VAR_P' returns nonzero 13120is considered when scanning statement operands. However, not all 13121'SSA_VAR_P' variables are processed in the same way. For the purposes 13122of optimization, we need to distinguish between references to local 13123scalar variables and references to globals, statics, structures, arrays, 13124aliased variables, etc. The reason is simple, the compiler can gather 13125complete data flow information for a local scalar. On the other hand, a 13126global variable may be modified by a function call, it may not be 13127possible to keep track of all the elements of an array or the fields of 13128a structure, etc. 13129 13130 The operand scanner gathers two kinds of operands: "real" and 13131"virtual". An operand for which 'is_gimple_reg' returns true is 13132considered real, otherwise it is a virtual operand. We also distinguish 13133between uses and definitions. An operand is used if its value is loaded 13134by the statement (e.g., the operand at the RHS of an assignment). If 13135the statement assigns a new value to the operand, the operand is 13136considered a definition (e.g., the operand at the LHS of an assignment). 13137 13138 Virtual and real operands also have very different data flow 13139properties. Real operands are unambiguous references to the full object 13140that they represent. For instance, given 13141 13142 { 13143 int a, b; 13144 a = b 13145 } 13146 13147 Since 'a' and 'b' are non-aliased locals, the statement 'a = b' will 13148have one real definition and one real use because variable 'a' is 13149completely modified with the contents of variable 'b'. Real definition 13150are also known as "killing definitions". Similarly, the use of 'b' 13151reads all its bits. 13152 13153 In contrast, virtual operands are used with variables that can have a 13154partial or ambiguous reference. This includes structures, arrays, 13155globals, and aliased variables. In these cases, we have two types of 13156definitions. For globals, structures, and arrays, we can determine from 13157a statement whether a variable of these types has a killing definition. 13158If the variable does, then the statement is marked as having a "must 13159definition" of that variable. However, if a statement is only defining 13160a part of the variable (i.e. a field in a structure), or if we know that 13161a statement might define the variable but we cannot say for sure, then 13162we mark that statement as having a "may definition". For instance, 13163given 13164 13165 { 13166 int a, b, *p; 13167 13168 if (...) 13169 p = &a; 13170 else 13171 p = &b; 13172 *p = 5; 13173 return *p; 13174 } 13175 13176 The assignment '*p = 5' may be a definition of 'a' or 'b'. If we 13177cannot determine statically where 'p' is pointing to at the time of the 13178store operation, we create virtual definitions to mark that statement as 13179a potential definition site for 'a' and 'b'. Memory loads are similarly 13180marked with virtual use operands. Virtual operands are shown in tree 13181dumps right before the statement that contains them. To request a tree 13182dump with virtual operands, use the '-vops' option to '-fdump-tree': 13183 13184 { 13185 int a, b, *p; 13186 13187 if (...) 13188 p = &a; 13189 else 13190 p = &b; 13191 # a = VDEF <a> 13192 # b = VDEF <b> 13193 *p = 5; 13194 13195 # VUSE <a> 13196 # VUSE <b> 13197 return *p; 13198 } 13199 13200 Notice that 'VDEF' operands have two copies of the referenced variable. 13201This indicates that this is not a killing definition of that variable. 13202In this case we refer to it as a "may definition" or "aliased store". 13203The presence of the second copy of the variable in the 'VDEF' operand 13204will become important when the function is converted into SSA form. 13205This will be used to link all the non-killing definitions to prevent 13206optimizations from making incorrect assumptions about them. 13207 13208 Operands are updated as soon as the statement is finished via a call to 13209'update_stmt'. If statement elements are changed via 'SET_USE' or 13210'SET_DEF', then no further action is required (i.e., those macros take 13211care of updating the statement). If changes are made by manipulating 13212the statement's tree directly, then a call must be made to 'update_stmt' 13213when complete. Calling one of the 'bsi_insert' routines or 13214'bsi_replace' performs an implicit call to 'update_stmt'. 13215 1321612.2.1 Operand Iterators And Access Routines 13217-------------------------------------------- 13218 13219Operands are collected by 'tree-ssa-operands.c'. They are stored inside 13220each statement's annotation and can be accessed through either the 13221operand iterators or an access routine. 13222 13223 The following access routines are available for examining operands: 13224 13225 1. 'SINGLE_SSA_{USE,DEF,TREE}_OPERAND': These accessors will return 13226 NULL unless there is exactly one operand matching the specified 13227 flags. If there is exactly one operand, the operand is returned as 13228 either a 'tree', 'def_operand_p', or 'use_operand_p'. 13229 13230 tree t = SINGLE_SSA_TREE_OPERAND (stmt, flags); 13231 use_operand_p u = SINGLE_SSA_USE_OPERAND (stmt, SSA_ALL_VIRTUAL_USES); 13232 def_operand_p d = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_ALL_DEFS); 13233 13234 2. 'ZERO_SSA_OPERANDS': This macro returns true if there are no 13235 operands matching the specified flags. 13236 13237 if (ZERO_SSA_OPERANDS (stmt, SSA_OP_ALL_VIRTUALS)) 13238 return; 13239 13240 3. 'NUM_SSA_OPERANDS': This macro Returns the number of operands 13241 matching 'flags'. This actually executes a loop to perform the 13242 count, so only use this if it is really needed. 13243 13244 int count = NUM_SSA_OPERANDS (stmt, flags) 13245 13246 If you wish to iterate over some or all operands, use the 13247'FOR_EACH_SSA_{USE,DEF,TREE}_OPERAND' iterator. For example, to print 13248all the operands for a statement: 13249 13250 void 13251 print_ops (tree stmt) 13252 { 13253 ssa_op_iter; 13254 tree var; 13255 13256 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_ALL_OPERANDS) 13257 print_generic_expr (stderr, var, TDF_SLIM); 13258 } 13259 13260 How to choose the appropriate iterator: 13261 13262 1. Determine whether you are need to see the operand pointers, or just 13263 the trees, and choose the appropriate macro: 13264 13265 Need Macro: 13266 ---- ------- 13267 use_operand_p FOR_EACH_SSA_USE_OPERAND 13268 def_operand_p FOR_EACH_SSA_DEF_OPERAND 13269 tree FOR_EACH_SSA_TREE_OPERAND 13270 13271 2. You need to declare a variable of the type you are interested in, 13272 and an ssa_op_iter structure which serves as the loop controlling 13273 variable. 13274 13275 3. Determine which operands you wish to use, and specify the flags of 13276 those you are interested in. They are documented in 13277 'tree-ssa-operands.h': 13278 13279 #define SSA_OP_USE 0x01 /* Real USE operands. */ 13280 #define SSA_OP_DEF 0x02 /* Real DEF operands. */ 13281 #define SSA_OP_VUSE 0x04 /* VUSE operands. */ 13282 #define SSA_OP_VDEF 0x08 /* VDEF operands. */ 13283 13284 /* These are commonly grouped operand flags. */ 13285 #define SSA_OP_VIRTUAL_USES (SSA_OP_VUSE) 13286 #define SSA_OP_VIRTUAL_DEFS (SSA_OP_VDEF) 13287 #define SSA_OP_ALL_VIRTUALS (SSA_OP_VIRTUAL_USES | SSA_OP_VIRTUAL_DEFS) 13288 #define SSA_OP_ALL_USES (SSA_OP_VIRTUAL_USES | SSA_OP_USE) 13289 #define SSA_OP_ALL_DEFS (SSA_OP_VIRTUAL_DEFS | SSA_OP_DEF) 13290 #define SSA_OP_ALL_OPERANDS (SSA_OP_ALL_USES | SSA_OP_ALL_DEFS) 13291 13292 So if you want to look at the use pointers for all the 'USE' and 'VUSE' 13293operands, you would do something like: 13294 13295 use_operand_p use_p; 13296 ssa_op_iter iter; 13297 13298 FOR_EACH_SSA_USE_OPERAND (use_p, stmt, iter, (SSA_OP_USE | SSA_OP_VUSE)) 13299 { 13300 process_use_ptr (use_p); 13301 } 13302 13303 The 'TREE' macro is basically the same as the 'USE' and 'DEF' macros, 13304only with the use or def dereferenced via 'USE_FROM_PTR (use_p)' and 13305'DEF_FROM_PTR (def_p)'. Since we aren't using operand pointers, use and 13306defs flags can be mixed. 13307 13308 tree var; 13309 ssa_op_iter iter; 13310 13311 FOR_EACH_SSA_TREE_OPERAND (var, stmt, iter, SSA_OP_VUSE) 13312 { 13313 print_generic_expr (stderr, var, TDF_SLIM); 13314 } 13315 13316 'VDEF's are broken into two flags, one for the 'DEF' portion 13317('SSA_OP_VDEF') and one for the USE portion ('SSA_OP_VUSE'). 13318 13319 There are many examples in the code, in addition to the documentation 13320in 'tree-ssa-operands.h' and 'ssa-iterators.h'. 13321 13322 There are also a couple of variants on the stmt iterators regarding PHI 13323nodes. 13324 13325 'FOR_EACH_PHI_ARG' Works exactly like 'FOR_EACH_SSA_USE_OPERAND', 13326except it works over 'PHI' arguments instead of statement operands. 13327 13328 /* Look at every virtual PHI use. */ 13329 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_VIRTUAL_USES) 13330 { 13331 my_code; 13332 } 13333 13334 /* Look at every real PHI use. */ 13335 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_USES) 13336 my_code; 13337 13338 /* Look at every PHI use. */ 13339 FOR_EACH_PHI_ARG (use_p, phi_stmt, iter, SSA_OP_ALL_USES) 13340 my_code; 13341 13342 'FOR_EACH_PHI_OR_STMT_{USE,DEF}' works exactly like 13343'FOR_EACH_SSA_{USE,DEF}_OPERAND', except it will function on either a 13344statement or a 'PHI' node. These should be used when it is appropriate 13345but they are not quite as efficient as the individual 'FOR_EACH_PHI' and 13346'FOR_EACH_SSA' routines. 13347 13348 FOR_EACH_PHI_OR_STMT_USE (use_operand_p, stmt, iter, flags) 13349 { 13350 my_code; 13351 } 13352 13353 FOR_EACH_PHI_OR_STMT_DEF (def_operand_p, phi, iter, flags) 13354 { 13355 my_code; 13356 } 13357 1335812.2.2 Immediate Uses 13359--------------------- 13360 13361Immediate use information is now always available. Using the immediate 13362use iterators, you may examine every use of any 'SSA_NAME'. For 13363instance, to change each use of 'ssa_var' to 'ssa_var2' and call 13364fold_stmt on each stmt after that is done: 13365 13366 use_operand_p imm_use_p; 13367 imm_use_iterator iterator; 13368 tree ssa_var, stmt; 13369 13370 13371 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 13372 { 13373 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 13374 SET_USE (imm_use_p, ssa_var_2); 13375 fold_stmt (stmt); 13376 } 13377 13378 There are 2 iterators which can be used. 'FOR_EACH_IMM_USE_FAST' is 13379used when the immediate uses are not changed, i.e., you are looking at 13380the uses, but not setting them. 13381 13382 If they do get changed, then care must be taken that things are not 13383changed under the iterators, so use the 'FOR_EACH_IMM_USE_STMT' and 13384'FOR_EACH_IMM_USE_ON_STMT' iterators. They attempt to preserve the 13385sanity of the use list by moving all the uses for a statement into a 13386controlled position, and then iterating over those uses. Then the 13387optimization can manipulate the stmt when all the uses have been 13388processed. This is a little slower than the FAST version since it adds 13389a placeholder element and must sort through the list a bit for each 13390statement. This placeholder element must be also be removed if the loop 13391is terminated early. The macro 'BREAK_FROM_IMM_USE_SAFE' is provided to 13392do this : 13393 13394 FOR_EACH_IMM_USE_STMT (stmt, iterator, ssa_var) 13395 { 13396 if (stmt == last_stmt) 13397 BREAK_FROM_SAFE_IMM_USE (iter); 13398 13399 FOR_EACH_IMM_USE_ON_STMT (imm_use_p, iterator) 13400 SET_USE (imm_use_p, ssa_var_2); 13401 fold_stmt (stmt); 13402 } 13403 13404 There are checks in 'verify_ssa' which verify that the immediate use 13405list is up to date, as well as checking that an optimization didn't 13406break from the loop without using this macro. It is safe to simply 13407'break'; from a 'FOR_EACH_IMM_USE_FAST' traverse. 13408 13409 Some useful functions and macros: 13410 1. 'has_zero_uses (ssa_var)' : Returns true if there are no uses of 13411 'ssa_var'. 13412 2. 'has_single_use (ssa_var)' : Returns true if there is only a single 13413 use of 'ssa_var'. 13414 3. 'single_imm_use (ssa_var, use_operand_p *ptr, tree *stmt)' : 13415 Returns true if there is only a single use of 'ssa_var', and also 13416 returns the use pointer and statement it occurs in, in the second 13417 and third parameters. 13418 4. 'num_imm_uses (ssa_var)' : Returns the number of immediate uses of 13419 'ssa_var'. It is better not to use this if possible since it 13420 simply utilizes a loop to count the uses. 13421 5. 'PHI_ARG_INDEX_FROM_USE (use_p)' : Given a use within a 'PHI' node, 13422 return the index number for the use. An assert is triggered if the 13423 use isn't located in a 'PHI' node. 13424 6. 'USE_STMT (use_p)' : Return the statement a use occurs in. 13425 13426 Note that uses are not put into an immediate use list until their 13427statement is actually inserted into the instruction stream via a 'bsi_*' 13428routine. 13429 13430 It is also still possible to utilize lazy updating of statements, but 13431this should be used only when absolutely required. Both alias analysis 13432and the dominator optimizations currently do this. 13433 13434 When lazy updating is being used, the immediate use information is out 13435of date and cannot be used reliably. Lazy updating is achieved by 13436simply marking statements modified via calls to 'gimple_set_modified' 13437instead of 'update_stmt'. When lazy updating is no longer required, all 13438the modified statements must have 'update_stmt' called in order to bring 13439them up to date. This must be done before the optimization is finished, 13440or 'verify_ssa' will trigger an abort. 13441 13442 This is done with a simple loop over the instruction stream: 13443 block_stmt_iterator bsi; 13444 basic_block bb; 13445 FOR_EACH_BB (bb) 13446 { 13447 for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) 13448 update_stmt_if_modified (bsi_stmt (bsi)); 13449 } 13450 13451 13452File: gccint.info, Node: SSA, Next: Alias analysis, Prev: SSA Operands, Up: Tree SSA 13453 1345412.3 Static Single Assignment 13455============================= 13456 13457Most of the tree optimizers rely on the data flow information provided 13458by the Static Single Assignment (SSA) form. We implement the SSA form 13459as described in 'R. Cytron, J. Ferrante, B. Rosen, M. Wegman, and K. 13460Zadeck. Efficiently Computing Static Single Assignment Form and the 13461Control Dependence Graph. ACM Transactions on Programming Languages and 13462Systems, 13(4):451-490, October 1991'. 13463 13464 The SSA form is based on the premise that program variables are 13465assigned in exactly one location in the program. Multiple assignments 13466to the same variable create new versions of that variable. Naturally, 13467actual programs are seldom in SSA form initially because variables tend 13468to be assigned multiple times. The compiler modifies the program 13469representation so that every time a variable is assigned in the code, a 13470new version of the variable is created. Different versions of the same 13471variable are distinguished by subscripting the variable name with its 13472version number. Variables used in the right-hand side of expressions 13473are renamed so that their version number matches that of the most recent 13474assignment. 13475 13476 We represent variable versions using 'SSA_NAME' nodes. The renaming 13477process in 'tree-ssa.c' wraps every real and virtual operand with an 13478'SSA_NAME' node which contains the version number and the statement that 13479created the 'SSA_NAME'. Only definitions and virtual definitions may 13480create new 'SSA_NAME' nodes. 13481 13482 Sometimes, flow of control makes it impossible to determine the most 13483recent version of a variable. In these cases, the compiler inserts an 13484artificial definition for that variable called "PHI function" or "PHI 13485node". This new definition merges all the incoming versions of the 13486variable to create a new name for it. For instance, 13487 13488 if (...) 13489 a_1 = 5; 13490 else if (...) 13491 a_2 = 2; 13492 else 13493 a_3 = 13; 13494 13495 # a_4 = PHI <a_1, a_2, a_3> 13496 return a_4; 13497 13498 Since it is not possible to determine which of the three branches will 13499be taken at runtime, we don't know which of 'a_1', 'a_2' or 'a_3' to use 13500at the return statement. So, the SSA renamer creates a new version 13501'a_4' which is assigned the result of "merging" 'a_1', 'a_2' and 'a_3'. 13502Hence, PHI nodes mean "one of these operands. I don't know which". 13503 13504 The following functions can be used to examine PHI nodes 13505 13506 -- Function: gimple_phi_result (PHI) 13507 Returns the 'SSA_NAME' created by PHI node PHI (i.e., PHI's LHS). 13508 13509 -- Function: gimple_phi_num_args (PHI) 13510 Returns the number of arguments in PHI. This number is exactly the 13511 number of incoming edges to the basic block holding PHI. 13512 13513 -- Function: gimple_phi_arg (PHI, I) 13514 Returns Ith argument of PHI. 13515 13516 -- Function: gimple_phi_arg_edge (PHI, I) 13517 Returns the incoming edge for the Ith argument of PHI. 13518 13519 -- Function: gimple_phi_arg_def (PHI, I) 13520 Returns the 'SSA_NAME' for the Ith argument of PHI. 13521 1352212.3.1 Preserving the SSA form 13523------------------------------ 13524 13525Some optimization passes make changes to the function that invalidate 13526the SSA property. This can happen when a pass has added new symbols or 13527changed the program so that variables that were previously aliased 13528aren't anymore. Whenever something like this happens, the affected 13529symbols must be renamed into SSA form again. Transformations that emit 13530new code or replicate existing statements will also need to update the 13531SSA form. 13532 13533 Since GCC implements two different SSA forms for register and virtual 13534variables, keeping the SSA form up to date depends on whether you are 13535updating register or virtual names. In both cases, the general idea 13536behind incremental SSA updates is similar: when new SSA names are 13537created, they typically are meant to replace other existing names in the 13538program. 13539 13540 For instance, given the following code: 13541 13542 1 L0: 13543 2 x_1 = PHI (0, x_5) 13544 3 if (x_1 < 10) 13545 4 if (x_1 > 7) 13546 5 y_2 = 0 13547 6 else 13548 7 y_3 = x_1 + x_7 13549 8 endif 13550 9 x_5 = x_1 + 1 13551 10 goto L0; 13552 11 endif 13553 13554 Suppose that we insert new names 'x_10' and 'x_11' (lines '4' and '8'). 13555 13556 1 L0: 13557 2 x_1 = PHI (0, x_5) 13558 3 if (x_1 < 10) 13559 4 x_10 = ... 13560 5 if (x_1 > 7) 13561 6 y_2 = 0 13562 7 else 13563 8 x_11 = ... 13564 9 y_3 = x_1 + x_7 13565 10 endif 13566 11 x_5 = x_1 + 1 13567 12 goto L0; 13568 13 endif 13569 13570 We want to replace all the uses of 'x_1' with the new definitions of 13571'x_10' and 'x_11'. Note that the only uses that should be replaced are 13572those at lines '5', '9' and '11'. Also, the use of 'x_7' at line '9' 13573should _not_ be replaced (this is why we cannot just mark symbol 'x' for 13574renaming). 13575 13576 Additionally, we may need to insert a PHI node at line '11' because 13577that is a merge point for 'x_10' and 'x_11'. So the use of 'x_1' at 13578line '11' will be replaced with the new PHI node. The insertion of PHI 13579nodes is optional. They are not strictly necessary to preserve the SSA 13580form, and depending on what the caller inserted, they may not even be 13581useful for the optimizers. 13582 13583 Updating the SSA form is a two step process. First, the pass has to 13584identify which names need to be updated and/or which symbols need to be 13585renamed into SSA form for the first time. When new names are introduced 13586to replace existing names in the program, the mapping between the old 13587and the new names are registered by calling 'register_new_name_mapping' 13588(note that if your pass creates new code by duplicating basic blocks, 13589the call to 'tree_duplicate_bb' will set up the necessary mappings 13590automatically). 13591 13592 After the replacement mappings have been registered and new symbols 13593marked for renaming, a call to 'update_ssa' makes the registered 13594changes. This can be done with an explicit call or by creating 'TODO' 13595flags in the 'tree_opt_pass' structure for your pass. There are several 13596'TODO' flags that control the behavior of 'update_ssa': 13597 13598 * 'TODO_update_ssa'. Update the SSA form inserting PHI nodes for 13599 newly exposed symbols and virtual names marked for updating. When 13600 updating real names, only insert PHI nodes for a real name 'O_j' in 13601 blocks reached by all the new and old definitions for 'O_j'. If 13602 the iterated dominance frontier for 'O_j' is not pruned, we may end 13603 up inserting PHI nodes in blocks that have one or more edges with 13604 no incoming definition for 'O_j'. This would lead to uninitialized 13605 warnings for 'O_j''s symbol. 13606 13607 * 'TODO_update_ssa_no_phi'. Update the SSA form without inserting 13608 any new PHI nodes at all. This is used by passes that have either 13609 inserted all the PHI nodes themselves or passes that need only to 13610 patch use-def and def-def chains for virtuals (e.g., DCE). 13611 13612 * 'TODO_update_ssa_full_phi'. Insert PHI nodes everywhere they are 13613 needed. No pruning of the IDF is done. This is used by passes 13614 that need the PHI nodes for 'O_j' even if it means that some 13615 arguments will come from the default definition of 'O_j''s symbol 13616 (e.g., 'pass_linear_transform'). 13617 13618 WARNING: If you need to use this flag, chances are that your pass 13619 may be doing something wrong. Inserting PHI nodes for an old name 13620 where not all edges carry a new replacement may lead to silent 13621 codegen errors or spurious uninitialized warnings. 13622 13623 * 'TODO_update_ssa_only_virtuals'. Passes that update the SSA form 13624 on their own may want to delegate the updating of virtual names to 13625 the generic updater. Since FUD chains are easier to maintain, this 13626 simplifies the work they need to do. NOTE: If this flag is used, 13627 any OLD->NEW mappings for real names are explicitly destroyed and 13628 only the symbols marked for renaming are processed. 13629 1363012.3.2 Examining 'SSA_NAME' nodes 13631--------------------------------- 13632 13633The following macros can be used to examine 'SSA_NAME' nodes 13634 13635 -- Macro: SSA_NAME_DEF_STMT (VAR) 13636 Returns the statement S that creates the 'SSA_NAME' VAR. If S is 13637 an empty statement (i.e., 'IS_EMPTY_STMT (S)' returns 'true'), it 13638 means that the first reference to this variable is a USE or a VUSE. 13639 13640 -- Macro: SSA_NAME_VERSION (VAR) 13641 Returns the version number of the 'SSA_NAME' object VAR. 13642 1364312.3.3 Walking the dominator tree 13644--------------------------------- 13645 13646 -- Tree SSA function: void walk_dominator_tree (WALK_DATA, BB) 13647 13648 This function walks the dominator tree for the current CFG calling 13649 a set of callback functions defined in STRUCT DOM_WALK_DATA in 13650 'domwalk.h'. The call back functions you need to define give you 13651 hooks to execute custom code at various points during traversal: 13652 13653 1. Once to initialize any local data needed while processing BB 13654 and its children. This local data is pushed into an internal 13655 stack which is automatically pushed and popped as the walker 13656 traverses the dominator tree. 13657 13658 2. Once before traversing all the statements in the BB. 13659 13660 3. Once for every statement inside BB. 13661 13662 4. Once after traversing all the statements and before recursing 13663 into BB's dominator children. 13664 13665 5. It then recurses into all the dominator children of BB. 13666 13667 6. After recursing into all the dominator children of BB it can, 13668 optionally, traverse every statement in BB again (i.e., 13669 repeating steps 2 and 3). 13670 13671 7. Once after walking the statements in BB and BB's dominator 13672 children. At this stage, the block local data stack is 13673 popped. 13674 13675 13676File: gccint.info, Node: Alias analysis, Next: Memory model, Prev: SSA, Up: Tree SSA 13677 1367812.4 Alias analysis 13679=================== 13680 13681Alias analysis in GIMPLE SSA form consists of two pieces. First the 13682virtual SSA web ties conflicting memory accesses and provides a SSA 13683use-def chain and SSA immediate-use chains for walking possibly 13684dependent memory accesses. Second an alias-oracle can be queried to 13685disambiguate explicit and implicit memory references. 13686 13687 1. Memory SSA form. 13688 13689 All statements that may use memory have exactly one accompanied use 13690 of a virtual SSA name that represents the state of memory at the 13691 given point in the IL. 13692 13693 All statements that may define memory have exactly one accompanied 13694 definition of a virtual SSA name using the previous state of memory 13695 and defining the new state of memory after the given point in the 13696 IL. 13697 13698 int i; 13699 int foo (void) 13700 { 13701 # .MEM_3 = VDEF <.MEM_2(D)> 13702 i = 1; 13703 # VUSE <.MEM_3> 13704 return i; 13705 } 13706 13707 The virtual SSA names in this case are '.MEM_2(D)' and '.MEM_3'. 13708 The store to the global variable 'i' defines '.MEM_3' invalidating 13709 '.MEM_2(D)'. The load from 'i' uses that new state '.MEM_3'. 13710 13711 The virtual SSA web serves as constraints to SSA optimizers 13712 preventing illegitimate code-motion and optimization. It also 13713 provides a way to walk related memory statements. 13714 13715 2. Points-to and escape analysis. 13716 13717 Points-to analysis builds a set of constraints from the GIMPLE SSA 13718 IL representing all pointer operations and facts we do or do not 13719 know about pointers. Solving this set of constraints yields a 13720 conservatively correct solution for each pointer variable in the 13721 program (though we are only interested in SSA name pointers) as to 13722 what it may possibly point to. 13723 13724 This points-to solution for a given SSA name pointer is stored in 13725 the 'pt_solution' sub-structure of the 'SSA_NAME_PTR_INFO' record. 13726 The following accessor functions are available: 13727 13728 * 'pt_solution_includes' 13729 * 'pt_solutions_intersect' 13730 13731 Points-to analysis also computes the solution for two special set 13732 of pointers, 'ESCAPED' and 'CALLUSED'. Those represent all memory 13733 that has escaped the scope of analysis or that is used by pure or 13734 nested const calls. 13735 13736 3. Type-based alias analysis 13737 13738 Type-based alias analysis is frontend dependent though generic 13739 support is provided by the middle-end in 'alias.c'. TBAA code is 13740 used by both tree optimizers and RTL optimizers. 13741 13742 Every language that wishes to perform language-specific alias 13743 analysis should define a function that computes, given a 'tree' 13744 node, an alias set for the node. Nodes in different alias sets are 13745 not allowed to alias. For an example, see the C front-end function 13746 'c_get_alias_set'. 13747 13748 4. Tree alias-oracle 13749 13750 The tree alias-oracle provides means to disambiguate two memory 13751 references and memory references against statements. The following 13752 queries are available: 13753 13754 * 'refs_may_alias_p' 13755 * 'ref_maybe_used_by_stmt_p' 13756 * 'stmt_may_clobber_ref_p' 13757 13758 In addition to those two kind of statement walkers are available 13759 walking statements related to a reference ref. 13760 'walk_non_aliased_vuses' walks over dominating memory defining 13761 statements and calls back if the statement does not clobber ref 13762 providing the non-aliased VUSE. The walk stops at the first 13763 clobbering statement or if asked to. 'walk_aliased_vdefs' walks 13764 over dominating memory defining statements and calls back on each 13765 statement clobbering ref providing its aliasing VDEF. The walk 13766 stops if asked to. 13767 13768 13769File: gccint.info, Node: Memory model, Prev: Alias analysis, Up: Tree SSA 13770 1377112.5 Memory model 13772================= 13773 13774The memory model used by the middle-end models that of the C/C++ 13775languages. The middle-end has the notion of an effective type of a 13776memory region which is used for type-based alias analysis. 13777 13778 The following is a refinement of ISO C99 6.5/6, clarifying the block 13779copy case to follow common sense and extending the concept of a dynamic 13780effective type to objects with a declared type as required for C++. 13781 13782 The effective type of an object for an access to its stored value is 13783 the declared type of the object or the effective type determined by 13784 a previous store to it. If a value is stored into an object through 13785 an lvalue having a type that is not a character type, then the 13786 type of the lvalue becomes the effective type of the object for that 13787 access and for subsequent accesses that do not modify the stored value. 13788 If a value is copied into an object using memcpy or memmove, 13789 or is copied as an array of character type, then the effective type 13790 of the modified object for that access and for subsequent accesses that 13791 do not modify the value is undetermined. For all other accesses to an 13792 object, the effective type of the object is simply the type of the 13793 lvalue used for the access. 13794 13795 13796File: gccint.info, Node: RTL, Next: Control Flow, Prev: Tree SSA, Up: Top 13797 1379813 RTL Representation 13799********************* 13800 13801The last part of the compiler work is done on a low-level intermediate 13802representation called Register Transfer Language. In this language, the 13803instructions to be output are described, pretty much one by one, in an 13804algebraic form that describes what the instruction does. 13805 13806 RTL is inspired by Lisp lists. It has both an internal form, made up 13807of structures that point at other structures, and a textual form that is 13808used in the machine description and in printed debugging dumps. The 13809textual form uses nested parentheses to indicate the pointers in the 13810internal form. 13811 13812* Menu: 13813 13814* RTL Objects:: Expressions vs vectors vs strings vs integers. 13815* RTL Classes:: Categories of RTL expression objects, and their structure. 13816* Accessors:: Macros to access expression operands or vector elts. 13817* Special Accessors:: Macros to access specific annotations on RTL. 13818* Flags:: Other flags in an RTL expression. 13819* Machine Modes:: Describing the size and format of a datum. 13820* Constants:: Expressions with constant values. 13821* Regs and Memory:: Expressions representing register contents or memory. 13822* Arithmetic:: Expressions representing arithmetic on other expressions. 13823* Comparisons:: Expressions representing comparison of expressions. 13824* Bit-Fields:: Expressions representing bit-fields in memory or reg. 13825* Vector Operations:: Expressions involving vector datatypes. 13826* Conversions:: Extending, truncating, floating or fixing. 13827* RTL Declarations:: Declaring volatility, constancy, etc. 13828* Side Effects:: Expressions for storing in registers, etc. 13829* Incdec:: Embedded side-effects for autoincrement addressing. 13830* Assembler:: Representing 'asm' with operands. 13831* Debug Information:: Expressions representing debugging information. 13832* Insns:: Expression types for entire insns. 13833* Calls:: RTL representation of function call insns. 13834* Sharing:: Some expressions are unique; others *must* be copied. 13835* Reading RTL:: Reading textual RTL from a file. 13836 13837 13838File: gccint.info, Node: RTL Objects, Next: RTL Classes, Up: RTL 13839 1384013.1 RTL Object Types 13841===================== 13842 13843RTL uses five kinds of objects: expressions, integers, wide integers, 13844strings and vectors. Expressions are the most important ones. An RTL 13845expression ("RTX", for short) is a C structure, but it is usually 13846referred to with a pointer; a type that is given the typedef name 'rtx'. 13847 13848 An integer is simply an 'int'; their written form uses decimal digits. 13849A wide integer is an integral object whose type is 'HOST_WIDE_INT'; 13850their written form uses decimal digits. 13851 13852 A string is a sequence of characters. In core it is represented as a 13853'char *' in usual C fashion, and it is written in C syntax as well. 13854However, strings in RTL may never be null. If you write an empty string 13855in a machine description, it is represented in core as a null pointer 13856rather than as a pointer to a null character. In certain contexts, 13857these null pointers instead of strings are valid. Within RTL code, 13858strings are most commonly found inside 'symbol_ref' expressions, but 13859they appear in other contexts in the RTL expressions that make up 13860machine descriptions. 13861 13862 In a machine description, strings are normally written with double 13863quotes, as you would in C. However, strings in machine descriptions may 13864extend over many lines, which is invalid C, and adjacent string 13865constants are not concatenated as they are in C. Any string constant 13866may be surrounded with a single set of parentheses. Sometimes this 13867makes the machine description easier to read. 13868 13869 There is also a special syntax for strings, which can be useful when C 13870code is embedded in a machine description. Wherever a string can 13871appear, it is also valid to write a C-style brace block. The entire 13872brace block, including the outermost pair of braces, is considered to be 13873the string constant. Double quote characters inside the braces are not 13874special. Therefore, if you write string constants in the C code, you 13875need not escape each quote character with a backslash. 13876 13877 A vector contains an arbitrary number of pointers to expressions. The 13878number of elements in the vector is explicitly present in the vector. 13879The written form of a vector consists of square brackets ('[...]') 13880surrounding the elements, in sequence and with whitespace separating 13881them. Vectors of length zero are not created; null pointers are used 13882instead. 13883 13884 Expressions are classified by "expression codes" (also called RTX 13885codes). The expression code is a name defined in 'rtl.def', which is 13886also (in uppercase) a C enumeration constant. The possible expression 13887codes and their meanings are machine-independent. The code of an RTX 13888can be extracted with the macro 'GET_CODE (X)' and altered with 13889'PUT_CODE (X, NEWCODE)'. 13890 13891 The expression code determines how many operands the expression 13892contains, and what kinds of objects they are. In RTL, unlike Lisp, you 13893cannot tell by looking at an operand what kind of object it is. 13894Instead, you must know from its context--from the expression code of the 13895containing expression. For example, in an expression of code 'subreg', 13896the first operand is to be regarded as an expression and the second 13897operand as an integer. In an expression of code 'plus', there are two 13898operands, both of which are to be regarded as expressions. In a 13899'symbol_ref' expression, there is one operand, which is to be regarded 13900as a string. 13901 13902 Expressions are written as parentheses containing the name of the 13903expression type, its flags and machine mode if any, and then the 13904operands of the expression (separated by spaces). 13905 13906 Expression code names in the 'md' file are written in lowercase, but 13907when they appear in C code they are written in uppercase. In this 13908manual, they are shown as follows: 'const_int'. 13909 13910 In a few contexts a null pointer is valid where an expression is 13911normally wanted. The written form of this is '(nil)'. 13912 13913 13914File: gccint.info, Node: RTL Classes, Next: Accessors, Prev: RTL Objects, Up: RTL 13915 1391613.2 RTL Classes and Formats 13917============================ 13918 13919The various expression codes are divided into several "classes", which 13920are represented by single characters. You can determine the class of an 13921RTX code with the macro 'GET_RTX_CLASS (CODE)'. Currently, 'rtl.def' 13922defines these classes: 13923 13924'RTX_OBJ' 13925 An RTX code that represents an actual object, such as a register 13926 ('REG') or a memory location ('MEM', 'SYMBOL_REF'). 'LO_SUM') is 13927 also included; instead, 'SUBREG' and 'STRICT_LOW_PART' are not in 13928 this class, but in class 'x'. 13929 13930'RTX_CONST_OBJ' 13931 An RTX code that represents a constant object. 'HIGH' is also 13932 included in this class. 13933 13934'RTX_COMPARE' 13935 An RTX code for a non-symmetric comparison, such as 'GEU' or 'LT'. 13936 13937'RTX_COMM_COMPARE' 13938 An RTX code for a symmetric (commutative) comparison, such as 'EQ' 13939 or 'ORDERED'. 13940 13941'RTX_UNARY' 13942 An RTX code for a unary arithmetic operation, such as 'NEG', 'NOT', 13943 or 'ABS'. This category also includes value extension (sign or 13944 zero) and conversions between integer and floating point. 13945 13946'RTX_COMM_ARITH' 13947 An RTX code for a commutative binary operation, such as 'PLUS' or 13948 'AND'. 'NE' and 'EQ' are comparisons, so they have class '<'. 13949 13950'RTX_BIN_ARITH' 13951 An RTX code for a non-commutative binary operation, such as 13952 'MINUS', 'DIV', or 'ASHIFTRT'. 13953 13954'RTX_BITFIELD_OPS' 13955 An RTX code for a bit-field operation. Currently only 13956 'ZERO_EXTRACT' and 'SIGN_EXTRACT'. These have three inputs and are 13957 lvalues (so they can be used for insertion as well). *Note 13958 Bit-Fields::. 13959 13960'RTX_TERNARY' 13961 An RTX code for other three input operations. Currently only 13962 'IF_THEN_ELSE', 'VEC_MERGE', 'SIGN_EXTRACT', 'ZERO_EXTRACT', and 13963 'FMA'. 13964 13965'RTX_INSN' 13966 An RTX code for an entire instruction: 'INSN', 'JUMP_INSN', and 13967 'CALL_INSN'. *Note Insns::. 13968 13969'RTX_MATCH' 13970 An RTX code for something that matches in insns, such as 13971 'MATCH_DUP'. These only occur in machine descriptions. 13972 13973'RTX_AUTOINC' 13974 An RTX code for an auto-increment addressing mode, such as 13975 'POST_INC'. 'XEXP (X, 0)' gives the auto-modified register. 13976 13977'RTX_EXTRA' 13978 All other RTX codes. This category includes the remaining codes 13979 used only in machine descriptions ('DEFINE_*', etc.). It also 13980 includes all the codes describing side effects ('SET', 'USE', 13981 'CLOBBER', etc.) and the non-insns that may appear on an insn 13982 chain, such as 'NOTE', 'BARRIER', and 'CODE_LABEL'. 'SUBREG' is 13983 also part of this class. 13984 13985 For each expression code, 'rtl.def' specifies the number of contained 13986objects and their kinds using a sequence of characters called the 13987"format" of the expression code. For example, the format of 'subreg' is 13988'ei'. 13989 13990 These are the most commonly used format characters: 13991 13992'e' 13993 An expression (actually a pointer to an expression). 13994 13995'i' 13996 An integer. 13997 13998'w' 13999 A wide integer. 14000 14001's' 14002 A string. 14003 14004'E' 14005 A vector of expressions. 14006 14007 A few other format characters are used occasionally: 14008 14009'u' 14010 'u' is equivalent to 'e' except that it is printed differently in 14011 debugging dumps. It is used for pointers to insns. 14012 14013'n' 14014 'n' is equivalent to 'i' except that it is printed differently in 14015 debugging dumps. It is used for the line number or code number of 14016 a 'note' insn. 14017 14018'S' 14019 'S' indicates a string which is optional. In the RTL objects in 14020 core, 'S' is equivalent to 's', but when the object is read, from 14021 an 'md' file, the string value of this operand may be omitted. An 14022 omitted string is taken to be the null string. 14023 14024'V' 14025 'V' indicates a vector which is optional. In the RTL objects in 14026 core, 'V' is equivalent to 'E', but when the object is read from an 14027 'md' file, the vector value of this operand may be omitted. An 14028 omitted vector is effectively the same as a vector of no elements. 14029 14030'B' 14031 'B' indicates a pointer to basic block structure. 14032 14033'0' 14034 '0' means a slot whose contents do not fit any normal category. 14035 '0' slots are not printed at all in dumps, and are often used in 14036 special ways by small parts of the compiler. 14037 14038 There are macros to get the number of operands and the format of an 14039expression code: 14040 14041'GET_RTX_LENGTH (CODE)' 14042 Number of operands of an RTX of code CODE. 14043 14044'GET_RTX_FORMAT (CODE)' 14045 The format of an RTX of code CODE, as a C string. 14046 14047 Some classes of RTX codes always have the same format. For example, it 14048is safe to assume that all comparison operations have format 'ee'. 14049 14050'1' 14051 All codes of this class have format 'e'. 14052 14053'<' 14054'c' 14055'2' 14056 All codes of these classes have format 'ee'. 14057 14058'b' 14059'3' 14060 All codes of these classes have format 'eee'. 14061 14062'i' 14063 All codes of this class have formats that begin with 'iuueiee'. 14064 *Note Insns::. Note that not all RTL objects linked onto an insn 14065 chain are of class 'i'. 14066 14067'o' 14068'm' 14069'x' 14070 You can make no assumptions about the format of these codes. 14071 14072 14073File: gccint.info, Node: Accessors, Next: Special Accessors, Prev: RTL Classes, Up: RTL 14074 1407513.3 Access to Operands 14076======================= 14077 14078Operands of expressions are accessed using the macros 'XEXP', 'XINT', 14079'XWINT' and 'XSTR'. Each of these macros takes two arguments: an 14080expression-pointer (RTX) and an operand number (counting from zero). 14081Thus, 14082 14083 XEXP (X, 2) 14084 14085accesses operand 2 of expression X, as an expression. 14086 14087 XINT (X, 2) 14088 14089accesses the same operand as an integer. 'XSTR', used in the same 14090fashion, would access it as a string. 14091 14092 Any operand can be accessed as an integer, as an expression or as a 14093string. You must choose the correct method of access for the kind of 14094value actually stored in the operand. You would do this based on the 14095expression code of the containing expression. That is also how you 14096would know how many operands there are. 14097 14098 For example, if X is a 'subreg' expression, you know that it has two 14099operands which can be correctly accessed as 'XEXP (X, 0)' and 'XINT (X, 141001)'. If you did 'XINT (X, 0)', you would get the address of the 14101expression operand but cast as an integer; that might occasionally be 14102useful, but it would be cleaner to write '(int) XEXP (X, 0)'. 'XEXP (X, 141031)' would also compile without error, and would return the second, 14104integer operand cast as an expression pointer, which would probably 14105result in a crash when accessed. Nothing stops you from writing 'XEXP 14106(X, 28)' either, but this will access memory past the end of the 14107expression with unpredictable results. 14108 14109 Access to operands which are vectors is more complicated. You can use 14110the macro 'XVEC' to get the vector-pointer itself, or the macros 14111'XVECEXP' and 'XVECLEN' to access the elements and length of a vector. 14112 14113'XVEC (EXP, IDX)' 14114 Access the vector-pointer which is operand number IDX in EXP. 14115 14116'XVECLEN (EXP, IDX)' 14117 Access the length (number of elements) in the vector which is in 14118 operand number IDX in EXP. This value is an 'int'. 14119 14120'XVECEXP (EXP, IDX, ELTNUM)' 14121 Access element number ELTNUM in the vector which is in operand 14122 number IDX in EXP. This value is an RTX. 14123 14124 It is up to you to make sure that ELTNUM is not negative and is 14125 less than 'XVECLEN (EXP, IDX)'. 14126 14127 All the macros defined in this section expand into lvalues and 14128therefore can be used to assign the operands, lengths and vector 14129elements as well as to access them. 14130 14131 14132File: gccint.info, Node: Special Accessors, Next: Flags, Prev: Accessors, Up: RTL 14133 1413413.4 Access to Special Operands 14135=============================== 14136 14137Some RTL nodes have special annotations associated with them. 14138 14139'MEM' 14140 'MEM_ALIAS_SET (X)' 14141 If 0, X is not in any alias set, and may alias anything. 14142 Otherwise, X can only alias 'MEM's in a conflicting alias set. 14143 This value is set in a language-dependent manner in the 14144 front-end, and should not be altered in the back-end. In some 14145 front-ends, these numbers may correspond in some way to types, 14146 or other language-level entities, but they need not, and the 14147 back-end makes no such assumptions. These set numbers are 14148 tested with 'alias_sets_conflict_p'. 14149 14150 'MEM_EXPR (X)' 14151 If this register is known to hold the value of some user-level 14152 declaration, this is that tree node. It may also be a 14153 'COMPONENT_REF', in which case this is some field reference, 14154 and 'TREE_OPERAND (X, 0)' contains the declaration, or another 14155 'COMPONENT_REF', or null if there is no compile-time object 14156 associated with the reference. 14157 14158 'MEM_OFFSET_KNOWN_P (X)' 14159 True if the offset of the memory reference from 'MEM_EXPR' is 14160 known. 'MEM_OFFSET (X)' provides the offset if so. 14161 14162 'MEM_OFFSET (X)' 14163 The offset from the start of 'MEM_EXPR'. The value is only 14164 valid if 'MEM_OFFSET_KNOWN_P (X)' is true. 14165 14166 'MEM_SIZE_KNOWN_P (X)' 14167 True if the size of the memory reference is known. 'MEM_SIZE 14168 (X)' provides its size if so. 14169 14170 'MEM_SIZE (X)' 14171 The size in bytes of the memory reference. This is mostly 14172 relevant for 'BLKmode' references as otherwise the size is 14173 implied by the mode. The value is only valid if 14174 'MEM_SIZE_KNOWN_P (X)' is true. 14175 14176 'MEM_ALIGN (X)' 14177 The known alignment in bits of the memory reference. 14178 14179 'MEM_ADDR_SPACE (X)' 14180 The address space of the memory reference. This will commonly 14181 be zero for the generic address space. 14182 14183'REG' 14184 'ORIGINAL_REGNO (X)' 14185 This field holds the number the register "originally" had; for 14186 a pseudo register turned into a hard reg this will hold the 14187 old pseudo register number. 14188 14189 'REG_EXPR (X)' 14190 If this register is known to hold the value of some user-level 14191 declaration, this is that tree node. 14192 14193 'REG_OFFSET (X)' 14194 If this register is known to hold the value of some user-level 14195 declaration, this is the offset into that logical storage. 14196 14197'SYMBOL_REF' 14198 'SYMBOL_REF_DECL (X)' 14199 If the 'symbol_ref' X was created for a 'VAR_DECL' or a 14200 'FUNCTION_DECL', that tree is recorded here. If this value is 14201 null, then X was created by back end code generation routines, 14202 and there is no associated front end symbol table entry. 14203 14204 'SYMBOL_REF_DECL' may also point to a tree of class ''c'', 14205 that is, some sort of constant. In this case, the 14206 'symbol_ref' is an entry in the per-file constant pool; again, 14207 there is no associated front end symbol table entry. 14208 14209 'SYMBOL_REF_CONSTANT (X)' 14210 If 'CONSTANT_POOL_ADDRESS_P (X)' is true, this is the constant 14211 pool entry for X. It is null otherwise. 14212 14213 'SYMBOL_REF_DATA (X)' 14214 A field of opaque type used to store 'SYMBOL_REF_DECL' or 14215 'SYMBOL_REF_CONSTANT'. 14216 14217 'SYMBOL_REF_FLAGS (X)' 14218 In a 'symbol_ref', this is used to communicate various 14219 predicates about the symbol. Some of these are common enough 14220 to be computed by common code, some are specific to the 14221 target. The common bits are: 14222 14223 'SYMBOL_FLAG_FUNCTION' 14224 Set if the symbol refers to a function. 14225 14226 'SYMBOL_FLAG_LOCAL' 14227 Set if the symbol is local to this "module". See 14228 'TARGET_BINDS_LOCAL_P'. 14229 14230 'SYMBOL_FLAG_EXTERNAL' 14231 Set if this symbol is not defined in this translation 14232 unit. Note that this is not the inverse of 14233 'SYMBOL_FLAG_LOCAL'. 14234 14235 'SYMBOL_FLAG_SMALL' 14236 Set if the symbol is located in the small data section. 14237 See 'TARGET_IN_SMALL_DATA_P'. 14238 14239 'SYMBOL_REF_TLS_MODEL (X)' 14240 This is a multi-bit field accessor that returns the 14241 'tls_model' to be used for a thread-local storage symbol. 14242 It returns zero for non-thread-local symbols. 14243 14244 'SYMBOL_FLAG_HAS_BLOCK_INFO' 14245 Set if the symbol has 'SYMBOL_REF_BLOCK' and 14246 'SYMBOL_REF_BLOCK_OFFSET' fields. 14247 14248 'SYMBOL_FLAG_ANCHOR' 14249 Set if the symbol is used as a section anchor. "Section 14250 anchors" are symbols that have a known position within an 14251 'object_block' and that can be used to access nearby 14252 members of that block. They are used to implement 14253 '-fsection-anchors'. 14254 14255 If this flag is set, then 'SYMBOL_FLAG_HAS_BLOCK_INFO' 14256 will be too. 14257 14258 Bits beginning with 'SYMBOL_FLAG_MACH_DEP' are available for 14259 the target's use. 14260 14261'SYMBOL_REF_BLOCK (X)' 14262 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the 'object_block' 14263 structure to which the symbol belongs, or 'NULL' if it has not been 14264 assigned a block. 14265 14266'SYMBOL_REF_BLOCK_OFFSET (X)' 14267 If 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)', this is the offset of X from 14268 the first object in 'SYMBOL_REF_BLOCK (X)'. The value is negative 14269 if X has not yet been assigned to a block, or it has not been given 14270 an offset within that block. 14271 14272 14273File: gccint.info, Node: Flags, Next: Machine Modes, Prev: Special Accessors, Up: RTL 14274 1427513.5 Flags in an RTL Expression 14276=============================== 14277 14278RTL expressions contain several flags (one-bit bit-fields) that are used 14279in certain types of expression. Most often they are accessed with the 14280following macros, which expand into lvalues. 14281 14282'CONSTANT_POOL_ADDRESS_P (X)' 14283 Nonzero in a 'symbol_ref' if it refers to part of the current 14284 function's constant pool. For most targets these addresses are in 14285 a '.rodata' section entirely separate from the function, but for 14286 some targets the addresses are close to the beginning of the 14287 function. In either case GCC assumes these addresses can be 14288 addressed directly, perhaps with the help of base registers. 14289 Stored in the 'unchanging' field and printed as '/u'. 14290 14291'RTL_CONST_CALL_P (X)' 14292 In a 'call_insn' indicates that the insn represents a call to a 14293 const function. Stored in the 'unchanging' field and printed as 14294 '/u'. 14295 14296'RTL_PURE_CALL_P (X)' 14297 In a 'call_insn' indicates that the insn represents a call to a 14298 pure function. Stored in the 'return_val' field and printed as 14299 '/i'. 14300 14301'RTL_CONST_OR_PURE_CALL_P (X)' 14302 In a 'call_insn', true if 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' 14303 is true. 14304 14305'RTL_LOOPING_CONST_OR_PURE_CALL_P (X)' 14306 In a 'call_insn' indicates that the insn represents a possibly 14307 infinite looping call to a const or pure function. Stored in the 14308 'call' field and printed as '/c'. Only true if one of 14309 'RTL_CONST_CALL_P' or 'RTL_PURE_CALL_P' is true. 14310 14311'INSN_ANNULLED_BRANCH_P (X)' 14312 In a 'jump_insn', 'call_insn', or 'insn' indicates that the branch 14313 is an annulling one. See the discussion under 'sequence' below. 14314 Stored in the 'unchanging' field and printed as '/u'. 14315 14316'INSN_DELETED_P (X)' 14317 In an 'insn', 'call_insn', 'jump_insn', 'code_label', 14318 'jump_table_data', 'barrier', or 'note', nonzero if the insn has 14319 been deleted. Stored in the 'volatil' field and printed as '/v'. 14320 14321'INSN_FROM_TARGET_P (X)' 14322 In an 'insn' or 'jump_insn' or 'call_insn' in a delay slot of a 14323 branch, indicates that the insn is from the target of the branch. 14324 If the branch insn has 'INSN_ANNULLED_BRANCH_P' set, this insn will 14325 only be executed if the branch is taken. For annulled branches 14326 with 'INSN_FROM_TARGET_P' clear, the insn will be executed only if 14327 the branch is not taken. When 'INSN_ANNULLED_BRANCH_P' is not set, 14328 this insn will always be executed. Stored in the 'in_struct' field 14329 and printed as '/s'. 14330 14331'LABEL_PRESERVE_P (X)' 14332 In a 'code_label' or 'note', indicates that the label is referenced 14333 by code or data not visible to the RTL of a given function. Labels 14334 referenced by a non-local goto will have this bit set. Stored in 14335 the 'in_struct' field and printed as '/s'. 14336 14337'LABEL_REF_NONLOCAL_P (X)' 14338 In 'label_ref' and 'reg_label' expressions, nonzero if this is a 14339 reference to a non-local label. Stored in the 'volatil' field and 14340 printed as '/v'. 14341 14342'MEM_KEEP_ALIAS_SET_P (X)' 14343 In 'mem' expressions, 1 if we should keep the alias set for this 14344 mem unchanged when we access a component. Set to 1, for example, 14345 when we are already in a non-addressable component of an aggregate. 14346 Stored in the 'jump' field and printed as '/j'. 14347 14348'MEM_VOLATILE_P (X)' 14349 In 'mem', 'asm_operands', and 'asm_input' expressions, nonzero for 14350 volatile memory references. Stored in the 'volatil' field and 14351 printed as '/v'. 14352 14353'MEM_NOTRAP_P (X)' 14354 In 'mem', nonzero for memory references that will not trap. Stored 14355 in the 'call' field and printed as '/c'. 14356 14357'MEM_POINTER (X)' 14358 Nonzero in a 'mem' if the memory reference holds a pointer. Stored 14359 in the 'frame_related' field and printed as '/f'. 14360 14361'REG_FUNCTION_VALUE_P (X)' 14362 Nonzero in a 'reg' if it is the place in which this function's 14363 value is going to be returned. (This happens only in a hard 14364 register.) Stored in the 'return_val' field and printed as '/i'. 14365 14366'REG_POINTER (X)' 14367 Nonzero in a 'reg' if the register holds a pointer. Stored in the 14368 'frame_related' field and printed as '/f'. 14369 14370'REG_USERVAR_P (X)' 14371 In a 'reg', nonzero if it corresponds to a variable present in the 14372 user's source code. Zero for temporaries generated internally by 14373 the compiler. Stored in the 'volatil' field and printed as '/v'. 14374 14375 The same hard register may be used also for collecting the values 14376 of functions called by this one, but 'REG_FUNCTION_VALUE_P' is zero 14377 in this kind of use. 14378 14379'RTX_FRAME_RELATED_P (X)' 14380 Nonzero in an 'insn', 'call_insn', 'jump_insn', 'barrier', or 'set' 14381 which is part of a function prologue and sets the stack pointer, 14382 sets the frame pointer, or saves a register. This flag should also 14383 be set on an instruction that sets up a temporary register to use 14384 in place of the frame pointer. Stored in the 'frame_related' field 14385 and printed as '/f'. 14386 14387 In particular, on RISC targets where there are limits on the sizes 14388 of immediate constants, it is sometimes impossible to reach the 14389 register save area directly from the stack pointer. In that case, 14390 a temporary register is used that is near enough to the register 14391 save area, and the Canonical Frame Address, i.e., DWARF2's logical 14392 frame pointer, register must (temporarily) be changed to be this 14393 temporary register. So, the instruction that sets this temporary 14394 register must be marked as 'RTX_FRAME_RELATED_P'. 14395 14396 If the marked instruction is overly complex (defined in terms of 14397 what 'dwarf2out_frame_debug_expr' can handle), you will also have 14398 to create a 'REG_FRAME_RELATED_EXPR' note and attach it to the 14399 instruction. This note should contain a simple expression of the 14400 computation performed by this instruction, i.e., one that 14401 'dwarf2out_frame_debug_expr' can handle. 14402 14403 This flag is required for exception handling support on targets 14404 with RTL prologues. 14405 14406'MEM_READONLY_P (X)' 14407 Nonzero in a 'mem', if the memory is statically allocated and 14408 read-only. 14409 14410 Read-only in this context means never modified during the lifetime 14411 of the program, not necessarily in ROM or in write-disabled pages. 14412 A common example of the later is a shared library's global offset 14413 table. This table is initialized by the runtime loader, so the 14414 memory is technically writable, but after control is transferred 14415 from the runtime loader to the application, this memory will never 14416 be subsequently modified. 14417 14418 Stored in the 'unchanging' field and printed as '/u'. 14419 14420'SCHED_GROUP_P (X)' 14421 During instruction scheduling, in an 'insn', 'call_insn', 14422 'jump_insn' or 'jump_table_data', indicates that the previous insn 14423 must be scheduled together with this insn. This is used to ensure 14424 that certain groups of instructions will not be split up by the 14425 instruction scheduling pass, for example, 'use' insns before a 14426 'call_insn' may not be separated from the 'call_insn'. Stored in 14427 the 'in_struct' field and printed as '/s'. 14428 14429'SET_IS_RETURN_P (X)' 14430 For a 'set', nonzero if it is for a return. Stored in the 'jump' 14431 field and printed as '/j'. 14432 14433'SIBLING_CALL_P (X)' 14434 For a 'call_insn', nonzero if the insn is a sibling call. Stored 14435 in the 'jump' field and printed as '/j'. 14436 14437'STRING_POOL_ADDRESS_P (X)' 14438 For a 'symbol_ref' expression, nonzero if it addresses this 14439 function's string constant pool. Stored in the 'frame_related' 14440 field and printed as '/f'. 14441 14442'SUBREG_PROMOTED_UNSIGNED_P (X)' 14443 Returns a value greater then zero for a 'subreg' that has 14444 'SUBREG_PROMOTED_VAR_P' nonzero if the object being referenced is 14445 kept zero-extended, zero if it is kept sign-extended, and less then 14446 zero if it is extended some other way via the 'ptr_extend' 14447 instruction. Stored in the 'unchanging' field and 'volatil' field, 14448 printed as '/u' and '/v'. This macro may only be used to get the 14449 value it may not be used to change the value. Use 14450 'SUBREG_PROMOTED_UNSIGNED_SET' to change the value. 14451 14452'SUBREG_PROMOTED_UNSIGNED_SET (X)' 14453 Set the 'unchanging' and 'volatil' fields in a 'subreg' to reflect 14454 zero, sign, or other extension. If 'volatil' is zero, then 14455 'unchanging' as nonzero means zero extension and as zero means sign 14456 extension. If 'volatil' is nonzero then some other type of 14457 extension was done via the 'ptr_extend' instruction. 14458 14459'SUBREG_PROMOTED_VAR_P (X)' 14460 Nonzero in a 'subreg' if it was made when accessing an object that 14461 was promoted to a wider mode in accord with the 'PROMOTED_MODE' 14462 machine description macro (*note Storage Layout::). In this case, 14463 the mode of the 'subreg' is the declared mode of the object and the 14464 mode of 'SUBREG_REG' is the mode of the register that holds the 14465 object. Promoted variables are always either sign- or 14466 zero-extended to the wider mode on every assignment. Stored in the 14467 'in_struct' field and printed as '/s'. 14468 14469'SYMBOL_REF_USED (X)' 14470 In a 'symbol_ref', indicates that X has been used. This is 14471 normally only used to ensure that X is only declared external once. 14472 Stored in the 'used' field. 14473 14474'SYMBOL_REF_WEAK (X)' 14475 In a 'symbol_ref', indicates that X has been declared weak. Stored 14476 in the 'return_val' field and printed as '/i'. 14477 14478'SYMBOL_REF_FLAG (X)' 14479 In a 'symbol_ref', this is used as a flag for machine-specific 14480 purposes. Stored in the 'volatil' field and printed as '/v'. 14481 14482 Most uses of 'SYMBOL_REF_FLAG' are historic and may be subsumed by 14483 'SYMBOL_REF_FLAGS'. Certainly use of 'SYMBOL_REF_FLAGS' is 14484 mandatory if the target requires more than one bit of storage. 14485 14486'PREFETCH_SCHEDULE_BARRIER_P (X)' 14487 In a 'prefetch', indicates that the prefetch is a scheduling 14488 barrier. No other INSNs will be moved over it. Stored in the 14489 'volatil' field and printed as '/v'. 14490 14491 These are the fields to which the above macros refer: 14492 14493'call' 14494 In a 'mem', 1 means that the memory reference will not trap. 14495 14496 In a 'call', 1 means that this pure or const call may possibly 14497 infinite loop. 14498 14499 In an RTL dump, this flag is represented as '/c'. 14500 14501'frame_related' 14502 In an 'insn' or 'set' expression, 1 means that it is part of a 14503 function prologue and sets the stack pointer, sets the frame 14504 pointer, saves a register, or sets up a temporary register to use 14505 in place of the frame pointer. 14506 14507 In 'reg' expressions, 1 means that the register holds a pointer. 14508 14509 In 'mem' expressions, 1 means that the memory reference holds a 14510 pointer. 14511 14512 In 'symbol_ref' expressions, 1 means that the reference addresses 14513 this function's string constant pool. 14514 14515 In an RTL dump, this flag is represented as '/f'. 14516 14517'in_struct' 14518 In 'reg' expressions, it is 1 if the register has its entire life 14519 contained within the test expression of some loop. 14520 14521 In 'subreg' expressions, 1 means that the 'subreg' is accessing an 14522 object that has had its mode promoted from a wider mode. 14523 14524 In 'label_ref' expressions, 1 means that the referenced label is 14525 outside the innermost loop containing the insn in which the 14526 'label_ref' was found. 14527 14528 In 'code_label' expressions, it is 1 if the label may never be 14529 deleted. This is used for labels which are the target of non-local 14530 gotos. Such a label that would have been deleted is replaced with 14531 a 'note' of type 'NOTE_INSN_DELETED_LABEL'. 14532 14533 In an 'insn' during dead-code elimination, 1 means that the insn is 14534 dead code. 14535 14536 In an 'insn' or 'jump_insn' during reorg for an insn in the delay 14537 slot of a branch, 1 means that this insn is from the target of the 14538 branch. 14539 14540 In an 'insn' during instruction scheduling, 1 means that this insn 14541 must be scheduled as part of a group together with the previous 14542 insn. 14543 14544 In an RTL dump, this flag is represented as '/s'. 14545 14546'return_val' 14547 In 'reg' expressions, 1 means the register contains the value to be 14548 returned by the current function. On machines that pass parameters 14549 in registers, the same register number may be used for parameters 14550 as well, but this flag is not set on such uses. 14551 14552 In 'symbol_ref' expressions, 1 means the referenced symbol is weak. 14553 14554 In 'call' expressions, 1 means the call is pure. 14555 14556 In an RTL dump, this flag is represented as '/i'. 14557 14558'jump' 14559 In a 'mem' expression, 1 means we should keep the alias set for 14560 this mem unchanged when we access a component. 14561 14562 In a 'set', 1 means it is for a return. 14563 14564 In a 'call_insn', 1 means it is a sibling call. 14565 14566 In an RTL dump, this flag is represented as '/j'. 14567 14568'unchanging' 14569 In 'reg' and 'mem' expressions, 1 means that the value of the 14570 expression never changes. 14571 14572 In 'subreg' expressions, it is 1 if the 'subreg' references an 14573 unsigned object whose mode has been promoted to a wider mode. 14574 14575 In an 'insn' or 'jump_insn' in the delay slot of a branch 14576 instruction, 1 means an annulling branch should be used. 14577 14578 In a 'symbol_ref' expression, 1 means that this symbol addresses 14579 something in the per-function constant pool. 14580 14581 In a 'call_insn' 1 means that this instruction is a call to a const 14582 function. 14583 14584 In an RTL dump, this flag is represented as '/u'. 14585 14586'used' 14587 This flag is used directly (without an access macro) at the end of 14588 RTL generation for a function, to count the number of times an 14589 expression appears in insns. Expressions that appear more than 14590 once are copied, according to the rules for shared structure (*note 14591 Sharing::). 14592 14593 For a 'reg', it is used directly (without an access macro) by the 14594 leaf register renumbering code to ensure that each register is only 14595 renumbered once. 14596 14597 In a 'symbol_ref', it indicates that an external declaration for 14598 the symbol has already been written. 14599 14600'volatil' 14601 In a 'mem', 'asm_operands', or 'asm_input' expression, it is 1 if 14602 the memory reference is volatile. Volatile memory references may 14603 not be deleted, reordered or combined. 14604 14605 In a 'symbol_ref' expression, it is used for machine-specific 14606 purposes. 14607 14608 In a 'reg' expression, it is 1 if the value is a user-level 14609 variable. 0 indicates an internal compiler temporary. 14610 14611 In an 'insn', 1 means the insn has been deleted. 14612 14613 In 'label_ref' and 'reg_label' expressions, 1 means a reference to 14614 a non-local label. 14615 14616 In 'prefetch' expressions, 1 means that the containing insn is a 14617 scheduling barrier. 14618 14619 In an RTL dump, this flag is represented as '/v'. 14620 14621 14622File: gccint.info, Node: Machine Modes, Next: Constants, Prev: Flags, Up: RTL 14623 1462413.6 Machine Modes 14625================== 14626 14627A machine mode describes a size of data object and the representation 14628used for it. In the C code, machine modes are represented by an 14629enumeration type, 'machine_mode', defined in 'machmode.def'. Each RTL 14630expression has room for a machine mode and so do certain kinds of tree 14631expressions (declarations and types, to be precise). 14632 14633 In debugging dumps and machine descriptions, the machine mode of an RTL 14634expression is written after the expression code with a colon to separate 14635them. The letters 'mode' which appear at the end of each machine mode 14636name are omitted. For example, '(reg:SI 38)' is a 'reg' expression with 14637machine mode 'SImode'. If the mode is 'VOIDmode', it is not written at 14638all. 14639 14640 Here is a table of machine modes. The term "byte" below refers to an 14641object of 'BITS_PER_UNIT' bits (*note Storage Layout::). 14642 14643'BImode' 14644 "Bit" mode represents a single bit, for predicate registers. 14645 14646'QImode' 14647 "Quarter-Integer" mode represents a single byte treated as an 14648 integer. 14649 14650'HImode' 14651 "Half-Integer" mode represents a two-byte integer. 14652 14653'PSImode' 14654 "Partial Single Integer" mode represents an integer which occupies 14655 four bytes but which doesn't really use all four. On some 14656 machines, this is the right mode to use for pointers. 14657 14658'SImode' 14659 "Single Integer" mode represents a four-byte integer. 14660 14661'PDImode' 14662 "Partial Double Integer" mode represents an integer which occupies 14663 eight bytes but which doesn't really use all eight. On some 14664 machines, this is the right mode to use for certain pointers. 14665 14666'DImode' 14667 "Double Integer" mode represents an eight-byte integer. 14668 14669'TImode' 14670 "Tetra Integer" (?) mode represents a sixteen-byte integer. 14671 14672'OImode' 14673 "Octa Integer" (?) mode represents a thirty-two-byte integer. 14674 14675'XImode' 14676 "Hexadeca Integer" (?) mode represents a sixty-four-byte integer. 14677 14678'QFmode' 14679 "Quarter-Floating" mode represents a quarter-precision (single 14680 byte) floating point number. 14681 14682'HFmode' 14683 "Half-Floating" mode represents a half-precision (two byte) 14684 floating point number. 14685 14686'TQFmode' 14687 "Three-Quarter-Floating" (?) mode represents a 14688 three-quarter-precision (three byte) floating point number. 14689 14690'SFmode' 14691 "Single Floating" mode represents a four byte floating point 14692 number. In the common case, of a processor with IEEE arithmetic 14693 and 8-bit bytes, this is a single-precision IEEE floating point 14694 number; it can also be used for double-precision (on processors 14695 with 16-bit bytes) and single-precision VAX and IBM types. 14696 14697'DFmode' 14698 "Double Floating" mode represents an eight byte floating point 14699 number. In the common case, of a processor with IEEE arithmetic 14700 and 8-bit bytes, this is a double-precision IEEE floating point 14701 number. 14702 14703'XFmode' 14704 "Extended Floating" mode represents an IEEE extended floating point 14705 number. This mode only has 80 meaningful bits (ten bytes). Some 14706 processors require such numbers to be padded to twelve bytes, 14707 others to sixteen; this mode is used for either. 14708 14709'SDmode' 14710 "Single Decimal Floating" mode represents a four byte decimal 14711 floating point number (as distinct from conventional binary 14712 floating point). 14713 14714'DDmode' 14715 "Double Decimal Floating" mode represents an eight byte decimal 14716 floating point number. 14717 14718'TDmode' 14719 "Tetra Decimal Floating" mode represents a sixteen byte decimal 14720 floating point number all 128 of whose bits are meaningful. 14721 14722'TFmode' 14723 "Tetra Floating" mode represents a sixteen byte floating point 14724 number all 128 of whose bits are meaningful. One common use is the 14725 IEEE quad-precision format. 14726 14727'QQmode' 14728 "Quarter-Fractional" mode represents a single byte treated as a 14729 signed fractional number. The default format is "s.7". 14730 14731'HQmode' 14732 "Half-Fractional" mode represents a two-byte signed fractional 14733 number. The default format is "s.15". 14734 14735'SQmode' 14736 "Single Fractional" mode represents a four-byte signed fractional 14737 number. The default format is "s.31". 14738 14739'DQmode' 14740 "Double Fractional" mode represents an eight-byte signed fractional 14741 number. The default format is "s.63". 14742 14743'TQmode' 14744 "Tetra Fractional" mode represents a sixteen-byte signed fractional 14745 number. The default format is "s.127". 14746 14747'UQQmode' 14748 "Unsigned Quarter-Fractional" mode represents a single byte treated 14749 as an unsigned fractional number. The default format is ".8". 14750 14751'UHQmode' 14752 "Unsigned Half-Fractional" mode represents a two-byte unsigned 14753 fractional number. The default format is ".16". 14754 14755'USQmode' 14756 "Unsigned Single Fractional" mode represents a four-byte unsigned 14757 fractional number. The default format is ".32". 14758 14759'UDQmode' 14760 "Unsigned Double Fractional" mode represents an eight-byte unsigned 14761 fractional number. The default format is ".64". 14762 14763'UTQmode' 14764 "Unsigned Tetra Fractional" mode represents a sixteen-byte unsigned 14765 fractional number. The default format is ".128". 14766 14767'HAmode' 14768 "Half-Accumulator" mode represents a two-byte signed accumulator. 14769 The default format is "s8.7". 14770 14771'SAmode' 14772 "Single Accumulator" mode represents a four-byte signed 14773 accumulator. The default format is "s16.15". 14774 14775'DAmode' 14776 "Double Accumulator" mode represents an eight-byte signed 14777 accumulator. The default format is "s32.31". 14778 14779'TAmode' 14780 "Tetra Accumulator" mode represents a sixteen-byte signed 14781 accumulator. The default format is "s64.63". 14782 14783'UHAmode' 14784 "Unsigned Half-Accumulator" mode represents a two-byte unsigned 14785 accumulator. The default format is "8.8". 14786 14787'USAmode' 14788 "Unsigned Single Accumulator" mode represents a four-byte unsigned 14789 accumulator. The default format is "16.16". 14790 14791'UDAmode' 14792 "Unsigned Double Accumulator" mode represents an eight-byte 14793 unsigned accumulator. The default format is "32.32". 14794 14795'UTAmode' 14796 "Unsigned Tetra Accumulator" mode represents a sixteen-byte 14797 unsigned accumulator. The default format is "64.64". 14798 14799'CCmode' 14800 "Condition Code" mode represents the value of a condition code, 14801 which is a machine-specific set of bits used to represent the 14802 result of a comparison operation. Other machine-specific modes may 14803 also be used for the condition code. These modes are not used on 14804 machines that use 'cc0' (*note Condition Code::). 14805 14806'BLKmode' 14807 "Block" mode represents values that are aggregates to which none of 14808 the other modes apply. In RTL, only memory references can have 14809 this mode, and only if they appear in string-move or vector 14810 instructions. On machines which have no such instructions, 14811 'BLKmode' will not appear in RTL. 14812 14813'VOIDmode' 14814 Void mode means the absence of a mode or an unspecified mode. For 14815 example, RTL expressions of code 'const_int' have mode 'VOIDmode' 14816 because they can be taken to have whatever mode the context 14817 requires. In debugging dumps of RTL, 'VOIDmode' is expressed by 14818 the absence of any mode. 14819 14820'QCmode, HCmode, SCmode, DCmode, XCmode, TCmode' 14821 These modes stand for a complex number represented as a pair of 14822 floating point values. The floating point values are in 'QFmode', 14823 'HFmode', 'SFmode', 'DFmode', 'XFmode', and 'TFmode', respectively. 14824 14825'CQImode, CHImode, CSImode, CDImode, CTImode, COImode' 14826 These modes stand for a complex number represented as a pair of 14827 integer values. The integer values are in 'QImode', 'HImode', 14828 'SImode', 'DImode', 'TImode', and 'OImode', respectively. 14829 14830'BND32mode BND64mode' 14831 These modes stand for bounds for pointer of 32 and 64 bit size 14832 respectively. Mode size is double pointer mode size. 14833 14834 The machine description defines 'Pmode' as a C macro which expands into 14835the machine mode used for addresses. Normally this is the mode whose 14836size is 'BITS_PER_WORD', 'SImode' on 32-bit machines. 14837 14838 The only modes which a machine description must support are 'QImode', 14839and the modes corresponding to 'BITS_PER_WORD', 'FLOAT_TYPE_SIZE' and 14840'DOUBLE_TYPE_SIZE'. The compiler will attempt to use 'DImode' for 148418-byte structures and unions, but this can be prevented by overriding 14842the definition of 'MAX_FIXED_MODE_SIZE'. Alternatively, you can have 14843the compiler use 'TImode' for 16-byte structures and unions. Likewise, 14844you can arrange for the C type 'short int' to avoid using 'HImode'. 14845 14846 Very few explicit references to machine modes remain in the compiler 14847and these few references will soon be removed. Instead, the machine 14848modes are divided into mode classes. These are represented by the 14849enumeration type 'enum mode_class' defined in 'machmode.h'. The 14850possible mode classes are: 14851 14852'MODE_INT' 14853 Integer modes. By default these are 'BImode', 'QImode', 'HImode', 14854 'SImode', 'DImode', 'TImode', and 'OImode'. 14855 14856'MODE_PARTIAL_INT' 14857 The "partial integer" modes, 'PQImode', 'PHImode', 'PSImode' and 14858 'PDImode'. 14859 14860'MODE_FLOAT' 14861 Floating point modes. By default these are 'QFmode', 'HFmode', 14862 'TQFmode', 'SFmode', 'DFmode', 'XFmode' and 'TFmode'. 14863 14864'MODE_DECIMAL_FLOAT' 14865 Decimal floating point modes. By default these are 'SDmode', 14866 'DDmode' and 'TDmode'. 14867 14868'MODE_FRACT' 14869 Signed fractional modes. By default these are 'QQmode', 'HQmode', 14870 'SQmode', 'DQmode' and 'TQmode'. 14871 14872'MODE_UFRACT' 14873 Unsigned fractional modes. By default these are 'UQQmode', 14874 'UHQmode', 'USQmode', 'UDQmode' and 'UTQmode'. 14875 14876'MODE_ACCUM' 14877 Signed accumulator modes. By default these are 'HAmode', 'SAmode', 14878 'DAmode' and 'TAmode'. 14879 14880'MODE_UACCUM' 14881 Unsigned accumulator modes. By default these are 'UHAmode', 14882 'USAmode', 'UDAmode' and 'UTAmode'. 14883 14884'MODE_COMPLEX_INT' 14885 Complex integer modes. (These are not currently implemented). 14886 14887'MODE_COMPLEX_FLOAT' 14888 Complex floating point modes. By default these are 'QCmode', 14889 'HCmode', 'SCmode', 'DCmode', 'XCmode', and 'TCmode'. 14890 14891'MODE_FUNCTION' 14892 Algol or Pascal function variables including a static chain. 14893 (These are not currently implemented). 14894 14895'MODE_CC' 14896 Modes representing condition code values. These are 'CCmode' plus 14897 any 'CC_MODE' modes listed in the 'MACHINE-modes.def'. *Note Jump 14898 Patterns::, also see *note Condition Code::. 14899 14900'MODE_POINTER_BOUNDS' 14901 Pointer bounds modes. Used to represent values of pointer bounds 14902 type. Operations in these modes may be executed as NOPs depending 14903 on hardware features and environment setup. 14904 14905'MODE_RANDOM' 14906 This is a catchall mode class for modes which don't fit into the 14907 above classes. Currently 'VOIDmode' and 'BLKmode' are in 14908 'MODE_RANDOM'. 14909 14910 Here are some C macros that relate to machine modes: 14911 14912'GET_MODE (X)' 14913 Returns the machine mode of the RTX X. 14914 14915'PUT_MODE (X, NEWMODE)' 14916 Alters the machine mode of the RTX X to be NEWMODE. 14917 14918'NUM_MACHINE_MODES' 14919 Stands for the number of machine modes available on the target 14920 machine. This is one greater than the largest numeric value of any 14921 machine mode. 14922 14923'GET_MODE_NAME (M)' 14924 Returns the name of mode M as a string. 14925 14926'GET_MODE_CLASS (M)' 14927 Returns the mode class of mode M. 14928 14929'GET_MODE_WIDER_MODE (M)' 14930 Returns the next wider natural mode. For example, the expression 14931 'GET_MODE_WIDER_MODE (QImode)' returns 'HImode'. 14932 14933'GET_MODE_SIZE (M)' 14934 Returns the size in bytes of a datum of mode M. 14935 14936'GET_MODE_BITSIZE (M)' 14937 Returns the size in bits of a datum of mode M. 14938 14939'GET_MODE_IBIT (M)' 14940 Returns the number of integral bits of a datum of fixed-point mode 14941 M. 14942 14943'GET_MODE_FBIT (M)' 14944 Returns the number of fractional bits of a datum of fixed-point 14945 mode M. 14946 14947'GET_MODE_MASK (M)' 14948 Returns a bitmask containing 1 for all bits in a word that fit 14949 within mode M. This macro can only be used for modes whose bitsize 14950 is less than or equal to 'HOST_BITS_PER_INT'. 14951 14952'GET_MODE_ALIGNMENT (M)' 14953 Return the required alignment, in bits, for an object of mode M. 14954 14955'GET_MODE_UNIT_SIZE (M)' 14956 Returns the size in bytes of the subunits of a datum of mode M. 14957 This is the same as 'GET_MODE_SIZE' except in the case of complex 14958 modes. For them, the unit size is the size of the real or 14959 imaginary part. 14960 14961'GET_MODE_NUNITS (M)' 14962 Returns the number of units contained in a mode, i.e., 14963 'GET_MODE_SIZE' divided by 'GET_MODE_UNIT_SIZE'. 14964 14965'GET_CLASS_NARROWEST_MODE (C)' 14966 Returns the narrowest mode in mode class C. 14967 14968 The following 3 variables are defined on every target. They can be 14969used to allocate buffers that are guaranteed to be large enough to hold 14970any value that can be represented on the target. The first two can be 14971overridden by defining them in the target's mode.def file, however, the 14972value must be a constant that can determined very early in the 14973compilation process. The third symbol cannot be overridden. 14974 14975'BITS_PER_UNIT' 14976 The number of bits in an addressable storage unit (byte). If you 14977 do not define this, the default is 8. 14978 14979'MAX_BITSIZE_MODE_ANY_INT' 14980 The maximum bitsize of any mode that is used in integer math. This 14981 should be overridden by the target if it uses large integers as 14982 containers for larger vectors but otherwise never uses the contents 14983 to compute integer values. 14984 14985'MAX_BITSIZE_MODE_ANY_MODE' 14986 The bitsize of the largest mode on the target. 14987 14988 The global variables 'byte_mode' and 'word_mode' contain modes whose 14989classes are 'MODE_INT' and whose bitsizes are either 'BITS_PER_UNIT' or 14990'BITS_PER_WORD', respectively. On 32-bit machines, these are 'QImode' 14991and 'SImode', respectively. 14992 14993 14994File: gccint.info, Node: Constants, Next: Regs and Memory, Prev: Machine Modes, Up: RTL 14995 1499613.7 Constant Expression Types 14997============================== 14998 14999The simplest RTL expressions are those that represent constant values. 15000 15001'(const_int I)' 15002 This type of expression represents the integer value I. I is 15003 customarily accessed with the macro 'INTVAL' as in 'INTVAL (EXP)', 15004 which is equivalent to 'XWINT (EXP, 0)'. 15005 15006 Constants generated for modes with fewer bits than in 15007 'HOST_WIDE_INT' must be sign extended to full width (e.g., with 15008 'gen_int_mode'). For constants for modes with more bits than in 15009 'HOST_WIDE_INT' the implied high order bits of that constant are 15010 copies of the top bit. Note however that values are neither 15011 inherently signed nor inherently unsigned; where necessary, 15012 signedness is determined by the rtl operation instead. 15013 15014 There is only one expression object for the integer value zero; it 15015 is the value of the variable 'const0_rtx'. Likewise, the only 15016 expression for integer value one is found in 'const1_rtx', the only 15017 expression for integer value two is found in 'const2_rtx', and the 15018 only expression for integer value negative one is found in 15019 'constm1_rtx'. Any attempt to create an expression of code 15020 'const_int' and value zero, one, two or negative one will return 15021 'const0_rtx', 'const1_rtx', 'const2_rtx' or 'constm1_rtx' as 15022 appropriate. 15023 15024 Similarly, there is only one object for the integer whose value is 15025 'STORE_FLAG_VALUE'. It is found in 'const_true_rtx'. If 15026 'STORE_FLAG_VALUE' is one, 'const_true_rtx' and 'const1_rtx' will 15027 point to the same object. If 'STORE_FLAG_VALUE' is -1, 15028 'const_true_rtx' and 'constm1_rtx' will point to the same object. 15029 15030'(const_double:M I0 I1 ...)' 15031 This represents either a floating-point constant of mode M or (on 15032 older ports that do not define 'TARGET_SUPPORTS_WIDE_INT') an 15033 integer constant too large to fit into 'HOST_BITS_PER_WIDE_INT' 15034 bits but small enough to fit within twice that number of bits. In 15035 the latter case, M will be 'VOIDmode'. For integral values 15036 constants for modes with more bits than twice the number in 15037 'HOST_WIDE_INT' the implied high order bits of that constant are 15038 copies of the top bit of 'CONST_DOUBLE_HIGH'. Note however that 15039 integral values are neither inherently signed nor inherently 15040 unsigned; where necessary, signedness is determined by the rtl 15041 operation instead. 15042 15043 On more modern ports, 'CONST_DOUBLE' only represents floating point 15044 values. New ports define 'TARGET_SUPPORTS_WIDE_INT' to make this 15045 designation. 15046 15047 If M is 'VOIDmode', the bits of the value are stored in I0 and I1. 15048 I0 is customarily accessed with the macro 'CONST_DOUBLE_LOW' and I1 15049 with 'CONST_DOUBLE_HIGH'. 15050 15051 If the constant is floating point (regardless of its precision), 15052 then the number of integers used to store the value depends on the 15053 size of 'REAL_VALUE_TYPE' (*note Floating Point::). The integers 15054 represent a floating point number, but not precisely in the target 15055 machine's or host machine's floating point format. To convert them 15056 to the precise bit pattern used by the target machine, use the 15057 macro 'REAL_VALUE_TO_TARGET_DOUBLE' and friends (*note Data 15058 Output::). 15059 15060'(const_wide_int:M NUNITS ELT0 ...)' 15061 This contains an array of 'HOST_WIDE_INT's that is large enough to 15062 hold any constant that can be represented on the target. This form 15063 of rtl is only used on targets that define 15064 'TARGET_SUPPORTS_WIDE_INT' to be nonzero and then 'CONST_DOUBLE's 15065 are only used to hold floating-point values. If the target leaves 15066 'TARGET_SUPPORTS_WIDE_INT' defined as 0, 'CONST_WIDE_INT's are not 15067 used and 'CONST_DOUBLE's are as they were before. 15068 15069 The values are stored in a compressed format. The higher-order 0s 15070 or -1s are not represented if they are just the logical sign 15071 extension of the number that is represented. 15072 15073'CONST_WIDE_INT_VEC (CODE)' 15074 Returns the entire array of 'HOST_WIDE_INT's that are used to store 15075 the value. This macro should be rarely used. 15076 15077'CONST_WIDE_INT_NUNITS (CODE)' 15078 The number of 'HOST_WIDE_INT's used to represent the number. Note 15079 that this generally is smaller than the number of 'HOST_WIDE_INT's 15080 implied by the mode size. 15081 15082'CONST_WIDE_INT_NUNITS (CODE,I)' 15083 Returns the 'i'th element of the array. Element 0 is contains the 15084 low order bits of the constant. 15085 15086'(const_fixed:M ...)' 15087 Represents a fixed-point constant of mode M. The operand is a data 15088 structure of type 'struct fixed_value' and is accessed with the 15089 macro 'CONST_FIXED_VALUE'. The high part of data is accessed with 15090 'CONST_FIXED_VALUE_HIGH'; the low part is accessed with 15091 'CONST_FIXED_VALUE_LOW'. 15092 15093'(const_vector:M [X0 X1 ...])' 15094 Represents a vector constant. The square brackets stand for the 15095 vector containing the constant elements. X0, X1 and so on are the 15096 'const_int', 'const_double' or 'const_fixed' elements. 15097 15098 The number of units in a 'const_vector' is obtained with the macro 15099 'CONST_VECTOR_NUNITS' as in 'CONST_VECTOR_NUNITS (V)'. 15100 15101 Individual elements in a vector constant are accessed with the 15102 macro 'CONST_VECTOR_ELT' as in 'CONST_VECTOR_ELT (V, N)' where V is 15103 the vector constant and N is the element desired. 15104 15105'(const_string STR)' 15106 Represents a constant string with value STR. Currently this is 15107 used only for insn attributes (*note Insn Attributes::) since 15108 constant strings in C are placed in memory. 15109 15110'(symbol_ref:MODE SYMBOL)' 15111 Represents the value of an assembler label for data. SYMBOL is a 15112 string that describes the name of the assembler label. If it 15113 starts with a '*', the label is the rest of SYMBOL not including 15114 the '*'. Otherwise, the label is SYMBOL, usually prefixed with 15115 '_'. 15116 15117 The 'symbol_ref' contains a mode, which is usually 'Pmode'. 15118 Usually that is the only mode for which a symbol is directly valid. 15119 15120'(label_ref:MODE LABEL)' 15121 Represents the value of an assembler label for code. It contains 15122 one operand, an expression, which must be a 'code_label' or a 15123 'note' of type 'NOTE_INSN_DELETED_LABEL' that appears in the 15124 instruction sequence to identify the place where the label should 15125 go. 15126 15127 The reason for using a distinct expression type for code label 15128 references is so that jump optimization can distinguish them. 15129 15130 The 'label_ref' contains a mode, which is usually 'Pmode'. Usually 15131 that is the only mode for which a label is directly valid. 15132 15133'(const:M EXP)' 15134 Represents a constant that is the result of an assembly-time 15135 arithmetic computation. The operand, EXP, is an expression that 15136 contains only constants ('const_int', 'symbol_ref' and 'label_ref' 15137 expressions) combined with 'plus' and 'minus'. However, not all 15138 combinations are valid, since the assembler cannot do arbitrary 15139 arithmetic on relocatable symbols. 15140 15141 M should be 'Pmode'. 15142 15143'(high:M EXP)' 15144 Represents the high-order bits of EXP, usually a 'symbol_ref'. The 15145 number of bits is machine-dependent and is normally the number of 15146 bits specified in an instruction that initializes the high order 15147 bits of a register. It is used with 'lo_sum' to represent the 15148 typical two-instruction sequence used in RISC machines to reference 15149 a global memory location. 15150 15151 M should be 'Pmode'. 15152 15153 The macro 'CONST0_RTX (MODE)' refers to an expression with value 0 in 15154mode MODE. If mode MODE is of mode class 'MODE_INT', it returns 15155'const0_rtx'. If mode MODE is of mode class 'MODE_FLOAT', it returns a 15156'CONST_DOUBLE' expression in mode MODE. Otherwise, it returns a 15157'CONST_VECTOR' expression in mode MODE. Similarly, the macro 15158'CONST1_RTX (MODE)' refers to an expression with value 1 in mode MODE 15159and similarly for 'CONST2_RTX'. The 'CONST1_RTX' and 'CONST2_RTX' 15160macros are undefined for vector modes. 15161 15162 15163File: gccint.info, Node: Regs and Memory, Next: Arithmetic, Prev: Constants, Up: RTL 15164 1516513.8 Registers and Memory 15166========================= 15167 15168Here are the RTL expression types for describing access to machine 15169registers and to main memory. 15170 15171'(reg:M N)' 15172 For small values of the integer N (those that are less than 15173 'FIRST_PSEUDO_REGISTER'), this stands for a reference to machine 15174 register number N: a "hard register". For larger values of N, it 15175 stands for a temporary value or "pseudo register". The compiler's 15176 strategy is to generate code assuming an unlimited number of such 15177 pseudo registers, and later convert them into hard registers or 15178 into memory references. 15179 15180 M is the machine mode of the reference. It is necessary because 15181 machines can generally refer to each register in more than one 15182 mode. For example, a register may contain a full word but there 15183 may be instructions to refer to it as a half word or as a single 15184 byte, as well as instructions to refer to it as a floating point 15185 number of various precisions. 15186 15187 Even for a register that the machine can access in only one mode, 15188 the mode must always be specified. 15189 15190 The symbol 'FIRST_PSEUDO_REGISTER' is defined by the machine 15191 description, since the number of hard registers on the machine is 15192 an invariant characteristic of the machine. Note, however, that 15193 not all of the machine registers must be general registers. All 15194 the machine registers that can be used for storage of data are 15195 given hard register numbers, even those that can be used only in 15196 certain instructions or can hold only certain types of data. 15197 15198 A hard register may be accessed in various modes throughout one 15199 function, but each pseudo register is given a natural mode and is 15200 accessed only in that mode. When it is necessary to describe an 15201 access to a pseudo register using a nonnatural mode, a 'subreg' 15202 expression is used. 15203 15204 A 'reg' expression with a machine mode that specifies more than one 15205 word of data may actually stand for several consecutive registers. 15206 If in addition the register number specifies a hardware register, 15207 then it actually represents several consecutive hardware registers 15208 starting with the specified one. 15209 15210 Each pseudo register number used in a function's RTL code is 15211 represented by a unique 'reg' expression. 15212 15213 Some pseudo register numbers, those within the range of 15214 'FIRST_VIRTUAL_REGISTER' to 'LAST_VIRTUAL_REGISTER' only appear 15215 during the RTL generation phase and are eliminated before the 15216 optimization phases. These represent locations in the stack frame 15217 that cannot be determined until RTL generation for the function has 15218 been completed. The following virtual register numbers are 15219 defined: 15220 15221 'VIRTUAL_INCOMING_ARGS_REGNUM' 15222 This points to the first word of the incoming arguments passed 15223 on the stack. Normally these arguments are placed there by 15224 the caller, but the callee may have pushed some arguments that 15225 were previously passed in registers. 15226 15227 When RTL generation is complete, this virtual register is 15228 replaced by the sum of the register given by 15229 'ARG_POINTER_REGNUM' and the value of 'FIRST_PARM_OFFSET'. 15230 15231 'VIRTUAL_STACK_VARS_REGNUM' 15232 If 'FRAME_GROWS_DOWNWARD' is defined to a nonzero value, this 15233 points to immediately above the first variable on the stack. 15234 Otherwise, it points to the first variable on the stack. 15235 15236 'VIRTUAL_STACK_VARS_REGNUM' is replaced with the sum of the 15237 register given by 'FRAME_POINTER_REGNUM' and the value 15238 'STARTING_FRAME_OFFSET'. 15239 15240 'VIRTUAL_STACK_DYNAMIC_REGNUM' 15241 This points to the location of dynamically allocated memory on 15242 the stack immediately after the stack pointer has been 15243 adjusted by the amount of memory desired. 15244 15245 This virtual register is replaced by the sum of the register 15246 given by 'STACK_POINTER_REGNUM' and the value 15247 'STACK_DYNAMIC_OFFSET'. 15248 15249 'VIRTUAL_OUTGOING_ARGS_REGNUM' 15250 This points to the location in the stack at which outgoing 15251 arguments should be written when the stack is pre-pushed 15252 (arguments pushed using push insns should always use 15253 'STACK_POINTER_REGNUM'). 15254 15255 This virtual register is replaced by the sum of the register 15256 given by 'STACK_POINTER_REGNUM' and the value 15257 'STACK_POINTER_OFFSET'. 15258 15259'(subreg:M1 REG:M2 BYTENUM)' 15260 15261 'subreg' expressions are used to refer to a register in a machine 15262 mode other than its natural one, or to refer to one register of a 15263 multi-part 'reg' that actually refers to several registers. 15264 15265 Each pseudo register has a natural mode. If it is necessary to 15266 operate on it in a different mode, the register must be enclosed in 15267 a 'subreg'. 15268 15269 There are currently three supported types for the first operand of 15270 a 'subreg': 15271 * pseudo registers This is the most common case. Most 'subreg's 15272 have pseudo 'reg's as their first operand. 15273 15274 * mem 'subreg's of 'mem' were common in earlier versions of GCC 15275 and are still supported. During the reload pass these are 15276 replaced by plain 'mem's. On machines that do not do 15277 instruction scheduling, use of 'subreg's of 'mem' are still 15278 used, but this is no longer recommended. Such 'subreg's are 15279 considered to be 'register_operand's rather than 15280 'memory_operand's before and during reload. Because of this, 15281 the scheduling passes cannot properly schedule instructions 15282 with 'subreg's of 'mem', so for machines that do scheduling, 15283 'subreg's of 'mem' should never be used. To support this, the 15284 combine and recog passes have explicit code to inhibit the 15285 creation of 'subreg's of 'mem' when 'INSN_SCHEDULING' is 15286 defined. 15287 15288 The use of 'subreg's of 'mem' after the reload pass is an area 15289 that is not well understood and should be avoided. There is 15290 still some code in the compiler to support this, but this code 15291 has possibly rotted. This use of 'subreg's is discouraged and 15292 will most likely not be supported in the future. 15293 15294 * hard registers It is seldom necessary to wrap hard registers 15295 in 'subreg's; such registers would normally reduce to a single 15296 'reg' rtx. This use of 'subreg's is discouraged and may not 15297 be supported in the future. 15298 15299 'subreg's of 'subreg's are not supported. Using 15300 'simplify_gen_subreg' is the recommended way to avoid this problem. 15301 15302 'subreg's come in two distinct flavors, each having its own usage 15303 and rules: 15304 15305 Paradoxical subregs 15306 When M1 is strictly wider than M2, the 'subreg' expression is 15307 called "paradoxical". The canonical test for this class of 15308 'subreg' is: 15309 15310 GET_MODE_SIZE (M1) > GET_MODE_SIZE (M2) 15311 15312 Paradoxical 'subreg's can be used as both lvalues and rvalues. 15313 When used as an lvalue, the low-order bits of the source value 15314 are stored in REG and the high-order bits are discarded. When 15315 used as an rvalue, the low-order bits of the 'subreg' are 15316 taken from REG while the high-order bits may or may not be 15317 defined. 15318 15319 The high-order bits of rvalues are in the following 15320 circumstances: 15321 15322 * 'subreg's of 'mem' When M2 is smaller than a word, the 15323 macro 'LOAD_EXTEND_OP', can control how the high-order 15324 bits are defined. 15325 15326 * 'subreg' of 'reg's The upper bits are defined when 15327 'SUBREG_PROMOTED_VAR_P' is true. 15328 'SUBREG_PROMOTED_UNSIGNED_P' describes what the upper 15329 bits hold. Such subregs usually represent local 15330 variables, register variables and parameter pseudo 15331 variables that have been promoted to a wider mode. 15332 15333 BYTENUM is always zero for a paradoxical 'subreg', even on 15334 big-endian targets. 15335 15336 For example, the paradoxical 'subreg': 15337 15338 (set (subreg:SI (reg:HI X) 0) Y) 15339 15340 stores the lower 2 bytes of Y in X and discards the upper 2 15341 bytes. A subsequent: 15342 15343 (set Z (subreg:SI (reg:HI X) 0)) 15344 15345 would set the lower two bytes of Z to Y and set the upper two 15346 bytes to an unknown value assuming 'SUBREG_PROMOTED_VAR_P' is 15347 false. 15348 15349 Normal subregs 15350 When M1 is at least as narrow as M2 the 'subreg' expression is 15351 called "normal". 15352 15353 Normal 'subreg's restrict consideration to certain bits of 15354 REG. There are two cases. If M1 is smaller than a word, the 15355 'subreg' refers to the least-significant part (or "lowpart") 15356 of one word of REG. If M1 is word-sized or greater, the 15357 'subreg' refers to one or more complete words. 15358 15359 When used as an lvalue, 'subreg' is a word-based accessor. 15360 Storing to a 'subreg' modifies all the words of REG that 15361 overlap the 'subreg', but it leaves the other words of REG 15362 alone. 15363 15364 When storing to a normal 'subreg' that is smaller than a word, 15365 the other bits of the referenced word are usually left in an 15366 undefined state. This laxity makes it easier to generate 15367 efficient code for such instructions. To represent an 15368 instruction that preserves all the bits outside of those in 15369 the 'subreg', use 'strict_low_part' or 'zero_extract' around 15370 the 'subreg'. 15371 15372 BYTENUM must identify the offset of the first byte of the 15373 'subreg' from the start of REG, assuming that REG is laid out 15374 in memory order. The memory order of bytes is defined by two 15375 target macros, 'WORDS_BIG_ENDIAN' and 'BYTES_BIG_ENDIAN': 15376 15377 * 'WORDS_BIG_ENDIAN', if set to 1, says that byte number 15378 zero is part of the most significant word; otherwise, it 15379 is part of the least significant word. 15380 15381 * 'BYTES_BIG_ENDIAN', if set to 1, says that byte number 15382 zero is the most significant byte within a word; 15383 otherwise, it is the least significant byte within a 15384 word. 15385 15386 On a few targets, 'FLOAT_WORDS_BIG_ENDIAN' disagrees with 15387 'WORDS_BIG_ENDIAN'. However, most parts of the compiler treat 15388 floating point values as if they had the same endianness as 15389 integer values. This works because they handle them solely as 15390 a collection of integer values, with no particular numerical 15391 value. Only real.c and the runtime libraries care about 15392 'FLOAT_WORDS_BIG_ENDIAN'. 15393 15394 Thus, 15395 15396 (subreg:HI (reg:SI X) 2) 15397 15398 on a 'BYTES_BIG_ENDIAN', 'UNITS_PER_WORD == 4' target is the 15399 same as 15400 15401 (subreg:HI (reg:SI X) 0) 15402 15403 on a little-endian, 'UNITS_PER_WORD == 4' target. Both 15404 'subreg's access the lower two bytes of register X. 15405 15406 A 'MODE_PARTIAL_INT' mode behaves as if it were as wide as the 15407 corresponding 'MODE_INT' mode, except that it has an unknown number 15408 of undefined bits. For example: 15409 15410 (subreg:PSI (reg:SI 0) 0) 15411 15412 accesses the whole of '(reg:SI 0)', but the exact relationship 15413 between the 'PSImode' value and the 'SImode' value is not defined. 15414 If we assume 'UNITS_PER_WORD <= 4', then the following two 15415 'subreg's: 15416 15417 (subreg:PSI (reg:DI 0) 0) 15418 (subreg:PSI (reg:DI 0) 4) 15419 15420 represent independent 4-byte accesses to the two halves of '(reg:DI 15421 0)'. Both 'subreg's have an unknown number of undefined bits. 15422 15423 If 'UNITS_PER_WORD <= 2' then these two 'subreg's: 15424 15425 (subreg:HI (reg:PSI 0) 0) 15426 (subreg:HI (reg:PSI 0) 2) 15427 15428 represent independent 2-byte accesses that together span the whole 15429 of '(reg:PSI 0)'. Storing to the first 'subreg' does not affect 15430 the value of the second, and vice versa. '(reg:PSI 0)' has an 15431 unknown number of undefined bits, so the assignment: 15432 15433 (set (subreg:HI (reg:PSI 0) 0) (reg:HI 4)) 15434 15435 does not guarantee that '(subreg:HI (reg:PSI 0) 0)' has the value 15436 '(reg:HI 4)'. 15437 15438 The rules above apply to both pseudo REGs and hard REGs. If the 15439 semantics are not correct for particular combinations of M1, M2 and 15440 hard REG, the target-specific code must ensure that those 15441 combinations are never used. For example: 15442 15443 CANNOT_CHANGE_MODE_CLASS (M2, M1, CLASS) 15444 15445 must be true for every class CLASS that includes REG. 15446 15447 The first operand of a 'subreg' expression is customarily accessed 15448 with the 'SUBREG_REG' macro and the second operand is customarily 15449 accessed with the 'SUBREG_BYTE' macro. 15450 15451 It has been several years since a platform in which 15452 'BYTES_BIG_ENDIAN' not equal to 'WORDS_BIG_ENDIAN' has been tested. 15453 Anyone wishing to support such a platform in the future may be 15454 confronted with code rot. 15455 15456'(scratch:M)' 15457 This represents a scratch register that will be required for the 15458 execution of a single instruction and not used subsequently. It is 15459 converted into a 'reg' by either the local register allocator or 15460 the reload pass. 15461 15462 'scratch' is usually present inside a 'clobber' operation (*note 15463 Side Effects::). 15464 15465'(cc0)' 15466 This refers to the machine's condition code register. It has no 15467 operands and may not have a machine mode. There are two ways to 15468 use it: 15469 15470 * To stand for a complete set of condition code flags. This is 15471 best on most machines, where each comparison sets the entire 15472 series of flags. 15473 15474 With this technique, '(cc0)' may be validly used in only two 15475 contexts: as the destination of an assignment (in test and 15476 compare instructions) and in comparison operators comparing 15477 against zero ('const_int' with value zero; that is to say, 15478 'const0_rtx'). 15479 15480 * To stand for a single flag that is the result of a single 15481 condition. This is useful on machines that have only a single 15482 flag bit, and in which comparison instructions must specify 15483 the condition to test. 15484 15485 With this technique, '(cc0)' may be validly used in only two 15486 contexts: as the destination of an assignment (in test and 15487 compare instructions) where the source is a comparison 15488 operator, and as the first operand of 'if_then_else' (in a 15489 conditional branch). 15490 15491 There is only one expression object of code 'cc0'; it is the value 15492 of the variable 'cc0_rtx'. Any attempt to create an expression of 15493 code 'cc0' will return 'cc0_rtx'. 15494 15495 Instructions can set the condition code implicitly. On many 15496 machines, nearly all instructions set the condition code based on 15497 the value that they compute or store. It is not necessary to 15498 record these actions explicitly in the RTL because the machine 15499 description includes a prescription for recognizing the 15500 instructions that do so (by means of the macro 'NOTICE_UPDATE_CC'). 15501 *Note Condition Code::. Only instructions whose sole purpose is to 15502 set the condition code, and instructions that use the condition 15503 code, need mention '(cc0)'. 15504 15505 On some machines, the condition code register is given a register 15506 number and a 'reg' is used instead of '(cc0)'. This is usually the 15507 preferable approach if only a small subset of instructions modify 15508 the condition code. Other machines store condition codes in 15509 general registers; in such cases a pseudo register should be used. 15510 15511 Some machines, such as the SPARC and RS/6000, have two sets of 15512 arithmetic instructions, one that sets and one that does not set 15513 the condition code. This is best handled by normally generating 15514 the instruction that does not set the condition code, and making a 15515 pattern that both performs the arithmetic and sets the condition 15516 code register (which would not be '(cc0)' in this case). For 15517 examples, search for 'addcc' and 'andcc' in 'sparc.md'. 15518 15519'(pc)' 15520 This represents the machine's program counter. It has no operands 15521 and may not have a machine mode. '(pc)' may be validly used only 15522 in certain specific contexts in jump instructions. 15523 15524 There is only one expression object of code 'pc'; it is the value 15525 of the variable 'pc_rtx'. Any attempt to create an expression of 15526 code 'pc' will return 'pc_rtx'. 15527 15528 All instructions that do not jump alter the program counter 15529 implicitly by incrementing it, but there is no need to mention this 15530 in the RTL. 15531 15532'(mem:M ADDR ALIAS)' 15533 This RTX represents a reference to main memory at an address 15534 represented by the expression ADDR. M specifies how large a unit 15535 of memory is accessed. ALIAS specifies an alias set for the 15536 reference. In general two items are in different alias sets if 15537 they cannot reference the same memory address. 15538 15539 The construct '(mem:BLK (scratch))' is considered to alias all 15540 other memories. Thus it may be used as a memory barrier in 15541 epilogue stack deallocation patterns. 15542 15543'(concatM RTX RTX)' 15544 This RTX represents the concatenation of two other RTXs. This is 15545 used for complex values. It should only appear in the RTL attached 15546 to declarations and during RTL generation. It should not appear in 15547 the ordinary insn chain. 15548 15549'(concatnM [RTX ...])' 15550 This RTX represents the concatenation of all the RTX to make a 15551 single value. Like 'concat', this should only appear in 15552 declarations, and not in the insn chain. 15553 15554 15555File: gccint.info, Node: Arithmetic, Next: Comparisons, Prev: Regs and Memory, Up: RTL 15556 1555713.9 RTL Expressions for Arithmetic 15558=================================== 15559 15560Unless otherwise specified, all the operands of arithmetic expressions 15561must be valid for mode M. An operand is valid for mode M if it has mode 15562M, or if it is a 'const_int' or 'const_double' and M is a mode of class 15563'MODE_INT'. 15564 15565 For commutative binary operations, constants should be placed in the 15566second operand. 15567 15568'(plus:M X Y)' 15569'(ss_plus:M X Y)' 15570'(us_plus:M X Y)' 15571 15572 These three expressions all represent the sum of the values 15573 represented by X and Y carried out in machine mode M. They differ 15574 in their behavior on overflow of integer modes. 'plus' wraps round 15575 modulo the width of M; 'ss_plus' saturates at the maximum signed 15576 value representable in M; 'us_plus' saturates at the maximum 15577 unsigned value. 15578 15579'(lo_sum:M X Y)' 15580 15581 This expression represents the sum of X and the low-order bits of 15582 Y. It is used with 'high' (*note Constants::) to represent the 15583 typical two-instruction sequence used in RISC machines to reference 15584 a global memory location. 15585 15586 The number of low order bits is machine-dependent but is normally 15587 the number of bits in a 'Pmode' item minus the number of bits set 15588 by 'high'. 15589 15590 M should be 'Pmode'. 15591 15592'(minus:M X Y)' 15593'(ss_minus:M X Y)' 15594'(us_minus:M X Y)' 15595 15596 These three expressions represent the result of subtracting Y from 15597 X, carried out in mode M. Behavior on overflow is the same as for 15598 the three variants of 'plus' (see above). 15599 15600'(compare:M X Y)' 15601 Represents the result of subtracting Y from X for purposes of 15602 comparison. The result is computed without overflow, as if with 15603 infinite precision. 15604 15605 Of course, machines can't really subtract with infinite precision. 15606 However, they can pretend to do so when only the sign of the result 15607 will be used, which is the case when the result is stored in the 15608 condition code. And that is the _only_ way this kind of expression 15609 may validly be used: as a value to be stored in the condition 15610 codes, either '(cc0)' or a register. *Note Comparisons::. 15611 15612 The mode M is not related to the modes of X and Y, but instead is 15613 the mode of the condition code value. If '(cc0)' is used, it is 15614 'VOIDmode'. Otherwise it is some mode in class 'MODE_CC', often 15615 'CCmode'. *Note Condition Code::. If M is 'VOIDmode' or 'CCmode', 15616 the operation returns sufficient information (in an unspecified 15617 format) so that any comparison operator can be applied to the 15618 result of the 'COMPARE' operation. For other modes in class 15619 'MODE_CC', the operation only returns a subset of this information. 15620 15621 Normally, X and Y must have the same mode. Otherwise, 'compare' is 15622 valid only if the mode of X is in class 'MODE_INT' and Y is a 15623 'const_int' or 'const_double' with mode 'VOIDmode'. The mode of X 15624 determines what mode the comparison is to be done in; thus it must 15625 not be 'VOIDmode'. 15626 15627 If one of the operands is a constant, it should be placed in the 15628 second operand and the comparison code adjusted as appropriate. 15629 15630 A 'compare' specifying two 'VOIDmode' constants is not valid since 15631 there is no way to know in what mode the comparison is to be 15632 performed; the comparison must either be folded during the 15633 compilation or the first operand must be loaded into a register 15634 while its mode is still known. 15635 15636'(neg:M X)' 15637'(ss_neg:M X)' 15638'(us_neg:M X)' 15639 These two expressions represent the negation (subtraction from 15640 zero) of the value represented by X, carried out in mode M. They 15641 differ in the behavior on overflow of integer modes. In the case 15642 of 'neg', the negation of the operand may be a number not 15643 representable in mode M, in which case it is truncated to M. 15644 'ss_neg' and 'us_neg' ensure that an out-of-bounds result saturates 15645 to the maximum or minimum signed or unsigned value. 15646 15647'(mult:M X Y)' 15648'(ss_mult:M X Y)' 15649'(us_mult:M X Y)' 15650 Represents the signed product of the values represented by X and Y 15651 carried out in machine mode M. 'ss_mult' and 'us_mult' ensure that 15652 an out-of-bounds result saturates to the maximum or minimum signed 15653 or unsigned value. 15654 15655 Some machines support a multiplication that generates a product 15656 wider than the operands. Write the pattern for this as 15657 15658 (mult:M (sign_extend:M X) (sign_extend:M Y)) 15659 15660 where M is wider than the modes of X and Y, which need not be the 15661 same. 15662 15663 For unsigned widening multiplication, use the same idiom, but with 15664 'zero_extend' instead of 'sign_extend'. 15665 15666'(fma:M X Y Z)' 15667 Represents the 'fma', 'fmaf', and 'fmal' builtin functions, which 15668 compute 'X * Y + Z' without doing an intermediate rounding step. 15669 15670'(div:M X Y)' 15671'(ss_div:M X Y)' 15672 Represents the quotient in signed division of X by Y, carried out 15673 in machine mode M. If M is a floating point mode, it represents 15674 the exact quotient; otherwise, the integerized quotient. 'ss_div' 15675 ensures that an out-of-bounds result saturates to the maximum or 15676 minimum signed value. 15677 15678 Some machines have division instructions in which the operands and 15679 quotient widths are not all the same; you should represent such 15680 instructions using 'truncate' and 'sign_extend' as in, 15681 15682 (truncate:M1 (div:M2 X (sign_extend:M2 Y))) 15683 15684'(udiv:M X Y)' 15685'(us_div:M X Y)' 15686 Like 'div' but represents unsigned division. 'us_div' ensures that 15687 an out-of-bounds result saturates to the maximum or minimum 15688 unsigned value. 15689 15690'(mod:M X Y)' 15691'(umod:M X Y)' 15692 Like 'div' and 'udiv' but represent the remainder instead of the 15693 quotient. 15694 15695'(smin:M X Y)' 15696'(smax:M X Y)' 15697 Represents the smaller (for 'smin') or larger (for 'smax') of X and 15698 Y, interpreted as signed values in mode M. When used with floating 15699 point, if both operands are zeros, or if either operand is 'NaN', 15700 then it is unspecified which of the two operands is returned as the 15701 result. 15702 15703'(umin:M X Y)' 15704'(umax:M X Y)' 15705 Like 'smin' and 'smax', but the values are interpreted as unsigned 15706 integers. 15707 15708'(not:M X)' 15709 Represents the bitwise complement of the value represented by X, 15710 carried out in mode M, which must be a fixed-point machine mode. 15711 15712'(and:M X Y)' 15713 Represents the bitwise logical-and of the values represented by X 15714 and Y, carried out in machine mode M, which must be a fixed-point 15715 machine mode. 15716 15717'(ior:M X Y)' 15718 Represents the bitwise inclusive-or of the values represented by X 15719 and Y, carried out in machine mode M, which must be a fixed-point 15720 mode. 15721 15722'(xor:M X Y)' 15723 Represents the bitwise exclusive-or of the values represented by X 15724 and Y, carried out in machine mode M, which must be a fixed-point 15725 mode. 15726 15727'(ashift:M X C)' 15728'(ss_ashift:M X C)' 15729'(us_ashift:M X C)' 15730 These three expressions represent the result of arithmetically 15731 shifting X left by C places. They differ in their behavior on 15732 overflow of integer modes. An 'ashift' operation is a plain shift 15733 with no special behavior in case of a change in the sign bit; 15734 'ss_ashift' and 'us_ashift' saturates to the minimum or maximum 15735 representable value if any of the bits shifted out differs from the 15736 final sign bit. 15737 15738 X have mode M, a fixed-point machine mode. C be a fixed-point mode 15739 or be a constant with mode 'VOIDmode'; which mode is determined by 15740 the mode called for in the machine description entry for the 15741 left-shift instruction. For example, on the VAX, the mode of C is 15742 'QImode' regardless of M. 15743 15744'(lshiftrt:M X C)' 15745'(ashiftrt:M X C)' 15746 Like 'ashift' but for right shift. Unlike the case for left shift, 15747 these two operations are distinct. 15748 15749'(rotate:M X C)' 15750'(rotatert:M X C)' 15751 Similar but represent left and right rotate. If C is a constant, 15752 use 'rotate'. 15753 15754'(abs:M X)' 15755'(ss_abs:M X)' 15756 Represents the absolute value of X, computed in mode M. 'ss_abs' 15757 ensures that an out-of-bounds result saturates to the maximum 15758 signed value. 15759 15760'(sqrt:M X)' 15761 Represents the square root of X, computed in mode M. Most often M 15762 will be a floating point mode. 15763 15764'(ffs:M X)' 15765 Represents one plus the index of the least significant 1-bit in X, 15766 represented as an integer of mode M. (The value is zero if X is 15767 zero.) The mode of X must be M or 'VOIDmode'. 15768 15769'(clrsb:M X)' 15770 Represents the number of redundant leading sign bits in X, 15771 represented as an integer of mode M, starting at the most 15772 significant bit position. This is one less than the number of 15773 leading sign bits (either 0 or 1), with no special cases. The mode 15774 of X must be M or 'VOIDmode'. 15775 15776'(clz:M X)' 15777 Represents the number of leading 0-bits in X, represented as an 15778 integer of mode M, starting at the most significant bit position. 15779 If X is zero, the value is determined by 15780 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Note that this is one 15781 of the few expressions that is not invariant under widening. The 15782 mode of X must be M or 'VOIDmode'. 15783 15784'(ctz:M X)' 15785 Represents the number of trailing 0-bits in X, represented as an 15786 integer of mode M, starting at the least significant bit position. 15787 If X is zero, the value is determined by 15788 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::). Except for this case, 15789 'ctz(x)' is equivalent to 'ffs(X) - 1'. The mode of X must be M or 15790 'VOIDmode'. 15791 15792'(popcount:M X)' 15793 Represents the number of 1-bits in X, represented as an integer of 15794 mode M. The mode of X must be M or 'VOIDmode'. 15795 15796'(parity:M X)' 15797 Represents the number of 1-bits modulo 2 in X, represented as an 15798 integer of mode M. The mode of X must be M or 'VOIDmode'. 15799 15800'(bswap:M X)' 15801 Represents the value X with the order of bytes reversed, carried 15802 out in mode M, which must be a fixed-point machine mode. The mode 15803 of X must be M or 'VOIDmode'. 15804 15805 15806File: gccint.info, Node: Comparisons, Next: Bit-Fields, Prev: Arithmetic, Up: RTL 15807 1580813.10 Comparison Operations 15809=========================== 15810 15811Comparison operators test a relation on two operands and are considered 15812to represent a machine-dependent nonzero value described by, but not 15813necessarily equal to, 'STORE_FLAG_VALUE' (*note Misc::) if the relation 15814holds, or zero if it does not, for comparison operators whose results 15815have a 'MODE_INT' mode, 'FLOAT_STORE_FLAG_VALUE' (*note Misc::) if the 15816relation holds, or zero if it does not, for comparison operators that 15817return floating-point values, and a vector of either 15818'VECTOR_STORE_FLAG_VALUE' (*note Misc::) if the relation holds, or of 15819zeros if it does not, for comparison operators that return vector 15820results. The mode of the comparison operation is independent of the 15821mode of the data being compared. If the comparison operation is being 15822tested (e.g., the first operand of an 'if_then_else'), the mode must be 15823'VOIDmode'. 15824 15825 There are two ways that comparison operations may be used. The 15826comparison operators may be used to compare the condition codes '(cc0)' 15827against zero, as in '(eq (cc0) (const_int 0))'. Such a construct 15828actually refers to the result of the preceding instruction in which the 15829condition codes were set. The instruction setting the condition code 15830must be adjacent to the instruction using the condition code; only 15831'note' insns may separate them. 15832 15833 Alternatively, a comparison operation may directly compare two data 15834objects. The mode of the comparison is determined by the operands; they 15835must both be valid for a common machine mode. A comparison with both 15836operands constant would be invalid as the machine mode could not be 15837deduced from it, but such a comparison should never exist in RTL due to 15838constant folding. 15839 15840 In the example above, if '(cc0)' were last set to '(compare X Y)', the 15841comparison operation is identical to '(eq X Y)'. Usually only one style 15842of comparisons is supported on a particular machine, but the combine 15843pass will try to merge the operations to produce the 'eq' shown in case 15844it exists in the context of the particular insn involved. 15845 15846 Inequality comparisons come in two flavors, signed and unsigned. Thus, 15847there are distinct expression codes 'gt' and 'gtu' for signed and 15848unsigned greater-than. These can produce different results for the same 15849pair of integer values: for example, 1 is signed greater-than -1 but not 15850unsigned greater-than, because -1 when regarded as unsigned is actually 15851'0xffffffff' which is greater than 1. 15852 15853 The signed comparisons are also used for floating point values. 15854Floating point comparisons are distinguished by the machine modes of the 15855operands. 15856 15857'(eq:M X Y)' 15858 'STORE_FLAG_VALUE' if the values represented by X and Y are equal, 15859 otherwise 0. 15860 15861'(ne:M X Y)' 15862 'STORE_FLAG_VALUE' if the values represented by X and Y are not 15863 equal, otherwise 0. 15864 15865'(gt:M X Y)' 15866 'STORE_FLAG_VALUE' if the X is greater than Y. If they are 15867 fixed-point, the comparison is done in a signed sense. 15868 15869'(gtu:M X Y)' 15870 Like 'gt' but does unsigned comparison, on fixed-point numbers 15871 only. 15872 15873'(lt:M X Y)' 15874'(ltu:M X Y)' 15875 Like 'gt' and 'gtu' but test for "less than". 15876 15877'(ge:M X Y)' 15878'(geu:M X Y)' 15879 Like 'gt' and 'gtu' but test for "greater than or equal". 15880 15881'(le:M X Y)' 15882'(leu:M X Y)' 15883 Like 'gt' and 'gtu' but test for "less than or equal". 15884 15885'(if_then_else COND THEN ELSE)' 15886 This is not a comparison operation but is listed here because it is 15887 always used in conjunction with a comparison operation. To be 15888 precise, COND is a comparison expression. This expression 15889 represents a choice, according to COND, between the value 15890 represented by THEN and the one represented by ELSE. 15891 15892 On most machines, 'if_then_else' expressions are valid only to 15893 express conditional jumps. 15894 15895'(cond [TEST1 VALUE1 TEST2 VALUE2 ...] DEFAULT)' 15896 Similar to 'if_then_else', but more general. Each of TEST1, TEST2, 15897 ... is performed in turn. The result of this expression is the 15898 VALUE corresponding to the first nonzero test, or DEFAULT if none 15899 of the tests are nonzero expressions. 15900 15901 This is currently not valid for instruction patterns and is 15902 supported only for insn attributes. *Note Insn Attributes::. 15903 15904 15905File: gccint.info, Node: Bit-Fields, Next: Vector Operations, Prev: Comparisons, Up: RTL 15906 1590713.11 Bit-Fields 15908================ 15909 15910Special expression codes exist to represent bit-field instructions. 15911 15912'(sign_extract:M LOC SIZE POS)' 15913 This represents a reference to a sign-extended bit-field contained 15914 or starting in LOC (a memory or register reference). The bit-field 15915 is SIZE bits wide and starts at bit POS. The compilation option 15916 'BITS_BIG_ENDIAN' says which end of the memory unit POS counts 15917 from. 15918 15919 If LOC is in memory, its mode must be a single-byte integer mode. 15920 If LOC is in a register, the mode to use is specified by the 15921 operand of the 'insv' or 'extv' pattern (*note Standard Names::) 15922 and is usually a full-word integer mode, which is the default if 15923 none is specified. 15924 15925 The mode of POS is machine-specific and is also specified in the 15926 'insv' or 'extv' pattern. 15927 15928 The mode M is the same as the mode that would be used for LOC if it 15929 were a register. 15930 15931 A 'sign_extract' can not appear as an lvalue, or part thereof, in 15932 RTL. 15933 15934'(zero_extract:M LOC SIZE POS)' 15935 Like 'sign_extract' but refers to an unsigned or zero-extended 15936 bit-field. The same sequence of bits are extracted, but they are 15937 filled to an entire word with zeros instead of by sign-extension. 15938 15939 Unlike 'sign_extract', this type of expressions can be lvalues in 15940 RTL; they may appear on the left side of an assignment, indicating 15941 insertion of a value into the specified bit-field. 15942 15943 15944File: gccint.info, Node: Vector Operations, Next: Conversions, Prev: Bit-Fields, Up: RTL 15945 1594613.12 Vector Operations 15947======================= 15948 15949All normal RTL expressions can be used with vector modes; they are 15950interpreted as operating on each part of the vector independently. 15951Additionally, there are a few new expressions to describe specific 15952vector operations. 15953 15954'(vec_merge:M VEC1 VEC2 ITEMS)' 15955 This describes a merge operation between two vectors. The result 15956 is a vector of mode M; its elements are selected from either VEC1 15957 or VEC2. Which elements are selected is described by ITEMS, which 15958 is a bit mask represented by a 'const_int'; a zero bit indicates 15959 the corresponding element in the result vector is taken from VEC2 15960 while a set bit indicates it is taken from VEC1. 15961 15962'(vec_select:M VEC1 SELECTION)' 15963 This describes an operation that selects parts of a vector. VEC1 15964 is the source vector, and SELECTION is a 'parallel' that contains a 15965 'const_int' for each of the subparts of the result vector, giving 15966 the number of the source subpart that should be stored into it. 15967 The result mode M is either the submode for a single element of 15968 VEC1 (if only one subpart is selected), or another vector mode with 15969 that element submode (if multiple subparts are selected). 15970 15971'(vec_concat:M X1 X2)' 15972 Describes a vector concat operation. The result is a concatenation 15973 of the vectors or scalars X1 and X2; its length is the sum of the 15974 lengths of the two inputs. 15975 15976'(vec_duplicate:M X)' 15977 This operation converts a scalar into a vector or a small vector 15978 into a larger one by duplicating the input values. The output 15979 vector mode must have the same submodes as the input vector mode or 15980 the scalar modes, and the number of output parts must be an integer 15981 multiple of the number of input parts. 15982 15983 15984File: gccint.info, Node: Conversions, Next: RTL Declarations, Prev: Vector Operations, Up: RTL 15985 1598613.13 Conversions 15987================= 15988 15989All conversions between machine modes must be represented by explicit 15990conversion operations. For example, an expression which is the sum of a 15991byte and a full word cannot be written as '(plus:SI (reg:QI 34) (reg:SI 1599280))' because the 'plus' operation requires two operands of the same 15993machine mode. Therefore, the byte-sized operand is enclosed in a 15994conversion operation, as in 15995 15996 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80)) 15997 15998 The conversion operation is not a mere placeholder, because there may 15999be more than one way of converting from a given starting mode to the 16000desired final mode. The conversion operation code says how to do it. 16001 16002 For all conversion operations, X must not be 'VOIDmode' because the 16003mode in which to do the conversion would not be known. The conversion 16004must either be done at compile-time or X must be placed into a register. 16005 16006'(sign_extend:M X)' 16007 Represents the result of sign-extending the value X to machine mode 16008 M. M must be a fixed-point mode and X a fixed-point value of a 16009 mode narrower than M. 16010 16011'(zero_extend:M X)' 16012 Represents the result of zero-extending the value X to machine mode 16013 M. M must be a fixed-point mode and X a fixed-point value of a 16014 mode narrower than M. 16015 16016'(float_extend:M X)' 16017 Represents the result of extending the value X to machine mode M. 16018 M must be a floating point mode and X a floating point value of a 16019 mode narrower than M. 16020 16021'(truncate:M X)' 16022 Represents the result of truncating the value X to machine mode M. 16023 M must be a fixed-point mode and X a fixed-point value of a mode 16024 wider than M. 16025 16026'(ss_truncate:M X)' 16027 Represents the result of truncating the value X to machine mode M, 16028 using signed saturation in the case of overflow. Both M and the 16029 mode of X must be fixed-point modes. 16030 16031'(us_truncate:M X)' 16032 Represents the result of truncating the value X to machine mode M, 16033 using unsigned saturation in the case of overflow. Both M and the 16034 mode of X must be fixed-point modes. 16035 16036'(float_truncate:M X)' 16037 Represents the result of truncating the value X to machine mode M. 16038 M must be a floating point mode and X a floating point value of a 16039 mode wider than M. 16040 16041'(float:M X)' 16042 Represents the result of converting fixed point value X, regarded 16043 as signed, to floating point mode M. 16044 16045'(unsigned_float:M X)' 16046 Represents the result of converting fixed point value X, regarded 16047 as unsigned, to floating point mode M. 16048 16049'(fix:M X)' 16050 When M is a floating-point mode, represents the result of 16051 converting floating point value X (valid for mode M) to an integer, 16052 still represented in floating point mode M, by rounding towards 16053 zero. 16054 16055 When M is a fixed-point mode, represents the result of converting 16056 floating point value X to mode M, regarded as signed. How rounding 16057 is done is not specified, so this operation may be used validly in 16058 compiling C code only for integer-valued operands. 16059 16060'(unsigned_fix:M X)' 16061 Represents the result of converting floating point value X to fixed 16062 point mode M, regarded as unsigned. How rounding is done is not 16063 specified. 16064 16065'(fract_convert:M X)' 16066 Represents the result of converting fixed-point value X to 16067 fixed-point mode M, signed integer value X to fixed-point mode M, 16068 floating-point value X to fixed-point mode M, fixed-point value X 16069 to integer mode M regarded as signed, or fixed-point value X to 16070 floating-point mode M. When overflows or underflows happen, the 16071 results are undefined. 16072 16073'(sat_fract:M X)' 16074 Represents the result of converting fixed-point value X to 16075 fixed-point mode M, signed integer value X to fixed-point mode M, 16076 or floating-point value X to fixed-point mode M. When overflows or 16077 underflows happen, the results are saturated to the maximum or the 16078 minimum. 16079 16080'(unsigned_fract_convert:M X)' 16081 Represents the result of converting fixed-point value X to integer 16082 mode M regarded as unsigned, or unsigned integer value X to 16083 fixed-point mode M. When overflows or underflows happen, the 16084 results are undefined. 16085 16086'(unsigned_sat_fract:M X)' 16087 Represents the result of converting unsigned integer value X to 16088 fixed-point mode M. When overflows or underflows happen, the 16089 results are saturated to the maximum or the minimum. 16090 16091 16092File: gccint.info, Node: RTL Declarations, Next: Side Effects, Prev: Conversions, Up: RTL 16093 1609413.14 Declarations 16095================== 16096 16097Declaration expression codes do not represent arithmetic operations but 16098rather state assertions about their operands. 16099 16100'(strict_low_part (subreg:M (reg:N R) 0))' 16101 This expression code is used in only one context: as the 16102 destination operand of a 'set' expression. In addition, the 16103 operand of this expression must be a non-paradoxical 'subreg' 16104 expression. 16105 16106 The presence of 'strict_low_part' says that the part of the 16107 register which is meaningful in mode N, but is not part of mode M, 16108 is not to be altered. Normally, an assignment to such a subreg is 16109 allowed to have undefined effects on the rest of the register when 16110 M is less than a word. 16111 16112 16113File: gccint.info, Node: Side Effects, Next: Incdec, Prev: RTL Declarations, Up: RTL 16114 1611513.15 Side Effect Expressions 16116============================= 16117 16118The expression codes described so far represent values, not actions. 16119But machine instructions never produce values; they are meaningful only 16120for their side effects on the state of the machine. Special expression 16121codes are used to represent side effects. 16122 16123 The body of an instruction is always one of these side effect codes; 16124the codes described above, which represent values, appear only as the 16125operands of these. 16126 16127'(set LVAL X)' 16128 Represents the action of storing the value of X into the place 16129 represented by LVAL. LVAL must be an expression representing a 16130 place that can be stored in: 'reg' (or 'subreg', 'strict_low_part' 16131 or 'zero_extract'), 'mem', 'pc', 'parallel', or 'cc0'. 16132 16133 If LVAL is a 'reg', 'subreg' or 'mem', it has a machine mode; then 16134 X must be valid for that mode. 16135 16136 If LVAL is a 'reg' whose machine mode is less than the full width 16137 of the register, then it means that the part of the register 16138 specified by the machine mode is given the specified value and the 16139 rest of the register receives an undefined value. Likewise, if 16140 LVAL is a 'subreg' whose machine mode is narrower than the mode of 16141 the register, the rest of the register can be changed in an 16142 undefined way. 16143 16144 If LVAL is a 'strict_low_part' of a subreg, then the part of the 16145 register specified by the machine mode of the 'subreg' is given the 16146 value X and the rest of the register is not changed. 16147 16148 If LVAL is a 'zero_extract', then the referenced part of the 16149 bit-field (a memory or register reference) specified by the 16150 'zero_extract' is given the value X and the rest of the bit-field 16151 is not changed. Note that 'sign_extract' can not appear in LVAL. 16152 16153 If LVAL is '(cc0)', it has no machine mode, and X may be either a 16154 'compare' expression or a value that may have any mode. The latter 16155 case represents a "test" instruction. The expression '(set (cc0) 16156 (reg:M N))' is equivalent to '(set (cc0) (compare (reg:M N) 16157 (const_int 0)))'. Use the former expression to save space during 16158 the compilation. 16159 16160 If LVAL is a 'parallel', it is used to represent the case of a 16161 function returning a structure in multiple registers. Each element 16162 of the 'parallel' is an 'expr_list' whose first operand is a 'reg' 16163 and whose second operand is a 'const_int' representing the offset 16164 (in bytes) into the structure at which the data in that register 16165 corresponds. The first element may be null to indicate that the 16166 structure is also passed partly in memory. 16167 16168 If LVAL is '(pc)', we have a jump instruction, and the 16169 possibilities for X are very limited. It may be a 'label_ref' 16170 expression (unconditional jump). It may be an 'if_then_else' 16171 (conditional jump), in which case either the second or the third 16172 operand must be '(pc)' (for the case which does not jump) and the 16173 other of the two must be a 'label_ref' (for the case which does 16174 jump). X may also be a 'mem' or '(plus:SI (pc) Y)', where Y may be 16175 a 'reg' or a 'mem'; these unusual patterns are used to represent 16176 jumps through branch tables. 16177 16178 If LVAL is neither '(cc0)' nor '(pc)', the mode of LVAL must not be 16179 'VOIDmode' and the mode of X must be valid for the mode of LVAL. 16180 16181 LVAL is customarily accessed with the 'SET_DEST' macro and X with 16182 the 'SET_SRC' macro. 16183 16184'(return)' 16185 As the sole expression in a pattern, represents a return from the 16186 current function, on machines where this can be done with one 16187 instruction, such as VAXen. On machines where a multi-instruction 16188 "epilogue" must be executed in order to return from the function, 16189 returning is done by jumping to a label which precedes the 16190 epilogue, and the 'return' expression code is never used. 16191 16192 Inside an 'if_then_else' expression, represents the value to be 16193 placed in 'pc' to return to the caller. 16194 16195 Note that an insn pattern of '(return)' is logically equivalent to 16196 '(set (pc) (return))', but the latter form is never used. 16197 16198'(simple_return)' 16199 Like '(return)', but truly represents only a function return, while 16200 '(return)' may represent an insn that also performs other functions 16201 of the function epilogue. Like '(return)', this may also occur in 16202 conditional jumps. 16203 16204'(call FUNCTION NARGS)' 16205 Represents a function call. FUNCTION is a 'mem' expression whose 16206 address is the address of the function to be called. NARGS is an 16207 expression which can be used for two purposes: on some machines it 16208 represents the number of bytes of stack argument; on others, it 16209 represents the number of argument registers. 16210 16211 Each machine has a standard machine mode which FUNCTION must have. 16212 The machine description defines macro 'FUNCTION_MODE' to expand 16213 into the requisite mode name. The purpose of this mode is to 16214 specify what kind of addressing is allowed, on machines where the 16215 allowed kinds of addressing depend on the machine mode being 16216 addressed. 16217 16218'(clobber X)' 16219 Represents the storing or possible storing of an unpredictable, 16220 undescribed value into X, which must be a 'reg', 'scratch', 16221 'parallel' or 'mem' expression. 16222 16223 One place this is used is in string instructions that store 16224 standard values into particular hard registers. It may not be 16225 worth the trouble to describe the values that are stored, but it is 16226 essential to inform the compiler that the registers will be 16227 altered, lest it attempt to keep data in them across the string 16228 instruction. 16229 16230 If X is '(mem:BLK (const_int 0))' or '(mem:BLK (scratch))', it 16231 means that all memory locations must be presumed clobbered. If X 16232 is a 'parallel', it has the same meaning as a 'parallel' in a 'set' 16233 expression. 16234 16235 Note that the machine description classifies certain hard registers 16236 as "call-clobbered". All function call instructions are assumed by 16237 default to clobber these registers, so there is no need to use 16238 'clobber' expressions to indicate this fact. Also, each function 16239 call is assumed to have the potential to alter any memory location, 16240 unless the function is declared 'const'. 16241 16242 If the last group of expressions in a 'parallel' are each a 16243 'clobber' expression whose arguments are 'reg' or 'match_scratch' 16244 (*note RTL Template::) expressions, the combiner phase can add the 16245 appropriate 'clobber' expressions to an insn it has constructed 16246 when doing so will cause a pattern to be matched. 16247 16248 This feature can be used, for example, on a machine that whose 16249 multiply and add instructions don't use an MQ register but which 16250 has an add-accumulate instruction that does clobber the MQ 16251 register. Similarly, a combined instruction might require a 16252 temporary register while the constituent instructions might not. 16253 16254 When a 'clobber' expression for a register appears inside a 16255 'parallel' with other side effects, the register allocator 16256 guarantees that the register is unoccupied both before and after 16257 that insn if it is a hard register clobber. For pseudo-register 16258 clobber, the register allocator and the reload pass do not assign 16259 the same hard register to the clobber and the input operands if 16260 there is an insn alternative containing the '&' constraint (*note 16261 Modifiers::) for the clobber and the hard register is in register 16262 classes of the clobber in the alternative. You can clobber either 16263 a specific hard register, a pseudo register, or a 'scratch' 16264 expression; in the latter two cases, GCC will allocate a hard 16265 register that is available there for use as a temporary. 16266 16267 For instructions that require a temporary register, you should use 16268 'scratch' instead of a pseudo-register because this will allow the 16269 combiner phase to add the 'clobber' when required. You do this by 16270 coding ('clobber' ('match_scratch' ...)). If you do clobber a 16271 pseudo register, use one which appears nowhere else--generate a new 16272 one each time. Otherwise, you may confuse CSE. 16273 16274 There is one other known use for clobbering a pseudo register in a 16275 'parallel': when one of the input operands of the insn is also 16276 clobbered by the insn. In this case, using the same pseudo 16277 register in the clobber and elsewhere in the insn produces the 16278 expected results. 16279 16280'(use X)' 16281 Represents the use of the value of X. It indicates that the value 16282 in X at this point in the program is needed, even though it may not 16283 be apparent why this is so. Therefore, the compiler will not 16284 attempt to delete previous instructions whose only effect is to 16285 store a value in X. X must be a 'reg' expression. 16286 16287 In some situations, it may be tempting to add a 'use' of a register 16288 in a 'parallel' to describe a situation where the value of a 16289 special register will modify the behavior of the instruction. A 16290 hypothetical example might be a pattern for an addition that can 16291 either wrap around or use saturating addition depending on the 16292 value of a special control register: 16293 16294 (parallel [(set (reg:SI 2) (unspec:SI [(reg:SI 3) 16295 (reg:SI 4)] 0)) 16296 (use (reg:SI 1))]) 16297 16298 16299 This will not work, several of the optimizers only look at 16300 expressions locally; it is very likely that if you have multiple 16301 insns with identical inputs to the 'unspec', they will be optimized 16302 away even if register 1 changes in between. 16303 16304 This means that 'use' can _only_ be used to describe that the 16305 register is live. You should think twice before adding 'use' 16306 statements, more often you will want to use 'unspec' instead. The 16307 'use' RTX is most commonly useful to describe that a fixed register 16308 is implicitly used in an insn. It is also safe to use in patterns 16309 where the compiler knows for other reasons that the result of the 16310 whole pattern is variable, such as 'movmemM' or 'call' patterns. 16311 16312 During the reload phase, an insn that has a 'use' as pattern can 16313 carry a reg_equal note. These 'use' insns will be deleted before 16314 the reload phase exits. 16315 16316 During the delayed branch scheduling phase, X may be an insn. This 16317 indicates that X previously was located at this place in the code 16318 and its data dependencies need to be taken into account. These 16319 'use' insns will be deleted before the delayed branch scheduling 16320 phase exits. 16321 16322'(parallel [X0 X1 ...])' 16323 Represents several side effects performed in parallel. The square 16324 brackets stand for a vector; the operand of 'parallel' is a vector 16325 of expressions. X0, X1 and so on are individual side effect 16326 expressions--expressions of code 'set', 'call', 'return', 16327 'simple_return', 'clobber' or 'use'. 16328 16329 "In parallel" means that first all the values used in the 16330 individual side-effects are computed, and second all the actual 16331 side-effects are performed. For example, 16332 16333 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1))) 16334 (set (mem:SI (reg:SI 1)) (reg:SI 1))]) 16335 16336 says unambiguously that the values of hard register 1 and the 16337 memory location addressed by it are interchanged. In both places 16338 where '(reg:SI 1)' appears as a memory address it refers to the 16339 value in register 1 _before_ the execution of the insn. 16340 16341 It follows that it is _incorrect_ to use 'parallel' and expect the 16342 result of one 'set' to be available for the next one. For example, 16343 people sometimes attempt to represent a jump-if-zero instruction 16344 this way: 16345 16346 (parallel [(set (cc0) (reg:SI 34)) 16347 (set (pc) (if_then_else 16348 (eq (cc0) (const_int 0)) 16349 (label_ref ...) 16350 (pc)))]) 16351 16352 But this is incorrect, because it says that the jump condition 16353 depends on the condition code value _before_ this instruction, not 16354 on the new value that is set by this instruction. 16355 16356 Peephole optimization, which takes place together with final 16357 assembly code output, can produce insns whose patterns consist of a 16358 'parallel' whose elements are the operands needed to output the 16359 resulting assembler code--often 'reg', 'mem' or constant 16360 expressions. This would not be well-formed RTL at any other stage 16361 in compilation, but it is OK then because no further optimization 16362 remains to be done. However, the definition of the macro 16363 'NOTICE_UPDATE_CC', if any, must deal with such insns if you define 16364 any peephole optimizations. 16365 16366'(cond_exec [COND EXPR])' 16367 Represents a conditionally executed expression. The EXPR is 16368 executed only if the COND is nonzero. The COND expression must not 16369 have side-effects, but the EXPR may very well have side-effects. 16370 16371'(sequence [INSNS ...])' 16372 Represents a sequence of insns. If a 'sequence' appears in the 16373 chain of insns, then each of the INSNS that appears in the sequence 16374 must be suitable for appearing in the chain of insns, i.e. must 16375 satisfy the 'INSN_P' predicate. 16376 16377 After delay-slot scheduling is completed, an insn and all the insns 16378 that reside in its delay slots are grouped together into a 16379 'sequence'. The insn requiring the delay slot is the first insn in 16380 the vector; subsequent insns are to be placed in the delay slot. 16381 16382 'INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to 16383 indicate that a branch insn should be used that will conditionally 16384 annul the effect of the insns in the delay slots. In such a case, 16385 'INSN_FROM_TARGET_P' indicates that the insn is from the target of 16386 the branch and should be executed only if the branch is taken; 16387 otherwise the insn should be executed only if the branch is not 16388 taken. *Note Delay Slots::. 16389 16390 Some back ends also use 'sequence' objects for purposes other than 16391 delay-slot groups. This is not supported in the common parts of 16392 the compiler, which treat such sequences as delay-slot groups. 16393 16394 DWARF2 Call Frame Address (CFA) adjustments are sometimes also 16395 expressed using 'sequence' objects as the value of a 16396 'RTX_FRAME_RELATED_P' note. This only happens if the CFA 16397 adjustments cannot be easily derived from the pattern of the 16398 instruction to which the note is attached. In such cases, the 16399 value of the note is used instead of best-guesing the semantics of 16400 the instruction. The back end can attach notes containing a 16401 'sequence' of 'set' patterns that express the effect of the parent 16402 instruction. 16403 16404 These expression codes appear in place of a side effect, as the body of 16405an insn, though strictly speaking they do not always describe side 16406effects as such: 16407 16408'(asm_input S)' 16409 Represents literal assembler code as described by the string S. 16410 16411'(unspec [OPERANDS ...] INDEX)' 16412'(unspec_volatile [OPERANDS ...] INDEX)' 16413 Represents a machine-specific operation on OPERANDS. INDEX selects 16414 between multiple machine-specific operations. 'unspec_volatile' is 16415 used for volatile operations and operations that may trap; 'unspec' 16416 is used for other operations. 16417 16418 These codes may appear inside a 'pattern' of an insn, inside a 16419 'parallel', or inside an expression. 16420 16421'(addr_vec:M [LR0 LR1 ...])' 16422 Represents a table of jump addresses. The vector elements LR0, 16423 etc., are 'label_ref' expressions. The mode M specifies how much 16424 space is given to each address; normally M would be 'Pmode'. 16425 16426'(addr_diff_vec:M BASE [LR0 LR1 ...] MIN MAX FLAGS)' 16427 Represents a table of jump addresses expressed as offsets from 16428 BASE. The vector elements LR0, etc., are 'label_ref' expressions 16429 and so is BASE. The mode M specifies how much space is given to 16430 each address-difference. MIN and MAX are set up by branch 16431 shortening and hold a label with a minimum and a maximum address, 16432 respectively. FLAGS indicates the relative position of BASE, MIN 16433 and MAX to the containing insn and of MIN and MAX to BASE. See 16434 rtl.def for details. 16435 16436'(prefetch:M ADDR RW LOCALITY)' 16437 Represents prefetch of memory at address ADDR. Operand RW is 1 if 16438 the prefetch is for data to be written, 0 otherwise; targets that 16439 do not support write prefetches should treat this as a normal 16440 prefetch. Operand LOCALITY specifies the amount of temporal 16441 locality; 0 if there is none or 1, 2, or 3 for increasing levels of 16442 temporal locality; targets that do not support locality hints 16443 should ignore this. 16444 16445 This insn is used to minimize cache-miss latency by moving data 16446 into a cache before it is accessed. It should use only 16447 non-faulting data prefetch instructions. 16448 16449 16450File: gccint.info, Node: Incdec, Next: Assembler, Prev: Side Effects, Up: RTL 16451 1645213.16 Embedded Side-Effects on Addresses 16453======================================== 16454 16455Six special side-effect expression codes appear as memory addresses. 16456 16457'(pre_dec:M X)' 16458 Represents the side effect of decrementing X by a standard amount 16459 and represents also the value that X has after being decremented. 16460 X must be a 'reg' or 'mem', but most machines allow only a 'reg'. 16461 M must be the machine mode for pointers on the machine in use. The 16462 amount X is decremented by is the length in bytes of the machine 16463 mode of the containing memory reference of which this expression 16464 serves as the address. Here is an example of its use: 16465 16466 (mem:DF (pre_dec:SI (reg:SI 39))) 16467 16468 This says to decrement pseudo register 39 by the length of a 16469 'DFmode' value and use the result to address a 'DFmode' value. 16470 16471'(pre_inc:M X)' 16472 Similar, but specifies incrementing X instead of decrementing it. 16473 16474'(post_dec:M X)' 16475 Represents the same side effect as 'pre_dec' but a different value. 16476 The value represented here is the value X has before being 16477 decremented. 16478 16479'(post_inc:M X)' 16480 Similar, but specifies incrementing X instead of decrementing it. 16481 16482'(post_modify:M X Y)' 16483 16484 Represents the side effect of setting X to Y and represents X 16485 before X is modified. X must be a 'reg' or 'mem', but most 16486 machines allow only a 'reg'. M must be the machine mode for 16487 pointers on the machine in use. 16488 16489 The expression Y must be one of three forms: '(plus:M X Z)', 16490 '(minus:M X Z)', or '(plus:M X I)', where Z is an index register 16491 and I is a constant. 16492 16493 Here is an example of its use: 16494 16495 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) 16496 (reg:SI 48)))) 16497 16498 This says to modify pseudo register 42 by adding the contents of 16499 pseudo register 48 to it, after the use of what ever 42 points to. 16500 16501'(pre_modify:M X EXPR)' 16502 Similar except side effects happen before the use. 16503 16504 These embedded side effect expressions must be used with care. 16505Instruction patterns may not use them. Until the 'flow' pass of the 16506compiler, they may occur only to represent pushes onto the stack. The 16507'flow' pass finds cases where registers are incremented or decremented 16508in one instruction and used as an address shortly before or after; these 16509cases are then transformed to use pre- or post-increment or -decrement. 16510 16511 If a register used as the operand of these expressions is used in 16512another address in an insn, the original value of the register is used. 16513Uses of the register outside of an address are not permitted within the 16514same insn as a use in an embedded side effect expression because such 16515insns behave differently on different machines and hence must be treated 16516as ambiguous and disallowed. 16517 16518 An instruction that can be represented with an embedded side effect 16519could also be represented using 'parallel' containing an additional 16520'set' to describe how the address register is altered. This is not done 16521because machines that allow these operations at all typically allow them 16522wherever a memory address is called for. Describing them as additional 16523parallel stores would require doubling the number of entries in the 16524machine description. 16525 16526 16527File: gccint.info, Node: Assembler, Next: Debug Information, Prev: Incdec, Up: RTL 16528 1652913.17 Assembler Instructions as Expressions 16530=========================================== 16531 16532The RTX code 'asm_operands' represents a value produced by a 16533user-specified assembler instruction. It is used to represent an 'asm' 16534statement with arguments. An 'asm' statement with a single output 16535operand, like this: 16536 16537 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z)); 16538 16539is represented using a single 'asm_operands' RTX which represents the 16540value that is stored in 'outputvar': 16541 16542 (set RTX-FOR-OUTPUTVAR 16543 (asm_operands "foo %1,%2,%0" "a" 0 16544 [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z] 16545 [(asm_input:M1 "g") 16546 (asm_input:M2 "di")])) 16547 16548Here the operands of the 'asm_operands' RTX are the assembler template 16549string, the output-operand's constraint, the index-number of the output 16550operand among the output operands specified, a vector of input operand 16551RTX's, and a vector of input-operand modes and constraints. The mode M1 16552is the mode of the sum 'x+y'; M2 is that of '*z'. 16553 16554 When an 'asm' statement has multiple output values, its insn has 16555several such 'set' RTX's inside of a 'parallel'. Each 'set' contains an 16556'asm_operands'; all of these share the same assembler template and 16557vectors, but each contains the constraint for the respective output 16558operand. They are also distinguished by the output-operand index 16559number, which is 0, 1, ... for successive output operands. 16560 16561 16562File: gccint.info, Node: Debug Information, Next: Insns, Prev: Assembler, Up: RTL 16563 1656413.18 Variable Location Debug Information in RTL 16565================================================ 16566 16567Variable tracking relies on 'MEM_EXPR' and 'REG_EXPR' annotations to 16568determine what user variables memory and register references refer to. 16569 16570 Variable tracking at assignments uses these notes only when they refer 16571to variables that live at fixed locations (e.g., addressable variables, 16572global non-automatic variables). For variables whose location may vary, 16573it relies on the following types of notes. 16574 16575'(var_location:MODE VAR EXP STAT)' 16576 Binds variable 'var', a tree, to value EXP, an RTL expression. It 16577 appears only in 'NOTE_INSN_VAR_LOCATION' and 'DEBUG_INSN's, with 16578 slightly different meanings. MODE, if present, represents the mode 16579 of EXP, which is useful if it is a modeless expression. STAT is 16580 only meaningful in notes, indicating whether the variable is known 16581 to be initialized or uninitialized. 16582 16583'(debug_expr:MODE DECL)' 16584 Stands for the value bound to the 'DEBUG_EXPR_DECL' DECL, that 16585 points back to it, within value expressions in 'VAR_LOCATION' 16586 nodes. 16587 16588 16589File: gccint.info, Node: Insns, Next: Calls, Prev: Debug Information, Up: RTL 16590 1659113.19 Insns 16592=========== 16593 16594The RTL representation of the code for a function is a doubly-linked 16595chain of objects called "insns". Insns are expressions with special 16596codes that are used for no other purpose. Some insns are actual 16597instructions; others represent dispatch tables for 'switch' statements; 16598others represent labels to jump to or various sorts of declarative 16599information. 16600 16601 In addition to its own specific data, each insn must have a unique 16602id-number that distinguishes it from all other insns in the current 16603function (after delayed branch scheduling, copies of an insn with the 16604same id-number may be present in multiple places in a function, but 16605these copies will always be identical and will only appear inside a 16606'sequence'), and chain pointers to the preceding and following insns. 16607These three fields occupy the same position in every insn, independent 16608of the expression code of the insn. They could be accessed with 'XEXP' 16609and 'XINT', but instead three special macros are always used: 16610 16611'INSN_UID (I)' 16612 Accesses the unique id of insn I. 16613 16614'PREV_INSN (I)' 16615 Accesses the chain pointer to the insn preceding I. If I is the 16616 first insn, this is a null pointer. 16617 16618'NEXT_INSN (I)' 16619 Accesses the chain pointer to the insn following I. If I is the 16620 last insn, this is a null pointer. 16621 16622 The first insn in the chain is obtained by calling 'get_insns'; the 16623last insn is the result of calling 'get_last_insn'. Within the chain 16624delimited by these insns, the 'NEXT_INSN' and 'PREV_INSN' pointers must 16625always correspond: if INSN is not the first insn, 16626 16627 NEXT_INSN (PREV_INSN (INSN)) == INSN 16628 16629is always true and if INSN is not the last insn, 16630 16631 PREV_INSN (NEXT_INSN (INSN)) == INSN 16632 16633is always true. 16634 16635 After delay slot scheduling, some of the insns in the chain might be 16636'sequence' expressions, which contain a vector of insns. The value of 16637'NEXT_INSN' in all but the last of these insns is the next insn in the 16638vector; the value of 'NEXT_INSN' of the last insn in the vector is the 16639same as the value of 'NEXT_INSN' for the 'sequence' in which it is 16640contained. Similar rules apply for 'PREV_INSN'. 16641 16642 This means that the above invariants are not necessarily true for insns 16643inside 'sequence' expressions. Specifically, if INSN is the first insn 16644in a 'sequence', 'NEXT_INSN (PREV_INSN (INSN))' is the insn containing 16645the 'sequence' expression, as is the value of 'PREV_INSN (NEXT_INSN 16646(INSN))' if INSN is the last insn in the 'sequence' expression. You can 16647use these expressions to find the containing 'sequence' expression. 16648 16649 Every insn has one of the following expression codes: 16650 16651'insn' 16652 The expression code 'insn' is used for instructions that do not 16653 jump and do not do function calls. 'sequence' expressions are 16654 always contained in insns with code 'insn' even if one of those 16655 insns should jump or do function calls. 16656 16657 Insns with code 'insn' have four additional fields beyond the three 16658 mandatory ones listed above. These four are described in a table 16659 below. 16660 16661'jump_insn' 16662 The expression code 'jump_insn' is used for instructions that may 16663 jump (or, more generally, may contain 'label_ref' expressions to 16664 which 'pc' can be set in that instruction). If there is an 16665 instruction to return from the current function, it is recorded as 16666 a 'jump_insn'. 16667 16668 'jump_insn' insns have the same extra fields as 'insn' insns, 16669 accessed in the same way and in addition contain a field 16670 'JUMP_LABEL' which is defined once jump optimization has completed. 16671 16672 For simple conditional and unconditional jumps, this field contains 16673 the 'code_label' to which this insn will (possibly conditionally) 16674 branch. In a more complex jump, 'JUMP_LABEL' records one of the 16675 labels that the insn refers to; other jump target labels are 16676 recorded as 'REG_LABEL_TARGET' notes. The exception is 'addr_vec' 16677 and 'addr_diff_vec', where 'JUMP_LABEL' is 'NULL_RTX' and the only 16678 way to find the labels is to scan the entire body of the insn. 16679 16680 Return insns count as jumps, but their 'JUMP_LABEL' is 'RETURN' or 16681 'SIMPLE_RETURN'. 16682 16683'call_insn' 16684 The expression code 'call_insn' is used for instructions that may 16685 do function calls. It is important to distinguish these 16686 instructions because they imply that certain registers and memory 16687 locations may be altered unpredictably. 16688 16689 'call_insn' insns have the same extra fields as 'insn' insns, 16690 accessed in the same way and in addition contain a field 16691 'CALL_INSN_FUNCTION_USAGE', which contains a list (chain of 16692 'expr_list' expressions) containing 'use', 'clobber' and sometimes 16693 'set' expressions that denote hard registers and 'mem's used or 16694 clobbered by the called function. 16695 16696 A 'mem' generally points to a stack slot in which arguments passed 16697 to the libcall by reference (*note TARGET_PASS_BY_REFERENCE: 16698 Register Arguments.) are stored. If the argument is caller-copied 16699 (*note TARGET_CALLEE_COPIES: Register Arguments.), the stack slot 16700 will be mentioned in 'clobber' and 'use' entries; if it's 16701 callee-copied, only a 'use' will appear, and the 'mem' may point to 16702 addresses that are not stack slots. 16703 16704 Registers occurring inside a 'clobber' in this list augment 16705 registers specified in 'CALL_USED_REGISTERS' (*note Register 16706 Basics::). 16707 16708 If the list contains a 'set' involving two registers, it indicates 16709 that the function returns one of its arguments. Such a 'set' may 16710 look like a no-op if the same register holds the argument and the 16711 return value. 16712 16713'code_label' 16714 A 'code_label' insn represents a label that a jump insn can jump 16715 to. It contains two special fields of data in addition to the 16716 three standard ones. 'CODE_LABEL_NUMBER' is used to hold the 16717 "label number", a number that identifies this label uniquely among 16718 all the labels in the compilation (not just in the current 16719 function). Ultimately, the label is represented in the assembler 16720 output as an assembler label, usually of the form 'LN' where N is 16721 the label number. 16722 16723 When a 'code_label' appears in an RTL expression, it normally 16724 appears within a 'label_ref' which represents the address of the 16725 label, as a number. 16726 16727 Besides as a 'code_label', a label can also be represented as a 16728 'note' of type 'NOTE_INSN_DELETED_LABEL'. 16729 16730 The field 'LABEL_NUSES' is only defined once the jump optimization 16731 phase is completed. It contains the number of times this label is 16732 referenced in the current function. 16733 16734 The field 'LABEL_KIND' differentiates four different types of 16735 labels: 'LABEL_NORMAL', 'LABEL_STATIC_ENTRY', 'LABEL_GLOBAL_ENTRY', 16736 and 'LABEL_WEAK_ENTRY'. The only labels that do not have type 16737 'LABEL_NORMAL' are "alternate entry points" to the current 16738 function. These may be static (visible only in the containing 16739 translation unit), global (exposed to all translation units), or 16740 weak (global, but can be overridden by another symbol with the same 16741 name). 16742 16743 Much of the compiler treats all four kinds of label identically. 16744 Some of it needs to know whether or not a label is an alternate 16745 entry point; for this purpose, the macro 'LABEL_ALT_ENTRY_P' is 16746 provided. It is equivalent to testing whether 'LABEL_KIND (label) 16747 == LABEL_NORMAL'. The only place that cares about the distinction 16748 between static, global, and weak alternate entry points, besides 16749 the front-end code that creates them, is the function 16750 'output_alternate_entry_point', in 'final.c'. 16751 16752 To set the kind of a label, use the 'SET_LABEL_KIND' macro. 16753 16754'jump_table_data' 16755 A 'jump_table_data' insn is a placeholder for the jump-table data 16756 of a 'casesi' or 'tablejump' insn. They are placed after a 16757 'tablejump_p' insn. A 'jump_table_data' insn is not part o a basic 16758 blockm but it is associated with the basic block that ends with the 16759 'tablejump_p' insn. The 'PATTERN' of a 'jump_table_data' is always 16760 either an 'addr_vec' or an 'addr_diff_vec', and a 'jump_table_data' 16761 insn is always preceded by a 'code_label'. The 'tablejump_p' insn 16762 refers to that 'code_label' via its 'JUMP_LABEL'. 16763 16764'barrier' 16765 Barriers are placed in the instruction stream when control cannot 16766 flow past them. They are placed after unconditional jump 16767 instructions to indicate that the jumps are unconditional and after 16768 calls to 'volatile' functions, which do not return (e.g., 'exit'). 16769 They contain no information beyond the three standard fields. 16770 16771'note' 16772 'note' insns are used to represent additional debugging and 16773 declarative information. They contain two nonstandard fields, an 16774 integer which is accessed with the macro 'NOTE_LINE_NUMBER' and a 16775 string accessed with 'NOTE_SOURCE_FILE'. 16776 16777 If 'NOTE_LINE_NUMBER' is positive, the note represents the position 16778 of a source line and 'NOTE_SOURCE_FILE' is the source file name 16779 that the line came from. These notes control generation of line 16780 number data in the assembler output. 16781 16782 Otherwise, 'NOTE_LINE_NUMBER' is not really a line number but a 16783 code with one of the following values (and 'NOTE_SOURCE_FILE' must 16784 contain a null pointer): 16785 16786 'NOTE_INSN_DELETED' 16787 Such a note is completely ignorable. Some passes of the 16788 compiler delete insns by altering them into notes of this 16789 kind. 16790 16791 'NOTE_INSN_DELETED_LABEL' 16792 This marks what used to be a 'code_label', but was not used 16793 for other purposes than taking its address and was transformed 16794 to mark that no code jumps to it. 16795 16796 'NOTE_INSN_BLOCK_BEG' 16797 'NOTE_INSN_BLOCK_END' 16798 These types of notes indicate the position of the beginning 16799 and end of a level of scoping of variable names. They control 16800 the output of debugging information. 16801 16802 'NOTE_INSN_EH_REGION_BEG' 16803 'NOTE_INSN_EH_REGION_END' 16804 These types of notes indicate the position of the beginning 16805 and end of a level of scoping for exception handling. 16806 'NOTE_EH_HANDLER' identifies which region is associated with 16807 these notes. 16808 16809 'NOTE_INSN_FUNCTION_BEG' 16810 Appears at the start of the function body, after the function 16811 prologue. 16812 16813 'NOTE_INSN_VAR_LOCATION' 16814 This note is used to generate variable location debugging 16815 information. It indicates that the user variable in its 16816 'VAR_LOCATION' operand is at the location given in the RTL 16817 expression, or holds a value that can be computed by 16818 evaluating the RTL expression from that static point in the 16819 program up to the next such note for the same user variable. 16820 16821 These codes are printed symbolically when they appear in debugging 16822 dumps. 16823 16824'debug_insn' 16825 The expression code 'debug_insn' is used for pseudo-instructions 16826 that hold debugging information for variable tracking at 16827 assignments (see '-fvar-tracking-assignments' option). They are 16828 the RTL representation of 'GIMPLE_DEBUG' statements (*note 16829 GIMPLE_DEBUG::), with a 'VAR_LOCATION' operand that binds a user 16830 variable tree to an RTL representation of the 'value' in the 16831 corresponding statement. A 'DEBUG_EXPR' in it stands for the value 16832 bound to the corresponding 'DEBUG_EXPR_DECL'. 16833 16834 Throughout optimization passes, binding information is kept in 16835 pseudo-instruction form, so that, unlike notes, it gets the same 16836 treatment and adjustments that regular instructions would. It is 16837 the variable tracking pass that turns these pseudo-instructions 16838 into var location notes, analyzing control flow, value equivalences 16839 and changes to registers and memory referenced in value 16840 expressions, propagating the values of debug temporaries and 16841 determining expressions that can be used to compute the value of 16842 each user variable at as many points (ranges, actually) in the 16843 program as possible. 16844 16845 Unlike 'NOTE_INSN_VAR_LOCATION', the value expression in an 16846 'INSN_VAR_LOCATION' denotes a value at that specific point in the 16847 program, rather than an expression that can be evaluated at any 16848 later point before an overriding 'VAR_LOCATION' is encountered. 16849 E.g., if a user variable is bound to a 'REG' and then a subsequent 16850 insn modifies the 'REG', the note location would keep mapping the 16851 user variable to the register across the insn, whereas the insn 16852 location would keep the variable bound to the value, so that the 16853 variable tracking pass would emit another location note for the 16854 variable at the point in which the register is modified. 16855 16856 The machine mode of an insn is normally 'VOIDmode', but some phases use 16857the mode for various purposes. 16858 16859 The common subexpression elimination pass sets the mode of an insn to 16860'QImode' when it is the first insn in a block that has already been 16861processed. 16862 16863 The second Haifa scheduling pass, for targets that can multiple issue, 16864sets the mode of an insn to 'TImode' when it is believed that the 16865instruction begins an issue group. That is, when the instruction cannot 16866issue simultaneously with the previous. This may be relied on by later 16867passes, in particular machine-dependent reorg. 16868 16869 Here is a table of the extra fields of 'insn', 'jump_insn' and 16870'call_insn' insns: 16871 16872'PATTERN (I)' 16873 An expression for the side effect performed by this insn. This 16874 must be one of the following codes: 'set', 'call', 'use', 16875 'clobber', 'return', 'simple_return', 'asm_input', 'asm_output', 16876 'addr_vec', 'addr_diff_vec', 'trap_if', 'unspec', 16877 'unspec_volatile', 'parallel', 'cond_exec', or 'sequence'. If it 16878 is a 'parallel', each element of the 'parallel' must be one these 16879 codes, except that 'parallel' expressions cannot be nested and 16880 'addr_vec' and 'addr_diff_vec' are not permitted inside a 16881 'parallel' expression. 16882 16883'INSN_CODE (I)' 16884 An integer that says which pattern in the machine description 16885 matches this insn, or -1 if the matching has not yet been 16886 attempted. 16887 16888 Such matching is never attempted and this field remains -1 on an 16889 insn whose pattern consists of a single 'use', 'clobber', 16890 'asm_input', 'addr_vec' or 'addr_diff_vec' expression. 16891 16892 Matching is also never attempted on insns that result from an 'asm' 16893 statement. These contain at least one 'asm_operands' expression. 16894 The function 'asm_noperands' returns a non-negative value for such 16895 insns. 16896 16897 In the debugging output, this field is printed as a number followed 16898 by a symbolic representation that locates the pattern in the 'md' 16899 file as some small positive or negative offset from a named 16900 pattern. 16901 16902'LOG_LINKS (I)' 16903 A list (chain of 'insn_list' expressions) giving information about 16904 dependencies between instructions within a basic block. Neither a 16905 jump nor a label may come between the related insns. These are 16906 only used by the schedulers and by combine. This is a deprecated 16907 data structure. Def-use and use-def chains are now preferred. 16908 16909'REG_NOTES (I)' 16910 A list (chain of 'expr_list', 'insn_list' and 'int_list' 16911 expressions) giving miscellaneous information about the insn. It 16912 is often information pertaining to the registers used in this insn. 16913 16914 The 'LOG_LINKS' field of an insn is a chain of 'insn_list' expressions. 16915Each of these has two operands: the first is an insn, and the second is 16916another 'insn_list' expression (the next one in the chain). The last 16917'insn_list' in the chain has a null pointer as second operand. The 16918significant thing about the chain is which insns appear in it (as first 16919operands of 'insn_list' expressions). Their order is not significant. 16920 16921 This list is originally set up by the flow analysis pass; it is a null 16922pointer until then. Flow only adds links for those data dependencies 16923which can be used for instruction combination. For each insn, the flow 16924analysis pass adds a link to insns which store into registers values 16925that are used for the first time in this insn. 16926 16927 The 'REG_NOTES' field of an insn is a chain similar to the 'LOG_LINKS' 16928field but it includes 'expr_list' and 'int_list' expressions in addition 16929to 'insn_list' expressions. There are several kinds of register notes, 16930which are distinguished by the machine mode, which in a register note is 16931really understood as being an 'enum reg_note'. The first operand OP of 16932the note is data whose meaning depends on the kind of note. 16933 16934 The macro 'REG_NOTE_KIND (X)' returns the kind of register note. Its 16935counterpart, the macro 'PUT_REG_NOTE_KIND (X, NEWKIND)' sets the 16936register note type of X to be NEWKIND. 16937 16938 Register notes are of three classes: They may say something about an 16939input to an insn, they may say something about an output of an insn, or 16940they may create a linkage between two insns. There are also a set of 16941values that are only used in 'LOG_LINKS'. 16942 16943 These register notes annotate inputs to an insn: 16944 16945'REG_DEAD' 16946 The value in OP dies in this insn; that is to say, altering the 16947 value immediately after this insn would not affect the future 16948 behavior of the program. 16949 16950 It does not follow that the register OP has no useful value after 16951 this insn since OP is not necessarily modified by this insn. 16952 Rather, no subsequent instruction uses the contents of OP. 16953 16954'REG_UNUSED' 16955 The register OP being set by this insn will not be used in a 16956 subsequent insn. This differs from a 'REG_DEAD' note, which 16957 indicates that the value in an input will not be used subsequently. 16958 These two notes are independent; both may be present for the same 16959 register. 16960 16961'REG_INC' 16962 The register OP is incremented (or decremented; at this level there 16963 is no distinction) by an embedded side effect inside this insn. 16964 This means it appears in a 'post_inc', 'pre_inc', 'post_dec' or 16965 'pre_dec' expression. 16966 16967'REG_NONNEG' 16968 The register OP is known to have a nonnegative value when this insn 16969 is reached. This is used so that decrement and branch until zero 16970 instructions, such as the m68k dbra, can be matched. 16971 16972 The 'REG_NONNEG' note is added to insns only if the machine 16973 description has a 'decrement_and_branch_until_zero' pattern. 16974 16975'REG_LABEL_OPERAND' 16976 This insn uses OP, a 'code_label' or a 'note' of type 16977 'NOTE_INSN_DELETED_LABEL', but is not a 'jump_insn', or it is a 16978 'jump_insn' that refers to the operand as an ordinary operand. The 16979 label may still eventually be a jump target, but if so in an 16980 indirect jump in a subsequent insn. The presence of this note 16981 allows jump optimization to be aware that OP is, in fact, being 16982 used, and flow optimization to build an accurate flow graph. 16983 16984'REG_LABEL_TARGET' 16985 This insn is a 'jump_insn' but not an 'addr_vec' or 16986 'addr_diff_vec'. It uses OP, a 'code_label' as a direct or 16987 indirect jump target. Its purpose is similar to that of 16988 'REG_LABEL_OPERAND'. This note is only present if the insn has 16989 multiple targets; the last label in the insn (in the highest 16990 numbered insn-field) goes into the 'JUMP_LABEL' field and does not 16991 have a 'REG_LABEL_TARGET' note. *Note JUMP_LABEL: Insns. 16992 16993'REG_CROSSING_JUMP' 16994 This insn is a branching instruction (either an unconditional jump 16995 or an indirect jump) which crosses between hot and cold sections, 16996 which could potentially be very far apart in the executable. The 16997 presence of this note indicates to other optimizations that this 16998 branching instruction should not be "collapsed" into a simpler 16999 branching construct. It is used when the optimization to partition 17000 basic blocks into hot and cold sections is turned on. 17001 17002'REG_SETJMP' 17003 Appears attached to each 'CALL_INSN' to 'setjmp' or a related 17004 function. 17005 17006 The following notes describe attributes of outputs of an insn: 17007 17008'REG_EQUIV' 17009'REG_EQUAL' 17010 This note is only valid on an insn that sets only one register and 17011 indicates that that register will be equal to OP at run time; the 17012 scope of this equivalence differs between the two types of notes. 17013 The value which the insn explicitly copies into the register may 17014 look different from OP, but they will be equal at run time. If the 17015 output of the single 'set' is a 'strict_low_part' or 'zero_extract' 17016 expression, the note refers to the register that is contained in 17017 its first operand. 17018 17019 For 'REG_EQUIV', the register is equivalent to OP throughout the 17020 entire function, and could validly be replaced in all its 17021 occurrences by OP. ("Validly" here refers to the data flow of the 17022 program; simple replacement may make some insns invalid.) For 17023 example, when a constant is loaded into a register that is never 17024 assigned any other value, this kind of note is used. 17025 17026 When a parameter is copied into a pseudo-register at entry to a 17027 function, a note of this kind records that the register is 17028 equivalent to the stack slot where the parameter was passed. 17029 Although in this case the register may be set by other insns, it is 17030 still valid to replace the register by the stack slot throughout 17031 the function. 17032 17033 A 'REG_EQUIV' note is also used on an instruction which copies a 17034 register parameter into a pseudo-register at entry to a function, 17035 if there is a stack slot where that parameter could be stored. 17036 Although other insns may set the pseudo-register, it is valid for 17037 the compiler to replace the pseudo-register by stack slot 17038 throughout the function, provided the compiler ensures that the 17039 stack slot is properly initialized by making the replacement in the 17040 initial copy instruction as well. This is used on machines for 17041 which the calling convention allocates stack space for register 17042 parameters. See 'REG_PARM_STACK_SPACE' in *note Stack Arguments::. 17043 17044 In the case of 'REG_EQUAL', the register that is set by this insn 17045 will be equal to OP at run time at the end of this insn but not 17046 necessarily elsewhere in the function. In this case, OP is 17047 typically an arithmetic expression. For example, when a sequence 17048 of insns such as a library call is used to perform an arithmetic 17049 operation, this kind of note is attached to the insn that produces 17050 or copies the final value. 17051 17052 These two notes are used in different ways by the compiler passes. 17053 'REG_EQUAL' is used by passes prior to register allocation (such as 17054 common subexpression elimination and loop optimization) to tell 17055 them how to think of that value. 'REG_EQUIV' notes are used by 17056 register allocation to indicate that there is an available 17057 substitute expression (either a constant or a 'mem' expression for 17058 the location of a parameter on the stack) that may be used in place 17059 of a register if insufficient registers are available. 17060 17061 Except for stack homes for parameters, which are indicated by a 17062 'REG_EQUIV' note and are not useful to the early optimization 17063 passes and pseudo registers that are equivalent to a memory 17064 location throughout their entire life, which is not detected until 17065 later in the compilation, all equivalences are initially indicated 17066 by an attached 'REG_EQUAL' note. In the early stages of register 17067 allocation, a 'REG_EQUAL' note is changed into a 'REG_EQUIV' note 17068 if OP is a constant and the insn represents the only set of its 17069 destination register. 17070 17071 Thus, compiler passes prior to register allocation need only check 17072 for 'REG_EQUAL' notes and passes subsequent to register allocation 17073 need only check for 'REG_EQUIV' notes. 17074 17075 These notes describe linkages between insns. They occur in pairs: one 17076insn has one of a pair of notes that points to a second insn, which has 17077the inverse note pointing back to the first insn. 17078 17079'REG_CC_SETTER' 17080'REG_CC_USER' 17081 On machines that use 'cc0', the insns which set and use 'cc0' set 17082 and use 'cc0' are adjacent. However, when branch delay slot 17083 filling is done, this may no longer be true. In this case a 17084 'REG_CC_USER' note will be placed on the insn setting 'cc0' to 17085 point to the insn using 'cc0' and a 'REG_CC_SETTER' note will be 17086 placed on the insn using 'cc0' to point to the insn setting 'cc0'. 17087 17088 These values are only used in the 'LOG_LINKS' field, and indicate the 17089type of dependency that each link represents. Links which indicate a 17090data dependence (a read after write dependence) do not use any code, 17091they simply have mode 'VOIDmode', and are printed without any 17092descriptive text. 17093 17094'REG_DEP_TRUE' 17095 This indicates a true dependence (a read after write dependence). 17096 17097'REG_DEP_OUTPUT' 17098 This indicates an output dependence (a write after write 17099 dependence). 17100 17101'REG_DEP_ANTI' 17102 This indicates an anti dependence (a write after read dependence). 17103 17104 These notes describe information gathered from gcov profile data. They 17105are stored in the 'REG_NOTES' field of an insn. 17106 17107'REG_BR_PROB' 17108 This is used to specify the ratio of branches to non-branches of a 17109 branch insn according to the profile data. The note is represented 17110 as an 'int_list' expression whose integer value is between 0 and 17111 REG_BR_PROB_BASE. Larger values indicate a higher probability that 17112 the branch will be taken. 17113 17114'REG_BR_PRED' 17115 These notes are found in JUMP insns after delayed branch scheduling 17116 has taken place. They indicate both the direction and the 17117 likelihood of the JUMP. The format is a bitmask of ATTR_FLAG_* 17118 values. 17119 17120'REG_FRAME_RELATED_EXPR' 17121 This is used on an RTX_FRAME_RELATED_P insn wherein the attached 17122 expression is used in place of the actual insn pattern. This is 17123 done in cases where the pattern is either complex or misleading. 17124 17125 For convenience, the machine mode in an 'insn_list' or 'expr_list' is 17126printed using these symbolic codes in debugging dumps. 17127 17128 The only difference between the expression codes 'insn_list' and 17129'expr_list' is that the first operand of an 'insn_list' is assumed to be 17130an insn and is printed in debugging dumps as the insn's unique id; the 17131first operand of an 'expr_list' is printed in the ordinary way as an 17132expression. 17133 17134 17135File: gccint.info, Node: Calls, Next: Sharing, Prev: Insns, Up: RTL 17136 1713713.20 RTL Representation of Function-Call Insns 17138=============================================== 17139 17140Insns that call subroutines have the RTL expression code 'call_insn'. 17141These insns must satisfy special rules, and their bodies must use a 17142special RTL expression code, 'call'. 17143 17144 A 'call' expression has two operands, as follows: 17145 17146 (call (mem:FM ADDR) NBYTES) 17147 17148Here NBYTES is an operand that represents the number of bytes of 17149argument data being passed to the subroutine, FM is a machine mode 17150(which must equal as the definition of the 'FUNCTION_MODE' macro in the 17151machine description) and ADDR represents the address of the subroutine. 17152 17153 For a subroutine that returns no value, the 'call' expression as shown 17154above is the entire body of the insn, except that the insn might also 17155contain 'use' or 'clobber' expressions. 17156 17157 For a subroutine that returns a value whose mode is not 'BLKmode', the 17158value is returned in a hard register. If this register's number is R, 17159then the body of the call insn looks like this: 17160 17161 (set (reg:M R) 17162 (call (mem:FM ADDR) NBYTES)) 17163 17164This RTL expression makes it clear (to the optimizer passes) that the 17165appropriate register receives a useful value in this insn. 17166 17167 When a subroutine returns a 'BLKmode' value, it is handled by passing 17168to the subroutine the address of a place to store the value. So the 17169call insn itself does not "return" any value, and it has the same RTL 17170form as a call that returns nothing. 17171 17172 On some machines, the call instruction itself clobbers some register, 17173for example to contain the return address. 'call_insn' insns on these 17174machines should have a body which is a 'parallel' that contains both the 17175'call' expression and 'clobber' expressions that indicate which 17176registers are destroyed. Similarly, if the call instruction requires 17177some register other than the stack pointer that is not explicitly 17178mentioned in its RTL, a 'use' subexpression should mention that 17179register. 17180 17181 Functions that are called are assumed to modify all registers listed in 17182the configuration macro 'CALL_USED_REGISTERS' (*note Register Basics::) 17183and, with the exception of 'const' functions and library calls, to 17184modify all of memory. 17185 17186 Insns containing just 'use' expressions directly precede the 17187'call_insn' insn to indicate which registers contain inputs to the 17188function. Similarly, if registers other than those in 17189'CALL_USED_REGISTERS' are clobbered by the called function, insns 17190containing a single 'clobber' follow immediately after the call to 17191indicate which registers. 17192 17193 17194File: gccint.info, Node: Sharing, Next: Reading RTL, Prev: Calls, Up: RTL 17195 1719613.21 Structure Sharing Assumptions 17197=================================== 17198 17199The compiler assumes that certain kinds of RTL expressions are unique; 17200there do not exist two distinct objects representing the same value. In 17201other cases, it makes an opposite assumption: that no RTL expression 17202object of a certain kind appears in more than one place in the 17203containing structure. 17204 17205 These assumptions refer to a single function; except for the RTL 17206objects that describe global variables and external functions, and a few 17207standard objects such as small integer constants, no RTL objects are 17208common to two functions. 17209 17210 * Each pseudo-register has only a single 'reg' object to represent 17211 it, and therefore only a single machine mode. 17212 17213 * For any symbolic label, there is only one 'symbol_ref' object 17214 referring to it. 17215 17216 * All 'const_int' expressions with equal values are shared. 17217 17218 * There is only one 'pc' expression. 17219 17220 * There is only one 'cc0' expression. 17221 17222 * There is only one 'const_double' expression with value 0 for each 17223 floating point mode. Likewise for values 1 and 2. 17224 17225 * There is only one 'const_vector' expression with value 0 for each 17226 vector mode, be it an integer or a double constant vector. 17227 17228 * No 'label_ref' or 'scratch' appears in more than one place in the 17229 RTL structure; in other words, it is safe to do a tree-walk of all 17230 the insns in the function and assume that each time a 'label_ref' 17231 or 'scratch' is seen it is distinct from all others that are seen. 17232 17233 * Only one 'mem' object is normally created for each static variable 17234 or stack slot, so these objects are frequently shared in all the 17235 places they appear. However, separate but equal objects for these 17236 variables are occasionally made. 17237 17238 * When a single 'asm' statement has multiple output operands, a 17239 distinct 'asm_operands' expression is made for each output operand. 17240 However, these all share the vector which contains the sequence of 17241 input operands. This sharing is used later on to test whether two 17242 'asm_operands' expressions come from the same statement, so all 17243 optimizations must carefully preserve the sharing if they copy the 17244 vector at all. 17245 17246 * No RTL object appears in more than one place in the RTL structure 17247 except as described above. Many passes of the compiler rely on 17248 this by assuming that they can modify RTL objects in place without 17249 unwanted side-effects on other insns. 17250 17251 * During initial RTL generation, shared structure is freely 17252 introduced. After all the RTL for a function has been generated, 17253 all shared structure is copied by 'unshare_all_rtl' in 17254 'emit-rtl.c', after which the above rules are guaranteed to be 17255 followed. 17256 17257 * During the combiner pass, shared structure within an insn can exist 17258 temporarily. However, the shared structure is copied before the 17259 combiner is finished with the insn. This is done by calling 17260 'copy_rtx_if_shared', which is a subroutine of 'unshare_all_rtl'. 17261 17262 17263File: gccint.info, Node: Reading RTL, Prev: Sharing, Up: RTL 17264 1726513.22 Reading RTL 17266================= 17267 17268To read an RTL object from a file, call 'read_rtx'. It takes one 17269argument, a stdio stream, and returns a single RTL object. This routine 17270is defined in 'read-rtl.c'. It is not available in the compiler itself, 17271only the various programs that generate the compiler back end from the 17272machine description. 17273 17274 People frequently have the idea of using RTL stored as text in a file 17275as an interface between a language front end and the bulk of GCC. This 17276idea is not feasible. 17277 17278 GCC was designed to use RTL internally only. Correct RTL for a given 17279program is very dependent on the particular target machine. And the RTL 17280does not contain all the information about the program. 17281 17282 The proper way to interface GCC to a new language front end is with the 17283"tree" data structure, described in the files 'tree.h' and 'tree.def'. 17284The documentation for this structure (*note GENERIC::) is incomplete. 17285 17286 17287File: gccint.info, Node: Control Flow, Next: Loop Analysis and Representation, Prev: RTL, Up: Top 17288 1728914 Control Flow Graph 17290********************* 17291 17292A control flow graph (CFG) is a data structure built on top of the 17293intermediate code representation (the RTL or 'GIMPLE' instruction 17294stream) abstracting the control flow behavior of a function that is 17295being compiled. The CFG is a directed graph where the vertices 17296represent basic blocks and edges represent possible transfer of control 17297flow from one basic block to another. The data structures used to 17298represent the control flow graph are defined in 'basic-block.h'. 17299 17300 In GCC, the representation of control flow is maintained throughout the 17301compilation process, from constructing the CFG early in 'pass_build_cfg' 17302to 'pass_free_cfg' (see 'passes.def'). The CFG takes various different 17303modes and may undergo extensive manipulations, but the graph is always 17304valid between its construction and its release. This way, transfer of 17305information such as data flow, a measured profile, or the loop tree, can 17306be propagated through the passes pipeline, and even from 'GIMPLE' to 17307'RTL'. 17308 17309 Often the CFG may be better viewed as integral part of instruction 17310chain, than structure built on the top of it. Updating the compiler's 17311intermediate representation for instructions can not be easily done 17312without proper maintenance of the CFG simultaneously. 17313 17314* Menu: 17315 17316* Basic Blocks:: The definition and representation of basic blocks. 17317* Edges:: Types of edges and their representation. 17318* Profile information:: Representation of frequencies and probabilities. 17319* Maintaining the CFG:: Keeping the control flow graph and up to date. 17320* Liveness information:: Using and maintaining liveness information. 17321 17322 17323File: gccint.info, Node: Basic Blocks, Next: Edges, Up: Control Flow 17324 1732514.1 Basic Blocks 17326================= 17327 17328A basic block is a straight-line sequence of code with only one entry 17329point and only one exit. In GCC, basic blocks are represented using the 17330'basic_block' data type. 17331 17332 Special basic blocks represent possible entry and exit points of a 17333function. These blocks are called 'ENTRY_BLOCK_PTR' and 17334'EXIT_BLOCK_PTR'. These blocks do not contain any code. 17335 17336 The 'BASIC_BLOCK' array contains all basic blocks in an unspecified 17337order. Each 'basic_block' structure has a field that holds a unique 17338integer identifier 'index' that is the index of the block in the 17339'BASIC_BLOCK' array. The total number of basic blocks in the function 17340is 'n_basic_blocks'. Both the basic block indices and the total number 17341of basic blocks may vary during the compilation process, as passes 17342reorder, create, duplicate, and destroy basic blocks. The index for any 17343block should never be greater than 'last_basic_block'. The indices 0 17344and 1 are special codes reserved for 'ENTRY_BLOCK' and 'EXIT_BLOCK', the 17345indices of 'ENTRY_BLOCK_PTR' and 'EXIT_BLOCK_PTR'. 17346 17347 Two pointer members of the 'basic_block' structure are the pointers 17348'next_bb' and 'prev_bb'. These are used to keep doubly linked chain of 17349basic blocks in the same order as the underlying instruction stream. 17350The chain of basic blocks is updated transparently by the provided API 17351for manipulating the CFG. The macro 'FOR_EACH_BB' can be used to visit 17352all the basic blocks in lexicographical order, except 'ENTRY_BLOCK' and 17353'EXIT_BLOCK'. The macro 'FOR_ALL_BB' also visits all basic blocks in 17354lexicographical order, including 'ENTRY_BLOCK' and 'EXIT_BLOCK'. 17355 17356 The functions 'post_order_compute' and 'inverted_post_order_compute' 17357can be used to compute topological orders of the CFG. The orders are 17358stored as vectors of basic block indices. The 'BASIC_BLOCK' array can 17359be used to iterate each basic block by index. Dominator traversals are 17360also possible using 'walk_dominator_tree'. Given two basic blocks A and 17361B, block A dominates block B if A is _always_ executed before B. 17362 17363 Each 'basic_block' also contains pointers to the first instruction (the 17364"head") and the last instruction (the "tail") or "end" of the 17365instruction stream contained in a basic block. In fact, since the 17366'basic_block' data type is used to represent blocks in both major 17367intermediate representations of GCC ('GIMPLE' and RTL), there are 17368pointers to the head and end of a basic block for both representations, 17369stored in intermediate representation specific data in the 'il' field of 17370'struct basic_block_def'. 17371 17372 For RTL, these pointers are 'BB_HEAD' and 'BB_END'. 17373 17374 In the RTL representation of a function, the instruction stream 17375contains not only the "real" instructions, but also "notes" or "insn 17376notes" (to distinguish them from "reg notes"). Any function that moves 17377or duplicates the basic blocks needs to take care of updating of these 17378notes. Many of these notes expect that the instruction stream consists 17379of linear regions, so updating can sometimes be tedious. All types of 17380insn notes are defined in 'insn-notes.def'. 17381 17382 In the RTL function representation, the instructions contained in a 17383basic block always follow a 'NOTE_INSN_BASIC_BLOCK', but zero or more 17384'CODE_LABEL' nodes can precede the block note. A basic block ends with 17385a control flow instruction or with the last instruction before the next 17386'CODE_LABEL' or 'NOTE_INSN_BASIC_BLOCK'. By definition, a 'CODE_LABEL' 17387cannot appear in the middle of the instruction stream of a basic block. 17388 17389 In addition to notes, the jump table vectors are also represented as 17390"pseudo-instructions" inside the insn stream. These vectors never 17391appear in the basic block and should always be placed just after the 17392table jump instructions referencing them. After removing the table-jump 17393it is often difficult to eliminate the code computing the address and 17394referencing the vector, so cleaning up these vectors is postponed until 17395after liveness analysis. Thus the jump table vectors may appear in the 17396insn stream unreferenced and without any purpose. Before any edge is 17397made "fall-thru", the existence of such construct in the way needs to be 17398checked by calling 'can_fallthru' function. 17399 17400 For the 'GIMPLE' representation, the PHI nodes and statements contained 17401in a basic block are in a 'gimple_seq' pointed to by the basic block 17402intermediate language specific pointers. Abstract containers and 17403iterators are used to access the PHI nodes and statements in a basic 17404blocks. These iterators are called "GIMPLE statement iterators" (GSIs). 17405Grep for '^gsi' in the various 'gimple-*' and 'tree-*' files. There is 17406a 'gimple_stmt_iterator' type for iterating over all kinds of statement, 17407and a 'gphi_iterator' subclass for iterating over PHI nodes. The 17408following snippet will pretty-print all PHI nodes the statements of the 17409current function in the GIMPLE representation. 17410 17411 basic_block bb; 17412 17413 FOR_EACH_BB (bb) 17414 { 17415 gphi_iterator pi; 17416 gimple_stmt_iterator si; 17417 17418 for (pi = gsi_start_phis (bb); !gsi_end_p (pi); gsi_next (&pi)) 17419 { 17420 gphi *phi = pi.phi (); 17421 print_gimple_stmt (dump_file, phi, 0, TDF_SLIM); 17422 } 17423 for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si)) 17424 { 17425 gimple stmt = gsi_stmt (si); 17426 print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); 17427 } 17428 } 17429 17430 17431File: gccint.info, Node: Edges, Next: Profile information, Prev: Basic Blocks, Up: Control Flow 17432 1743314.2 Edges 17434========== 17435 17436Edges represent possible control flow transfers from the end of some 17437basic block A to the head of another basic block B. We say that A is a 17438predecessor of B, and B is a successor of A. Edges are represented in 17439GCC with the 'edge' data type. Each 'edge' acts as a link between two 17440basic blocks: The 'src' member of an edge points to the predecessor 17441basic block of the 'dest' basic block. The members 'preds' and 'succs' 17442of the 'basic_block' data type point to type-safe vectors of edges to 17443the predecessors and successors of the block. 17444 17445 When walking the edges in an edge vector, "edge iterators" should be 17446used. Edge iterators are constructed using the 'edge_iterator' data 17447structure and several methods are available to operate on them: 17448 17449'ei_start' 17450 This function initializes an 'edge_iterator' that points to the 17451 first edge in a vector of edges. 17452 17453'ei_last' 17454 This function initializes an 'edge_iterator' that points to the 17455 last edge in a vector of edges. 17456 17457'ei_end_p' 17458 This predicate is 'true' if an 'edge_iterator' represents the last 17459 edge in an edge vector. 17460 17461'ei_one_before_end_p' 17462 This predicate is 'true' if an 'edge_iterator' represents the 17463 second last edge in an edge vector. 17464 17465'ei_next' 17466 This function takes a pointer to an 'edge_iterator' and makes it 17467 point to the next edge in the sequence. 17468 17469'ei_prev' 17470 This function takes a pointer to an 'edge_iterator' and makes it 17471 point to the previous edge in the sequence. 17472 17473'ei_edge' 17474 This function returns the 'edge' currently pointed to by an 17475 'edge_iterator'. 17476 17477'ei_safe_safe' 17478 This function returns the 'edge' currently pointed to by an 17479 'edge_iterator', but returns 'NULL' if the iterator is pointing at 17480 the end of the sequence. This function has been provided for 17481 existing code makes the assumption that a 'NULL' edge indicates the 17482 end of the sequence. 17483 17484 The convenience macro 'FOR_EACH_EDGE' can be used to visit all of the 17485edges in a sequence of predecessor or successor edges. It must not be 17486used when an element might be removed during the traversal, otherwise 17487elements will be missed. Here is an example of how to use the macro: 17488 17489 edge e; 17490 edge_iterator ei; 17491 17492 FOR_EACH_EDGE (e, ei, bb->succs) 17493 { 17494 if (e->flags & EDGE_FALLTHRU) 17495 break; 17496 } 17497 17498 There are various reasons why control flow may transfer from one block 17499to another. One possibility is that some instruction, for example a 17500'CODE_LABEL', in a linearized instruction stream just always starts a 17501new basic block. In this case a "fall-thru" edge links the basic block 17502to the first following basic block. But there are several other reasons 17503why edges may be created. The 'flags' field of the 'edge' data type is 17504used to store information about the type of edge we are dealing with. 17505Each edge is of one of the following types: 17506 17507_jump_ 17508 No type flags are set for edges corresponding to jump instructions. 17509 These edges are used for unconditional or conditional jumps and in 17510 RTL also for table jumps. They are the easiest to manipulate as 17511 they may be freely redirected when the flow graph is not in SSA 17512 form. 17513 17514_fall-thru_ 17515 Fall-thru edges are present in case where the basic block may 17516 continue execution to the following one without branching. These 17517 edges have the 'EDGE_FALLTHRU' flag set. Unlike other types of 17518 edges, these edges must come into the basic block immediately 17519 following in the instruction stream. The function 17520 'force_nonfallthru' is available to insert an unconditional jump in 17521 the case that redirection is needed. Note that this may require 17522 creation of a new basic block. 17523 17524_exception handling_ 17525 Exception handling edges represent possible control transfers from 17526 a trapping instruction to an exception handler. The definition of 17527 "trapping" varies. In C++, only function calls can throw, but for 17528 Java and Ada, exceptions like division by zero or segmentation 17529 fault are defined and thus each instruction possibly throwing this 17530 kind of exception needs to be handled as control flow instruction. 17531 Exception edges have the 'EDGE_ABNORMAL' and 'EDGE_EH' flags set. 17532 17533 When updating the instruction stream it is easy to change possibly 17534 trapping instruction to non-trapping, by simply removing the 17535 exception edge. The opposite conversion is difficult, but should 17536 not happen anyway. The edges can be eliminated via 17537 'purge_dead_edges' call. 17538 17539 In the RTL representation, the destination of an exception edge is 17540 specified by 'REG_EH_REGION' note attached to the insn. In case of 17541 a trapping call the 'EDGE_ABNORMAL_CALL' flag is set too. In the 17542 'GIMPLE' representation, this extra flag is not set. 17543 17544 In the RTL representation, the predicate 'may_trap_p' may be used 17545 to check whether instruction still may trap or not. For the tree 17546 representation, the 'tree_could_trap_p' predicate is available, but 17547 this predicate only checks for possible memory traps, as in 17548 dereferencing an invalid pointer location. 17549 17550_sibling calls_ 17551 Sibling calls or tail calls terminate the function in a 17552 non-standard way and thus an edge to the exit must be present. 17553 'EDGE_SIBCALL' and 'EDGE_ABNORMAL' are set in such case. These 17554 edges only exist in the RTL representation. 17555 17556_computed jumps_ 17557 Computed jumps contain edges to all labels in the function 17558 referenced from the code. All those edges have 'EDGE_ABNORMAL' 17559 flag set. The edges used to represent computed jumps often cause 17560 compile time performance problems, since functions consisting of 17561 many taken labels and many computed jumps may have _very_ dense 17562 flow graphs, so these edges need to be handled with special care. 17563 During the earlier stages of the compilation process, GCC tries to 17564 avoid such dense flow graphs by factoring computed jumps. For 17565 example, given the following series of jumps, 17566 17567 goto *x; 17568 [ ... ] 17569 17570 goto *x; 17571 [ ... ] 17572 17573 goto *x; 17574 [ ... ] 17575 17576 factoring the computed jumps results in the following code sequence 17577 which has a much simpler flow graph: 17578 17579 goto y; 17580 [ ... ] 17581 17582 goto y; 17583 [ ... ] 17584 17585 goto y; 17586 [ ... ] 17587 17588 y: 17589 goto *x; 17590 17591 However, the classic problem with this transformation is that it 17592 has a runtime cost in there resulting code: An extra jump. 17593 Therefore, the computed jumps are un-factored in the later passes 17594 of the compiler (in the pass called 17595 'pass_duplicate_computed_gotos'). Be aware of that when you work 17596 on passes in that area. There have been numerous examples already 17597 where the compile time for code with unfactored computed jumps 17598 caused some serious headaches. 17599 17600_nonlocal goto handlers_ 17601 GCC allows nested functions to return into caller using a 'goto' to 17602 a label passed to as an argument to the callee. The labels passed 17603 to nested functions contain special code to cleanup after function 17604 call. Such sections of code are referred to as "nonlocal goto 17605 receivers". If a function contains such nonlocal goto receivers, 17606 an edge from the call to the label is created with the 17607 'EDGE_ABNORMAL' and 'EDGE_ABNORMAL_CALL' flags set. 17608 17609_function entry points_ 17610 By definition, execution of function starts at basic block 0, so 17611 there is always an edge from the 'ENTRY_BLOCK_PTR' to basic block 17612 0. There is no 'GIMPLE' representation for alternate entry points 17613 at this moment. In RTL, alternate entry points are specified by 17614 'CODE_LABEL' with 'LABEL_ALTERNATE_NAME' defined. This feature is 17615 currently used for multiple entry point prologues and is limited to 17616 post-reload passes only. This can be used by back-ends to emit 17617 alternate prologues for functions called from different contexts. 17618 In future full support for multiple entry functions defined by 17619 Fortran 90 needs to be implemented. 17620 17621_function exits_ 17622 In the pre-reload representation a function terminates after the 17623 last instruction in the insn chain and no explicit return 17624 instructions are used. This corresponds to the fall-thru edge into 17625 exit block. After reload, optimal RTL epilogues are used that use 17626 explicit (conditional) return instructions that are represented by 17627 edges with no flags set. 17628 17629 17630File: gccint.info, Node: Profile information, Next: Maintaining the CFG, Prev: Edges, Up: Control Flow 17631 1763214.3 Profile information 17633======================== 17634 17635In many cases a compiler must make a choice whether to trade speed in 17636one part of code for speed in another, or to trade code size for code 17637speed. In such cases it is useful to know information about how often 17638some given block will be executed. That is the purpose for maintaining 17639profile within the flow graph. GCC can handle profile information 17640obtained through "profile feedback", but it can also estimate branch 17641probabilities based on statics and heuristics. 17642 17643 The feedback based profile is produced by compiling the program with 17644instrumentation, executing it on a train run and reading the numbers of 17645executions of basic blocks and edges back to the compiler while 17646re-compiling the program to produce the final executable. This method 17647provides very accurate information about where a program spends most of 17648its time on the train run. Whether it matches the average run of course 17649depends on the choice of train data set, but several studies have shown 17650that the behavior of a program usually changes just marginally over 17651different data sets. 17652 17653 When profile feedback is not available, the compiler may be asked to 17654attempt to predict the behavior of each branch in the program using a 17655set of heuristics (see 'predict.def' for details) and compute estimated 17656frequencies of each basic block by propagating the probabilities over 17657the graph. 17658 17659 Each 'basic_block' contains two integer fields to represent profile 17660information: 'frequency' and 'count'. The 'frequency' is an estimation 17661how often is basic block executed within a function. It is represented 17662as an integer scaled in the range from 0 to 'BB_FREQ_BASE'. The most 17663frequently executed basic block in function is initially set to 17664'BB_FREQ_BASE' and the rest of frequencies are scaled accordingly. 17665During optimization, the frequency of the most frequent basic block can 17666both decrease (for instance by loop unrolling) or grow (for instance by 17667cross-jumping optimization), so scaling sometimes has to be performed 17668multiple times. 17669 17670 The 'count' contains hard-counted numbers of execution measured during 17671training runs and is nonzero only when profile feedback is available. 17672This value is represented as the host's widest integer (typically a 64 17673bit integer) of the special type 'gcov_type'. 17674 17675 Most optimization passes can use only the frequency information of a 17676basic block, but a few passes may want to know hard execution counts. 17677The frequencies should always match the counts after scaling, however 17678during updating of the profile information numerical error may 17679accumulate into quite large errors. 17680 17681 Each edge also contains a branch probability field: an integer in the 17682range from 0 to 'REG_BR_PROB_BASE'. It represents probability of 17683passing control from the end of the 'src' basic block to the 'dest' 17684basic block, i.e. the probability that control will flow along this 17685edge. The 'EDGE_FREQUENCY' macro is available to compute how frequently 17686a given edge is taken. There is a 'count' field for each edge as well, 17687representing same information as for a basic block. 17688 17689 The basic block frequencies are not represented in the instruction 17690stream, but in the RTL representation the edge frequencies are 17691represented for conditional jumps (via the 'REG_BR_PROB' macro) since 17692they are used when instructions are output to the assembly file and the 17693flow graph is no longer maintained. 17694 17695 The probability that control flow arrives via a given edge to its 17696destination basic block is called "reverse probability" and is not 17697directly represented, but it may be easily computed from frequencies of 17698basic blocks. 17699 17700 Updating profile information is a delicate task that can unfortunately 17701not be easily integrated with the CFG manipulation API. Many of the 17702functions and hooks to modify the CFG, such as 17703'redirect_edge_and_branch', do not have enough information to easily 17704update the profile, so updating it is in the majority of cases left up 17705to the caller. It is difficult to uncover bugs in the profile updating 17706code, because they manifest themselves only by producing worse code, and 17707checking profile consistency is not possible because of numeric error 17708accumulation. Hence special attention needs to be given to this issue 17709in each pass that modifies the CFG. 17710 17711 It is important to point out that 'REG_BR_PROB_BASE' and 'BB_FREQ_BASE' 17712are both set low enough to be possible to compute second power of any 17713frequency or probability in the flow graph, it is not possible to even 17714square the 'count' field, as modern CPUs are fast enough to execute 17715$2^32$ operations quickly. 17716 17717 17718File: gccint.info, Node: Maintaining the CFG, Next: Liveness information, Prev: Profile information, Up: Control Flow 17719 1772014.4 Maintaining the CFG 17721======================== 17722 17723An important task of each compiler pass is to keep both the control flow 17724graph and all profile information up-to-date. Reconstruction of the 17725control flow graph after each pass is not an option, since it may be 17726very expensive and lost profile information cannot be reconstructed at 17727all. 17728 17729 GCC has two major intermediate representations, and both use the 17730'basic_block' and 'edge' data types to represent control flow. Both 17731representations share as much of the CFG maintenance code as possible. 17732For each representation, a set of "hooks" is defined so that each 17733representation can provide its own implementation of CFG manipulation 17734routines when necessary. These hooks are defined in 'cfghooks.h'. 17735There are hooks for almost all common CFG manipulations, including block 17736splitting and merging, edge redirection and creating and deleting basic 17737blocks. These hooks should provide everything you need to maintain and 17738manipulate the CFG in both the RTL and 'GIMPLE' representation. 17739 17740 At the moment, the basic block boundaries are maintained transparently 17741when modifying instructions, so there rarely is a need to move them 17742manually (such as in case someone wants to output instruction outside 17743basic block explicitly). 17744 17745 In the RTL representation, each instruction has a 'BLOCK_FOR_INSN' 17746value that represents pointer to the basic block that contains the 17747instruction. In the 'GIMPLE' representation, the function 'gimple_bb' 17748returns a pointer to the basic block containing the queried statement. 17749 17750 When changes need to be applied to a function in its 'GIMPLE' 17751representation, "GIMPLE statement iterators" should be used. These 17752iterators provide an integrated abstraction of the flow graph and the 17753instruction stream. Block statement iterators are constructed using the 17754'gimple_stmt_iterator' data structure and several modifiers are 17755available, including the following: 17756 17757'gsi_start' 17758 This function initializes a 'gimple_stmt_iterator' that points to 17759 the first non-empty statement in a basic block. 17760 17761'gsi_last' 17762 This function initializes a 'gimple_stmt_iterator' that points to 17763 the last statement in a basic block. 17764 17765'gsi_end_p' 17766 This predicate is 'true' if a 'gimple_stmt_iterator' represents the 17767 end of a basic block. 17768 17769'gsi_next' 17770 This function takes a 'gimple_stmt_iterator' and makes it point to 17771 its successor. 17772 17773'gsi_prev' 17774 This function takes a 'gimple_stmt_iterator' and makes it point to 17775 its predecessor. 17776 17777'gsi_insert_after' 17778 This function inserts a statement after the 'gimple_stmt_iterator' 17779 passed in. The final parameter determines whether the statement 17780 iterator is updated to point to the newly inserted statement, or 17781 left pointing to the original statement. 17782 17783'gsi_insert_before' 17784 This function inserts a statement before the 'gimple_stmt_iterator' 17785 passed in. The final parameter determines whether the statement 17786 iterator is updated to point to the newly inserted statement, or 17787 left pointing to the original statement. 17788 17789'gsi_remove' 17790 This function removes the 'gimple_stmt_iterator' passed in and 17791 rechains the remaining statements in a basic block, if any. 17792 17793 In the RTL representation, the macros 'BB_HEAD' and 'BB_END' may be 17794used to get the head and end 'rtx' of a basic block. No abstract 17795iterators are defined for traversing the insn chain, but you can just 17796use 'NEXT_INSN' and 'PREV_INSN' instead. *Note Insns::. 17797 17798 Usually a code manipulating pass simplifies the instruction stream and 17799the flow of control, possibly eliminating some edges. This may for 17800example happen when a conditional jump is replaced with an unconditional 17801jump, but also when simplifying possibly trapping instruction to 17802non-trapping while compiling Java. Updating of edges is not transparent 17803and each optimization pass is required to do so manually. However only 17804few cases occur in practice. The pass may call 'purge_dead_edges' on a 17805given basic block to remove superfluous edges, if any. 17806 17807 Another common scenario is redirection of branch instructions, but this 17808is best modeled as redirection of edges in the control flow graph and 17809thus use of 'redirect_edge_and_branch' is preferred over more low level 17810functions, such as 'redirect_jump' that operate on RTL chain only. The 17811CFG hooks defined in 'cfghooks.h' should provide the complete API 17812required for manipulating and maintaining the CFG. 17813 17814 It is also possible that a pass has to insert control flow instruction 17815into the middle of a basic block, thus creating an entry point in the 17816middle of the basic block, which is impossible by definition: The block 17817must be split to make sure it only has one entry point, i.e. the head of 17818the basic block. The CFG hook 'split_block' may be used when an 17819instruction in the middle of a basic block has to become the target of a 17820jump or branch instruction. 17821 17822 For a global optimizer, a common operation is to split edges in the 17823flow graph and insert instructions on them. In the RTL representation, 17824this can be easily done using the 'insert_insn_on_edge' function that 17825emits an instruction "on the edge", caching it for a later 17826'commit_edge_insertions' call that will take care of moving the inserted 17827instructions off the edge into the instruction stream contained in a 17828basic block. This includes the creation of new basic blocks where 17829needed. In the 'GIMPLE' representation, the equivalent functions are 17830'gsi_insert_on_edge' which inserts a block statement iterator on an 17831edge, and 'gsi_commit_edge_inserts' which flushes the instruction to 17832actual instruction stream. 17833 17834 While debugging the optimization pass, the 'verify_flow_info' function 17835may be useful to find bugs in the control flow graph updating code. 17836 17837 17838File: gccint.info, Node: Liveness information, Prev: Maintaining the CFG, Up: Control Flow 17839 1784014.5 Liveness information 17841========================= 17842 17843Liveness information is useful to determine whether some register is 17844"live" at given point of program, i.e. that it contains a value that may 17845be used at a later point in the program. This information is used, for 17846instance, during register allocation, as the pseudo registers only need 17847to be assigned to a unique hard register or to a stack slot if they are 17848live. The hard registers and stack slots may be freely reused for other 17849values when a register is dead. 17850 17851 Liveness information is available in the back end starting with 17852'pass_df_initialize' and ending with 'pass_df_finish'. Three flavors of 17853live analysis are available: With 'LR', it is possible to determine at 17854any point 'P' in the function if the register may be used on some path 17855from 'P' to the end of the function. With 'UR', it is possible to 17856determine if there is a path from the beginning of the function to 'P' 17857that defines the variable. 'LIVE' is the intersection of the 'LR' and 17858'UR' and a variable is live at 'P' if there is both an assignment that 17859reaches it from the beginning of the function and a use that can be 17860reached on some path from 'P' to the end of the function. 17861 17862 In general 'LIVE' is the most useful of the three. The macros 17863'DF_[LR,UR,LIVE]_[IN,OUT]' can be used to access this information. The 17864macros take a basic block number and return a bitmap that is indexed by 17865the register number. This information is only guaranteed to be up to 17866date after calls are made to 'df_analyze'. See the file 'df-core.c' for 17867details on using the dataflow. 17868 17869 The liveness information is stored partly in the RTL instruction stream 17870and partly in the flow graph. Local information is stored in the 17871instruction stream: Each instruction may contain 'REG_DEAD' notes 17872representing that the value of a given register is no longer needed, or 17873'REG_UNUSED' notes representing that the value computed by the 17874instruction is never used. The second is useful for instructions 17875computing multiple values at once. 17876 17877 17878File: gccint.info, Node: Loop Analysis and Representation, Next: Machine Desc, Prev: Control Flow, Up: Top 17879 1788015 Analysis and Representation of Loops 17881*************************************** 17882 17883GCC provides extensive infrastructure for work with natural loops, i.e., 17884strongly connected components of CFG with only one entry block. This 17885chapter describes representation of loops in GCC, both on GIMPLE and in 17886RTL, as well as the interfaces to loop-related analyses (induction 17887variable analysis and number of iterations analysis). 17888 17889* Menu: 17890 17891* Loop representation:: Representation and analysis of loops. 17892* Loop querying:: Getting information about loops. 17893* Loop manipulation:: Loop manipulation functions. 17894* LCSSA:: Loop-closed SSA form. 17895* Scalar evolutions:: Induction variables on GIMPLE. 17896* loop-iv:: Induction variables on RTL. 17897* Number of iterations:: Number of iterations analysis. 17898* Dependency analysis:: Data dependency analysis. 17899 17900 17901File: gccint.info, Node: Loop representation, Next: Loop querying, Up: Loop Analysis and Representation 17902 1790315.1 Loop representation 17904======================== 17905 17906This chapter describes the representation of loops in GCC, and functions 17907that can be used to build, modify and analyze this representation. Most 17908of the interfaces and data structures are declared in 'cfgloop.h'. Loop 17909structures are analyzed and this information disposed or updated at the 17910discretion of individual passes. Still most of the generic CFG 17911manipulation routines are aware of loop structures and try to keep them 17912up-to-date. By this means an increasing part of the compilation 17913pipeline is setup to maintain loop structure across passes to allow 17914attaching meta information to individual loops for consumption by later 17915passes. 17916 17917 In general, a natural loop has one entry block (header) and possibly 17918several back edges (latches) leading to the header from the inside of 17919the loop. Loops with several latches may appear if several loops share 17920a single header, or if there is a branching in the middle of the loop. 17921The representation of loops in GCC however allows only loops with a 17922single latch. During loop analysis, headers of such loops are split and 17923forwarder blocks are created in order to disambiguate their structures. 17924Heuristic based on profile information and structure of the induction 17925variables in the loops is used to determine whether the latches 17926correspond to sub-loops or to control flow in a single loop. This means 17927that the analysis sometimes changes the CFG, and if you run it in the 17928middle of an optimization pass, you must be able to deal with the new 17929blocks. You may avoid CFG changes by passing 17930'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' flag to the loop discovery, note 17931however that most other loop manipulation functions will not work 17932correctly for loops with multiple latch edges (the functions that only 17933query membership of blocks to loops and subloop relationships, or 17934enumerate and test loop exits, can be expected to work). 17935 17936 Body of the loop is the set of blocks that are dominated by its header, 17937and reachable from its latch against the direction of edges in CFG. The 17938loops are organized in a containment hierarchy (tree) such that all the 17939loops immediately contained inside loop L are the children of L in the 17940tree. This tree is represented by the 'struct loops' structure. The 17941root of this tree is a fake loop that contains all blocks in the 17942function. Each of the loops is represented in a 'struct loop' 17943structure. Each loop is assigned an index ('num' field of the 'struct 17944loop' structure), and the pointer to the loop is stored in the 17945corresponding field of the 'larray' vector in the loops structure. The 17946indices do not have to be continuous, there may be empty ('NULL') 17947entries in the 'larray' created by deleting loops. Also, there is no 17948guarantee on the relative order of a loop and its subloops in the 17949numbering. The index of a loop never changes. 17950 17951 The entries of the 'larray' field should not be accessed directly. The 17952function 'get_loop' returns the loop description for a loop with the 17953given index. 'number_of_loops' function returns number of loops in the 17954function. To traverse all loops, use 'FOR_EACH_LOOP' macro. The 17955'flags' argument of the macro is used to determine the direction of 17956traversal and the set of loops visited. Each loop is guaranteed to be 17957visited exactly once, regardless of the changes to the loop tree, and 17958the loops may be removed during the traversal. The newly created loops 17959are never traversed, if they need to be visited, this must be done 17960separately after their creation. The 'FOR_EACH_LOOP' macro allocates 17961temporary variables. If the 'FOR_EACH_LOOP' loop were ended using break 17962or goto, they would not be released; 'FOR_EACH_LOOP_BREAK' macro must be 17963used instead. 17964 17965 Each basic block contains the reference to the innermost loop it 17966belongs to ('loop_father'). For this reason, it is only possible to 17967have one 'struct loops' structure initialized at the same time for each 17968CFG. The global variable 'current_loops' contains the 'struct loops' 17969structure. Many of the loop manipulation functions assume that 17970dominance information is up-to-date. 17971 17972 The loops are analyzed through 'loop_optimizer_init' function. The 17973argument of this function is a set of flags represented in an integer 17974bitmask. These flags specify what other properties of the loop 17975structures should be calculated/enforced and preserved later: 17976 17977 * 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES': If this flag is set, no changes 17978 to CFG will be performed in the loop analysis, in particular, loops 17979 with multiple latch edges will not be disambiguated. If a loop has 17980 multiple latches, its latch block is set to NULL. Most of the loop 17981 manipulation functions will not work for loops in this shape. No 17982 other flags that require CFG changes can be passed to 17983 loop_optimizer_init. 17984 * 'LOOPS_HAVE_PREHEADERS': Forwarder blocks are created in such a way 17985 that each loop has only one entry edge, and additionally, the 17986 source block of this entry edge has only one successor. This 17987 creates a natural place where the code can be moved out of the 17988 loop, and ensures that the entry edge of the loop leads from its 17989 immediate super-loop. 17990 * 'LOOPS_HAVE_SIMPLE_LATCHES': Forwarder blocks are created to force 17991 the latch block of each loop to have only one successor. This 17992 ensures that the latch of the loop does not belong to any of its 17993 sub-loops, and makes manipulation with the loops significantly 17994 easier. Most of the loop manipulation functions assume that the 17995 loops are in this shape. Note that with this flag, the "normal" 17996 loop without any control flow inside and with one exit consists of 17997 two basic blocks. 17998 * 'LOOPS_HAVE_MARKED_IRREDUCIBLE_REGIONS': Basic blocks and edges in 17999 the strongly connected components that are not natural loops (have 18000 more than one entry block) are marked with 'BB_IRREDUCIBLE_LOOP' 18001 and 'EDGE_IRREDUCIBLE_LOOP' flags. The flag is not set for blocks 18002 and edges that belong to natural loops that are in such an 18003 irreducible region (but it is set for the entry and exit edges of 18004 such a loop, if they lead to/from this region). 18005 * 'LOOPS_HAVE_RECORDED_EXITS': The lists of exits are recorded and 18006 updated for each loop. This makes some functions (e.g., 18007 'get_loop_exit_edges') more efficient. Some functions (e.g., 18008 'single_exit') can be used only if the lists of exits are recorded. 18009 18010 These properties may also be computed/enforced later, using functions 18011'create_preheaders', 'force_single_succ_latches', 18012'mark_irreducible_loops' and 'record_loop_exits'. The properties can be 18013queried using 'loops_state_satisfies_p'. 18014 18015 The memory occupied by the loops structures should be freed with 18016'loop_optimizer_finalize' function. When loop structures are setup to 18017be preserved across passes this function reduces the information to be 18018kept up-to-date to a minimum (only 'LOOPS_MAY_HAVE_MULTIPLE_LATCHES' 18019set). 18020 18021 The CFG manipulation functions in general do not update loop 18022structures. Specialized versions that additionally do so are provided 18023for the most common tasks. On GIMPLE, 'cleanup_tree_cfg_loop' function 18024can be used to cleanup CFG while updating the loops structures if 18025'current_loops' is set. 18026 18027 At the moment loop structure is preserved from the start of GIMPLE loop 18028optimizations until the end of RTL loop optimizations. During this time 18029a loop can be tracked by its 'struct loop' and number. 18030 18031 18032File: gccint.info, Node: Loop querying, Next: Loop manipulation, Prev: Loop representation, Up: Loop Analysis and Representation 18033 1803415.2 Loop querying 18035================== 18036 18037The functions to query the information about loops are declared in 18038'cfgloop.h'. Some of the information can be taken directly from the 18039structures. 'loop_father' field of each basic block contains the 18040innermost loop to that the block belongs. The most useful fields of 18041loop structure (that are kept up-to-date at all times) are: 18042 18043 * 'header', 'latch': Header and latch basic blocks of the loop. 18044 * 'num_nodes': Number of basic blocks in the loop (including the 18045 basic blocks of the sub-loops). 18046 * 'outer', 'inner', 'next': The super-loop, the first sub-loop, and 18047 the sibling of the loop in the loops tree. 18048 18049 There are other fields in the loop structures, many of them used only 18050by some of the passes, or not updated during CFG changes; in general, 18051they should not be accessed directly. 18052 18053 The most important functions to query loop structures are: 18054 18055 * 'loop_depth': The depth of the loop in the loops tree, i.e., the 18056 number of super-loops of the loop. 18057 * 'flow_loops_dump': Dumps the information about loops to a file. 18058 * 'verify_loop_structure': Checks consistency of the loop structures. 18059 * 'loop_latch_edge': Returns the latch edge of a loop. 18060 * 'loop_preheader_edge': If loops have preheaders, returns the 18061 preheader edge of a loop. 18062 * 'flow_loop_nested_p': Tests whether loop is a sub-loop of another 18063 loop. 18064 * 'flow_bb_inside_loop_p': Tests whether a basic block belongs to a 18065 loop (including its sub-loops). 18066 * 'find_common_loop': Finds the common super-loop of two loops. 18067 * 'superloop_at_depth': Returns the super-loop of a loop with the 18068 given depth. 18069 * 'tree_num_loop_insns', 'num_loop_insns': Estimates the number of 18070 insns in the loop, on GIMPLE and on RTL. 18071 * 'loop_exit_edge_p': Tests whether edge is an exit from a loop. 18072 * 'mark_loop_exit_edges': Marks all exit edges of all loops with 18073 'EDGE_LOOP_EXIT' flag. 18074 * 'get_loop_body', 'get_loop_body_in_dom_order', 18075 'get_loop_body_in_bfs_order': Enumerates the basic blocks in the 18076 loop in depth-first search order in reversed CFG, ordered by 18077 dominance relation, and breath-first search order, respectively. 18078 * 'single_exit': Returns the single exit edge of the loop, or 'NULL' 18079 if the loop has more than one exit. You can only use this function 18080 if LOOPS_HAVE_MARKED_SINGLE_EXITS property is used. 18081 * 'get_loop_exit_edges': Enumerates the exit edges of a loop. 18082 * 'just_once_each_iteration_p': Returns true if the basic block is 18083 executed exactly once during each iteration of a loop (that is, it 18084 does not belong to a sub-loop, and it dominates the latch of the 18085 loop). 18086 18087 18088File: gccint.info, Node: Loop manipulation, Next: LCSSA, Prev: Loop querying, Up: Loop Analysis and Representation 18089 1809015.3 Loop manipulation 18091====================== 18092 18093The loops tree can be manipulated using the following functions: 18094 18095 * 'flow_loop_tree_node_add': Adds a node to the tree. 18096 * 'flow_loop_tree_node_remove': Removes a node from the tree. 18097 * 'add_bb_to_loop': Adds a basic block to a loop. 18098 * 'remove_bb_from_loops': Removes a basic block from loops. 18099 18100 Most low-level CFG functions update loops automatically. The following 18101functions handle some more complicated cases of CFG manipulations: 18102 18103 * 'remove_path': Removes an edge and all blocks it dominates. 18104 * 'split_loop_exit_edge': Splits exit edge of the loop, ensuring that 18105 PHI node arguments remain in the loop (this ensures that 18106 loop-closed SSA form is preserved). Only useful on GIMPLE. 18107 18108 Finally, there are some higher-level loop transformations implemented. 18109While some of them are written so that they should work on non-innermost 18110loops, they are mostly untested in that case, and at the moment, they 18111are only reliable for the innermost loops: 18112 18113 * 'create_iv': Creates a new induction variable. Only works on 18114 GIMPLE. 'standard_iv_increment_position' can be used to find a 18115 suitable place for the iv increment. 18116 * 'duplicate_loop_to_header_edge', 18117 'tree_duplicate_loop_to_header_edge': These functions (on RTL and 18118 on GIMPLE) duplicate the body of the loop prescribed number of 18119 times on one of the edges entering loop header, thus performing 18120 either loop unrolling or loop peeling. 'can_duplicate_loop_p' 18121 ('can_unroll_loop_p' on GIMPLE) must be true for the duplicated 18122 loop. 18123 * 'loop_version', 'tree_ssa_loop_version': These function create a 18124 copy of a loop, and a branch before them that selects one of them 18125 depending on the prescribed condition. This is useful for 18126 optimizations that need to verify some assumptions in runtime (one 18127 of the copies of the loop is usually left unchanged, while the 18128 other one is transformed in some way). 18129 * 'tree_unroll_loop': Unrolls the loop, including peeling the extra 18130 iterations to make the number of iterations divisible by unroll 18131 factor, updating the exit condition, and removing the exits that 18132 now cannot be taken. Works only on GIMPLE. 18133 18134 18135File: gccint.info, Node: LCSSA, Next: Scalar evolutions, Prev: Loop manipulation, Up: Loop Analysis and Representation 18136 1813715.4 Loop-closed SSA form 18138========================= 18139 18140Throughout the loop optimizations on tree level, one extra condition is 18141enforced on the SSA form: No SSA name is used outside of the loop in 18142that it is defined. The SSA form satisfying this condition is called 18143"loop-closed SSA form" - LCSSA. To enforce LCSSA, PHI nodes must be 18144created at the exits of the loops for the SSA names that are used 18145outside of them. Only the real operands (not virtual SSA names) are 18146held in LCSSA, in order to save memory. 18147 18148 There are various benefits of LCSSA: 18149 18150 * Many optimizations (value range analysis, final value replacement) 18151 are interested in the values that are defined in the loop and used 18152 outside of it, i.e., exactly those for that we create new PHI 18153 nodes. 18154 * In induction variable analysis, it is not necessary to specify the 18155 loop in that the analysis should be performed - the scalar 18156 evolution analysis always returns the results with respect to the 18157 loop in that the SSA name is defined. 18158 * It makes updating of SSA form during loop transformations simpler. 18159 Without LCSSA, operations like loop unrolling may force creation of 18160 PHI nodes arbitrarily far from the loop, while in LCSSA, the SSA 18161 form can be updated locally. However, since we only keep real 18162 operands in LCSSA, we cannot use this advantage (we could have 18163 local updating of real operands, but it is not much more efficient 18164 than to use generic SSA form updating for it as well; the amount of 18165 changes to SSA is the same). 18166 18167 However, it also means LCSSA must be updated. This is usually 18168straightforward, unless you create a new value in loop and use it 18169outside, or unless you manipulate loop exit edges (functions are 18170provided to make these manipulations simple). 18171'rewrite_into_loop_closed_ssa' is used to rewrite SSA form to LCSSA, and 18172'verify_loop_closed_ssa' to check that the invariant of LCSSA is 18173preserved. 18174 18175 18176File: gccint.info, Node: Scalar evolutions, Next: loop-iv, Prev: LCSSA, Up: Loop Analysis and Representation 18177 1817815.5 Scalar evolutions 18179====================== 18180 18181Scalar evolutions (SCEV) are used to represent results of induction 18182variable analysis on GIMPLE. They enable us to represent variables with 18183complicated behavior in a simple and consistent way (we only use it to 18184express values of polynomial induction variables, but it is possible to 18185extend it). The interfaces to SCEV analysis are declared in 18186'tree-scalar-evolution.h'. To use scalar evolutions analysis, 18187'scev_initialize' must be used. To stop using SCEV, 'scev_finalize' 18188should be used. SCEV analysis caches results in order to save time and 18189memory. This cache however is made invalid by most of the loop 18190transformations, including removal of code. If such a transformation is 18191performed, 'scev_reset' must be called to clean the caches. 18192 18193 Given an SSA name, its behavior in loops can be analyzed using the 18194'analyze_scalar_evolution' function. The returned SCEV however does not 18195have to be fully analyzed and it may contain references to other SSA 18196names defined in the loop. To resolve these (potentially recursive) 18197references, 'instantiate_parameters' or 'resolve_mixers' functions must 18198be used. 'instantiate_parameters' is useful when you use the results of 18199SCEV only for some analysis, and when you work with whole nest of loops 18200at once. It will try replacing all SSA names by their SCEV in all 18201loops, including the super-loops of the current loop, thus providing a 18202complete information about the behavior of the variable in the loop 18203nest. 'resolve_mixers' is useful if you work with only one loop at a 18204time, and if you possibly need to create code based on the value of the 18205induction variable. It will only resolve the SSA names defined in the 18206current loop, leaving the SSA names defined outside unchanged, even if 18207their evolution in the outer loops is known. 18208 18209 The SCEV is a normal tree expression, except for the fact that it may 18210contain several special tree nodes. One of them is 'SCEV_NOT_KNOWN', 18211used for SSA names whose value cannot be expressed. The other one is 18212'POLYNOMIAL_CHREC'. Polynomial chrec has three arguments - base, step 18213and loop (both base and step may contain further polynomial chrecs). 18214Type of the expression and of base and step must be the same. A 18215variable has evolution 'POLYNOMIAL_CHREC(base, step, loop)' if it is (in 18216the specified loop) equivalent to 'x_1' in the following example 18217 18218 while (...) 18219 { 18220 x_1 = phi (base, x_2); 18221 x_2 = x_1 + step; 18222 } 18223 18224 Note that this includes the language restrictions on the operations. 18225For example, if we compile C code and 'x' has signed type, then the 18226overflow in addition would cause undefined behavior, and we may assume 18227that this does not happen. Hence, the value with this SCEV cannot 18228overflow (which restricts the number of iterations of such a loop). 18229 18230 In many cases, one wants to restrict the attention just to affine 18231induction variables. In this case, the extra expressive power of SCEV 18232is not useful, and may complicate the optimizations. In this case, 18233'simple_iv' function may be used to analyze a value - the result is a 18234loop-invariant base and step. 18235 18236 18237File: gccint.info, Node: loop-iv, Next: Number of iterations, Prev: Scalar evolutions, Up: Loop Analysis and Representation 18238 1823915.6 IV analysis on RTL 18240======================= 18241 18242The induction variable on RTL is simple and only allows analysis of 18243affine induction variables, and only in one loop at once. The interface 18244is declared in 'cfgloop.h'. Before analyzing induction variables in a 18245loop L, 'iv_analysis_loop_init' function must be called on L. After the 18246analysis (possibly calling 'iv_analysis_loop_init' for several loops) is 18247finished, 'iv_analysis_done' should be called. The following functions 18248can be used to access the results of the analysis: 18249 18250 * 'iv_analyze': Analyzes a single register used in the given insn. 18251 If no use of the register in this insn is found, the following 18252 insns are scanned, so that this function can be called on the insn 18253 returned by get_condition. 18254 * 'iv_analyze_result': Analyzes result of the assignment in the given 18255 insn. 18256 * 'iv_analyze_expr': Analyzes a more complicated expression. All its 18257 operands are analyzed by 'iv_analyze', and hence they must be used 18258 in the specified insn or one of the following insns. 18259 18260 The description of the induction variable is provided in 'struct 18261rtx_iv'. In order to handle subregs, the representation is a bit 18262complicated; if the value of the 'extend' field is not 'UNKNOWN', the 18263value of the induction variable in the i-th iteration is 18264 18265 delta + mult * extend_{extend_mode} (subreg_{mode} (base + i * step)), 18266 18267 with the following exception: if 'first_special' is true, then the 18268value in the first iteration (when 'i' is zero) is 'delta + mult * 18269base'. However, if 'extend' is equal to 'UNKNOWN', then 'first_special' 18270must be false, 'delta' 0, 'mult' 1 and the value in the i-th iteration 18271is 18272 18273 subreg_{mode} (base + i * step) 18274 18275 The function 'get_iv_value' can be used to perform these calculations. 18276 18277 18278File: gccint.info, Node: Number of iterations, Next: Dependency analysis, Prev: loop-iv, Up: Loop Analysis and Representation 18279 1828015.7 Number of iterations analysis 18281================================== 18282 18283Both on GIMPLE and on RTL, there are functions available to determine 18284the number of iterations of a loop, with a similar interface. The 18285number of iterations of a loop in GCC is defined as the number of 18286executions of the loop latch. In many cases, it is not possible to 18287determine the number of iterations unconditionally - the determined 18288number is correct only if some assumptions are satisfied. The analysis 18289tries to verify these conditions using the information contained in the 18290program; if it fails, the conditions are returned together with the 18291result. The following information and conditions are provided by the 18292analysis: 18293 18294 * 'assumptions': If this condition is false, the rest of the 18295 information is invalid. 18296 * 'noloop_assumptions' on RTL, 'may_be_zero' on GIMPLE: If this 18297 condition is true, the loop exits in the first iteration. 18298 * 'infinite': If this condition is true, the loop is infinite. This 18299 condition is only available on RTL. On GIMPLE, conditions for 18300 finiteness of the loop are included in 'assumptions'. 18301 * 'niter_expr' on RTL, 'niter' on GIMPLE: The expression that gives 18302 number of iterations. The number of iterations is defined as the 18303 number of executions of the loop latch. 18304 18305 Both on GIMPLE and on RTL, it necessary for the induction variable 18306analysis framework to be initialized (SCEV on GIMPLE, loop-iv on RTL). 18307On GIMPLE, the results are stored to 'struct tree_niter_desc' structure. 18308Number of iterations before the loop is exited through a given exit can 18309be determined using 'number_of_iterations_exit' function. On RTL, the 18310results are returned in 'struct niter_desc' structure. The 18311corresponding function is named 'check_simple_exit'. There are also 18312functions that pass through all the exits of a loop and try to find one 18313with easy to determine number of iterations - 'find_loop_niter' on 18314GIMPLE and 'find_simple_exit' on RTL. Finally, there are functions that 18315provide the same information, but additionally cache it, so that 18316repeated calls to number of iterations are not so costly - 18317'number_of_latch_executions' on GIMPLE and 'get_simple_loop_desc' on 18318RTL. 18319 18320 Note that some of these functions may behave slightly differently than 18321others - some of them return only the expression for the number of 18322iterations, and fail if there are some assumptions. The function 18323'number_of_latch_executions' works only for single-exit loops. The 18324function 'number_of_cond_exit_executions' can be used to determine 18325number of executions of the exit condition of a single-exit loop (i.e., 18326the 'number_of_latch_executions' increased by one). 18327 18328 18329File: gccint.info, Node: Dependency analysis, Prev: Number of iterations, Up: Loop Analysis and Representation 18330 1833115.8 Data Dependency Analysis 18332============================= 18333 18334The code for the data dependence analysis can be found in 18335'tree-data-ref.c' and its interface and data structures are described in 18336'tree-data-ref.h'. The function that computes the data dependences for 18337all the array and pointer references for a given loop is 18338'compute_data_dependences_for_loop'. This function is currently used by 18339the linear loop transform and the vectorization passes. Before calling 18340this function, one has to allocate two vectors: a first vector will 18341contain the set of data references that are contained in the analyzed 18342loop body, and the second vector will contain the dependence relations 18343between the data references. Thus if the vector of data references is 18344of size 'n', the vector containing the dependence relations will contain 18345'n*n' elements. However if the analyzed loop contains side effects, 18346such as calls that potentially can interfere with the data references in 18347the current analyzed loop, the analysis stops while scanning the loop 18348body for data references, and inserts a single 'chrec_dont_know' in the 18349dependence relation array. 18350 18351 The data references are discovered in a particular order during the 18352scanning of the loop body: the loop body is analyzed in execution order, 18353and the data references of each statement are pushed at the end of the 18354data reference array. Two data references syntactically occur in the 18355program in the same order as in the array of data references. This 18356syntactic order is important in some classical data dependence tests, 18357and mapping this order to the elements of this array avoids costly 18358queries to the loop body representation. 18359 18360 Three types of data references are currently handled: ARRAY_REF, 18361INDIRECT_REF and COMPONENT_REF. The data structure for the data 18362reference is 'data_reference', where 'data_reference_p' is a name of a 18363pointer to the data reference structure. The structure contains the 18364following elements: 18365 18366 * 'base_object_info': Provides information about the base object of 18367 the data reference and its access functions. These access 18368 functions represent the evolution of the data reference in the loop 18369 relative to its base, in keeping with the classical meaning of the 18370 data reference access function for the support of arrays. For 18371 example, for a reference 'a.b[i][j]', the base object is 'a.b' and 18372 the access functions, one for each array subscript, are: '{i_init, 18373 + i_step}_1, {j_init, +, j_step}_2'. 18374 18375 * 'first_location_in_loop': Provides information about the first 18376 location accessed by the data reference in the loop and about the 18377 access function used to represent evolution relative to this 18378 location. This data is used to support pointers, and is not used 18379 for arrays (for which we have base objects). Pointer accesses are 18380 represented as a one-dimensional access that starts from the first 18381 location accessed in the loop. For example: 18382 18383 for1 i 18384 for2 j 18385 *((int *)p + i + j) = a[i][j]; 18386 18387 The access function of the pointer access is '{0, + 4B}_for2' 18388 relative to 'p + i'. The access functions of the array are 18389 '{i_init, + i_step}_for1' and '{j_init, +, j_step}_for2' relative 18390 to 'a'. 18391 18392 Usually, the object the pointer refers to is either unknown, or we 18393 can't prove that the access is confined to the boundaries of a 18394 certain object. 18395 18396 Two data references can be compared only if at least one of these 18397 two representations has all its fields filled for both data 18398 references. 18399 18400 The current strategy for data dependence tests is as follows: If 18401 both 'a' and 'b' are represented as arrays, compare 'a.base_object' 18402 and 'b.base_object'; if they are equal, apply dependence tests (use 18403 access functions based on base_objects). Else if both 'a' and 'b' 18404 are represented as pointers, compare 'a.first_location' and 18405 'b.first_location'; if they are equal, apply dependence tests (use 18406 access functions based on first location). However, if 'a' and 'b' 18407 are represented differently, only try to prove that the bases are 18408 definitely different. 18409 18410 * Aliasing information. 18411 * Alignment information. 18412 18413 The structure describing the relation between two data references is 18414'data_dependence_relation' and the shorter name for a pointer to such a 18415structure is 'ddr_p'. This structure contains: 18416 18417 * a pointer to each data reference, 18418 * a tree node 'are_dependent' that is set to 'chrec_known' if the 18419 analysis has proved that there is no dependence between these two 18420 data references, 'chrec_dont_know' if the analysis was not able to 18421 determine any useful result and potentially there could exist a 18422 dependence between these data references, and 'are_dependent' is 18423 set to 'NULL_TREE' if there exist a dependence relation between the 18424 data references, and the description of this dependence relation is 18425 given in the 'subscripts', 'dir_vects', and 'dist_vects' arrays, 18426 * a boolean that determines whether the dependence relation can be 18427 represented by a classical distance vector, 18428 * an array 'subscripts' that contains a description of each subscript 18429 of the data references. Given two array accesses a subscript is 18430 the tuple composed of the access functions for a given dimension. 18431 For example, given 'A[f1][f2][f3]' and 'B[g1][g2][g3]', there are 18432 three subscripts: '(f1, g1), (f2, g2), (f3, g3)'. 18433 * two arrays 'dir_vects' and 'dist_vects' that contain classical 18434 representations of the data dependences under the form of direction 18435 and distance dependence vectors, 18436 * an array of loops 'loop_nest' that contains the loops to which the 18437 distance and direction vectors refer to. 18438 18439 Several functions for pretty printing the information extracted by the 18440data dependence analysis are available: 'dump_ddrs' prints with a 18441maximum verbosity the details of a data dependence relations array, 18442'dump_dist_dir_vectors' prints only the classical distance and direction 18443vectors for a data dependence relations array, and 18444'dump_data_references' prints the details of the data references 18445contained in a data reference array. 18446 18447 18448File: gccint.info, Node: Machine Desc, Next: Target Macros, Prev: Loop Analysis and Representation, Up: Top 18449 1845016 Machine Descriptions 18451*********************** 18452 18453A machine description has two parts: a file of instruction patterns 18454('.md' file) and a C header file of macro definitions. 18455 18456 The '.md' file for a target machine contains a pattern for each 18457instruction that the target machine supports (or at least each 18458instruction that is worth telling the compiler about). It may also 18459contain comments. A semicolon causes the rest of the line to be a 18460comment, unless the semicolon is inside a quoted string. 18461 18462 See the next chapter for information on the C header file. 18463 18464* Menu: 18465 18466* Overview:: How the machine description is used. 18467* Patterns:: How to write instruction patterns. 18468* Example:: An explained example of a 'define_insn' pattern. 18469* RTL Template:: The RTL template defines what insns match a pattern. 18470* Output Template:: The output template says how to make assembler code 18471 from such an insn. 18472* Output Statement:: For more generality, write C code to output 18473 the assembler code. 18474* Predicates:: Controlling what kinds of operands can be used 18475 for an insn. 18476* Constraints:: Fine-tuning operand selection. 18477* Standard Names:: Names mark patterns to use for code generation. 18478* Pattern Ordering:: When the order of patterns makes a difference. 18479* Dependent Patterns:: Having one pattern may make you need another. 18480* Jump Patterns:: Special considerations for patterns for jump insns. 18481* Looping Patterns:: How to define patterns for special looping insns. 18482* Insn Canonicalizations::Canonicalization of Instructions 18483* Expander Definitions::Generating a sequence of several RTL insns 18484 for a standard operation. 18485* Insn Splitting:: Splitting Instructions into Multiple Instructions. 18486* Including Patterns:: Including Patterns in Machine Descriptions. 18487* Peephole Definitions::Defining machine-specific peephole optimizations. 18488* Insn Attributes:: Specifying the value of attributes for generated insns. 18489* Conditional Execution::Generating 'define_insn' patterns for 18490 predication. 18491* Define Subst:: Generating 'define_insn' and 'define_expand' 18492 patterns from other patterns. 18493* Constant Definitions::Defining symbolic constants that can be used in the 18494 md file. 18495* Iterators:: Using iterators to generate patterns from a template. 18496 18497 18498File: gccint.info, Node: Overview, Next: Patterns, Up: Machine Desc 18499 1850016.1 Overview of How the Machine Description is Used 18501==================================================== 18502 18503There are three main conversions that happen in the compiler: 18504 18505 1. The front end reads the source code and builds a parse tree. 18506 18507 2. The parse tree is used to generate an RTL insn list based on named 18508 instruction patterns. 18509 18510 3. The insn list is matched against the RTL templates to produce 18511 assembler code. 18512 18513 For the generate pass, only the names of the insns matter, from either 18514a named 'define_insn' or a 'define_expand'. The compiler will choose 18515the pattern with the right name and apply the operands according to the 18516documentation later in this chapter, without regard for the RTL template 18517or operand constraints. Note that the names the compiler looks for are 18518hard-coded in the compiler--it will ignore unnamed patterns and patterns 18519with names it doesn't know about, but if you don't provide a named 18520pattern it needs, it will abort. 18521 18522 If a 'define_insn' is used, the template given is inserted into the 18523insn list. If a 'define_expand' is used, one of three things happens, 18524based on the condition logic. The condition logic may manually create 18525new insns for the insn list, say via 'emit_insn()', and invoke 'DONE'. 18526For certain named patterns, it may invoke 'FAIL' to tell the compiler to 18527use an alternate way of performing that task. If it invokes neither 18528'DONE' nor 'FAIL', the template given in the pattern is inserted, as if 18529the 'define_expand' were a 'define_insn'. 18530 18531 Once the insn list is generated, various optimization passes convert, 18532replace, and rearrange the insns in the insn list. This is where the 18533'define_split' and 'define_peephole' patterns get used, for example. 18534 18535 Finally, the insn list's RTL is matched up with the RTL templates in 18536the 'define_insn' patterns, and those patterns are used to emit the 18537final assembly code. For this purpose, each named 'define_insn' acts 18538like it's unnamed, since the names are ignored. 18539 18540 18541File: gccint.info, Node: Patterns, Next: Example, Prev: Overview, Up: Machine Desc 18542 1854316.2 Everything about Instruction Patterns 18544========================================== 18545 18546A 'define_insn' expression is used to define instruction patterns to 18547which insns may be matched. A 'define_insn' expression contains an 18548incomplete RTL expression, with pieces to be filled in later, operand 18549constraints that restrict how the pieces can be filled in, and an output 18550template or C code to generate the assembler output. 18551 18552 A 'define_insn' is an RTL expression containing four or five operands: 18553 18554 1. An optional name. The presence of a name indicate that this 18555 instruction pattern can perform a certain standard job for the 18556 RTL-generation pass of the compiler. This pass knows certain names 18557 and will use the instruction patterns with those names, if the 18558 names are defined in the machine description. 18559 18560 The absence of a name is indicated by writing an empty string where 18561 the name should go. Nameless instruction patterns are never used 18562 for generating RTL code, but they may permit several simpler insns 18563 to be combined later on. 18564 18565 Names that are not thus known and used in RTL-generation have no 18566 effect; they are equivalent to no name at all. 18567 18568 For the purpose of debugging the compiler, you may also specify a 18569 name beginning with the '*' character. Such a name is used only 18570 for identifying the instruction in RTL dumps; it is equivalent to 18571 having a nameless pattern for all other purposes. Names beginning 18572 with the '*' character are not required to be unique. 18573 18574 2. The "RTL template": This is a vector of incomplete RTL expressions 18575 which describe the semantics of the instruction (*note RTL 18576 Template::). It is incomplete because it may contain 18577 'match_operand', 'match_operator', and 'match_dup' expressions that 18578 stand for operands of the instruction. 18579 18580 If the vector has multiple elements, the RTL template is treated as 18581 a 'parallel' expression. 18582 18583 3. The condition: This is a string which contains a C expression. 18584 When the compiler attempts to match RTL against a pattern, the 18585 condition is evaluated. If the condition evaluates to 'true', the 18586 match is permitted. The condition may be an empty string, which is 18587 treated as always 'true'. 18588 18589 For a named pattern, the condition may not depend on the data in 18590 the insn being matched, but only the target-machine-type flags. 18591 The compiler needs to test these conditions during initialization 18592 in order to learn exactly which named instructions are available in 18593 a particular run. 18594 18595 For nameless patterns, the condition is applied only when matching 18596 an individual insn, and only after the insn has matched the 18597 pattern's recognition template. The insn's operands may be found 18598 in the vector 'operands'. 18599 18600 For an insn where the condition has once matched, it cannot later 18601 be used to control register allocation by excluding certain 18602 register or value combinations. 18603 18604 4. The "output template" or "output statement": This is either a 18605 string, or a fragment of C code which returns a string. 18606 18607 When simple substitution isn't general enough, you can specify a 18608 piece of C code to compute the output. *Note Output Statement::. 18609 18610 5. The "insn attributes": This is an optional vector containing the 18611 values of attributes for insns matching this pattern (*note Insn 18612 Attributes::). 18613 18614 18615File: gccint.info, Node: Example, Next: RTL Template, Prev: Patterns, Up: Machine Desc 18616 1861716.3 Example of 'define_insn' 18618============================= 18619 18620Here is an example of an instruction pattern, taken from the machine 18621description for the 68000/68020. 18622 18623 (define_insn "tstsi" 18624 [(set (cc0) 18625 (match_operand:SI 0 "general_operand" "rm"))] 18626 "" 18627 "* 18628 { 18629 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18630 return \"tstl %0\"; 18631 return \"cmpl #0,%0\"; 18632 }") 18633 18634This can also be written using braced strings: 18635 18636 (define_insn "tstsi" 18637 [(set (cc0) 18638 (match_operand:SI 0 "general_operand" "rm"))] 18639 "" 18640 { 18641 if (TARGET_68020 || ! ADDRESS_REG_P (operands[0])) 18642 return "tstl %0"; 18643 return "cmpl #0,%0"; 18644 }) 18645 18646 This describes an instruction which sets the condition codes based on 18647the value of a general operand. It has no condition, so any insn with 18648an RTL description of the form shown may be matched to this pattern. 18649The name 'tstsi' means "test a 'SImode' value" and tells the RTL 18650generation pass that, when it is necessary to test such a value, an insn 18651to do so can be constructed using this pattern. 18652 18653 The output control string is a piece of C code which chooses which 18654output template to return based on the kind of operand and the specific 18655type of CPU for which code is being generated. 18656 18657 '"rm"' is an operand constraint. Its meaning is explained below. 18658 18659 18660File: gccint.info, Node: RTL Template, Next: Output Template, Prev: Example, Up: Machine Desc 18661 1866216.4 RTL Template 18663================= 18664 18665The RTL template is used to define which insns match the particular 18666pattern and how to find their operands. For named patterns, the RTL 18667template also says how to construct an insn from specified operands. 18668 18669 Construction involves substituting specified operands into a copy of 18670the template. Matching involves determining the values that serve as 18671the operands in the insn being matched. Both of these activities are 18672controlled by special expression types that direct matching and 18673substitution of the operands. 18674 18675'(match_operand:M N PREDICATE CONSTRAINT)' 18676 This expression is a placeholder for operand number N of the insn. 18677 When constructing an insn, operand number N will be substituted at 18678 this point. When matching an insn, whatever appears at this 18679 position in the insn will be taken as operand number N; but it must 18680 satisfy PREDICATE or this instruction pattern will not match at 18681 all. 18682 18683 Operand numbers must be chosen consecutively counting from zero in 18684 each instruction pattern. There may be only one 'match_operand' 18685 expression in the pattern for each operand number. Usually 18686 operands are numbered in the order of appearance in 'match_operand' 18687 expressions. In the case of a 'define_expand', any operand numbers 18688 used only in 'match_dup' expressions have higher values than all 18689 other operand numbers. 18690 18691 PREDICATE is a string that is the name of a function that accepts 18692 two arguments, an expression and a machine mode. *Note 18693 Predicates::. During matching, the function will be called with 18694 the putative operand as the expression and M as the mode argument 18695 (if M is not specified, 'VOIDmode' will be used, which normally 18696 causes PREDICATE to accept any mode). If it returns zero, this 18697 instruction pattern fails to match. PREDICATE may be an empty 18698 string; then it means no test is to be done on the operand, so 18699 anything which occurs in this position is valid. 18700 18701 Most of the time, PREDICATE will reject modes other than M--but not 18702 always. For example, the predicate 'address_operand' uses M as the 18703 mode of memory ref that the address should be valid for. Many 18704 predicates accept 'const_int' nodes even though their mode is 18705 'VOIDmode'. 18706 18707 CONSTRAINT controls reloading and the choice of the best register 18708 class to use for a value, as explained later (*note Constraints::). 18709 If the constraint would be an empty string, it can be omitted. 18710 18711 People are often unclear on the difference between the constraint 18712 and the predicate. The predicate helps decide whether a given insn 18713 matches the pattern. The constraint plays no role in this 18714 decision; instead, it controls various decisions in the case of an 18715 insn which does match. 18716 18717'(match_scratch:M N CONSTRAINT)' 18718 This expression is also a placeholder for operand number N and 18719 indicates that operand must be a 'scratch' or 'reg' expression. 18720 18721 When matching patterns, this is equivalent to 18722 18723 (match_operand:M N "scratch_operand" CONSTRAINT) 18724 18725 but, when generating RTL, it produces a ('scratch':M) expression. 18726 18727 If the last few expressions in a 'parallel' are 'clobber' 18728 expressions whose operands are either a hard register or 18729 'match_scratch', the combiner can add or delete them when 18730 necessary. *Note Side Effects::. 18731 18732'(match_dup N)' 18733 This expression is also a placeholder for operand number N. It is 18734 used when the operand needs to appear more than once in the insn. 18735 18736 In construction, 'match_dup' acts just like 'match_operand': the 18737 operand is substituted into the insn being constructed. But in 18738 matching, 'match_dup' behaves differently. It assumes that operand 18739 number N has already been determined by a 'match_operand' appearing 18740 earlier in the recognition template, and it matches only an 18741 identical-looking expression. 18742 18743 Note that 'match_dup' should not be used to tell the compiler that 18744 a particular register is being used for two operands (example: 18745 'add' that adds one register to another; the second register is 18746 both an input operand and the output operand). Use a matching 18747 constraint (*note Simple Constraints::) for those. 'match_dup' is 18748 for the cases where one operand is used in two places in the 18749 template, such as an instruction that computes both a quotient and 18750 a remainder, where the opcode takes two input operands but the RTL 18751 template has to refer to each of those twice; once for the quotient 18752 pattern and once for the remainder pattern. 18753 18754'(match_operator:M N PREDICATE [OPERANDS...])' 18755 This pattern is a kind of placeholder for a variable RTL expression 18756 code. 18757 18758 When constructing an insn, it stands for an RTL expression whose 18759 expression code is taken from that of operand N, and whose operands 18760 are constructed from the patterns OPERANDS. 18761 18762 When matching an expression, it matches an expression if the 18763 function PREDICATE returns nonzero on that expression _and_ the 18764 patterns OPERANDS match the operands of the expression. 18765 18766 Suppose that the function 'commutative_operator' is defined as 18767 follows, to match any expression whose operator is one of the 18768 commutative arithmetic operators of RTL and whose mode is MODE: 18769 18770 int 18771 commutative_integer_operator (x, mode) 18772 rtx x; 18773 machine_mode mode; 18774 { 18775 enum rtx_code code = GET_CODE (x); 18776 if (GET_MODE (x) != mode) 18777 return 0; 18778 return (GET_RTX_CLASS (code) == RTX_COMM_ARITH 18779 || code == EQ || code == NE); 18780 } 18781 18782 Then the following pattern will match any RTL expression consisting 18783 of a commutative operator applied to two general operands: 18784 18785 (match_operator:SI 3 "commutative_operator" 18786 [(match_operand:SI 1 "general_operand" "g") 18787 (match_operand:SI 2 "general_operand" "g")]) 18788 18789 Here the vector '[OPERANDS...]' contains two patterns because the 18790 expressions to be matched all contain two operands. 18791 18792 When this pattern does match, the two operands of the commutative 18793 operator are recorded as operands 1 and 2 of the insn. (This is 18794 done by the two instances of 'match_operand'.) Operand 3 of the 18795 insn will be the entire commutative expression: use 'GET_CODE 18796 (operands[3])' to see which commutative operator was used. 18797 18798 The machine mode M of 'match_operator' works like that of 18799 'match_operand': it is passed as the second argument to the 18800 predicate function, and that function is solely responsible for 18801 deciding whether the expression to be matched "has" that mode. 18802 18803 When constructing an insn, argument 3 of the gen-function will 18804 specify the operation (i.e. the expression code) for the expression 18805 to be made. It should be an RTL expression, whose expression code 18806 is copied into a new expression whose operands are arguments 1 and 18807 2 of the gen-function. The subexpressions of argument 3 are not 18808 used; only its expression code matters. 18809 18810 When 'match_operator' is used in a pattern for matching an insn, it 18811 usually best if the operand number of the 'match_operator' is 18812 higher than that of the actual operands of the insn. This improves 18813 register allocation because the register allocator often looks at 18814 operands 1 and 2 of insns to see if it can do register tying. 18815 18816 There is no way to specify constraints in 'match_operator'. The 18817 operand of the insn which corresponds to the 'match_operator' never 18818 has any constraints because it is never reloaded as a whole. 18819 However, if parts of its OPERANDS are matched by 'match_operand' 18820 patterns, those parts may have constraints of their own. 18821 18822'(match_op_dup:M N[OPERANDS...])' 18823 Like 'match_dup', except that it applies to operators instead of 18824 operands. When constructing an insn, operand number N will be 18825 substituted at this point. But in matching, 'match_op_dup' behaves 18826 differently. It assumes that operand number N has already been 18827 determined by a 'match_operator' appearing earlier in the 18828 recognition template, and it matches only an identical-looking 18829 expression. 18830 18831'(match_parallel N PREDICATE [SUBPAT...])' 18832 This pattern is a placeholder for an insn that consists of a 18833 'parallel' expression with a variable number of elements. This 18834 expression should only appear at the top level of an insn pattern. 18835 18836 When constructing an insn, operand number N will be substituted at 18837 this point. When matching an insn, it matches if the body of the 18838 insn is a 'parallel' expression with at least as many elements as 18839 the vector of SUBPAT expressions in the 'match_parallel', if each 18840 SUBPAT matches the corresponding element of the 'parallel', _and_ 18841 the function PREDICATE returns nonzero on the 'parallel' that is 18842 the body of the insn. It is the responsibility of the predicate to 18843 validate elements of the 'parallel' beyond those listed in the 18844 'match_parallel'. 18845 18846 A typical use of 'match_parallel' is to match load and store 18847 multiple expressions, which can contain a variable number of 18848 elements in a 'parallel'. For example, 18849 18850 (define_insn "" 18851 [(match_parallel 0 "load_multiple_operation" 18852 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 18853 (match_operand:SI 2 "memory_operand" "m")) 18854 (use (reg:SI 179)) 18855 (clobber (reg:SI 179))])] 18856 "" 18857 "loadm 0,0,%1,%2") 18858 18859 This example comes from 'a29k.md'. The function 18860 'load_multiple_operation' is defined in 'a29k.c' and checks that 18861 subsequent elements in the 'parallel' are the same as the 'set' in 18862 the pattern, except that they are referencing subsequent registers 18863 and memory locations. 18864 18865 An insn that matches this pattern might look like: 18866 18867 (parallel 18868 [(set (reg:SI 20) (mem:SI (reg:SI 100))) 18869 (use (reg:SI 179)) 18870 (clobber (reg:SI 179)) 18871 (set (reg:SI 21) 18872 (mem:SI (plus:SI (reg:SI 100) 18873 (const_int 4)))) 18874 (set (reg:SI 22) 18875 (mem:SI (plus:SI (reg:SI 100) 18876 (const_int 8))))]) 18877 18878'(match_par_dup N [SUBPAT...])' 18879 Like 'match_op_dup', but for 'match_parallel' instead of 18880 'match_operator'. 18881 18882 18883File: gccint.info, Node: Output Template, Next: Output Statement, Prev: RTL Template, Up: Machine Desc 18884 1888516.5 Output Templates and Operand Substitution 18886============================================== 18887 18888The "output template" is a string which specifies how to output the 18889assembler code for an instruction pattern. Most of the template is a 18890fixed string which is output literally. The character '%' is used to 18891specify where to substitute an operand; it can also be used to identify 18892places where different variants of the assembler require different 18893syntax. 18894 18895 In the simplest case, a '%' followed by a digit N says to output 18896operand N at that point in the string. 18897 18898 '%' followed by a letter and a digit says to output an operand in an 18899alternate fashion. Four letters have standard, built-in meanings 18900described below. The machine description macro 'PRINT_OPERAND' can 18901define additional letters with nonstandard meanings. 18902 18903 '%cDIGIT' can be used to substitute an operand that is a constant value 18904without the syntax that normally indicates an immediate operand. 18905 18906 '%nDIGIT' is like '%cDIGIT' except that the value of the constant is 18907negated before printing. 18908 18909 '%aDIGIT' can be used to substitute an operand as if it were a memory 18910reference, with the actual operand treated as the address. This may be 18911useful when outputting a "load address" instruction, because often the 18912assembler syntax for such an instruction requires you to write the 18913operand as if it were a memory reference. 18914 18915 '%lDIGIT' is used to substitute a 'label_ref' into a jump instruction. 18916 18917 '%=' outputs a number which is unique to each instruction in the entire 18918compilation. This is useful for making local labels to be referred to 18919more than once in a single template that generates multiple assembler 18920instructions. 18921 18922 '%' followed by a punctuation character specifies a substitution that 18923does not use an operand. Only one case is standard: '%%' outputs a '%' 18924into the assembler code. Other nonstandard cases can be defined in the 18925'PRINT_OPERAND' macro. You must also define which punctuation 18926characters are valid with the 'PRINT_OPERAND_PUNCT_VALID_P' macro. 18927 18928 The template may generate multiple assembler instructions. Write the 18929text for the instructions, with '\;' between them. 18930 18931 When the RTL contains two operands which are required by constraint to 18932match each other, the output template must refer only to the 18933lower-numbered operand. Matching operands are not always identical, and 18934the rest of the compiler arranges to put the proper RTL expression for 18935printing into the lower-numbered operand. 18936 18937 One use of nonstandard letters or punctuation following '%' is to 18938distinguish between different assembler languages for the same machine; 18939for example, Motorola syntax versus MIT syntax for the 68000. Motorola 18940syntax requires periods in most opcode names, while MIT syntax does not. 18941For example, the opcode 'movel' in MIT syntax is 'move.l' in Motorola 18942syntax. The same file of patterns is used for both kinds of output 18943syntax, but the character sequence '%.' is used in each place where 18944Motorola syntax wants a period. The 'PRINT_OPERAND' macro for Motorola 18945syntax defines the sequence to output a period; the macro for MIT syntax 18946defines it to do nothing. 18947 18948 As a special case, a template consisting of the single character '#' 18949instructs the compiler to first split the insn, and then output the 18950resulting instructions separately. This helps eliminate redundancy in 18951the output templates. If you have a 'define_insn' that needs to emit 18952multiple assembler instructions, and there is a matching 'define_split' 18953already defined, then you can simply use '#' as the output template 18954instead of writing an output template that emits the multiple assembler 18955instructions. 18956 18957 If the macro 'ASSEMBLER_DIALECT' is defined, you can use construct of 18958the form '{option0|option1|option2}' in the templates. These describe 18959multiple variants of assembler language syntax. *Note Instruction 18960Output::. 18961 18962 18963File: gccint.info, Node: Output Statement, Next: Predicates, Prev: Output Template, Up: Machine Desc 18964 1896516.6 C Statements for Assembler Output 18966====================================== 18967 18968Often a single fixed template string cannot produce correct and 18969efficient assembler code for all the cases that are recognized by a 18970single instruction pattern. For example, the opcodes may depend on the 18971kinds of operands; or some unfortunate combinations of operands may 18972require extra machine instructions. 18973 18974 If the output control string starts with a '@', then it is actually a 18975series of templates, each on a separate line. (Blank lines and leading 18976spaces and tabs are ignored.) The templates correspond to the pattern's 18977constraint alternatives (*note Multi-Alternative::). For example, if a 18978target machine has a two-address add instruction 'addr' to add into a 18979register and another 'addm' to add a register to memory, you might write 18980this pattern: 18981 18982 (define_insn "addsi3" 18983 [(set (match_operand:SI 0 "general_operand" "=r,m") 18984 (plus:SI (match_operand:SI 1 "general_operand" "0,0") 18985 (match_operand:SI 2 "general_operand" "g,r")))] 18986 "" 18987 "@ 18988 addr %2,%0 18989 addm %2,%0") 18990 18991 If the output control string starts with a '*', then it is not an 18992output template but rather a piece of C program that should compute a 18993template. It should execute a 'return' statement to return the 18994template-string you want. Most such templates use C string literals, 18995which require doublequote characters to delimit them. To include these 18996doublequote characters in the string, prefix each one with '\'. 18997 18998 If the output control string is written as a brace block instead of a 18999double-quoted string, it is automatically assumed to be C code. In that 19000case, it is not necessary to put in a leading asterisk, or to escape the 19001doublequotes surrounding C string literals. 19002 19003 The operands may be found in the array 'operands', whose C data type is 19004'rtx []'. 19005 19006 It is very common to select different ways of generating assembler code 19007based on whether an immediate operand is within a certain range. Be 19008careful when doing this, because the result of 'INTVAL' is an integer on 19009the host machine. If the host machine has more bits in an 'int' than 19010the target machine has in the mode in which the constant will be used, 19011then some of the bits you get from 'INTVAL' will be superfluous. For 19012proper results, you must carefully disregard the values of those bits. 19013 19014 It is possible to output an assembler instruction and then go on to 19015output or compute more of them, using the subroutine 'output_asm_insn'. 19016This receives two arguments: a template-string and a vector of operands. 19017The vector may be 'operands', or it may be another array of 'rtx' that 19018you declare locally and initialize yourself. 19019 19020 When an insn pattern has multiple alternatives in its constraints, 19021often the appearance of the assembler code is determined mostly by which 19022alternative was matched. When this is so, the C code can test the 19023variable 'which_alternative', which is the ordinal number of the 19024alternative that was actually satisfied (0 for the first, 1 for the 19025second alternative, etc.). 19026 19027 For example, suppose there are two opcodes for storing zero, 'clrreg' 19028for registers and 'clrmem' for memory locations. Here is how a pattern 19029could use 'which_alternative' to choose between them: 19030 19031 (define_insn "" 19032 [(set (match_operand:SI 0 "general_operand" "=r,m") 19033 (const_int 0))] 19034 "" 19035 { 19036 return (which_alternative == 0 19037 ? "clrreg %0" : "clrmem %0"); 19038 }) 19039 19040 The example above, where the assembler code to generate was _solely_ 19041determined by the alternative, could also have been specified as 19042follows, having the output control string start with a '@': 19043 19044 (define_insn "" 19045 [(set (match_operand:SI 0 "general_operand" "=r,m") 19046 (const_int 0))] 19047 "" 19048 "@ 19049 clrreg %0 19050 clrmem %0") 19051 19052 If you just need a little bit of C code in one (or a few) alternatives, 19053you can use '*' inside of a '@' multi-alternative template: 19054 19055 (define_insn "" 19056 [(set (match_operand:SI 0 "general_operand" "=r,<,m") 19057 (const_int 0))] 19058 "" 19059 "@ 19060 clrreg %0 19061 * return stack_mem_p (operands[0]) ? \"push 0\" : \"clrmem %0\"; 19062 clrmem %0") 19063 19064 19065File: gccint.info, Node: Predicates, Next: Constraints, Prev: Output Statement, Up: Machine Desc 19066 1906716.7 Predicates 19068=============== 19069 19070A predicate determines whether a 'match_operand' or 'match_operator' 19071expression matches, and therefore whether the surrounding instruction 19072pattern will be used for that combination of operands. GCC has a number 19073of machine-independent predicates, and you can define machine-specific 19074predicates as needed. By convention, predicates used with 19075'match_operand' have names that end in '_operand', and those used with 19076'match_operator' have names that end in '_operator'. 19077 19078 All predicates are Boolean functions (in the mathematical sense) of two 19079arguments: the RTL expression that is being considered at that position 19080in the instruction pattern, and the machine mode that the 19081'match_operand' or 'match_operator' specifies. In this section, the 19082first argument is called OP and the second argument MODE. Predicates 19083can be called from C as ordinary two-argument functions; this can be 19084useful in output templates or other machine-specific code. 19085 19086 Operand predicates can allow operands that are not actually acceptable 19087to the hardware, as long as the constraints give reload the ability to 19088fix them up (*note Constraints::). However, GCC will usually generate 19089better code if the predicates specify the requirements of the machine 19090instructions as closely as possible. Reload cannot fix up operands that 19091must be constants ("immediate operands"); you must use a predicate that 19092allows only constants, or else enforce the requirement in the extra 19093condition. 19094 19095 Most predicates handle their MODE argument in a uniform manner. If 19096MODE is 'VOIDmode' (unspecified), then OP can have any mode. If MODE is 19097anything else, then OP must have the same mode, unless OP is a 19098'CONST_INT' or integer 'CONST_DOUBLE'. These RTL expressions always 19099have 'VOIDmode', so it would be counterproductive to check that their 19100mode matches. Instead, predicates that accept 'CONST_INT' and/or 19101integer 'CONST_DOUBLE' check that the value stored in the constant will 19102fit in the requested mode. 19103 19104 Predicates with this behavior are called "normal". 'genrecog' can 19105optimize the instruction recognizer based on knowledge of how normal 19106predicates treat modes. It can also diagnose certain kinds of common 19107errors in the use of normal predicates; for instance, it is almost 19108always an error to use a normal predicate without specifying a mode. 19109 19110 Predicates that do something different with their MODE argument are 19111called "special". The generic predicates 'address_operand' and 19112'pmode_register_operand' are special predicates. 'genrecog' does not do 19113any optimizations or diagnosis when special predicates are used. 19114 19115* Menu: 19116 19117* Machine-Independent Predicates:: Predicates available to all back ends. 19118* Defining Predicates:: How to write machine-specific predicate 19119 functions. 19120 19121 19122File: gccint.info, Node: Machine-Independent Predicates, Next: Defining Predicates, Up: Predicates 19123 1912416.7.1 Machine-Independent Predicates 19125------------------------------------- 19126 19127These are the generic predicates available to all back ends. They are 19128defined in 'recog.c'. The first category of predicates allow only 19129constant, or "immediate", operands. 19130 19131 -- Function: immediate_operand 19132 This predicate allows any sort of constant that fits in MODE. It 19133 is an appropriate choice for instructions that take operands that 19134 must be constant. 19135 19136 -- Function: const_int_operand 19137 This predicate allows any 'CONST_INT' expression that fits in MODE. 19138 It is an appropriate choice for an immediate operand that does not 19139 allow a symbol or label. 19140 19141 -- Function: const_double_operand 19142 This predicate accepts any 'CONST_DOUBLE' expression that has 19143 exactly MODE. If MODE is 'VOIDmode', it will also accept 19144 'CONST_INT'. It is intended for immediate floating point 19145 constants. 19146 19147The second category of predicates allow only some kind of machine 19148register. 19149 19150 -- Function: register_operand 19151 This predicate allows any 'REG' or 'SUBREG' expression that is 19152 valid for MODE. It is often suitable for arithmetic instruction 19153 operands on a RISC machine. 19154 19155 -- Function: pmode_register_operand 19156 This is a slight variant on 'register_operand' which works around a 19157 limitation in the machine-description reader. 19158 19159 (match_operand N "pmode_register_operand" CONSTRAINT) 19160 19161 means exactly what 19162 19163 (match_operand:P N "register_operand" CONSTRAINT) 19164 19165 would mean, if the machine-description reader accepted ':P' mode 19166 suffixes. Unfortunately, it cannot, because 'Pmode' is an alias 19167 for some other mode, and might vary with machine-specific options. 19168 *Note Misc::. 19169 19170 -- Function: scratch_operand 19171 This predicate allows hard registers and 'SCRATCH' expressions, but 19172 not pseudo-registers. It is used internally by 'match_scratch'; it 19173 should not be used directly. 19174 19175The third category of predicates allow only some kind of memory 19176reference. 19177 19178 -- Function: memory_operand 19179 This predicate allows any valid reference to a quantity of mode 19180 MODE in memory, as determined by the weak form of 19181 'GO_IF_LEGITIMATE_ADDRESS' (*note Addressing Modes::). 19182 19183 -- Function: address_operand 19184 This predicate is a little unusual; it allows any operand that is a 19185 valid expression for the _address_ of a quantity of mode MODE, 19186 again determined by the weak form of 'GO_IF_LEGITIMATE_ADDRESS'. 19187 To first order, if '(mem:MODE (EXP))' is acceptable to 19188 'memory_operand', then EXP is acceptable to 'address_operand'. 19189 Note that EXP does not necessarily have the mode MODE. 19190 19191 -- Function: indirect_operand 19192 This is a stricter form of 'memory_operand' which allows only 19193 memory references with a 'general_operand' as the address 19194 expression. New uses of this predicate are discouraged, because 19195 'general_operand' is very permissive, so it's hard to tell what an 19196 'indirect_operand' does or does not allow. If a target has 19197 different requirements for memory operands for different 19198 instructions, it is better to define target-specific predicates 19199 which enforce the hardware's requirements explicitly. 19200 19201 -- Function: push_operand 19202 This predicate allows a memory reference suitable for pushing a 19203 value onto the stack. This will be a 'MEM' which refers to 19204 'stack_pointer_rtx', with a side-effect in its address expression 19205 (*note Incdec::); which one is determined by the 'STACK_PUSH_CODE' 19206 macro (*note Frame Layout::). 19207 19208 -- Function: pop_operand 19209 This predicate allows a memory reference suitable for popping a 19210 value off the stack. Again, this will be a 'MEM' referring to 19211 'stack_pointer_rtx', with a side-effect in its address expression. 19212 However, this time 'STACK_POP_CODE' is expected. 19213 19214The fourth category of predicates allow some combination of the above 19215operands. 19216 19217 -- Function: nonmemory_operand 19218 This predicate allows any immediate or register operand valid for 19219 MODE. 19220 19221 -- Function: nonimmediate_operand 19222 This predicate allows any register or memory operand valid for 19223 MODE. 19224 19225 -- Function: general_operand 19226 This predicate allows any immediate, register, or memory operand 19227 valid for MODE. 19228 19229Finally, there are two generic operator predicates. 19230 19231 -- Function: comparison_operator 19232 This predicate matches any expression which performs an arithmetic 19233 comparison in MODE; that is, 'COMPARISON_P' is true for the 19234 expression code. 19235 19236 -- Function: ordered_comparison_operator 19237 This predicate matches any expression which performs an arithmetic 19238 comparison in MODE and whose expression code is valid for integer 19239 modes; that is, the expression code will be one of 'eq', 'ne', 19240 'lt', 'ltu', 'le', 'leu', 'gt', 'gtu', 'ge', 'geu'. 19241 19242 19243File: gccint.info, Node: Defining Predicates, Prev: Machine-Independent Predicates, Up: Predicates 19244 1924516.7.2 Defining Machine-Specific Predicates 19246------------------------------------------- 19247 19248Many machines have requirements for their operands that cannot be 19249expressed precisely using the generic predicates. You can define 19250additional predicates using 'define_predicate' and 19251'define_special_predicate' expressions. These expressions have three 19252operands: 19253 19254 * The name of the predicate, as it will be referred to in 19255 'match_operand' or 'match_operator' expressions. 19256 19257 * An RTL expression which evaluates to true if the predicate allows 19258 the operand OP, false if it does not. This expression can only use 19259 the following RTL codes: 19260 19261 'MATCH_OPERAND' 19262 When written inside a predicate expression, a 'MATCH_OPERAND' 19263 expression evaluates to true if the predicate it names would 19264 allow OP. The operand number and constraint are ignored. Due 19265 to limitations in 'genrecog', you can only refer to generic 19266 predicates and predicates that have already been defined. 19267 19268 'MATCH_CODE' 19269 This expression evaluates to true if OP or a specified 19270 subexpression of OP has one of a given list of RTX codes. 19271 19272 The first operand of this expression is a string constant 19273 containing a comma-separated list of RTX code names (in lower 19274 case). These are the codes for which the 'MATCH_CODE' will be 19275 true. 19276 19277 The second operand is a string constant which indicates what 19278 subexpression of OP to examine. If it is absent or the empty 19279 string, OP itself is examined. Otherwise, the string constant 19280 must be a sequence of digits and/or lowercase letters. Each 19281 character indicates a subexpression to extract from the 19282 current expression; for the first character this is OP, for 19283 the second and subsequent characters it is the result of the 19284 previous character. A digit N extracts 'XEXP (E, N)'; a 19285 letter L extracts 'XVECEXP (E, 0, N)' where N is the 19286 alphabetic ordinal of L (0 for 'a', 1 for 'b', and so on). 19287 The 'MATCH_CODE' then examines the RTX code of the 19288 subexpression extracted by the complete string. It is not 19289 possible to extract components of an 'rtvec' that is not at 19290 position 0 within its RTX object. 19291 19292 'MATCH_TEST' 19293 This expression has one operand, a string constant containing 19294 a C expression. The predicate's arguments, OP and MODE, are 19295 available with those names in the C expression. The 19296 'MATCH_TEST' evaluates to true if the C expression evaluates 19297 to a nonzero value. 'MATCH_TEST' expressions must not have 19298 side effects. 19299 19300 'AND' 19301 'IOR' 19302 'NOT' 19303 'IF_THEN_ELSE' 19304 The basic 'MATCH_' expressions can be combined using these 19305 logical operators, which have the semantics of the C operators 19306 '&&', '||', '!', and '? :' respectively. As in Common Lisp, 19307 you may give an 'AND' or 'IOR' expression an arbitrary number 19308 of arguments; this has exactly the same effect as writing a 19309 chain of two-argument 'AND' or 'IOR' expressions. 19310 19311 * An optional block of C code, which should execute 'return true' if 19312 the predicate is found to match and 'return false' if it does not. 19313 It must not have any side effects. The predicate arguments, OP and 19314 MODE, are available with those names. 19315 19316 If a code block is present in a predicate definition, then the RTL 19317 expression must evaluate to true _and_ the code block must execute 19318 'return true' for the predicate to allow the operand. The RTL 19319 expression is evaluated first; do not re-check anything in the code 19320 block that was checked in the RTL expression. 19321 19322 The program 'genrecog' scans 'define_predicate' and 19323'define_special_predicate' expressions to determine which RTX codes are 19324possibly allowed. You should always make this explicit in the RTL 19325predicate expression, using 'MATCH_OPERAND' and 'MATCH_CODE'. 19326 19327 Here is an example of a simple predicate definition, from the IA64 19328machine description: 19329 19330 ;; True if OP is a 'SYMBOL_REF' which refers to the sdata section. 19331 (define_predicate "small_addr_symbolic_operand" 19332 (and (match_code "symbol_ref") 19333 (match_test "SYMBOL_REF_SMALL_ADDR_P (op)"))) 19334 19335And here is another, showing the use of the C block. 19336 19337 ;; True if OP is a register operand that is (or could be) a GR reg. 19338 (define_predicate "gr_register_operand" 19339 (match_operand 0 "register_operand") 19340 { 19341 unsigned int regno; 19342 if (GET_CODE (op) == SUBREG) 19343 op = SUBREG_REG (op); 19344 19345 regno = REGNO (op); 19346 return (regno >= FIRST_PSEUDO_REGISTER || GENERAL_REGNO_P (regno)); 19347 }) 19348 19349 Predicates written with 'define_predicate' automatically include a test 19350that MODE is 'VOIDmode', or OP has the same mode as MODE, or OP is a 19351'CONST_INT' or 'CONST_DOUBLE'. They do _not_ check specifically for 19352integer 'CONST_DOUBLE', nor do they test that the value of either kind 19353of constant fits in the requested mode. This is because target-specific 19354predicates that take constants usually have to do more stringent value 19355checks anyway. If you need the exact same treatment of 'CONST_INT' or 19356'CONST_DOUBLE' that the generic predicates provide, use a 19357'MATCH_OPERAND' subexpression to call 'const_int_operand', 19358'const_double_operand', or 'immediate_operand'. 19359 19360 Predicates written with 'define_special_predicate' do not get any 19361automatic mode checks, and are treated as having special mode handling 19362by 'genrecog'. 19363 19364 The program 'genpreds' is responsible for generating code to test 19365predicates. It also writes a header file containing function 19366declarations for all machine-specific predicates. It is not necessary 19367to declare these predicates in 'CPU-protos.h'. 19368 19369 19370File: gccint.info, Node: Constraints, Next: Standard Names, Prev: Predicates, Up: Machine Desc 19371 1937216.8 Operand Constraints 19373======================== 19374 19375Each 'match_operand' in an instruction pattern can specify constraints 19376for the operands allowed. The constraints allow you to fine-tune 19377matching within the set of operands allowed by the predicate. 19378 19379 Constraints can say whether an operand may be in a register, and which 19380kinds of register; whether the operand can be a memory reference, and 19381which kinds of address; whether the operand may be an immediate 19382constant, and which possible values it may have. Constraints can also 19383require two operands to match. Side-effects aren't allowed in operands 19384of inline 'asm', unless '<' or '>' constraints are used, because there 19385is no guarantee that the side-effects will happen exactly once in an 19386instruction that can update the addressing register. 19387 19388* Menu: 19389 19390* Simple Constraints:: Basic use of constraints. 19391* Multi-Alternative:: When an insn has two alternative constraint-patterns. 19392* Class Preferences:: Constraints guide which hard register to put things in. 19393* Modifiers:: More precise control over effects of constraints. 19394* Machine Constraints:: Existing constraints for some particular machines. 19395* Disable Insn Alternatives:: Disable insn alternatives using attributes. 19396* Define Constraints:: How to define machine-specific constraints. 19397* C Constraint Interface:: How to test constraints from C code. 19398 19399 19400File: gccint.info, Node: Simple Constraints, Next: Multi-Alternative, Up: Constraints 19401 1940216.8.1 Simple Constraints 19403------------------------- 19404 19405The simplest kind of constraint is a string full of letters, each of 19406which describes one kind of operand that is permitted. Here are the 19407letters that are allowed: 19408 19409whitespace 19410 Whitespace characters are ignored and can be inserted at any 19411 position except the first. This enables each alternative for 19412 different operands to be visually aligned in the machine 19413 description even if they have different number of constraints and 19414 modifiers. 19415 19416'm' 19417 A memory operand is allowed, with any kind of address that the 19418 machine supports in general. Note that the letter used for the 19419 general memory constraint can be re-defined by a back end using the 19420 'TARGET_MEM_CONSTRAINT' macro. 19421 19422'o' 19423 A memory operand is allowed, but only if the address is 19424 "offsettable". This means that adding a small integer (actually, 19425 the width in bytes of the operand, as determined by its machine 19426 mode) may be added to the address and the result is also a valid 19427 memory address. 19428 19429 For example, an address which is constant is offsettable; so is an 19430 address that is the sum of a register and a constant (as long as a 19431 slightly larger constant is also within the range of 19432 address-offsets supported by the machine); but an autoincrement or 19433 autodecrement address is not offsettable. More complicated 19434 indirect/indexed addresses may or may not be offsettable depending 19435 on the other addressing modes that the machine supports. 19436 19437 Note that in an output operand which can be matched by another 19438 operand, the constraint letter 'o' is valid only when accompanied 19439 by both '<' (if the target machine has predecrement addressing) and 19440 '>' (if the target machine has preincrement addressing). 19441 19442'V' 19443 A memory operand that is not offsettable. In other words, anything 19444 that would fit the 'm' constraint but not the 'o' constraint. 19445 19446'<' 19447 A memory operand with autodecrement addressing (either predecrement 19448 or postdecrement) is allowed. In inline 'asm' this constraint is 19449 only allowed if the operand is used exactly once in an instruction 19450 that can handle the side-effects. Not using an operand with '<' in 19451 constraint string in the inline 'asm' pattern at all or using it in 19452 multiple instructions isn't valid, because the side-effects 19453 wouldn't be performed or would be performed more than once. 19454 Furthermore, on some targets the operand with '<' in constraint 19455 string must be accompanied by special instruction suffixes like 19456 '%U0' instruction suffix on PowerPC or '%P0' on IA-64. 19457 19458'>' 19459 A memory operand with autoincrement addressing (either preincrement 19460 or postincrement) is allowed. In inline 'asm' the same 19461 restrictions as for '<' apply. 19462 19463'r' 19464 A register operand is allowed provided that it is in a general 19465 register. 19466 19467'i' 19468 An immediate integer operand (one with constant value) is allowed. 19469 This includes symbolic constants whose values will be known only at 19470 assembly time or later. 19471 19472'n' 19473 An immediate integer operand with a known numeric value is allowed. 19474 Many systems cannot support assembly-time constants for operands 19475 less than a word wide. Constraints for these operands should use 19476 'n' rather than 'i'. 19477 19478'I', 'J', 'K', ... 'P' 19479 Other letters in the range 'I' through 'P' may be defined in a 19480 machine-dependent fashion to permit immediate integer operands with 19481 explicit integer values in specified ranges. For example, on the 19482 68000, 'I' is defined to stand for the range of values 1 to 8. 19483 This is the range permitted as a shift count in the shift 19484 instructions. 19485 19486'E' 19487 An immediate floating operand (expression code 'const_double') is 19488 allowed, but only if the target floating point format is the same 19489 as that of the host machine (on which the compiler is running). 19490 19491'F' 19492 An immediate floating operand (expression code 'const_double' or 19493 'const_vector') is allowed. 19494 19495'G', 'H' 19496 'G' and 'H' may be defined in a machine-dependent fashion to permit 19497 immediate floating operands in particular ranges of values. 19498 19499's' 19500 An immediate integer operand whose value is not an explicit integer 19501 is allowed. 19502 19503 This might appear strange; if an insn allows a constant operand 19504 with a value not known at compile time, it certainly must allow any 19505 known value. So why use 's' instead of 'i'? Sometimes it allows 19506 better code to be generated. 19507 19508 For example, on the 68000 in a fullword instruction it is possible 19509 to use an immediate operand; but if the immediate value is between 19510 -128 and 127, better code results from loading the value into a 19511 register and using the register. This is because the load into the 19512 register can be done with a 'moveq' instruction. We arrange for 19513 this to happen by defining the letter 'K' to mean "any integer 19514 outside the range -128 to 127", and then specifying 'Ks' in the 19515 operand constraints. 19516 19517'g' 19518 Any register, memory or immediate integer operand is allowed, 19519 except for registers that are not general registers. 19520 19521'X' 19522 Any operand whatsoever is allowed, even if it does not satisfy 19523 'general_operand'. This is normally used in the constraint of a 19524 'match_scratch' when certain alternatives will not actually require 19525 a scratch register. 19526 19527'0', '1', '2', ... '9' 19528 An operand that matches the specified operand number is allowed. 19529 If a digit is used together with letters within the same 19530 alternative, the digit should come last. 19531 19532 This number is allowed to be more than a single digit. If multiple 19533 digits are encountered consecutively, they are interpreted as a 19534 single decimal integer. There is scant chance for ambiguity, since 19535 to-date it has never been desirable that '10' be interpreted as 19536 matching either operand 1 _or_ operand 0. Should this be desired, 19537 one can use multiple alternatives instead. 19538 19539 This is called a "matching constraint" and what it really means is 19540 that the assembler has only a single operand that fills two roles 19541 considered separate in the RTL insn. For example, an add insn has 19542 two input operands and one output operand in the RTL, but on most 19543 CISC machines an add instruction really has only two operands, one 19544 of them an input-output operand: 19545 19546 addl #35,r12 19547 19548 Matching constraints are used in these circumstances. More 19549 precisely, the two operands that match must include one input-only 19550 operand and one output-only operand. Moreover, the digit must be a 19551 smaller number than the number of the operand that uses it in the 19552 constraint. 19553 19554 For operands to match in a particular case usually means that they 19555 are identical-looking RTL expressions. But in a few special cases 19556 specific kinds of dissimilarity are allowed. For example, '*x' as 19557 an input operand will match '*x++' as an output operand. For 19558 proper results in such cases, the output template should always use 19559 the output-operand's number when printing the operand. 19560 19561'p' 19562 An operand that is a valid memory address is allowed. This is for 19563 "load address" and "push address" instructions. 19564 19565 'p' in the constraint must be accompanied by 'address_operand' as 19566 the predicate in the 'match_operand'. This predicate interprets 19567 the mode specified in the 'match_operand' as the mode of the memory 19568 reference for which the address would be valid. 19569 19570OTHER-LETTERS 19571 Other letters can be defined in machine-dependent fashion to stand 19572 for particular classes of registers or other arbitrary operand 19573 types. 'd', 'a' and 'f' are defined on the 68000/68020 to stand 19574 for data, address and floating point registers. 19575 19576 In order to have valid assembler code, each operand must satisfy its 19577constraint. But a failure to do so does not prevent the pattern from 19578applying to an insn. Instead, it directs the compiler to modify the 19579code so that the constraint will be satisfied. Usually this is done by 19580copying an operand into a register. 19581 19582 Contrast, therefore, the two instruction patterns that follow: 19583 19584 (define_insn "" 19585 [(set (match_operand:SI 0 "general_operand" "=r") 19586 (plus:SI (match_dup 0) 19587 (match_operand:SI 1 "general_operand" "r")))] 19588 "" 19589 "...") 19590 19591which has two operands, one of which must appear in two places, and 19592 19593 (define_insn "" 19594 [(set (match_operand:SI 0 "general_operand" "=r") 19595 (plus:SI (match_operand:SI 1 "general_operand" "0") 19596 (match_operand:SI 2 "general_operand" "r")))] 19597 "" 19598 "...") 19599 19600which has three operands, two of which are required by a constraint to 19601be identical. If we are considering an insn of the form 19602 19603 (insn N PREV NEXT 19604 (set (reg:SI 3) 19605 (plus:SI (reg:SI 6) (reg:SI 109))) 19606 ...) 19607 19608the first pattern would not apply at all, because this insn does not 19609contain two identical subexpressions in the right place. The pattern 19610would say, "That does not look like an add instruction; try other 19611patterns". The second pattern would say, "Yes, that's an add 19612instruction, but there is something wrong with it". It would direct the 19613reload pass of the compiler to generate additional insns to make the 19614constraint true. The results might look like this: 19615 19616 (insn N2 PREV N 19617 (set (reg:SI 3) (reg:SI 6)) 19618 ...) 19619 19620 (insn N N2 NEXT 19621 (set (reg:SI 3) 19622 (plus:SI (reg:SI 3) (reg:SI 109))) 19623 ...) 19624 19625 It is up to you to make sure that each operand, in each pattern, has 19626constraints that can handle any RTL expression that could be present for 19627that operand. (When multiple alternatives are in use, each pattern 19628must, for each possible combination of operand expressions, have at 19629least one alternative which can handle that combination of operands.) 19630The constraints don't need to _allow_ any possible operand--when this is 19631the case, they do not constrain--but they must at least point the way to 19632reloading any possible operand so that it will fit. 19633 19634 * If the constraint accepts whatever operands the predicate permits, 19635 there is no problem: reloading is never necessary for this operand. 19636 19637 For example, an operand whose constraints permit everything except 19638 registers is safe provided its predicate rejects registers. 19639 19640 An operand whose predicate accepts only constant values is safe 19641 provided its constraints include the letter 'i'. If any possible 19642 constant value is accepted, then nothing less than 'i' will do; if 19643 the predicate is more selective, then the constraints may also be 19644 more selective. 19645 19646 * Any operand expression can be reloaded by copying it into a 19647 register. So if an operand's constraints allow some kind of 19648 register, it is certain to be safe. It need not permit all classes 19649 of registers; the compiler knows how to copy a register into 19650 another register of the proper class in order to make an 19651 instruction valid. 19652 19653 * A nonoffsettable memory reference can be reloaded by copying the 19654 address into a register. So if the constraint uses the letter 'o', 19655 all memory references are taken care of. 19656 19657 * A constant operand can be reloaded by allocating space in memory to 19658 hold it as preinitialized data. Then the memory reference can be 19659 used in place of the constant. So if the constraint uses the 19660 letters 'o' or 'm', constant operands are not a problem. 19661 19662 * If the constraint permits a constant and a pseudo register used in 19663 an insn was not allocated to a hard register and is equivalent to a 19664 constant, the register will be replaced with the constant. If the 19665 predicate does not permit a constant and the insn is re-recognized 19666 for some reason, the compiler will crash. Thus the predicate must 19667 always recognize any objects allowed by the constraint. 19668 19669 If the operand's predicate can recognize registers, but the constraint 19670does not permit them, it can make the compiler crash. When this operand 19671happens to be a register, the reload pass will be stymied, because it 19672does not know how to copy a register temporarily into memory. 19673 19674 If the predicate accepts a unary operator, the constraint applies to 19675the operand. For example, the MIPS processor at ISA level 3 supports an 19676instruction which adds two registers in 'SImode' to produce a 'DImode' 19677result, but only if the registers are correctly sign extended. This 19678predicate for the input operands accepts a 'sign_extend' of an 'SImode' 19679register. Write the constraint to indicate the type of register that is 19680required for the operand of the 'sign_extend'. 19681 19682 19683File: gccint.info, Node: Multi-Alternative, Next: Class Preferences, Prev: Simple Constraints, Up: Constraints 19684 1968516.8.2 Multiple Alternative Constraints 19686--------------------------------------- 19687 19688Sometimes a single instruction has multiple alternative sets of possible 19689operands. For example, on the 68000, a logical-or instruction can 19690combine register or an immediate value into memory, or it can combine 19691any kind of operand into a register; but it cannot combine one memory 19692location into another. 19693 19694 These constraints are represented as multiple alternatives. An 19695alternative can be described by a series of letters for each operand. 19696The overall constraint for an operand is made from the letters for this 19697operand from the first alternative, a comma, the letters for this 19698operand from the second alternative, a comma, and so on until the last 19699alternative. All operands for a single instruction must have the same 19700number of alternatives. Here is how it is done for fullword logical-or 19701on the 68000: 19702 19703 (define_insn "iorsi3" 19704 [(set (match_operand:SI 0 "general_operand" "=m,d") 19705 (ior:SI (match_operand:SI 1 "general_operand" "%0,0") 19706 (match_operand:SI 2 "general_operand" "dKs,dmKs")))] 19707 ...) 19708 19709 The first alternative has 'm' (memory) for operand 0, '0' for operand 1 19710(meaning it must match operand 0), and 'dKs' for operand 2. The second 19711alternative has 'd' (data register) for operand 0, '0' for operand 1, 19712and 'dmKs' for operand 2. The '=' and '%' in the constraints apply to 19713all the alternatives; their meaning is explained in the next section 19714(*note Class Preferences::). 19715 19716 If all the operands fit any one alternative, the instruction is valid. 19717Otherwise, for each alternative, the compiler counts how many 19718instructions must be added to copy the operands so that that alternative 19719applies. The alternative requiring the least copying is chosen. If two 19720alternatives need the same amount of copying, the one that comes first 19721is chosen. These choices can be altered with the '?' and '!' 19722characters: 19723 19724'?' 19725 Disparage slightly the alternative that the '?' appears in, as a 19726 choice when no alternative applies exactly. The compiler regards 19727 this alternative as one unit more costly for each '?' that appears 19728 in it. 19729 19730'!' 19731 Disparage severely the alternative that the '!' appears in. This 19732 alternative can still be used if it fits without reloading, but if 19733 reloading is needed, some other alternative will be used. 19734 19735'^' 19736 This constraint is analogous to '?' but it disparages slightly the 19737 alternative only if the operand with the '^' needs a reload. 19738 19739'$' 19740 This constraint is analogous to '!' but it disparages severely the 19741 alternative only if the operand with the '$' needs a reload. 19742 19743 When an insn pattern has multiple alternatives in its constraints, 19744often the appearance of the assembler code is determined mostly by which 19745alternative was matched. When this is so, the C code for writing the 19746assembler code can use the variable 'which_alternative', which is the 19747ordinal number of the alternative that was actually satisfied (0 for the 19748first, 1 for the second alternative, etc.). *Note Output Statement::. 19749 19750 19751File: gccint.info, Node: Class Preferences, Next: Modifiers, Prev: Multi-Alternative, Up: Constraints 19752 1975316.8.3 Register Class Preferences 19754--------------------------------- 19755 19756The operand constraints have another function: they enable the compiler 19757to decide which kind of hardware register a pseudo register is best 19758allocated to. The compiler examines the constraints that apply to the 19759insns that use the pseudo register, looking for the machine-dependent 19760letters such as 'd' and 'a' that specify classes of registers. The 19761pseudo register is put in whichever class gets the most "votes". The 19762constraint letters 'g' and 'r' also vote: they vote in favor of a 19763general register. The machine description says which registers are 19764considered general. 19765 19766 Of course, on some machines all registers are equivalent, and no 19767register classes are defined. Then none of this complexity is relevant. 19768 19769 19770File: gccint.info, Node: Modifiers, Next: Machine Constraints, Prev: Class Preferences, Up: Constraints 19771 1977216.8.4 Constraint Modifier Characters 19773------------------------------------- 19774 19775Here are constraint modifier characters. 19776 19777'=' 19778 Means that this operand is written to by this instruction: the 19779 previous value is discarded and replaced by new data. 19780 19781'+' 19782 Means that this operand is both read and written by the 19783 instruction. 19784 19785 When the compiler fixes up the operands to satisfy the constraints, 19786 it needs to know which operands are read by the instruction and 19787 which are written by it. '=' identifies an operand which is only 19788 written; '+' identifies an operand that is both read and written; 19789 all other operands are assumed to only be read. 19790 19791 If you specify '=' or '+' in a constraint, you put it in the first 19792 character of the constraint string. 19793 19794'&' 19795 Means (in a particular alternative) that this operand is an 19796 "earlyclobber" operand, which is written before the instruction is 19797 finished using the input operands. Therefore, this operand may not 19798 lie in a register that is read by the instruction or as part of any 19799 memory address. 19800 19801 '&' applies only to the alternative in which it is written. In 19802 constraints with multiple alternatives, sometimes one alternative 19803 requires '&' while others do not. See, for example, the 'movdf' 19804 insn of the 68000. 19805 19806 A operand which is read by the instruction can be tied to an 19807 earlyclobber operand if its only use as an input occurs before the 19808 early result is written. Adding alternatives of this form often 19809 allows GCC to produce better code when only some of the read 19810 operands can be affected by the earlyclobber. See, for example, 19811 the 'mulsi3' insn of the ARM. 19812 19813 Furthermore, if the "earlyclobber" operand is also a read/write 19814 operand, then that operand is written only after it's used. 19815 19816 '&' does not obviate the need to write '=' or '+'. As 19817 "earlyclobber" operands are always written, a read-only 19818 "earlyclobber" operand is ill-formed and will be rejected by the 19819 compiler. 19820 19821'%' 19822 Declares the instruction to be commutative for this operand and the 19823 following operand. This means that the compiler may interchange 19824 the two operands if that is the cheapest way to make all operands 19825 fit the constraints. '%' applies to all alternatives and must 19826 appear as the first character in the constraint. Only read-only 19827 operands can use '%'. 19828 19829 This is often used in patterns for addition instructions that 19830 really have only two operands: the result must go in one of the 19831 arguments. Here for example, is how the 68000 halfword-add 19832 instruction is defined: 19833 19834 (define_insn "addhi3" 19835 [(set (match_operand:HI 0 "general_operand" "=m,r") 19836 (plus:HI (match_operand:HI 1 "general_operand" "%0,0") 19837 (match_operand:HI 2 "general_operand" "di,g")))] 19838 ...) 19839 GCC can only handle one commutative pair in an asm; if you use 19840 more, the compiler may fail. Note that you need not use the 19841 modifier if the two alternatives are strictly identical; this would 19842 only waste time in the reload pass. The modifier is not 19843 operational after register allocation, so the result of 19844 'define_peephole2' and 'define_split's performed after reload 19845 cannot rely on '%' to make the intended insn match. 19846 19847'#' 19848 Says that all following characters, up to the next comma, are to be 19849 ignored as a constraint. They are significant only for choosing 19850 register preferences. 19851 19852'*' 19853 Says that the following character should be ignored when choosing 19854 register preferences. '*' has no effect on the meaning of the 19855 constraint as a constraint, and no effect on reloading. For LRA 19856 '*' additionally disparages slightly the alternative if the 19857 following character matches the operand. 19858 19859 Here is an example: the 68000 has an instruction to sign-extend a 19860 halfword in a data register, and can also sign-extend a value by 19861 copying it into an address register. While either kind of register 19862 is acceptable, the constraints on an address-register destination 19863 are less strict, so it is best if register allocation makes an 19864 address register its goal. Therefore, '*' is used so that the 'd' 19865 constraint letter (for data register) is ignored when computing 19866 register preferences. 19867 19868 (define_insn "extendhisi2" 19869 [(set (match_operand:SI 0 "general_operand" "=*d,a") 19870 (sign_extend:SI 19871 (match_operand:HI 1 "general_operand" "0,g")))] 19872 ...) 19873 19874 19875File: gccint.info, Node: Machine Constraints, Next: Disable Insn Alternatives, Prev: Modifiers, Up: Constraints 19876 1987716.8.5 Constraints for Particular Machines 19878------------------------------------------ 19879 19880Whenever possible, you should use the general-purpose constraint letters 19881in 'asm' arguments, since they will convey meaning more readily to 19882people reading your code. Failing that, use the constraint letters that 19883usually have very similar meanings across architectures. The most 19884commonly used constraints are 'm' and 'r' (for memory and 19885general-purpose registers respectively; *note Simple Constraints::), and 19886'I', usually the letter indicating the most common immediate-constant 19887format. 19888 19889 Each architecture defines additional constraints. These constraints 19890are used by the compiler itself for instruction generation, as well as 19891for 'asm' statements; therefore, some of the constraints are not 19892particularly useful for 'asm'. Here is a summary of some of the 19893machine-dependent constraints available on some particular machines; it 19894includes both constraints that are useful for 'asm' and constraints that 19895aren't. The compiler source file mentioned in the table heading for 19896each architecture is the definitive reference for the meanings of that 19897architecture's constraints. 19898 19899_AArch64 family--'config/aarch64/constraints.md'_ 19900 'k' 19901 The stack pointer register ('SP') 19902 19903 'w' 19904 Floating point or SIMD vector register 19905 19906 'I' 19907 Integer constant that is valid as an immediate operand in an 19908 'ADD' instruction 19909 19910 'J' 19911 Integer constant that is valid as an immediate operand in a 19912 'SUB' instruction (once negated) 19913 19914 'K' 19915 Integer constant that can be used with a 32-bit logical 19916 instruction 19917 19918 'L' 19919 Integer constant that can be used with a 64-bit logical 19920 instruction 19921 19922 'M' 19923 Integer constant that is valid as an immediate operand in a 19924 32-bit 'MOV' pseudo instruction. The 'MOV' may be assembled 19925 to one of several different machine instructions depending on 19926 the value 19927 19928 'N' 19929 Integer constant that is valid as an immediate operand in a 19930 64-bit 'MOV' pseudo instruction 19931 19932 'S' 19933 An absolute symbolic address or a label reference 19934 19935 'Y' 19936 Floating point constant zero 19937 19938 'Z' 19939 Integer constant zero 19940 19941 'Ush' 19942 The high part (bits 12 and upwards) of the pc-relative address 19943 of a symbol within 4GB of the instruction 19944 19945 'Q' 19946 A memory address which uses a single base register with no 19947 offset 19948 19949 'Ump' 19950 A memory address suitable for a load/store pair instruction in 19951 SI, DI, SF and DF modes 19952 19953_ARC --'config/arc/constraints.md'_ 19954 'q' 19955 Registers usable in ARCompact 16-bit instructions: 'r0'-'r3', 19956 'r12'-'r15'. This constraint can only match when the '-mq' 19957 option is in effect. 19958 19959 'e' 19960 Registers usable as base-regs of memory addresses in ARCompact 19961 16-bit memory instructions: 'r0'-'r3', 'r12'-'r15', 'sp'. 19962 This constraint can only match when the '-mq' option is in 19963 effect. 19964 'D' 19965 ARC FPX (dpfp) 64-bit registers. 'D0', 'D1'. 19966 19967 'I' 19968 A signed 12-bit integer constant. 19969 19970 'Cal' 19971 constant for arithmetic/logical operations. This might be any 19972 constant that can be put into a long immediate by the assmbler 19973 or linker without involving a PIC relocation. 19974 19975 'K' 19976 A 3-bit unsigned integer constant. 19977 19978 'L' 19979 A 6-bit unsigned integer constant. 19980 19981 'CnL' 19982 One's complement of a 6-bit unsigned integer constant. 19983 19984 'CmL' 19985 Two's complement of a 6-bit unsigned integer constant. 19986 19987 'M' 19988 A 5-bit unsigned integer constant. 19989 19990 'O' 19991 A 7-bit unsigned integer constant. 19992 19993 'P' 19994 A 8-bit unsigned integer constant. 19995 19996 'H' 19997 Any const_double value. 19998 19999_ARM family--'config/arm/constraints.md'_ 20000 20001 'h' 20002 In Thumb state, the core registers 'r8'-'r15'. 20003 20004 'k' 20005 The stack pointer register. 20006 20007 'l' 20008 In Thumb State the core registers 'r0'-'r7'. In ARM state 20009 this is an alias for the 'r' constraint. 20010 20011 't' 20012 VFP floating-point registers 's0'-'s31'. Used for 32 bit 20013 values. 20014 20015 'w' 20016 VFP floating-point registers 'd0'-'d31' and the appropriate 20017 subset 'd0'-'d15' based on command line options. Used for 64 20018 bit values only. Not valid for Thumb1. 20019 20020 'y' 20021 The iWMMX co-processor registers. 20022 20023 'z' 20024 The iWMMX GR registers. 20025 20026 'G' 20027 The floating-point constant 0.0 20028 20029 'I' 20030 Integer that is valid as an immediate operand in a data 20031 processing instruction. That is, an integer in the range 0 to 20032 255 rotated by a multiple of 2 20033 20034 'J' 20035 Integer in the range -4095 to 4095 20036 20037 'K' 20038 Integer that satisfies constraint 'I' when inverted (ones 20039 complement) 20040 20041 'L' 20042 Integer that satisfies constraint 'I' when negated (twos 20043 complement) 20044 20045 'M' 20046 Integer in the range 0 to 32 20047 20048 'Q' 20049 A memory reference where the exact address is in a single 20050 register (''m'' is preferable for 'asm' statements) 20051 20052 'R' 20053 An item in the constant pool 20054 20055 'S' 20056 A symbol in the text segment of the current file 20057 20058 'Uv' 20059 A memory reference suitable for VFP load/store insns 20060 (reg+constant offset) 20061 20062 'Uy' 20063 A memory reference suitable for iWMMXt load/store 20064 instructions. 20065 20066 'Uq' 20067 A memory reference suitable for the ARMv4 ldrsb instruction. 20068 20069_AVR family--'config/avr/constraints.md'_ 20070 'l' 20071 Registers from r0 to r15 20072 20073 'a' 20074 Registers from r16 to r23 20075 20076 'd' 20077 Registers from r16 to r31 20078 20079 'w' 20080 Registers from r24 to r31. These registers can be used in 20081 'adiw' command 20082 20083 'e' 20084 Pointer register (r26-r31) 20085 20086 'b' 20087 Base pointer register (r28-r31) 20088 20089 'q' 20090 Stack pointer register (SPH:SPL) 20091 20092 't' 20093 Temporary register r0 20094 20095 'x' 20096 Register pair X (r27:r26) 20097 20098 'y' 20099 Register pair Y (r29:r28) 20100 20101 'z' 20102 Register pair Z (r31:r30) 20103 20104 'I' 20105 Constant greater than -1, less than 64 20106 20107 'J' 20108 Constant greater than -64, less than 1 20109 20110 'K' 20111 Constant integer 2 20112 20113 'L' 20114 Constant integer 0 20115 20116 'M' 20117 Constant that fits in 8 bits 20118 20119 'N' 20120 Constant integer -1 20121 20122 'O' 20123 Constant integer 8, 16, or 24 20124 20125 'P' 20126 Constant integer 1 20127 20128 'G' 20129 A floating point constant 0.0 20130 20131 'Q' 20132 A memory address based on Y or Z pointer with displacement. 20133 20134_Blackfin family--'config/bfin/constraints.md'_ 20135 'a' 20136 P register 20137 20138 'd' 20139 D register 20140 20141 'z' 20142 A call clobbered P register. 20143 20144 'qN' 20145 A single register. If N is in the range 0 to 7, the 20146 corresponding D register. If it is 'A', then the register P0. 20147 20148 'D' 20149 Even-numbered D register 20150 20151 'W' 20152 Odd-numbered D register 20153 20154 'e' 20155 Accumulator register. 20156 20157 'A' 20158 Even-numbered accumulator register. 20159 20160 'B' 20161 Odd-numbered accumulator register. 20162 20163 'b' 20164 I register 20165 20166 'v' 20167 B register 20168 20169 'f' 20170 M register 20171 20172 'c' 20173 Registers used for circular buffering, i.e. I, B, or L 20174 registers. 20175 20176 'C' 20177 The CC register. 20178 20179 't' 20180 LT0 or LT1. 20181 20182 'k' 20183 LC0 or LC1. 20184 20185 'u' 20186 LB0 or LB1. 20187 20188 'x' 20189 Any D, P, B, M, I or L register. 20190 20191 'y' 20192 Additional registers typically used only in prologues and 20193 epilogues: RETS, RETN, RETI, RETX, RETE, ASTAT, SEQSTAT and 20194 USP. 20195 20196 'w' 20197 Any register except accumulators or CC. 20198 20199 'Ksh' 20200 Signed 16 bit integer (in the range -32768 to 32767) 20201 20202 'Kuh' 20203 Unsigned 16 bit integer (in the range 0 to 65535) 20204 20205 'Ks7' 20206 Signed 7 bit integer (in the range -64 to 63) 20207 20208 'Ku7' 20209 Unsigned 7 bit integer (in the range 0 to 127) 20210 20211 'Ku5' 20212 Unsigned 5 bit integer (in the range 0 to 31) 20213 20214 'Ks4' 20215 Signed 4 bit integer (in the range -8 to 7) 20216 20217 'Ks3' 20218 Signed 3 bit integer (in the range -3 to 4) 20219 20220 'Ku3' 20221 Unsigned 3 bit integer (in the range 0 to 7) 20222 20223 'PN' 20224 Constant N, where N is a single-digit constant in the range 0 20225 to 4. 20226 20227 'PA' 20228 An integer equal to one of the MACFLAG_XXX constants that is 20229 suitable for use with either accumulator. 20230 20231 'PB' 20232 An integer equal to one of the MACFLAG_XXX constants that is 20233 suitable for use only with accumulator A1. 20234 20235 'M1' 20236 Constant 255. 20237 20238 'M2' 20239 Constant 65535. 20240 20241 'J' 20242 An integer constant with exactly a single bit set. 20243 20244 'L' 20245 An integer constant with all bits set except exactly one. 20246 20247 'H' 20248 20249 'Q' 20250 Any SYMBOL_REF. 20251 20252_CR16 Architecture--'config/cr16/cr16.h'_ 20253 20254 'b' 20255 Registers from r0 to r14 (registers without stack pointer) 20256 20257 't' 20258 Register from r0 to r11 (all 16-bit registers) 20259 20260 'p' 20261 Register from r12 to r15 (all 32-bit registers) 20262 20263 'I' 20264 Signed constant that fits in 4 bits 20265 20266 'J' 20267 Signed constant that fits in 5 bits 20268 20269 'K' 20270 Signed constant that fits in 6 bits 20271 20272 'L' 20273 Unsigned constant that fits in 4 bits 20274 20275 'M' 20276 Signed constant that fits in 32 bits 20277 20278 'N' 20279 Check for 64 bits wide constants for add/sub instructions 20280 20281 'G' 20282 Floating point constant that is legal for store immediate 20283 20284_Epiphany--'config/epiphany/constraints.md'_ 20285 'U16' 20286 An unsigned 16-bit constant. 20287 20288 'K' 20289 An unsigned 5-bit constant. 20290 20291 'L' 20292 A signed 11-bit constant. 20293 20294 'Cm1' 20295 A signed 11-bit constant added to -1. Can only match when the 20296 '-m1reg-REG' option is active. 20297 20298 'Cl1' 20299 Left-shift of -1, i.e., a bit mask with a block of leading 20300 ones, the rest being a block of trailing zeroes. Can only 20301 match when the '-m1reg-REG' option is active. 20302 20303 'Cr1' 20304 Right-shift of -1, i.e., a bit mask with a trailing block of 20305 ones, the rest being zeroes. Or to put it another way, one 20306 less than a power of two. Can only match when the 20307 '-m1reg-REG' option is active. 20308 20309 'Cal' 20310 Constant for arithmetic/logical operations. This is like 'i', 20311 except that for position independent code, no symbols / 20312 expressions needing relocations are allowed. 20313 20314 'Csy' 20315 Symbolic constant for call/jump instruction. 20316 20317 'Rcs' 20318 The register class usable in short insns. This is a register 20319 class constraint, and can thus drive register allocation. 20320 This constraint won't match unless '-mprefer-short-insn-regs' 20321 is in effect. 20322 20323 'Rsc' 20324 The the register class of registers that can be used to hold a 20325 sibcall call address. I.e., a caller-saved register. 20326 20327 'Rct' 20328 Core control register class. 20329 20330 'Rgs' 20331 The register group usable in short insns. This constraint 20332 does not use a register class, so that it only passively 20333 matches suitable registers, and doesn't drive register 20334 allocation. 20335 20336 'Car' 20337 Constant suitable for the addsi3_r pattern. This is a valid 20338 offset For byte, halfword, or word addressing. 20339 20340 'Rra' 20341 Matches the return address if it can be replaced with the link 20342 register. 20343 20344 'Rcc' 20345 Matches the integer condition code register. 20346 20347 'Sra' 20348 Matches the return address if it is in a stack slot. 20349 20350 'Cfm' 20351 Matches control register values to switch fp mode, which are 20352 encapsulated in 'UNSPEC_FP_MODE'. 20353 20354_FRV--'config/frv/frv.h'_ 20355 'a' 20356 Register in the class 'ACC_REGS' ('acc0' to 'acc7'). 20357 20358 'b' 20359 Register in the class 'EVEN_ACC_REGS' ('acc0' to 'acc7'). 20360 20361 'c' 20362 Register in the class 'CC_REGS' ('fcc0' to 'fcc3' and 'icc0' 20363 to 'icc3'). 20364 20365 'd' 20366 Register in the class 'GPR_REGS' ('gr0' to 'gr63'). 20367 20368 'e' 20369 Register in the class 'EVEN_REGS' ('gr0' to 'gr63'). Odd 20370 registers are excluded not in the class but through the use of 20371 a machine mode larger than 4 bytes. 20372 20373 'f' 20374 Register in the class 'FPR_REGS' ('fr0' to 'fr63'). 20375 20376 'h' 20377 Register in the class 'FEVEN_REGS' ('fr0' to 'fr63'). Odd 20378 registers are excluded not in the class but through the use of 20379 a machine mode larger than 4 bytes. 20380 20381 'l' 20382 Register in the class 'LR_REG' (the 'lr' register). 20383 20384 'q' 20385 Register in the class 'QUAD_REGS' ('gr2' to 'gr63'). Register 20386 numbers not divisible by 4 are excluded not in the class but 20387 through the use of a machine mode larger than 8 bytes. 20388 20389 't' 20390 Register in the class 'ICC_REGS' ('icc0' to 'icc3'). 20391 20392 'u' 20393 Register in the class 'FCC_REGS' ('fcc0' to 'fcc3'). 20394 20395 'v' 20396 Register in the class 'ICR_REGS' ('cc4' to 'cc7'). 20397 20398 'w' 20399 Register in the class 'FCR_REGS' ('cc0' to 'cc3'). 20400 20401 'x' 20402 Register in the class 'QUAD_FPR_REGS' ('fr0' to 'fr63'). 20403 Register numbers not divisible by 4 are excluded not in the 20404 class but through the use of a machine mode larger than 8 20405 bytes. 20406 20407 'z' 20408 Register in the class 'SPR_REGS' ('lcr' and 'lr'). 20409 20410 'A' 20411 Register in the class 'QUAD_ACC_REGS' ('acc0' to 'acc7'). 20412 20413 'B' 20414 Register in the class 'ACCG_REGS' ('accg0' to 'accg7'). 20415 20416 'C' 20417 Register in the class 'CR_REGS' ('cc0' to 'cc7'). 20418 20419 'G' 20420 Floating point constant zero 20421 20422 'I' 20423 6-bit signed integer constant 20424 20425 'J' 20426 10-bit signed integer constant 20427 20428 'L' 20429 16-bit signed integer constant 20430 20431 'M' 20432 16-bit unsigned integer constant 20433 20434 'N' 20435 12-bit signed integer constant that is negative--i.e. in the 20436 range of -2048 to -1 20437 20438 'O' 20439 Constant zero 20440 20441 'P' 20442 12-bit signed integer constant that is greater than zero--i.e. 20443 in the range of 1 to 2047. 20444 20445_FT32--'config/ft32/constraints.md'_ 20446 'A' 20447 An absolute address 20448 20449 'B' 20450 An offset address 20451 20452 'W' 20453 A register indirect memory operand 20454 20455 'e' 20456 An offset address. 20457 20458 'f' 20459 An offset address. 20460 20461 'O' 20462 The constant zero or one 20463 20464 'I' 20465 A 16-bit signed constant (-32768 ... 32767) 20466 20467 'w' 20468 A bitfield mask suitable for bext or bins 20469 20470 'x' 20471 An inverted bitfield mask suitable for bext or bins 20472 20473 'L' 20474 A 16-bit unsigned constant, multiple of 4 (0 ... 65532) 20475 20476 'S' 20477 A 20-bit signed constant (-524288 ... 524287) 20478 20479 'b' 20480 A constant for a bitfield width (1 ... 16) 20481 20482 'KA' 20483 A 10-bit signed constant (-512 ... 511) 20484 20485_Hewlett-Packard PA-RISC--'config/pa/pa.h'_ 20486 'a' 20487 General register 1 20488 20489 'f' 20490 Floating point register 20491 20492 'q' 20493 Shift amount register 20494 20495 'x' 20496 Floating point register (deprecated) 20497 20498 'y' 20499 Upper floating point register (32-bit), floating point 20500 register (64-bit) 20501 20502 'Z' 20503 Any register 20504 20505 'I' 20506 Signed 11-bit integer constant 20507 20508 'J' 20509 Signed 14-bit integer constant 20510 20511 'K' 20512 Integer constant that can be deposited with a 'zdepi' 20513 instruction 20514 20515 'L' 20516 Signed 5-bit integer constant 20517 20518 'M' 20519 Integer constant 0 20520 20521 'N' 20522 Integer constant that can be loaded with a 'ldil' instruction 20523 20524 'O' 20525 Integer constant whose value plus one is a power of 2 20526 20527 'P' 20528 Integer constant that can be used for 'and' operations in 20529 'depi' and 'extru' instructions 20530 20531 'S' 20532 Integer constant 31 20533 20534 'U' 20535 Integer constant 63 20536 20537 'G' 20538 Floating-point constant 0.0 20539 20540 'A' 20541 A 'lo_sum' data-linkage-table memory operand 20542 20543 'Q' 20544 A memory operand that can be used as the destination operand 20545 of an integer store instruction 20546 20547 'R' 20548 A scaled or unscaled indexed memory operand 20549 20550 'T' 20551 A memory operand for floating-point loads and stores 20552 20553 'W' 20554 A register indirect memory operand 20555 20556_Intel IA-64--'config/ia64/ia64.h'_ 20557 'a' 20558 General register 'r0' to 'r3' for 'addl' instruction 20559 20560 'b' 20561 Branch register 20562 20563 'c' 20564 Predicate register ('c' as in "conditional") 20565 20566 'd' 20567 Application register residing in M-unit 20568 20569 'e' 20570 Application register residing in I-unit 20571 20572 'f' 20573 Floating-point register 20574 20575 'm' 20576 Memory operand. If used together with '<' or '>', the operand 20577 can have postincrement and postdecrement which require 20578 printing with '%Pn' on IA-64. 20579 20580 'G' 20581 Floating-point constant 0.0 or 1.0 20582 20583 'I' 20584 14-bit signed integer constant 20585 20586 'J' 20587 22-bit signed integer constant 20588 20589 'K' 20590 8-bit signed integer constant for logical instructions 20591 20592 'L' 20593 8-bit adjusted signed integer constant for compare pseudo-ops 20594 20595 'M' 20596 6-bit unsigned integer constant for shift counts 20597 20598 'N' 20599 9-bit signed integer constant for load and store 20600 postincrements 20601 20602 'O' 20603 The constant zero 20604 20605 'P' 20606 0 or -1 for 'dep' instruction 20607 20608 'Q' 20609 Non-volatile memory for floating-point loads and stores 20610 20611 'R' 20612 Integer constant in the range 1 to 4 for 'shladd' instruction 20613 20614 'S' 20615 Memory operand except postincrement and postdecrement. This 20616 is now roughly the same as 'm' when not used together with '<' 20617 or '>'. 20618 20619_M32C--'config/m32c/m32c.c'_ 20620 'Rsp' 20621 'Rfb' 20622 'Rsb' 20623 '$sp', '$fb', '$sb'. 20624 20625 'Rcr' 20626 Any control register, when they're 16 bits wide (nothing if 20627 control registers are 24 bits wide) 20628 20629 'Rcl' 20630 Any control register, when they're 24 bits wide. 20631 20632 'R0w' 20633 'R1w' 20634 'R2w' 20635 'R3w' 20636 $r0, $r1, $r2, $r3. 20637 20638 'R02' 20639 $r0 or $r2, or $r2r0 for 32 bit values. 20640 20641 'R13' 20642 $r1 or $r3, or $r3r1 for 32 bit values. 20643 20644 'Rdi' 20645 A register that can hold a 64 bit value. 20646 20647 'Rhl' 20648 $r0 or $r1 (registers with addressable high/low bytes) 20649 20650 'R23' 20651 $r2 or $r3 20652 20653 'Raa' 20654 Address registers 20655 20656 'Raw' 20657 Address registers when they're 16 bits wide. 20658 20659 'Ral' 20660 Address registers when they're 24 bits wide. 20661 20662 'Rqi' 20663 Registers that can hold QI values. 20664 20665 'Rad' 20666 Registers that can be used with displacements ($a0, $a1, $sb). 20667 20668 'Rsi' 20669 Registers that can hold 32 bit values. 20670 20671 'Rhi' 20672 Registers that can hold 16 bit values. 20673 20674 'Rhc' 20675 Registers chat can hold 16 bit values, including all control 20676 registers. 20677 20678 'Rra' 20679 $r0 through R1, plus $a0 and $a1. 20680 20681 'Rfl' 20682 The flags register. 20683 20684 'Rmm' 20685 The memory-based pseudo-registers $mem0 through $mem15. 20686 20687 'Rpi' 20688 Registers that can hold pointers (16 bit registers for r8c, 20689 m16c; 24 bit registers for m32cm, m32c). 20690 20691 'Rpa' 20692 Matches multiple registers in a PARALLEL to form a larger 20693 register. Used to match function return values. 20694 20695 'Is3' 20696 -8 ... 7 20697 20698 'IS1' 20699 -128 ... 127 20700 20701 'IS2' 20702 -32768 ... 32767 20703 20704 'IU2' 20705 0 ... 65535 20706 20707 'In4' 20708 -8 ... -1 or 1 ... 8 20709 20710 'In5' 20711 -16 ... -1 or 1 ... 16 20712 20713 'In6' 20714 -32 ... -1 or 1 ... 32 20715 20716 'IM2' 20717 -65536 ... -1 20718 20719 'Ilb' 20720 An 8 bit value with exactly one bit set. 20721 20722 'Ilw' 20723 A 16 bit value with exactly one bit set. 20724 20725 'Sd' 20726 The common src/dest memory addressing modes. 20727 20728 'Sa' 20729 Memory addressed using $a0 or $a1. 20730 20731 'Si' 20732 Memory addressed with immediate addresses. 20733 20734 'Ss' 20735 Memory addressed using the stack pointer ($sp). 20736 20737 'Sf' 20738 Memory addressed using the frame base register ($fb). 20739 20740 'Ss' 20741 Memory addressed using the small base register ($sb). 20742 20743 'S1' 20744 $r1h 20745 20746_MeP--'config/mep/constraints.md'_ 20747 20748 'a' 20749 The $sp register. 20750 20751 'b' 20752 The $tp register. 20753 20754 'c' 20755 Any control register. 20756 20757 'd' 20758 Either the $hi or the $lo register. 20759 20760 'em' 20761 Coprocessor registers that can be directly loaded ($c0-$c15). 20762 20763 'ex' 20764 Coprocessor registers that can be moved to each other. 20765 20766 'er' 20767 Coprocessor registers that can be moved to core registers. 20768 20769 'h' 20770 The $hi register. 20771 20772 'j' 20773 The $rpc register. 20774 20775 'l' 20776 The $lo register. 20777 20778 't' 20779 Registers which can be used in $tp-relative addressing. 20780 20781 'v' 20782 The $gp register. 20783 20784 'x' 20785 The coprocessor registers. 20786 20787 'y' 20788 The coprocessor control registers. 20789 20790 'z' 20791 The $0 register. 20792 20793 'A' 20794 User-defined register set A. 20795 20796 'B' 20797 User-defined register set B. 20798 20799 'C' 20800 User-defined register set C. 20801 20802 'D' 20803 User-defined register set D. 20804 20805 'I' 20806 Offsets for $gp-rel addressing. 20807 20808 'J' 20809 Constants that can be used directly with boolean insns. 20810 20811 'K' 20812 Constants that can be moved directly to registers. 20813 20814 'L' 20815 Small constants that can be added to registers. 20816 20817 'M' 20818 Long shift counts. 20819 20820 'N' 20821 Small constants that can be compared to registers. 20822 20823 'O' 20824 Constants that can be loaded into the top half of registers. 20825 20826 'S' 20827 Signed 8-bit immediates. 20828 20829 'T' 20830 Symbols encoded for $tp-rel or $gp-rel addressing. 20831 20832 'U' 20833 Non-constant addresses for loading/saving coprocessor 20834 registers. 20835 20836 'W' 20837 The top half of a symbol's value. 20838 20839 'Y' 20840 A register indirect address without offset. 20841 20842 'Z' 20843 Symbolic references to the control bus. 20844 20845_MicroBlaze--'config/microblaze/constraints.md'_ 20846 'd' 20847 A general register ('r0' to 'r31'). 20848 20849 'z' 20850 A status register ('rmsr', '$fcc1' to '$fcc7'). 20851 20852_MIPS--'config/mips/constraints.md'_ 20853 'd' 20854 An address register. This is equivalent to 'r' unless 20855 generating MIPS16 code. 20856 20857 'f' 20858 A floating-point register (if available). 20859 20860 'h' 20861 Formerly the 'hi' register. This constraint is no longer 20862 supported. 20863 20864 'l' 20865 The 'lo' register. Use this register to store values that are 20866 no bigger than a word. 20867 20868 'x' 20869 The concatenated 'hi' and 'lo' registers. Use this register 20870 to store doubleword values. 20871 20872 'c' 20873 A register suitable for use in an indirect jump. This will 20874 always be '$25' for '-mabicalls'. 20875 20876 'v' 20877 Register '$3'. Do not use this constraint in new code; it is 20878 retained only for compatibility with glibc. 20879 20880 'y' 20881 Equivalent to 'r'; retained for backwards compatibility. 20882 20883 'z' 20884 A floating-point condition code register. 20885 20886 'I' 20887 A signed 16-bit constant (for arithmetic instructions). 20888 20889 'J' 20890 Integer zero. 20891 20892 'K' 20893 An unsigned 16-bit constant (for logic instructions). 20894 20895 'L' 20896 A signed 32-bit constant in which the lower 16 bits are zero. 20897 Such constants can be loaded using 'lui'. 20898 20899 'M' 20900 A constant that cannot be loaded using 'lui', 'addiu' or 20901 'ori'. 20902 20903 'N' 20904 A constant in the range -65535 to -1 (inclusive). 20905 20906 'O' 20907 A signed 15-bit constant. 20908 20909 'P' 20910 A constant in the range 1 to 65535 (inclusive). 20911 20912 'G' 20913 Floating-point zero. 20914 20915 'R' 20916 An address that can be used in a non-macro load or store. 20917 20918 'ZC' 20919 A memory operand whose address is formed by a base register 20920 and offset that is suitable for use in instructions with the 20921 same addressing mode as 'll' and 'sc'. 20922 20923 'ZD' 20924 An address suitable for a 'prefetch' instruction, or for any 20925 other instruction with the same addressing mode as 'prefetch'. 20926 20927_Motorola 680x0--'config/m68k/constraints.md'_ 20928 'a' 20929 Address register 20930 20931 'd' 20932 Data register 20933 20934 'f' 20935 68881 floating-point register, if available 20936 20937 'I' 20938 Integer in the range 1 to 8 20939 20940 'J' 20941 16-bit signed number 20942 20943 'K' 20944 Signed number whose magnitude is greater than 0x80 20945 20946 'L' 20947 Integer in the range -8 to -1 20948 20949 'M' 20950 Signed number whose magnitude is greater than 0x100 20951 20952 'N' 20953 Range 24 to 31, rotatert:SI 8 to 1 expressed as rotate 20954 20955 'O' 20956 16 (for rotate using swap) 20957 20958 'P' 20959 Range 8 to 15, rotatert:HI 8 to 1 expressed as rotate 20960 20961 'R' 20962 Numbers that mov3q can handle 20963 20964 'G' 20965 Floating point constant that is not a 68881 constant 20966 20967 'S' 20968 Operands that satisfy 'm' when -mpcrel is in effect 20969 20970 'T' 20971 Operands that satisfy 's' when -mpcrel is not in effect 20972 20973 'Q' 20974 Address register indirect addressing mode 20975 20976 'U' 20977 Register offset addressing 20978 20979 'W' 20980 const_call_operand 20981 20982 'Cs' 20983 symbol_ref or const 20984 20985 'Ci' 20986 const_int 20987 20988 'C0' 20989 const_int 0 20990 20991 'Cj' 20992 Range of signed numbers that don't fit in 16 bits 20993 20994 'Cmvq' 20995 Integers valid for mvq 20996 20997 'Capsw' 20998 Integers valid for a moveq followed by a swap 20999 21000 'Cmvz' 21001 Integers valid for mvz 21002 21003 'Cmvs' 21004 Integers valid for mvs 21005 21006 'Ap' 21007 push_operand 21008 21009 'Ac' 21010 Non-register operands allowed in clr 21011 21012_Moxie--'config/moxie/constraints.md'_ 21013 'A' 21014 An absolute address 21015 21016 'B' 21017 An offset address 21018 21019 'W' 21020 A register indirect memory operand 21021 21022 'I' 21023 A constant in the range of 0 to 255. 21024 21025 'N' 21026 A constant in the range of 0 to -255. 21027 21028_MSP430-'config/msp430/constraints.md'_ 21029 21030 'R12' 21031 Register R12. 21032 21033 'R13' 21034 Register R13. 21035 21036 'K' 21037 Integer constant 1. 21038 21039 'L' 21040 Integer constant -1^20..1^19. 21041 21042 'M' 21043 Integer constant 1-4. 21044 21045 'Ya' 21046 Memory references which do not require an extended MOVX 21047 instruction. 21048 21049 'Yl' 21050 Memory reference, labels only. 21051 21052 'Ys' 21053 Memory reference, stack only. 21054 21055_NDS32--'config/nds32/constraints.md'_ 21056 'w' 21057 LOW register class $r0 to $r7 constraint for V3/V3M ISA. 21058 'l' 21059 LOW register class $r0 to $r7. 21060 'd' 21061 MIDDLE register class $r0 to $r11, $r16 to $r19. 21062 'h' 21063 HIGH register class $r12 to $r14, $r20 to $r31. 21064 't' 21065 Temporary assist register $ta (i.e. $r15). 21066 'k' 21067 Stack register $sp. 21068 'Iu03' 21069 Unsigned immediate 3-bit value. 21070 'In03' 21071 Negative immediate 3-bit value in the range of -7-0. 21072 'Iu04' 21073 Unsigned immediate 4-bit value. 21074 'Is05' 21075 Signed immediate 5-bit value. 21076 'Iu05' 21077 Unsigned immediate 5-bit value. 21078 'In05' 21079 Negative immediate 5-bit value in the range of -31-0. 21080 'Ip05' 21081 Unsigned immediate 5-bit value for movpi45 instruction with 21082 range 16-47. 21083 'Iu06' 21084 Unsigned immediate 6-bit value constraint for addri36.sp 21085 instruction. 21086 'Iu08' 21087 Unsigned immediate 8-bit value. 21088 'Iu09' 21089 Unsigned immediate 9-bit value. 21090 'Is10' 21091 Signed immediate 10-bit value. 21092 'Is11' 21093 Signed immediate 11-bit value. 21094 'Is15' 21095 Signed immediate 15-bit value. 21096 'Iu15' 21097 Unsigned immediate 15-bit value. 21098 'Ic15' 21099 A constant which is not in the range of imm15u but ok for bclr 21100 instruction. 21101 'Ie15' 21102 A constant which is not in the range of imm15u but ok for bset 21103 instruction. 21104 'It15' 21105 A constant which is not in the range of imm15u but ok for btgl 21106 instruction. 21107 'Ii15' 21108 A constant whose compliment value is in the range of imm15u 21109 and ok for bitci instruction. 21110 'Is16' 21111 Signed immediate 16-bit value. 21112 'Is17' 21113 Signed immediate 17-bit value. 21114 'Is19' 21115 Signed immediate 19-bit value. 21116 'Is20' 21117 Signed immediate 20-bit value. 21118 'Ihig' 21119 The immediate value that can be simply set high 20-bit. 21120 'Izeb' 21121 The immediate value 0xff. 21122 'Izeh' 21123 The immediate value 0xffff. 21124 'Ixls' 21125 The immediate value 0x01. 21126 'Ix11' 21127 The immediate value 0x7ff. 21128 'Ibms' 21129 The immediate value with power of 2. 21130 'Ifex' 21131 The immediate value with power of 2 minus 1. 21132 'U33' 21133 Memory constraint for 333 format. 21134 'U45' 21135 Memory constraint for 45 format. 21136 'U37' 21137 Memory constraint for 37 format. 21138 21139_Nios II family--'config/nios2/constraints.md'_ 21140 21141 'I' 21142 Integer that is valid as an immediate operand in an 21143 instruction taking a signed 16-bit number. Range -32768 to 21144 32767. 21145 21146 'J' 21147 Integer that is valid as an immediate operand in an 21148 instruction taking an unsigned 16-bit number. Range 0 to 21149 65535. 21150 21151 'K' 21152 Integer that is valid as an immediate operand in an 21153 instruction taking only the upper 16-bits of a 32-bit number. 21154 Range 32-bit numbers with the lower 16-bits being 0. 21155 21156 'L' 21157 Integer that is valid as an immediate operand for a shift 21158 instruction. Range 0 to 31. 21159 21160 'M' 21161 Integer that is valid as an immediate operand for only the 21162 value 0. Can be used in conjunction with the format modifier 21163 'z' to use 'r0' instead of '0' in the assembly output. 21164 21165 'N' 21166 Integer that is valid as an immediate operand for a custom 21167 instruction opcode. Range 0 to 255. 21168 21169 'P' 21170 An immediate operand for R2 andchi/andci instructions. 21171 21172 'S' 21173 Matches immediates which are addresses in the small data 21174 section and therefore can be added to 'gp' as a 16-bit 21175 immediate to re-create their 32-bit value. 21176 21177 'U' 21178 Matches constants suitable as an operand for the rdprs and 21179 cache instructions. 21180 21181 'v' 21182 A memory operand suitable for Nios II R2 load/store exclusive 21183 instructions. 21184 21185 'w' 21186 A memory operand suitable for load/store IO and cache 21187 instructions. 21188 21189 'T' 21190 A 'const' wrapped 'UNSPEC' expression, representing a 21191 supported PIC or TLS relocation. 21192 21193_PDP-11--'config/pdp11/constraints.md'_ 21194 'a' 21195 Floating point registers AC0 through AC3. These can be loaded 21196 from/to memory with a single instruction. 21197 21198 'd' 21199 Odd numbered general registers (R1, R3, R5). These are used 21200 for 16-bit multiply operations. 21201 21202 'f' 21203 Any of the floating point registers (AC0 through AC5). 21204 21205 'G' 21206 Floating point constant 0. 21207 21208 'I' 21209 An integer constant that fits in 16 bits. 21210 21211 'J' 21212 An integer constant whose low order 16 bits are zero. 21213 21214 'K' 21215 An integer constant that does not meet the constraints for 21216 codes 'I' or 'J'. 21217 21218 'L' 21219 The integer constant 1. 21220 21221 'M' 21222 The integer constant -1. 21223 21224 'N' 21225 The integer constant 0. 21226 21227 'O' 21228 Integer constants -4 through -1 and 1 through 4; shifts by 21229 these amounts are handled as multiple single-bit shifts rather 21230 than a single variable-length shift. 21231 21232 'Q' 21233 A memory reference which requires an additional word (address 21234 or offset) after the opcode. 21235 21236 'R' 21237 A memory reference that is encoded within the opcode. 21238 21239_PowerPC and IBM RS6000--'config/rs6000/constraints.md'_ 21240 'b' 21241 Address base register 21242 21243 'd' 21244 Floating point register (containing 64-bit value) 21245 21246 'f' 21247 Floating point register (containing 32-bit value) 21248 21249 'v' 21250 Altivec vector register 21251 21252 'wa' 21253 Any VSX register if the -mvsx option was used or NO_REGS. 21254 21255 When using any of the register constraints ('wa', 'wd', 'wf', 21256 'wg', 'wh', 'wi', 'wj', 'wk', 'wl', 'wm', 'wo', 'wp', 'wq', 21257 'ws', 'wt', 'wu', 'wv', 'ww', or 'wy') that take VSX 21258 registers, you must use '%x<n>' in the template so that the 21259 correct register is used. Otherwise the register number 21260 output in the assembly file will be incorrect if an Altivec 21261 register is an operand of a VSX instruction that expects VSX 21262 register numbering. 21263 21264 asm ("xvadddp %x0,%x1,%x2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 21265 21266 is correct, but: 21267 21268 asm ("xvadddp %0,%1,%2" : "=wa" (v1) : "wa" (v2), "wa" (v3)); 21269 21270 is not correct. 21271 21272 If an instruction only takes Altivec registers, you do not 21273 want to use '%x<n>'. 21274 21275 asm ("xsaddqp %0,%1,%2" : "=v" (v1) : "v" (v2), "v" (v3)); 21276 21277 is correct because the 'xsaddqp' instruction only takes 21278 Altivec registers, while: 21279 21280 asm ("xsaddqp %x0,%x1,%x2" : "=v" (v1) : "v" (v2), "v" (v3)); 21281 21282 is incorrect. 21283 21284 'wb' 21285 Altivec register if '-mcpu=power9' is used or NO_REGS. 21286 21287 'wd' 21288 VSX vector register to hold vector double data or NO_REGS. 21289 21290 'we' 21291 VSX register if the '-mcpu=power9' and '-m64' options were 21292 used or NO_REGS. 21293 21294 'wf' 21295 VSX vector register to hold vector float data or NO_REGS. 21296 21297 'wg' 21298 If '-mmfpgpr' was used, a floating point register or NO_REGS. 21299 21300 'wh' 21301 Floating point register if direct moves are available, or 21302 NO_REGS. 21303 21304 'wi' 21305 FP or VSX register to hold 64-bit integers for VSX insns or 21306 NO_REGS. 21307 21308 'wj' 21309 FP or VSX register to hold 64-bit integers for direct moves or 21310 NO_REGS. 21311 21312 'wk' 21313 FP or VSX register to hold 64-bit doubles for direct moves or 21314 NO_REGS. 21315 21316 'wl' 21317 Floating point register if the LFIWAX instruction is enabled 21318 or NO_REGS. 21319 21320 'wm' 21321 VSX register if direct move instructions are enabled, or 21322 NO_REGS. 21323 21324 'wn' 21325 No register (NO_REGS). 21326 21327 'wo' 21328 VSX register to use for ISA 3.0 vector instructions, or 21329 NO_REGS. 21330 21331 'wp' 21332 VSX register to use for IEEE 128-bit floating point TFmode, or 21333 NO_REGS. 21334 21335 'wq' 21336 VSX register to use for IEEE 128-bit floating point, or 21337 NO_REGS. 21338 21339 'wr' 21340 General purpose register if 64-bit instructions are enabled or 21341 NO_REGS. 21342 21343 'ws' 21344 VSX vector register to hold scalar double values or NO_REGS. 21345 21346 'wt' 21347 VSX vector register to hold 128 bit integer or NO_REGS. 21348 21349 'wu' 21350 Altivec register to use for float/32-bit int loads/stores or 21351 NO_REGS. 21352 21353 'wv' 21354 Altivec register to use for double loads/stores or NO_REGS. 21355 21356 'ww' 21357 FP or VSX register to perform float operations under '-mvsx' 21358 or NO_REGS. 21359 21360 'wx' 21361 Floating point register if the STFIWX instruction is enabled 21362 or NO_REGS. 21363 21364 'wy' 21365 FP or VSX register to perform ISA 2.07 float ops or NO_REGS. 21366 21367 'wz' 21368 Floating point register if the LFIWZX instruction is enabled 21369 or NO_REGS. 21370 21371 'wA' 21372 Address base register if 64-bit instructions are enabled or 21373 NO_REGS. 21374 21375 'wD' 21376 Int constant that is the element number of the 64-bit scalar 21377 in a vector. 21378 21379 'wE' 21380 Vector constant that can be loaded with the XXSPLTIB 21381 instruction. 21382 21383 'wF' 21384 Memory operand suitable for power9 fusion load/stores. 21385 21386 'wG' 21387 Memory operand suitable for TOC fusion memory references. 21388 21389 'wL' 21390 Int constant that is the element number that the MFVSRLD 21391 instruction. targets. 21392 21393 'wM' 21394 Match vector constant with all 1's if the XXLORC instruction 21395 is available. 21396 21397 'wO' 21398 A memory operand suitable for the ISA 3.0 vector d-form 21399 instructions. 21400 21401 'wQ' 21402 A memory address that will work with the 'lq' and 'stq' 21403 instructions. 21404 21405 'wS' 21406 Vector constant that can be loaded with XXSPLTIB & sign 21407 extension. 21408 21409 'h' 21410 'MQ', 'CTR', or 'LINK' register 21411 21412 'c' 21413 'CTR' register 21414 21415 'l' 21416 'LINK' register 21417 21418 'x' 21419 'CR' register (condition register) number 0 21420 21421 'y' 21422 'CR' register (condition register) 21423 21424 'z' 21425 'XER[CA]' carry bit (part of the XER register) 21426 21427 'I' 21428 Signed 16-bit constant 21429 21430 'J' 21431 Unsigned 16-bit constant shifted left 16 bits (use 'L' instead 21432 for 'SImode' constants) 21433 21434 'K' 21435 Unsigned 16-bit constant 21436 21437 'L' 21438 Signed 16-bit constant shifted left 16 bits 21439 21440 'M' 21441 Constant larger than 31 21442 21443 'N' 21444 Exact power of 2 21445 21446 'O' 21447 Zero 21448 21449 'P' 21450 Constant whose negation is a signed 16-bit constant 21451 21452 'G' 21453 Floating point constant that can be loaded into a register 21454 with one instruction per word 21455 21456 'H' 21457 Integer/Floating point constant that can be loaded into a 21458 register using three instructions 21459 21460 'm' 21461 Memory operand. Normally, 'm' does not allow addresses that 21462 update the base register. If '<' or '>' constraint is also 21463 used, they are allowed and therefore on PowerPC targets in 21464 that case it is only safe to use 'm<>' in an 'asm' statement 21465 if that 'asm' statement accesses the operand exactly once. 21466 The 'asm' statement must also use '%U<OPNO>' as a placeholder 21467 for the "update" flag in the corresponding load or store 21468 instruction. For example: 21469 21470 asm ("st%U0 %1,%0" : "=m<>" (mem) : "r" (val)); 21471 21472 is correct but: 21473 21474 asm ("st %1,%0" : "=m<>" (mem) : "r" (val)); 21475 21476 is not. 21477 21478 'es' 21479 A "stable" memory operand; that is, one which does not include 21480 any automodification of the base register. This used to be 21481 useful when 'm' allowed automodification of the base register, 21482 but as those are now only allowed when '<' or '>' is used, 21483 'es' is basically the same as 'm' without '<' and '>'. 21484 21485 'Q' 21486 Memory operand that is an offset from a register (it is 21487 usually better to use 'm' or 'es' in 'asm' statements) 21488 21489 'Z' 21490 Memory operand that is an indexed or indirect from a register 21491 (it is usually better to use 'm' or 'es' in 'asm' statements) 21492 21493 'R' 21494 AIX TOC entry 21495 21496 'a' 21497 Address operand that is an indexed or indirect from a register 21498 ('p' is preferable for 'asm' statements) 21499 21500 'U' 21501 System V Release 4 small data area reference 21502 21503 'W' 21504 Vector constant that does not require memory 21505 21506 'j' 21507 Vector constant that is all zeros. 21508 21509_RL78--'config/rl78/constraints.md'_ 21510 21511 'Int3' 21512 An integer constant in the range 1 ... 7. 21513 'Int8' 21514 An integer constant in the range 0 ... 255. 21515 'J' 21516 An integer constant in the range -255 ... 0 21517 'K' 21518 The integer constant 1. 21519 'L' 21520 The integer constant -1. 21521 'M' 21522 The integer constant 0. 21523 'N' 21524 The integer constant 2. 21525 'O' 21526 The integer constant -2. 21527 'P' 21528 An integer constant in the range 1 ... 15. 21529 'Qbi' 21530 The built-in compare types-eq, ne, gtu, ltu, geu, and leu. 21531 'Qsc' 21532 The synthetic compare types-gt, lt, ge, and le. 21533 'Wab' 21534 A memory reference with an absolute address. 21535 'Wbc' 21536 A memory reference using 'BC' as a base register, with an 21537 optional offset. 21538 'Wca' 21539 A memory reference using 'AX', 'BC', 'DE', or 'HL' for the 21540 address, for calls. 21541 'Wcv' 21542 A memory reference using any 16-bit register pair for the 21543 address, for calls. 21544 'Wd2' 21545 A memory reference using 'DE' as a base register, with an 21546 optional offset. 21547 'Wde' 21548 A memory reference using 'DE' as a base register, without any 21549 offset. 21550 'Wfr' 21551 Any memory reference to an address in the far address space. 21552 'Wh1' 21553 A memory reference using 'HL' as a base register, with an 21554 optional one-byte offset. 21555 'Whb' 21556 A memory reference using 'HL' as a base register, with 'B' or 21557 'C' as the index register. 21558 'Whl' 21559 A memory reference using 'HL' as a base register, without any 21560 offset. 21561 'Ws1' 21562 A memory reference using 'SP' as a base register, with an 21563 optional one-byte offset. 21564 'Y' 21565 Any memory reference to an address in the near address space. 21566 'A' 21567 The 'AX' register. 21568 'B' 21569 The 'BC' register. 21570 'D' 21571 The 'DE' register. 21572 'R' 21573 'A' through 'L' registers. 21574 'S' 21575 The 'SP' register. 21576 'T' 21577 The 'HL' register. 21578 'Z08W' 21579 The 16-bit 'R8' register. 21580 'Z10W' 21581 The 16-bit 'R10' register. 21582 'Zint' 21583 The registers reserved for interrupts ('R24' to 'R31'). 21584 'a' 21585 The 'A' register. 21586 'b' 21587 The 'B' register. 21588 'c' 21589 The 'C' register. 21590 'd' 21591 The 'D' register. 21592 'e' 21593 The 'E' register. 21594 'h' 21595 The 'H' register. 21596 'l' 21597 The 'L' register. 21598 'v' 21599 The virtual registers. 21600 'w' 21601 The 'PSW' register. 21602 'x' 21603 The 'X' register. 21604 21605_RX--'config/rx/constraints.md'_ 21606 'Q' 21607 An address which does not involve register indirect addressing 21608 or pre/post increment/decrement addressing. 21609 21610 'Symbol' 21611 A symbol reference. 21612 21613 'Int08' 21614 A constant in the range -256 to 255, inclusive. 21615 21616 'Sint08' 21617 A constant in the range -128 to 127, inclusive. 21618 21619 'Sint16' 21620 A constant in the range -32768 to 32767, inclusive. 21621 21622 'Sint24' 21623 A constant in the range -8388608 to 8388607, inclusive. 21624 21625 'Uint04' 21626 A constant in the range 0 to 15, inclusive. 21627 21628_S/390 and zSeries--'config/s390/s390.h'_ 21629 'a' 21630 Address register (general purpose register except r0) 21631 21632 'c' 21633 Condition code register 21634 21635 'd' 21636 Data register (arbitrary general purpose register) 21637 21638 'f' 21639 Floating-point register 21640 21641 'I' 21642 Unsigned 8-bit constant (0-255) 21643 21644 'J' 21645 Unsigned 12-bit constant (0-4095) 21646 21647 'K' 21648 Signed 16-bit constant (-32768-32767) 21649 21650 'L' 21651 Value appropriate as displacement. 21652 '(0..4095)' 21653 for short displacement 21654 '(-524288..524287)' 21655 for long displacement 21656 21657 'M' 21658 Constant integer with a value of 0x7fffffff. 21659 21660 'N' 21661 Multiple letter constraint followed by 4 parameter letters. 21662 '0..9:' 21663 number of the part counting from most to least 21664 significant 21665 'H,Q:' 21666 mode of the part 21667 'D,S,H:' 21668 mode of the containing operand 21669 '0,F:' 21670 value of the other parts (F--all bits set) 21671 The constraint matches if the specified part of a constant has 21672 a value different from its other parts. 21673 21674 'Q' 21675 Memory reference without index register and with short 21676 displacement. 21677 21678 'R' 21679 Memory reference with index register and short displacement. 21680 21681 'S' 21682 Memory reference without index register but with long 21683 displacement. 21684 21685 'T' 21686 Memory reference with index register and long displacement. 21687 21688 'U' 21689 Pointer with short displacement. 21690 21691 'W' 21692 Pointer with long displacement. 21693 21694 'Y' 21695 Shift count operand. 21696 21697_SPARC--'config/sparc/sparc.h'_ 21698 'f' 21699 Floating-point register on the SPARC-V8 architecture and lower 21700 floating-point register on the SPARC-V9 architecture. 21701 21702 'e' 21703 Floating-point register. It is equivalent to 'f' on the 21704 SPARC-V8 architecture and contains both lower and upper 21705 floating-point registers on the SPARC-V9 architecture. 21706 21707 'c' 21708 Floating-point condition code register. 21709 21710 'd' 21711 Lower floating-point register. It is only valid on the 21712 SPARC-V9 architecture when the Visual Instruction Set is 21713 available. 21714 21715 'b' 21716 Floating-point register. It is only valid on the SPARC-V9 21717 architecture when the Visual Instruction Set is available. 21718 21719 'h' 21720 64-bit global or out register for the SPARC-V8+ architecture. 21721 21722 'C' 21723 The constant all-ones, for floating-point. 21724 21725 'A' 21726 Signed 5-bit constant 21727 21728 'D' 21729 A vector constant 21730 21731 'I' 21732 Signed 13-bit constant 21733 21734 'J' 21735 Zero 21736 21737 'K' 21738 32-bit constant with the low 12 bits clear (a constant that 21739 can be loaded with the 'sethi' instruction) 21740 21741 'L' 21742 A constant in the range supported by 'movcc' instructions 21743 (11-bit signed immediate) 21744 21745 'M' 21746 A constant in the range supported by 'movrcc' instructions 21747 (10-bit signed immediate) 21748 21749 'N' 21750 Same as 'K', except that it verifies that bits that are not in 21751 the lower 32-bit range are all zero. Must be used instead of 21752 'K' for modes wider than 'SImode' 21753 21754 'O' 21755 The constant 4096 21756 21757 'G' 21758 Floating-point zero 21759 21760 'H' 21761 Signed 13-bit constant, sign-extended to 32 or 64 bits 21762 21763 'P' 21764 The constant -1 21765 21766 'Q' 21767 Floating-point constant whose integral representation can be 21768 moved into an integer register using a single sethi 21769 instruction 21770 21771 'R' 21772 Floating-point constant whose integral representation can be 21773 moved into an integer register using a single mov instruction 21774 21775 'S' 21776 Floating-point constant whose integral representation can be 21777 moved into an integer register using a high/lo_sum instruction 21778 sequence 21779 21780 'T' 21781 Memory address aligned to an 8-byte boundary 21782 21783 'U' 21784 Even register 21785 21786 'W' 21787 Memory address for 'e' constraint registers 21788 21789 'w' 21790 Memory address with only a base register 21791 21792 'Y' 21793 Vector zero 21794 21795_SPU--'config/spu/spu.h'_ 21796 'a' 21797 An immediate which can be loaded with the il/ila/ilh/ilhu 21798 instructions. const_int is treated as a 64 bit value. 21799 21800 'c' 21801 An immediate for and/xor/or instructions. const_int is 21802 treated as a 64 bit value. 21803 21804 'd' 21805 An immediate for the 'iohl' instruction. const_int is treated 21806 as a 64 bit value. 21807 21808 'f' 21809 An immediate which can be loaded with 'fsmbi'. 21810 21811 'A' 21812 An immediate which can be loaded with the il/ila/ilh/ilhu 21813 instructions. const_int is treated as a 32 bit value. 21814 21815 'B' 21816 An immediate for most arithmetic instructions. const_int is 21817 treated as a 32 bit value. 21818 21819 'C' 21820 An immediate for and/xor/or instructions. const_int is 21821 treated as a 32 bit value. 21822 21823 'D' 21824 An immediate for the 'iohl' instruction. const_int is treated 21825 as a 32 bit value. 21826 21827 'I' 21828 A constant in the range [-64, 63] for shift/rotate 21829 instructions. 21830 21831 'J' 21832 An unsigned 7-bit constant for conversion/nop/channel 21833 instructions. 21834 21835 'K' 21836 A signed 10-bit constant for most arithmetic instructions. 21837 21838 'M' 21839 A signed 16 bit immediate for 'stop'. 21840 21841 'N' 21842 An unsigned 16-bit constant for 'iohl' and 'fsmbi'. 21843 21844 'O' 21845 An unsigned 7-bit constant whose 3 least significant bits are 21846 0. 21847 21848 'P' 21849 An unsigned 3-bit constant for 16-byte rotates and shifts 21850 21851 'R' 21852 Call operand, reg, for indirect calls 21853 21854 'S' 21855 Call operand, symbol, for relative calls. 21856 21857 'T' 21858 Call operand, const_int, for absolute calls. 21859 21860 'U' 21861 An immediate which can be loaded with the il/ila/ilh/ilhu 21862 instructions. const_int is sign extended to 128 bit. 21863 21864 'W' 21865 An immediate for shift and rotate instructions. const_int is 21866 treated as a 32 bit value. 21867 21868 'Y' 21869 An immediate for and/xor/or instructions. const_int is sign 21870 extended as a 128 bit. 21871 21872 'Z' 21873 An immediate for the 'iohl' instruction. const_int is sign 21874 extended to 128 bit. 21875 21876_TI C6X family--'config/c6x/constraints.md'_ 21877 'a' 21878 Register file A (A0-A31). 21879 21880 'b' 21881 Register file B (B0-B31). 21882 21883 'A' 21884 Predicate registers in register file A (A0-A2 on C64X and 21885 higher, A1 and A2 otherwise). 21886 21887 'B' 21888 Predicate registers in register file B (B0-B2). 21889 21890 'C' 21891 A call-used register in register file B (B0-B9, B16-B31). 21892 21893 'Da' 21894 Register file A, excluding predicate registers (A3-A31, plus 21895 A0 if not C64X or higher). 21896 21897 'Db' 21898 Register file B, excluding predicate registers (B3-B31). 21899 21900 'Iu4' 21901 Integer constant in the range 0 ... 15. 21902 21903 'Iu5' 21904 Integer constant in the range 0 ... 31. 21905 21906 'In5' 21907 Integer constant in the range -31 ... 0. 21908 21909 'Is5' 21910 Integer constant in the range -16 ... 15. 21911 21912 'I5x' 21913 Integer constant that can be the operand of an ADDA or a SUBA 21914 insn. 21915 21916 'IuB' 21917 Integer constant in the range 0 ... 65535. 21918 21919 'IsB' 21920 Integer constant in the range -32768 ... 32767. 21921 21922 'IsC' 21923 Integer constant in the range -2^{20} ... 2^{20} - 1. 21924 21925 'Jc' 21926 Integer constant that is a valid mask for the clr instruction. 21927 21928 'Js' 21929 Integer constant that is a valid mask for the set instruction. 21930 21931 'Q' 21932 Memory location with A base register. 21933 21934 'R' 21935 Memory location with B base register. 21936 21937 'S0' 21938 On C64x+ targets, a GP-relative small data reference. 21939 21940 'S1' 21941 Any kind of 'SYMBOL_REF', for use in a call address. 21942 21943 'Si' 21944 Any kind of immediate operand, unless it matches the S0 21945 constraint. 21946 21947 'T' 21948 Memory location with B base register, but not using a long 21949 offset. 21950 21951 'W' 21952 A memory operand with an address that can't be used in an 21953 unaligned access. 21954 21955 'Z' 21956 Register B14 (aka DP). 21957 21958_TILE-Gx--'config/tilegx/constraints.md'_ 21959 'R00' 21960 'R01' 21961 'R02' 21962 'R03' 21963 'R04' 21964 'R05' 21965 'R06' 21966 'R07' 21967 'R08' 21968 'R09' 21969 'R10' 21970 Each of these represents a register constraint for an 21971 individual register, from r0 to r10. 21972 21973 'I' 21974 Signed 8-bit integer constant. 21975 21976 'J' 21977 Signed 16-bit integer constant. 21978 21979 'K' 21980 Unsigned 16-bit integer constant. 21981 21982 'L' 21983 Integer constant that fits in one signed byte when incremented 21984 by one (-129 ... 126). 21985 21986 'm' 21987 Memory operand. If used together with '<' or '>', the operand 21988 can have postincrement which requires printing with '%In' and 21989 '%in' on TILE-Gx. For example: 21990 21991 asm ("st_add %I0,%1,%i0" : "=m<>" (*mem) : "r" (val)); 21992 21993 'M' 21994 A bit mask suitable for the BFINS instruction. 21995 21996 'N' 21997 Integer constant that is a byte tiled out eight times. 21998 21999 'O' 22000 The integer zero constant. 22001 22002 'P' 22003 Integer constant that is a sign-extended byte tiled out as 22004 four shorts. 22005 22006 'Q' 22007 Integer constant that fits in one signed byte when incremented 22008 (-129 ... 126), but excluding -1. 22009 22010 'S' 22011 Integer constant that has all 1 bits consecutive and starting 22012 at bit 0. 22013 22014 'T' 22015 A 16-bit fragment of a got, tls, or pc-relative reference. 22016 22017 'U' 22018 Memory operand except postincrement. This is roughly the same 22019 as 'm' when not used together with '<' or '>'. 22020 22021 'W' 22022 An 8-element vector constant with identical elements. 22023 22024 'Y' 22025 A 4-element vector constant with identical elements. 22026 22027 'Z0' 22028 The integer constant 0xffffffff. 22029 22030 'Z1' 22031 The integer constant 0xffffffff00000000. 22032 22033_TILEPro--'config/tilepro/constraints.md'_ 22034 'R00' 22035 'R01' 22036 'R02' 22037 'R03' 22038 'R04' 22039 'R05' 22040 'R06' 22041 'R07' 22042 'R08' 22043 'R09' 22044 'R10' 22045 Each of these represents a register constraint for an 22046 individual register, from r0 to r10. 22047 22048 'I' 22049 Signed 8-bit integer constant. 22050 22051 'J' 22052 Signed 16-bit integer constant. 22053 22054 'K' 22055 Nonzero integer constant with low 16 bits zero. 22056 22057 'L' 22058 Integer constant that fits in one signed byte when incremented 22059 by one (-129 ... 126). 22060 22061 'm' 22062 Memory operand. If used together with '<' or '>', the operand 22063 can have postincrement which requires printing with '%In' and 22064 '%in' on TILEPro. For example: 22065 22066 asm ("swadd %I0,%1,%i0" : "=m<>" (mem) : "r" (val)); 22067 22068 'M' 22069 A bit mask suitable for the MM instruction. 22070 22071 'N' 22072 Integer constant that is a byte tiled out four times. 22073 22074 'O' 22075 The integer zero constant. 22076 22077 'P' 22078 Integer constant that is a sign-extended byte tiled out as two 22079 shorts. 22080 22081 'Q' 22082 Integer constant that fits in one signed byte when incremented 22083 (-129 ... 126), but excluding -1. 22084 22085 'T' 22086 A symbolic operand, or a 16-bit fragment of a got, tls, or 22087 pc-relative reference. 22088 22089 'U' 22090 Memory operand except postincrement. This is roughly the same 22091 as 'm' when not used together with '<' or '>'. 22092 22093 'W' 22094 A 4-element vector constant with identical elements. 22095 22096 'Y' 22097 A 2-element vector constant with identical elements. 22098 22099_Visium--'config/visium/constraints.md'_ 22100 'b' 22101 EAM register 'mdb' 22102 22103 'c' 22104 EAM register 'mdc' 22105 22106 'f' 22107 Floating point register 22108 22109 'k' 22110 Register for sibcall optimization 22111 22112 'l' 22113 General register, but not 'r29', 'r30' and 'r31' 22114 22115 't' 22116 Register 'r1' 22117 22118 'u' 22119 Register 'r2' 22120 22121 'v' 22122 Register 'r3' 22123 22124 'G' 22125 Floating-point constant 0.0 22126 22127 'J' 22128 Integer constant in the range 0 .. 65535 (16-bit immediate) 22129 22130 'K' 22131 Integer constant in the range 1 .. 31 (5-bit immediate) 22132 22133 'L' 22134 Integer constant in the range -65535 .. -1 (16-bit negative 22135 immediate) 22136 22137 'M' 22138 Integer constant -1 22139 22140 'O' 22141 Integer constant 0 22142 22143 'P' 22144 Integer constant 32 22145 22146_x86 family--'config/i386/constraints.md'_ 22147 'R' 22148 Legacy register--the eight integer registers available on all 22149 i386 processors ('a', 'b', 'c', 'd', 'si', 'di', 'bp', 'sp'). 22150 22151 'q' 22152 Any register accessible as 'Rl'. In 32-bit mode, 'a', 'b', 22153 'c', and 'd'; in 64-bit mode, any integer register. 22154 22155 'Q' 22156 Any register accessible as 'Rh': 'a', 'b', 'c', and 'd'. 22157 22158 'l' 22159 Any register that can be used as the index in a base+index 22160 memory access: that is, any general register except the stack 22161 pointer. 22162 22163 'a' 22164 The 'a' register. 22165 22166 'b' 22167 The 'b' register. 22168 22169 'c' 22170 The 'c' register. 22171 22172 'd' 22173 The 'd' register. 22174 22175 'S' 22176 The 'si' register. 22177 22178 'D' 22179 The 'di' register. 22180 22181 'A' 22182 The 'a' and 'd' registers. This class is used for 22183 instructions that return double word results in the 'ax:dx' 22184 register pair. Single word values will be allocated either in 22185 'ax' or 'dx'. For example on i386 the following implements 22186 'rdtsc': 22187 22188 unsigned long long rdtsc (void) 22189 { 22190 unsigned long long tick; 22191 __asm__ __volatile__("rdtsc":"=A"(tick)); 22192 return tick; 22193 } 22194 22195 This is not correct on x86-64 as it would allocate tick in 22196 either 'ax' or 'dx'. You have to use the following variant 22197 instead: 22198 22199 unsigned long long rdtsc (void) 22200 { 22201 unsigned int tickl, tickh; 22202 __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh)); 22203 return ((unsigned long long)tickh << 32)|tickl; 22204 } 22205 22206 'f' 22207 Any 80387 floating-point (stack) register. 22208 22209 't' 22210 Top of 80387 floating-point stack ('%st(0)'). 22211 22212 'u' 22213 Second from top of 80387 floating-point stack ('%st(1)'). 22214 22215 'y' 22216 Any MMX register. 22217 22218 'x' 22219 Any SSE register. 22220 22221 'Yz' 22222 First SSE register ('%xmm0'). 22223 22224 'Y2' 22225 Any SSE register, when SSE2 is enabled. 22226 22227 'Yi' 22228 Any SSE register, when SSE2 and inter-unit moves are enabled. 22229 22230 'Ym' 22231 Any MMX register, when inter-unit moves are enabled. 22232 22233 'I' 22234 Integer constant in the range 0 ... 31, for 32-bit shifts. 22235 22236 'J' 22237 Integer constant in the range 0 ... 63, for 64-bit shifts. 22238 22239 'K' 22240 Signed 8-bit integer constant. 22241 22242 'L' 22243 '0xFF' or '0xFFFF', for andsi as a zero-extending move. 22244 22245 'M' 22246 0, 1, 2, or 3 (shifts for the 'lea' instruction). 22247 22248 'N' 22249 Unsigned 8-bit integer constant (for 'in' and 'out' 22250 instructions). 22251 22252 'O' 22253 Integer constant in the range 0 ... 127, for 128-bit shifts. 22254 22255 'G' 22256 Standard 80387 floating point constant. 22257 22258 'C' 22259 SSE constant zero operand. 22260 22261 'e' 22262 32-bit signed integer constant, or a symbolic reference known 22263 to fit that range (for immediate operands in sign-extending 22264 x86-64 instructions). 22265 22266 'Z' 22267 32-bit unsigned integer constant, or a symbolic reference 22268 known to fit that range (for immediate operands in 22269 zero-extending x86-64 instructions). 22270 22271_Xstormy16--'config/stormy16/stormy16.h'_ 22272 'a' 22273 Register r0. 22274 22275 'b' 22276 Register r1. 22277 22278 'c' 22279 Register r2. 22280 22281 'd' 22282 Register r8. 22283 22284 'e' 22285 Registers r0 through r7. 22286 22287 't' 22288 Registers r0 and r1. 22289 22290 'y' 22291 The carry register. 22292 22293 'z' 22294 Registers r8 and r9. 22295 22296 'I' 22297 A constant between 0 and 3 inclusive. 22298 22299 'J' 22300 A constant that has exactly one bit set. 22301 22302 'K' 22303 A constant that has exactly one bit clear. 22304 22305 'L' 22306 A constant between 0 and 255 inclusive. 22307 22308 'M' 22309 A constant between -255 and 0 inclusive. 22310 22311 'N' 22312 A constant between -3 and 0 inclusive. 22313 22314 'O' 22315 A constant between 1 and 4 inclusive. 22316 22317 'P' 22318 A constant between -4 and -1 inclusive. 22319 22320 'Q' 22321 A memory reference that is a stack push. 22322 22323 'R' 22324 A memory reference that is a stack pop. 22325 22326 'S' 22327 A memory reference that refers to a constant address of known 22328 value. 22329 22330 'T' 22331 The register indicated by Rx (not implemented yet). 22332 22333 'U' 22334 A constant that is not between 2 and 15 inclusive. 22335 22336 'Z' 22337 The constant 0. 22338 22339_Xtensa--'config/xtensa/constraints.md'_ 22340 'a' 22341 General-purpose 32-bit register 22342 22343 'b' 22344 One-bit boolean register 22345 22346 'A' 22347 MAC16 40-bit accumulator register 22348 22349 'I' 22350 Signed 12-bit integer constant, for use in MOVI instructions 22351 22352 'J' 22353 Signed 8-bit integer constant, for use in ADDI instructions 22354 22355 'K' 22356 Integer constant valid for BccI instructions 22357 22358 'L' 22359 Unsigned constant valid for BccUI instructions 22360 22361 22362File: gccint.info, Node: Disable Insn Alternatives, Next: Define Constraints, Prev: Machine Constraints, Up: Constraints 22363 2236416.8.6 Disable insn alternatives using the 'enabled' attribute 22365-------------------------------------------------------------- 22366 22367There are three insn attributes that may be used to selectively disable 22368instruction alternatives: 22369 22370'enabled' 22371 Says whether an alternative is available on the current subtarget. 22372 22373'preferred_for_size' 22374 Says whether an enabled alternative should be used in code that is 22375 optimized for size. 22376 22377'preferred_for_speed' 22378 Says whether an enabled alternative should be used in code that is 22379 optimized for speed. 22380 22381 All these attributes should use '(const_int 1)' to allow an alternative 22382or '(const_int 0)' to disallow it. The attributes must be a static 22383property of the subtarget; they cannot for example depend on the current 22384operands, on the current optimization level, on the location of the insn 22385within the body of a loop, on whether register allocation has finished, 22386or on the current compiler pass. 22387 22388 The 'enabled' attribute is a correctness property. It tells GCC to act 22389as though the disabled alternatives were never defined in the first 22390place. This is useful when adding new instructions to an existing 22391pattern in cases where the new instructions are only available for 22392certain cpu architecture levels (typically mapped to the '-march=' 22393command-line option). 22394 22395 In contrast, the 'preferred_for_size' and 'preferred_for_speed' 22396attributes are strong optimization hints rather than correctness 22397properties. 'preferred_for_size' tells GCC which alternatives to 22398consider when adding or modifying an instruction that GCC wants to 22399optimize for size. 'preferred_for_speed' does the same thing for speed. 22400Note that things like code motion can lead to cases where code optimized 22401for size uses alternatives that are not preferred for size, and 22402similarly for speed. 22403 22404 Although 'define_insn's can in principle specify the 'enabled' 22405attribute directly, it is often clearer to have subsiduary attributes 22406for each architectural feature of interest. The 'define_insn's can then 22407use these subsiduary attributes to say which alternatives require which 22408features. The example below does this for 'cpu_facility'. 22409 22410 E.g. the following two patterns could easily be merged using the 22411'enabled' attribute: 22412 22413 22414 (define_insn "*movdi_old" 22415 [(set (match_operand:DI 0 "register_operand" "=d") 22416 (match_operand:DI 1 "register_operand" " d"))] 22417 "!TARGET_NEW" 22418 "lgr %0,%1") 22419 22420 (define_insn "*movdi_new" 22421 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 22422 (match_operand:DI 1 "register_operand" " d,d,f"))] 22423 "TARGET_NEW" 22424 "@ 22425 lgr %0,%1 22426 ldgr %0,%1 22427 lgdr %0,%1") 22428 22429 22430 to: 22431 22432 22433 (define_insn "*movdi_combined" 22434 [(set (match_operand:DI 0 "register_operand" "=d,f,d") 22435 (match_operand:DI 1 "register_operand" " d,d,f"))] 22436 "" 22437 "@ 22438 lgr %0,%1 22439 ldgr %0,%1 22440 lgdr %0,%1" 22441 [(set_attr "cpu_facility" "*,new,new")]) 22442 22443 22444 with the 'enabled' attribute defined like this: 22445 22446 22447 (define_attr "cpu_facility" "standard,new" (const_string "standard")) 22448 22449 (define_attr "enabled" "" 22450 (cond [(eq_attr "cpu_facility" "standard") (const_int 1) 22451 (and (eq_attr "cpu_facility" "new") 22452 (ne (symbol_ref "TARGET_NEW") (const_int 0))) 22453 (const_int 1)] 22454 (const_int 0))) 22455 22456 22457 22458File: gccint.info, Node: Define Constraints, Next: C Constraint Interface, Prev: Disable Insn Alternatives, Up: Constraints 22459 2246016.8.7 Defining Machine-Specific Constraints 22461-------------------------------------------- 22462 22463Machine-specific constraints fall into two categories: register and 22464non-register constraints. Within the latter category, constraints which 22465allow subsets of all possible memory or address operands should be 22466specially marked, to give 'reload' more information. 22467 22468 Machine-specific constraints can be given names of arbitrary length, 22469but they must be entirely composed of letters, digits, underscores 22470('_'), and angle brackets ('< >'). Like C identifiers, they must begin 22471with a letter or underscore. 22472 22473 In order to avoid ambiguity in operand constraint strings, no 22474constraint can have a name that begins with any other constraint's name. 22475For example, if 'x' is defined as a constraint name, 'xy' may not be, 22476and vice versa. As a consequence of this rule, no constraint may begin 22477with one of the generic constraint letters: 'E F V X g i m n o p r s'. 22478 22479 Register constraints correspond directly to register classes. *Note 22480Register Classes::. There is thus not much flexibility in their 22481definitions. 22482 22483 -- MD Expression: define_register_constraint name regclass docstring 22484 All three arguments are string constants. NAME is the name of the 22485 constraint, as it will appear in 'match_operand' expressions. If 22486 NAME is a multi-letter constraint its length shall be the same for 22487 all constraints starting with the same letter. REGCLASS can be 22488 either the name of the corresponding register class (*note Register 22489 Classes::), or a C expression which evaluates to the appropriate 22490 register class. If it is an expression, it must have no side 22491 effects, and it cannot look at the operand. The usual use of 22492 expressions is to map some register constraints to 'NO_REGS' when 22493 the register class is not available on a given subarchitecture. 22494 22495 DOCSTRING is a sentence documenting the meaning of the constraint. 22496 Docstrings are explained further below. 22497 22498 Non-register constraints are more like predicates: the constraint 22499definition gives a Boolean expression which indicates whether the 22500constraint matches. 22501 22502 -- MD Expression: define_constraint name docstring exp 22503 The NAME and DOCSTRING arguments are the same as for 22504 'define_register_constraint', but note that the docstring comes 22505 immediately after the name for these expressions. EXP is an RTL 22506 expression, obeying the same rules as the RTL expressions in 22507 predicate definitions. *Note Defining Predicates::, for details. 22508 If it evaluates true, the constraint matches; if it evaluates 22509 false, it doesn't. Constraint expressions should indicate which 22510 RTL codes they might match, just like predicate expressions. 22511 22512 'match_test' C expressions have access to the following variables: 22513 22514 OP 22515 The RTL object defining the operand. 22516 MODE 22517 The machine mode of OP. 22518 IVAL 22519 'INTVAL (OP)', if OP is a 'const_int'. 22520 HVAL 22521 'CONST_DOUBLE_HIGH (OP)', if OP is an integer 'const_double'. 22522 LVAL 22523 'CONST_DOUBLE_LOW (OP)', if OP is an integer 'const_double'. 22524 RVAL 22525 'CONST_DOUBLE_REAL_VALUE (OP)', if OP is a floating-point 22526 'const_double'. 22527 22528 The *VAL variables should only be used once another piece of the 22529 expression has verified that OP is the appropriate kind of RTL 22530 object. 22531 22532 Most non-register constraints should be defined with 22533'define_constraint'. The remaining two definition expressions are only 22534appropriate for constraints that should be handled specially by 'reload' 22535if they fail to match. 22536 22537 -- MD Expression: define_memory_constraint name docstring exp 22538 Use this expression for constraints that match a subset of all 22539 memory operands: that is, 'reload' can make them match by 22540 converting the operand to the form '(mem (reg X))', where X is a 22541 base register (from the register class specified by 22542 'BASE_REG_CLASS', *note Register Classes::). 22543 22544 For example, on the S/390, some instructions do not accept 22545 arbitrary memory references, but only those that do not make use of 22546 an index register. The constraint letter 'Q' is defined to 22547 represent a memory address of this type. If 'Q' is defined with 22548 'define_memory_constraint', a 'Q' constraint can handle any memory 22549 operand, because 'reload' knows it can simply copy the memory 22550 address into a base register if required. This is analogous to the 22551 way an 'o' constraint can handle any memory operand. 22552 22553 The syntax and semantics are otherwise identical to 22554 'define_constraint'. 22555 22556 -- MD Expression: define_special_memory_constraint name docstring exp 22557 Use this expression for constraints that match a subset of all 22558 memory operands: that is, 'reload' can not make them match by 22559 reloading the address as it is described for 22560 'define_memory_constraint' or such address reload is undesirable 22561 with the performance point of view. 22562 22563 For example, 'define_special_memory_constraint' can be useful if 22564 specifically aligned memory is necessary or desirable for some insn 22565 operand. 22566 22567 The syntax and semantics are otherwise identical to 22568 'define_constraint'. 22569 22570 -- MD Expression: define_address_constraint name docstring exp 22571 Use this expression for constraints that match a subset of all 22572 address operands: that is, 'reload' can make the constraint match 22573 by converting the operand to the form '(reg X)', again with X a 22574 base register. 22575 22576 Constraints defined with 'define_address_constraint' can only be 22577 used with the 'address_operand' predicate, or machine-specific 22578 predicates that work the same way. They are treated analogously to 22579 the generic 'p' constraint. 22580 22581 The syntax and semantics are otherwise identical to 22582 'define_constraint'. 22583 22584 For historical reasons, names beginning with the letters 'G H' are 22585reserved for constraints that match only 'const_double's, and names 22586beginning with the letters 'I J K L M N O P' are reserved for 22587constraints that match only 'const_int's. This may change in the 22588future. For the time being, constraints with these names must be 22589written in a stylized form, so that 'genpreds' can tell you did it 22590correctly: 22591 22592 (define_constraint "[GHIJKLMNOP]..." 22593 "DOC..." 22594 (and (match_code "const_int") ; 'const_double' for G/H 22595 CONDITION...)) ; usually a 'match_test' 22596 22597 It is fine to use names beginning with other letters for constraints 22598that match 'const_double's or 'const_int's. 22599 22600 Each docstring in a constraint definition should be one or more 22601complete sentences, marked up in Texinfo format. _They are currently 22602unused._ In the future they will be copied into the GCC manual, in 22603*note Machine Constraints::, replacing the hand-maintained tables 22604currently found in that section. Also, in the future the compiler may 22605use this to give more helpful diagnostics when poor choice of 'asm' 22606constraints causes a reload failure. 22607 22608 If you put the pseudo-Texinfo directive '@internal' at the beginning of 22609a docstring, then (in the future) it will appear only in the internals 22610manual's version of the machine-specific constraint tables. Use this 22611for constraints that should not appear in 'asm' statements. 22612 22613 22614File: gccint.info, Node: C Constraint Interface, Prev: Define Constraints, Up: Constraints 22615 2261616.8.8 Testing constraints from C 22617--------------------------------- 22618 22619It is occasionally useful to test a constraint from C code rather than 22620implicitly via the constraint string in a 'match_operand'. The 22621generated file 'tm_p.h' declares a few interfaces for working with 22622constraints. At present these are defined for all constraints except 22623'g' (which is equivalent to 'general_operand'). 22624 22625 Some valid constraint names are not valid C identifiers, so there is a 22626mangling scheme for referring to them from C. Constraint names that do 22627not contain angle brackets or underscores are left unchanged. 22628Underscores are doubled, each '<' is replaced with '_l', and each '>' 22629with '_g'. Here are some examples: 22630 22631 *Original* *Mangled* 22632 x x 22633 P42x P42x 22634 P4_x P4__x 22635 P4>x P4_gx 22636 P4>> P4_g_g 22637 P4_g> P4__g_g 22638 22639 Throughout this section, the variable C is either a constraint in the 22640abstract sense, or a constant from 'enum constraint_num'; the variable M 22641is a mangled constraint name (usually as part of a larger identifier). 22642 22643 -- Enum: constraint_num 22644 For each constraint except 'g', there is a corresponding 22645 enumeration constant: 'CONSTRAINT_' plus the mangled name of the 22646 constraint. Functions that take an 'enum constraint_num' as an 22647 argument expect one of these constants. 22648 22649 -- Function: inline bool satisfies_constraint_M (rtx EXP) 22650 For each non-register constraint M except 'g', there is one of 22651 these functions; it returns 'true' if EXP satisfies the constraint. 22652 These functions are only visible if 'rtl.h' was included before 22653 'tm_p.h'. 22654 22655 -- Function: bool constraint_satisfied_p (rtx EXP, enum constraint_num 22656 C) 22657 Like the 'satisfies_constraint_M' functions, but the constraint to 22658 test is given as an argument, C. If C specifies a register 22659 constraint, this function will always return 'false'. 22660 22661 -- Function: enum reg_class reg_class_for_constraint (enum 22662 constraint_num C) 22663 Returns the register class associated with C. If C is not a 22664 register constraint, or those registers are not available for the 22665 currently selected subtarget, returns 'NO_REGS'. 22666 22667 Here is an example use of 'satisfies_constraint_M'. In peephole 22668optimizations (*note Peephole Definitions::), operand constraint strings 22669are ignored, so if there are relevant constraints, they must be tested 22670in the C condition. In the example, the optimization is applied if 22671operand 2 does _not_ satisfy the 'K' constraint. (This is a simplified 22672version of a peephole definition from the i386 machine description.) 22673 22674 (define_peephole2 22675 [(match_scratch:SI 3 "r") 22676 (set (match_operand:SI 0 "register_operand" "") 22677 (mult:SI (match_operand:SI 1 "memory_operand" "") 22678 (match_operand:SI 2 "immediate_operand" "")))] 22679 22680 "!satisfies_constraint_K (operands[2])" 22681 22682 [(set (match_dup 3) (match_dup 1)) 22683 (set (match_dup 0) (mult:SI (match_dup 3) (match_dup 2)))] 22684 22685 "") 22686 22687 22688File: gccint.info, Node: Standard Names, Next: Pattern Ordering, Prev: Constraints, Up: Machine Desc 22689 2269016.9 Standard Pattern Names For Generation 22691========================================== 22692 22693Here is a table of the instruction names that are meaningful in the RTL 22694generation pass of the compiler. Giving one of these names to an 22695instruction pattern tells the RTL generation pass that it can use the 22696pattern to accomplish a certain task. 22697 22698'movM' 22699 Here M stands for a two-letter machine mode name, in lowercase. 22700 This instruction pattern moves data with that machine mode from 22701 operand 1 to operand 0. For example, 'movsi' moves full-word data. 22702 22703 If operand 0 is a 'subreg' with mode M of a register whose own mode 22704 is wider than M, the effect of this instruction is to store the 22705 specified value in the part of the register that corresponds to 22706 mode M. Bits outside of M, but which are within the same target 22707 word as the 'subreg' are undefined. Bits which are outside the 22708 target word are left unchanged. 22709 22710 This class of patterns is special in several ways. First of all, 22711 each of these names up to and including full word size _must_ be 22712 defined, because there is no other way to copy a datum from one 22713 place to another. If there are patterns accepting operands in 22714 larger modes, 'movM' must be defined for integer modes of those 22715 sizes. 22716 22717 Second, these patterns are not used solely in the RTL generation 22718 pass. Even the reload pass can generate move insns to copy values 22719 from stack slots into temporary registers. When it does so, one of 22720 the operands is a hard register and the other is an operand that 22721 can need to be reloaded into a register. 22722 22723 Therefore, when given such a pair of operands, the pattern must 22724 generate RTL which needs no reloading and needs no temporary 22725 registers--no registers other than the operands. For example, if 22726 you support the pattern with a 'define_expand', then in such a case 22727 the 'define_expand' mustn't call 'force_reg' or any other such 22728 function which might generate new pseudo registers. 22729 22730 This requirement exists even for subword modes on a RISC machine 22731 where fetching those modes from memory normally requires several 22732 insns and some temporary registers. 22733 22734 During reload a memory reference with an invalid address may be 22735 passed as an operand. Such an address will be replaced with a 22736 valid address later in the reload pass. In this case, nothing may 22737 be done with the address except to use it as it stands. If it is 22738 copied, it will not be replaced with a valid address. No attempt 22739 should be made to make such an address into a valid address and no 22740 routine (such as 'change_address') that will do so may be called. 22741 Note that 'general_operand' will fail when applied to such an 22742 address. 22743 22744 The global variable 'reload_in_progress' (which must be explicitly 22745 declared if required) can be used to determine whether such special 22746 handling is required. 22747 22748 The variety of operands that have reloads depends on the rest of 22749 the machine description, but typically on a RISC machine these can 22750 only be pseudo registers that did not get hard registers, while on 22751 other machines explicit memory references will get optional 22752 reloads. 22753 22754 If a scratch register is required to move an object to or from 22755 memory, it can be allocated using 'gen_reg_rtx' prior to life 22756 analysis. 22757 22758 If there are cases which need scratch registers during or after 22759 reload, you must provide an appropriate secondary_reload target 22760 hook. 22761 22762 The macro 'can_create_pseudo_p' can be used to determine if it is 22763 unsafe to create new pseudo registers. If this variable is 22764 nonzero, then it is unsafe to call 'gen_reg_rtx' to allocate a new 22765 pseudo. 22766 22767 The constraints on a 'movM' must permit moving any hard register to 22768 any other hard register provided that 'HARD_REGNO_MODE_OK' permits 22769 mode M in both registers and 'TARGET_REGISTER_MOVE_COST' applied to 22770 their classes returns a value of 2. 22771 22772 It is obligatory to support floating point 'movM' instructions into 22773 and out of any registers that can hold fixed point values, because 22774 unions and structures (which have modes 'SImode' or 'DImode') can 22775 be in those registers and they may have floating point members. 22776 22777 There may also be a need to support fixed point 'movM' instructions 22778 in and out of floating point registers. Unfortunately, I have 22779 forgotten why this was so, and I don't know whether it is still 22780 true. If 'HARD_REGNO_MODE_OK' rejects fixed point values in 22781 floating point registers, then the constraints of the fixed point 22782 'movM' instructions must be designed to avoid ever trying to reload 22783 into a floating point register. 22784 22785'reload_inM' 22786'reload_outM' 22787 These named patterns have been obsoleted by the target hook 22788 'secondary_reload'. 22789 22790 Like 'movM', but used when a scratch register is required to move 22791 between operand 0 and operand 1. Operand 2 describes the scratch 22792 register. See the discussion of the 'SECONDARY_RELOAD_CLASS' macro 22793 in *note Register Classes::. 22794 22795 There are special restrictions on the form of the 'match_operand's 22796 used in these patterns. First, only the predicate for the reload 22797 operand is examined, i.e., 'reload_in' examines operand 1, but not 22798 the predicates for operand 0 or 2. Second, there may be only one 22799 alternative in the constraints. Third, only a single register 22800 class letter may be used for the constraint; subsequent constraint 22801 letters are ignored. As a special exception, an empty constraint 22802 string matches the 'ALL_REGS' register class. This may relieve 22803 ports of the burden of defining an 'ALL_REGS' constraint letter 22804 just for these patterns. 22805 22806'movstrictM' 22807 Like 'movM' except that if operand 0 is a 'subreg' with mode M of a 22808 register whose natural mode is wider, the 'movstrictM' instruction 22809 is guaranteed not to alter any of the register except the part 22810 which belongs to mode M. 22811 22812'movmisalignM' 22813 This variant of a move pattern is designed to load or store a value 22814 from a memory address that is not naturally aligned for its mode. 22815 For a store, the memory will be in operand 0; for a load, the 22816 memory will be in operand 1. The other operand is guaranteed not 22817 to be a memory, so that it's easy to tell whether this is a load or 22818 store. 22819 22820 This pattern is used by the autovectorizer, and when expanding a 22821 'MISALIGNED_INDIRECT_REF' expression. 22822 22823'load_multiple' 22824 Load several consecutive memory locations into consecutive 22825 registers. Operand 0 is the first of the consecutive registers, 22826 operand 1 is the first memory location, and operand 2 is a 22827 constant: the number of consecutive registers. 22828 22829 Define this only if the target machine really has such an 22830 instruction; do not define this if the most efficient way of 22831 loading consecutive registers from memory is to do them one at a 22832 time. 22833 22834 On some machines, there are restrictions as to which consecutive 22835 registers can be stored into memory, such as particular starting or 22836 ending register numbers or only a range of valid counts. For those 22837 machines, use a 'define_expand' (*note Expander Definitions::) and 22838 make the pattern fail if the restrictions are not met. 22839 22840 Write the generated insn as a 'parallel' with elements being a 22841 'set' of one register from the appropriate memory location (you may 22842 also need 'use' or 'clobber' elements). Use a 'match_parallel' 22843 (*note RTL Template::) to recognize the insn. See 'rs6000.md' for 22844 examples of the use of this insn pattern. 22845 22846'store_multiple' 22847 Similar to 'load_multiple', but store several consecutive registers 22848 into consecutive memory locations. Operand 0 is the first of the 22849 consecutive memory locations, operand 1 is the first register, and 22850 operand 2 is a constant: the number of consecutive registers. 22851 22852'vec_load_lanesMN' 22853 Perform an interleaved load of several vectors from memory operand 22854 1 into register operand 0. Both operands have mode M. The 22855 register operand is viewed as holding consecutive vectors of mode 22856 N, while the memory operand is a flat array that contains the same 22857 number of elements. The operation is equivalent to: 22858 22859 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22860 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22861 for (i = 0; i < c; i++) 22862 operand0[i][j] = operand1[j * c + i]; 22863 22864 For example, 'vec_load_lanestiv4hi' loads 8 16-bit values from 22865 memory into a register of mode 'TI'. The register contains two 22866 consecutive vectors of mode 'V4HI'. 22867 22868 This pattern can only be used if: 22869 TARGET_ARRAY_MODE_SUPPORTED_P (N, C) 22870 is true. GCC assumes that, if a target supports this kind of 22871 instruction for some mode N, it also supports unaligned loads for 22872 vectors of mode N. 22873 22874 This pattern is not allowed to 'FAIL'. 22875 22876'vec_store_lanesMN' 22877 Equivalent to 'vec_load_lanesMN', with the memory and register 22878 operands reversed. That is, the instruction is equivalent to: 22879 22880 int c = GET_MODE_SIZE (M) / GET_MODE_SIZE (N); 22881 for (j = 0; j < GET_MODE_NUNITS (N); j++) 22882 for (i = 0; i < c; i++) 22883 operand0[j * c + i] = operand1[i][j]; 22884 22885 for a memory operand 0 and register operand 1. 22886 22887 This pattern is not allowed to 'FAIL'. 22888 22889'vec_setM' 22890 Set given field in the vector value. Operand 0 is the vector to 22891 modify, operand 1 is new value of field and operand 2 specify the 22892 field index. 22893 22894'vec_extractM' 22895 Extract given field from the vector value. Operand 1 is the 22896 vector, operand 2 specify field index and operand 0 place to store 22897 value into. 22898 22899'vec_initM' 22900 Initialize the vector to given values. Operand 0 is the vector to 22901 initialize and operand 1 is parallel containing values for 22902 individual fields. 22903 22904'vec_cmpMN' 22905 Output a vector comparison. Operand 0 of mode N is the destination 22906 for predicate in operand 1 which is a signed vector comparison with 22907 operands of mode M in operands 2 and 3. Predicate is computed by 22908 element-wise evaluation of the vector comparison with a truth value 22909 of all-ones and a false value of all-zeros. 22910 22911'vec_cmpuMN' 22912 Similar to 'vec_cmpMN' but perform unsigned vector comparison. 22913 22914'vcondMN' 22915 Output a conditional vector move. Operand 0 is the destination to 22916 receive a combination of operand 1 and operand 2, which are of mode 22917 M, dependent on the outcome of the predicate in operand 3 which is 22918 a signed vector comparison with operands of mode N in operands 4 22919 and 5. The modes M and N should have the same size. Operand 0 22920 will be set to the value OP1 & MSK | OP2 & ~MSK where MSK is 22921 computed by element-wise evaluation of the vector comparison with a 22922 truth value of all-ones and a false value of all-zeros. 22923 22924'vconduMN' 22925 Similar to 'vcondMN' but performs unsigned vector comparison. 22926 22927'vcond_mask_MN' 22928 Similar to 'vcondMN' but operand 3 holds a pre-computed result of 22929 vector comparison. 22930 22931'maskloadMN' 22932 Perform a masked load of vector from memory operand 1 of mode M 22933 into register operand 0. Mask is provided in register operand 2 of 22934 mode N. 22935 22936 This pattern is not allowed to 'FAIL'. 22937 22938'maskstoreMN' 22939 Perform a masked store of vector from register operand 1 of mode M 22940 into memory operand 0. Mask is provided in register operand 2 of 22941 mode N. 22942 22943 This pattern is not allowed to 'FAIL'. 22944 22945'vec_permM' 22946 Output a (variable) vector permutation. Operand 0 is the 22947 destination to receive elements from operand 1 and operand 2, which 22948 are of mode M. Operand 3 is the "selector". It is an integral 22949 mode vector of the same width and number of elements as mode M. 22950 22951 The input elements are numbered from 0 in operand 1 through 2*N-1 22952 in operand 2. The elements of the selector must be computed modulo 22953 2*N. Note that if 'rtx_equal_p(operand1, operand2)', this can be 22954 implemented with just operand 1 and selector elements modulo N. 22955 22956 In order to make things easy for a number of targets, if there is 22957 no 'vec_perm' pattern for mode M, but there is for mode Q where Q 22958 is a vector of 'QImode' of the same width as M, the middle-end will 22959 lower the mode M 'VEC_PERM_EXPR' to mode Q. 22960 22961'vec_perm_constM' 22962 Like 'vec_perm' except that the permutation is a compile-time 22963 constant. That is, operand 3, the "selector", is a 'CONST_VECTOR'. 22964 22965 Some targets cannot perform a permutation with a variable selector, 22966 but can efficiently perform a constant permutation. Further, the 22967 target hook 'vec_perm_ok' is queried to determine if the specific 22968 constant permutation is available efficiently; the named pattern is 22969 never expanded without 'vec_perm_ok' returning true. 22970 22971 There is no need for a target to supply both 'vec_permM' and 22972 'vec_perm_constM' if the former can trivially implement the 22973 operation with, say, the vector constant loaded into a register. 22974 22975'pushM1' 22976 Output a push instruction. Operand 0 is value to push. Used only 22977 when 'PUSH_ROUNDING' is defined. For historical reason, this 22978 pattern may be missing and in such case an 'mov' expander is used 22979 instead, with a 'MEM' expression forming the push operation. The 22980 'mov' expander method is deprecated. 22981 22982'addM3' 22983 Add operand 2 and operand 1, storing the result in operand 0. All 22984 operands must have mode M. This can be used even on two-address 22985 machines, by means of constraints requiring operands 1 and 0 to be 22986 the same location. 22987 22988'ssaddM3', 'usaddM3' 22989'subM3', 'sssubM3', 'ussubM3' 22990'mulM3', 'ssmulM3', 'usmulM3' 22991'divM3', 'ssdivM3' 22992'udivM3', 'usdivM3' 22993'modM3', 'umodM3' 22994'uminM3', 'umaxM3' 22995'andM3', 'iorM3', 'xorM3' 22996 Similar, for other arithmetic operations. 22997 22998'addvM4' 22999 Like 'addM3' but takes a 'code_label' as operand 3 and emits code 23000 to jump to it if signed overflow occurs during the addition. This 23001 pattern is used to implement the built-in functions performing 23002 signed integer addition with overflow checking. 23003 23004'subvM4', 'mulvM4' 23005 Similar, for other signed arithmetic operations. 23006 23007'uaddvM4' 23008 Like 'addvM4' but for unsigned addition. That is to say, the 23009 operation is the same as signed addition but the jump is taken only 23010 on unsigned overflow. 23011 23012'usubvM4', 'umulvM4' 23013 Similar, for other unsigned arithmetic operations. 23014 23015'addptrM3' 23016 Like 'addM3' but is guaranteed to only be used for address 23017 calculations. The expanded code is not allowed to clobber the 23018 condition code. It only needs to be defined if 'addM3' sets the 23019 condition code. If adds used for address calculations and normal 23020 adds are not compatible it is required to expand a distinct pattern 23021 (e.g. using an unspec). The pattern is used by LRA to emit 23022 address calculations. 'addM3' is used if 'addptrM3' is not 23023 defined. 23024 23025'fmaM4' 23026 Multiply operand 2 and operand 1, then add operand 3, storing the 23027 result in operand 0 without doing an intermediate rounding step. 23028 All operands must have mode M. This pattern is used to implement 23029 the 'fma', 'fmaf', and 'fmal' builtin functions from the ISO C99 23030 standard. 23031 23032'fmsM4' 23033 Like 'fmaM4', except operand 3 subtracted from the product instead 23034 of added to the product. This is represented in the rtl as 23035 23036 (fma:M OP1 OP2 (neg:M OP3)) 23037 23038'fnmaM4' 23039 Like 'fmaM4' except that the intermediate product is negated before 23040 being added to operand 3. This is represented in the rtl as 23041 23042 (fma:M (neg:M OP1) OP2 OP3) 23043 23044'fnmsM4' 23045 Like 'fmsM4' except that the intermediate product is negated before 23046 subtracting operand 3. This is represented in the rtl as 23047 23048 (fma:M (neg:M OP1) OP2 (neg:M OP3)) 23049 23050'sminM3', 'smaxM3' 23051 Signed minimum and maximum operations. When used with floating 23052 point, if both operands are zeros, or if either operand is 'NaN', 23053 then it is unspecified which of the two operands is returned as the 23054 result. 23055 23056'fminM3', 'fmaxM3' 23057 IEEE-conformant minimum and maximum operations. If one operand is 23058 a quiet 'NaN', then the other operand is returned. If both 23059 operands are quiet 'NaN', then a quiet 'NaN' is returned. In the 23060 case when gcc supports signalling 'NaN' (-fsignaling-nans) an 23061 invalid floating point exception is raised and a quiet 'NaN' is 23062 returned. 23063 23064 All operands have mode M, which is a scalar or vector 23065 floating-point mode. These patterns are not allowed to 'FAIL'. 23066 23067'reduc_smin_scal_M', 'reduc_smax_scal_M' 23068 Find the signed minimum/maximum of the elements of a vector. The 23069 vector is operand 1, and operand 0 is the scalar result, with mode 23070 equal to the mode of the elements of the input vector. 23071 23072'reduc_umin_scal_M', 'reduc_umax_scal_M' 23073 Find the unsigned minimum/maximum of the elements of a vector. The 23074 vector is operand 1, and operand 0 is the scalar result, with mode 23075 equal to the mode of the elements of the input vector. 23076 23077'reduc_plus_scal_M' 23078 Compute the sum of the elements of a vector. The vector is operand 23079 1, and operand 0 is the scalar result, with mode equal to the mode 23080 of the elements of the input vector. 23081 23082'sdot_prodM' 23083'udot_prodM' 23084 Compute the sum of the products of two signed/unsigned elements. 23085 Operand 1 and operand 2 are of the same mode. Their product, which 23086 is of a wider mode, is computed and added to operand 3. Operand 3 23087 is of a mode equal or wider than the mode of the product. The 23088 result is placed in operand 0, which is of the same mode as operand 23089 3. 23090 23091'ssadM' 23092'usadM' 23093 Compute the sum of absolute differences of two signed/unsigned 23094 elements. Operand 1 and operand 2 are of the same mode. Their 23095 absolute difference, which is of a wider mode, is computed and 23096 added to operand 3. Operand 3 is of a mode equal or wider than the 23097 mode of the absolute difference. The result is placed in operand 23098 0, which is of the same mode as operand 3. 23099 23100'widen_ssumM3' 23101'widen_usumM3' 23102 Operands 0 and 2 are of the same mode, which is wider than the mode 23103 of operand 1. Add operand 1 to operand 2 and place the widened 23104 result in operand 0. (This is used express accumulation of 23105 elements into an accumulator of a wider mode.) 23106 23107'vec_shr_M' 23108 Whole vector right shift in bits, i.e. towards element 0. Operand 23109 1 is a vector to be shifted. Operand 2 is an integer shift amount 23110 in bits. Operand 0 is where the resulting shifted vector is 23111 stored. The output and input vectors should have the same modes. 23112 23113'vec_pack_trunc_M' 23114 Narrow (demote) and merge the elements of two vectors. Operands 1 23115 and 2 are vectors of the same mode having N integral or floating 23116 point elements of size S. Operand 0 is the resulting vector in 23117 which 2*N elements of size N/2 are concatenated after narrowing 23118 them down using truncation. 23119 23120'vec_pack_ssat_M', 'vec_pack_usat_M' 23121 Narrow (demote) and merge the elements of two vectors. Operands 1 23122 and 2 are vectors of the same mode having N integral elements of 23123 size S. Operand 0 is the resulting vector in which the elements of 23124 the two input vectors are concatenated after narrowing them down 23125 using signed/unsigned saturating arithmetic. 23126 23127'vec_pack_sfix_trunc_M', 'vec_pack_ufix_trunc_M' 23128 Narrow, convert to signed/unsigned integral type and merge the 23129 elements of two vectors. Operands 1 and 2 are vectors of the same 23130 mode having N floating point elements of size S. Operand 0 is the 23131 resulting vector in which 2*N elements of size N/2 are 23132 concatenated. 23133 23134'vec_unpacks_hi_M', 'vec_unpacks_lo_M' 23135 Extract and widen (promote) the high/low part of a vector of signed 23136 integral or floating point elements. The input vector (operand 1) 23137 has N elements of size S. Widen (promote) the high/low elements of 23138 the vector using signed or floating point extension and place the 23139 resulting N/2 values of size 2*S in the output vector (operand 0). 23140 23141'vec_unpacku_hi_M', 'vec_unpacku_lo_M' 23142 Extract and widen (promote) the high/low part of a vector of 23143 unsigned integral elements. The input vector (operand 1) has N 23144 elements of size S. Widen (promote) the high/low elements of the 23145 vector using zero extension and place the resulting N/2 values of 23146 size 2*S in the output vector (operand 0). 23147 23148'vec_unpacks_float_hi_M', 'vec_unpacks_float_lo_M' 23149'vec_unpacku_float_hi_M', 'vec_unpacku_float_lo_M' 23150 Extract, convert to floating point type and widen the high/low part 23151 of a vector of signed/unsigned integral elements. The input vector 23152 (operand 1) has N elements of size S. Convert the high/low 23153 elements of the vector using floating point conversion and place 23154 the resulting N/2 values of size 2*S in the output vector (operand 23155 0). 23156 23157'vec_widen_umult_hi_M', 'vec_widen_umult_lo_M' 23158'vec_widen_smult_hi_M', 'vec_widen_smult_lo_M' 23159'vec_widen_umult_even_M', 'vec_widen_umult_odd_M' 23160'vec_widen_smult_even_M', 'vec_widen_smult_odd_M' 23161 Signed/Unsigned widening multiplication. The two inputs (operands 23162 1 and 2) are vectors with N signed/unsigned elements of size S. 23163 Multiply the high/low or even/odd elements of the two vectors, and 23164 put the N/2 products of size 2*S in the output vector (operand 0). 23165 A target shouldn't implement even/odd pattern pair if it is less 23166 efficient than lo/hi one. 23167 23168'vec_widen_ushiftl_hi_M', 'vec_widen_ushiftl_lo_M' 23169'vec_widen_sshiftl_hi_M', 'vec_widen_sshiftl_lo_M' 23170 Signed/Unsigned widening shift left. The first input (operand 1) 23171 is a vector with N signed/unsigned elements of size S. Operand 2 23172 is a constant. Shift the high/low elements of operand 1, and put 23173 the N/2 results of size 2*S in the output vector (operand 0). 23174 23175'mulhisi3' 23176 Multiply operands 1 and 2, which have mode 'HImode', and store a 23177 'SImode' product in operand 0. 23178 23179'mulqihi3', 'mulsidi3' 23180 Similar widening-multiplication instructions of other widths. 23181 23182'umulqihi3', 'umulhisi3', 'umulsidi3' 23183 Similar widening-multiplication instructions that do unsigned 23184 multiplication. 23185 23186'usmulqihi3', 'usmulhisi3', 'usmulsidi3' 23187 Similar widening-multiplication instructions that interpret the 23188 first operand as unsigned and the second operand as signed, then do 23189 a signed multiplication. 23190 23191'smulM3_highpart' 23192 Perform a signed multiplication of operands 1 and 2, which have 23193 mode M, and store the most significant half of the product in 23194 operand 0. The least significant half of the product is discarded. 23195 23196'umulM3_highpart' 23197 Similar, but the multiplication is unsigned. 23198 23199'maddMN4' 23200 Multiply operands 1 and 2, sign-extend them to mode N, add operand 23201 3, and store the result in operand 0. Operands 1 and 2 have mode M 23202 and operands 0 and 3 have mode N. Both modes must be integer or 23203 fixed-point modes and N must be twice the size of M. 23204 23205 In other words, 'maddMN4' is like 'mulMN3' except that it also adds 23206 operand 3. 23207 23208 These instructions are not allowed to 'FAIL'. 23209 23210'umaddMN4' 23211 Like 'maddMN4', but zero-extend the multiplication operands instead 23212 of sign-extending them. 23213 23214'ssmaddMN4' 23215 Like 'maddMN4', but all involved operations must be 23216 signed-saturating. 23217 23218'usmaddMN4' 23219 Like 'umaddMN4', but all involved operations must be 23220 unsigned-saturating. 23221 23222'msubMN4' 23223 Multiply operands 1 and 2, sign-extend them to mode N, subtract the 23224 result from operand 3, and store the result in operand 0. Operands 23225 1 and 2 have mode M and operands 0 and 3 have mode N. Both modes 23226 must be integer or fixed-point modes and N must be twice the size 23227 of M. 23228 23229 In other words, 'msubMN4' is like 'mulMN3' except that it also 23230 subtracts the result from operand 3. 23231 23232 These instructions are not allowed to 'FAIL'. 23233 23234'umsubMN4' 23235 Like 'msubMN4', but zero-extend the multiplication operands instead 23236 of sign-extending them. 23237 23238'ssmsubMN4' 23239 Like 'msubMN4', but all involved operations must be 23240 signed-saturating. 23241 23242'usmsubMN4' 23243 Like 'umsubMN4', but all involved operations must be 23244 unsigned-saturating. 23245 23246'divmodM4' 23247 Signed division that produces both a quotient and a remainder. 23248 Operand 1 is divided by operand 2 to produce a quotient stored in 23249 operand 0 and a remainder stored in operand 3. 23250 23251 For machines with an instruction that produces both a quotient and 23252 a remainder, provide a pattern for 'divmodM4' but do not provide 23253 patterns for 'divM3' and 'modM3'. This allows optimization in the 23254 relatively common case when both the quotient and remainder are 23255 computed. 23256 23257 If an instruction that just produces a quotient or just a remainder 23258 exists and is more efficient than the instruction that produces 23259 both, write the output routine of 'divmodM4' to call 23260 'find_reg_note' and look for a 'REG_UNUSED' note on the quotient or 23261 remainder and generate the appropriate instruction. 23262 23263'udivmodM4' 23264 Similar, but does unsigned division. 23265 23266'ashlM3', 'ssashlM3', 'usashlM3' 23267 Arithmetic-shift operand 1 left by a number of bits specified by 23268 operand 2, and store the result in operand 0. Here M is the mode 23269 of operand 0 and operand 1; operand 2's mode is specified by the 23270 instruction pattern, and the compiler will convert the operand to 23271 that mode before generating the instruction. The shift or rotate 23272 expander or instruction pattern should explicitly specify the mode 23273 of the operand 2, it should never be 'VOIDmode'. The meaning of 23274 out-of-range shift counts can optionally be specified by 23275 'TARGET_SHIFT_TRUNCATION_MASK'. *Note 23276 TARGET_SHIFT_TRUNCATION_MASK::. Operand 2 is always a scalar type. 23277 23278'ashrM3', 'lshrM3', 'rotlM3', 'rotrM3' 23279 Other shift and rotate instructions, analogous to the 'ashlM3' 23280 instructions. Operand 2 is always a scalar type. 23281 23282'vashlM3', 'vashrM3', 'vlshrM3', 'vrotlM3', 'vrotrM3' 23283 Vector shift and rotate instructions that take vectors as operand 2 23284 instead of a scalar type. 23285 23286'bswapM2' 23287 Reverse the order of bytes of operand 1 and store the result in 23288 operand 0. 23289 23290'negM2', 'ssnegM2', 'usnegM2' 23291 Negate operand 1 and store the result in operand 0. 23292 23293'negvM3' 23294 Like 'negM2' but takes a 'code_label' as operand 2 and emits code 23295 to jump to it if signed overflow occurs during the negation. 23296 23297'absM2' 23298 Store the absolute value of operand 1 into operand 0. 23299 23300'sqrtM2' 23301 Store the square root of operand 1 into operand 0. Both operands 23302 have mode M, which is a scalar or vector floating-point mode. 23303 23304 This pattern is not allowed to 'FAIL'. 23305 23306'rsqrtM2' 23307 Store the reciprocal of the square root of operand 1 into operand 23308 0. Both operands have mode M, which is a scalar or vector 23309 floating-point mode. 23310 23311 On most architectures this pattern is only approximate, so either 23312 its C condition or the 'TARGET_OPTAB_SUPPORTED_P' hook should check 23313 for the appropriate math flags. (Using the C condition is more 23314 direct, but using 'TARGET_OPTAB_SUPPORTED_P' can be useful if a 23315 target-specific built-in also uses the 'rsqrtM2' pattern.) 23316 23317 This pattern is not allowed to 'FAIL'. 23318 23319'fmodM3' 23320 Store the remainder of dividing operand 1 by operand 2 into operand 23321 0, rounded towards zero to an integer. All operands have mode M, 23322 which is a scalar or vector floating-point mode. 23323 23324 This pattern is not allowed to 'FAIL'. 23325 23326'remainderM3' 23327 Store the remainder of dividing operand 1 by operand 2 into operand 23328 0, rounded to the nearest integer. All operands have mode M, which 23329 is a scalar or vector floating-point mode. 23330 23331 This pattern is not allowed to 'FAIL'. 23332 23333'scalbM3' 23334 Raise 'FLT_RADIX' to the power of operand 2, multiply it by operand 23335 1, and store the result in operand 0. All operands have mode M, 23336 which is a scalar or vector floating-point mode. 23337 23338 This pattern is not allowed to 'FAIL'. 23339 23340'ldexpM3' 23341 Raise 2 to the power of operand 2, multiply it by operand 1, and 23342 store the result in operand 0. Operands 0 and 1 have mode M, which 23343 is a scalar or vector floating-point mode. Operand 2's mode has 23344 the same number of elements as M and each element is wide enough to 23345 store an 'int'. The integers are signed. 23346 23347 This pattern is not allowed to 'FAIL'. 23348 23349'cosM2' 23350 Store the cosine of operand 1 into operand 0. Both operands have 23351 mode M, which is a scalar or vector floating-point mode. 23352 23353 This pattern is not allowed to 'FAIL'. 23354 23355'sinM2' 23356 Store the sine of operand 1 into operand 0. Both operands have 23357 mode M, which is a scalar or vector floating-point mode. 23358 23359 This pattern is not allowed to 'FAIL'. 23360 23361'sincosM3' 23362 Store the cosine of operand 2 into operand 0 and the sine of 23363 operand 2 into operand 1. All operands have mode M, which is a 23364 scalar or vector floating-point mode. 23365 23366 Targets that can calculate the sine and cosine simultaneously can 23367 implement this pattern as opposed to implementing individual 23368 'sinM2' and 'cosM2' patterns. The 'sin' and 'cos' built-in 23369 functions will then be expanded to the 'sincosM3' pattern, with one 23370 of the output values left unused. 23371 23372'tanM2' 23373 Store the tangent of operand 1 into operand 0. Both operands have 23374 mode M, which is a scalar or vector floating-point mode. 23375 23376 This pattern is not allowed to 'FAIL'. 23377 23378'asinM2' 23379 Store the arc sine of operand 1 into operand 0. Both operands have 23380 mode M, which is a scalar or vector floating-point mode. 23381 23382 This pattern is not allowed to 'FAIL'. 23383 23384'acosM2' 23385 Store the arc cosine of operand 1 into operand 0. Both operands 23386 have mode M, which is a scalar or vector floating-point mode. 23387 23388 This pattern is not allowed to 'FAIL'. 23389 23390'atanM2' 23391 Store the arc tangent of operand 1 into operand 0. Both operands 23392 have mode M, which is a scalar or vector floating-point mode. 23393 23394 This pattern is not allowed to 'FAIL'. 23395 23396'expM2' 23397 Raise e (the base of natural logarithms) to the power of operand 1 23398 and store the result in operand 0. Both operands have mode M, 23399 which is a scalar or vector floating-point mode. 23400 23401 This pattern is not allowed to 'FAIL'. 23402 23403'expm1M2' 23404 Raise e (the base of natural logarithms) to the power of operand 1, 23405 subtract 1, and store the result in operand 0. Both operands have 23406 mode M, which is a scalar or vector floating-point mode. 23407 23408 For inputs close to zero, the pattern is expected to be more 23409 accurate than a separate 'expM2' and 'subM3' would be. 23410 23411 This pattern is not allowed to 'FAIL'. 23412 23413'exp10M2' 23414 Raise 10 to the power of operand 1 and store the result in operand 23415 0. Both operands have mode M, which is a scalar or vector 23416 floating-point mode. 23417 23418 This pattern is not allowed to 'FAIL'. 23419 23420'exp2M2' 23421 Raise 2 to the power of operand 1 and store the result in operand 23422 0. Both operands have mode M, which is a scalar or vector 23423 floating-point mode. 23424 23425 This pattern is not allowed to 'FAIL'. 23426 23427'logM2' 23428 Store the natural logarithm of operand 1 into operand 0. Both 23429 operands have mode M, which is a scalar or vector floating-point 23430 mode. 23431 23432 This pattern is not allowed to 'FAIL'. 23433 23434'log1pM2' 23435 Add 1 to operand 1, compute the natural logarithm, and store the 23436 result in operand 0. Both operands have mode M, which is a scalar 23437 or vector floating-point mode. 23438 23439 For inputs close to zero, the pattern is expected to be more 23440 accurate than a separate 'addM3' and 'logM2' would be. 23441 23442 This pattern is not allowed to 'FAIL'. 23443 23444'log10M2' 23445 Store the base-10 logarithm of operand 1 into operand 0. Both 23446 operands have mode M, which is a scalar or vector floating-point 23447 mode. 23448 23449 This pattern is not allowed to 'FAIL'. 23450 23451'log2M2' 23452 Store the base-2 logarithm of operand 1 into operand 0. Both 23453 operands have mode M, which is a scalar or vector floating-point 23454 mode. 23455 23456 This pattern is not allowed to 'FAIL'. 23457 23458'logbM2' 23459 Store the base-'FLT_RADIX' logarithm of operand 1 into operand 0. 23460 Both operands have mode M, which is a scalar or vector 23461 floating-point mode. 23462 23463 This pattern is not allowed to 'FAIL'. 23464 23465'significandM2' 23466 Store the significand of floating-point operand 1 in operand 0. 23467 Both operands have mode M, which is a scalar or vector 23468 floating-point mode. 23469 23470 This pattern is not allowed to 'FAIL'. 23471 23472'powM3' 23473 Store the value of operand 1 raised to the exponent operand 2 into 23474 operand 0. All operands have mode M, which is a scalar or vector 23475 floating-point mode. 23476 23477 This pattern is not allowed to 'FAIL'. 23478 23479'atan2M3' 23480 Store the arc tangent (inverse tangent) of operand 1 divided by 23481 operand 2 into operand 0, using the signs of both arguments to 23482 determine the quadrant of the result. All operands have mode M, 23483 which is a scalar or vector floating-point mode. 23484 23485 This pattern is not allowed to 'FAIL'. 23486 23487'floorM2' 23488 Store the largest integral value not greater than operand 1 in 23489 operand 0. Both operands have mode M, which is a scalar or vector 23490 floating-point mode. 23491 23492 This pattern is not allowed to 'FAIL'. 23493 23494'btruncM2' 23495 Round operand 1 to an integer, towards zero, and store the result 23496 in operand 0. Both operands have mode M, which is a scalar or 23497 vector floating-point mode. 23498 23499 This pattern is not allowed to 'FAIL'. 23500 23501'roundM2' 23502 Round operand 1 to the nearest integer, rounding away from zero in 23503 the event of a tie, and store the result in operand 0. Both 23504 operands have mode M, which is a scalar or vector floating-point 23505 mode. 23506 23507 This pattern is not allowed to 'FAIL'. 23508 23509'ceilM2' 23510 Store the smallest integral value not less than operand 1 in 23511 operand 0. Both operands have mode M, which is a scalar or vector 23512 floating-point mode. 23513 23514 This pattern is not allowed to 'FAIL'. 23515 23516'nearbyintM2' 23517 Round operand 1 to an integer, using the current rounding mode, and 23518 store the result in operand 0. Do not raise an inexact condition 23519 when the result is different from the argument. Both operands have 23520 mode M, which is a scalar or vector floating-point mode. 23521 23522 This pattern is not allowed to 'FAIL'. 23523 23524'rintM2' 23525 Round operand 1 to an integer, using the current rounding mode, and 23526 store the result in operand 0. Raise an inexact condition when the 23527 result is different from the argument. Both operands have mode M, 23528 which is a scalar or vector floating-point mode. 23529 23530 This pattern is not allowed to 'FAIL'. 23531 23532'lrintMN2' 23533 Convert operand 1 (valid for floating point mode M) to fixed point 23534 mode N as a signed number according to the current rounding mode 23535 and store in operand 0 (which has mode N). 23536 23537'lroundMN2' 23538 Convert operand 1 (valid for floating point mode M) to fixed point 23539 mode N as a signed number rounding to nearest and away from zero 23540 and store in operand 0 (which has mode N). 23541 23542'lfloorMN2' 23543 Convert operand 1 (valid for floating point mode M) to fixed point 23544 mode N as a signed number rounding down and store in operand 0 23545 (which has mode N). 23546 23547'lceilMN2' 23548 Convert operand 1 (valid for floating point mode M) to fixed point 23549 mode N as a signed number rounding up and store in operand 0 (which 23550 has mode N). 23551 23552'copysignM3' 23553 Store a value with the magnitude of operand 1 and the sign of 23554 operand 2 into operand 0. All operands have mode M, which is a 23555 scalar or vector floating-point mode. 23556 23557 This pattern is not allowed to 'FAIL'. 23558 23559'ffsM2' 23560 Store into operand 0 one plus the index of the least significant 23561 1-bit of operand 1. If operand 1 is zero, store zero. 23562 23563 M is either a scalar or vector integer mode. When it is a scalar, 23564 operand 1 has mode M but operand 0 can have whatever scalar integer 23565 mode is suitable for the target. The compiler will insert 23566 conversion instructions as necessary (typically to convert the 23567 result to the same width as 'int'). When M is a vector, both 23568 operands must have mode M. 23569 23570 This pattern is not allowed to 'FAIL'. 23571 23572'clrsbM2' 23573 Count leading redundant sign bits. Store into operand 0 the number 23574 of redundant sign bits in operand 1, starting at the most 23575 significant bit position. A redundant sign bit is defined as any 23576 sign bit after the first. As such, this count will be one less 23577 than the count of leading sign bits. 23578 23579 M is either a scalar or vector integer mode. When it is a scalar, 23580 operand 1 has mode M but operand 0 can have whatever scalar integer 23581 mode is suitable for the target. The compiler will insert 23582 conversion instructions as necessary (typically to convert the 23583 result to the same width as 'int'). When M is a vector, both 23584 operands must have mode M. 23585 23586 This pattern is not allowed to 'FAIL'. 23587 23588'clzM2' 23589 Store into operand 0 the number of leading 0-bits in operand 1, 23590 starting at the most significant bit position. If operand 1 is 0, 23591 the 'CLZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 23592 result is undefined or has a useful value. 23593 23594 M is either a scalar or vector integer mode. When it is a scalar, 23595 operand 1 has mode M but operand 0 can have whatever scalar integer 23596 mode is suitable for the target. The compiler will insert 23597 conversion instructions as necessary (typically to convert the 23598 result to the same width as 'int'). When M is a vector, both 23599 operands must have mode M. 23600 23601 This pattern is not allowed to 'FAIL'. 23602 23603'ctzM2' 23604 Store into operand 0 the number of trailing 0-bits in operand 1, 23605 starting at the least significant bit position. If operand 1 is 0, 23606 the 'CTZ_DEFINED_VALUE_AT_ZERO' (*note Misc::) macro defines if the 23607 result is undefined or has a useful value. 23608 23609 M is either a scalar or vector integer mode. When it is a scalar, 23610 operand 1 has mode M but operand 0 can have whatever scalar integer 23611 mode is suitable for the target. The compiler will insert 23612 conversion instructions as necessary (typically to convert the 23613 result to the same width as 'int'). When M is a vector, both 23614 operands must have mode M. 23615 23616 This pattern is not allowed to 'FAIL'. 23617 23618'popcountM2' 23619 Store into operand 0 the number of 1-bits in operand 1. 23620 23621 M is either a scalar or vector integer mode. When it is a scalar, 23622 operand 1 has mode M but operand 0 can have whatever scalar integer 23623 mode is suitable for the target. The compiler will insert 23624 conversion instructions as necessary (typically to convert the 23625 result to the same width as 'int'). When M is a vector, both 23626 operands must have mode M. 23627 23628 This pattern is not allowed to 'FAIL'. 23629 23630'parityM2' 23631 Store into operand 0 the parity of operand 1, i.e. the number of 23632 1-bits in operand 1 modulo 2. 23633 23634 M is either a scalar or vector integer mode. When it is a scalar, 23635 operand 1 has mode M but operand 0 can have whatever scalar integer 23636 mode is suitable for the target. The compiler will insert 23637 conversion instructions as necessary (typically to convert the 23638 result to the same width as 'int'). When M is a vector, both 23639 operands must have mode M. 23640 23641 This pattern is not allowed to 'FAIL'. 23642 23643'one_cmplM2' 23644 Store the bitwise-complement of operand 1 into operand 0. 23645 23646'movmemM' 23647 Block move instruction. The destination and source blocks of 23648 memory are the first two operands, and both are 'mem:BLK's with an 23649 address in mode 'Pmode'. 23650 23651 The number of bytes to move is the third operand, in mode M. 23652 Usually, you specify 'Pmode' for M. However, if you can generate 23653 better code knowing the range of valid lengths is smaller than 23654 those representable in a full Pmode pointer, you should provide a 23655 pattern with a mode corresponding to the range of values you can 23656 handle efficiently (e.g., 'QImode' for values in the range 0-127; 23657 note we avoid numbers that appear negative) and also a pattern with 23658 'Pmode'. 23659 23660 The fourth operand is the known shared alignment of the source and 23661 destination, in the form of a 'const_int' rtx. Thus, if the 23662 compiler knows that both source and destination are word-aligned, 23663 it may provide the value 4 for this operand. 23664 23665 Optional operands 5 and 6 specify expected alignment and size of 23666 block respectively. The expected alignment differs from alignment 23667 in operand 4 in a way that the blocks are not required to be 23668 aligned according to it in all cases. This expected alignment is 23669 also in bytes, just like operand 4. Expected size, when unknown, 23670 is set to '(const_int -1)'. 23671 23672 Descriptions of multiple 'movmemM' patterns can only be beneficial 23673 if the patterns for smaller modes have fewer restrictions on their 23674 first, second and fourth operands. Note that the mode M in 23675 'movmemM' does not impose any restriction on the mode of 23676 individually moved data units in the block. 23677 23678 These patterns need not give special consideration to the 23679 possibility that the source and destination strings might overlap. 23680 23681'movstr' 23682 String copy instruction, with 'stpcpy' semantics. Operand 0 is an 23683 output operand in mode 'Pmode'. The addresses of the destination 23684 and source strings are operands 1 and 2, and both are 'mem:BLK's 23685 with addresses in mode 'Pmode'. The execution of the expansion of 23686 this pattern should store in operand 0 the address in which the 23687 'NUL' terminator was stored in the destination string. 23688 23689 This patern has also several optional operands that are same as in 23690 'setmem'. 23691 23692'setmemM' 23693 Block set instruction. The destination string is the first 23694 operand, given as a 'mem:BLK' whose address is in mode 'Pmode'. 23695 The number of bytes to set is the second operand, in mode M. The 23696 value to initialize the memory with is the third operand. Targets 23697 that only support the clearing of memory should reject any value 23698 that is not the constant 0. See 'movmemM' for a discussion of the 23699 choice of mode. 23700 23701 The fourth operand is the known alignment of the destination, in 23702 the form of a 'const_int' rtx. Thus, if the compiler knows that 23703 the destination is word-aligned, it may provide the value 4 for 23704 this operand. 23705 23706 Optional operands 5 and 6 specify expected alignment and size of 23707 block respectively. The expected alignment differs from alignment 23708 in operand 4 in a way that the blocks are not required to be 23709 aligned according to it in all cases. This expected alignment is 23710 also in bytes, just like operand 4. Expected size, when unknown, 23711 is set to '(const_int -1)'. Operand 7 is the minimal size of the 23712 block and operand 8 is the maximal size of the block (NULL if it 23713 can not be represented as CONST_INT). Operand 9 is the probable 23714 maximal size (i.e. we can not rely on it for correctness, but it 23715 can be used for choosing proper code sequence for a given size). 23716 23717 The use for multiple 'setmemM' is as for 'movmemM'. 23718 23719'cmpstrnM' 23720 String compare instruction, with five operands. Operand 0 is the 23721 output; it has mode M. The remaining four operands are like the 23722 operands of 'movmemM'. The two memory blocks specified are 23723 compared byte by byte in lexicographic order starting at the 23724 beginning of each string. The instruction is not allowed to 23725 prefetch more than one byte at a time since either string may end 23726 in the first byte and reading past that may access an invalid page 23727 or segment and cause a fault. The comparison terminates early if 23728 the fetched bytes are different or if they are equal to zero. The 23729 effect of the instruction is to store a value in operand 0 whose 23730 sign indicates the result of the comparison. 23731 23732'cmpstrM' 23733 String compare instruction, without known maximum length. Operand 23734 0 is the output; it has mode M. The second and third operand are 23735 the blocks of memory to be compared; both are 'mem:BLK' with an 23736 address in mode 'Pmode'. 23737 23738 The fourth operand is the known shared alignment of the source and 23739 destination, in the form of a 'const_int' rtx. Thus, if the 23740 compiler knows that both source and destination are word-aligned, 23741 it may provide the value 4 for this operand. 23742 23743 The two memory blocks specified are compared byte by byte in 23744 lexicographic order starting at the beginning of each string. The 23745 instruction is not allowed to prefetch more than one byte at a time 23746 since either string may end in the first byte and reading past that 23747 may access an invalid page or segment and cause a fault. The 23748 comparison will terminate when the fetched bytes are different or 23749 if they are equal to zero. The effect of the instruction is to 23750 store a value in operand 0 whose sign indicates the result of the 23751 comparison. 23752 23753'cmpmemM' 23754 Block compare instruction, with five operands like the operands of 23755 'cmpstrM'. The two memory blocks specified are compared byte by 23756 byte in lexicographic order starting at the beginning of each 23757 block. Unlike 'cmpstrM' the instruction can prefetch any bytes in 23758 the two memory blocks. Also unlike 'cmpstrM' the comparison will 23759 not stop if both bytes are zero. The effect of the instruction is 23760 to store a value in operand 0 whose sign indicates the result of 23761 the comparison. 23762 23763'strlenM' 23764 Compute the length of a string, with three operands. Operand 0 is 23765 the result (of mode M), operand 1 is a 'mem' referring to the first 23766 character of the string, operand 2 is the character to search for 23767 (normally zero), and operand 3 is a constant describing the known 23768 alignment of the beginning of the string. 23769 23770'floatMN2' 23771 Convert signed integer operand 1 (valid for fixed point mode M) to 23772 floating point mode N and store in operand 0 (which has mode N). 23773 23774'floatunsMN2' 23775 Convert unsigned integer operand 1 (valid for fixed point mode M) 23776 to floating point mode N and store in operand 0 (which has mode N). 23777 23778'fixMN2' 23779 Convert operand 1 (valid for floating point mode M) to fixed point 23780 mode N as a signed number and store in operand 0 (which has mode 23781 N). This instruction's result is defined only when the value of 23782 operand 1 is an integer. 23783 23784 If the machine description defines this pattern, it also needs to 23785 define the 'ftrunc' pattern. 23786 23787'fixunsMN2' 23788 Convert operand 1 (valid for floating point mode M) to fixed point 23789 mode N as an unsigned number and store in operand 0 (which has mode 23790 N). This instruction's result is defined only when the value of 23791 operand 1 is an integer. 23792 23793'ftruncM2' 23794 Convert operand 1 (valid for floating point mode M) to an integer 23795 value, still represented in floating point mode M, and store it in 23796 operand 0 (valid for floating point mode M). 23797 23798'fix_truncMN2' 23799 Like 'fixMN2' but works for any floating point value of mode M by 23800 converting the value to an integer. 23801 23802'fixuns_truncMN2' 23803 Like 'fixunsMN2' but works for any floating point value of mode M 23804 by converting the value to an integer. 23805 23806'truncMN2' 23807 Truncate operand 1 (valid for mode M) to mode N and store in 23808 operand 0 (which has mode N). Both modes must be fixed point or 23809 both floating point. 23810 23811'extendMN2' 23812 Sign-extend operand 1 (valid for mode M) to mode N and store in 23813 operand 0 (which has mode N). Both modes must be fixed point or 23814 both floating point. 23815 23816'zero_extendMN2' 23817 Zero-extend operand 1 (valid for mode M) to mode N and store in 23818 operand 0 (which has mode N). Both modes must be fixed point. 23819 23820'fractMN2' 23821 Convert operand 1 of mode M to mode N and store in operand 0 (which 23822 has mode N). Mode M and mode N could be fixed-point to 23823 fixed-point, signed integer to fixed-point, fixed-point to signed 23824 integer, floating-point to fixed-point, or fixed-point to 23825 floating-point. When overflows or underflows happen, the results 23826 are undefined. 23827 23828'satfractMN2' 23829 Convert operand 1 of mode M to mode N and store in operand 0 (which 23830 has mode N). Mode M and mode N could be fixed-point to 23831 fixed-point, signed integer to fixed-point, or floating-point to 23832 fixed-point. When overflows or underflows happen, the instruction 23833 saturates the results to the maximum or the minimum. 23834 23835'fractunsMN2' 23836 Convert operand 1 of mode M to mode N and store in operand 0 (which 23837 has mode N). Mode M and mode N could be unsigned integer to 23838 fixed-point, or fixed-point to unsigned integer. When overflows or 23839 underflows happen, the results are undefined. 23840 23841'satfractunsMN2' 23842 Convert unsigned integer operand 1 of mode M to fixed-point mode N 23843 and store in operand 0 (which has mode N). When overflows or 23844 underflows happen, the instruction saturates the results to the 23845 maximum or the minimum. 23846 23847'extvM' 23848 Extract a bit-field from register operand 1, sign-extend it, and 23849 store it in operand 0. Operand 2 specifies the width of the field 23850 in bits and operand 3 the starting bit, which counts from the most 23851 significant bit if 'BITS_BIG_ENDIAN' is true and from the least 23852 significant bit otherwise. 23853 23854 Operands 0 and 1 both have mode M. Operands 2 and 3 have a 23855 target-specific mode. 23856 23857'extvmisalignM' 23858 Extract a bit-field from memory operand 1, sign extend it, and 23859 store it in operand 0. Operand 2 specifies the width in bits and 23860 operand 3 the starting bit. The starting bit is always somewhere 23861 in the first byte of operand 1; it counts from the most significant 23862 bit if 'BITS_BIG_ENDIAN' is true and from the least significant bit 23863 otherwise. 23864 23865 Operand 0 has mode M while operand 1 has 'BLK' mode. Operands 2 23866 and 3 have a target-specific mode. 23867 23868 The instruction must not read beyond the last byte of the 23869 bit-field. 23870 23871'extzvM' 23872 Like 'extvM' except that the bit-field value is zero-extended. 23873 23874'extzvmisalignM' 23875 Like 'extvmisalignM' except that the bit-field value is 23876 zero-extended. 23877 23878'insvM' 23879 Insert operand 3 into a bit-field of register operand 0. Operand 1 23880 specifies the width of the field in bits and operand 2 the starting 23881 bit, which counts from the most significant bit if 23882 'BITS_BIG_ENDIAN' is true and from the least significant bit 23883 otherwise. 23884 23885 Operands 0 and 3 both have mode M. Operands 1 and 2 have a 23886 target-specific mode. 23887 23888'insvmisalignM' 23889 Insert operand 3 into a bit-field of memory operand 0. Operand 1 23890 specifies the width of the field in bits and operand 2 the starting 23891 bit. The starting bit is always somewhere in the first byte of 23892 operand 0; it counts from the most significant bit if 23893 'BITS_BIG_ENDIAN' is true and from the least significant bit 23894 otherwise. 23895 23896 Operand 3 has mode M while operand 0 has 'BLK' mode. Operands 1 23897 and 2 have a target-specific mode. 23898 23899 The instruction must not read or write beyond the last byte of the 23900 bit-field. 23901 23902'extv' 23903 Extract a bit-field from operand 1 (a register or memory operand), 23904 where operand 2 specifies the width in bits and operand 3 the 23905 starting bit, and store it in operand 0. Operand 0 must have mode 23906 'word_mode'. Operand 1 may have mode 'byte_mode' or 'word_mode'; 23907 often 'word_mode' is allowed only for registers. Operands 2 and 3 23908 must be valid for 'word_mode'. 23909 23910 The RTL generation pass generates this instruction only with 23911 constants for operands 2 and 3 and the constant is never zero for 23912 operand 2. 23913 23914 The bit-field value is sign-extended to a full word integer before 23915 it is stored in operand 0. 23916 23917 This pattern is deprecated; please use 'extvM' and 'extvmisalignM' 23918 instead. 23919 23920'extzv' 23921 Like 'extv' except that the bit-field value is zero-extended. 23922 23923 This pattern is deprecated; please use 'extzvM' and 23924 'extzvmisalignM' instead. 23925 23926'insv' 23927 Store operand 3 (which must be valid for 'word_mode') into a 23928 bit-field in operand 0, where operand 1 specifies the width in bits 23929 and operand 2 the starting bit. Operand 0 may have mode 23930 'byte_mode' or 'word_mode'; often 'word_mode' is allowed only for 23931 registers. Operands 1 and 2 must be valid for 'word_mode'. 23932 23933 The RTL generation pass generates this instruction only with 23934 constants for operands 1 and 2 and the constant is never zero for 23935 operand 1. 23936 23937 This pattern is deprecated; please use 'insvM' and 'insvmisalignM' 23938 instead. 23939 23940'movMODEcc' 23941 Conditionally move operand 2 or operand 3 into operand 0 according 23942 to the comparison in operand 1. If the comparison is true, operand 23943 2 is moved into operand 0, otherwise operand 3 is moved. 23944 23945 The mode of the operands being compared need not be the same as the 23946 operands being moved. Some machines, sparc64 for example, have 23947 instructions that conditionally move an integer value based on the 23948 floating point condition codes and vice versa. 23949 23950 If the machine does not have conditional move instructions, do not 23951 define these patterns. 23952 23953'addMODEcc' 23954 Similar to 'movMODEcc' but for conditional addition. Conditionally 23955 move operand 2 or (operands 2 + operand 3) into operand 0 according 23956 to the comparison in operand 1. If the comparison is false, 23957 operand 2 is moved into operand 0, otherwise (operand 2 + operand 23958 3) is moved. 23959 23960'negMODEcc' 23961 Similar to 'movMODEcc' but for conditional negation. Conditionally 23962 move the negation of operand 2 or the unchanged operand 3 into 23963 operand 0 according to the comparison in operand 1. If the 23964 comparison is true, the negation of operand 2 is moved into operand 23965 0, otherwise operand 3 is moved. 23966 23967'notMODEcc' 23968 Similar to 'negMODEcc' but for conditional complement. 23969 Conditionally move the bitwise complement of operand 2 or the 23970 unchanged operand 3 into operand 0 according to the comparison in 23971 operand 1. If the comparison is true, the complement of operand 2 23972 is moved into operand 0, otherwise operand 3 is moved. 23973 23974'cstoreMODE4' 23975 Store zero or nonzero in operand 0 according to whether a 23976 comparison is true. Operand 1 is a comparison operator. Operand 2 23977 and operand 3 are the first and second operand of the comparison, 23978 respectively. You specify the mode that operand 0 must have when 23979 you write the 'match_operand' expression. The compiler 23980 automatically sees which mode you have used and supplies an operand 23981 of that mode. 23982 23983 The value stored for a true condition must have 1 as its low bit, 23984 or else must be negative. Otherwise the instruction is not 23985 suitable and you should omit it from the machine description. You 23986 describe to the compiler exactly which value is stored by defining 23987 the macro 'STORE_FLAG_VALUE' (*note Misc::). If a description 23988 cannot be found that can be used for all the possible comparison 23989 operators, you should pick one and use a 'define_expand' to map all 23990 results onto the one you chose. 23991 23992 These operations may 'FAIL', but should do so only in relatively 23993 uncommon cases; if they would 'FAIL' for common cases involving 23994 integer comparisons, it is best to restrict the predicates to not 23995 allow these operands. Likewise if a given comparison operator will 23996 always fail, independent of the operands (for floating-point modes, 23997 the 'ordered_comparison_operator' predicate is often useful in this 23998 case). 23999 24000 If this pattern is omitted, the compiler will generate a 24001 conditional branch--for example, it may copy a constant one to the 24002 target and branching around an assignment of zero to the target--or 24003 a libcall. If the predicate for operand 1 only rejects some 24004 operators, it will also try reordering the operands and/or 24005 inverting the result value (e.g. by an exclusive OR). These 24006 possibilities could be cheaper or equivalent to the instructions 24007 used for the 'cstoreMODE4' pattern followed by those required to 24008 convert a positive result from 'STORE_FLAG_VALUE' to 1; in this 24009 case, you can and should make operand 1's predicate reject some 24010 operators in the 'cstoreMODE4' pattern, or remove the pattern 24011 altogether from the machine description. 24012 24013'cbranchMODE4' 24014 Conditional branch instruction combined with a compare instruction. 24015 Operand 0 is a comparison operator. Operand 1 and operand 2 are 24016 the first and second operands of the comparison, respectively. 24017 Operand 3 is the 'code_label' to jump to. 24018 24019'jump' 24020 A jump inside a function; an unconditional branch. Operand 0 is 24021 the 'code_label' to jump to. This pattern name is mandatory on all 24022 machines. 24023 24024'call' 24025 Subroutine call instruction returning no value. Operand 0 is the 24026 function to call; operand 1 is the number of bytes of arguments 24027 pushed as a 'const_int'; operand 2 is the number of registers used 24028 as operands. 24029 24030 On most machines, operand 2 is not actually stored into the RTL 24031 pattern. It is supplied for the sake of some RISC machines which 24032 need to put this information into the assembler code; they can put 24033 it in the RTL instead of operand 1. 24034 24035 Operand 0 should be a 'mem' RTX whose address is the address of the 24036 function. Note, however, that this address can be a 'symbol_ref' 24037 expression even if it would not be a legitimate memory address on 24038 the target machine. If it is also not a valid argument for a call 24039 instruction, the pattern for this operation should be a 24040 'define_expand' (*note Expander Definitions::) that places the 24041 address into a register and uses that register in the call 24042 instruction. 24043 24044'call_value' 24045 Subroutine call instruction returning a value. Operand 0 is the 24046 hard register in which the value is returned. There are three more 24047 operands, the same as the three operands of the 'call' instruction 24048 (but with numbers increased by one). 24049 24050 Subroutines that return 'BLKmode' objects use the 'call' insn. 24051 24052'call_pop', 'call_value_pop' 24053 Similar to 'call' and 'call_value', except used if defined and if 24054 'RETURN_POPS_ARGS' is nonzero. They should emit a 'parallel' that 24055 contains both the function call and a 'set' to indicate the 24056 adjustment made to the frame pointer. 24057 24058 For machines where 'RETURN_POPS_ARGS' can be nonzero, the use of 24059 these patterns increases the number of functions for which the 24060 frame pointer can be eliminated, if desired. 24061 24062'untyped_call' 24063 Subroutine call instruction returning a value of any type. Operand 24064 0 is the function to call; operand 1 is a memory location where the 24065 result of calling the function is to be stored; operand 2 is a 24066 'parallel' expression where each element is a 'set' expression that 24067 indicates the saving of a function return value into the result 24068 block. 24069 24070 This instruction pattern should be defined to support 24071 '__builtin_apply' on machines where special instructions are needed 24072 to call a subroutine with arbitrary arguments or to save the value 24073 returned. This instruction pattern is required on machines that 24074 have multiple registers that can hold a return value (i.e. 24075 'FUNCTION_VALUE_REGNO_P' is true for more than one register). 24076 24077'return' 24078 Subroutine return instruction. This instruction pattern name 24079 should be defined only if a single instruction can do all the work 24080 of returning from a function. 24081 24082 Like the 'movM' patterns, this pattern is also used after the RTL 24083 generation phase. In this case it is to support machines where 24084 multiple instructions are usually needed to return from a function, 24085 but some class of functions only requires one instruction to 24086 implement a return. Normally, the applicable functions are those 24087 which do not need to save any registers or allocate stack space. 24088 24089 It is valid for this pattern to expand to an instruction using 24090 'simple_return' if no epilogue is required. 24091 24092'simple_return' 24093 Subroutine return instruction. This instruction pattern name 24094 should be defined only if a single instruction can do all the work 24095 of returning from a function on a path where no epilogue is 24096 required. This pattern is very similar to the 'return' instruction 24097 pattern, but it is emitted only by the shrink-wrapping optimization 24098 on paths where the function prologue has not been executed, and a 24099 function return should occur without any of the effects of the 24100 epilogue. Additional uses may be introduced on paths where both 24101 the prologue and the epilogue have executed. 24102 24103 For such machines, the condition specified in this pattern should 24104 only be true when 'reload_completed' is nonzero and the function's 24105 epilogue would only be a single instruction. For machines with 24106 register windows, the routine 'leaf_function_p' may be used to 24107 determine if a register window push is required. 24108 24109 Machines that have conditional return instructions should define 24110 patterns such as 24111 24112 (define_insn "" 24113 [(set (pc) 24114 (if_then_else (match_operator 24115 0 "comparison_operator" 24116 [(cc0) (const_int 0)]) 24117 (return) 24118 (pc)))] 24119 "CONDITION" 24120 "...") 24121 24122 where CONDITION would normally be the same condition specified on 24123 the named 'return' pattern. 24124 24125'untyped_return' 24126 Untyped subroutine return instruction. This instruction pattern 24127 should be defined to support '__builtin_return' on machines where 24128 special instructions are needed to return a value of any type. 24129 24130 Operand 0 is a memory location where the result of calling a 24131 function with '__builtin_apply' is stored; operand 1 is a 24132 'parallel' expression where each element is a 'set' expression that 24133 indicates the restoring of a function return value from the result 24134 block. 24135 24136'nop' 24137 No-op instruction. This instruction pattern name should always be 24138 defined to output a no-op in assembler code. '(const_int 0)' will 24139 do as an RTL pattern. 24140 24141'indirect_jump' 24142 An instruction to jump to an address which is operand zero. This 24143 pattern name is mandatory on all machines. 24144 24145'casesi' 24146 Instruction to jump through a dispatch table, including bounds 24147 checking. This instruction takes five operands: 24148 24149 1. The index to dispatch on, which has mode 'SImode'. 24150 24151 2. The lower bound for indices in the table, an integer constant. 24152 24153 3. The total range of indices in the table--the largest index 24154 minus the smallest one (both inclusive). 24155 24156 4. A label that precedes the table itself. 24157 24158 5. A label to jump to if the index has a value outside the 24159 bounds. 24160 24161 The table is an 'addr_vec' or 'addr_diff_vec' inside of a 24162 'jump_table_data'. The number of elements in the table is one plus 24163 the difference between the upper bound and the lower bound. 24164 24165'tablejump' 24166 Instruction to jump to a variable address. This is a low-level 24167 capability which can be used to implement a dispatch table when 24168 there is no 'casesi' pattern. 24169 24170 This pattern requires two operands: the address or offset, and a 24171 label which should immediately precede the jump table. If the 24172 macro 'CASE_VECTOR_PC_RELATIVE' evaluates to a nonzero value then 24173 the first operand is an offset which counts from the address of the 24174 table; otherwise, it is an absolute address to jump to. In either 24175 case, the first operand has mode 'Pmode'. 24176 24177 The 'tablejump' insn is always the last insn before the jump table 24178 it uses. Its assembler code normally has no need to use the second 24179 operand, but you should incorporate it in the RTL pattern so that 24180 the jump optimizer will not delete the table as unreachable code. 24181 24182'decrement_and_branch_until_zero' 24183 Conditional branch instruction that decrements a register and jumps 24184 if the register is nonzero. Operand 0 is the register to decrement 24185 and test; operand 1 is the label to jump to if the register is 24186 nonzero. *Note Looping Patterns::. 24187 24188 This optional instruction pattern is only used by the combiner, 24189 typically for loops reversed by the loop optimizer when strength 24190 reduction is enabled. 24191 24192'doloop_end' 24193 Conditional branch instruction that decrements a register and jumps 24194 if the register is nonzero. Operand 0 is the register to decrement 24195 and test; operand 1 is the label to jump to if the register is 24196 nonzero. *Note Looping Patterns::. 24197 24198 This optional instruction pattern should be defined for machines 24199 with low-overhead looping instructions as the loop optimizer will 24200 try to modify suitable loops to utilize it. The target hook 24201 'TARGET_CAN_USE_DOLOOP_P' controls the conditions under which 24202 low-overhead loops can be used. 24203 24204'doloop_begin' 24205 Companion instruction to 'doloop_end' required for machines that 24206 need to perform some initialization, such as loading a special 24207 counter register. Operand 1 is the associated 'doloop_end' pattern 24208 and operand 0 is the register that it decrements. 24209 24210 If initialization insns do not always need to be emitted, use a 24211 'define_expand' (*note Expander Definitions::) and make it fail. 24212 24213'canonicalize_funcptr_for_compare' 24214 Canonicalize the function pointer in operand 1 and store the result 24215 into operand 0. 24216 24217 Operand 0 is always a 'reg' and has mode 'Pmode'; operand 1 may be 24218 a 'reg', 'mem', 'symbol_ref', 'const_int', etc and also has mode 24219 'Pmode'. 24220 24221 Canonicalization of a function pointer usually involves computing 24222 the address of the function which would be called if the function 24223 pointer were used in an indirect call. 24224 24225 Only define this pattern if function pointers on the target machine 24226 can have different values but still call the same function when 24227 used in an indirect call. 24228 24229'save_stack_block' 24230'save_stack_function' 24231'save_stack_nonlocal' 24232'restore_stack_block' 24233'restore_stack_function' 24234'restore_stack_nonlocal' 24235 Most machines save and restore the stack pointer by copying it to 24236 or from an object of mode 'Pmode'. Do not define these patterns on 24237 such machines. 24238 24239 Some machines require special handling for stack pointer saves and 24240 restores. On those machines, define the patterns corresponding to 24241 the non-standard cases by using a 'define_expand' (*note Expander 24242 Definitions::) that produces the required insns. The three types 24243 of saves and restores are: 24244 24245 1. 'save_stack_block' saves the stack pointer at the start of a 24246 block that allocates a variable-sized object, and 24247 'restore_stack_block' restores the stack pointer when the 24248 block is exited. 24249 24250 2. 'save_stack_function' and 'restore_stack_function' do a 24251 similar job for the outermost block of a function and are used 24252 when the function allocates variable-sized objects or calls 24253 'alloca'. Only the epilogue uses the restored stack pointer, 24254 allowing a simpler save or restore sequence on some machines. 24255 24256 3. 'save_stack_nonlocal' is used in functions that contain labels 24257 branched to by nested functions. It saves the stack pointer 24258 in such a way that the inner function can use 24259 'restore_stack_nonlocal' to restore the stack pointer. The 24260 compiler generates code to restore the frame and argument 24261 pointer registers, but some machines require saving and 24262 restoring additional data such as register window information 24263 or stack backchains. Place insns in these patterns to save 24264 and restore any such required data. 24265 24266 When saving the stack pointer, operand 0 is the save area and 24267 operand 1 is the stack pointer. The mode used to allocate the save 24268 area defaults to 'Pmode' but you can override that choice by 24269 defining the 'STACK_SAVEAREA_MODE' macro (*note Storage Layout::). 24270 You must specify an integral mode, or 'VOIDmode' if no save area is 24271 needed for a particular type of save (either because no save is 24272 needed or because a machine-specific save area can be used). 24273 Operand 0 is the stack pointer and operand 1 is the save area for 24274 restore operations. If 'save_stack_block' is defined, operand 0 24275 must not be 'VOIDmode' since these saves can be arbitrarily nested. 24276 24277 A save area is a 'mem' that is at a constant offset from 24278 'virtual_stack_vars_rtx' when the stack pointer is saved for use by 24279 nonlocal gotos and a 'reg' in the other two cases. 24280 24281'allocate_stack' 24282 Subtract (or add if 'STACK_GROWS_DOWNWARD' is undefined) operand 1 24283 from the stack pointer to create space for dynamically allocated 24284 data. 24285 24286 Store the resultant pointer to this space into operand 0. If you 24287 are allocating space from the main stack, do this by emitting a 24288 move insn to copy 'virtual_stack_dynamic_rtx' to operand 0. If you 24289 are allocating the space elsewhere, generate code to copy the 24290 location of the space to operand 0. In the latter case, you must 24291 ensure this space gets freed when the corresponding space on the 24292 main stack is free. 24293 24294 Do not define this pattern if all that must be done is the 24295 subtraction. Some machines require other operations such as stack 24296 probes or maintaining the back chain. Define this pattern to emit 24297 those operations in addition to updating the stack pointer. 24298 24299'check_stack' 24300 If stack checking (*note Stack Checking::) cannot be done on your 24301 system by probing the stack, define this pattern to perform the 24302 needed check and signal an error if the stack has overflowed. The 24303 single operand is the address in the stack farthest from the 24304 current stack pointer that you need to validate. Normally, on 24305 platforms where this pattern is needed, you would obtain the stack 24306 limit from a global or thread-specific variable or register. 24307 24308'probe_stack_address' 24309 If stack checking (*note Stack Checking::) can be done on your 24310 system by probing the stack but without the need to actually access 24311 it, define this pattern and signal an error if the stack has 24312 overflowed. The single operand is the memory address in the stack 24313 that needs to be probed. 24314 24315'probe_stack' 24316 If stack checking (*note Stack Checking::) can be done on your 24317 system by probing the stack but doing it with a "store zero" 24318 instruction is not valid or optimal, define this pattern to do the 24319 probing differently and signal an error if the stack has 24320 overflowed. The single operand is the memory reference in the 24321 stack that needs to be probed. 24322 24323'nonlocal_goto' 24324 Emit code to generate a non-local goto, e.g., a jump from one 24325 function to a label in an outer function. This pattern has four 24326 arguments, each representing a value to be used in the jump. The 24327 first argument is to be loaded into the frame pointer, the second 24328 is the address to branch to (code to dispatch to the actual label), 24329 the third is the address of a location where the stack is saved, 24330 and the last is the address of the label, to be placed in the 24331 location for the incoming static chain. 24332 24333 On most machines you need not define this pattern, since GCC will 24334 already generate the correct code, which is to load the frame 24335 pointer and static chain, restore the stack (using the 24336 'restore_stack_nonlocal' pattern, if defined), and jump indirectly 24337 to the dispatcher. You need only define this pattern if this code 24338 will not work on your machine. 24339 24340'nonlocal_goto_receiver' 24341 This pattern, if defined, contains code needed at the target of a 24342 nonlocal goto after the code already generated by GCC. You will 24343 not normally need to define this pattern. A typical reason why you 24344 might need this pattern is if some value, such as a pointer to a 24345 global table, must be restored when the frame pointer is restored. 24346 Note that a nonlocal goto only occurs within a unit-of-translation, 24347 so a global table pointer that is shared by all functions of a 24348 given module need not be restored. There are no arguments. 24349 24350'exception_receiver' 24351 This pattern, if defined, contains code needed at the site of an 24352 exception handler that isn't needed at the site of a nonlocal goto. 24353 You will not normally need to define this pattern. A typical 24354 reason why you might need this pattern is if some value, such as a 24355 pointer to a global table, must be restored after control flow is 24356 branched to the handler of an exception. There are no arguments. 24357 24358'builtin_setjmp_setup' 24359 This pattern, if defined, contains additional code needed to 24360 initialize the 'jmp_buf'. You will not normally need to define 24361 this pattern. A typical reason why you might need this pattern is 24362 if some value, such as a pointer to a global table, must be 24363 restored. Though it is preferred that the pointer value be 24364 recalculated if possible (given the address of a label for 24365 instance). The single argument is a pointer to the 'jmp_buf'. 24366 Note that the buffer is five words long and that the first three 24367 are normally used by the generic mechanism. 24368 24369'builtin_setjmp_receiver' 24370 This pattern, if defined, contains code needed at the site of a 24371 built-in setjmp that isn't needed at the site of a nonlocal goto. 24372 You will not normally need to define this pattern. A typical 24373 reason why you might need this pattern is if some value, such as a 24374 pointer to a global table, must be restored. It takes one 24375 argument, which is the label to which builtin_longjmp transferred 24376 control; this pattern may be emitted at a small offset from that 24377 label. 24378 24379'builtin_longjmp' 24380 This pattern, if defined, performs the entire action of the 24381 longjmp. You will not normally need to define this pattern unless 24382 you also define 'builtin_setjmp_setup'. The single argument is a 24383 pointer to the 'jmp_buf'. 24384 24385'eh_return' 24386 This pattern, if defined, affects the way '__builtin_eh_return', 24387 and thence the call frame exception handling library routines, are 24388 built. It is intended to handle non-trivial actions needed along 24389 the abnormal return path. 24390 24391 The address of the exception handler to which the function should 24392 return is passed as operand to this pattern. It will normally need 24393 to copied by the pattern to some special register or memory 24394 location. If the pattern needs to determine the location of the 24395 target call frame in order to do so, it may use 24396 'EH_RETURN_STACKADJ_RTX', if defined; it will have already been 24397 assigned. 24398 24399 If this pattern is not defined, the default action will be to 24400 simply copy the return address to 'EH_RETURN_HANDLER_RTX'. Either 24401 that macro or this pattern needs to be defined if call frame 24402 exception handling is to be used. 24403 24404'prologue' 24405 This pattern, if defined, emits RTL for entry to a function. The 24406 function entry is responsible for setting up the stack frame, 24407 initializing the frame pointer register, saving callee saved 24408 registers, etc. 24409 24410 Using a prologue pattern is generally preferred over defining 24411 'TARGET_ASM_FUNCTION_PROLOGUE' to emit assembly code for the 24412 prologue. 24413 24414 The 'prologue' pattern is particularly useful for targets which 24415 perform instruction scheduling. 24416 24417'window_save' 24418 This pattern, if defined, emits RTL for a register window save. It 24419 should be defined if the target machine has register windows but 24420 the window events are decoupled from calls to subroutines. The 24421 canonical example is the SPARC architecture. 24422 24423'epilogue' 24424 This pattern emits RTL for exit from a function. The function exit 24425 is responsible for deallocating the stack frame, restoring callee 24426 saved registers and emitting the return instruction. 24427 24428 Using an epilogue pattern is generally preferred over defining 24429 'TARGET_ASM_FUNCTION_EPILOGUE' to emit assembly code for the 24430 epilogue. 24431 24432 The 'epilogue' pattern is particularly useful for targets which 24433 perform instruction scheduling or which have delay slots for their 24434 return instruction. 24435 24436'sibcall_epilogue' 24437 This pattern, if defined, emits RTL for exit from a function 24438 without the final branch back to the calling function. This 24439 pattern will be emitted before any sibling call (aka tail call) 24440 sites. 24441 24442 The 'sibcall_epilogue' pattern must not clobber any arguments used 24443 for parameter passing or any stack slots for arguments passed to 24444 the current function. 24445 24446'trap' 24447 This pattern, if defined, signals an error, typically by causing 24448 some kind of signal to be raised. Among other places, it is used 24449 by the Java front end to signal 'invalid array index' exceptions. 24450 24451'ctrapMM4' 24452 Conditional trap instruction. Operand 0 is a piece of RTL which 24453 performs a comparison, and operands 1 and 2 are the arms of the 24454 comparison. Operand 3 is the trap code, an integer. 24455 24456 A typical 'ctrap' pattern looks like 24457 24458 (define_insn "ctrapsi4" 24459 [(trap_if (match_operator 0 "trap_operator" 24460 [(match_operand 1 "register_operand") 24461 (match_operand 2 "immediate_operand")]) 24462 (match_operand 3 "const_int_operand" "i"))] 24463 "" 24464 "...") 24465 24466'prefetch' 24467 This pattern, if defined, emits code for a non-faulting data 24468 prefetch instruction. Operand 0 is the address of the memory to 24469 prefetch. Operand 1 is a constant 1 if the prefetch is preparing 24470 for a write to the memory address, or a constant 0 otherwise. 24471 Operand 2 is the expected degree of temporal locality of the data 24472 and is a value between 0 and 3, inclusive; 0 means that the data 24473 has no temporal locality, so it need not be left in the cache after 24474 the access; 3 means that the data has a high degree of temporal 24475 locality and should be left in all levels of cache possible; 1 and 24476 2 mean, respectively, a low or moderate degree of temporal 24477 locality. 24478 24479 Targets that do not support write prefetches or locality hints can 24480 ignore the values of operands 1 and 2. 24481 24482'blockage' 24483 This pattern defines a pseudo insn that prevents the instruction 24484 scheduler and other passes from moving instructions and using 24485 register equivalences across the boundary defined by the blockage 24486 insn. This needs to be an UNSPEC_VOLATILE pattern or a volatile 24487 ASM. 24488 24489'memory_barrier' 24490 If the target memory model is not fully synchronous, then this 24491 pattern should be defined to an instruction that orders both loads 24492 and stores before the instruction with respect to loads and stores 24493 after the instruction. This pattern has no operands. 24494 24495'sync_compare_and_swapMODE' 24496 This pattern, if defined, emits code for an atomic compare-and-swap 24497 operation. Operand 1 is the memory on which the atomic operation 24498 is performed. Operand 2 is the "old" value to be compared against 24499 the current contents of the memory location. Operand 3 is the 24500 "new" value to store in the memory if the compare succeeds. 24501 Operand 0 is the result of the operation; it should contain the 24502 contents of the memory before the operation. If the compare 24503 succeeds, this should obviously be a copy of operand 2. 24504 24505 This pattern must show that both operand 0 and operand 1 are 24506 modified. 24507 24508 This pattern must issue any memory barrier instructions such that 24509 all memory operations before the atomic operation occur before the 24510 atomic operation and all memory operations after the atomic 24511 operation occur after the atomic operation. 24512 24513 For targets where the success or failure of the compare-and-swap 24514 operation is available via the status flags, it is possible to 24515 avoid a separate compare operation and issue the subsequent branch 24516 or store-flag operation immediately after the compare-and-swap. To 24517 this end, GCC will look for a 'MODE_CC' set in the output of 24518 'sync_compare_and_swapMODE'; if the machine description includes 24519 such a set, the target should also define special 'cbranchcc4' 24520 and/or 'cstorecc4' instructions. GCC will then be able to take the 24521 destination of the 'MODE_CC' set and pass it to the 'cbranchcc4' or 24522 'cstorecc4' pattern as the first operand of the comparison (the 24523 second will be '(const_int 0)'). 24524 24525 For targets where the operating system may provide support for this 24526 operation via library calls, the 'sync_compare_and_swap_optab' may 24527 be initialized to a function with the same interface as the 24528 '__sync_val_compare_and_swap_N' built-in. If the entire set of 24529 __SYNC builtins are supported via library calls, the target can 24530 initialize all of the optabs at once with 'init_sync_libfuncs'. 24531 For the purposes of C++11 'std::atomic::is_lock_free', it is 24532 assumed that these library calls do _not_ use any kind of 24533 interruptable locking. 24534 24535'sync_addMODE', 'sync_subMODE' 24536'sync_iorMODE', 'sync_andMODE' 24537'sync_xorMODE', 'sync_nandMODE' 24538 These patterns emit code for an atomic operation on memory. 24539 Operand 0 is the memory on which the atomic operation is performed. 24540 Operand 1 is the second operand to the binary operator. 24541 24542 This pattern must issue any memory barrier instructions such that 24543 all memory operations before the atomic operation occur before the 24544 atomic operation and all memory operations after the atomic 24545 operation occur after the atomic operation. 24546 24547 If these patterns are not defined, the operation will be 24548 constructed from a compare-and-swap operation, if defined. 24549 24550'sync_old_addMODE', 'sync_old_subMODE' 24551'sync_old_iorMODE', 'sync_old_andMODE' 24552'sync_old_xorMODE', 'sync_old_nandMODE' 24553 These patterns emit code for an atomic operation on memory, and 24554 return the value that the memory contained before the operation. 24555 Operand 0 is the result value, operand 1 is the memory on which the 24556 atomic operation is performed, and operand 2 is the second operand 24557 to the binary operator. 24558 24559 This pattern must issue any memory barrier instructions such that 24560 all memory operations before the atomic operation occur before the 24561 atomic operation and all memory operations after the atomic 24562 operation occur after the atomic operation. 24563 24564 If these patterns are not defined, the operation will be 24565 constructed from a compare-and-swap operation, if defined. 24566 24567'sync_new_addMODE', 'sync_new_subMODE' 24568'sync_new_iorMODE', 'sync_new_andMODE' 24569'sync_new_xorMODE', 'sync_new_nandMODE' 24570 These patterns are like their 'sync_old_OP' counterparts, except 24571 that they return the value that exists in the memory location after 24572 the operation, rather than before the operation. 24573 24574'sync_lock_test_and_setMODE' 24575 This pattern takes two forms, based on the capabilities of the 24576 target. In either case, operand 0 is the result of the operand, 24577 operand 1 is the memory on which the atomic operation is performed, 24578 and operand 2 is the value to set in the lock. 24579 24580 In the ideal case, this operation is an atomic exchange operation, 24581 in which the previous value in memory operand is copied into the 24582 result operand, and the value operand is stored in the memory 24583 operand. 24584 24585 For less capable targets, any value operand that is not the 24586 constant 1 should be rejected with 'FAIL'. In this case the target 24587 may use an atomic test-and-set bit operation. The result operand 24588 should contain 1 if the bit was previously set and 0 if the bit was 24589 previously clear. The true contents of the memory operand are 24590 implementation defined. 24591 24592 This pattern must issue any memory barrier instructions such that 24593 the pattern as a whole acts as an acquire barrier, that is all 24594 memory operations after the pattern do not occur until the lock is 24595 acquired. 24596 24597 If this pattern is not defined, the operation will be constructed 24598 from a compare-and-swap operation, if defined. 24599 24600'sync_lock_releaseMODE' 24601 This pattern, if defined, releases a lock set by 24602 'sync_lock_test_and_setMODE'. Operand 0 is the memory that 24603 contains the lock; operand 1 is the value to store in the lock. 24604 24605 If the target doesn't implement full semantics for 24606 'sync_lock_test_and_setMODE', any value operand which is not the 24607 constant 0 should be rejected with 'FAIL', and the true contents of 24608 the memory operand are implementation defined. 24609 24610 This pattern must issue any memory barrier instructions such that 24611 the pattern as a whole acts as a release barrier, that is the lock 24612 is released only after all previous memory operations have 24613 completed. 24614 24615 If this pattern is not defined, then a 'memory_barrier' pattern 24616 will be emitted, followed by a store of the value to the memory 24617 operand. 24618 24619'atomic_compare_and_swapMODE' 24620 This pattern, if defined, emits code for an atomic compare-and-swap 24621 operation with memory model semantics. Operand 2 is the memory on 24622 which the atomic operation is performed. Operand 0 is an output 24623 operand which is set to true or false based on whether the 24624 operation succeeded. Operand 1 is an output operand which is set 24625 to the contents of the memory before the operation was attempted. 24626 Operand 3 is the value that is expected to be in memory. Operand 4 24627 is the value to put in memory if the expected value is found there. 24628 Operand 5 is set to 1 if this compare and swap is to be treated as 24629 a weak operation. Operand 6 is the memory model to be used if the 24630 operation is a success. Operand 7 is the memory model to be used 24631 if the operation fails. 24632 24633 If memory referred to in operand 2 contains the value in operand 3, 24634 then operand 4 is stored in memory pointed to by operand 2 and 24635 fencing based on the memory model in operand 6 is issued. 24636 24637 If memory referred to in operand 2 does not contain the value in 24638 operand 3, then fencing based on the memory model in operand 7 is 24639 issued. 24640 24641 If a target does not support weak compare-and-swap operations, or 24642 the port elects not to implement weak operations, the argument in 24643 operand 5 can be ignored. Note a strong implementation must be 24644 provided. 24645 24646 If this pattern is not provided, the '__atomic_compare_exchange' 24647 built-in functions will utilize the legacy 'sync_compare_and_swap' 24648 pattern with an '__ATOMIC_SEQ_CST' memory model. 24649 24650'atomic_loadMODE' 24651 This pattern implements an atomic load operation with memory model 24652 semantics. Operand 1 is the memory address being loaded from. 24653 Operand 0 is the result of the load. Operand 2 is the memory model 24654 to be used for the load operation. 24655 24656 If not present, the '__atomic_load' built-in function will either 24657 resort to a normal load with memory barriers, or a compare-and-swap 24658 operation if a normal load would not be atomic. 24659 24660'atomic_storeMODE' 24661 This pattern implements an atomic store operation with memory model 24662 semantics. Operand 0 is the memory address being stored to. 24663 Operand 1 is the value to be written. Operand 2 is the memory 24664 model to be used for the operation. 24665 24666 If not present, the '__atomic_store' built-in function will attempt 24667 to perform a normal store and surround it with any required memory 24668 fences. If the store would not be atomic, then an 24669 '__atomic_exchange' is attempted with the result being ignored. 24670 24671'atomic_exchangeMODE' 24672 This pattern implements an atomic exchange operation with memory 24673 model semantics. Operand 1 is the memory location the operation is 24674 performed on. Operand 0 is an output operand which is set to the 24675 original value contained in the memory pointed to by operand 1. 24676 Operand 2 is the value to be stored. Operand 3 is the memory model 24677 to be used. 24678 24679 If this pattern is not present, the built-in function 24680 '__atomic_exchange' will attempt to preform the operation with a 24681 compare and swap loop. 24682 24683'atomic_addMODE', 'atomic_subMODE' 24684'atomic_orMODE', 'atomic_andMODE' 24685'atomic_xorMODE', 'atomic_nandMODE' 24686 These patterns emit code for an atomic operation on memory with 24687 memory model semantics. Operand 0 is the memory on which the 24688 atomic operation is performed. Operand 1 is the second operand to 24689 the binary operator. Operand 2 is the memory model to be used by 24690 the operation. 24691 24692 If these patterns are not defined, attempts will be made to use 24693 legacy 'sync' patterns, or equivalent patterns which return a 24694 result. If none of these are available a compare-and-swap loop 24695 will be used. 24696 24697'atomic_fetch_addMODE', 'atomic_fetch_subMODE' 24698'atomic_fetch_orMODE', 'atomic_fetch_andMODE' 24699'atomic_fetch_xorMODE', 'atomic_fetch_nandMODE' 24700 These patterns emit code for an atomic operation on memory with 24701 memory model semantics, and return the original value. Operand 0 24702 is an output operand which contains the value of the memory 24703 location before the operation was performed. Operand 1 is the 24704 memory on which the atomic operation is performed. Operand 2 is 24705 the second operand to the binary operator. Operand 3 is the memory 24706 model to be used by the operation. 24707 24708 If these patterns are not defined, attempts will be made to use 24709 legacy 'sync' patterns. If none of these are available a 24710 compare-and-swap loop will be used. 24711 24712'atomic_add_fetchMODE', 'atomic_sub_fetchMODE' 24713'atomic_or_fetchMODE', 'atomic_and_fetchMODE' 24714'atomic_xor_fetchMODE', 'atomic_nand_fetchMODE' 24715 These patterns emit code for an atomic operation on memory with 24716 memory model semantics and return the result after the operation is 24717 performed. Operand 0 is an output operand which contains the value 24718 after the operation. Operand 1 is the memory on which the atomic 24719 operation is performed. Operand 2 is the second operand to the 24720 binary operator. Operand 3 is the memory model to be used by the 24721 operation. 24722 24723 If these patterns are not defined, attempts will be made to use 24724 legacy 'sync' patterns, or equivalent patterns which return the 24725 result before the operation followed by the arithmetic operation 24726 required to produce the result. If none of these are available a 24727 compare-and-swap loop will be used. 24728 24729'atomic_test_and_set' 24730 This pattern emits code for '__builtin_atomic_test_and_set'. 24731 Operand 0 is an output operand which is set to true if the previous 24732 previous contents of the byte was "set", and false otherwise. 24733 Operand 1 is the 'QImode' memory to be modified. Operand 2 is the 24734 memory model to be used. 24735 24736 The specific value that defines "set" is implementation defined, 24737 and is normally based on what is performed by the native atomic 24738 test and set instruction. 24739 24740'mem_thread_fenceMODE' 24741 This pattern emits code required to implement a thread fence with 24742 memory model semantics. Operand 0 is the memory model to be used. 24743 24744 If this pattern is not specified, all memory models except 24745 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 24746 barrier pattern. 24747 24748'mem_signal_fenceMODE' 24749 This pattern emits code required to implement a signal fence with 24750 memory model semantics. Operand 0 is the memory model to be used. 24751 24752 This pattern should impact the compiler optimizers the same way 24753 that mem_signal_fence does, but it does not need to issue any 24754 barrier instructions. 24755 24756 If this pattern is not specified, all memory models except 24757 '__ATOMIC_RELAXED' will result in issuing a 'sync_synchronize' 24758 barrier pattern. 24759 24760'get_thread_pointerMODE' 24761'set_thread_pointerMODE' 24762 These patterns emit code that reads/sets the TLS thread pointer. 24763 Currently, these are only needed if the target needs to support the 24764 '__builtin_thread_pointer' and '__builtin_set_thread_pointer' 24765 builtins. 24766 24767 The get/set patterns have a single output/input operand 24768 respectively, with MODE intended to be 'Pmode'. 24769 24770'stack_protect_set' 24771 This pattern, if defined, moves a 'ptr_mode' value from the memory 24772 in operand 1 to the memory in operand 0 without leaving the value 24773 in a register afterward. This is to avoid leaking the value some 24774 place that an attacker might use to rewrite the stack guard slot 24775 after having clobbered it. 24776 24777 If this pattern is not defined, then a plain move pattern is 24778 generated. 24779 24780'stack_protect_test' 24781 This pattern, if defined, compares a 'ptr_mode' value from the 24782 memory in operand 1 with the memory in operand 0 without leaving 24783 the value in a register afterward and branches to operand 2 if the 24784 values were equal. 24785 24786 If this pattern is not defined, then a plain compare pattern and 24787 conditional branch pattern is used. 24788 24789'clear_cache' 24790 This pattern, if defined, flushes the instruction cache for a 24791 region of memory. The region is bounded to by the Pmode pointers 24792 in operand 0 inclusive and operand 1 exclusive. 24793 24794 If this pattern is not defined, a call to the library function 24795 '__clear_cache' is used. 24796 24797 24798File: gccint.info, Node: Pattern Ordering, Next: Dependent Patterns, Prev: Standard Names, Up: Machine Desc 24799 2480016.10 When the Order of Patterns Matters 24801======================================== 24802 24803Sometimes an insn can match more than one instruction pattern. Then the 24804pattern that appears first in the machine description is the one used. 24805Therefore, more specific patterns (patterns that will match fewer 24806things) and faster instructions (those that will produce better code 24807when they do match) should usually go first in the description. 24808 24809 In some cases the effect of ordering the patterns can be used to hide a 24810pattern when it is not valid. For example, the 68000 has an instruction 24811for converting a fullword to floating point and another for converting a 24812byte to floating point. An instruction converting an integer to 24813floating point could match either one. We put the pattern to convert 24814the fullword first to make sure that one will be used rather than the 24815other. (Otherwise a large integer might be generated as a single-byte 24816immediate quantity, which would not work.) Instead of using this 24817pattern ordering it would be possible to make the pattern for 24818convert-a-byte smart enough to deal properly with any constant value. 24819 24820 24821File: gccint.info, Node: Dependent Patterns, Next: Jump Patterns, Prev: Pattern Ordering, Up: Machine Desc 24822 2482316.11 Interdependence of Patterns 24824================================= 24825 24826In some cases machines support instructions identical except for the 24827machine mode of one or more operands. For example, there may be 24828"sign-extend halfword" and "sign-extend byte" instructions whose 24829patterns are 24830 24831 (set (match_operand:SI 0 ...) 24832 (extend:SI (match_operand:HI 1 ...))) 24833 24834 (set (match_operand:SI 0 ...) 24835 (extend:SI (match_operand:QI 1 ...))) 24836 24837Constant integers do not specify a machine mode, so an instruction to 24838extend a constant value could match either pattern. The pattern it 24839actually will match is the one that appears first in the file. For 24840correct results, this must be the one for the widest possible mode 24841('HImode', here). If the pattern matches the 'QImode' instruction, the 24842results will be incorrect if the constant value does not actually fit 24843that mode. 24844 24845 Such instructions to extend constants are rarely generated because they 24846are optimized away, but they do occasionally happen in nonoptimized 24847compilations. 24848 24849 If a constraint in a pattern allows a constant, the reload pass may 24850replace a register with a constant permitted by the constraint in some 24851cases. Similarly for memory references. Because of this substitution, 24852you should not provide separate patterns for increment and decrement 24853instructions. Instead, they should be generated from the same pattern 24854that supports register-register add insns by examining the operands and 24855generating the appropriate machine instruction. 24856 24857 24858File: gccint.info, Node: Jump Patterns, Next: Looping Patterns, Prev: Dependent Patterns, Up: Machine Desc 24859 2486016.12 Defining Jump Instruction Patterns 24861======================================== 24862 24863GCC does not assume anything about how the machine realizes jumps. The 24864machine description should define a single pattern, usually a 24865'define_expand', which expands to all the required insns. 24866 24867 Usually, this would be a comparison insn to set the condition code and 24868a separate branch insn testing the condition code and branching or not 24869according to its value. For many machines, however, separating compares 24870and branches is limiting, which is why the more flexible approach with 24871one 'define_expand' is used in GCC. The machine description becomes 24872clearer for architectures that have compare-and-branch instructions but 24873no condition code. It also works better when different sets of 24874comparison operators are supported by different kinds of conditional 24875branches (e.g. integer vs. floating-point), or by conditional branches 24876with respect to conditional stores. 24877 24878 Two separate insns are always used if the machine description 24879represents a condition code register using the legacy RTL expression 24880'(cc0)', and on most machines that use a separate condition code 24881register (*note Condition Code::). For machines that use '(cc0)', in 24882fact, the set and use of the condition code must be separate and 24883adjacent(1), thus allowing flags in 'cc_status' to be used (*note 24884Condition Code::) and so that the comparison and branch insns could be 24885located from each other by using the functions 'prev_cc0_setter' and 24886'next_cc0_user'. 24887 24888 Even in this case having a single entry point for conditional branches 24889is advantageous, because it handles equally well the case where a single 24890comparison instruction records the results of both signed and unsigned 24891comparison of the given operands (with the branch insns coming in 24892distinct signed and unsigned flavors) as in the x86 or SPARC, and the 24893case where there are distinct signed and unsigned compare instructions 24894and only one set of conditional branch instructions as in the PowerPC. 24895 24896 ---------- Footnotes ---------- 24897 24898 (1) 'note' insns can separate them, though. 24899 24900 24901File: gccint.info, Node: Looping Patterns, Next: Insn Canonicalizations, Prev: Jump Patterns, Up: Machine Desc 24902 2490316.13 Defining Looping Instruction Patterns 24904=========================================== 24905 24906Some machines have special jump instructions that can be utilized to 24907make loops more efficient. A common example is the 68000 'dbra' 24908instruction which performs a decrement of a register and a branch if the 24909result was greater than zero. Other machines, in particular digital 24910signal processors (DSPs), have special block repeat instructions to 24911provide low-overhead loop support. For example, the TI TMS320C3x/C4x 24912DSPs have a block repeat instruction that loads special registers to 24913mark the top and end of a loop and to count the number of loop 24914iterations. This avoids the need for fetching and executing a 24915'dbra'-like instruction and avoids pipeline stalls associated with the 24916jump. 24917 24918 GCC has three special named patterns to support low overhead looping. 24919They are 'decrement_and_branch_until_zero', 'doloop_begin', and 24920'doloop_end'. The first pattern, 'decrement_and_branch_until_zero', is 24921not emitted during RTL generation but may be emitted during the 24922instruction combination phase. This requires the assistance of the loop 24923optimizer, using information collected during strength reduction, to 24924reverse a loop to count down to zero. Some targets also require the 24925loop optimizer to add a 'REG_NONNEG' note to indicate that the iteration 24926count is always positive. This is needed if the target performs a 24927signed loop termination test. For example, the 68000 uses a pattern 24928similar to the following for its 'dbra' instruction: 24929 24930 (define_insn "decrement_and_branch_until_zero" 24931 [(set (pc) 24932 (if_then_else 24933 (ge (plus:SI (match_operand:SI 0 "general_operand" "+d*am") 24934 (const_int -1)) 24935 (const_int 0)) 24936 (label_ref (match_operand 1 "" "")) 24937 (pc))) 24938 (set (match_dup 0) 24939 (plus:SI (match_dup 0) 24940 (const_int -1)))] 24941 "find_reg_note (insn, REG_NONNEG, 0)" 24942 "...") 24943 24944 Note that since the insn is both a jump insn and has an output, it must 24945deal with its own reloads, hence the 'm' constraints. Also note that 24946since this insn is generated by the instruction combination phase 24947combining two sequential insns together into an implicit parallel insn, 24948the iteration counter needs to be biased by the same amount as the 24949decrement operation, in this case -1. Note that the following similar 24950pattern will not be matched by the combiner. 24951 24952 (define_insn "decrement_and_branch_until_zero" 24953 [(set (pc) 24954 (if_then_else 24955 (ge (match_operand:SI 0 "general_operand" "+d*am") 24956 (const_int 1)) 24957 (label_ref (match_operand 1 "" "")) 24958 (pc))) 24959 (set (match_dup 0) 24960 (plus:SI (match_dup 0) 24961 (const_int -1)))] 24962 "find_reg_note (insn, REG_NONNEG, 0)" 24963 "...") 24964 24965 The other two special looping patterns, 'doloop_begin' and 24966'doloop_end', are emitted by the loop optimizer for certain well-behaved 24967loops with a finite number of loop iterations using information 24968collected during strength reduction. 24969 24970 The 'doloop_end' pattern describes the actual looping instruction (or 24971the implicit looping operation) and the 'doloop_begin' pattern is an 24972optional companion pattern that can be used for initialization needed 24973for some low-overhead looping instructions. 24974 24975 Note that some machines require the actual looping instruction to be 24976emitted at the top of the loop (e.g., the TMS320C3x/C4x DSPs). Emitting 24977the true RTL for a looping instruction at the top of the loop can cause 24978problems with flow analysis. So instead, a dummy 'doloop' insn is 24979emitted at the end of the loop. The machine dependent reorg pass checks 24980for the presence of this 'doloop' insn and then searches back to the top 24981of the loop, where it inserts the true looping insn (provided there are 24982no instructions in the loop which would cause problems). Any additional 24983labels can be emitted at this point. In addition, if the desired 24984special iteration counter register was not allocated, this machine 24985dependent reorg pass could emit a traditional compare and jump 24986instruction pair. 24987 24988 The essential difference between the 'decrement_and_branch_until_zero' 24989and the 'doloop_end' patterns is that the loop optimizer allocates an 24990additional pseudo register for the latter as an iteration counter. This 24991pseudo register cannot be used within the loop (i.e., general induction 24992variables cannot be derived from it), however, in many cases the loop 24993induction variable may become redundant and removed by the flow pass. 24994 24995 24996File: gccint.info, Node: Insn Canonicalizations, Next: Expander Definitions, Prev: Looping Patterns, Up: Machine Desc 24997 2499816.14 Canonicalization of Instructions 24999====================================== 25000 25001There are often cases where multiple RTL expressions could represent an 25002operation performed by a single machine instruction. This situation is 25003most commonly encountered with logical, branch, and multiply-accumulate 25004instructions. In such cases, the compiler attempts to convert these 25005multiple RTL expressions into a single canonical form to reduce the 25006number of insn patterns required. 25007 25008 In addition to algebraic simplifications, following canonicalizations 25009are performed: 25010 25011 * For commutative and comparison operators, a constant is always made 25012 the second operand. If a machine only supports a constant as the 25013 second operand, only patterns that match a constant in the second 25014 operand need be supplied. 25015 25016 * For associative operators, a sequence of operators will always 25017 chain to the left; for instance, only the left operand of an 25018 integer 'plus' can itself be a 'plus'. 'and', 'ior', 'xor', 25019 'plus', 'mult', 'smin', 'smax', 'umin', and 'umax' are associative 25020 when applied to integers, and sometimes to floating-point. 25021 25022 * For these operators, if only one operand is a 'neg', 'not', 'mult', 25023 'plus', or 'minus' expression, it will be the first operand. 25024 25025 * In combinations of 'neg', 'mult', 'plus', and 'minus', the 'neg' 25026 operations (if any) will be moved inside the operations as far as 25027 possible. For instance, '(neg (mult A B))' is canonicalized as 25028 '(mult (neg A) B)', but '(plus (mult (neg B) C) A)' is 25029 canonicalized as '(minus A (mult B C))'. 25030 25031 * For the 'compare' operator, a constant is always the second operand 25032 if the first argument is a condition code register or '(cc0)'. 25033 25034 * An operand of 'neg', 'not', 'mult', 'plus', or 'minus' is made the 25035 first operand under the same conditions as above. 25036 25037 * '(ltu (plus A B) B)' is converted to '(ltu (plus A B) A)'. 25038 Likewise with 'geu' instead of 'ltu'. 25039 25040 * '(minus X (const_int N))' is converted to '(plus X (const_int 25041 -N))'. 25042 25043 * Within address computations (i.e., inside 'mem'), a left shift is 25044 converted into the appropriate multiplication by a power of two. 25045 25046 * De Morgan's Law is used to move bitwise negation inside a bitwise 25047 logical-and or logical-or operation. If this results in only one 25048 operand being a 'not' expression, it will be the first one. 25049 25050 A machine that has an instruction that performs a bitwise 25051 logical-and of one operand with the bitwise negation of the other 25052 should specify the pattern for that instruction as 25053 25054 (define_insn "" 25055 [(set (match_operand:M 0 ...) 25056 (and:M (not:M (match_operand:M 1 ...)) 25057 (match_operand:M 2 ...)))] 25058 "..." 25059 "...") 25060 25061 Similarly, a pattern for a "NAND" instruction should be written 25062 25063 (define_insn "" 25064 [(set (match_operand:M 0 ...) 25065 (ior:M (not:M (match_operand:M 1 ...)) 25066 (not:M (match_operand:M 2 ...))))] 25067 "..." 25068 "...") 25069 25070 In both cases, it is not necessary to include patterns for the many 25071 logically equivalent RTL expressions. 25072 25073 * The only possible RTL expressions involving both bitwise 25074 exclusive-or and bitwise negation are '(xor:M X Y)' and '(not:M 25075 (xor:M X Y))'. 25076 25077 * The sum of three items, one of which is a constant, will only 25078 appear in the form 25079 25080 (plus:M (plus:M X Y) CONSTANT) 25081 25082 * Equality comparisons of a group of bits (usually a single bit) with 25083 zero will be written using 'zero_extract' rather than the 25084 equivalent 'and' or 'sign_extract' operations. 25085 25086 * '(sign_extend:M1 (mult:M2 (sign_extend:M2 X) (sign_extend:M2 Y)))' 25087 is converted to '(mult:M1 (sign_extend:M1 X) (sign_extend:M1 Y))', 25088 and likewise for 'zero_extend'. 25089 25090 * '(sign_extend:M1 (mult:M2 (ashiftrt:M2 X S) (sign_extend:M2 Y)))' 25091 is converted to '(mult:M1 (sign_extend:M1 (ashiftrt:M2 X S)) 25092 (sign_extend:M1 Y))', and likewise for patterns using 'zero_extend' 25093 and 'lshiftrt'. If the second operand of 'mult' is also a shift, 25094 then that is extended also. This transformation is only applied 25095 when it can be proven that the original operation had sufficient 25096 precision to prevent overflow. 25097 25098 Further canonicalization rules are defined in the function 25099'commutative_operand_precedence' in 'gcc/rtlanal.c'. 25100 25101 25102File: gccint.info, Node: Expander Definitions, Next: Insn Splitting, Prev: Insn Canonicalizations, Up: Machine Desc 25103 2510416.15 Defining RTL Sequences for Code Generation 25105================================================ 25106 25107On some target machines, some standard pattern names for RTL generation 25108cannot be handled with single insn, but a sequence of RTL insns can 25109represent them. For these target machines, you can write a 25110'define_expand' to specify how to generate the sequence of RTL. 25111 25112 A 'define_expand' is an RTL expression that looks almost like a 25113'define_insn'; but, unlike the latter, a 'define_expand' is used only 25114for RTL generation and it can produce more than one RTL insn. 25115 25116 A 'define_expand' RTX has four operands: 25117 25118 * The name. Each 'define_expand' must have a name, since the only 25119 use for it is to refer to it by name. 25120 25121 * The RTL template. This is a vector of RTL expressions representing 25122 a sequence of separate instructions. Unlike 'define_insn', there 25123 is no implicit surrounding 'PARALLEL'. 25124 25125 * The condition, a string containing a C expression. This expression 25126 is used to express how the availability of this pattern depends on 25127 subclasses of target machine, selected by command-line options when 25128 GCC is run. This is just like the condition of a 'define_insn' 25129 that has a standard name. Therefore, the condition (if present) 25130 may not depend on the data in the insn being matched, but only the 25131 target-machine-type flags. The compiler needs to test these 25132 conditions during initialization in order to learn exactly which 25133 named instructions are available in a particular run. 25134 25135 * The preparation statements, a string containing zero or more C 25136 statements which are to be executed before RTL code is generated 25137 from the RTL template. 25138 25139 Usually these statements prepare temporary registers for use as 25140 internal operands in the RTL template, but they can also generate 25141 RTL insns directly by calling routines such as 'emit_insn', etc. 25142 Any such insns precede the ones that come from the RTL template. 25143 25144 * Optionally, a vector containing the values of attributes. *Note 25145 Insn Attributes::. 25146 25147 Every RTL insn emitted by a 'define_expand' must match some 25148'define_insn' in the machine description. Otherwise, the compiler will 25149crash when trying to generate code for the insn or trying to optimize 25150it. 25151 25152 The RTL template, in addition to controlling generation of RTL insns, 25153also describes the operands that need to be specified when this pattern 25154is used. In particular, it gives a predicate for each operand. 25155 25156 A true operand, which needs to be specified in order to generate RTL 25157from the pattern, should be described with a 'match_operand' in its 25158first occurrence in the RTL template. This enters information on the 25159operand's predicate into the tables that record such things. GCC uses 25160the information to preload the operand into a register if that is 25161required for valid RTL code. If the operand is referred to more than 25162once, subsequent references should use 'match_dup'. 25163 25164 The RTL template may also refer to internal "operands" which are 25165temporary registers or labels used only within the sequence made by the 25166'define_expand'. Internal operands are substituted into the RTL 25167template with 'match_dup', never with 'match_operand'. The values of 25168the internal operands are not passed in as arguments by the compiler 25169when it requests use of this pattern. Instead, they are computed within 25170the pattern, in the preparation statements. These statements compute 25171the values and store them into the appropriate elements of 'operands' so 25172that 'match_dup' can find them. 25173 25174 There are two special macros defined for use in the preparation 25175statements: 'DONE' and 'FAIL'. Use them with a following semicolon, as 25176a statement. 25177 25178'DONE' 25179 Use the 'DONE' macro to end RTL generation for the pattern. The 25180 only RTL insns resulting from the pattern on this occasion will be 25181 those already emitted by explicit calls to 'emit_insn' within the 25182 preparation statements; the RTL template will not be generated. 25183 25184'FAIL' 25185 Make the pattern fail on this occasion. When a pattern fails, it 25186 means that the pattern was not truly available. The calling 25187 routines in the compiler will try other strategies for code 25188 generation using other patterns. 25189 25190 Failure is currently supported only for binary (addition, 25191 multiplication, shifting, etc.) and bit-field ('extv', 'extzv', 25192 and 'insv') operations. 25193 25194 If the preparation falls through (invokes neither 'DONE' nor 'FAIL'), 25195then the 'define_expand' acts like a 'define_insn' in that the RTL 25196template is used to generate the insn. 25197 25198 The RTL template is not used for matching, only for generating the 25199initial insn list. If the preparation statement always invokes 'DONE' 25200or 'FAIL', the RTL template may be reduced to a simple list of operands, 25201such as this example: 25202 25203 (define_expand "addsi3" 25204 [(match_operand:SI 0 "register_operand" "") 25205 (match_operand:SI 1 "register_operand" "") 25206 (match_operand:SI 2 "register_operand" "")] 25207 "" 25208 " 25209 { 25210 handle_add (operands[0], operands[1], operands[2]); 25211 DONE; 25212 }") 25213 25214 Here is an example, the definition of left-shift for the SPUR chip: 25215 25216 (define_expand "ashlsi3" 25217 [(set (match_operand:SI 0 "register_operand" "") 25218 (ashift:SI 25219 (match_operand:SI 1 "register_operand" "") 25220 (match_operand:SI 2 "nonmemory_operand" "")))] 25221 "" 25222 " 25223 25224 { 25225 if (GET_CODE (operands[2]) != CONST_INT 25226 || (unsigned) INTVAL (operands[2]) > 3) 25227 FAIL; 25228 }") 25229 25230This example uses 'define_expand' so that it can generate an RTL insn 25231for shifting when the shift-count is in the supported range of 0 to 3 25232but fail in other cases where machine insns aren't available. When it 25233fails, the compiler tries another strategy using different patterns 25234(such as, a library call). 25235 25236 If the compiler were able to handle nontrivial condition-strings in 25237patterns with names, then it would be possible to use a 'define_insn' in 25238that case. Here is another case (zero-extension on the 68000) which 25239makes more use of the power of 'define_expand': 25240 25241 (define_expand "zero_extendhisi2" 25242 [(set (match_operand:SI 0 "general_operand" "") 25243 (const_int 0)) 25244 (set (strict_low_part 25245 (subreg:HI 25246 (match_dup 0) 25247 0)) 25248 (match_operand:HI 1 "general_operand" ""))] 25249 "" 25250 "operands[1] = make_safe_from (operands[1], operands[0]);") 25251 25252Here two RTL insns are generated, one to clear the entire output operand 25253and the other to copy the input operand into its low half. This 25254sequence is incorrect if the input operand refers to [the old value of] 25255the output operand, so the preparation statement makes sure this isn't 25256so. The function 'make_safe_from' copies the 'operands[1]' into a 25257temporary register if it refers to 'operands[0]'. It does this by 25258emitting another RTL insn. 25259 25260 Finally, a third example shows the use of an internal operand. 25261Zero-extension on the SPUR chip is done by 'and'-ing the result against 25262a halfword mask. But this mask cannot be represented by a 'const_int' 25263because the constant value is too large to be legitimate on this 25264machine. So it must be copied into a register with 'force_reg' and then 25265the register used in the 'and'. 25266 25267 (define_expand "zero_extendhisi2" 25268 [(set (match_operand:SI 0 "register_operand" "") 25269 (and:SI (subreg:SI 25270 (match_operand:HI 1 "register_operand" "") 25271 0) 25272 (match_dup 2)))] 25273 "" 25274 "operands[2] 25275 = force_reg (SImode, GEN_INT (65535)); ") 25276 25277 _Note:_ If the 'define_expand' is used to serve a standard binary or 25278unary arithmetic operation or a bit-field operation, then the last insn 25279it generates must not be a 'code_label', 'barrier' or 'note'. It must 25280be an 'insn', 'jump_insn' or 'call_insn'. If you don't need a real insn 25281at the end, emit an insn to copy the result of the operation into 25282itself. Such an insn will generate no code, but it can avoid problems 25283in the compiler. 25284 25285 25286File: gccint.info, Node: Insn Splitting, Next: Including Patterns, Prev: Expander Definitions, Up: Machine Desc 25287 2528816.16 Defining How to Split Instructions 25289======================================== 25290 25291There are two cases where you should specify how to split a pattern into 25292multiple insns. On machines that have instructions requiring delay 25293slots (*note Delay Slots::) or that have instructions whose output is 25294not available for multiple cycles (*note Processor pipeline 25295description::), the compiler phases that optimize these cases need to be 25296able to move insns into one-instruction delay slots. However, some 25297insns may generate more than one machine instruction. These insns 25298cannot be placed into a delay slot. 25299 25300 Often you can rewrite the single insn as a list of individual insns, 25301each corresponding to one machine instruction. The disadvantage of 25302doing so is that it will cause the compilation to be slower and require 25303more space. If the resulting insns are too complex, it may also 25304suppress some optimizations. The compiler splits the insn if there is a 25305reason to believe that it might improve instruction or delay slot 25306scheduling. 25307 25308 The insn combiner phase also splits putative insns. If three insns are 25309merged into one insn with a complex expression that cannot be matched by 25310some 'define_insn' pattern, the combiner phase attempts to split the 25311complex pattern into two insns that are recognized. Usually it can 25312break the complex pattern into two patterns by splitting out some 25313subexpression. However, in some other cases, such as performing an 25314addition of a large constant in two insns on a RISC machine, the way to 25315split the addition into two insns is machine-dependent. 25316 25317 The 'define_split' definition tells the compiler how to split a complex 25318insn into several simpler insns. It looks like this: 25319 25320 (define_split 25321 [INSN-PATTERN] 25322 "CONDITION" 25323 [NEW-INSN-PATTERN-1 25324 NEW-INSN-PATTERN-2 25325 ...] 25326 "PREPARATION-STATEMENTS") 25327 25328 INSN-PATTERN is a pattern that needs to be split and CONDITION is the 25329final condition to be tested, as in a 'define_insn'. When an insn 25330matching INSN-PATTERN and satisfying CONDITION is found, it is replaced 25331in the insn list with the insns given by NEW-INSN-PATTERN-1, 25332NEW-INSN-PATTERN-2, etc. 25333 25334 The PREPARATION-STATEMENTS are similar to those statements that are 25335specified for 'define_expand' (*note Expander Definitions::) and are 25336executed before the new RTL is generated to prepare for the generated 25337code or emit some insns whose pattern is not fixed. Unlike those in 25338'define_expand', however, these statements must not generate any new 25339pseudo-registers. Once reload has completed, they also must not 25340allocate any space in the stack frame. 25341 25342 Patterns are matched against INSN-PATTERN in two different 25343circumstances. If an insn needs to be split for delay slot scheduling 25344or insn scheduling, the insn is already known to be valid, which means 25345that it must have been matched by some 'define_insn' and, if 25346'reload_completed' is nonzero, is known to satisfy the constraints of 25347that 'define_insn'. In that case, the new insn patterns must also be 25348insns that are matched by some 'define_insn' and, if 'reload_completed' 25349is nonzero, must also satisfy the constraints of those definitions. 25350 25351 As an example of this usage of 'define_split', consider the following 25352example from 'a29k.md', which splits a 'sign_extend' from 'HImode' to 25353'SImode' into a pair of shift insns: 25354 25355 (define_split 25356 [(set (match_operand:SI 0 "gen_reg_operand" "") 25357 (sign_extend:SI (match_operand:HI 1 "gen_reg_operand" "")))] 25358 "" 25359 [(set (match_dup 0) 25360 (ashift:SI (match_dup 1) 25361 (const_int 16))) 25362 (set (match_dup 0) 25363 (ashiftrt:SI (match_dup 0) 25364 (const_int 16)))] 25365 " 25366 { operands[1] = gen_lowpart (SImode, operands[1]); }") 25367 25368 When the combiner phase tries to split an insn pattern, it is always 25369the case that the pattern is _not_ matched by any 'define_insn'. The 25370combiner pass first tries to split a single 'set' expression and then 25371the same 'set' expression inside a 'parallel', but followed by a 25372'clobber' of a pseudo-reg to use as a scratch register. In these cases, 25373the combiner expects exactly two new insn patterns to be generated. It 25374will verify that these patterns match some 'define_insn' definitions, so 25375you need not do this test in the 'define_split' (of course, there is no 25376point in writing a 'define_split' that will never produce insns that 25377match). 25378 25379 Here is an example of this use of 'define_split', taken from 25380'rs6000.md': 25381 25382 (define_split 25383 [(set (match_operand:SI 0 "gen_reg_operand" "") 25384 (plus:SI (match_operand:SI 1 "gen_reg_operand" "") 25385 (match_operand:SI 2 "non_add_cint_operand" "")))] 25386 "" 25387 [(set (match_dup 0) (plus:SI (match_dup 1) (match_dup 3))) 25388 (set (match_dup 0) (plus:SI (match_dup 0) (match_dup 4)))] 25389 " 25390 { 25391 int low = INTVAL (operands[2]) & 0xffff; 25392 int high = (unsigned) INTVAL (operands[2]) >> 16; 25393 25394 if (low & 0x8000) 25395 high++, low |= 0xffff0000; 25396 25397 operands[3] = GEN_INT (high << 16); 25398 operands[4] = GEN_INT (low); 25399 }") 25400 25401 Here the predicate 'non_add_cint_operand' matches any 'const_int' that 25402is _not_ a valid operand of a single add insn. The add with the smaller 25403displacement is written so that it can be substituted into the address 25404of a subsequent operation. 25405 25406 An example that uses a scratch register, from the same file, generates 25407an equality comparison of a register and a large constant: 25408 25409 (define_split 25410 [(set (match_operand:CC 0 "cc_reg_operand" "") 25411 (compare:CC (match_operand:SI 1 "gen_reg_operand" "") 25412 (match_operand:SI 2 "non_short_cint_operand" ""))) 25413 (clobber (match_operand:SI 3 "gen_reg_operand" ""))] 25414 "find_single_use (operands[0], insn, 0) 25415 && (GET_CODE (*find_single_use (operands[0], insn, 0)) == EQ 25416 || GET_CODE (*find_single_use (operands[0], insn, 0)) == NE)" 25417 [(set (match_dup 3) (xor:SI (match_dup 1) (match_dup 4))) 25418 (set (match_dup 0) (compare:CC (match_dup 3) (match_dup 5)))] 25419 " 25420 { 25421 /* Get the constant we are comparing against, C, and see what it 25422 looks like sign-extended to 16 bits. Then see what constant 25423 could be XOR'ed with C to get the sign-extended value. */ 25424 25425 int c = INTVAL (operands[2]); 25426 int sextc = (c << 16) >> 16; 25427 int xorv = c ^ sextc; 25428 25429 operands[4] = GEN_INT (xorv); 25430 operands[5] = GEN_INT (sextc); 25431 }") 25432 25433 To avoid confusion, don't write a single 'define_split' that accepts 25434some insns that match some 'define_insn' as well as some insns that 25435don't. Instead, write two separate 'define_split' definitions, one for 25436the insns that are valid and one for the insns that are not valid. 25437 25438 The splitter is allowed to split jump instructions into sequence of 25439jumps or create new jumps in while splitting non-jump instructions. As 25440the central flowgraph and branch prediction information needs to be 25441updated, several restriction apply. 25442 25443 Splitting of jump instruction into sequence that over by another jump 25444instruction is always valid, as compiler expect identical behavior of 25445new jump. When new sequence contains multiple jump instructions or new 25446labels, more assistance is needed. Splitter is required to create only 25447unconditional jumps, or simple conditional jump instructions. 25448Additionally it must attach a 'REG_BR_PROB' note to each conditional 25449jump. A global variable 'split_branch_probability' holds the 25450probability of the original branch in case it was a simple conditional 25451jump, -1 otherwise. To simplify recomputing of edge frequencies, the 25452new sequence is required to have only forward jumps to the newly created 25453labels. 25454 25455 For the common case where the pattern of a define_split exactly matches 25456the pattern of a define_insn, use 'define_insn_and_split'. It looks 25457like this: 25458 25459 (define_insn_and_split 25460 [INSN-PATTERN] 25461 "CONDITION" 25462 "OUTPUT-TEMPLATE" 25463 "SPLIT-CONDITION" 25464 [NEW-INSN-PATTERN-1 25465 NEW-INSN-PATTERN-2 25466 ...] 25467 "PREPARATION-STATEMENTS" 25468 [INSN-ATTRIBUTES]) 25469 25470 25471 INSN-PATTERN, CONDITION, OUTPUT-TEMPLATE, and INSN-ATTRIBUTES are used 25472as in 'define_insn'. The NEW-INSN-PATTERN vector and the 25473PREPARATION-STATEMENTS are used as in a 'define_split'. The 25474SPLIT-CONDITION is also used as in 'define_split', with the additional 25475behavior that if the condition starts with '&&', the condition used for 25476the split will be the constructed as a logical "and" of the split 25477condition with the insn condition. For example, from i386.md: 25478 25479 (define_insn_and_split "zero_extendhisi2_and" 25480 [(set (match_operand:SI 0 "register_operand" "=r") 25481 (zero_extend:SI (match_operand:HI 1 "register_operand" "0"))) 25482 (clobber (reg:CC 17))] 25483 "TARGET_ZERO_EXTEND_WITH_AND && !optimize_size" 25484 "#" 25485 "&& reload_completed" 25486 [(parallel [(set (match_dup 0) 25487 (and:SI (match_dup 0) (const_int 65535))) 25488 (clobber (reg:CC 17))])] 25489 "" 25490 [(set_attr "type" "alu1")]) 25491 25492 25493 In this case, the actual split condition will be 25494'TARGET_ZERO_EXTEND_WITH_AND && !optimize_size && reload_completed'. 25495 25496 The 'define_insn_and_split' construction provides exactly the same 25497functionality as two separate 'define_insn' and 'define_split' patterns. 25498It exists for compactness, and as a maintenance tool to prevent having 25499to ensure the two patterns' templates match. 25500 25501 25502File: gccint.info, Node: Including Patterns, Next: Peephole Definitions, Prev: Insn Splitting, Up: Machine Desc 25503 2550416.17 Including Patterns in Machine Descriptions. 25505================================================= 25506 25507The 'include' pattern tells the compiler tools where to look for 25508patterns that are in files other than in the file '.md'. This is used 25509only at build time and there is no preprocessing allowed. 25510 25511 It looks like: 25512 25513 25514 (include 25515 PATHNAME) 25516 25517 For example: 25518 25519 25520 (include "filestuff") 25521 25522 25523 Where PATHNAME is a string that specifies the location of the file, 25524specifies the include file to be in 'gcc/config/target/filestuff'. The 25525directory 'gcc/config/target' is regarded as the default directory. 25526 25527 Machine descriptions may be split up into smaller more manageable 25528subsections and placed into subdirectories. 25529 25530 By specifying: 25531 25532 25533 (include "BOGUS/filestuff") 25534 25535 25536 the include file is specified to be in 25537'gcc/config/TARGET/BOGUS/filestuff'. 25538 25539 Specifying an absolute path for the include file such as; 25540 25541 (include "/u2/BOGUS/filestuff") 25542 25543 is permitted but is not encouraged. 25544 2554516.17.1 RTL Generation Tool Options for Directory Search 25546-------------------------------------------------------- 25547 25548The '-IDIR' option specifies directories to search for machine 25549descriptions. For example: 25550 25551 25552 genrecog -I/p1/abc/proc1 -I/p2/abcd/pro2 target.md 25553 25554 25555 Add the directory DIR to the head of the list of directories to be 25556searched for header files. This can be used to override a system 25557machine definition file, substituting your own version, since these 25558directories are searched before the default machine description file 25559directories. If you use more than one '-I' option, the directories are 25560scanned in left-to-right order; the standard default directory come 25561after. 25562 25563 25564File: gccint.info, Node: Peephole Definitions, Next: Insn Attributes, Prev: Including Patterns, Up: Machine Desc 25565 2556616.18 Machine-Specific Peephole Optimizers 25567========================================== 25568 25569In addition to instruction patterns the 'md' file may contain 25570definitions of machine-specific peephole optimizations. 25571 25572 The combiner does not notice certain peephole optimizations when the 25573data flow in the program does not suggest that it should try them. For 25574example, sometimes two consecutive insns related in purpose can be 25575combined even though the second one does not appear to use a register 25576computed in the first one. A machine-specific peephole optimizer can 25577detect such opportunities. 25578 25579 There are two forms of peephole definitions that may be used. The 25580original 'define_peephole' is run at assembly output time to match insns 25581and substitute assembly text. Use of 'define_peephole' is deprecated. 25582 25583 A newer 'define_peephole2' matches insns and substitutes new insns. 25584The 'peephole2' pass is run after register allocation but before 25585scheduling, which may result in much better code for targets that do 25586scheduling. 25587 25588* Menu: 25589 25590* define_peephole:: RTL to Text Peephole Optimizers 25591* define_peephole2:: RTL to RTL Peephole Optimizers 25592 25593 25594File: gccint.info, Node: define_peephole, Next: define_peephole2, Up: Peephole Definitions 25595 2559616.18.1 RTL to Text Peephole Optimizers 25597--------------------------------------- 25598 25599A definition looks like this: 25600 25601 (define_peephole 25602 [INSN-PATTERN-1 25603 INSN-PATTERN-2 25604 ...] 25605 "CONDITION" 25606 "TEMPLATE" 25607 "OPTIONAL-INSN-ATTRIBUTES") 25608 25609The last string operand may be omitted if you are not using any 25610machine-specific information in this machine description. If present, 25611it must obey the same rules as in a 'define_insn'. 25612 25613 In this skeleton, INSN-PATTERN-1 and so on are patterns to match 25614consecutive insns. The optimization applies to a sequence of insns when 25615INSN-PATTERN-1 matches the first one, INSN-PATTERN-2 matches the next, 25616and so on. 25617 25618 Each of the insns matched by a peephole must also match a 25619'define_insn'. Peepholes are checked only at the last stage just before 25620code generation, and only optionally. Therefore, any insn which would 25621match a peephole but no 'define_insn' will cause a crash in code 25622generation in an unoptimized compilation, or at various optimization 25623stages. 25624 25625 The operands of the insns are matched with 'match_operands', 25626'match_operator', and 'match_dup', as usual. What is not usual is that 25627the operand numbers apply to all the insn patterns in the definition. 25628So, you can check for identical operands in two insns by using 25629'match_operand' in one insn and 'match_dup' in the other. 25630 25631 The operand constraints used in 'match_operand' patterns do not have 25632any direct effect on the applicability of the peephole, but they will be 25633validated afterward, so make sure your constraints are general enough to 25634apply whenever the peephole matches. If the peephole matches but the 25635constraints are not satisfied, the compiler will crash. 25636 25637 It is safe to omit constraints in all the operands of the peephole; or 25638you can write constraints which serve as a double-check on the criteria 25639previously tested. 25640 25641 Once a sequence of insns matches the patterns, the CONDITION is 25642checked. This is a C expression which makes the final decision whether 25643to perform the optimization (we do so if the expression is nonzero). If 25644CONDITION is omitted (in other words, the string is empty) then the 25645optimization is applied to every sequence of insns that matches the 25646patterns. 25647 25648 The defined peephole optimizations are applied after register 25649allocation is complete. Therefore, the peephole definition can check 25650which operands have ended up in which kinds of registers, just by 25651looking at the operands. 25652 25653 The way to refer to the operands in CONDITION is to write 'operands[I]' 25654for operand number I (as matched by '(match_operand I ...)'). Use the 25655variable 'insn' to refer to the last of the insns being matched; use 25656'prev_active_insn' to find the preceding insns. 25657 25658 When optimizing computations with intermediate results, you can use 25659CONDITION to match only when the intermediate results are not used 25660elsewhere. Use the C expression 'dead_or_set_p (INSN, OP)', where INSN 25661is the insn in which you expect the value to be used for the last time 25662(from the value of 'insn', together with use of 'prev_nonnote_insn'), 25663and OP is the intermediate value (from 'operands[I]'). 25664 25665 Applying the optimization means replacing the sequence of insns with 25666one new insn. The TEMPLATE controls ultimate output of assembler code 25667for this combined insn. It works exactly like the template of a 25668'define_insn'. Operand numbers in this template are the same ones used 25669in matching the original sequence of insns. 25670 25671 The result of a defined peephole optimizer does not need to match any 25672of the insn patterns in the machine description; it does not even have 25673an opportunity to match them. The peephole optimizer definition itself 25674serves as the insn pattern to control how the insn is output. 25675 25676 Defined peephole optimizers are run as assembler code is being output, 25677so the insns they produce are never combined or rearranged in any way. 25678 25679 Here is an example, taken from the 68000 machine description: 25680 25681 (define_peephole 25682 [(set (reg:SI 15) (plus:SI (reg:SI 15) (const_int 4))) 25683 (set (match_operand:DF 0 "register_operand" "=f") 25684 (match_operand:DF 1 "register_operand" "ad"))] 25685 "FP_REG_P (operands[0]) && ! FP_REG_P (operands[1])" 25686 { 25687 rtx xoperands[2]; 25688 xoperands[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1); 25689 #ifdef MOTOROLA 25690 output_asm_insn ("move.l %1,(sp)", xoperands); 25691 output_asm_insn ("move.l %1,-(sp)", operands); 25692 return "fmove.d (sp)+,%0"; 25693 #else 25694 output_asm_insn ("movel %1,sp@", xoperands); 25695 output_asm_insn ("movel %1,sp@-", operands); 25696 return "fmoved sp@+,%0"; 25697 #endif 25698 }) 25699 25700 The effect of this optimization is to change 25701 25702 jbsr _foobar 25703 addql #4,sp 25704 movel d1,sp@- 25705 movel d0,sp@- 25706 fmoved sp@+,fp0 25707 25708into 25709 25710 jbsr _foobar 25711 movel d1,sp@ 25712 movel d0,sp@- 25713 fmoved sp@+,fp0 25714 25715 INSN-PATTERN-1 and so on look _almost_ like the second operand of 25716'define_insn'. There is one important difference: the second operand of 25717'define_insn' consists of one or more RTX's enclosed in square brackets. 25718Usually, there is only one: then the same action can be written as an 25719element of a 'define_peephole'. But when there are multiple actions in 25720a 'define_insn', they are implicitly enclosed in a 'parallel'. Then you 25721must explicitly write the 'parallel', and the square brackets within it, 25722in the 'define_peephole'. Thus, if an insn pattern looks like this, 25723 25724 (define_insn "divmodsi4" 25725 [(set (match_operand:SI 0 "general_operand" "=d") 25726 (div:SI (match_operand:SI 1 "general_operand" "0") 25727 (match_operand:SI 2 "general_operand" "dmsK"))) 25728 (set (match_operand:SI 3 "general_operand" "=d") 25729 (mod:SI (match_dup 1) (match_dup 2)))] 25730 "TARGET_68020" 25731 "divsl%.l %2,%3:%0") 25732 25733then the way to mention this insn in a peephole is as follows: 25734 25735 (define_peephole 25736 [... 25737 (parallel 25738 [(set (match_operand:SI 0 "general_operand" "=d") 25739 (div:SI (match_operand:SI 1 "general_operand" "0") 25740 (match_operand:SI 2 "general_operand" "dmsK"))) 25741 (set (match_operand:SI 3 "general_operand" "=d") 25742 (mod:SI (match_dup 1) (match_dup 2)))]) 25743 ...] 25744 ...) 25745 25746 25747File: gccint.info, Node: define_peephole2, Prev: define_peephole, Up: Peephole Definitions 25748 2574916.18.2 RTL to RTL Peephole Optimizers 25750-------------------------------------- 25751 25752The 'define_peephole2' definition tells the compiler how to substitute 25753one sequence of instructions for another sequence, what additional 25754scratch registers may be needed and what their lifetimes must be. 25755 25756 (define_peephole2 25757 [INSN-PATTERN-1 25758 INSN-PATTERN-2 25759 ...] 25760 "CONDITION" 25761 [NEW-INSN-PATTERN-1 25762 NEW-INSN-PATTERN-2 25763 ...] 25764 "PREPARATION-STATEMENTS") 25765 25766 The definition is almost identical to 'define_split' (*note Insn 25767Splitting::) except that the pattern to match is not a single 25768instruction, but a sequence of instructions. 25769 25770 It is possible to request additional scratch registers for use in the 25771output template. If appropriate registers are not free, the pattern 25772will simply not match. 25773 25774 Scratch registers are requested with a 'match_scratch' pattern at the 25775top level of the input pattern. The allocated register (initially) will 25776be dead at the point requested within the original sequence. If the 25777scratch is used at more than a single point, a 'match_dup' pattern at 25778the top level of the input pattern marks the last position in the input 25779sequence at which the register must be available. 25780 25781 Here is an example from the IA-32 machine description: 25782 25783 (define_peephole2 25784 [(match_scratch:SI 2 "r") 25785 (parallel [(set (match_operand:SI 0 "register_operand" "") 25786 (match_operator:SI 3 "arith_or_logical_operator" 25787 [(match_dup 0) 25788 (match_operand:SI 1 "memory_operand" "")])) 25789 (clobber (reg:CC 17))])] 25790 "! optimize_size && ! TARGET_READ_MODIFY" 25791 [(set (match_dup 2) (match_dup 1)) 25792 (parallel [(set (match_dup 0) 25793 (match_op_dup 3 [(match_dup 0) (match_dup 2)])) 25794 (clobber (reg:CC 17))])] 25795 "") 25796 25797This pattern tries to split a load from its use in the hopes that we'll 25798be able to schedule around the memory load latency. It allocates a 25799single 'SImode' register of class 'GENERAL_REGS' ('"r"') that needs to 25800be live only at the point just before the arithmetic. 25801 25802 A real example requiring extended scratch lifetimes is harder to come 25803by, so here's a silly made-up example: 25804 25805 (define_peephole2 25806 [(match_scratch:SI 4 "r") 25807 (set (match_operand:SI 0 "" "") (match_operand:SI 1 "" "")) 25808 (set (match_operand:SI 2 "" "") (match_dup 1)) 25809 (match_dup 4) 25810 (set (match_operand:SI 3 "" "") (match_dup 1))] 25811 "/* determine 1 does not overlap 0 and 2 */" 25812 [(set (match_dup 4) (match_dup 1)) 25813 (set (match_dup 0) (match_dup 4)) 25814 (set (match_dup 2) (match_dup 4)) 25815 (set (match_dup 3) (match_dup 4))] 25816 "") 25817 25818If we had not added the '(match_dup 4)' in the middle of the input 25819sequence, it might have been the case that the register we chose at the 25820beginning of the sequence is killed by the first or second 'set'. 25821 25822 25823File: gccint.info, Node: Insn Attributes, Next: Conditional Execution, Prev: Peephole Definitions, Up: Machine Desc 25824 2582516.19 Instruction Attributes 25826============================ 25827 25828In addition to describing the instruction supported by the target 25829machine, the 'md' file also defines a group of "attributes" and a set of 25830values for each. Every generated insn is assigned a value for each 25831attribute. One possible attribute would be the effect that the insn has 25832on the machine's condition code. This attribute can then be used by 25833'NOTICE_UPDATE_CC' to track the condition codes. 25834 25835* Menu: 25836 25837* Defining Attributes:: Specifying attributes and their values. 25838* Expressions:: Valid expressions for attribute values. 25839* Tagging Insns:: Assigning attribute values to insns. 25840* Attr Example:: An example of assigning attributes. 25841* Insn Lengths:: Computing the length of insns. 25842* Constant Attributes:: Defining attributes that are constant. 25843* Mnemonic Attribute:: Obtain the instruction mnemonic as attribute value. 25844* Delay Slots:: Defining delay slots required for a machine. 25845* Processor pipeline description:: Specifying information for insn scheduling. 25846 25847 25848File: gccint.info, Node: Defining Attributes, Next: Expressions, Up: Insn Attributes 25849 2585016.19.1 Defining Attributes and their Values 25851-------------------------------------------- 25852 25853The 'define_attr' expression is used to define each attribute required 25854by the target machine. It looks like: 25855 25856 (define_attr NAME LIST-OF-VALUES DEFAULT) 25857 25858 NAME is a string specifying the name of the attribute being defined. 25859Some attributes are used in a special way by the rest of the compiler. 25860The 'enabled' attribute can be used to conditionally enable or disable 25861insn alternatives (*note Disable Insn Alternatives::). The 'predicable' 25862attribute, together with a suitable 'define_cond_exec' (*note 25863Conditional Execution::), can be used to automatically generate 25864conditional variants of instruction patterns. The 'mnemonic' attribute 25865can be used to check for the instruction mnemonic (*note Mnemonic 25866Attribute::). The compiler internally uses the names 'ce_enabled' and 25867'nonce_enabled', so they should not be used elsewhere as alternative 25868names. 25869 25870 LIST-OF-VALUES is either a string that specifies a comma-separated list 25871of values that can be assigned to the attribute, or a null string to 25872indicate that the attribute takes numeric values. 25873 25874 DEFAULT is an attribute expression that gives the value of this 25875attribute for insns that match patterns whose definition does not 25876include an explicit value for this attribute. *Note Attr Example::, for 25877more information on the handling of defaults. *Note Constant 25878Attributes::, for information on attributes that do not depend on any 25879particular insn. 25880 25881 For each defined attribute, a number of definitions are written to the 25882'insn-attr.h' file. For cases where an explicit set of values is 25883specified for an attribute, the following are defined: 25884 25885 * A '#define' is written for the symbol 'HAVE_ATTR_NAME'. 25886 25887 * An enumerated class is defined for 'attr_NAME' with elements of the 25888 form 'UPPER-NAME_UPPER-VALUE' where the attribute name and value 25889 are first converted to uppercase. 25890 25891 * A function 'get_attr_NAME' is defined that is passed an insn and 25892 returns the attribute value for that insn. 25893 25894 For example, if the following is present in the 'md' file: 25895 25896 (define_attr "type" "branch,fp,load,store,arith" ...) 25897 25898the following lines will be written to the file 'insn-attr.h'. 25899 25900 #define HAVE_ATTR_type 1 25901 enum attr_type {TYPE_BRANCH, TYPE_FP, TYPE_LOAD, 25902 TYPE_STORE, TYPE_ARITH}; 25903 extern enum attr_type get_attr_type (); 25904 25905 If the attribute takes numeric values, no 'enum' type will be defined 25906and the function to obtain the attribute's value will return 'int'. 25907 25908 There are attributes which are tied to a specific meaning. These 25909attributes are not free to use for other purposes: 25910 25911'length' 25912 The 'length' attribute is used to calculate the length of emitted 25913 code chunks. This is especially important when verifying branch 25914 distances. *Note Insn Lengths::. 25915 25916'enabled' 25917 The 'enabled' attribute can be defined to prevent certain 25918 alternatives of an insn definition from being used during code 25919 generation. *Note Disable Insn Alternatives::. 25920 25921'mnemonic' 25922 The 'mnemonic' attribute can be defined to implement instruction 25923 specific checks in e.g. the pipeline description. *Note Mnemonic 25924 Attribute::. 25925 25926 For each of these special attributes, the corresponding 25927'HAVE_ATTR_NAME' '#define' is also written when the attribute is not 25928defined; in that case, it is defined as '0'. 25929 25930 Another way of defining an attribute is to use: 25931 25932 (define_enum_attr "ATTR" "ENUM" DEFAULT) 25933 25934 This works in just the same way as 'define_attr', except that the list 25935of values is taken from a separate enumeration called ENUM (*note 25936define_enum::). This form allows you to use the same list of values for 25937several attributes without having to repeat the list each time. For 25938example: 25939 25940 (define_enum "processor" [ 25941 model_a 25942 model_b 25943 ... 25944 ]) 25945 (define_enum_attr "arch" "processor" 25946 (const (symbol_ref "target_arch"))) 25947 (define_enum_attr "tune" "processor" 25948 (const (symbol_ref "target_tune"))) 25949 25950 defines the same attributes as: 25951 25952 (define_attr "arch" "model_a,model_b,..." 25953 (const (symbol_ref "target_arch"))) 25954 (define_attr "tune" "model_a,model_b,..." 25955 (const (symbol_ref "target_tune"))) 25956 25957 but without duplicating the processor list. The second example defines 25958two separate C enums ('attr_arch' and 'attr_tune') whereas the first 25959defines a single C enum ('processor'). 25960 25961 25962File: gccint.info, Node: Expressions, Next: Tagging Insns, Prev: Defining Attributes, Up: Insn Attributes 25963 2596416.19.2 Attribute Expressions 25965----------------------------- 25966 25967RTL expressions used to define attributes use the codes described above 25968plus a few specific to attribute definitions, to be discussed below. 25969Attribute value expressions must have one of the following forms: 25970 25971'(const_int I)' 25972 The integer I specifies the value of a numeric attribute. I must 25973 be non-negative. 25974 25975 The value of a numeric attribute can be specified either with a 25976 'const_int', or as an integer represented as a string in 25977 'const_string', 'eq_attr' (see below), 'attr', 'symbol_ref', simple 25978 arithmetic expressions, and 'set_attr' overrides on specific 25979 instructions (*note Tagging Insns::). 25980 25981'(const_string VALUE)' 25982 The string VALUE specifies a constant attribute value. If VALUE is 25983 specified as '"*"', it means that the default value of the 25984 attribute is to be used for the insn containing this expression. 25985 '"*"' obviously cannot be used in the DEFAULT expression of a 25986 'define_attr'. 25987 25988 If the attribute whose value is being specified is numeric, VALUE 25989 must be a string containing a non-negative integer (normally 25990 'const_int' would be used in this case). Otherwise, it must 25991 contain one of the valid values for the attribute. 25992 25993'(if_then_else TEST TRUE-VALUE FALSE-VALUE)' 25994 TEST specifies an attribute test, whose format is defined below. 25995 The value of this expression is TRUE-VALUE if TEST is true, 25996 otherwise it is FALSE-VALUE. 25997 25998'(cond [TEST1 VALUE1 ...] DEFAULT)' 25999 The first operand of this expression is a vector containing an even 26000 number of expressions and consisting of pairs of TEST and VALUE 26001 expressions. The value of the 'cond' expression is that of the 26002 VALUE corresponding to the first true TEST expression. If none of 26003 the TEST expressions are true, the value of the 'cond' expression 26004 is that of the DEFAULT expression. 26005 26006 TEST expressions can have one of the following forms: 26007 26008'(const_int I)' 26009 This test is true if I is nonzero and false otherwise. 26010 26011'(not TEST)' 26012'(ior TEST1 TEST2)' 26013'(and TEST1 TEST2)' 26014 These tests are true if the indicated logical function is true. 26015 26016'(match_operand:M N PRED CONSTRAINTS)' 26017 This test is true if operand N of the insn whose attribute value is 26018 being determined has mode M (this part of the test is ignored if M 26019 is 'VOIDmode') and the function specified by the string PRED 26020 returns a nonzero value when passed operand N and mode M (this part 26021 of the test is ignored if PRED is the null string). 26022 26023 The CONSTRAINTS operand is ignored and should be the null string. 26024 26025'(match_test C-EXPR)' 26026 The test is true if C expression C-EXPR is true. In non-constant 26027 attributes, C-EXPR has access to the following variables: 26028 26029 INSN 26030 The rtl instruction under test. 26031 WHICH_ALTERNATIVE 26032 The 'define_insn' alternative that INSN matches. *Note Output 26033 Statement::. 26034 OPERANDS 26035 An array of INSN's rtl operands. 26036 26037 C-EXPR behaves like the condition in a C 'if' statement, so there 26038 is no need to explicitly convert the expression into a boolean 0 or 26039 1 value. For example, the following two tests are equivalent: 26040 26041 (match_test "x & 2") 26042 (match_test "(x & 2) != 0") 26043 26044'(le ARITH1 ARITH2)' 26045'(leu ARITH1 ARITH2)' 26046'(lt ARITH1 ARITH2)' 26047'(ltu ARITH1 ARITH2)' 26048'(gt ARITH1 ARITH2)' 26049'(gtu ARITH1 ARITH2)' 26050'(ge ARITH1 ARITH2)' 26051'(geu ARITH1 ARITH2)' 26052'(ne ARITH1 ARITH2)' 26053'(eq ARITH1 ARITH2)' 26054 These tests are true if the indicated comparison of the two 26055 arithmetic expressions is true. Arithmetic expressions are formed 26056 with 'plus', 'minus', 'mult', 'div', 'mod', 'abs', 'neg', 'and', 26057 'ior', 'xor', 'not', 'ashift', 'lshiftrt', and 'ashiftrt' 26058 expressions. 26059 26060 'const_int' and 'symbol_ref' are always valid terms (*note Insn 26061 Lengths::,for additional forms). 'symbol_ref' is a string denoting 26062 a C expression that yields an 'int' when evaluated by the 26063 'get_attr_...' routine. It should normally be a global variable. 26064 26065'(eq_attr NAME VALUE)' 26066 NAME is a string specifying the name of an attribute. 26067 26068 VALUE is a string that is either a valid value for attribute NAME, 26069 a comma-separated list of values, or '!' followed by a value or 26070 list. If VALUE does not begin with a '!', this test is true if the 26071 value of the NAME attribute of the current insn is in the list 26072 specified by VALUE. If VALUE begins with a '!', this test is true 26073 if the attribute's value is _not_ in the specified list. 26074 26075 For example, 26076 26077 (eq_attr "type" "load,store") 26078 26079 is equivalent to 26080 26081 (ior (eq_attr "type" "load") (eq_attr "type" "store")) 26082 26083 If NAME specifies an attribute of 'alternative', it refers to the 26084 value of the compiler variable 'which_alternative' (*note Output 26085 Statement::) and the values must be small integers. For example, 26086 26087 (eq_attr "alternative" "2,3") 26088 26089 is equivalent to 26090 26091 (ior (eq (symbol_ref "which_alternative") (const_int 2)) 26092 (eq (symbol_ref "which_alternative") (const_int 3))) 26093 26094 Note that, for most attributes, an 'eq_attr' test is simplified in 26095 cases where the value of the attribute being tested is known for 26096 all insns matching a particular pattern. This is by far the most 26097 common case. 26098 26099'(attr_flag NAME)' 26100 The value of an 'attr_flag' expression is true if the flag 26101 specified by NAME is true for the 'insn' currently being scheduled. 26102 26103 NAME is a string specifying one of a fixed set of flags to test. 26104 Test the flags 'forward' and 'backward' to determine the direction 26105 of a conditional branch. 26106 26107 This example describes a conditional branch delay slot which can be 26108 nullified for forward branches that are taken (annul-true) or for 26109 backward branches which are not taken (annul-false). 26110 26111 (define_delay (eq_attr "type" "cbranch") 26112 [(eq_attr "in_branch_delay" "true") 26113 (and (eq_attr "in_branch_delay" "true") 26114 (attr_flag "forward")) 26115 (and (eq_attr "in_branch_delay" "true") 26116 (attr_flag "backward"))]) 26117 26118 The 'forward' and 'backward' flags are false if the current 'insn' 26119 being scheduled is not a conditional branch. 26120 26121 'attr_flag' is only used during delay slot scheduling and has no 26122 meaning to other passes of the compiler. 26123 26124'(attr NAME)' 26125 The value of another attribute is returned. This is most useful 26126 for numeric attributes, as 'eq_attr' and 'attr_flag' produce more 26127 efficient code for non-numeric attributes. 26128 26129 26130File: gccint.info, Node: Tagging Insns, Next: Attr Example, Prev: Expressions, Up: Insn Attributes 26131 2613216.19.3 Assigning Attribute Values to Insns 26133------------------------------------------- 26134 26135The value assigned to an attribute of an insn is primarily determined by 26136which pattern is matched by that insn (or which 'define_peephole' 26137generated it). Every 'define_insn' and 'define_peephole' can have an 26138optional last argument to specify the values of attributes for matching 26139insns. The value of any attribute not specified in a particular insn is 26140set to the default value for that attribute, as specified in its 26141'define_attr'. Extensive use of default values for attributes permits 26142the specification of the values for only one or two attributes in the 26143definition of most insn patterns, as seen in the example in the next 26144section. 26145 26146 The optional last argument of 'define_insn' and 'define_peephole' is a 26147vector of expressions, each of which defines the value for a single 26148attribute. The most general way of assigning an attribute's value is to 26149use a 'set' expression whose first operand is an 'attr' expression 26150giving the name of the attribute being set. The second operand of the 26151'set' is an attribute expression (*note Expressions::) giving the value 26152of the attribute. 26153 26154 When the attribute value depends on the 'alternative' attribute (i.e., 26155which is the applicable alternative in the constraint of the insn), the 26156'set_attr_alternative' expression can be used. It allows the 26157specification of a vector of attribute expressions, one for each 26158alternative. 26159 26160 When the generality of arbitrary attribute expressions is not required, 26161the simpler 'set_attr' expression can be used, which allows specifying a 26162string giving either a single attribute value or a list of attribute 26163values, one for each alternative. 26164 26165 The form of each of the above specifications is shown below. In each 26166case, NAME is a string specifying the attribute to be set. 26167 26168'(set_attr NAME VALUE-STRING)' 26169 VALUE-STRING is either a string giving the desired attribute value, 26170 or a string containing a comma-separated list giving the values for 26171 succeeding alternatives. The number of elements must match the 26172 number of alternatives in the constraint of the insn pattern. 26173 26174 Note that it may be useful to specify '*' for some alternative, in 26175 which case the attribute will assume its default value for insns 26176 matching that alternative. 26177 26178'(set_attr_alternative NAME [VALUE1 VALUE2 ...])' 26179 Depending on the alternative of the insn, the value will be one of 26180 the specified values. This is a shorthand for using a 'cond' with 26181 tests on the 'alternative' attribute. 26182 26183'(set (attr NAME) VALUE)' 26184 The first operand of this 'set' must be the special RTL expression 26185 'attr', whose sole operand is a string giving the name of the 26186 attribute being set. VALUE is the value of the attribute. 26187 26188 The following shows three different ways of representing the same 26189attribute value specification: 26190 26191 (set_attr "type" "load,store,arith") 26192 26193 (set_attr_alternative "type" 26194 [(const_string "load") (const_string "store") 26195 (const_string "arith")]) 26196 26197 (set (attr "type") 26198 (cond [(eq_attr "alternative" "1") (const_string "load") 26199 (eq_attr "alternative" "2") (const_string "store")] 26200 (const_string "arith"))) 26201 26202 The 'define_asm_attributes' expression provides a mechanism to specify 26203the attributes assigned to insns produced from an 'asm' statement. It 26204has the form: 26205 26206 (define_asm_attributes [ATTR-SETS]) 26207 26208where ATTR-SETS is specified the same as for both the 'define_insn' and 26209the 'define_peephole' expressions. 26210 26211 These values will typically be the "worst case" attribute values. For 26212example, they might indicate that the condition code will be clobbered. 26213 26214 A specification for a 'length' attribute is handled specially. The way 26215to compute the length of an 'asm' insn is to multiply the length 26216specified in the expression 'define_asm_attributes' by the number of 26217machine instructions specified in the 'asm' statement, determined by 26218counting the number of semicolons and newlines in the string. 26219Therefore, the value of the 'length' attribute specified in a 26220'define_asm_attributes' should be the maximum possible length of a 26221single machine instruction. 26222 26223 26224File: gccint.info, Node: Attr Example, Next: Insn Lengths, Prev: Tagging Insns, Up: Insn Attributes 26225 2622616.19.4 Example of Attribute Specifications 26227------------------------------------------- 26228 26229The judicious use of defaulting is important in the efficient use of 26230insn attributes. Typically, insns are divided into "types" and an 26231attribute, customarily called 'type', is used to represent this value. 26232This attribute is normally used only to define the default value for 26233other attributes. An example will clarify this usage. 26234 26235 Assume we have a RISC machine with a condition code and in which only 26236full-word operations are performed in registers. Let us assume that we 26237can divide all insns into loads, stores, (integer) arithmetic 26238operations, floating point operations, and branches. 26239 26240 Here we will concern ourselves with determining the effect of an insn 26241on the condition code and will limit ourselves to the following possible 26242effects: The condition code can be set unpredictably (clobbered), not be 26243changed, be set to agree with the results of the operation, or only 26244changed if the item previously set into the condition code has been 26245modified. 26246 26247 Here is part of a sample 'md' file for such a machine: 26248 26249 (define_attr "type" "load,store,arith,fp,branch" (const_string "arith")) 26250 26251 (define_attr "cc" "clobber,unchanged,set,change0" 26252 (cond [(eq_attr "type" "load") 26253 (const_string "change0") 26254 (eq_attr "type" "store,branch") 26255 (const_string "unchanged") 26256 (eq_attr "type" "arith") 26257 (if_then_else (match_operand:SI 0 "" "") 26258 (const_string "set") 26259 (const_string "clobber"))] 26260 (const_string "clobber"))) 26261 26262 (define_insn "" 26263 [(set (match_operand:SI 0 "general_operand" "=r,r,m") 26264 (match_operand:SI 1 "general_operand" "r,m,r"))] 26265 "" 26266 "@ 26267 move %0,%1 26268 load %0,%1 26269 store %0,%1" 26270 [(set_attr "type" "arith,load,store")]) 26271 26272 Note that we assume in the above example that arithmetic operations 26273performed on quantities smaller than a machine word clobber the 26274condition code since they will set the condition code to a value 26275corresponding to the full-word result. 26276 26277 26278File: gccint.info, Node: Insn Lengths, Next: Constant Attributes, Prev: Attr Example, Up: Insn Attributes 26279 2628016.19.5 Computing the Length of an Insn 26281--------------------------------------- 26282 26283For many machines, multiple types of branch instructions are provided, 26284each for different length branch displacements. In most cases, the 26285assembler will choose the correct instruction to use. However, when the 26286assembler cannot do so, GCC can when a special attribute, the 'length' 26287attribute, is defined. This attribute must be defined to have numeric 26288values by specifying a null string in its 'define_attr'. 26289 26290 In the case of the 'length' attribute, two additional forms of 26291arithmetic terms are allowed in test expressions: 26292 26293'(match_dup N)' 26294 This refers to the address of operand N of the current insn, which 26295 must be a 'label_ref'. 26296 26297'(pc)' 26298 For non-branch instructions and backward branch instructions, this 26299 refers to the address of the current insn. But for forward branch 26300 instructions, this refers to the address of the next insn, because 26301 the length of the current insn is to be computed. 26302 26303 For normal insns, the length will be determined by value of the 26304'length' attribute. In the case of 'addr_vec' and 'addr_diff_vec' insn 26305patterns, the length is computed as the number of vectors multiplied by 26306the size of each vector. 26307 26308 Lengths are measured in addressable storage units (bytes). 26309 26310 Note that it is possible to call functions via the 'symbol_ref' 26311mechanism to compute the length of an insn. However, if you use this 26312mechanism you must provide dummy clauses to express the maximum length 26313without using the function call. You can an example of this in the 'pa' 26314machine description for the 'call_symref' pattern. 26315 26316 The following macros can be used to refine the length computation: 26317 26318'ADJUST_INSN_LENGTH (INSN, LENGTH)' 26319 If defined, modifies the length assigned to instruction INSN as a 26320 function of the context in which it is used. LENGTH is an lvalue 26321 that contains the initially computed length of the insn and should 26322 be updated with the correct length of the insn. 26323 26324 This macro will normally not be required. A case in which it is 26325 required is the ROMP. On this machine, the size of an 'addr_vec' 26326 insn must be increased by two to compensate for the fact that 26327 alignment may be required. 26328 26329 The routine that returns 'get_attr_length' (the value of the 'length' 26330attribute) can be used by the output routine to determine the form of 26331the branch instruction to be written, as the example below illustrates. 26332 26333 As an example of the specification of variable-length branches, 26334consider the IBM 360. If we adopt the convention that a register will 26335be set to the starting address of a function, we can jump to labels 26336within 4k of the start using a four-byte instruction. Otherwise, we 26337need a six-byte sequence to load the address from memory and then branch 26338to it. 26339 26340 On such a machine, a pattern for a branch instruction might be 26341specified as follows: 26342 26343 (define_insn "jump" 26344 [(set (pc) 26345 (label_ref (match_operand 0 "" "")))] 26346 "" 26347 { 26348 return (get_attr_length (insn) == 4 26349 ? "b %l0" : "l r15,=a(%l0); br r15"); 26350 } 26351 [(set (attr "length") 26352 (if_then_else (lt (match_dup 0) (const_int 4096)) 26353 (const_int 4) 26354 (const_int 6)))]) 26355 26356 26357File: gccint.info, Node: Constant Attributes, Next: Mnemonic Attribute, Prev: Insn Lengths, Up: Insn Attributes 26358 2635916.19.6 Constant Attributes 26360--------------------------- 26361 26362A special form of 'define_attr', where the expression for the default 26363value is a 'const' expression, indicates an attribute that is constant 26364for a given run of the compiler. Constant attributes may be used to 26365specify which variety of processor is used. For example, 26366 26367 (define_attr "cpu" "m88100,m88110,m88000" 26368 (const 26369 (cond [(symbol_ref "TARGET_88100") (const_string "m88100") 26370 (symbol_ref "TARGET_88110") (const_string "m88110")] 26371 (const_string "m88000")))) 26372 26373 (define_attr "memory" "fast,slow" 26374 (const 26375 (if_then_else (symbol_ref "TARGET_FAST_MEM") 26376 (const_string "fast") 26377 (const_string "slow")))) 26378 26379 The routine generated for constant attributes has no parameters as it 26380does not depend on any particular insn. RTL expressions used to define 26381the value of a constant attribute may use the 'symbol_ref' form, but may 26382not use either the 'match_operand' form or 'eq_attr' forms involving 26383insn attributes. 26384 26385 26386File: gccint.info, Node: Mnemonic Attribute, Next: Delay Slots, Prev: Constant Attributes, Up: Insn Attributes 26387 2638816.19.7 Mnemonic Attribute 26389-------------------------- 26390 26391The 'mnemonic' attribute is a string type attribute holding the 26392instruction mnemonic for an insn alternative. The attribute values will 26393automatically be generated by the machine description parser if there is 26394an attribute definition in the md file: 26395 26396 (define_attr "mnemonic" "unknown" (const_string "unknown")) 26397 26398 The default value can be freely chosen as long as it does not collide 26399with any of the instruction mnemonics. This value will be used whenever 26400the machine description parser is not able to determine the mnemonic 26401string. This might be the case for output templates containing more 26402than a single instruction as in '"mvcle\t%0,%1,0\;jo\t.-4"'. 26403 26404 The 'mnemonic' attribute set is not generated automatically if the 26405instruction string is generated via C code. 26406 26407 An existing 'mnemonic' attribute set in an insn definition will not be 26408overriden by the md file parser. That way it is possible to manually 26409set the instruction mnemonics for the cases where the md file parser 26410fails to determine it automatically. 26411 26412 The 'mnemonic' attribute is useful for dealing with instruction 26413specific properties in the pipeline description without defining 26414additional insn attributes. 26415 26416 (define_attr "ooo_expanded" "" 26417 (cond [(eq_attr "mnemonic" "dlr,dsgr,d,dsgf,stam,dsgfr,dlgr") 26418 (const_int 1)] 26419 (const_int 0))) 26420 26421 26422File: gccint.info, Node: Delay Slots, Next: Processor pipeline description, Prev: Mnemonic Attribute, Up: Insn Attributes 26423 2642416.19.8 Delay Slot Scheduling 26425----------------------------- 26426 26427The insn attribute mechanism can be used to specify the requirements for 26428delay slots, if any, on a target machine. An instruction is said to 26429require a "delay slot" if some instructions that are physically after 26430the instruction are executed as if they were located before it. Classic 26431examples are branch and call instructions, which often execute the 26432following instruction before the branch or call is performed. 26433 26434 On some machines, conditional branch instructions can optionally 26435"annul" instructions in the delay slot. This means that the instruction 26436will not be executed for certain branch outcomes. Both instructions 26437that annul if the branch is true and instructions that annul if the 26438branch is false are supported. 26439 26440 Delay slot scheduling differs from instruction scheduling in that 26441determining whether an instruction needs a delay slot is dependent only 26442on the type of instruction being generated, not on data flow between the 26443instructions. See the next section for a discussion of data-dependent 26444instruction scheduling. 26445 26446 The requirement of an insn needing one or more delay slots is indicated 26447via the 'define_delay' expression. It has the following form: 26448 26449 (define_delay TEST 26450 [DELAY-1 ANNUL-TRUE-1 ANNUL-FALSE-1 26451 DELAY-2 ANNUL-TRUE-2 ANNUL-FALSE-2 26452 ...]) 26453 26454 TEST is an attribute test that indicates whether this 'define_delay' 26455applies to a particular insn. If so, the number of required delay slots 26456is determined by the length of the vector specified as the second 26457argument. An insn placed in delay slot N must satisfy attribute test 26458DELAY-N. ANNUL-TRUE-N is an attribute test that specifies which insns 26459may be annulled if the branch is true. Similarly, ANNUL-FALSE-N 26460specifies which insns in the delay slot may be annulled if the branch is 26461false. If annulling is not supported for that delay slot, '(nil)' 26462should be coded. 26463 26464 For example, in the common case where branch and call insns require a 26465single delay slot, which may contain any insn other than a branch or 26466call, the following would be placed in the 'md' file: 26467 26468 (define_delay (eq_attr "type" "branch,call") 26469 [(eq_attr "type" "!branch,call") (nil) (nil)]) 26470 26471 Multiple 'define_delay' expressions may be specified. In this case, 26472each such expression specifies different delay slot requirements and 26473there must be no insn for which tests in two 'define_delay' expressions 26474are both true. 26475 26476 For example, if we have a machine that requires one delay slot for 26477branches but two for calls, no delay slot can contain a branch or call 26478insn, and any valid insn in the delay slot for the branch can be 26479annulled if the branch is true, we might represent this as follows: 26480 26481 (define_delay (eq_attr "type" "branch") 26482 [(eq_attr "type" "!branch,call") 26483 (eq_attr "type" "!branch,call") 26484 (nil)]) 26485 26486 (define_delay (eq_attr "type" "call") 26487 [(eq_attr "type" "!branch,call") (nil) (nil) 26488 (eq_attr "type" "!branch,call") (nil) (nil)]) 26489 26490 26491File: gccint.info, Node: Processor pipeline description, Prev: Delay Slots, Up: Insn Attributes 26492 2649316.19.9 Specifying processor pipeline description 26494------------------------------------------------- 26495 26496To achieve better performance, most modern processors (super-pipelined, 26497superscalar RISC, and VLIW processors) have many "functional units" on 26498which several instructions can be executed simultaneously. An 26499instruction starts execution if its issue conditions are satisfied. If 26500not, the instruction is stalled until its conditions are satisfied. 26501Such "interlock (pipeline) delay" causes interruption of the fetching of 26502successor instructions (or demands nop instructions, e.g. for some MIPS 26503processors). 26504 26505 There are two major kinds of interlock delays in modern processors. 26506The first one is a data dependence delay determining "instruction 26507latency time". The instruction execution is not started until all 26508source data have been evaluated by prior instructions (there are more 26509complex cases when the instruction execution starts even when the data 26510are not available but will be ready in given time after the instruction 26511execution start). Taking the data dependence delays into account is 26512simple. The data dependence (true, output, and anti-dependence) delay 26513between two instructions is given by a constant. In most cases this 26514approach is adequate. The second kind of interlock delays is a 26515reservation delay. The reservation delay means that two instructions 26516under execution will be in need of shared processors resources, i.e. 26517buses, internal registers, and/or functional units, which are reserved 26518for some time. Taking this kind of delay into account is complex 26519especially for modern RISC processors. 26520 26521 The task of exploiting more processor parallelism is solved by an 26522instruction scheduler. For a better solution to this problem, the 26523instruction scheduler has to have an adequate description of the 26524processor parallelism (or "pipeline description"). GCC machine 26525descriptions describe processor parallelism and functional unit 26526reservations for groups of instructions with the aid of "regular 26527expressions". 26528 26529 The GCC instruction scheduler uses a "pipeline hazard recognizer" to 26530figure out the possibility of the instruction issue by the processor on 26531a given simulated processor cycle. The pipeline hazard recognizer is 26532automatically generated from the processor pipeline description. The 26533pipeline hazard recognizer generated from the machine description is 26534based on a deterministic finite state automaton (DFA): the instruction 26535issue is possible if there is a transition from one automaton state to 26536another one. This algorithm is very fast, and furthermore, its speed is 26537not dependent on processor complexity(1). 26538 26539 The rest of this section describes the directives that constitute an 26540automaton-based processor pipeline description. The order of these 26541constructions within the machine description file is not important. 26542 26543 The following optional construction describes names of automata 26544generated and used for the pipeline hazards recognition. Sometimes the 26545generated finite state automaton used by the pipeline hazard recognizer 26546is large. If we use more than one automaton and bind functional units 26547to the automata, the total size of the automata is usually less than the 26548size of the single automaton. If there is no one such construction, 26549only one finite state automaton is generated. 26550 26551 (define_automaton AUTOMATA-NAMES) 26552 26553 AUTOMATA-NAMES is a string giving names of the automata. The names are 26554separated by commas. All the automata should have unique names. The 26555automaton name is used in the constructions 'define_cpu_unit' and 26556'define_query_cpu_unit'. 26557 26558 Each processor functional unit used in the description of instruction 26559reservations should be described by the following construction. 26560 26561 (define_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 26562 26563 UNIT-NAMES is a string giving the names of the functional units 26564separated by commas. Don't use name 'nothing', it is reserved for other 26565goals. 26566 26567 AUTOMATON-NAME is a string giving the name of the automaton with which 26568the unit is bound. The automaton should be described in construction 26569'define_automaton'. You should give "automaton-name", if there is a 26570defined automaton. 26571 26572 The assignment of units to automata are constrained by the uses of the 26573units in insn reservations. The most important constraint is: if a unit 26574reservation is present on a particular cycle of an alternative for an 26575insn reservation, then some unit from the same automaton must be present 26576on the same cycle for the other alternatives of the insn reservation. 26577The rest of the constraints are mentioned in the description of the 26578subsequent constructions. 26579 26580 The following construction describes CPU functional units analogously 26581to 'define_cpu_unit'. The reservation of such units can be queried for 26582an automaton state. The instruction scheduler never queries reservation 26583of functional units for given automaton state. So as a rule, you don't 26584need this construction. This construction could be used for future code 26585generation goals (e.g. to generate VLIW insn templates). 26586 26587 (define_query_cpu_unit UNIT-NAMES [AUTOMATON-NAME]) 26588 26589 UNIT-NAMES is a string giving names of the functional units separated 26590by commas. 26591 26592 AUTOMATON-NAME is a string giving the name of the automaton with which 26593the unit is bound. 26594 26595 The following construction is the major one to describe pipeline 26596characteristics of an instruction. 26597 26598 (define_insn_reservation INSN-NAME DEFAULT_LATENCY 26599 CONDITION REGEXP) 26600 26601 DEFAULT_LATENCY is a number giving latency time of the instruction. 26602There is an important difference between the old description and the 26603automaton based pipeline description. The latency time is used for all 26604dependencies when we use the old description. In the automaton based 26605pipeline description, the given latency time is only used for true 26606dependencies. The cost of anti-dependencies is always zero and the cost 26607of output dependencies is the difference between latency times of the 26608producing and consuming insns (if the difference is negative, the cost 26609is considered to be zero). You can always change the default costs for 26610any description by using the target hook 'TARGET_SCHED_ADJUST_COST' 26611(*note Scheduling::). 26612 26613 INSN-NAME is a string giving the internal name of the insn. The 26614internal names are used in constructions 'define_bypass' and in the 26615automaton description file generated for debugging. The internal name 26616has nothing in common with the names in 'define_insn'. It is a good 26617practice to use insn classes described in the processor manual. 26618 26619 CONDITION defines what RTL insns are described by this construction. 26620You should remember that you will be in trouble if CONDITION for two or 26621more different 'define_insn_reservation' constructions is TRUE for an 26622insn. In this case what reservation will be used for the insn is not 26623defined. Such cases are not checked during generation of the pipeline 26624hazards recognizer because in general recognizing that two conditions 26625may have the same value is quite difficult (especially if the conditions 26626contain 'symbol_ref'). It is also not checked during the pipeline 26627hazard recognizer work because it would slow down the recognizer 26628considerably. 26629 26630 REGEXP is a string describing the reservation of the cpu's functional 26631units by the instruction. The reservations are described by a regular 26632expression according to the following syntax: 26633 26634 regexp = regexp "," oneof 26635 | oneof 26636 26637 oneof = oneof "|" allof 26638 | allof 26639 26640 allof = allof "+" repeat 26641 | repeat 26642 26643 repeat = element "*" number 26644 | element 26645 26646 element = cpu_function_unit_name 26647 | reservation_name 26648 | result_name 26649 | "nothing" 26650 | "(" regexp ")" 26651 26652 * ',' is used for describing the start of the next cycle in the 26653 reservation. 26654 26655 * '|' is used for describing a reservation described by the first 26656 regular expression *or* a reservation described by the second 26657 regular expression *or* etc. 26658 26659 * '+' is used for describing a reservation described by the first 26660 regular expression *and* a reservation described by the second 26661 regular expression *and* etc. 26662 26663 * '*' is used for convenience and simply means a sequence in which 26664 the regular expression are repeated NUMBER times with cycle 26665 advancing (see ','). 26666 26667 * 'cpu_function_unit_name' denotes reservation of the named 26668 functional unit. 26669 26670 * 'reservation_name' -- see description of construction 26671 'define_reservation'. 26672 26673 * 'nothing' denotes no unit reservations. 26674 26675 Sometimes unit reservations for different insns contain common parts. 26676In such case, you can simplify the pipeline description by describing 26677the common part by the following construction 26678 26679 (define_reservation RESERVATION-NAME REGEXP) 26680 26681 RESERVATION-NAME is a string giving name of REGEXP. Functional unit 26682names and reservation names are in the same name space. So the 26683reservation names should be different from the functional unit names and 26684can not be the reserved name 'nothing'. 26685 26686 The following construction is used to describe exceptions in the 26687latency time for given instruction pair. This is so called bypasses. 26688 26689 (define_bypass NUMBER OUT_INSN_NAMES IN_INSN_NAMES 26690 [GUARD]) 26691 26692 NUMBER defines when the result generated by the instructions given in 26693string OUT_INSN_NAMES will be ready for the instructions given in string 26694IN_INSN_NAMES. Each of these strings is a comma-separated list of 26695filename-style globs and they refer to the names of 26696'define_insn_reservation's. For example: 26697 (define_bypass 1 "cpu1_load_*, cpu1_store_*" "cpu1_load_*") 26698 defines a bypass between instructions that start with 'cpu1_load_' or 26699'cpu1_store_' and those that start with 'cpu1_load_'. 26700 26701 GUARD is an optional string giving the name of a C function which 26702defines an additional guard for the bypass. The function will get the 26703two insns as parameters. If the function returns zero the bypass will 26704be ignored for this case. The additional guard is necessary to 26705recognize complicated bypasses, e.g. when the consumer is only an 26706address of insn 'store' (not a stored value). 26707 26708 If there are more one bypass with the same output and input insns, the 26709chosen bypass is the first bypass with a guard in description whose 26710guard function returns nonzero. If there is no such bypass, then bypass 26711without the guard function is chosen. 26712 26713 The following five constructions are usually used to describe VLIW 26714processors, or more precisely, to describe a placement of small 26715instructions into VLIW instruction slots. They can be used for RISC 26716processors, too. 26717 26718 (exclusion_set UNIT-NAMES UNIT-NAMES) 26719 (presence_set UNIT-NAMES PATTERNS) 26720 (final_presence_set UNIT-NAMES PATTERNS) 26721 (absence_set UNIT-NAMES PATTERNS) 26722 (final_absence_set UNIT-NAMES PATTERNS) 26723 26724 UNIT-NAMES is a string giving names of functional units separated by 26725commas. 26726 26727 PATTERNS is a string giving patterns of functional units separated by 26728comma. Currently pattern is one unit or units separated by 26729white-spaces. 26730 26731 The first construction ('exclusion_set') means that each functional 26732unit in the first string can not be reserved simultaneously with a unit 26733whose name is in the second string and vice versa. For example, the 26734construction is useful for describing processors (e.g. some SPARC 26735processors) with a fully pipelined floating point functional unit which 26736can execute simultaneously only single floating point insns or only 26737double floating point insns. 26738 26739 The second construction ('presence_set') means that each functional 26740unit in the first string can not be reserved unless at least one of 26741pattern of units whose names are in the second string is reserved. This 26742is an asymmetric relation. For example, it is useful for description 26743that VLIW 'slot1' is reserved after 'slot0' reservation. We could 26744describe it by the following construction 26745 26746 (presence_set "slot1" "slot0") 26747 26748 Or 'slot1' is reserved only after 'slot0' and unit 'b0' reservation. 26749In this case we could write 26750 26751 (presence_set "slot1" "slot0 b0") 26752 26753 The third construction ('final_presence_set') is analogous to 26754'presence_set'. The difference between them is when checking is done. 26755When an instruction is issued in given automaton state reflecting all 26756current and planned unit reservations, the automaton state is changed. 26757The first state is a source state, the second one is a result state. 26758Checking for 'presence_set' is done on the source state reservation, 26759checking for 'final_presence_set' is done on the result reservation. 26760This construction is useful to describe a reservation which is actually 26761two subsequent reservations. For example, if we use 26762 26763 (presence_set "slot1" "slot0") 26764 26765 the following insn will be never issued (because 'slot1' requires 26766'slot0' which is absent in the source state). 26767 26768 (define_reservation "insn_and_nop" "slot0 + slot1") 26769 26770 but it can be issued if we use analogous 'final_presence_set'. 26771 26772 The forth construction ('absence_set') means that each functional unit 26773in the first string can be reserved only if each pattern of units whose 26774names are in the second string is not reserved. This is an asymmetric 26775relation (actually 'exclusion_set' is analogous to this one but it is 26776symmetric). For example it might be useful in a VLIW description to say 26777that 'slot0' cannot be reserved after either 'slot1' or 'slot2' have 26778been reserved. This can be described as: 26779 26780 (absence_set "slot0" "slot1, slot2") 26781 26782 Or 'slot2' can not be reserved if 'slot0' and unit 'b0' are reserved or 26783'slot1' and unit 'b1' are reserved. In this case we could write 26784 26785 (absence_set "slot2" "slot0 b0, slot1 b1") 26786 26787 All functional units mentioned in a set should belong to the same 26788automaton. 26789 26790 The last construction ('final_absence_set') is analogous to 26791'absence_set' but checking is done on the result (state) reservation. 26792See comments for 'final_presence_set'. 26793 26794 You can control the generator of the pipeline hazard recognizer with 26795the following construction. 26796 26797 (automata_option OPTIONS) 26798 26799 OPTIONS is a string giving options which affect the generated code. 26800Currently there are the following options: 26801 26802 * "no-minimization" makes no minimization of the automaton. This is 26803 only worth to do when we are debugging the description and need to 26804 look more accurately at reservations of states. 26805 26806 * "time" means printing time statistics about the generation of 26807 automata. 26808 26809 * "stats" means printing statistics about the generated automata such 26810 as the number of DFA states, NDFA states and arcs. 26811 26812 * "v" means a generation of the file describing the result automata. 26813 The file has suffix '.dfa' and can be used for the description 26814 verification and debugging. 26815 26816 * "w" means a generation of warning instead of error for non-critical 26817 errors. 26818 26819 * "no-comb-vect" prevents the automaton generator from generating two 26820 data structures and comparing them for space efficiency. Using a 26821 comb vector to represent transitions may be better, but it can be 26822 very expensive to construct. This option is useful if the build 26823 process spends an unacceptably long time in genautomata. 26824 26825 * "ndfa" makes nondeterministic finite state automata. This affects 26826 the treatment of operator '|' in the regular expressions. The 26827 usual treatment of the operator is to try the first alternative 26828 and, if the reservation is not possible, the second alternative. 26829 The nondeterministic treatment means trying all alternatives, some 26830 of them may be rejected by reservations in the subsequent insns. 26831 26832 * "collapse-ndfa" modifies the behavior of the generator when 26833 producing an automaton. An additional state transition to collapse 26834 a nondeterministic NDFA state to a deterministic DFA state is 26835 generated. It can be triggered by passing 'const0_rtx' to 26836 state_transition. In such an automaton, cycle advance transitions 26837 are available only for these collapsed states. This option is 26838 useful for ports that want to use the 'ndfa' option, but also want 26839 to use 'define_query_cpu_unit' to assign units to insns issued in a 26840 cycle. 26841 26842 * "progress" means output of a progress bar showing how many states 26843 were generated so far for automaton being processed. This is 26844 useful during debugging a DFA description. If you see too many 26845 generated states, you could interrupt the generator of the pipeline 26846 hazard recognizer and try to figure out a reason for generation of 26847 the huge automaton. 26848 26849 As an example, consider a superscalar RISC machine which can issue 26850three insns (two integer insns and one floating point insn) on the cycle 26851but can finish only two insns. To describe this, we define the 26852following functional units. 26853 26854 (define_cpu_unit "i0_pipeline, i1_pipeline, f_pipeline") 26855 (define_cpu_unit "port0, port1") 26856 26857 All simple integer insns can be executed in any integer pipeline and 26858their result is ready in two cycles. The simple integer insns are 26859issued into the first pipeline unless it is reserved, otherwise they are 26860issued into the second pipeline. Integer division and multiplication 26861insns can be executed only in the second integer pipeline and their 26862results are ready correspondingly in 8 and 4 cycles. The integer 26863division is not pipelined, i.e. the subsequent integer division insn can 26864not be issued until the current division insn finished. Floating point 26865insns are fully pipelined and their results are ready in 3 cycles. 26866Where the result of a floating point insn is used by an integer insn, an 26867additional delay of one cycle is incurred. To describe all of this we 26868could specify 26869 26870 (define_cpu_unit "div") 26871 26872 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26873 "(i0_pipeline | i1_pipeline), (port0 | port1)") 26874 26875 (define_insn_reservation "mult" 4 (eq_attr "type" "mult") 26876 "i1_pipeline, nothing*2, (port0 | port1)") 26877 26878 (define_insn_reservation "div" 8 (eq_attr "type" "div") 26879 "i1_pipeline, div*7, div + (port0 | port1)") 26880 26881 (define_insn_reservation "float" 3 (eq_attr "type" "float") 26882 "f_pipeline, nothing, (port0 | port1)) 26883 26884 (define_bypass 4 "float" "simple,mult,div") 26885 26886 To simplify the description we could describe the following reservation 26887 26888 (define_reservation "finish" "port0|port1") 26889 26890 and use it in all 'define_insn_reservation' as in the following 26891construction 26892 26893 (define_insn_reservation "simple" 2 (eq_attr "type" "int") 26894 "(i0_pipeline | i1_pipeline), finish") 26895 26896 ---------- Footnotes ---------- 26897 26898 (1) However, the size of the automaton depends on processor 26899complexity. To limit this effect, machine descriptions can split 26900orthogonal parts of the machine description among several automata: but 26901then, since each of these must be stepped independently, this does cause 26902a small decrease in the algorithm's performance. 26903 26904 26905File: gccint.info, Node: Conditional Execution, Next: Define Subst, Prev: Insn Attributes, Up: Machine Desc 26906 2690716.20 Conditional Execution 26908=========================== 26909 26910A number of architectures provide for some form of conditional 26911execution, or predication. The hallmark of this feature is the ability 26912to nullify most of the instructions in the instruction set. When the 26913instruction set is large and not entirely symmetric, it can be quite 26914tedious to describe these forms directly in the '.md' file. An 26915alternative is the 'define_cond_exec' template. 26916 26917 (define_cond_exec 26918 [PREDICATE-PATTERN] 26919 "CONDITION" 26920 "OUTPUT-TEMPLATE" 26921 "OPTIONAL-INSN-ATTRIBUES") 26922 26923 PREDICATE-PATTERN is the condition that must be true for the insn to be 26924executed at runtime and should match a relational operator. One can use 26925'match_operator' to match several relational operators at once. Any 26926'match_operand' operands must have no more than one alternative. 26927 26928 CONDITION is a C expression that must be true for the generated pattern 26929to match. 26930 26931 OUTPUT-TEMPLATE is a string similar to the 'define_insn' output 26932template (*note Output Template::), except that the '*' and '@' special 26933cases do not apply. This is only useful if the assembly text for the 26934predicate is a simple prefix to the main insn. In order to handle the 26935general case, there is a global variable 'current_insn_predicate' that 26936will contain the entire predicate if the current insn is predicated, and 26937will otherwise be 'NULL'. 26938 26939 OPTIONAL-INSN-ATTRIBUTES is an optional vector of attributes that gets 26940appended to the insn attributes of the produced cond_exec rtx. It can 26941be used to add some distinguishing attribute to cond_exec rtxs produced 26942that way. An example usage would be to use this attribute in 26943conjunction with attributes on the main pattern to disable particular 26944alternatives under certain conditions. 26945 26946 When 'define_cond_exec' is used, an implicit reference to the 26947'predicable' instruction attribute is made. *Note Insn Attributes::. 26948This attribute must be a boolean (i.e. have exactly two elements in its 26949LIST-OF-VALUES), with the possible values being 'no' and 'yes'. The 26950default and all uses in the insns must be a simple constant, not a 26951complex expressions. It may, however, depend on the alternative, by 26952using a comma-separated list of values. If that is the case, the port 26953should also define an 'enabled' attribute (*note Disable Insn 26954Alternatives::), which should also allow only 'no' and 'yes' as its 26955values. 26956 26957 For each 'define_insn' for which the 'predicable' attribute is true, a 26958new 'define_insn' pattern will be generated that matches a predicated 26959version of the instruction. For example, 26960 26961 (define_insn "addsi" 26962 [(set (match_operand:SI 0 "register_operand" "r") 26963 (plus:SI (match_operand:SI 1 "register_operand" "r") 26964 (match_operand:SI 2 "register_operand" "r")))] 26965 "TEST1" 26966 "add %2,%1,%0") 26967 26968 (define_cond_exec 26969 [(ne (match_operand:CC 0 "register_operand" "c") 26970 (const_int 0))] 26971 "TEST2" 26972 "(%0)") 26973 26974generates a new pattern 26975 26976 (define_insn "" 26977 [(cond_exec 26978 (ne (match_operand:CC 3 "register_operand" "c") (const_int 0)) 26979 (set (match_operand:SI 0 "register_operand" "r") 26980 (plus:SI (match_operand:SI 1 "register_operand" "r") 26981 (match_operand:SI 2 "register_operand" "r"))))] 26982 "(TEST2) && (TEST1)" 26983 "(%3) add %2,%1,%0") 26984 26985 26986File: gccint.info, Node: Define Subst, Next: Constant Definitions, Prev: Conditional Execution, Up: Machine Desc 26987 2698816.21 RTL Templates Transformations 26989=================================== 26990 26991For some hardware architectures there are common cases when the RTL 26992templates for the instructions can be derived from the other RTL 26993templates using simple transformations. E.g., 'i386.md' contains an RTL 26994template for the ordinary 'sub' instruction-- '*subsi_1', and for the 26995'sub' instruction with subsequent zero-extension--'*subsi_1_zext'. Such 26996cases can be easily implemented by a single meta-template capable of 26997generating a modified case based on the initial one: 26998 26999 (define_subst "NAME" 27000 [INPUT-TEMPLATE] 27001 "CONDITION" 27002 [OUTPUT-TEMPLATE]) 27003 INPUT-TEMPLATE is a pattern describing the source RTL template, which 27004will be transformed. 27005 27006 CONDITION is a C expression that is conjunct with the condition from 27007the input-template to generate a condition to be used in the 27008output-template. 27009 27010 OUTPUT-TEMPLATE is a pattern that will be used in the resulting 27011template. 27012 27013 'define_subst' mechanism is tightly coupled with the notion of the 27014subst attribute (*note Subst Iterators::). The use of 'define_subst' is 27015triggered by a reference to a subst attribute in the transforming RTL 27016template. This reference initiates duplication of the source RTL 27017template and substitution of the attributes with their values. The 27018source RTL template is left unchanged, while the copy is transformed by 27019'define_subst'. This transformation can fail in the case when the 27020source RTL template is not matched against the input-template of the 27021'define_subst'. In such case the copy is deleted. 27022 27023 'define_subst' can be used only in 'define_insn' and 'define_expand', 27024it cannot be used in other expressions (e.g. in 27025'define_insn_and_split'). 27026 27027* Menu: 27028 27029* Define Subst Example:: Example of 'define_subst' work. 27030* Define Subst Pattern Matching:: Process of template comparison. 27031* Define Subst Output Template:: Generation of output template. 27032 27033 27034File: gccint.info, Node: Define Subst Example, Next: Define Subst Pattern Matching, Up: Define Subst 27035 2703616.21.1 'define_subst' Example 27037------------------------------ 27038 27039To illustrate how 'define_subst' works, let us examine a simple template 27040transformation. 27041 27042 Suppose there are two kinds of instructions: one that touches flags and 27043the other that does not. The instructions of the second type could be 27044generated with the following 'define_subst': 27045 27046 (define_subst "add_clobber_subst" 27047 [(set (match_operand:SI 0 "" "") 27048 (match_operand:SI 1 "" ""))] 27049 "" 27050 [(set (match_dup 0) 27051 (match_dup 1)) 27052 (clobber (reg:CC FLAGS_REG))] 27053 27054 This 'define_subst' can be applied to any RTL pattern containing 'set' 27055of mode SI and generates a copy with clobber when it is applied. 27056 27057 Assume there is an RTL template for a 'max' instruction to be used in 27058'define_subst' mentioned above: 27059 27060 (define_insn "maxsi" 27061 [(set (match_operand:SI 0 "register_operand" "=r") 27062 (max:SI 27063 (match_operand:SI 1 "register_operand" "r") 27064 (match_operand:SI 2 "register_operand" "r")))] 27065 "" 27066 "max\t{%2, %1, %0|%0, %1, %2}" 27067 [...]) 27068 27069 To mark the RTL template for 'define_subst' application, 27070subst-attributes are used. They should be declared in advance: 27071 27072 (define_subst_attr "add_clobber_name" "add_clobber_subst" "_noclobber" "_clobber") 27073 27074 Here 'add_clobber_name' is the attribute name, 'add_clobber_subst' is 27075the name of the corresponding 'define_subst', the third argument 27076('_noclobber') is the attribute value that would be substituted into the 27077unchanged version of the source RTL template, and the last argument 27078('_clobber') is the value that would be substituted into the second, 27079transformed, version of the RTL template. 27080 27081 Once the subst-attribute has been defined, it should be used in RTL 27082templates which need to be processed by the 'define_subst'. So, the 27083original RTL template should be changed: 27084 27085 (define_insn "maxsi<add_clobber_name>" 27086 [(set (match_operand:SI 0 "register_operand" "=r") 27087 (max:SI 27088 (match_operand:SI 1 "register_operand" "r") 27089 (match_operand:SI 2 "register_operand" "r")))] 27090 "" 27091 "max\t{%2, %1, %0|%0, %1, %2}" 27092 [...]) 27093 27094 The result of the 'define_subst' usage would look like the following: 27095 27096 (define_insn "maxsi_noclobber" 27097 [(set (match_operand:SI 0 "register_operand" "=r") 27098 (max:SI 27099 (match_operand:SI 1 "register_operand" "r") 27100 (match_operand:SI 2 "register_operand" "r")))] 27101 "" 27102 "max\t{%2, %1, %0|%0, %1, %2}" 27103 [...]) 27104 (define_insn "maxsi_clobber" 27105 [(set (match_operand:SI 0 "register_operand" "=r") 27106 (max:SI 27107 (match_operand:SI 1 "register_operand" "r") 27108 (match_operand:SI 2 "register_operand" "r"))) 27109 (clobber (reg:CC FLAGS_REG))] 27110 "" 27111 "max\t{%2, %1, %0|%0, %1, %2}" 27112 [...]) 27113 27114 27115File: gccint.info, Node: Define Subst Pattern Matching, Next: Define Subst Output Template, Prev: Define Subst Example, Up: Define Subst 27116 2711716.21.2 Pattern Matching in 'define_subst' 27118------------------------------------------ 27119 27120All expressions, allowed in 'define_insn' or 'define_expand', are 27121allowed in the input-template of 'define_subst', except 'match_par_dup', 27122'match_scratch', 'match_parallel'. The meanings of expressions in the 27123input-template were changed: 27124 27125 'match_operand' matches any expression (possibly, a subtree in 27126RTL-template), if modes of the 'match_operand' and this expression are 27127the same, or mode of the 'match_operand' is 'VOIDmode', or this 27128expression is 'match_dup', 'match_op_dup'. If the expression is 27129'match_operand' too, and predicate of 'match_operand' from the input 27130pattern is not empty, then the predicates are compared. That can be 27131used for more accurate filtering of accepted RTL-templates. 27132 27133 'match_operator' matches common operators (like 'plus', 'minus'), 27134'unspec', 'unspec_volatile' operators and 'match_operator's from the 27135original pattern if the modes match and 'match_operator' from the input 27136pattern has the same number of operands as the operator from the 27137original pattern. 27138 27139 27140File: gccint.info, Node: Define Subst Output Template, Prev: Define Subst Pattern Matching, Up: Define Subst 27141 2714216.21.3 Generation of output template in 'define_subst' 27143------------------------------------------------------- 27144 27145If all necessary checks for 'define_subst' application pass, a new 27146RTL-pattern, based on the output-template, is created to replace the old 27147template. Like in input-patterns, meanings of some RTL expressions are 27148changed when they are used in output-patterns of a 'define_subst'. 27149Thus, 'match_dup' is used for copying the whole expression from the 27150original pattern, which matched corresponding 'match_operand' from the 27151input pattern. 27152 27153 'match_dup N' is used in the output template to be replaced with the 27154expression from the original pattern, which matched 'match_operand N' 27155from the input pattern. As a consequence, 'match_dup' cannot be used to 27156point to 'match_operand's from the output pattern, it should always 27157refer to a 'match_operand' from the input pattern. 27158 27159 In the output template one can refer to the expressions from the 27160original pattern and create new ones. For instance, some operands could 27161be added by means of standard 'match_operand'. 27162 27163 After replacing 'match_dup' with some RTL-subtree from the original 27164pattern, it could happen that several 'match_operand's in the output 27165pattern have the same indexes. It is unknown, how many and what indexes 27166would be used in the expression which would replace 'match_dup', so such 27167conflicts in indexes are inevitable. To overcome this issue, 27168'match_operands' and 'match_operators', which were introduced into the 27169output pattern, are renumerated when all 'match_dup's are replaced. 27170 27171 Number of alternatives in 'match_operand's introduced into the output 27172template 'M' could differ from the number of alternatives in the 27173original pattern 'N', so in the resultant pattern there would be 'N*M' 27174alternatives. Thus, constraints from the original pattern would be 27175duplicated 'N' times, constraints from the output pattern would be 27176duplicated 'M' times, producing all possible combinations. 27177 27178 27179File: gccint.info, Node: Constant Definitions, Next: Iterators, Prev: Define Subst, Up: Machine Desc 27180 2718116.22 Constant Definitions 27182========================== 27183 27184Using literal constants inside instruction patterns reduces legibility 27185and can be a maintenance problem. 27186 27187 To overcome this problem, you may use the 'define_constants' 27188expression. It contains a vector of name-value pairs. From that point 27189on, wherever any of the names appears in the MD file, it is as if the 27190corresponding value had been written instead. You may use 27191'define_constants' multiple times; each appearance adds more constants 27192to the table. It is an error to redefine a constant with a different 27193value. 27194 27195 To come back to the a29k load multiple example, instead of 27196 27197 (define_insn "" 27198 [(match_parallel 0 "load_multiple_operation" 27199 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 27200 (match_operand:SI 2 "memory_operand" "m")) 27201 (use (reg:SI 179)) 27202 (clobber (reg:SI 179))])] 27203 "" 27204 "loadm 0,0,%1,%2") 27205 27206 You could write: 27207 27208 (define_constants [ 27209 (R_BP 177) 27210 (R_FC 178) 27211 (R_CR 179) 27212 (R_Q 180) 27213 ]) 27214 27215 (define_insn "" 27216 [(match_parallel 0 "load_multiple_operation" 27217 [(set (match_operand:SI 1 "gpc_reg_operand" "=r") 27218 (match_operand:SI 2 "memory_operand" "m")) 27219 (use (reg:SI R_CR)) 27220 (clobber (reg:SI R_CR))])] 27221 "" 27222 "loadm 0,0,%1,%2") 27223 27224 The constants that are defined with a define_constant are also output 27225in the insn-codes.h header file as #defines. 27226 27227 You can also use the machine description file to define enumerations. 27228Like the constants defined by 'define_constant', these enumerations are 27229visible to both the machine description file and the main C code. 27230 27231 The syntax is as follows: 27232 27233 (define_c_enum "NAME" [ 27234 VALUE0 27235 VALUE1 27236 ... 27237 VALUEN 27238 ]) 27239 27240 This definition causes the equivalent of the following C code to appear 27241in 'insn-constants.h': 27242 27243 enum NAME { 27244 VALUE0 = 0, 27245 VALUE1 = 1, 27246 ... 27247 VALUEN = N 27248 }; 27249 #define NUM_CNAME_VALUES (N + 1) 27250 27251 where CNAME is the capitalized form of NAME. It also makes each VALUEI 27252available in the machine description file, just as if it had been 27253declared with: 27254 27255 (define_constants [(VALUEI I)]) 27256 27257 Each VALUEI is usually an upper-case identifier and usually begins with 27258CNAME. 27259 27260 You can split the enumeration definition into as many statements as you 27261like. The above example is directly equivalent to: 27262 27263 (define_c_enum "NAME" [VALUE0]) 27264 (define_c_enum "NAME" [VALUE1]) 27265 ... 27266 (define_c_enum "NAME" [VALUEN]) 27267 27268 Splitting the enumeration helps to improve the modularity of each 27269individual '.md' file. For example, if a port defines its 27270synchronization instructions in a separate 'sync.md' file, it is 27271convenient to define all synchronization-specific enumeration values in 27272'sync.md' rather than in the main '.md' file. 27273 27274 Some enumeration names have special significance to GCC: 27275 27276'unspecv' 27277 If an enumeration called 'unspecv' is defined, GCC will use it when 27278 printing out 'unspec_volatile' expressions. For example: 27279 27280 (define_c_enum "unspecv" [ 27281 UNSPECV_BLOCKAGE 27282 ]) 27283 27284 causes GCC to print '(unspec_volatile ... 0)' as: 27285 27286 (unspec_volatile ... UNSPECV_BLOCKAGE) 27287 27288'unspec' 27289 If an enumeration called 'unspec' is defined, GCC will use it when 27290 printing out 'unspec' expressions. GCC will also use it when 27291 printing out 'unspec_volatile' expressions unless an 'unspecv' 27292 enumeration is also defined. You can therefore decide whether to 27293 keep separate enumerations for volatile and non-volatile 27294 expressions or whether to use the same enumeration for both. 27295 27296 Another way of defining an enumeration is to use 'define_enum': 27297 27298 (define_enum "NAME" [ 27299 VALUE0 27300 VALUE1 27301 ... 27302 VALUEN 27303 ]) 27304 27305 This directive implies: 27306 27307 (define_c_enum "NAME" [ 27308 CNAME_CVALUE0 27309 CNAME_CVALUE1 27310 ... 27311 CNAME_CVALUEN 27312 ]) 27313 27314 where CVALUEI is the capitalized form of VALUEI. However, unlike 27315'define_c_enum', the enumerations defined by 'define_enum' can be used 27316in attribute specifications (*note define_enum_attr::). 27317 27318 27319File: gccint.info, Node: Iterators, Prev: Constant Definitions, Up: Machine Desc 27320 2732116.23 Iterators 27322=============== 27323 27324Ports often need to define similar patterns for more than one machine 27325mode or for more than one rtx code. GCC provides some simple iterator 27326facilities to make this process easier. 27327 27328* Menu: 27329 27330* Mode Iterators:: Generating variations of patterns for different modes. 27331* Code Iterators:: Doing the same for codes. 27332* Int Iterators:: Doing the same for integers. 27333* Subst Iterators:: Generating variations of patterns for define_subst. 27334 27335 27336File: gccint.info, Node: Mode Iterators, Next: Code Iterators, Up: Iterators 27337 2733816.23.1 Mode Iterators 27339---------------------- 27340 27341Ports often need to define similar patterns for two or more different 27342modes. For example: 27343 27344 * If a processor has hardware support for both single and double 27345 floating-point arithmetic, the 'SFmode' patterns tend to be very 27346 similar to the 'DFmode' ones. 27347 27348 * If a port uses 'SImode' pointers in one configuration and 'DImode' 27349 pointers in another, it will usually have very similar 'SImode' and 27350 'DImode' patterns for manipulating pointers. 27351 27352 Mode iterators allow several patterns to be instantiated from one '.md' 27353file template. They can be used with any type of rtx-based construct, 27354such as a 'define_insn', 'define_split', or 'define_peephole2'. 27355 27356* Menu: 27357 27358* Defining Mode Iterators:: Defining a new mode iterator. 27359* Substitutions:: Combining mode iterators with substitutions 27360* Examples:: Examples 27361 27362 27363File: gccint.info, Node: Defining Mode Iterators, Next: Substitutions, Up: Mode Iterators 27364 2736516.23.1.1 Defining Mode Iterators 27366................................. 27367 27368The syntax for defining a mode iterator is: 27369 27370 (define_mode_iterator NAME [(MODE1 "COND1") ... (MODEN "CONDN")]) 27371 27372 This allows subsequent '.md' file constructs to use the mode suffix 27373':NAME'. Every construct that does so will be expanded N times, once 27374with every use of ':NAME' replaced by ':MODE1', once with every use 27375replaced by ':MODE2', and so on. In the expansion for a particular 27376MODEI, every C condition will also require that CONDI be true. 27377 27378 For example: 27379 27380 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 27381 27382 defines a new mode suffix ':P'. Every construct that uses ':P' will be 27383expanded twice, once with every ':P' replaced by ':SI' and once with 27384every ':P' replaced by ':DI'. The ':SI' version will only apply if 27385'Pmode == SImode' and the ':DI' version will only apply if 'Pmode == 27386DImode'. 27387 27388 As with other '.md' conditions, an empty string is treated as "always 27389true". '(MODE "")' can also be abbreviated to 'MODE'. For example: 27390 27391 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 27392 27393 means that the ':DI' expansion only applies if 'TARGET_64BIT' but that 27394the ':SI' expansion has no such constraint. 27395 27396 Iterators are applied in the order they are defined. This can be 27397significant if two iterators are used in a construct that requires 27398substitutions. *Note Substitutions::. 27399 27400 27401File: gccint.info, Node: Substitutions, Next: Examples, Prev: Defining Mode Iterators, Up: Mode Iterators 27402 2740316.23.1.2 Substitution in Mode Iterators 27404........................................ 27405 27406If an '.md' file construct uses mode iterators, each version of the 27407construct will often need slightly different strings or modes. For 27408example: 27409 27410 * When a 'define_expand' defines several 'addM3' patterns (*note 27411 Standard Names::), each expander will need to use the appropriate 27412 mode name for M. 27413 27414 * When a 'define_insn' defines several instruction patterns, each 27415 instruction will often use a different assembler mnemonic. 27416 27417 * When a 'define_insn' requires operands with different modes, using 27418 an iterator for one of the operand modes usually requires a 27419 specific mode for the other operand(s). 27420 27421 GCC supports such variations through a system of "mode attributes". 27422There are two standard attributes: 'mode', which is the name of the mode 27423in lower case, and 'MODE', which is the same thing in upper case. You 27424can define other attributes using: 27425 27426 (define_mode_attr NAME [(MODE1 "VALUE1") ... (MODEN "VALUEN")]) 27427 27428 where NAME is the name of the attribute and VALUEI is the value 27429associated with MODEI. 27430 27431 When GCC replaces some :ITERATOR with :MODE, it will scan each string 27432and mode in the pattern for sequences of the form '<ITERATOR:ATTR>', 27433where ATTR is the name of a mode attribute. If the attribute is defined 27434for MODE, the whole '<...>' sequence will be replaced by the appropriate 27435attribute value. 27436 27437 For example, suppose an '.md' file has: 27438 27439 (define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")]) 27440 (define_mode_attr load [(SI "lw") (DI "ld")]) 27441 27442 If one of the patterns that uses ':P' contains the string 27443'"<P:load>\t%0,%1"', the 'SI' version of that pattern will use 27444'"lw\t%0,%1"' and the 'DI' version will use '"ld\t%0,%1"'. 27445 27446 Here is an example of using an attribute for a mode: 27447 27448 (define_mode_iterator LONG [SI DI]) 27449 (define_mode_attr SHORT [(SI "HI") (DI "SI")]) 27450 (define_insn ... 27451 (sign_extend:LONG (match_operand:<LONG:SHORT> ...)) ...) 27452 27453 The 'ITERATOR:' prefix may be omitted, in which case the substitution 27454will be attempted for every iterator expansion. 27455 27456 27457File: gccint.info, Node: Examples, Prev: Substitutions, Up: Mode Iterators 27458 2745916.23.1.3 Mode Iterator Examples 27460................................ 27461 27462Here is an example from the MIPS port. It defines the following modes 27463and attributes (among others): 27464 27465 (define_mode_iterator GPR [SI (DI "TARGET_64BIT")]) 27466 (define_mode_attr d [(SI "") (DI "d")]) 27467 27468 and uses the following template to define both 'subsi3' and 'subdi3': 27469 27470 (define_insn "sub<mode>3" 27471 [(set (match_operand:GPR 0 "register_operand" "=d") 27472 (minus:GPR (match_operand:GPR 1 "register_operand" "d") 27473 (match_operand:GPR 2 "register_operand" "d")))] 27474 "" 27475 "<d>subu\t%0,%1,%2" 27476 [(set_attr "type" "arith") 27477 (set_attr "mode" "<MODE>")]) 27478 27479 This is exactly equivalent to: 27480 27481 (define_insn "subsi3" 27482 [(set (match_operand:SI 0 "register_operand" "=d") 27483 (minus:SI (match_operand:SI 1 "register_operand" "d") 27484 (match_operand:SI 2 "register_operand" "d")))] 27485 "" 27486 "subu\t%0,%1,%2" 27487 [(set_attr "type" "arith") 27488 (set_attr "mode" "SI")]) 27489 27490 (define_insn "subdi3" 27491 [(set (match_operand:DI 0 "register_operand" "=d") 27492 (minus:DI (match_operand:DI 1 "register_operand" "d") 27493 (match_operand:DI 2 "register_operand" "d")))] 27494 "" 27495 "dsubu\t%0,%1,%2" 27496 [(set_attr "type" "arith") 27497 (set_attr "mode" "DI")]) 27498 27499 27500File: gccint.info, Node: Code Iterators, Next: Int Iterators, Prev: Mode Iterators, Up: Iterators 27501 2750216.23.2 Code Iterators 27503---------------------- 27504 27505Code iterators operate in a similar way to mode iterators. *Note Mode 27506Iterators::. 27507 27508 The construct: 27509 27510 (define_code_iterator NAME [(CODE1 "COND1") ... (CODEN "CONDN")]) 27511 27512 defines a pseudo rtx code NAME that can be instantiated as CODEI if 27513condition CONDI is true. Each CODEI must have the same rtx format. 27514*Note RTL Classes::. 27515 27516 As with mode iterators, each pattern that uses NAME will be expanded N 27517times, once with all uses of NAME replaced by CODE1, once with all uses 27518replaced by CODE2, and so on. *Note Defining Mode Iterators::. 27519 27520 It is possible to define attributes for codes as well as for modes. 27521There are two standard code attributes: 'code', the name of the code in 27522lower case, and 'CODE', the name of the code in upper case. Other 27523attributes are defined using: 27524 27525 (define_code_attr NAME [(CODE1 "VALUE1") ... (CODEN "VALUEN")]) 27526 27527 Here's an example of code iterators in action, taken from the MIPS 27528port: 27529 27530 (define_code_iterator any_cond [unordered ordered unlt unge uneq ltgt unle ungt 27531 eq ne gt ge lt le gtu geu ltu leu]) 27532 27533 (define_expand "b<code>" 27534 [(set (pc) 27535 (if_then_else (any_cond:CC (cc0) 27536 (const_int 0)) 27537 (label_ref (match_operand 0 "")) 27538 (pc)))] 27539 "" 27540 { 27541 gen_conditional_branch (operands, <CODE>); 27542 DONE; 27543 }) 27544 27545 This is equivalent to: 27546 27547 (define_expand "bunordered" 27548 [(set (pc) 27549 (if_then_else (unordered:CC (cc0) 27550 (const_int 0)) 27551 (label_ref (match_operand 0 "")) 27552 (pc)))] 27553 "" 27554 { 27555 gen_conditional_branch (operands, UNORDERED); 27556 DONE; 27557 }) 27558 27559 (define_expand "bordered" 27560 [(set (pc) 27561 (if_then_else (ordered:CC (cc0) 27562 (const_int 0)) 27563 (label_ref (match_operand 0 "")) 27564 (pc)))] 27565 "" 27566 { 27567 gen_conditional_branch (operands, ORDERED); 27568 DONE; 27569 }) 27570 27571 ... 27572 27573 27574File: gccint.info, Node: Int Iterators, Next: Subst Iterators, Prev: Code Iterators, Up: Iterators 27575 2757616.23.3 Int Iterators 27577--------------------- 27578 27579Int iterators operate in a similar way to code iterators. *Note Code 27580Iterators::. 27581 27582 The construct: 27583 27584 (define_int_iterator NAME [(INT1 "COND1") ... (INTN "CONDN")]) 27585 27586 defines a pseudo integer constant NAME that can be instantiated as INTI 27587if condition CONDI is true. Each INT must have the same rtx format. 27588*Note RTL Classes::. Int iterators can appear in only those rtx fields 27589that have 'i' as the specifier. This means that each INT has to be a 27590constant defined using define_constant or define_c_enum. 27591 27592 As with mode and code iterators, each pattern that uses NAME will be 27593expanded N times, once with all uses of NAME replaced by INT1, once with 27594all uses replaced by INT2, and so on. *Note Defining Mode Iterators::. 27595 27596 It is possible to define attributes for ints as well as for codes and 27597modes. Attributes are defined using: 27598 27599 (define_int_attr NAME [(INT1 "VALUE1") ... (INTN "VALUEN")]) 27600 27601 Here's an example of int iterators in action, taken from the ARM port: 27602 27603 (define_int_iterator QABSNEG [UNSPEC_VQABS UNSPEC_VQNEG]) 27604 27605 (define_int_attr absneg [(UNSPEC_VQABS "abs") (UNSPEC_VQNEG "neg")]) 27606 27607 (define_insn "neon_vq<absneg><mode>" 27608 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27609 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27610 (match_operand:SI 2 "immediate_operand" "i")] 27611 QABSNEG))] 27612 "TARGET_NEON" 27613 "vq<absneg>.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27614 [(set_attr "type" "neon_vqneg_vqabs")] 27615 ) 27616 27617 27618 This is equivalent to: 27619 27620 (define_insn "neon_vqabs<mode>" 27621 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27622 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27623 (match_operand:SI 2 "immediate_operand" "i")] 27624 UNSPEC_VQABS))] 27625 "TARGET_NEON" 27626 "vqabs.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27627 [(set_attr "type" "neon_vqneg_vqabs")] 27628 ) 27629 27630 (define_insn "neon_vqneg<mode>" 27631 [(set (match_operand:VDQIW 0 "s_register_operand" "=w") 27632 (unspec:VDQIW [(match_operand:VDQIW 1 "s_register_operand" "w") 27633 (match_operand:SI 2 "immediate_operand" "i")] 27634 UNSPEC_VQNEG))] 27635 "TARGET_NEON" 27636 "vqneg.<V_s_elem>\t%<V_reg>0, %<V_reg>1" 27637 [(set_attr "type" "neon_vqneg_vqabs")] 27638 ) 27639 27640 27641 27642File: gccint.info, Node: Subst Iterators, Prev: Int Iterators, Up: Iterators 27643 2764416.23.4 Subst Iterators 27645----------------------- 27646 27647Subst iterators are special type of iterators with the following 27648restrictions: they could not be declared explicitly, they always have 27649only two values, and they do not have explicit dedicated name. 27650Subst-iterators are triggered only when corresponding subst-attribute is 27651used in RTL-pattern. 27652 27653 Subst iterators transform templates in the following way: the templates 27654are duplicated, the subst-attributes in these templates are replaced 27655with the corresponding values, and a new attribute is implicitly added 27656to the given 'define_insn'/'define_expand'. The name of the added 27657attribute matches the name of 'define_subst'. Such attributes are 27658declared implicitly, and it is not allowed to have a 'define_attr' named 27659as a 'define_subst'. 27660 27661 Each subst iterator is linked to a 'define_subst'. It is declared 27662implicitly by the first appearance of the corresponding 27663'define_subst_attr', and it is not allowed to define it explicitly. 27664 27665 Declarations of subst-attributes have the following syntax: 27666 27667 (define_subst_attr "NAME" 27668 "SUBST-NAME" 27669 "NO-SUBST-VALUE" 27670 "SUBST-APPLIED-VALUE") 27671 27672 NAME is a string with which the given subst-attribute could be referred 27673to. 27674 27675 SUBST-NAME shows which 'define_subst' should be applied to an 27676RTL-template if the given subst-attribute is present in the 27677RTL-template. 27678 27679 NO-SUBST-VALUE is a value with which subst-attribute would be replaced 27680in the first copy of the original RTL-template. 27681 27682 SUBST-APPLIED-VALUE is a value with which subst-attribute would be 27683replaced in the second copy of the original RTL-template. 27684 27685 27686File: gccint.info, Node: Target Macros, Next: Host Config, Prev: Machine Desc, Up: Top 27687 2768817 Target Description Macros and Functions 27689****************************************** 27690 27691In addition to the file 'MACHINE.md', a machine description includes a C 27692header file conventionally given the name 'MACHINE.h' and a C source 27693file named 'MACHINE.c'. The header file defines numerous macros that 27694convey the information about the target machine that does not fit into 27695the scheme of the '.md' file. The file 'tm.h' should be a link to 27696'MACHINE.h'. The header file 'config.h' includes 'tm.h' and most 27697compiler source files include 'config.h'. The source file defines a 27698variable 'targetm', which is a structure containing pointers to 27699functions and data relating to the target machine. 'MACHINE.c' should 27700also contain their definitions, if they are not defined elsewhere in 27701GCC, and other functions called through the macros defined in the '.h' 27702file. 27703 27704* Menu: 27705 27706* Target Structure:: The 'targetm' variable. 27707* Driver:: Controlling how the driver runs the compilation passes. 27708* Run-time Target:: Defining '-m' options like '-m68000' and '-m68020'. 27709* Per-Function Data:: Defining data structures for per-function information. 27710* Storage Layout:: Defining sizes and alignments of data. 27711* Type Layout:: Defining sizes and properties of basic user data types. 27712* Registers:: Naming and describing the hardware registers. 27713* Register Classes:: Defining the classes of hardware registers. 27714* Stack and Calling:: Defining which way the stack grows and by how much. 27715* Varargs:: Defining the varargs macros. 27716* Trampolines:: Code set up at run time to enter a nested function. 27717* Library Calls:: Controlling how library routines are implicitly called. 27718* Addressing Modes:: Defining addressing modes valid for memory operands. 27719* Anchored Addresses:: Defining how '-fsection-anchors' should work. 27720* Condition Code:: Defining how insns update the condition code. 27721* Costs:: Defining relative costs of different operations. 27722* Scheduling:: Adjusting the behavior of the instruction scheduler. 27723* Sections:: Dividing storage into text, data, and other sections. 27724* PIC:: Macros for position independent code. 27725* Assembler Format:: Defining how to write insns and pseudo-ops to output. 27726* Debugging Info:: Defining the format of debugging output. 27727* Floating Point:: Handling floating point for cross-compilers. 27728* Mode Switching:: Insertion of mode-switching instructions. 27729* Target Attributes:: Defining target-specific uses of '__attribute__'. 27730* Emulated TLS:: Emulated TLS support. 27731* MIPS Coprocessors:: MIPS coprocessor support and how to customize it. 27732* PCH Target:: Validity checking for precompiled headers. 27733* C++ ABI:: Controlling C++ ABI changes. 27734* Named Address Spaces:: Adding support for named address spaces 27735* Misc:: Everything else. 27736 27737 27738File: gccint.info, Node: Target Structure, Next: Driver, Up: Target Macros 27739 2774017.1 The Global 'targetm' Variable 27741================================== 27742 27743 -- Variable: struct gcc_target targetm 27744 The target '.c' file must define the global 'targetm' variable 27745 which contains pointers to functions and data relating to the 27746 target machine. The variable is declared in 'target.h'; 27747 'target-def.h' defines the macro 'TARGET_INITIALIZER' which is used 27748 to initialize the variable, and macros for the default initializers 27749 for elements of the structure. The '.c' file should override those 27750 macros for which the default definition is inappropriate. For 27751 example: 27752 #include "target.h" 27753 #include "target-def.h" 27754 27755 /* Initialize the GCC target structure. */ 27756 27757 #undef TARGET_COMP_TYPE_ATTRIBUTES 27758 #define TARGET_COMP_TYPE_ATTRIBUTES MACHINE_comp_type_attributes 27759 27760 struct gcc_target targetm = TARGET_INITIALIZER; 27761 27762 Where a macro should be defined in the '.c' file in this manner to form 27763part of the 'targetm' structure, it is documented below as a "Target 27764Hook" with a prototype. Many macros will change in future from being 27765defined in the '.h' file to being part of the 'targetm' structure. 27766 27767 Similarly, there is a 'targetcm' variable for hooks that are specific 27768to front ends for C-family languages, documented as "C Target Hook". 27769This is declared in 'c-family/c-target.h', the initializer 27770'TARGETCM_INITIALIZER' in 'c-family/c-target-def.h'. If targets 27771initialize 'targetcm' themselves, they should set 27772'target_has_targetcm=yes' in 'config.gcc'; otherwise a default 27773definition is used. 27774 27775 Similarly, there is a 'targetm_common' variable for hooks that are 27776shared between the compiler driver and the compilers proper, documented 27777as "Common Target Hook". This is declared in 'common/common-target.h', 27778the initializer 'TARGETM_COMMON_INITIALIZER' in 27779'common/common-target-def.h'. If targets initialize 'targetm_common' 27780themselves, they should set 'target_has_targetm_common=yes' in 27781'config.gcc'; otherwise a default definition is used. 27782 27783 27784File: gccint.info, Node: Driver, Next: Run-time Target, Prev: Target Structure, Up: Target Macros 27785 2778617.2 Controlling the Compilation Driver, 'gcc' 27787============================================== 27788 27789You can control the compilation driver. 27790 27791 -- Macro: DRIVER_SELF_SPECS 27792 A list of specs for the driver itself. It should be a suitable 27793 initializer for an array of strings, with no surrounding braces. 27794 27795 The driver applies these specs to its own command line between 27796 loading default 'specs' files (but not command-line specified ones) 27797 and choosing the multilib directory or running any subcommands. It 27798 applies them in the order given, so each spec can depend on the 27799 options added by earlier ones. It is also possible to remove 27800 options using '%<OPTION' in the usual way. 27801 27802 This macro can be useful when a port has several interdependent 27803 target options. It provides a way of standardizing the command 27804 line so that the other specs are easier to write. 27805 27806 Do not define this macro if it does not need to do anything. 27807 27808 -- Macro: OPTION_DEFAULT_SPECS 27809 A list of specs used to support configure-time default options 27810 (i.e. '--with' options) in the driver. It should be a suitable 27811 initializer for an array of structures, each containing two 27812 strings, without the outermost pair of surrounding braces. 27813 27814 The first item in the pair is the name of the default. This must 27815 match the code in 'config.gcc' for the target. The second item is 27816 a spec to apply if a default with this name was specified. The 27817 string '%(VALUE)' in the spec will be replaced by the value of the 27818 default everywhere it occurs. 27819 27820 The driver will apply these specs to its own command line between 27821 loading default 'specs' files and processing 'DRIVER_SELF_SPECS', 27822 using the same mechanism as 'DRIVER_SELF_SPECS'. 27823 27824 Do not define this macro if it does not need to do anything. 27825 27826 -- Macro: CPP_SPEC 27827 A C string constant that tells the GCC driver program options to 27828 pass to CPP. It can also specify how to translate options you give 27829 to GCC into options for GCC to pass to the CPP. 27830 27831 Do not define this macro if it does not need to do anything. 27832 27833 -- Macro: CPLUSPLUS_CPP_SPEC 27834 This macro is just like 'CPP_SPEC', but is used for C++, rather 27835 than C. If you do not define this macro, then the value of 27836 'CPP_SPEC' (if any) will be used instead. 27837 27838 -- Macro: CC1_SPEC 27839 A C string constant that tells the GCC driver program options to 27840 pass to 'cc1', 'cc1plus', 'f771', and the other language front 27841 ends. It can also specify how to translate options you give to GCC 27842 into options for GCC to pass to front ends. 27843 27844 Do not define this macro if it does not need to do anything. 27845 27846 -- Macro: CC1PLUS_SPEC 27847 A C string constant that tells the GCC driver program options to 27848 pass to 'cc1plus'. It can also specify how to translate options 27849 you give to GCC into options for GCC to pass to the 'cc1plus'. 27850 27851 Do not define this macro if it does not need to do anything. Note 27852 that everything defined in CC1_SPEC is already passed to 'cc1plus' 27853 so there is no need to duplicate the contents of CC1_SPEC in 27854 CC1PLUS_SPEC. 27855 27856 -- Macro: ASM_SPEC 27857 A C string constant that tells the GCC driver program options to 27858 pass to the assembler. It can also specify how to translate 27859 options you give to GCC into options for GCC to pass to the 27860 assembler. See the file 'sun3.h' for an example of this. 27861 27862 Do not define this macro if it does not need to do anything. 27863 27864 -- Macro: ASM_FINAL_SPEC 27865 A C string constant that tells the GCC driver program how to run 27866 any programs which cleanup after the normal assembler. Normally, 27867 this is not needed. See the file 'mips.h' for an example of this. 27868 27869 Do not define this macro if it does not need to do anything. 27870 27871 -- Macro: AS_NEEDS_DASH_FOR_PIPED_INPUT 27872 Define this macro, with no value, if the driver should give the 27873 assembler an argument consisting of a single dash, '-', to instruct 27874 it to read from its standard input (which will be a pipe connected 27875 to the output of the compiler proper). This argument is given 27876 after any '-o' option specifying the name of the output file. 27877 27878 If you do not define this macro, the assembler is assumed to read 27879 its standard input if given no non-option arguments. If your 27880 assembler cannot read standard input at all, use a '%{pipe:%e}' 27881 construct; see 'mips.h' for instance. 27882 27883 -- Macro: LINK_SPEC 27884 A C string constant that tells the GCC driver program options to 27885 pass to the linker. It can also specify how to translate options 27886 you give to GCC into options for GCC to pass to the linker. 27887 27888 Do not define this macro if it does not need to do anything. 27889 27890 -- Macro: LIB_SPEC 27891 Another C string constant used much like 'LINK_SPEC'. The 27892 difference between the two is that 'LIB_SPEC' is used at the end of 27893 the command given to the linker. 27894 27895 If this macro is not defined, a default is provided that loads the 27896 standard C library from the usual place. See 'gcc.c'. 27897 27898 -- Macro: LIBGCC_SPEC 27899 Another C string constant that tells the GCC driver program how and 27900 when to place a reference to 'libgcc.a' into the linker command 27901 line. This constant is placed both before and after the value of 27902 'LIB_SPEC'. 27903 27904 If this macro is not defined, the GCC driver provides a default 27905 that passes the string '-lgcc' to the linker. 27906 27907 -- Macro: REAL_LIBGCC_SPEC 27908 By default, if 'ENABLE_SHARED_LIBGCC' is defined, the 'LIBGCC_SPEC' 27909 is not directly used by the driver program but is instead modified 27910 to refer to different versions of 'libgcc.a' depending on the 27911 values of the command line flags '-static', '-shared', 27912 '-static-libgcc', and '-shared-libgcc'. On targets where these 27913 modifications are inappropriate, define 'REAL_LIBGCC_SPEC' instead. 27914 'REAL_LIBGCC_SPEC' tells the driver how to place a reference to 27915 'libgcc' on the link command line, but, unlike 'LIBGCC_SPEC', it is 27916 used unmodified. 27917 27918 -- Macro: USE_LD_AS_NEEDED 27919 A macro that controls the modifications to 'LIBGCC_SPEC' mentioned 27920 in 'REAL_LIBGCC_SPEC'. If nonzero, a spec will be generated that 27921 uses '--as-needed' or equivalent options and the shared 'libgcc' in 27922 place of the static exception handler library, when linking without 27923 any of '-static', '-static-libgcc', or '-shared-libgcc'. 27924 27925 -- Macro: LINK_EH_SPEC 27926 If defined, this C string constant is added to 'LINK_SPEC'. When 27927 'USE_LD_AS_NEEDED' is zero or undefined, it also affects the 27928 modifications to 'LIBGCC_SPEC' mentioned in 'REAL_LIBGCC_SPEC'. 27929 27930 -- Macro: STARTFILE_SPEC 27931 Another C string constant used much like 'LINK_SPEC'. The 27932 difference between the two is that 'STARTFILE_SPEC' is used at the 27933 very beginning of the command given to the linker. 27934 27935 If this macro is not defined, a default is provided that loads the 27936 standard C startup file from the usual place. See 'gcc.c'. 27937 27938 -- Macro: ENDFILE_SPEC 27939 Another C string constant used much like 'LINK_SPEC'. The 27940 difference between the two is that 'ENDFILE_SPEC' is used at the 27941 very end of the command given to the linker. 27942 27943 Do not define this macro if it does not need to do anything. 27944 27945 -- Macro: THREAD_MODEL_SPEC 27946 GCC '-v' will print the thread model GCC was configured to use. 27947 However, this doesn't work on platforms that are multilibbed on 27948 thread models, such as AIX 4.3. On such platforms, define 27949 'THREAD_MODEL_SPEC' such that it evaluates to a string without 27950 blanks that names one of the recognized thread models. '%*', the 27951 default value of this macro, will expand to the value of 27952 'thread_file' set in 'config.gcc'. 27953 27954 -- Macro: SYSROOT_SUFFIX_SPEC 27955 Define this macro to add a suffix to the target sysroot when GCC is 27956 configured with a sysroot. This will cause GCC to search for 27957 usr/lib, et al, within sysroot+suffix. 27958 27959 -- Macro: SYSROOT_HEADERS_SUFFIX_SPEC 27960 Define this macro to add a headers_suffix to the target sysroot 27961 when GCC is configured with a sysroot. This will cause GCC to pass 27962 the updated sysroot+headers_suffix to CPP, causing it to search for 27963 usr/include, et al, within sysroot+headers_suffix. 27964 27965 -- Macro: EXTRA_SPECS 27966 Define this macro to provide additional specifications to put in 27967 the 'specs' file that can be used in various specifications like 27968 'CC1_SPEC'. 27969 27970 The definition should be an initializer for an array of structures, 27971 containing a string constant, that defines the specification name, 27972 and a string constant that provides the specification. 27973 27974 Do not define this macro if it does not need to do anything. 27975 27976 'EXTRA_SPECS' is useful when an architecture contains several 27977 related targets, which have various '..._SPECS' which are similar 27978 to each other, and the maintainer would like one central place to 27979 keep these definitions. 27980 27981 For example, the PowerPC System V.4 targets use 'EXTRA_SPECS' to 27982 define either '_CALL_SYSV' when the System V calling sequence is 27983 used or '_CALL_AIX' when the older AIX-based calling sequence is 27984 used. 27985 27986 The 'config/rs6000/rs6000.h' target file defines: 27987 27988 #define EXTRA_SPECS \ 27989 { "cpp_sysv_default", CPP_SYSV_DEFAULT }, 27990 27991 #define CPP_SYS_DEFAULT "" 27992 27993 The 'config/rs6000/sysv.h' target file defines: 27994 #undef CPP_SPEC 27995 #define CPP_SPEC \ 27996 "%{posix: -D_POSIX_SOURCE } \ 27997 %{mcall-sysv: -D_CALL_SYSV } \ 27998 %{!mcall-sysv: %(cpp_sysv_default) } \ 27999 %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" 28000 28001 #undef CPP_SYSV_DEFAULT 28002 #define CPP_SYSV_DEFAULT "-D_CALL_SYSV" 28003 28004 while the 'config/rs6000/eabiaix.h' target file defines 28005 'CPP_SYSV_DEFAULT' as: 28006 28007 #undef CPP_SYSV_DEFAULT 28008 #define CPP_SYSV_DEFAULT "-D_CALL_AIX" 28009 28010 -- Macro: LINK_LIBGCC_SPECIAL_1 28011 Define this macro if the driver program should find the library 28012 'libgcc.a'. If you do not define this macro, the driver program 28013 will pass the argument '-lgcc' to tell the linker to do the search. 28014 28015 -- Macro: LINK_GCC_C_SEQUENCE_SPEC 28016 The sequence in which libgcc and libc are specified to the linker. 28017 By default this is '%G %L %G'. 28018 28019 -- Macro: POST_LINK_SPEC 28020 Define this macro to add additional steps to be executed after 28021 linker. The default value of this macro is empty string. 28022 28023 -- Macro: LINK_COMMAND_SPEC 28024 A C string constant giving the complete command line need to 28025 execute the linker. When you do this, you will need to update your 28026 port each time a change is made to the link command line within 28027 'gcc.c'. Therefore, define this macro only if you need to 28028 completely redefine the command line for invoking the linker and 28029 there is no other way to accomplish the effect you need. 28030 Overriding this macro may be avoidable by overriding 28031 'LINK_GCC_C_SEQUENCE_SPEC' instead. 28032 28033 -- Common Target Hook: bool TARGET_ALWAYS_STRIP_DOTDOT 28034 True if '..' components should always be removed from directory 28035 names computed relative to GCC's internal directories, false 28036 (default) if such components should be preserved and directory 28037 names containing them passed to other tools such as the linker. 28038 28039 -- Macro: MULTILIB_DEFAULTS 28040 Define this macro as a C expression for the initializer of an array 28041 of string to tell the driver program which options are defaults for 28042 this target and thus do not need to be handled specially when using 28043 'MULTILIB_OPTIONS'. 28044 28045 Do not define this macro if 'MULTILIB_OPTIONS' is not defined in 28046 the target makefile fragment or if none of the options listed in 28047 'MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. 28048 28049 -- Macro: RELATIVE_PREFIX_NOT_LINKDIR 28050 Define this macro to tell 'gcc' that it should only translate a 28051 '-B' prefix into a '-L' linker option if the prefix indicates an 28052 absolute file name. 28053 28054 -- Macro: MD_EXEC_PREFIX 28055 If defined, this macro is an additional prefix to try after 28056 'STANDARD_EXEC_PREFIX'. 'MD_EXEC_PREFIX' is not searched when the 28057 compiler is built as a cross compiler. If you define 28058 'MD_EXEC_PREFIX', then be sure to add it to the list of directories 28059 used to find the assembler in 'configure.ac'. 28060 28061 -- Macro: STANDARD_STARTFILE_PREFIX 28062 Define this macro as a C string constant if you wish to override 28063 the standard choice of 'libdir' as the default prefix to try when 28064 searching for startup files such as 'crt0.o'. 28065 'STANDARD_STARTFILE_PREFIX' is not searched when the compiler is 28066 built as a cross compiler. 28067 28068 -- Macro: STANDARD_STARTFILE_PREFIX_1 28069 Define this macro as a C string constant if you wish to override 28070 the standard choice of '/lib' as a prefix to try after the default 28071 prefix when searching for startup files such as 'crt0.o'. 28072 'STANDARD_STARTFILE_PREFIX_1' is not searched when the compiler is 28073 built as a cross compiler. 28074 28075 -- Macro: STANDARD_STARTFILE_PREFIX_2 28076 Define this macro as a C string constant if you wish to override 28077 the standard choice of '/lib' as yet another prefix to try after 28078 the default prefix when searching for startup files such as 28079 'crt0.o'. 'STANDARD_STARTFILE_PREFIX_2' is not searched when the 28080 compiler is built as a cross compiler. 28081 28082 -- Macro: MD_STARTFILE_PREFIX 28083 If defined, this macro supplies an additional prefix to try after 28084 the standard prefixes. 'MD_EXEC_PREFIX' is not searched when the 28085 compiler is built as a cross compiler. 28086 28087 -- Macro: MD_STARTFILE_PREFIX_1 28088 If defined, this macro supplies yet another prefix to try after the 28089 standard prefixes. It is not searched when the compiler is built 28090 as a cross compiler. 28091 28092 -- Macro: INIT_ENVIRONMENT 28093 Define this macro as a C string constant if you wish to set 28094 environment variables for programs called by the driver, such as 28095 the assembler and loader. The driver passes the value of this 28096 macro to 'putenv' to initialize the necessary environment 28097 variables. 28098 28099 -- Macro: LOCAL_INCLUDE_DIR 28100 Define this macro as a C string constant if you wish to override 28101 the standard choice of '/usr/local/include' as the default prefix 28102 to try when searching for local header files. 'LOCAL_INCLUDE_DIR' 28103 comes before 'NATIVE_SYSTEM_HEADER_DIR' (set in 'config.gcc', 28104 normally '/usr/include') in the search order. 28105 28106 Cross compilers do not search either '/usr/local/include' or its 28107 replacement. 28108 28109 -- Macro: NATIVE_SYSTEM_HEADER_COMPONENT 28110 The "component" corresponding to 'NATIVE_SYSTEM_HEADER_DIR'. See 28111 'INCLUDE_DEFAULTS', below, for the description of components. If 28112 you do not define this macro, no component is used. 28113 28114 -- Macro: INCLUDE_DEFAULTS 28115 Define this macro if you wish to override the entire default search 28116 path for include files. For a native compiler, the default search 28117 path usually consists of 'GCC_INCLUDE_DIR', 'LOCAL_INCLUDE_DIR', 28118 'GPLUSPLUS_INCLUDE_DIR', and 'NATIVE_SYSTEM_HEADER_DIR'. In 28119 addition, 'GPLUSPLUS_INCLUDE_DIR' and 'GCC_INCLUDE_DIR' are defined 28120 automatically by 'Makefile', and specify private search areas for 28121 GCC. The directory 'GPLUSPLUS_INCLUDE_DIR' is used only for C++ 28122 programs. 28123 28124 The definition should be an initializer for an array of structures. 28125 Each array element should have four elements: the directory name (a 28126 string constant), the component name (also a string constant), a 28127 flag for C++-only directories, and a flag showing that the includes 28128 in the directory don't need to be wrapped in 'extern 'C'' when 28129 compiling C++. Mark the end of the array with a null element. 28130 28131 The component name denotes what GNU package the include file is 28132 part of, if any, in all uppercase letters. For example, it might 28133 be 'GCC' or 'BINUTILS'. If the package is part of a 28134 vendor-supplied operating system, code the component name as '0'. 28135 28136 For example, here is the definition used for VAX/VMS: 28137 28138 #define INCLUDE_DEFAULTS \ 28139 { \ 28140 { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ 28141 { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ 28142 { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ 28143 { ".", 0, 0, 0}, \ 28144 { 0, 0, 0, 0} \ 28145 } 28146 28147 Here is the order of prefixes tried for exec files: 28148 28149 1. Any prefixes specified by the user with '-B'. 28150 28151 2. The environment variable 'GCC_EXEC_PREFIX' or, if 'GCC_EXEC_PREFIX' 28152 is not set and the compiler has not been installed in the 28153 configure-time PREFIX, the location in which the compiler has 28154 actually been installed. 28155 28156 3. The directories specified by the environment variable 28157 'COMPILER_PATH'. 28158 28159 4. The macro 'STANDARD_EXEC_PREFIX', if the compiler has been 28160 installed in the configured-time PREFIX. 28161 28162 5. The location '/usr/libexec/gcc/', but only if this is a native 28163 compiler. 28164 28165 6. The location '/usr/lib/gcc/', but only if this is a native 28166 compiler. 28167 28168 7. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 28169 native compiler. 28170 28171 Here is the order of prefixes tried for startfiles: 28172 28173 1. Any prefixes specified by the user with '-B'. 28174 28175 2. The environment variable 'GCC_EXEC_PREFIX' or its automatically 28176 determined value based on the installed toolchain location. 28177 28178 3. The directories specified by the environment variable 28179 'LIBRARY_PATH' (or port-specific name; native only, cross compilers 28180 do not use this). 28181 28182 4. The macro 'STANDARD_EXEC_PREFIX', but only if the toolchain is 28183 installed in the configured PREFIX or this is a native compiler. 28184 28185 5. The location '/usr/lib/gcc/', but only if this is a native 28186 compiler. 28187 28188 6. The macro 'MD_EXEC_PREFIX', if defined, but only if this is a 28189 native compiler. 28190 28191 7. The macro 'MD_STARTFILE_PREFIX', if defined, but only if this is a 28192 native compiler, or we have a target system root. 28193 28194 8. The macro 'MD_STARTFILE_PREFIX_1', if defined, but only if this is 28195 a native compiler, or we have a target system root. 28196 28197 9. The macro 'STANDARD_STARTFILE_PREFIX', with any sysroot 28198 modifications. If this path is relative it will be prefixed by 28199 'GCC_EXEC_PREFIX' and the machine suffix or 'STANDARD_EXEC_PREFIX' 28200 and the machine suffix. 28201 28202 10. The macro 'STANDARD_STARTFILE_PREFIX_1', but only if this is a 28203 native compiler, or we have a target system root. The default for 28204 this macro is '/lib/'. 28205 28206 11. The macro 'STANDARD_STARTFILE_PREFIX_2', but only if this is a 28207 native compiler, or we have a target system root. The default for 28208 this macro is '/usr/lib/'. 28209 28210 28211File: gccint.info, Node: Run-time Target, Next: Per-Function Data, Prev: Driver, Up: Target Macros 28212 2821317.3 Run-time Target Specification 28214================================== 28215 28216Here are run-time target specifications. 28217 28218 -- Macro: TARGET_CPU_CPP_BUILTINS () 28219 This function-like macro expands to a block of code that defines 28220 built-in preprocessor macros and assertions for the target CPU, 28221 using the functions 'builtin_define', 'builtin_define_std' and 28222 'builtin_assert'. When the front end calls this macro it provides 28223 a trailing semicolon, and since it has finished command line option 28224 processing your code can use those results freely. 28225 28226 'builtin_assert' takes a string in the form you pass to the 28227 command-line option '-A', such as 'cpu=mips', and creates the 28228 assertion. 'builtin_define' takes a string in the form accepted by 28229 option '-D' and unconditionally defines the macro. 28230 28231 'builtin_define_std' takes a string representing the name of an 28232 object-like macro. If it doesn't lie in the user's namespace, 28233 'builtin_define_std' defines it unconditionally. Otherwise, it 28234 defines a version with two leading underscores, and another version 28235 with two leading and trailing underscores, and defines the original 28236 only if an ISO standard was not requested on the command line. For 28237 example, passing 'unix' defines '__unix', '__unix__' and possibly 28238 'unix'; passing '_mips' defines '__mips', '__mips__' and possibly 28239 '_mips', and passing '_ABI64' defines only '_ABI64'. 28240 28241 You can also test for the C dialect being compiled. The variable 28242 'c_language' is set to one of 'clk_c', 'clk_cplusplus' or 28243 'clk_objective_c'. Note that if we are preprocessing assembler, 28244 this variable will be 'clk_c' but the function-like macro 28245 'preprocessing_asm_p()' will return true, so you might want to 28246 check for that first. If you need to check for strict ANSI, the 28247 variable 'flag_iso' can be used. The function-like macro 28248 'preprocessing_trad_p()' can be used to check for traditional 28249 preprocessing. 28250 28251 -- Macro: TARGET_OS_CPP_BUILTINS () 28252 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 28253 and is used for the target operating system instead. 28254 28255 -- Macro: TARGET_OBJFMT_CPP_BUILTINS () 28256 Similarly to 'TARGET_CPU_CPP_BUILTINS' but this macro is optional 28257 and is used for the target object format. 'elfos.h' uses this 28258 macro to define '__ELF__', so you probably do not need to define it 28259 yourself. 28260 28261 -- Variable: extern int target_flags 28262 This variable is declared in 'options.h', which is included before 28263 any target-specific headers. 28264 28265 -- Common Target Hook: int TARGET_DEFAULT_TARGET_FLAGS 28266 This variable specifies the initial value of 'target_flags'. Its 28267 default setting is 0. 28268 28269 -- Common Target Hook: bool TARGET_HANDLE_OPTION (struct gcc_options 28270 *OPTS, struct gcc_options *OPTS_SET, const struct 28271 cl_decoded_option *DECODED, location_t LOC) 28272 This hook is called whenever the user specifies one of the 28273 target-specific options described by the '.opt' definition files 28274 (*note Options::). It has the opportunity to do some 28275 option-specific processing and should return true if the option is 28276 valid. The default definition does nothing but return true. 28277 28278 DECODED specifies the option and its arguments. OPTS and OPTS_SET 28279 are the 'gcc_options' structures to be used for storing option 28280 state, and LOC is the location at which the option was passed 28281 ('UNKNOWN_LOCATION' except for options passed via attributes). 28282 28283 -- C Target Hook: bool TARGET_HANDLE_C_OPTION (size_t CODE, const char 28284 *ARG, int VALUE) 28285 This target hook is called whenever the user specifies one of the 28286 target-specific C language family options described by the '.opt' 28287 definition files(*note Options::). It has the opportunity to do 28288 some option-specific processing and should return true if the 28289 option is valid. The arguments are like for 28290 'TARGET_HANDLE_OPTION'. The default definition does nothing but 28291 return false. 28292 28293 In general, you should use 'TARGET_HANDLE_OPTION' to handle 28294 options. However, if processing an option requires routines that 28295 are only available in the C (and related language) front ends, then 28296 you should use 'TARGET_HANDLE_C_OPTION' instead. 28297 28298 -- C Target Hook: tree TARGET_OBJC_CONSTRUCT_STRING_OBJECT (tree 28299 STRING) 28300 Targets may provide a string object type that can be used within 28301 and between C, C++ and their respective Objective-C dialects. A 28302 string object might, for example, embed encoding and length 28303 information. These objects are considered opaque to the compiler 28304 and handled as references. An ideal implementation makes the 28305 composition of the string object match that of the Objective-C 28306 'NSString' ('NXString' for GNUStep), allowing efficient 28307 interworking between C-only and Objective-C code. If a target 28308 implements string objects then this hook should return a reference 28309 to such an object constructed from the normal 'C' string 28310 representation provided in STRING. At present, the hook is used by 28311 Objective-C only, to obtain a common-format string object when the 28312 target provides one. 28313 28314 -- C Target Hook: void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE 28315 (const char *CLASSNAME) 28316 Declare that Objective C class CLASSNAME is referenced by the 28317 current TU. 28318 28319 -- C Target Hook: void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char 28320 *CLASSNAME) 28321 Declare that Objective C class CLASSNAME is defined by the current 28322 TU. 28323 28324 -- C Target Hook: bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree 28325 STRINGREF) 28326 If a target implements string objects then this hook should return 28327 'true' if STRINGREF is a valid reference to such an object. 28328 28329 -- C Target Hook: void TARGET_CHECK_STRING_OBJECT_FORMAT_ARG (tree 28330 FORMAT_ARG, tree ARGS_LIST) 28331 If a target implements string objects then this hook should should 28332 provide a facility to check the function arguments in ARGS_LIST 28333 against the format specifiers in FORMAT_ARG where the type of 28334 FORMAT_ARG is one recognized as a valid string reference type. 28335 28336 -- Target Hook: void TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE (void) 28337 This target function is similar to the hook 28338 'TARGET_OPTION_OVERRIDE' but is called when the optimize level is 28339 changed via an attribute or pragma or when it is reset at the end 28340 of the code affected by the attribute or pragma. It is not called 28341 at the beginning of compilation when 'TARGET_OPTION_OVERRIDE' is 28342 called so if you want to perform these actions then, you should 28343 have 'TARGET_OPTION_OVERRIDE' call 28344 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE'. 28345 28346 -- Macro: C_COMMON_OVERRIDE_OPTIONS 28347 This is similar to the 'TARGET_OPTION_OVERRIDE' hook but is only 28348 used in the C language frontends (C, Objective-C, C++, 28349 Objective-C++) and so can be used to alter option flag variables 28350 which only exist in those frontends. 28351 28352 -- Common Target Hook: const struct default_options * 28353 TARGET_OPTION_OPTIMIZATION_TABLE 28354 Some machines may desire to change what optimizations are performed 28355 for various optimization levels. This variable, if defined, 28356 describes options to enable at particular sets of optimization 28357 levels. These options are processed once just after the 28358 optimization level is determined and before the remainder of the 28359 command options have been parsed, so may be overridden by other 28360 options passed explicitly. 28361 28362 This processing is run once at program startup and when the 28363 optimization options are changed via '#pragma GCC optimize' or by 28364 using the 'optimize' attribute. 28365 28366 -- Common Target Hook: void TARGET_OPTION_INIT_STRUCT (struct 28367 gcc_options *OPTS) 28368 Set target-dependent initial values of fields in OPTS. 28369 28370 -- Common Target Hook: void TARGET_OPTION_DEFAULT_PARAMS (void) 28371 Set target-dependent default values for '--param' settings, using 28372 calls to 'set_default_param_value'. 28373 28374 -- Macro: SWITCHABLE_TARGET 28375 Some targets need to switch between substantially different 28376 subtargets during compilation. For example, the MIPS target has 28377 one subtarget for the traditional MIPS architecture and another for 28378 MIPS16. Source code can switch between these two subarchitectures 28379 using the 'mips16' and 'nomips16' attributes. 28380 28381 Such subtargets can differ in things like the set of available 28382 registers, the set of available instructions, the costs of various 28383 operations, and so on. GCC caches a lot of this type of 28384 information in global variables, and recomputing them for each 28385 subtarget takes a significant amount of time. The compiler 28386 therefore provides a facility for maintaining several versions of 28387 the global variables and quickly switching between them; see 28388 'target-globals.h' for details. 28389 28390 Define this macro to 1 if your target needs this facility. The 28391 default is 0. 28392 28393 -- Target Hook: bool TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P 28394 (void) 28395 Returns true if the target supports IEEE 754 floating-point 28396 exceptions and rounding modes, false otherwise. This is intended 28397 to relate to the 'float' and 'double' types, but not necessarily 28398 'long double'. By default, returns true if the 'adddf3' 28399 instruction pattern is available and false otherwise, on the 28400 assumption that hardware floating point supports exceptions and 28401 rounding modes but software floating point does not. 28402 28403 28404File: gccint.info, Node: Per-Function Data, Next: Storage Layout, Prev: Run-time Target, Up: Target Macros 28405 2840617.4 Defining data structures for per-function information. 28407=========================================================== 28408 28409If the target needs to store information on a per-function basis, GCC 28410provides a macro and a couple of variables to allow this. Note, just 28411using statics to store the information is a bad idea, since GCC supports 28412nested functions, so you can be halfway through encoding one function 28413when another one comes along. 28414 28415 GCC defines a data structure called 'struct function' which contains 28416all of the data specific to an individual function. This structure 28417contains a field called 'machine' whose type is 'struct machine_function 28418*', which can be used by targets to point to their own specific data. 28419 28420 If a target needs per-function specific data it should define the type 28421'struct machine_function' and also the macro 'INIT_EXPANDERS'. This 28422macro should be used to initialize the function pointer 28423'init_machine_status'. This pointer is explained below. 28424 28425 One typical use of per-function, target specific data is to create an 28426RTX to hold the register containing the function's return address. This 28427RTX can then be used to implement the '__builtin_return_address' 28428function, for level 0. 28429 28430 Note--earlier implementations of GCC used a single data area to hold 28431all of the per-function information. Thus when processing of a nested 28432function began the old per-function data had to be pushed onto a stack, 28433and when the processing was finished, it had to be popped off the stack. 28434GCC used to provide function pointers called 'save_machine_status' and 28435'restore_machine_status' to handle the saving and restoring of the 28436target specific information. Since the single data area approach is no 28437longer used, these pointers are no longer supported. 28438 28439 -- Macro: INIT_EXPANDERS 28440 Macro called to initialize any target specific information. This 28441 macro is called once per function, before generation of any RTL has 28442 begun. The intention of this macro is to allow the initialization 28443 of the function pointer 'init_machine_status'. 28444 28445 -- Variable: void (*)(struct function *) init_machine_status 28446 If this function pointer is non-'NULL' it will be called once per 28447 function, before function compilation starts, in order to allow the 28448 target to perform any target specific initialization of the 'struct 28449 function' structure. It is intended that this would be used to 28450 initialize the 'machine' of that structure. 28451 28452 'struct machine_function' structures are expected to be freed by 28453 GC. Generally, any memory that they reference must be allocated by 28454 using GC allocation, including the structure itself. 28455 28456 28457File: gccint.info, Node: Storage Layout, Next: Type Layout, Prev: Per-Function Data, Up: Target Macros 28458 2845917.5 Storage Layout 28460=================== 28461 28462Note that the definitions of the macros in this table which are sizes or 28463alignments measured in bits do not need to be constant. They can be C 28464expressions that refer to static variables, such as the 'target_flags'. 28465*Note Run-time Target::. 28466 28467 -- Macro: BITS_BIG_ENDIAN 28468 Define this macro to have the value 1 if the most significant bit 28469 in a byte has the lowest number; otherwise define it to have the 28470 value zero. This means that bit-field instructions count from the 28471 most significant bit. If the machine has no bit-field 28472 instructions, then this must still be defined, but it doesn't 28473 matter which value it is defined to. This macro need not be a 28474 constant. 28475 28476 This macro does not affect the way structure fields are packed into 28477 bytes or words; that is controlled by 'BYTES_BIG_ENDIAN'. 28478 28479 -- Macro: BYTES_BIG_ENDIAN 28480 Define this macro to have the value 1 if the most significant byte 28481 in a word has the lowest number. This macro need not be a 28482 constant. 28483 28484 -- Macro: WORDS_BIG_ENDIAN 28485 Define this macro to have the value 1 if, in a multiword object, 28486 the most significant word has the lowest number. This applies to 28487 both memory locations and registers; see 'REG_WORDS_BIG_ENDIAN' if 28488 the order of words in memory is not the same as the order in 28489 registers. This macro need not be a constant. 28490 28491 -- Macro: REG_WORDS_BIG_ENDIAN 28492 On some machines, the order of words in a multiword object differs 28493 between registers in memory. In such a situation, define this 28494 macro to describe the order of words in a register. The macro 28495 'WORDS_BIG_ENDIAN' controls the order of words in memory. 28496 28497 -- Macro: FLOAT_WORDS_BIG_ENDIAN 28498 Define this macro to have the value 1 if 'DFmode', 'XFmode' or 28499 'TFmode' floating point numbers are stored in memory with the word 28500 containing the sign bit at the lowest address; otherwise define it 28501 to have the value 0. This macro need not be a constant. 28502 28503 You need not define this macro if the ordering is the same as for 28504 multi-word integers. 28505 28506 -- Macro: BITS_PER_WORD 28507 Number of bits in a word. If you do not define this macro, the 28508 default is 'BITS_PER_UNIT * UNITS_PER_WORD'. 28509 28510 -- Macro: MAX_BITS_PER_WORD 28511 Maximum number of bits in a word. If this is undefined, the 28512 default is 'BITS_PER_WORD'. Otherwise, it is the constant value 28513 that is the largest value that 'BITS_PER_WORD' can have at 28514 run-time. 28515 28516 -- Macro: UNITS_PER_WORD 28517 Number of storage units in a word; normally the size of a 28518 general-purpose register, a power of two from 1 or 8. 28519 28520 -- Macro: MIN_UNITS_PER_WORD 28521 Minimum number of units in a word. If this is undefined, the 28522 default is 'UNITS_PER_WORD'. Otherwise, it is the constant value 28523 that is the smallest value that 'UNITS_PER_WORD' can have at 28524 run-time. 28525 28526 -- Macro: POINTER_SIZE 28527 Width of a pointer, in bits. You must specify a value no wider 28528 than the width of 'Pmode'. If it is not equal to the width of 28529 'Pmode', you must define 'POINTERS_EXTEND_UNSIGNED'. If you do not 28530 specify a value the default is 'BITS_PER_WORD'. 28531 28532 -- Macro: POINTERS_EXTEND_UNSIGNED 28533 A C expression that determines how pointers should be extended from 28534 'ptr_mode' to either 'Pmode' or 'word_mode'. It is greater than 28535 zero if pointers should be zero-extended, zero if they should be 28536 sign-extended, and negative if some other sort of conversion is 28537 needed. In the last case, the extension is done by the target's 28538 'ptr_extend' instruction. 28539 28540 You need not define this macro if the 'ptr_mode', 'Pmode' and 28541 'word_mode' are all the same width. 28542 28543 -- Macro: PROMOTE_MODE (M, UNSIGNEDP, TYPE) 28544 A macro to update M and UNSIGNEDP when an object whose type is TYPE 28545 and which has the specified mode and signedness is to be stored in 28546 a register. This macro is only called when TYPE is a scalar type. 28547 28548 On most RISC machines, which only have operations that operate on a 28549 full register, define this macro to set M to 'word_mode' if M is an 28550 integer mode narrower than 'BITS_PER_WORD'. In most cases, only 28551 integer modes should be widened because wider-precision 28552 floating-point operations are usually more expensive than their 28553 narrower counterparts. 28554 28555 For most machines, the macro definition does not change UNSIGNEDP. 28556 However, some machines, have instructions that preferentially 28557 handle either signed or unsigned quantities of certain modes. For 28558 example, on the DEC Alpha, 32-bit loads from memory and 32-bit add 28559 instructions sign-extend the result to 64 bits. On such machines, 28560 set UNSIGNEDP according to which kind of extension is more 28561 efficient. 28562 28563 Do not define this macro if it would never modify M. 28564 28565 -- Target Hook: machine_mode TARGET_PROMOTE_FUNCTION_MODE (const_tree 28566 TYPE, machine_mode MODE, int *PUNSIGNEDP, const_tree FUNTYPE, 28567 int FOR_RETURN) 28568 Like 'PROMOTE_MODE', but it is applied to outgoing function 28569 arguments or function return values. The target hook should return 28570 the new mode and possibly change '*PUNSIGNEDP' if the promotion 28571 should change signedness. This function is called only for scalar 28572 _or pointer_ types. 28573 28574 FOR_RETURN allows to distinguish the promotion of arguments and 28575 return values. If it is '1', a return value is being promoted and 28576 'TARGET_FUNCTION_VALUE' must perform the same promotions done here. 28577 If it is '2', the returned mode should be that of the register in 28578 which an incoming parameter is copied, or the outgoing result is 28579 computed; then the hook should return the same mode as 28580 'promote_mode', though the signedness may be different. 28581 28582 TYPE can be NULL when promoting function arguments of libcalls. 28583 28584 The default is to not promote arguments and return values. You can 28585 also define the hook to 28586 'default_promote_function_mode_always_promote' if you would like to 28587 apply the same rules given by 'PROMOTE_MODE'. 28588 28589 -- Macro: PARM_BOUNDARY 28590 Normal alignment required for function parameters on the stack, in 28591 bits. All stack parameters receive at least this much alignment 28592 regardless of data type. On most machines, this is the same as the 28593 size of an integer. 28594 28595 -- Macro: STACK_BOUNDARY 28596 Define this macro to the minimum alignment enforced by hardware for 28597 the stack pointer on this machine. The definition is a C 28598 expression for the desired alignment (measured in bits). This 28599 value is used as a default if 'PREFERRED_STACK_BOUNDARY' is not 28600 defined. On most machines, this should be the same as 28601 'PARM_BOUNDARY'. 28602 28603 -- Macro: PREFERRED_STACK_BOUNDARY 28604 Define this macro if you wish to preserve a certain alignment for 28605 the stack pointer, greater than what the hardware enforces. The 28606 definition is a C expression for the desired alignment (measured in 28607 bits). This macro must evaluate to a value equal to or larger than 28608 'STACK_BOUNDARY'. 28609 28610 -- Macro: INCOMING_STACK_BOUNDARY 28611 Define this macro if the incoming stack boundary may be different 28612 from 'PREFERRED_STACK_BOUNDARY'. This macro must evaluate to a 28613 value equal to or larger than 'STACK_BOUNDARY'. 28614 28615 -- Macro: FUNCTION_BOUNDARY 28616 Alignment required for a function entry point, in bits. 28617 28618 -- Macro: BIGGEST_ALIGNMENT 28619 Biggest alignment that any data type can require on this machine, 28620 in bits. Note that this is not the biggest alignment that is 28621 supported, just the biggest alignment that, when violated, may 28622 cause a fault. 28623 28624 -- Target Hook: HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT 28625 If defined, this target hook specifies the absolute biggest 28626 alignment that a type or variable can have on this machine, 28627 otherwise, 'BIGGEST_ALIGNMENT' is used. 28628 28629 -- Macro: MALLOC_ABI_ALIGNMENT 28630 Alignment, in bits, a C conformant malloc implementation has to 28631 provide. If not defined, the default value is 'BITS_PER_WORD'. 28632 28633 -- Macro: ATTRIBUTE_ALIGNED_VALUE 28634 Alignment used by the '__attribute__ ((aligned))' construct. If 28635 not defined, the default value is 'BIGGEST_ALIGNMENT'. 28636 28637 -- Macro: MINIMUM_ATOMIC_ALIGNMENT 28638 If defined, the smallest alignment, in bits, that can be given to 28639 an object that can be referenced in one operation, without 28640 disturbing any nearby object. Normally, this is 'BITS_PER_UNIT', 28641 but may be larger on machines that don't have byte or half-word 28642 store operations. 28643 28644 -- Macro: BIGGEST_FIELD_ALIGNMENT 28645 Biggest alignment that any structure or union field can require on 28646 this machine, in bits. If defined, this overrides 28647 'BIGGEST_ALIGNMENT' for structure and union fields only, unless the 28648 field alignment has been set by the '__attribute__ ((aligned (N)))' 28649 construct. 28650 28651 -- Macro: ADJUST_FIELD_ALIGN (FIELD, COMPUTED) 28652 An expression for the alignment of a structure field FIELD if the 28653 alignment computed in the usual way (including applying of 28654 'BIGGEST_ALIGNMENT' and 'BIGGEST_FIELD_ALIGNMENT' to the alignment) 28655 is COMPUTED. It overrides alignment only if the field alignment 28656 has not been set by the '__attribute__ ((aligned (N)))' construct. 28657 28658 -- Macro: MAX_STACK_ALIGNMENT 28659 Biggest stack alignment guaranteed by the backend. Use this macro 28660 to specify the maximum alignment of a variable on stack. 28661 28662 If not defined, the default value is 'STACK_BOUNDARY'. 28663 28664 -- Macro: MAX_OFILE_ALIGNMENT 28665 Biggest alignment supported by the object file format of this 28666 machine. Use this macro to limit the alignment which can be 28667 specified using the '__attribute__ ((aligned (N)))' construct. If 28668 not defined, the default value is 'BIGGEST_ALIGNMENT'. 28669 28670 On systems that use ELF, the default (in 'config/elfos.h') is the 28671 largest supported 32-bit ELF section alignment representable on a 28672 32-bit host e.g. '(((uint64_t) 1 << 28) * 8)'. On 32-bit ELF the 28673 largest supported section alignment in bits is '(0x80000000 * 8)', 28674 but this is not representable on 32-bit hosts. 28675 28676 -- Macro: DATA_ALIGNMENT (TYPE, BASIC-ALIGN) 28677 If defined, a C expression to compute the alignment for a variable 28678 in the static store. TYPE is the data type, and BASIC-ALIGN is the 28679 alignment that the object would ordinarily have. The value of this 28680 macro is used instead of that alignment to align the object. 28681 28682 If this macro is not defined, then BASIC-ALIGN is used. 28683 28684 One use of this macro is to increase alignment of medium-size data 28685 to make it all fit in fewer cache lines. Another is to cause 28686 character arrays to be word-aligned so that 'strcpy' calls that 28687 copy constants to character arrays can be done inline. 28688 28689 -- Macro: DATA_ABI_ALIGNMENT (TYPE, BASIC-ALIGN) 28690 Similar to 'DATA_ALIGNMENT', but for the cases where the ABI 28691 mandates some alignment increase, instead of optimization only 28692 purposes. E.g. AMD x86-64 psABI says that variables with array 28693 type larger than 15 bytes must be aligned to 16 byte boundaries. 28694 28695 If this macro is not defined, then BASIC-ALIGN is used. 28696 28697 -- Macro: CONSTANT_ALIGNMENT (CONSTANT, BASIC-ALIGN) 28698 If defined, a C expression to compute the alignment given to a 28699 constant that is being placed in memory. CONSTANT is the constant 28700 and BASIC-ALIGN is the alignment that the object would ordinarily 28701 have. The value of this macro is used instead of that alignment to 28702 align the object. 28703 28704 The default definition just returns BASIC-ALIGN. 28705 28706 The typical use of this macro is to increase alignment for string 28707 constants to be word aligned so that 'strcpy' calls that copy 28708 constants can be done inline. 28709 28710 -- Macro: LOCAL_ALIGNMENT (TYPE, BASIC-ALIGN) 28711 If defined, a C expression to compute the alignment for a variable 28712 in the local store. TYPE is the data type, and BASIC-ALIGN is the 28713 alignment that the object would ordinarily have. The value of this 28714 macro is used instead of that alignment to align the object. 28715 28716 If this macro is not defined, then BASIC-ALIGN is used. 28717 28718 One use of this macro is to increase alignment of medium-size data 28719 to make it all fit in fewer cache lines. 28720 28721 If the value of this macro has a type, it should be an unsigned 28722 type. 28723 28724 -- Target Hook: HOST_WIDE_INT TARGET_VECTOR_ALIGNMENT (const_tree TYPE) 28725 This hook can be used to define the alignment for a vector of type 28726 TYPE, in order to comply with a platform ABI. The default is to 28727 require natural alignment for vector types. The alignment returned 28728 by this hook must be a power-of-two multiple of the default 28729 alignment of the vector element type. 28730 28731 -- Macro: STACK_SLOT_ALIGNMENT (TYPE, MODE, BASIC-ALIGN) 28732 If defined, a C expression to compute the alignment for stack slot. 28733 TYPE is the data type, MODE is the widest mode available, and 28734 BASIC-ALIGN is the alignment that the slot would ordinarily have. 28735 The value of this macro is used instead of that alignment to align 28736 the slot. 28737 28738 If this macro is not defined, then BASIC-ALIGN is used when TYPE is 28739 'NULL'. Otherwise, 'LOCAL_ALIGNMENT' will be used. 28740 28741 This macro is to set alignment of stack slot to the maximum 28742 alignment of all possible modes which the slot may have. 28743 28744 If the value of this macro has a type, it should be an unsigned 28745 type. 28746 28747 -- Macro: LOCAL_DECL_ALIGNMENT (DECL) 28748 If defined, a C expression to compute the alignment for a local 28749 variable DECL. 28750 28751 If this macro is not defined, then 'LOCAL_ALIGNMENT (TREE_TYPE 28752 (DECL), DECL_ALIGN (DECL))' is used. 28753 28754 One use of this macro is to increase alignment of medium-size data 28755 to make it all fit in fewer cache lines. 28756 28757 If the value of this macro has a type, it should be an unsigned 28758 type. 28759 28760 -- Macro: MINIMUM_ALIGNMENT (EXP, MODE, ALIGN) 28761 If defined, a C expression to compute the minimum required 28762 alignment for dynamic stack realignment purposes for EXP (a type or 28763 decl), MODE, assuming normal alignment ALIGN. 28764 28765 If this macro is not defined, then ALIGN will be used. 28766 28767 -- Macro: EMPTY_FIELD_BOUNDARY 28768 Alignment in bits to be given to a structure bit-field that follows 28769 an empty field such as 'int : 0;'. 28770 28771 If 'PCC_BITFIELD_TYPE_MATTERS' is true, it overrides this macro. 28772 28773 -- Macro: STRUCTURE_SIZE_BOUNDARY 28774 Number of bits which any structure or union's size must be a 28775 multiple of. Each structure or union's size is rounded up to a 28776 multiple of this. 28777 28778 If you do not define this macro, the default is the same as 28779 'BITS_PER_UNIT'. 28780 28781 -- Macro: STRICT_ALIGNMENT 28782 Define this macro to be the value 1 if instructions will fail to 28783 work if given data not on the nominal alignment. If instructions 28784 will merely go slower in that case, define this macro as 0. 28785 28786 -- Macro: PCC_BITFIELD_TYPE_MATTERS 28787 Define this if you wish to imitate the way many other C compilers 28788 handle alignment of bit-fields and the structures that contain 28789 them. 28790 28791 The behavior is that the type written for a named bit-field ('int', 28792 'short', or other integer type) imposes an alignment for the entire 28793 structure, as if the structure really did contain an ordinary field 28794 of that type. In addition, the bit-field is placed within the 28795 structure so that it would fit within such a field, not crossing a 28796 boundary for it. 28797 28798 Thus, on most machines, a named bit-field whose type is written as 28799 'int' would not cross a four-byte boundary, and would force 28800 four-byte alignment for the whole structure. (The alignment used 28801 may not be four bytes; it is controlled by the other alignment 28802 parameters.) 28803 28804 An unnamed bit-field will not affect the alignment of the 28805 containing structure. 28806 28807 If the macro is defined, its definition should be a C expression; a 28808 nonzero value for the expression enables this behavior. 28809 28810 Note that if this macro is not defined, or its value is zero, some 28811 bit-fields may cross more than one alignment boundary. The 28812 compiler can support such references if there are 'insv', 'extv', 28813 and 'extzv' insns that can directly reference memory. 28814 28815 The other known way of making bit-fields work is to define 28816 'STRUCTURE_SIZE_BOUNDARY' as large as 'BIGGEST_ALIGNMENT'. Then 28817 every structure can be accessed with fullwords. 28818 28819 Unless the machine has bit-field instructions or you define 28820 'STRUCTURE_SIZE_BOUNDARY' that way, you must define 28821 'PCC_BITFIELD_TYPE_MATTERS' to have a nonzero value. 28822 28823 If your aim is to make GCC use the same conventions for laying out 28824 bit-fields as are used by another compiler, here is how to 28825 investigate what the other compiler does. Compile and run this 28826 program: 28827 28828 struct foo1 28829 { 28830 char x; 28831 char :0; 28832 char y; 28833 }; 28834 28835 struct foo2 28836 { 28837 char x; 28838 int :0; 28839 char y; 28840 }; 28841 28842 main () 28843 { 28844 printf ("Size of foo1 is %d\n", 28845 sizeof (struct foo1)); 28846 printf ("Size of foo2 is %d\n", 28847 sizeof (struct foo2)); 28848 exit (0); 28849 } 28850 28851 If this prints 2 and 5, then the compiler's behavior is what you 28852 would get from 'PCC_BITFIELD_TYPE_MATTERS'. 28853 28854 -- Macro: BITFIELD_NBYTES_LIMITED 28855 Like 'PCC_BITFIELD_TYPE_MATTERS' except that its effect is limited 28856 to aligning a bit-field within the structure. 28857 28858 -- Target Hook: bool TARGET_ALIGN_ANON_BITFIELD (void) 28859 When 'PCC_BITFIELD_TYPE_MATTERS' is true this hook will determine 28860 whether unnamed bitfields affect the alignment of the containing 28861 structure. The hook should return true if the structure should 28862 inherit the alignment requirements of an unnamed bitfield's type. 28863 28864 -- Target Hook: bool TARGET_NARROW_VOLATILE_BITFIELD (void) 28865 This target hook should return 'true' if accesses to volatile 28866 bitfields should use the narrowest mode possible. It should return 28867 'false' if these accesses should use the bitfield container type. 28868 28869 The default is 'false'. 28870 28871 -- Target Hook: bool TARGET_MEMBER_TYPE_FORCES_BLK (const_tree FIELD, 28872 machine_mode MODE) 28873 Return true if a structure, union or array containing FIELD should 28874 be accessed using 'BLKMODE'. 28875 28876 If FIELD is the only field in the structure, MODE is its mode, 28877 otherwise MODE is VOIDmode. MODE is provided in the case where 28878 structures of one field would require the structure's mode to 28879 retain the field's mode. 28880 28881 Normally, this is not needed. 28882 28883 -- Macro: ROUND_TYPE_ALIGN (TYPE, COMPUTED, SPECIFIED) 28884 Define this macro as an expression for the alignment of a type 28885 (given by TYPE as a tree node) if the alignment computed in the 28886 usual way is COMPUTED and the alignment explicitly specified was 28887 SPECIFIED. 28888 28889 The default is to use SPECIFIED if it is larger; otherwise, use the 28890 smaller of COMPUTED and 'BIGGEST_ALIGNMENT' 28891 28892 -- Macro: MAX_FIXED_MODE_SIZE 28893 An integer expression for the size in bits of the largest integer 28894 machine mode that should actually be used. All integer machine 28895 modes of this size or smaller can be used for structures and unions 28896 with the appropriate sizes. If this macro is undefined, 28897 'GET_MODE_BITSIZE (DImode)' is assumed. 28898 28899 -- Macro: STACK_SAVEAREA_MODE (SAVE_LEVEL) 28900 If defined, an expression of type 'machine_mode' that specifies the 28901 mode of the save area operand of a 'save_stack_LEVEL' named pattern 28902 (*note Standard Names::). SAVE_LEVEL is one of 'SAVE_BLOCK', 28903 'SAVE_FUNCTION', or 'SAVE_NONLOCAL' and selects which of the three 28904 named patterns is having its mode specified. 28905 28906 You need not define this macro if it always returns 'Pmode'. You 28907 would most commonly define this macro if the 'save_stack_LEVEL' 28908 patterns need to support both a 32- and a 64-bit mode. 28909 28910 -- Macro: STACK_SIZE_MODE 28911 If defined, an expression of type 'machine_mode' that specifies the 28912 mode of the size increment operand of an 'allocate_stack' named 28913 pattern (*note Standard Names::). 28914 28915 You need not define this macro if it always returns 'word_mode'. 28916 You would most commonly define this macro if the 'allocate_stack' 28917 pattern needs to support both a 32- and a 64-bit mode. 28918 28919 -- Target Hook: machine_mode TARGET_LIBGCC_CMP_RETURN_MODE (void) 28920 This target hook should return the mode to be used for the return 28921 value of compare instructions expanded to libgcc calls. If not 28922 defined 'word_mode' is returned which is the right choice for a 28923 majority of targets. 28924 28925 -- Target Hook: machine_mode TARGET_LIBGCC_SHIFT_COUNT_MODE (void) 28926 This target hook should return the mode to be used for the shift 28927 count operand of shift instructions expanded to libgcc calls. If 28928 not defined 'word_mode' is returned which is the right choice for a 28929 majority of targets. 28930 28931 -- Target Hook: machine_mode TARGET_UNWIND_WORD_MODE (void) 28932 Return machine mode to be used for '_Unwind_Word' type. The 28933 default is to use 'word_mode'. 28934 28935 -- Target Hook: bool TARGET_MS_BITFIELD_LAYOUT_P (const_tree 28936 RECORD_TYPE) 28937 This target hook returns 'true' if bit-fields in the given 28938 RECORD_TYPE are to be laid out following the rules of Microsoft 28939 Visual C/C++, namely: (i) a bit-field won't share the same storage 28940 unit with the previous bit-field if their underlying types have 28941 different sizes, and the bit-field will be aligned to the highest 28942 alignment of the underlying types of itself and of the previous 28943 bit-field; (ii) a zero-sized bit-field will affect the alignment of 28944 the whole enclosing structure, even if it is unnamed; except that 28945 (iii) a zero-sized bit-field will be disregarded unless it follows 28946 another bit-field of nonzero size. If this hook returns 'true', 28947 other macros that control bit-field layout are ignored. 28948 28949 When a bit-field is inserted into a packed record, the whole size 28950 of the underlying type is used by one or more same-size adjacent 28951 bit-fields (that is, if its long:3, 32 bits is used in the record, 28952 and any additional adjacent long bit-fields are packed into the 28953 same chunk of 32 bits. However, if the size changes, a new field 28954 of that size is allocated). In an unpacked record, this is the 28955 same as using alignment, but not equivalent when packing. 28956 28957 If both MS bit-fields and '__attribute__((packed))' are used, the 28958 latter will take precedence. If '__attribute__((packed))' is used 28959 on a single field when MS bit-fields are in use, it will take 28960 precedence for that field, but the alignment of the rest of the 28961 structure may affect its placement. 28962 28963 -- Target Hook: bool TARGET_DECIMAL_FLOAT_SUPPORTED_P (void) 28964 Returns true if the target supports decimal floating point. 28965 28966 -- Target Hook: bool TARGET_FIXED_POINT_SUPPORTED_P (void) 28967 Returns true if the target supports fixed-point arithmetic. 28968 28969 -- Target Hook: void TARGET_EXPAND_TO_RTL_HOOK (void) 28970 This hook is called just before expansion into rtl, allowing the 28971 target to perform additional initializations or analysis before the 28972 expansion. For example, the rs6000 port uses it to allocate a 28973 scratch stack slot for use in copying SDmode values between memory 28974 and floating point registers whenever the function being expanded 28975 has any SDmode usage. 28976 28977 -- Target Hook: void TARGET_INSTANTIATE_DECLS (void) 28978 This hook allows the backend to perform additional instantiations 28979 on rtl that are not actually in any insns yet, but will be later. 28980 28981 -- Target Hook: const char * TARGET_MANGLE_TYPE (const_tree TYPE) 28982 If your target defines any fundamental types, or any types your 28983 target uses should be mangled differently from the default, define 28984 this hook to return the appropriate encoding for these types as 28985 part of a C++ mangled name. The TYPE argument is the tree 28986 structure representing the type to be mangled. The hook may be 28987 applied to trees which are not target-specific fundamental types; 28988 it should return 'NULL' for all such types, as well as arguments it 28989 does not recognize. If the return value is not 'NULL', it must 28990 point to a statically-allocated string constant. 28991 28992 Target-specific fundamental types might be new fundamental types or 28993 qualified versions of ordinary fundamental types. Encode new 28994 fundamental types as 'u N NAME', where NAME is the name used for 28995 the type in source code, and N is the length of NAME in decimal. 28996 Encode qualified versions of ordinary types as 'U N NAME CODE', 28997 where NAME is the name used for the type qualifier in source code, 28998 N is the length of NAME as above, and CODE is the code used to 28999 represent the unqualified version of this type. (See 29000 'write_builtin_type' in 'cp/mangle.c' for the list of codes.) In 29001 both cases the spaces are for clarity; do not include any spaces in 29002 your string. 29003 29004 This hook is applied to types prior to typedef resolution. If the 29005 mangled name for a particular type depends only on that type's main 29006 variant, you can perform typedef resolution yourself using 29007 'TYPE_MAIN_VARIANT' before mangling. 29008 29009 The default version of this hook always returns 'NULL', which is 29010 appropriate for a target that does not define any new fundamental 29011 types. 29012 29013 29014File: gccint.info, Node: Type Layout, Next: Registers, Prev: Storage Layout, Up: Target Macros 29015 2901617.6 Layout of Source Language Data Types 29017========================================= 29018 29019These macros define the sizes and other characteristics of the standard 29020basic data types used in programs being compiled. Unlike the macros in 29021the previous section, these apply to specific features of C and related 29022languages, rather than to fundamental aspects of storage layout. 29023 29024 -- Macro: INT_TYPE_SIZE 29025 A C expression for the size in bits of the type 'int' on the target 29026 machine. If you don't define this, the default is one word. 29027 29028 -- Macro: SHORT_TYPE_SIZE 29029 A C expression for the size in bits of the type 'short' on the 29030 target machine. If you don't define this, the default is half a 29031 word. (If this would be less than one storage unit, it is rounded 29032 up to one unit.) 29033 29034 -- Macro: LONG_TYPE_SIZE 29035 A C expression for the size in bits of the type 'long' on the 29036 target machine. If you don't define this, the default is one word. 29037 29038 -- Macro: ADA_LONG_TYPE_SIZE 29039 On some machines, the size used for the Ada equivalent of the type 29040 'long' by a native Ada compiler differs from that used by C. In 29041 that situation, define this macro to be a C expression to be used 29042 for the size of that type. If you don't define this, the default 29043 is the value of 'LONG_TYPE_SIZE'. 29044 29045 -- Macro: LONG_LONG_TYPE_SIZE 29046 A C expression for the size in bits of the type 'long long' on the 29047 target machine. If you don't define this, the default is two 29048 words. If you want to support GNU Ada on your machine, the value 29049 of this macro must be at least 64. 29050 29051 -- Macro: CHAR_TYPE_SIZE 29052 A C expression for the size in bits of the type 'char' on the 29053 target machine. If you don't define this, the default is 29054 'BITS_PER_UNIT'. 29055 29056 -- Macro: BOOL_TYPE_SIZE 29057 A C expression for the size in bits of the C++ type 'bool' and C99 29058 type '_Bool' on the target machine. If you don't define this, and 29059 you probably shouldn't, the default is 'CHAR_TYPE_SIZE'. 29060 29061 -- Macro: FLOAT_TYPE_SIZE 29062 A C expression for the size in bits of the type 'float' on the 29063 target machine. If you don't define this, the default is one word. 29064 29065 -- Macro: DOUBLE_TYPE_SIZE 29066 A C expression for the size in bits of the type 'double' on the 29067 target machine. If you don't define this, the default is two 29068 words. 29069 29070 -- Macro: LONG_DOUBLE_TYPE_SIZE 29071 A C expression for the size in bits of the type 'long double' on 29072 the target machine. If you don't define this, the default is two 29073 words. 29074 29075 -- Macro: SHORT_FRACT_TYPE_SIZE 29076 A C expression for the size in bits of the type 'short _Fract' on 29077 the target machine. If you don't define this, the default is 29078 'BITS_PER_UNIT'. 29079 29080 -- Macro: FRACT_TYPE_SIZE 29081 A C expression for the size in bits of the type '_Fract' on the 29082 target machine. If you don't define this, the default is 29083 'BITS_PER_UNIT * 2'. 29084 29085 -- Macro: LONG_FRACT_TYPE_SIZE 29086 A C expression for the size in bits of the type 'long _Fract' on 29087 the target machine. If you don't define this, the default is 29088 'BITS_PER_UNIT * 4'. 29089 29090 -- Macro: LONG_LONG_FRACT_TYPE_SIZE 29091 A C expression for the size in bits of the type 'long long _Fract' 29092 on the target machine. If you don't define this, the default is 29093 'BITS_PER_UNIT * 8'. 29094 29095 -- Macro: SHORT_ACCUM_TYPE_SIZE 29096 A C expression for the size in bits of the type 'short _Accum' on 29097 the target machine. If you don't define this, the default is 29098 'BITS_PER_UNIT * 2'. 29099 29100 -- Macro: ACCUM_TYPE_SIZE 29101 A C expression for the size in bits of the type '_Accum' on the 29102 target machine. If you don't define this, the default is 29103 'BITS_PER_UNIT * 4'. 29104 29105 -- Macro: LONG_ACCUM_TYPE_SIZE 29106 A C expression for the size in bits of the type 'long _Accum' on 29107 the target machine. If you don't define this, the default is 29108 'BITS_PER_UNIT * 8'. 29109 29110 -- Macro: LONG_LONG_ACCUM_TYPE_SIZE 29111 A C expression for the size in bits of the type 'long long _Accum' 29112 on the target machine. If you don't define this, the default is 29113 'BITS_PER_UNIT * 16'. 29114 29115 -- Macro: LIBGCC2_GNU_PREFIX 29116 This macro corresponds to the 'TARGET_LIBFUNC_GNU_PREFIX' target 29117 hook and should be defined if that hook is overriden to be true. 29118 It causes function names in libgcc to be changed to use a '__gnu_' 29119 prefix for their name rather than the default '__'. A port which 29120 uses this macro should also arrange to use 't-gnu-prefix' in the 29121 libgcc 'config.host'. 29122 29123 -- Macro: TARGET_FLT_EVAL_METHOD 29124 A C expression for the value for 'FLT_EVAL_METHOD' in 'float.h', 29125 assuming, if applicable, that the floating-point control word is in 29126 its default state. If you do not define this macro the value of 29127 'FLT_EVAL_METHOD' will be zero. 29128 29129 -- Macro: WIDEST_HARDWARE_FP_SIZE 29130 A C expression for the size in bits of the widest floating-point 29131 format supported by the hardware. If you define this macro, you 29132 must specify a value less than or equal to the value of 29133 'LONG_DOUBLE_TYPE_SIZE'. If you do not define this macro, the 29134 value of 'LONG_DOUBLE_TYPE_SIZE' is the default. 29135 29136 -- Macro: DEFAULT_SIGNED_CHAR 29137 An expression whose value is 1 or 0, according to whether the type 29138 'char' should be signed or unsigned by default. The user can 29139 always override this default with the options '-fsigned-char' and 29140 '-funsigned-char'. 29141 29142 -- Target Hook: bool TARGET_DEFAULT_SHORT_ENUMS (void) 29143 This target hook should return true if the compiler should give an 29144 'enum' type only as many bytes as it takes to represent the range 29145 of possible values of that type. It should return false if all 29146 'enum' types should be allocated like 'int'. 29147 29148 The default is to return false. 29149 29150 -- Macro: SIZE_TYPE 29151 A C expression for a string describing the name of the data type to 29152 use for size values. The typedef name 'size_t' is defined using 29153 the contents of the string. 29154 29155 The string can contain more than one keyword. If so, separate them 29156 with spaces, and write first any length keyword, then 'unsigned' if 29157 appropriate, and finally 'int'. The string must exactly match one 29158 of the data type names defined in the function 29159 'c_common_nodes_and_builtins' in the file 'c-family/c-common.c'. 29160 You may not omit 'int' or change the order--that would cause the 29161 compiler to crash on startup. 29162 29163 If you don't define this macro, the default is '"long unsigned 29164 int"'. 29165 29166 -- Macro: SIZETYPE 29167 GCC defines internal types ('sizetype', 'ssizetype', 'bitsizetype' 29168 and 'sbitsizetype') for expressions dealing with size. This macro 29169 is a C expression for a string describing the name of the data type 29170 from which the precision of 'sizetype' is extracted. 29171 29172 The string has the same restrictions as 'SIZE_TYPE' string. 29173 29174 If you don't define this macro, the default is 'SIZE_TYPE'. 29175 29176 -- Macro: PTRDIFF_TYPE 29177 A C expression for a string describing the name of the data type to 29178 use for the result of subtracting two pointers. The typedef name 29179 'ptrdiff_t' is defined using the contents of the string. See 29180 'SIZE_TYPE' above for more information. 29181 29182 If you don't define this macro, the default is '"long int"'. 29183 29184 -- Macro: WCHAR_TYPE 29185 A C expression for a string describing the name of the data type to 29186 use for wide characters. The typedef name 'wchar_t' is defined 29187 using the contents of the string. See 'SIZE_TYPE' above for more 29188 information. 29189 29190 If you don't define this macro, the default is '"int"'. 29191 29192 -- Macro: WCHAR_TYPE_SIZE 29193 A C expression for the size in bits of the data type for wide 29194 characters. This is used in 'cpp', which cannot make use of 29195 'WCHAR_TYPE'. 29196 29197 -- Macro: WINT_TYPE 29198 A C expression for a string describing the name of the data type to 29199 use for wide characters passed to 'printf' and returned from 29200 'getwc'. The typedef name 'wint_t' is defined using the contents 29201 of the string. See 'SIZE_TYPE' above for more information. 29202 29203 If you don't define this macro, the default is '"unsigned int"'. 29204 29205 -- Macro: INTMAX_TYPE 29206 A C expression for a string describing the name of the data type 29207 that can represent any value of any standard or extended signed 29208 integer type. The typedef name 'intmax_t' is defined using the 29209 contents of the string. See 'SIZE_TYPE' above for more 29210 information. 29211 29212 If you don't define this macro, the default is the first of 29213 '"int"', '"long int"', or '"long long int"' that has as much 29214 precision as 'long long int'. 29215 29216 -- Macro: UINTMAX_TYPE 29217 A C expression for a string describing the name of the data type 29218 that can represent any value of any standard or extended unsigned 29219 integer type. The typedef name 'uintmax_t' is defined using the 29220 contents of the string. See 'SIZE_TYPE' above for more 29221 information. 29222 29223 If you don't define this macro, the default is the first of 29224 '"unsigned int"', '"long unsigned int"', or '"long long unsigned 29225 int"' that has as much precision as 'long long unsigned int'. 29226 29227 -- Macro: SIG_ATOMIC_TYPE 29228 -- Macro: INT8_TYPE 29229 -- Macro: INT16_TYPE 29230 -- Macro: INT32_TYPE 29231 -- Macro: INT64_TYPE 29232 -- Macro: UINT8_TYPE 29233 -- Macro: UINT16_TYPE 29234 -- Macro: UINT32_TYPE 29235 -- Macro: UINT64_TYPE 29236 -- Macro: INT_LEAST8_TYPE 29237 -- Macro: INT_LEAST16_TYPE 29238 -- Macro: INT_LEAST32_TYPE 29239 -- Macro: INT_LEAST64_TYPE 29240 -- Macro: UINT_LEAST8_TYPE 29241 -- Macro: UINT_LEAST16_TYPE 29242 -- Macro: UINT_LEAST32_TYPE 29243 -- Macro: UINT_LEAST64_TYPE 29244 -- Macro: INT_FAST8_TYPE 29245 -- Macro: INT_FAST16_TYPE 29246 -- Macro: INT_FAST32_TYPE 29247 -- Macro: INT_FAST64_TYPE 29248 -- Macro: UINT_FAST8_TYPE 29249 -- Macro: UINT_FAST16_TYPE 29250 -- Macro: UINT_FAST32_TYPE 29251 -- Macro: UINT_FAST64_TYPE 29252 -- Macro: INTPTR_TYPE 29253 -- Macro: UINTPTR_TYPE 29254 C expressions for the standard types 'sig_atomic_t', 'int8_t', 29255 'int16_t', 'int32_t', 'int64_t', 'uint8_t', 'uint16_t', 'uint32_t', 29256 'uint64_t', 'int_least8_t', 'int_least16_t', 'int_least32_t', 29257 'int_least64_t', 'uint_least8_t', 'uint_least16_t', 29258 'uint_least32_t', 'uint_least64_t', 'int_fast8_t', 'int_fast16_t', 29259 'int_fast32_t', 'int_fast64_t', 'uint_fast8_t', 'uint_fast16_t', 29260 'uint_fast32_t', 'uint_fast64_t', 'intptr_t', and 'uintptr_t'. See 29261 'SIZE_TYPE' above for more information. 29262 29263 If any of these macros evaluates to a null pointer, the 29264 corresponding type is not supported; if GCC is configured to 29265 provide '<stdint.h>' in such a case, the header provided may not 29266 conform to C99, depending on the type in question. The defaults 29267 for all of these macros are null pointers. 29268 29269 -- Macro: TARGET_PTRMEMFUNC_VBIT_LOCATION 29270 The C++ compiler represents a pointer-to-member-function with a 29271 struct that looks like: 29272 29273 struct { 29274 union { 29275 void (*fn)(); 29276 ptrdiff_t vtable_index; 29277 }; 29278 ptrdiff_t delta; 29279 }; 29280 29281 The C++ compiler must use one bit to indicate whether the function 29282 that will be called through a pointer-to-member-function is 29283 virtual. Normally, we assume that the low-order bit of a function 29284 pointer must always be zero. Then, by ensuring that the 29285 vtable_index is odd, we can distinguish which variant of the union 29286 is in use. But, on some platforms function pointers can be odd, 29287 and so this doesn't work. In that case, we use the low-order bit 29288 of the 'delta' field, and shift the remainder of the 'delta' field 29289 to the left. 29290 29291 GCC will automatically make the right selection about where to 29292 store this bit using the 'FUNCTION_BOUNDARY' setting for your 29293 platform. However, some platforms such as ARM/Thumb have 29294 'FUNCTION_BOUNDARY' set such that functions always start at even 29295 addresses, but the lowest bit of pointers to functions indicate 29296 whether the function at that address is in ARM or Thumb mode. If 29297 this is the case of your architecture, you should define this macro 29298 to 'ptrmemfunc_vbit_in_delta'. 29299 29300 In general, you should not have to define this macro. On 29301 architectures in which function addresses are always even, 29302 according to 'FUNCTION_BOUNDARY', GCC will automatically define 29303 this macro to 'ptrmemfunc_vbit_in_pfn'. 29304 29305 -- Macro: TARGET_VTABLE_USES_DESCRIPTORS 29306 Normally, the C++ compiler uses function pointers in vtables. This 29307 macro allows the target to change to use "function descriptors" 29308 instead. Function descriptors are found on targets for whom a 29309 function pointer is actually a small data structure. Normally the 29310 data structure consists of the actual code address plus a data 29311 pointer to which the function's data is relative. 29312 29313 If vtables are used, the value of this macro should be the number 29314 of words that the function descriptor occupies. 29315 29316 -- Macro: TARGET_VTABLE_ENTRY_ALIGN 29317 By default, the vtable entries are void pointers, the so the 29318 alignment is the same as pointer alignment. The value of this 29319 macro specifies the alignment of the vtable entry in bits. It 29320 should be defined only when special alignment is necessary. */ 29321 29322 -- Macro: TARGET_VTABLE_DATA_ENTRY_DISTANCE 29323 There are a few non-descriptor entries in the vtable at offsets 29324 below zero. If these entries must be padded (say, to preserve the 29325 alignment specified by 'TARGET_VTABLE_ENTRY_ALIGN'), set this to 29326 the number of words in each data entry. 29327 29328 29329File: gccint.info, Node: Registers, Next: Register Classes, Prev: Type Layout, Up: Target Macros 29330 2933117.7 Register Usage 29332=================== 29333 29334This section explains how to describe what registers the target machine 29335has, and how (in general) they can be used. 29336 29337 The description of which registers a specific instruction can use is 29338done with register classes; see *note Register Classes::. For 29339information on using registers to access a stack frame, see *note Frame 29340Registers::. For passing values in registers, see *note Register 29341Arguments::. For returning values in registers, see *note Scalar 29342Return::. 29343 29344* Menu: 29345 29346* Register Basics:: Number and kinds of registers. 29347* Allocation Order:: Order in which registers are allocated. 29348* Values in Registers:: What kinds of values each reg can hold. 29349* Leaf Functions:: Renumbering registers for leaf functions. 29350* Stack Registers:: Handling a register stack such as 80387. 29351 29352 29353File: gccint.info, Node: Register Basics, Next: Allocation Order, Up: Registers 29354 2935517.7.1 Basic Characteristics of Registers 29356----------------------------------------- 29357 29358Registers have various characteristics. 29359 29360 -- Macro: FIRST_PSEUDO_REGISTER 29361 Number of hardware registers known to the compiler. They receive 29362 numbers 0 through 'FIRST_PSEUDO_REGISTER-1'; thus, the first pseudo 29363 register's number really is assigned the number 29364 'FIRST_PSEUDO_REGISTER'. 29365 29366 -- Macro: FIXED_REGISTERS 29367 An initializer that says which registers are used for fixed 29368 purposes all throughout the compiled code and are therefore not 29369 available for general allocation. These would include the stack 29370 pointer, the frame pointer (except on machines where that can be 29371 used as a general register when no frame pointer is needed), the 29372 program counter on machines where that is considered one of the 29373 addressable registers, and any other numbered register with a 29374 standard use. 29375 29376 This information is expressed as a sequence of numbers, separated 29377 by commas and surrounded by braces. The Nth number is 1 if 29378 register N is fixed, 0 otherwise. 29379 29380 The table initialized from this macro, and the table initialized by 29381 the following one, may be overridden at run time either 29382 automatically, by the actions of the macro 29383 'CONDITIONAL_REGISTER_USAGE', or by the user with the command 29384 options '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG'. 29385 29386 -- Macro: CALL_USED_REGISTERS 29387 Like 'FIXED_REGISTERS' but has 1 for each register that is 29388 clobbered (in general) by function calls as well as for fixed 29389 registers. This macro therefore identifies the registers that are 29390 not available for general allocation of values that must live 29391 across function calls. 29392 29393 If a register has 0 in 'CALL_USED_REGISTERS', the compiler 29394 automatically saves it on function entry and restores it on 29395 function exit, if the register is used within the function. 29396 29397 -- Macro: CALL_REALLY_USED_REGISTERS 29398 Like 'CALL_USED_REGISTERS' except this macro doesn't require that 29399 the entire set of 'FIXED_REGISTERS' be included. 29400 ('CALL_USED_REGISTERS' must be a superset of 'FIXED_REGISTERS'). 29401 This macro is optional. If not specified, it defaults to the value 29402 of 'CALL_USED_REGISTERS'. 29403 29404 -- Macro: HARD_REGNO_CALL_PART_CLOBBERED (REGNO, MODE) 29405 A C expression that is nonzero if it is not permissible to store a 29406 value of mode MODE in hard register number REGNO across a call 29407 without some part of it being clobbered. For most machines this 29408 macro need not be defined. It is only required for machines that 29409 do not preserve the entire contents of a register across a call. 29410 29411 -- Target Hook: void TARGET_CONDITIONAL_REGISTER_USAGE (void) 29412 This hook may conditionally modify five variables 'fixed_regs', 29413 'call_used_regs', 'global_regs', 'reg_names', and 29414 'reg_class_contents', to take into account any dependence of these 29415 register sets on target flags. The first three of these are of 29416 type 'char []' (interpreted as Boolean vectors). 'global_regs' is 29417 a 'const char *[]', and 'reg_class_contents' is a 'HARD_REG_SET'. 29418 Before the macro is called, 'fixed_regs', 'call_used_regs', 29419 'reg_class_contents', and 'reg_names' have been initialized from 29420 'FIXED_REGISTERS', 'CALL_USED_REGISTERS', 'REG_CLASS_CONTENTS', and 29421 'REGISTER_NAMES', respectively. 'global_regs' has been cleared, 29422 and any '-ffixed-REG', '-fcall-used-REG' and '-fcall-saved-REG' 29423 command options have been applied. 29424 29425 If the usage of an entire class of registers depends on the target 29426 flags, you may indicate this to GCC by using this macro to modify 29427 'fixed_regs' and 'call_used_regs' to 1 for each of the registers in 29428 the classes which should not be used by GCC. Also make 29429 'define_register_constraint's return 'NO_REGS' for constraints that 29430 shouldn't be used. 29431 29432 (However, if this class is not included in 'GENERAL_REGS' and all 29433 of the insn patterns whose constraints permit this class are 29434 controlled by target switches, then GCC will automatically avoid 29435 using these registers when the target switches are opposed to 29436 them.) 29437 29438 -- Macro: INCOMING_REGNO (OUT) 29439 Define this macro if the target machine has register windows. This 29440 C expression returns the register number as seen by the called 29441 function corresponding to the register number OUT as seen by the 29442 calling function. Return OUT if register number OUT is not an 29443 outbound register. 29444 29445 -- Macro: OUTGOING_REGNO (IN) 29446 Define this macro if the target machine has register windows. This 29447 C expression returns the register number as seen by the calling 29448 function corresponding to the register number IN as seen by the 29449 called function. Return IN if register number IN is not an inbound 29450 register. 29451 29452 -- Macro: LOCAL_REGNO (REGNO) 29453 Define this macro if the target machine has register windows. This 29454 C expression returns true if the register is call-saved but is in 29455 the register window. Unlike most call-saved registers, such 29456 registers need not be explicitly restored on function exit or 29457 during non-local gotos. 29458 29459 -- Macro: PC_REGNUM 29460 If the program counter has a register number, define this as that 29461 register number. Otherwise, do not define it. 29462 29463 29464File: gccint.info, Node: Allocation Order, Next: Values in Registers, Prev: Register Basics, Up: Registers 29465 2946617.7.2 Order of Allocation of Registers 29467--------------------------------------- 29468 29469Registers are allocated in order. 29470 29471 -- Macro: REG_ALLOC_ORDER 29472 If defined, an initializer for a vector of integers, containing the 29473 numbers of hard registers in the order in which GCC should prefer 29474 to use them (from most preferred to least). 29475 29476 If this macro is not defined, registers are used lowest numbered 29477 first (all else being equal). 29478 29479 One use of this macro is on machines where the highest numbered 29480 registers must always be saved and the save-multiple-registers 29481 instruction supports only sequences of consecutive registers. On 29482 such machines, define 'REG_ALLOC_ORDER' to be an initializer that 29483 lists the highest numbered allocable register first. 29484 29485 -- Macro: ADJUST_REG_ALLOC_ORDER 29486 A C statement (sans semicolon) to choose the order in which to 29487 allocate hard registers for pseudo-registers local to a basic 29488 block. 29489 29490 Store the desired register order in the array 'reg_alloc_order'. 29491 Element 0 should be the register to allocate first; element 1, the 29492 next register; and so on. 29493 29494 The macro body should not assume anything about the contents of 29495 'reg_alloc_order' before execution of the macro. 29496 29497 On most machines, it is not necessary to define this macro. 29498 29499 -- Macro: HONOR_REG_ALLOC_ORDER 29500 Normally, IRA tries to estimate the costs for saving a register in 29501 the prologue and restoring it in the epilogue. This discourages it 29502 from using call-saved registers. If a machine wants to ensure that 29503 IRA allocates registers in the order given by REG_ALLOC_ORDER even 29504 if some call-saved registers appear earlier than call-used ones, 29505 then define this macro as a C expression to nonzero. Default is 0. 29506 29507 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO) 29508 In some case register allocation order is not enough for the 29509 Integrated Register Allocator (IRA) to generate a good code. If 29510 this macro is defined, it should return a floating point value 29511 based on REGNO. The cost of using REGNO for a pseudo will be 29512 increased by approximately the pseudo's usage frequency times the 29513 value returned by this macro. Not defining this macro is 29514 equivalent to having it always return '0.0'. 29515 29516 On most machines, it is not necessary to define this macro. 29517 29518 29519File: gccint.info, Node: Values in Registers, Next: Leaf Functions, Prev: Allocation Order, Up: Registers 29520 2952117.7.3 How Values Fit in Registers 29522---------------------------------- 29523 29524This section discusses the macros that describe which kinds of values 29525(specifically, which machine modes) each register can hold, and how many 29526consecutive registers are needed for a given mode. 29527 29528 -- Macro: HARD_REGNO_NREGS (REGNO, MODE) 29529 A C expression for the number of consecutive hard registers, 29530 starting at register number REGNO, required to hold a value of mode 29531 MODE. This macro must never return zero, even if a register cannot 29532 hold the requested mode - indicate that with HARD_REGNO_MODE_OK 29533 and/or CANNOT_CHANGE_MODE_CLASS instead. 29534 29535 On a machine where all registers are exactly one word, a suitable 29536 definition of this macro is 29537 29538 #define HARD_REGNO_NREGS(REGNO, MODE) \ 29539 ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) \ 29540 / UNITS_PER_WORD) 29541 29542 -- Macro: HARD_REGNO_NREGS_HAS_PADDING (REGNO, MODE) 29543 A C expression that is nonzero if a value of mode MODE, stored in 29544 memory, ends with padding that causes it to take up more space than 29545 in registers starting at register number REGNO (as determined by 29546 multiplying GCC's notion of the size of the register when 29547 containing this mode by the number of registers returned by 29548 'HARD_REGNO_NREGS'). By default this is zero. 29549 29550 For example, if a floating-point value is stored in three 32-bit 29551 registers but takes up 128 bits in memory, then this would be 29552 nonzero. 29553 29554 This macros only needs to be defined if there are cases where 29555 'subreg_get_info' would otherwise wrongly determine that a 'subreg' 29556 can be represented by an offset to the register number, when in 29557 fact such a 'subreg' would contain some of the padding not stored 29558 in registers and so not be representable. 29559 29560 -- Macro: HARD_REGNO_NREGS_WITH_PADDING (REGNO, MODE) 29561 For values of REGNO and MODE for which 29562 'HARD_REGNO_NREGS_HAS_PADDING' returns nonzero, a C expression 29563 returning the greater number of registers required to hold the 29564 value including any padding. In the example above, the value would 29565 be four. 29566 29567 -- Macro: REGMODE_NATURAL_SIZE (MODE) 29568 Define this macro if the natural size of registers that hold values 29569 of mode MODE is not the word size. It is a C expression that 29570 should give the natural size in bytes for the specified mode. It 29571 is used by the register allocator to try to optimize its results. 29572 This happens for example on SPARC 64-bit where the natural size of 29573 floating-point registers is still 32-bit. 29574 29575 -- Macro: HARD_REGNO_MODE_OK (REGNO, MODE) 29576 A C expression that is nonzero if it is permissible to store a 29577 value of mode MODE in hard register number REGNO (or in several 29578 registers starting with that one). For a machine where all 29579 registers are equivalent, a suitable definition is 29580 29581 #define HARD_REGNO_MODE_OK(REGNO, MODE) 1 29582 29583 You need not include code to check for the numbers of fixed 29584 registers, because the allocation mechanism considers them to be 29585 always occupied. 29586 29587 On some machines, double-precision values must be kept in even/odd 29588 register pairs. You can implement that by defining this macro to 29589 reject odd register numbers for such modes. 29590 29591 The minimum requirement for a mode to be OK in a register is that 29592 the 'movMODE' instruction pattern support moves between the 29593 register and other hard register in the same class and that moving 29594 a value into the register and back out not alter it. 29595 29596 Since the same instruction used to move 'word_mode' will work for 29597 all narrower integer modes, it is not necessary on any machine for 29598 'HARD_REGNO_MODE_OK' to distinguish between these modes, provided 29599 you define patterns 'movhi', etc., to take advantage of this. This 29600 is useful because of the interaction between 'HARD_REGNO_MODE_OK' 29601 and 'MODES_TIEABLE_P'; it is very desirable for all integer modes 29602 to be tieable. 29603 29604 Many machines have special registers for floating point arithmetic. 29605 Often people assume that floating point machine modes are allowed 29606 only in floating point registers. This is not true. Any registers 29607 that can hold integers can safely _hold_ a floating point machine 29608 mode, whether or not floating arithmetic can be done on it in those 29609 registers. Integer move instructions can be used to move the 29610 values. 29611 29612 On some machines, though, the converse is true: fixed-point machine 29613 modes may not go in floating registers. This is true if the 29614 floating registers normalize any value stored in them, because 29615 storing a non-floating value there would garble it. In this case, 29616 'HARD_REGNO_MODE_OK' should reject fixed-point machine modes in 29617 floating registers. But if the floating registers do not 29618 automatically normalize, if you can store any bit pattern in one 29619 and retrieve it unchanged without a trap, then any machine mode may 29620 go in a floating register, so you can define this macro to say so. 29621 29622 The primary significance of special floating registers is rather 29623 that they are the registers acceptable in floating point arithmetic 29624 instructions. However, this is of no concern to 29625 'HARD_REGNO_MODE_OK'. You handle it by writing the proper 29626 constraints for those instructions. 29627 29628 On some machines, the floating registers are especially slow to 29629 access, so that it is better to store a value in a stack frame than 29630 in such a register if floating point arithmetic is not being done. 29631 As long as the floating registers are not in class 'GENERAL_REGS', 29632 they will not be used unless some pattern's constraint asks for 29633 one. 29634 29635 -- Macro: HARD_REGNO_RENAME_OK (FROM, TO) 29636 A C expression that is nonzero if it is OK to rename a hard 29637 register FROM to another hard register TO. 29638 29639 One common use of this macro is to prevent renaming of a register 29640 to another register that is not saved by a prologue in an interrupt 29641 handler. 29642 29643 The default is always nonzero. 29644 29645 -- Macro: MODES_TIEABLE_P (MODE1, MODE2) 29646 A C expression that is nonzero if a value of mode MODE1 is 29647 accessible in mode MODE2 without copying. 29648 29649 If 'HARD_REGNO_MODE_OK (R, MODE1)' and 'HARD_REGNO_MODE_OK (R, 29650 MODE2)' are always the same for any R, then 'MODES_TIEABLE_P 29651 (MODE1, MODE2)' should be nonzero. If they differ for any R, you 29652 should define this macro to return zero unless some other mechanism 29653 ensures the accessibility of the value in a narrower mode. 29654 29655 You should define this macro to return nonzero in as many cases as 29656 possible since doing so will allow GCC to perform better register 29657 allocation. 29658 29659 -- Target Hook: bool TARGET_HARD_REGNO_SCRATCH_OK (unsigned int REGNO) 29660 This target hook should return 'true' if it is OK to use a hard 29661 register REGNO as scratch reg in peephole2. 29662 29663 One common use of this macro is to prevent using of a register that 29664 is not saved by a prologue in an interrupt handler. 29665 29666 The default version of this hook always returns 'true'. 29667 29668 -- Macro: AVOID_CCMODE_COPIES 29669 Define this macro if the compiler should avoid copies to/from 29670 'CCmode' registers. You should only define this macro if support 29671 for copying to/from 'CCmode' is incomplete. 29672 29673 29674File: gccint.info, Node: Leaf Functions, Next: Stack Registers, Prev: Values in Registers, Up: Registers 29675 2967617.7.4 Handling Leaf Functions 29677------------------------------ 29678 29679On some machines, a leaf function (i.e., one which makes no calls) can 29680run more efficiently if it does not make its own register window. Often 29681this means it is required to receive its arguments in the registers 29682where they are passed by the caller, instead of the registers where they 29683would normally arrive. 29684 29685 The special treatment for leaf functions generally applies only when 29686other conditions are met; for example, often they may use only those 29687registers for its own variables and temporaries. We use the term "leaf 29688function" to mean a function that is suitable for this special handling, 29689so that functions with no calls are not necessarily "leaf functions". 29690 29691 GCC assigns register numbers before it knows whether the function is 29692suitable for leaf function treatment. So it needs to renumber the 29693registers in order to output a leaf function. The following macros 29694accomplish this. 29695 29696 -- Macro: LEAF_REGISTERS 29697 Name of a char vector, indexed by hard register number, which 29698 contains 1 for a register that is allowable in a candidate for leaf 29699 function treatment. 29700 29701 If leaf function treatment involves renumbering the registers, then 29702 the registers marked here should be the ones before 29703 renumbering--those that GCC would ordinarily allocate. The 29704 registers which will actually be used in the assembler code, after 29705 renumbering, should not be marked with 1 in this vector. 29706 29707 Define this macro only if the target machine offers a way to 29708 optimize the treatment of leaf functions. 29709 29710 -- Macro: LEAF_REG_REMAP (REGNO) 29711 A C expression whose value is the register number to which REGNO 29712 should be renumbered, when a function is treated as a leaf 29713 function. 29714 29715 If REGNO is a register number which should not appear in a leaf 29716 function before renumbering, then the expression should yield -1, 29717 which will cause the compiler to abort. 29718 29719 Define this macro only if the target machine offers a way to 29720 optimize the treatment of leaf functions, and registers need to be 29721 renumbered to do this. 29722 29723 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' must 29724usually treat leaf functions specially. They can test the C variable 29725'current_function_is_leaf' which is nonzero for leaf functions. 29726'current_function_is_leaf' is set prior to local register allocation and 29727is valid for the remaining compiler passes. They can also test the C 29728variable 'current_function_uses_only_leaf_regs' which is nonzero for 29729leaf functions which only use leaf registers. 29730'current_function_uses_only_leaf_regs' is valid after all passes that 29731modify the instructions have been run and is only useful if 29732'LEAF_REGISTERS' is defined. 29733 29734 29735File: gccint.info, Node: Stack Registers, Prev: Leaf Functions, Up: Registers 29736 2973717.7.5 Registers That Form a Stack 29738---------------------------------- 29739 29740There are special features to handle computers where some of the 29741"registers" form a stack. Stack registers are normally written by 29742pushing onto the stack, and are numbered relative to the top of the 29743stack. 29744 29745 Currently, GCC can only handle one group of stack-like registers, and 29746they must be consecutively numbered. Furthermore, the existing support 29747for stack-like registers is specific to the 80387 floating point 29748coprocessor. If you have a new architecture that uses stack-like 29749registers, you will need to do substantial work on 'reg-stack.c' and 29750write your machine description to cooperate with it, as well as defining 29751these macros. 29752 29753 -- Macro: STACK_REGS 29754 Define this if the machine has any stack-like registers. 29755 29756 -- Macro: STACK_REG_COVER_CLASS 29757 This is a cover class containing the stack registers. Define this 29758 if the machine has any stack-like registers. 29759 29760 -- Macro: FIRST_STACK_REG 29761 The number of the first stack-like register. This one is the top 29762 of the stack. 29763 29764 -- Macro: LAST_STACK_REG 29765 The number of the last stack-like register. This one is the bottom 29766 of the stack. 29767 29768 29769File: gccint.info, Node: Register Classes, Next: Stack and Calling, Prev: Registers, Up: Target Macros 29770 2977117.8 Register Classes 29772===================== 29773 29774On many machines, the numbered registers are not all equivalent. For 29775example, certain registers may not be allowed for indexed addressing; 29776certain registers may not be allowed in some instructions. These 29777machine restrictions are described to the compiler using "register 29778classes". 29779 29780 You define a number of register classes, giving each one a name and 29781saying which of the registers belong to it. Then you can specify 29782register classes that are allowed as operands to particular instruction 29783patterns. 29784 29785 In general, each register will belong to several classes. In fact, one 29786class must be named 'ALL_REGS' and contain all the registers. Another 29787class must be named 'NO_REGS' and contain no registers. Often the union 29788of two classes will be another class; however, this is not required. 29789 29790 One of the classes must be named 'GENERAL_REGS'. There is nothing 29791terribly special about the name, but the operand constraint letters 'r' 29792and 'g' specify this class. If 'GENERAL_REGS' is the same as 29793'ALL_REGS', just define it as a macro which expands to 'ALL_REGS'. 29794 29795 Order the classes so that if class X is contained in class Y then X has 29796a lower class number than Y. 29797 29798 The way classes other than 'GENERAL_REGS' are specified in operand 29799constraints is through machine-dependent operand constraint letters. 29800You can define such letters to correspond to various classes, then use 29801them in operand constraints. 29802 29803 You must define the narrowest register classes for allocatable 29804registers, so that each class either has no subclasses, or that for some 29805mode, the move cost between registers within the class is cheaper than 29806moving a register in the class to or from memory (*note Costs::). 29807 29808 You should define a class for the union of two classes whenever some 29809instruction allows both classes. For example, if an instruction allows 29810either a floating point (coprocessor) register or a general register for 29811a certain operand, you should define a class 'FLOAT_OR_GENERAL_REGS' 29812which includes both of them. Otherwise you will get suboptimal code, or 29813even internal compiler errors when reload cannot find a register in the 29814class computed via 'reg_class_subunion'. 29815 29816 You must also specify certain redundant information about the register 29817classes: for each class, which classes contain it and which ones are 29818contained in it; for each pair of classes, the largest class contained 29819in their union. 29820 29821 When a value occupying several consecutive registers is expected in a 29822certain class, all the registers used must belong to that class. 29823Therefore, register classes cannot be used to enforce a requirement for 29824a register pair to start with an even-numbered register. The way to 29825specify this requirement is with 'HARD_REGNO_MODE_OK'. 29826 29827 Register classes used for input-operands of bitwise-and or shift 29828instructions have a special requirement: each such class must have, for 29829each fixed-point machine mode, a subclass whose registers can transfer 29830that mode to or from memory. For example, on some machines, the 29831operations for single-byte values ('QImode') are limited to certain 29832registers. When this is so, each register class that is used in a 29833bitwise-and or shift instruction must have a subclass consisting of 29834registers from which single-byte values can be loaded or stored. This 29835is so that 'PREFERRED_RELOAD_CLASS' can always have a possible value to 29836return. 29837 29838 -- Data type: enum reg_class 29839 An enumerated type that must be defined with all the register class 29840 names as enumerated values. 'NO_REGS' must be first. 'ALL_REGS' 29841 must be the last register class, followed by one more enumerated 29842 value, 'LIM_REG_CLASSES', which is not a register class but rather 29843 tells how many classes there are. 29844 29845 Each register class has a number, which is the value of casting the 29846 class name to type 'int'. The number serves as an index in many of 29847 the tables described below. 29848 29849 -- Macro: N_REG_CLASSES 29850 The number of distinct register classes, defined as follows: 29851 29852 #define N_REG_CLASSES (int) LIM_REG_CLASSES 29853 29854 -- Macro: REG_CLASS_NAMES 29855 An initializer containing the names of the register classes as C 29856 string constants. These names are used in writing some of the 29857 debugging dumps. 29858 29859 -- Macro: REG_CLASS_CONTENTS 29860 An initializer containing the contents of the register classes, as 29861 integers which are bit masks. The Nth integer specifies the 29862 contents of class N. The way the integer MASK is interpreted is 29863 that register R is in the class if 'MASK & (1 << R)' is 1. 29864 29865 When the machine has more than 32 registers, an integer does not 29866 suffice. Then the integers are replaced by sub-initializers, 29867 braced groupings containing several integers. Each sub-initializer 29868 must be suitable as an initializer for the type 'HARD_REG_SET' 29869 which is defined in 'hard-reg-set.h'. In this situation, the first 29870 integer in each sub-initializer corresponds to registers 0 through 29871 31, the second integer to registers 32 through 63, and so on. 29872 29873 -- Macro: REGNO_REG_CLASS (REGNO) 29874 A C expression whose value is a register class containing hard 29875 register REGNO. In general there is more than one such class; 29876 choose a class which is "minimal", meaning that no smaller class 29877 also contains the register. 29878 29879 -- Macro: BASE_REG_CLASS 29880 A macro whose definition is the name of the class to which a valid 29881 base register must belong. A base register is one used in an 29882 address which is the register value plus a displacement. 29883 29884 -- Macro: MODE_BASE_REG_CLASS (MODE) 29885 This is a variation of the 'BASE_REG_CLASS' macro which allows the 29886 selection of a base register in a mode dependent manner. If MODE 29887 is VOIDmode then it should return the same value as 29888 'BASE_REG_CLASS'. 29889 29890 -- Macro: MODE_BASE_REG_REG_CLASS (MODE) 29891 A C expression whose value is the register class to which a valid 29892 base register must belong in order to be used in a base plus index 29893 register address. You should define this macro if base plus index 29894 addresses have different requirements than other base register 29895 uses. 29896 29897 -- Macro: MODE_CODE_BASE_REG_CLASS (MODE, ADDRESS_SPACE, OUTER_CODE, 29898 INDEX_CODE) 29899 A C expression whose value is the register class to which a valid 29900 base register for a memory reference in mode MODE to address space 29901 ADDRESS_SPACE must belong. OUTER_CODE and INDEX_CODE define the 29902 context in which the base register occurs. OUTER_CODE is the code 29903 of the immediately enclosing expression ('MEM' for the top level of 29904 an address, 'ADDRESS' for something that occurs in an 29905 'address_operand'). INDEX_CODE is the code of the corresponding 29906 index expression if OUTER_CODE is 'PLUS'; 'SCRATCH' otherwise. 29907 29908 -- Macro: INDEX_REG_CLASS 29909 A macro whose definition is the name of the class to which a valid 29910 index register must belong. An index register is one used in an 29911 address where its value is either multiplied by a scale factor or 29912 added to another register (as well as added to a displacement). 29913 29914 -- Macro: REGNO_OK_FOR_BASE_P (NUM) 29915 A C expression which is nonzero if register number NUM is suitable 29916 for use as a base register in operand addresses. 29917 29918 -- Macro: REGNO_MODE_OK_FOR_BASE_P (NUM, MODE) 29919 A C expression that is just like 'REGNO_OK_FOR_BASE_P', except that 29920 that expression may examine the mode of the memory reference in 29921 MODE. You should define this macro if the mode of the memory 29922 reference affects whether a register may be used as a base 29923 register. If you define this macro, the compiler will use it 29924 instead of 'REGNO_OK_FOR_BASE_P'. The mode may be 'VOIDmode' for 29925 addresses that appear outside a 'MEM', i.e., as an 29926 'address_operand'. 29927 29928 -- Macro: REGNO_MODE_OK_FOR_REG_BASE_P (NUM, MODE) 29929 A C expression which is nonzero if register number NUM is suitable 29930 for use as a base register in base plus index operand addresses, 29931 accessing memory in mode MODE. It may be either a suitable hard 29932 register or a pseudo register that has been allocated such a hard 29933 register. You should define this macro if base plus index 29934 addresses have different requirements than other base register 29935 uses. 29936 29937 Use of this macro is deprecated; please use the more general 29938 'REGNO_MODE_CODE_OK_FOR_BASE_P'. 29939 29940 -- Macro: REGNO_MODE_CODE_OK_FOR_BASE_P (NUM, MODE, ADDRESS_SPACE, 29941 OUTER_CODE, INDEX_CODE) 29942 A C expression which is nonzero if register number NUM is suitable 29943 for use as a base register in operand addresses, accessing memory 29944 in mode MODE in address space ADDRESS_SPACE. This is similar to 29945 'REGNO_MODE_OK_FOR_BASE_P', except that that expression may examine 29946 the context in which the register appears in the memory reference. 29947 OUTER_CODE is the code of the immediately enclosing expression 29948 ('MEM' if at the top level of the address, 'ADDRESS' for something 29949 that occurs in an 'address_operand'). INDEX_CODE is the code of 29950 the corresponding index expression if OUTER_CODE is 'PLUS'; 29951 'SCRATCH' otherwise. The mode may be 'VOIDmode' for addresses that 29952 appear outside a 'MEM', i.e., as an 'address_operand'. 29953 29954 -- Macro: REGNO_OK_FOR_INDEX_P (NUM) 29955 A C expression which is nonzero if register number NUM is suitable 29956 for use as an index register in operand addresses. It may be 29957 either a suitable hard register or a pseudo register that has been 29958 allocated such a hard register. 29959 29960 The difference between an index register and a base register is 29961 that the index register may be scaled. If an address involves the 29962 sum of two registers, neither one of them scaled, then either one 29963 may be labeled the "base" and the other the "index"; but whichever 29964 labeling is used must fit the machine's constraints of which 29965 registers may serve in each capacity. The compiler will try both 29966 labelings, looking for one that is valid, and will reload one or 29967 both registers only if neither labeling works. 29968 29969 -- Target Hook: reg_class_t TARGET_PREFERRED_RENAME_CLASS (reg_class_t 29970 RCLASS) 29971 A target hook that places additional preference on the register 29972 class to use when it is necessary to rename a register in class 29973 RCLASS to another class, or perhaps NO_REGS, if no preferred 29974 register class is found or hook 'preferred_rename_class' is not 29975 implemented. Sometimes returning a more restrictive class makes 29976 better code. For example, on ARM, thumb-2 instructions using 29977 'LO_REGS' may be smaller than instructions using 'GENERIC_REGS'. 29978 By returning 'LO_REGS' from 'preferred_rename_class', code size can 29979 be reduced. 29980 29981 -- Target Hook: reg_class_t TARGET_PREFERRED_RELOAD_CLASS (rtx X, 29982 reg_class_t RCLASS) 29983 A target hook that places additional restrictions on the register 29984 class to use when it is necessary to copy value X into a register 29985 in class RCLASS. The value is a register class; perhaps RCLASS, or 29986 perhaps another, smaller class. 29987 29988 The default version of this hook always returns value of 'rclass' 29989 argument. 29990 29991 Sometimes returning a more restrictive class makes better code. 29992 For example, on the 68000, when X is an integer constant that is in 29993 range for a 'moveq' instruction, the value of this macro is always 29994 'DATA_REGS' as long as RCLASS includes the data registers. 29995 Requiring a data register guarantees that a 'moveq' will be used. 29996 29997 One case where 'TARGET_PREFERRED_RELOAD_CLASS' must not return 29998 RCLASS is if X is a legitimate constant which cannot be loaded into 29999 some register class. By returning 'NO_REGS' you can force X into a 30000 memory location. For example, rs6000 can load immediate values 30001 into general-purpose registers, but does not have an instruction 30002 for loading an immediate value into a floating-point register, so 30003 'TARGET_PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 30004 floating-point constant. If the constant can't be loaded into any 30005 kind of register, code generation will be better if 30006 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 30007 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 30008 30009 If an insn has pseudos in it after register allocation, reload will 30010 go through the alternatives and call repeatedly 30011 'TARGET_PREFERRED_RELOAD_CLASS' to find the best one. Returning 30012 'NO_REGS', in this case, makes reload add a '!' in front of the 30013 constraint: the x86 back-end uses this feature to discourage usage 30014 of 387 registers when math is done in the SSE registers (and vice 30015 versa). 30016 30017 -- Macro: PREFERRED_RELOAD_CLASS (X, CLASS) 30018 A C expression that places additional restrictions on the register 30019 class to use when it is necessary to copy value X into a register 30020 in class CLASS. The value is a register class; perhaps CLASS, or 30021 perhaps another, smaller class. On many machines, the following 30022 definition is safe: 30023 30024 #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS 30025 30026 Sometimes returning a more restrictive class makes better code. 30027 For example, on the 68000, when X is an integer constant that is in 30028 range for a 'moveq' instruction, the value of this macro is always 30029 'DATA_REGS' as long as CLASS includes the data registers. 30030 Requiring a data register guarantees that a 'moveq' will be used. 30031 30032 One case where 'PREFERRED_RELOAD_CLASS' must not return CLASS is if 30033 X is a legitimate constant which cannot be loaded into some 30034 register class. By returning 'NO_REGS' you can force X into a 30035 memory location. For example, rs6000 can load immediate values 30036 into general-purpose registers, but does not have an instruction 30037 for loading an immediate value into a floating-point register, so 30038 'PREFERRED_RELOAD_CLASS' returns 'NO_REGS' when X is a 30039 floating-point constant. If the constant can't be loaded into any 30040 kind of register, code generation will be better if 30041 'TARGET_LEGITIMATE_CONSTANT_P' makes the constant illegitimate 30042 instead of using 'TARGET_PREFERRED_RELOAD_CLASS'. 30043 30044 If an insn has pseudos in it after register allocation, reload will 30045 go through the alternatives and call repeatedly 30046 'PREFERRED_RELOAD_CLASS' to find the best one. Returning 30047 'NO_REGS', in this case, makes reload add a '!' in front of the 30048 constraint: the x86 back-end uses this feature to discourage usage 30049 of 387 registers when math is done in the SSE registers (and vice 30050 versa). 30051 30052 -- Target Hook: reg_class_t TARGET_PREFERRED_OUTPUT_RELOAD_CLASS (rtx 30053 X, reg_class_t RCLASS) 30054 Like 'TARGET_PREFERRED_RELOAD_CLASS', but for output reloads 30055 instead of input reloads. 30056 30057 The default version of this hook always returns value of 'rclass' 30058 argument. 30059 30060 You can also use 'TARGET_PREFERRED_OUTPUT_RELOAD_CLASS' to 30061 discourage reload from using some alternatives, like 30062 'TARGET_PREFERRED_RELOAD_CLASS'. 30063 30064 -- Macro: LIMIT_RELOAD_CLASS (MODE, CLASS) 30065 A C expression that places additional restrictions on the register 30066 class to use when it is necessary to be able to hold a value of 30067 mode MODE in a reload register for which class CLASS would 30068 ordinarily be used. 30069 30070 Unlike 'PREFERRED_RELOAD_CLASS', this macro should be used when 30071 there are certain modes that simply can't go in certain reload 30072 classes. 30073 30074 The value is a register class; perhaps CLASS, or perhaps another, 30075 smaller class. 30076 30077 Don't define this macro unless the target machine has limitations 30078 which require the macro to do something nontrivial. 30079 30080 -- Target Hook: reg_class_t TARGET_SECONDARY_RELOAD (bool IN_P, rtx X, 30081 reg_class_t RELOAD_CLASS, machine_mode RELOAD_MODE, 30082 secondary_reload_info *SRI) 30083 Many machines have some registers that cannot be copied directly to 30084 or from memory or even from other types of registers. An example 30085 is the 'MQ' register, which on most machines, can only be copied to 30086 or from general registers, but not memory. Below, we shall be 30087 using the term 'intermediate register' when a move operation cannot 30088 be performed directly, but has to be done by copying the source 30089 into the intermediate register first, and then copying the 30090 intermediate register to the destination. An intermediate register 30091 always has the same mode as source and destination. Since it holds 30092 the actual value being copied, reload might apply optimizations to 30093 re-use an intermediate register and eliding the copy from the 30094 source when it can determine that the intermediate register still 30095 holds the required value. 30096 30097 Another kind of secondary reload is required on some machines which 30098 allow copying all registers to and from memory, but require a 30099 scratch register for stores to some memory locations (e.g., those 30100 with symbolic address on the RT, and those with certain symbolic 30101 address on the SPARC when compiling PIC). Scratch registers need 30102 not have the same mode as the value being copied, and usually hold 30103 a different value than that being copied. Special patterns in the 30104 md file are needed to describe how the copy is performed with the 30105 help of the scratch register; these patterns also describe the 30106 number, register class(es) and mode(s) of the scratch register(s). 30107 30108 In some cases, both an intermediate and a scratch register are 30109 required. 30110 30111 For input reloads, this target hook is called with nonzero IN_P, 30112 and X is an rtx that needs to be copied to a register of class 30113 RELOAD_CLASS in RELOAD_MODE. For output reloads, this target hook 30114 is called with zero IN_P, and a register of class RELOAD_CLASS 30115 needs to be copied to rtx X in RELOAD_MODE. 30116 30117 If copying a register of RELOAD_CLASS from/to X requires an 30118 intermediate register, the hook 'secondary_reload' should return 30119 the register class required for this intermediate register. If no 30120 intermediate register is required, it should return NO_REGS. If 30121 more than one intermediate register is required, describe the one 30122 that is closest in the copy chain to the reload register. 30123 30124 If scratch registers are needed, you also have to describe how to 30125 perform the copy from/to the reload register to/from this closest 30126 intermediate register. Or if no intermediate register is required, 30127 but still a scratch register is needed, describe the copy from/to 30128 the reload register to/from the reload operand X. 30129 30130 You do this by setting 'sri->icode' to the instruction code of a 30131 pattern in the md file which performs the move. Operands 0 and 1 30132 are the output and input of this copy, respectively. Operands from 30133 operand 2 onward are for scratch operands. These scratch operands 30134 must have a mode, and a single-register-class output constraint. 30135 30136 When an intermediate register is used, the 'secondary_reload' hook 30137 will be called again to determine how to copy the intermediate 30138 register to/from the reload operand X, so your hook must also have 30139 code to handle the register class of the intermediate operand. 30140 30141 X might be a pseudo-register or a 'subreg' of a pseudo-register, 30142 which could either be in a hard register or in memory. Use 30143 'true_regnum' to find out; it will return -1 if the pseudo is in 30144 memory and the hard register number if it is in a register. 30145 30146 Scratch operands in memory (constraint '"=m"' / '"=&m"') are 30147 currently not supported. For the time being, you will have to 30148 continue to use 'SECONDARY_MEMORY_NEEDED' for that purpose. 30149 30150 'copy_cost' also uses this target hook to find out how values are 30151 copied. If you want it to include some extra cost for the need to 30152 allocate (a) scratch register(s), set 'sri->extra_cost' to the 30153 additional cost. Or if two dependent moves are supposed to have a 30154 lower cost than the sum of the individual moves due to expected 30155 fortuitous scheduling and/or special forwarding logic, you can set 30156 'sri->extra_cost' to a negative amount. 30157 30158 -- Macro: SECONDARY_RELOAD_CLASS (CLASS, MODE, X) 30159 -- Macro: SECONDARY_INPUT_RELOAD_CLASS (CLASS, MODE, X) 30160 -- Macro: SECONDARY_OUTPUT_RELOAD_CLASS (CLASS, MODE, X) 30161 These macros are obsolete, new ports should use the target hook 30162 'TARGET_SECONDARY_RELOAD' instead. 30163 30164 These are obsolete macros, replaced by the 30165 'TARGET_SECONDARY_RELOAD' target hook. Older ports still define 30166 these macros to indicate to the reload phase that it may need to 30167 allocate at least one register for a reload in addition to the 30168 register to contain the data. Specifically, if copying X to a 30169 register CLASS in MODE requires an intermediate register, you were 30170 supposed to define 'SECONDARY_INPUT_RELOAD_CLASS' to return the 30171 largest register class all of whose registers can be used as 30172 intermediate registers or scratch registers. 30173 30174 If copying a register CLASS in MODE to X requires an intermediate 30175 or scratch register, 'SECONDARY_OUTPUT_RELOAD_CLASS' was supposed 30176 to be defined be defined to return the largest register class 30177 required. If the requirements for input and output reloads were 30178 the same, the macro 'SECONDARY_RELOAD_CLASS' should have been used 30179 instead of defining both macros identically. 30180 30181 The values returned by these macros are often 'GENERAL_REGS'. 30182 Return 'NO_REGS' if no spare register is needed; i.e., if X can be 30183 directly copied to or from a register of CLASS in MODE without 30184 requiring a scratch register. Do not define this macro if it would 30185 always return 'NO_REGS'. 30186 30187 If a scratch register is required (either with or without an 30188 intermediate register), you were supposed to define patterns for 30189 'reload_inM' or 'reload_outM', as required (*note Standard Names::. 30190 These patterns, which were normally implemented with a 30191 'define_expand', should be similar to the 'movM' patterns, except 30192 that operand 2 is the scratch register. 30193 30194 These patterns need constraints for the reload register and scratch 30195 register that contain a single register class. If the original 30196 reload register (whose class is CLASS) can meet the constraint 30197 given in the pattern, the value returned by these macros is used 30198 for the class of the scratch register. Otherwise, two additional 30199 reload registers are required. Their classes are obtained from the 30200 constraints in the insn pattern. 30201 30202 X might be a pseudo-register or a 'subreg' of a pseudo-register, 30203 which could either be in a hard register or in memory. Use 30204 'true_regnum' to find out; it will return -1 if the pseudo is in 30205 memory and the hard register number if it is in a register. 30206 30207 These macros should not be used in the case where a particular 30208 class of registers can only be copied to memory and not to another 30209 class of registers. In that case, secondary reload registers are 30210 not needed and would not be helpful. Instead, a stack location 30211 must be used to perform the copy and the 'movM' pattern should use 30212 memory as an intermediate storage. This case often occurs between 30213 floating-point and general registers. 30214 30215 -- Macro: SECONDARY_MEMORY_NEEDED (CLASS1, CLASS2, M) 30216 Certain machines have the property that some registers cannot be 30217 copied to some other registers without using memory. Define this 30218 macro on those machines to be a C expression that is nonzero if 30219 objects of mode M in registers of CLASS1 can only be copied to 30220 registers of class CLASS2 by storing a register of CLASS1 into 30221 memory and loading that memory location into a register of CLASS2. 30222 30223 Do not define this macro if its value would always be zero. 30224 30225 -- Macro: SECONDARY_MEMORY_NEEDED_RTX (MODE) 30226 Normally when 'SECONDARY_MEMORY_NEEDED' is defined, the compiler 30227 allocates a stack slot for a memory location needed for register 30228 copies. If this macro is defined, the compiler instead uses the 30229 memory location defined by this macro. 30230 30231 Do not define this macro if you do not define 30232 'SECONDARY_MEMORY_NEEDED'. 30233 30234 -- Macro: SECONDARY_MEMORY_NEEDED_MODE (MODE) 30235 When the compiler needs a secondary memory location to copy between 30236 two registers of mode MODE, it normally allocates sufficient memory 30237 to hold a quantity of 'BITS_PER_WORD' bits and performs the store 30238 and load operations in a mode that many bits wide and whose class 30239 is the same as that of MODE. 30240 30241 This is right thing to do on most machines because it ensures that 30242 all bits of the register are copied and prevents accesses to the 30243 registers in a narrower mode, which some machines prohibit for 30244 floating-point registers. 30245 30246 However, this default behavior is not correct on some machines, 30247 such as the DEC Alpha, that store short integers in floating-point 30248 registers differently than in integer registers. On those 30249 machines, the default widening will not work correctly and you must 30250 define this macro to suppress that widening in some cases. See the 30251 file 'alpha.h' for details. 30252 30253 Do not define this macro if you do not define 30254 'SECONDARY_MEMORY_NEEDED' or if widening MODE to a mode that is 30255 'BITS_PER_WORD' bits wide is correct for your machine. 30256 30257 -- Target Hook: bool TARGET_CLASS_LIKELY_SPILLED_P (reg_class_t RCLASS) 30258 A target hook which returns 'true' if pseudos that have been 30259 assigned to registers of class RCLASS would likely be spilled 30260 because registers of RCLASS are needed for spill registers. 30261 30262 The default version of this target hook returns 'true' if RCLASS 30263 has exactly one register and 'false' otherwise. On most machines, 30264 this default should be used. For generally register-starved 30265 machines, such as i386, or machines with right register 30266 constraints, such as SH, this hook can be used to avoid excessive 30267 spilling. 30268 30269 This hook is also used by some of the global intra-procedural code 30270 transformations to throtle code motion, to avoid increasing 30271 register pressure. 30272 30273 -- Target Hook: unsigned char TARGET_CLASS_MAX_NREGS (reg_class_t 30274 RCLASS, machine_mode MODE) 30275 A target hook returns the maximum number of consecutive registers 30276 of class RCLASS needed to hold a value of mode MODE. 30277 30278 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 30279 the value returned by 'TARGET_CLASS_MAX_NREGS (RCLASS, MODE)' 30280 target hook should be the maximum value of 'HARD_REGNO_NREGS 30281 (REGNO, MODE)' for all REGNO values in the class RCLASS. 30282 30283 This target hook helps control the handling of multiple-word values 30284 in the reload pass. 30285 30286 The default version of this target hook returns the size of MODE in 30287 words. 30288 30289 -- Macro: CLASS_MAX_NREGS (CLASS, MODE) 30290 A C expression for the maximum number of consecutive registers of 30291 class CLASS needed to hold a value of mode MODE. 30292 30293 This is closely related to the macro 'HARD_REGNO_NREGS'. In fact, 30294 the value of the macro 'CLASS_MAX_NREGS (CLASS, MODE)' should be 30295 the maximum value of 'HARD_REGNO_NREGS (REGNO, MODE)' for all REGNO 30296 values in the class CLASS. 30297 30298 This macro helps control the handling of multiple-word values in 30299 the reload pass. 30300 30301 -- Macro: CANNOT_CHANGE_MODE_CLASS (FROM, TO, CLASS) 30302 If defined, a C expression that returns nonzero for a CLASS for 30303 which a change from mode FROM to mode TO is invalid. 30304 30305 For example, loading 32-bit integer or floating-point objects into 30306 floating-point registers on Alpha extends them to 64 bits. 30307 Therefore loading a 64-bit object and then storing it as a 32-bit 30308 object does not store the low-order 32 bits, as would be the case 30309 for a normal register. Therefore, 'alpha.h' defines 30310 'CANNOT_CHANGE_MODE_CLASS' as below: 30311 30312 #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ 30313 (GET_MODE_SIZE (FROM) != GET_MODE_SIZE (TO) \ 30314 ? reg_classes_intersect_p (FLOAT_REGS, (CLASS)) : 0) 30315 30316 Even if storing from a register in mode TO would be valid, if both 30317 FROM and 'raw_reg_mode' for CLASS are wider than 'word_mode', then 30318 we must prevent TO narrowing the mode. This happens when the 30319 middle-end assumes that it can load or store pieces of an N-word 30320 pseudo, and that the pseudo will eventually be allocated to N 30321 'word_mode' hard registers. Failure to prevent this kind of mode 30322 change will result in the entire 'raw_reg_mode' being modified 30323 instead of the partial value that the middle-end intended. 30324 30325 -- Target Hook: reg_class_t TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS 30326 (int, REG_CLASS_T, REG_CLASS_T) 30327 A target hook which can change allocno class for given pseudo from 30328 allocno and best class calculated by IRA. 30329 30330 The default version of this target hook always returns given class. 30331 30332 -- Target Hook: bool TARGET_LRA_P (void) 30333 A target hook which returns true if we use LRA instead of reload 30334 pass. The default version of this target hook returns always 30335 false, but new ports should use LRA. 30336 30337 -- Target Hook: int TARGET_REGISTER_PRIORITY (int) 30338 A target hook which returns the register priority number to which 30339 the register HARD_REGNO belongs to. The bigger the number, the 30340 more preferable the hard register usage (when all other conditions 30341 are the same). This hook can be used to prefer some hard register 30342 over others in LRA. For example, some x86-64 register usage needs 30343 additional prefix which makes instructions longer. The hook can 30344 return lower priority number for such registers make them less 30345 favorable and as result making the generated code smaller. The 30346 default version of this target hook returns always zero. 30347 30348 -- Target Hook: bool TARGET_REGISTER_USAGE_LEVELING_P (void) 30349 A target hook which returns true if we need register usage 30350 leveling. That means if a few hard registers are equally good for 30351 the assignment, we choose the least used hard register. The 30352 register usage leveling may be profitable for some targets. Don't 30353 use the usage leveling for targets with conditional execution or 30354 targets with big register files as it hurts if-conversion and 30355 cross-jumping optimizations. The default version of this target 30356 hook returns always false. 30357 30358 -- Target Hook: bool TARGET_DIFFERENT_ADDR_DISPLACEMENT_P (void) 30359 A target hook which returns true if an address with the same 30360 structure can have different maximal legitimate displacement. For 30361 example, the displacement can depend on memory mode or on operand 30362 combinations in the insn. The default version of this target hook 30363 returns always false. 30364 30365 -- Target Hook: bool TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P (rtx SUBST) 30366 A target hook which returns 'true' if SUBST can't substitute safely 30367 pseudos with equivalent memory values during register allocation. 30368 The default version of this target hook returns 'false'. On most 30369 machines, this default should be used. For generally machines with 30370 non orthogonal register usage for addressing, such as SH, this hook 30371 can be used to avoid excessive spilling. 30372 30373 -- Target Hook: bool TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT (rtx *DISP, 30374 rtx *OFFSET, machine_mode MODE) 30375 A target hook which returns 'true' if *DISP is legitimezed to valid 30376 address displacement with subtracting *OFFSET at memory mode MODE. 30377 The default version of this target hook returns 'false'. This hook 30378 will benefit machines with limited base plus displacement 30379 addressing. 30380 30381 -- Target Hook: reg_class_t TARGET_SPILL_CLASS (reg_class_t, 30382 MACHINE_MODE) 30383 This hook defines a class of registers which could be used for 30384 spilling pseudos of the given mode and class, or 'NO_REGS' if only 30385 memory should be used. Not defining this hook is equivalent to 30386 returning 'NO_REGS' for all inputs. 30387 30388 -- Target Hook: machine_mode TARGET_CSTORE_MODE (enum insn_code ICODE) 30389 This hook defines the machine mode to use for the boolean result of 30390 conditional store patterns. The ICODE argument is the instruction 30391 code for the cstore being performed. Not definiting this hook is 30392 the same as accepting the mode encoded into operand 0 of the cstore 30393 expander patterns. 30394 30395 30396File: gccint.info, Node: Stack and Calling, Next: Varargs, Prev: Register Classes, Up: Target Macros 30397 3039817.9 Stack Layout and Calling Conventions 30399========================================= 30400 30401This describes the stack layout and calling conventions. 30402 30403* Menu: 30404 30405* Frame Layout:: 30406* Exception Handling:: 30407* Stack Checking:: 30408* Frame Registers:: 30409* Elimination:: 30410* Stack Arguments:: 30411* Register Arguments:: 30412* Scalar Return:: 30413* Aggregate Return:: 30414* Caller Saves:: 30415* Function Entry:: 30416* Profiling:: 30417* Tail Calls:: 30418* Stack Smashing Protection:: 30419* Miscellaneous Register Hooks:: 30420 30421 30422File: gccint.info, Node: Frame Layout, Next: Exception Handling, Up: Stack and Calling 30423 3042417.9.1 Basic Stack Layout 30425------------------------- 30426 30427Here is the basic stack layout. 30428 30429 -- Macro: STACK_GROWS_DOWNWARD 30430 Define this macro to be true if pushing a word onto the stack moves 30431 the stack pointer to a smaller address, and false otherwise. 30432 30433 -- Macro: STACK_PUSH_CODE 30434 This macro defines the operation used when something is pushed on 30435 the stack. In RTL, a push operation will be '(set (mem 30436 (STACK_PUSH_CODE (reg sp))) ...)' 30437 30438 The choices are 'PRE_DEC', 'POST_DEC', 'PRE_INC', and 'POST_INC'. 30439 Which of these is correct depends on the stack direction and on 30440 whether the stack pointer points to the last item on the stack or 30441 whether it points to the space for the next item on the stack. 30442 30443 The default is 'PRE_DEC' when 'STACK_GROWS_DOWNWARD' is true, which 30444 is almost always right, and 'PRE_INC' otherwise, which is often 30445 wrong. 30446 30447 -- Macro: FRAME_GROWS_DOWNWARD 30448 Define this macro to nonzero value if the addresses of local 30449 variable slots are at negative offsets from the frame pointer. 30450 30451 -- Macro: ARGS_GROW_DOWNWARD 30452 Define this macro if successive arguments to a function occupy 30453 decreasing addresses on the stack. 30454 30455 -- Macro: STARTING_FRAME_OFFSET 30456 Offset from the frame pointer to the first local variable slot to 30457 be allocated. 30458 30459 If 'FRAME_GROWS_DOWNWARD', find the next slot's offset by 30460 subtracting the first slot's length from 'STARTING_FRAME_OFFSET'. 30461 Otherwise, it is found by adding the length of the first slot to 30462 the value 'STARTING_FRAME_OFFSET'. 30463 30464 -- Macro: STACK_ALIGNMENT_NEEDED 30465 Define to zero to disable final alignment of the stack during 30466 reload. The nonzero default for this macro is suitable for most 30467 ports. 30468 30469 On ports where 'STARTING_FRAME_OFFSET' is nonzero or where there is 30470 a register save block following the local block that doesn't 30471 require alignment to 'STACK_BOUNDARY', it may be beneficial to 30472 disable stack alignment and do it in the backend. 30473 30474 -- Macro: STACK_POINTER_OFFSET 30475 Offset from the stack pointer register to the first location at 30476 which outgoing arguments are placed. If not specified, the default 30477 value of zero is used. This is the proper value for most machines. 30478 30479 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 30480 the first location at which outgoing arguments are placed. 30481 30482 -- Macro: FIRST_PARM_OFFSET (FUNDECL) 30483 Offset from the argument pointer register to the first argument's 30484 address. On some machines it may depend on the data type of the 30485 function. 30486 30487 If 'ARGS_GROW_DOWNWARD', this is the offset to the location above 30488 the first argument's address. 30489 30490 -- Macro: STACK_DYNAMIC_OFFSET (FUNDECL) 30491 Offset from the stack pointer register to an item dynamically 30492 allocated on the stack, e.g., by 'alloca'. 30493 30494 The default value for this macro is 'STACK_POINTER_OFFSET' plus the 30495 length of the outgoing arguments. The default is correct for most 30496 machines. See 'function.c' for details. 30497 30498 -- Macro: INITIAL_FRAME_ADDRESS_RTX 30499 A C expression whose value is RTL representing the address of the 30500 initial stack frame. This address is passed to 'RETURN_ADDR_RTX' 30501 and 'DYNAMIC_CHAIN_ADDRESS'. If you don't define this macro, a 30502 reasonable default value will be used. Define this macro in order 30503 to make frame pointer elimination work in the presence of 30504 '__builtin_frame_address (count)' and '__builtin_return_address 30505 (count)' for 'count' not equal to zero. 30506 30507 -- Macro: DYNAMIC_CHAIN_ADDRESS (FRAMEADDR) 30508 A C expression whose value is RTL representing the address in a 30509 stack frame where the pointer to the caller's frame is stored. 30510 Assume that FRAMEADDR is an RTL expression for the address of the 30511 stack frame itself. 30512 30513 If you don't define this macro, the default is to return the value 30514 of FRAMEADDR--that is, the stack frame address is also the address 30515 of the stack word that points to the previous frame. 30516 30517 -- Macro: SETUP_FRAME_ADDRESSES 30518 A C expression that produces the machine-specific code to setup the 30519 stack so that arbitrary frames can be accessed. For example, on 30520 the SPARC, we must flush all of the register windows to the stack 30521 before we can access arbitrary stack frames. You will seldom need 30522 to define this macro. The default is to do nothing. 30523 30524 -- Target Hook: rtx TARGET_BUILTIN_SETJMP_FRAME_VALUE (void) 30525 This target hook should return an rtx that is used to store the 30526 address of the current frame into the built in 'setjmp' buffer. 30527 The default value, 'virtual_stack_vars_rtx', is correct for most 30528 machines. One reason you may need to define this target hook is if 30529 'hard_frame_pointer_rtx' is the appropriate value on your machine. 30530 30531 -- Macro: FRAME_ADDR_RTX (FRAMEADDR) 30532 A C expression whose value is RTL representing the value of the 30533 frame address for the current frame. FRAMEADDR is the frame 30534 pointer of the current frame. This is used for 30535 __builtin_frame_address. You need only define this macro if the 30536 frame address is not the same as the frame pointer. Most machines 30537 do not need to define it. 30538 30539 -- Macro: RETURN_ADDR_RTX (COUNT, FRAMEADDR) 30540 A C expression whose value is RTL representing the value of the 30541 return address for the frame COUNT steps up from the current frame, 30542 after the prologue. FRAMEADDR is the frame pointer of the COUNT 30543 frame, or the frame pointer of the COUNT - 1 frame if 30544 'RETURN_ADDR_IN_PREVIOUS_FRAME' is nonzero. 30545 30546 The value of the expression must always be the correct address when 30547 COUNT is zero, but may be 'NULL_RTX' if there is no way to 30548 determine the return address of other frames. 30549 30550 -- Macro: RETURN_ADDR_IN_PREVIOUS_FRAME 30551 Define this macro to nonzero value if the return address of a 30552 particular stack frame is accessed from the frame pointer of the 30553 previous stack frame. The zero default for this macro is suitable 30554 for most ports. 30555 30556 -- Macro: INCOMING_RETURN_ADDR_RTX 30557 A C expression whose value is RTL representing the location of the 30558 incoming return address at the beginning of any function, before 30559 the prologue. This RTL is either a 'REG', indicating that the 30560 return value is saved in 'REG', or a 'MEM' representing a location 30561 in the stack. 30562 30563 You only need to define this macro if you want to support call 30564 frame debugging information like that provided by DWARF 2. 30565 30566 If this RTL is a 'REG', you should also define 30567 'DWARF_FRAME_RETURN_COLUMN' to 'DWARF_FRAME_REGNUM (REGNO)'. 30568 30569 -- Macro: DWARF_ALT_FRAME_RETURN_COLUMN 30570 A C expression whose value is an integer giving a DWARF 2 column 30571 number that may be used as an alternative return column. The 30572 column must not correspond to any gcc hard register (that is, it 30573 must not be in the range of 'DWARF_FRAME_REGNUM'). 30574 30575 This macro can be useful if 'DWARF_FRAME_RETURN_COLUMN' is set to a 30576 general register, but an alternative column needs to be used for 30577 signal frames. Some targets have also used different frame return 30578 columns over time. 30579 30580 -- Macro: DWARF_ZERO_REG 30581 A C expression whose value is an integer giving a DWARF 2 register 30582 number that is considered to always have the value zero. This 30583 should only be defined if the target has an architected zero 30584 register, and someone decided it was a good idea to use that 30585 register number to terminate the stack backtrace. New ports should 30586 avoid this. 30587 30588 -- Target Hook: void TARGET_DWARF_HANDLE_FRAME_UNSPEC (const char 30589 *LABEL, rtx PATTERN, int INDEX) 30590 This target hook allows the backend to emit frame-related insns 30591 that contain UNSPECs or UNSPEC_VOLATILEs. The DWARF 2 call frame 30592 debugging info engine will invoke it on insns of the form 30593 (set (reg) (unspec [...] UNSPEC_INDEX)) 30594 and 30595 (set (reg) (unspec_volatile [...] UNSPECV_INDEX)). 30596 to let the backend emit the call frame instructions. LABEL is the 30597 CFI label attached to the insn, PATTERN is the pattern of the insn 30598 and INDEX is 'UNSPEC_INDEX' or 'UNSPECV_INDEX'. 30599 30600 -- Macro: INCOMING_FRAME_SP_OFFSET 30601 A C expression whose value is an integer giving the offset, in 30602 bytes, from the value of the stack pointer register to the top of 30603 the stack frame at the beginning of any function, before the 30604 prologue. The top of the frame is defined to be the value of the 30605 stack pointer in the previous frame, just before the call 30606 instruction. 30607 30608 You only need to define this macro if you want to support call 30609 frame debugging information like that provided by DWARF 2. 30610 30611 -- Macro: ARG_POINTER_CFA_OFFSET (FUNDECL) 30612 A C expression whose value is an integer giving the offset, in 30613 bytes, from the argument pointer to the canonical frame address 30614 (cfa). The final value should coincide with that calculated by 30615 'INCOMING_FRAME_SP_OFFSET'. Which is unfortunately not usable 30616 during virtual register instantiation. 30617 30618 The default value for this macro is 'FIRST_PARM_OFFSET (fundecl) + 30619 crtl->args.pretend_args_size', which is correct for most machines; 30620 in general, the arguments are found immediately before the stack 30621 frame. Note that this is not the case on some targets that save 30622 registers into the caller's frame, such as SPARC and rs6000, and so 30623 such targets need to define this macro. 30624 30625 You only need to define this macro if the default is incorrect, and 30626 you want to support call frame debugging information like that 30627 provided by DWARF 2. 30628 30629 -- Macro: FRAME_POINTER_CFA_OFFSET (FUNDECL) 30630 If defined, a C expression whose value is an integer giving the 30631 offset in bytes from the frame pointer to the canonical frame 30632 address (cfa). The final value should coincide with that 30633 calculated by 'INCOMING_FRAME_SP_OFFSET'. 30634 30635 Normally the CFA is calculated as an offset from the argument 30636 pointer, via 'ARG_POINTER_CFA_OFFSET', but if the argument pointer 30637 is variable due to the ABI, this may not be possible. If this 30638 macro is defined, it implies that the virtual register 30639 instantiation should be based on the frame pointer instead of the 30640 argument pointer. Only one of 'FRAME_POINTER_CFA_OFFSET' and 30641 'ARG_POINTER_CFA_OFFSET' should be defined. 30642 30643 -- Macro: CFA_FRAME_BASE_OFFSET (FUNDECL) 30644 If defined, a C expression whose value is an integer giving the 30645 offset in bytes from the canonical frame address (cfa) to the frame 30646 base used in DWARF 2 debug information. The default is zero. A 30647 different value may reduce the size of debug information on some 30648 ports. 30649 30650 30651File: gccint.info, Node: Exception Handling, Next: Stack Checking, Prev: Frame Layout, Up: Stack and Calling 30652 3065317.9.2 Exception Handling Support 30654--------------------------------- 30655 30656 -- Macro: EH_RETURN_DATA_REGNO (N) 30657 A C expression whose value is the Nth register number used for data 30658 by exception handlers, or 'INVALID_REGNUM' if fewer than N 30659 registers are usable. 30660 30661 The exception handling library routines communicate with the 30662 exception handlers via a set of agreed upon registers. Ideally 30663 these registers should be call-clobbered; it is possible to use 30664 call-saved registers, but may negatively impact code size. The 30665 target must support at least 2 data registers, but should define 4 30666 if there are enough free registers. 30667 30668 You must define this macro if you want to support call frame 30669 exception handling like that provided by DWARF 2. 30670 30671 -- Macro: EH_RETURN_STACKADJ_RTX 30672 A C expression whose value is RTL representing a location in which 30673 to store a stack adjustment to be applied before function return. 30674 This is used to unwind the stack to an exception handler's call 30675 frame. It will be assigned zero on code paths that return 30676 normally. 30677 30678 Typically this is a call-clobbered hard register that is otherwise 30679 untouched by the epilogue, but could also be a stack slot. 30680 30681 Do not define this macro if the stack pointer is saved and restored 30682 by the regular prolog and epilog code in the call frame itself; in 30683 this case, the exception handling library routines will update the 30684 stack location to be restored in place. Otherwise, you must define 30685 this macro if you want to support call frame exception handling 30686 like that provided by DWARF 2. 30687 30688 -- Macro: EH_RETURN_HANDLER_RTX 30689 A C expression whose value is RTL representing a location in which 30690 to store the address of an exception handler to which we should 30691 return. It will not be assigned on code paths that return 30692 normally. 30693 30694 Typically this is the location in the call frame at which the 30695 normal return address is stored. For targets that return by 30696 popping an address off the stack, this might be a memory address 30697 just below the _target_ call frame rather than inside the current 30698 call frame. If defined, 'EH_RETURN_STACKADJ_RTX' will have already 30699 been assigned, so it may be used to calculate the location of the 30700 target call frame. 30701 30702 Some targets have more complex requirements than storing to an 30703 address calculable during initial code generation. In that case 30704 the 'eh_return' instruction pattern should be used instead. 30705 30706 If you want to support call frame exception handling, you must 30707 define either this macro or the 'eh_return' instruction pattern. 30708 30709 -- Macro: RETURN_ADDR_OFFSET 30710 If defined, an integer-valued C expression for which rtl will be 30711 generated to add it to the exception handler address before it is 30712 searched in the exception handling tables, and to subtract it again 30713 from the address before using it to return to the exception 30714 handler. 30715 30716 -- Macro: ASM_PREFERRED_EH_DATA_FORMAT (CODE, GLOBAL) 30717 This macro chooses the encoding of pointers embedded in the 30718 exception handling sections. If at all possible, this should be 30719 defined such that the exception handling section will not require 30720 dynamic relocations, and so may be read-only. 30721 30722 CODE is 0 for data, 1 for code labels, 2 for function pointers. 30723 GLOBAL is true if the symbol may be affected by dynamic 30724 relocations. The macro should return a combination of the 30725 'DW_EH_PE_*' defines as found in 'dwarf2.h'. 30726 30727 If this macro is not defined, pointers will not be encoded but 30728 represented directly. 30729 30730 -- Macro: ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX (FILE, ENCODING, SIZE, 30731 ADDR, DONE) 30732 This macro allows the target to emit whatever special magic is 30733 required to represent the encoding chosen by 30734 'ASM_PREFERRED_EH_DATA_FORMAT'. Generic code takes care of 30735 pc-relative and indirect encodings; this must be defined if the 30736 target uses text-relative or data-relative encodings. 30737 30738 This is a C statement that branches to DONE if the format was 30739 handled. ENCODING is the format chosen, SIZE is the number of 30740 bytes that the format occupies, ADDR is the 'SYMBOL_REF' to be 30741 emitted. 30742 30743 -- Macro: MD_FALLBACK_FRAME_STATE_FOR (CONTEXT, FS) 30744 This macro allows the target to add CPU and operating system 30745 specific code to the call-frame unwinder for use when there is no 30746 unwind data available. The most common reason to implement this 30747 macro is to unwind through signal frames. 30748 30749 This macro is called from 'uw_frame_state_for' in 'unwind-dw2.c', 30750 'unwind-dw2-xtensa.c' and 'unwind-ia64.c'. CONTEXT is an 30751 '_Unwind_Context'; FS is an '_Unwind_FrameState'. Examine 30752 'context->ra' for the address of the code being executed and 30753 'context->cfa' for the stack pointer value. If the frame can be 30754 decoded, the register save addresses should be updated in FS and 30755 the macro should evaluate to '_URC_NO_REASON'. If the frame cannot 30756 be decoded, the macro should evaluate to '_URC_END_OF_STACK'. 30757 30758 For proper signal handling in Java this macro is accompanied by 30759 'MAKE_THROW_FRAME', defined in 'libjava/include/*-signal.h' 30760 headers. 30761 30762 -- Macro: MD_HANDLE_UNWABI (CONTEXT, FS) 30763 This macro allows the target to add operating system specific code 30764 to the call-frame unwinder to handle the IA-64 '.unwabi' unwinding 30765 directive, usually used for signal or interrupt frames. 30766 30767 This macro is called from 'uw_update_context' in libgcc's 30768 'unwind-ia64.c'. CONTEXT is an '_Unwind_Context'; FS is an 30769 '_Unwind_FrameState'. Examine 'fs->unwabi' for the abi and context 30770 in the '.unwabi' directive. If the '.unwabi' directive can be 30771 handled, the register save addresses should be updated in FS. 30772 30773 -- Macro: TARGET_USES_WEAK_UNWIND_INFO 30774 A C expression that evaluates to true if the target requires unwind 30775 info to be given comdat linkage. Define it to be '1' if comdat 30776 linkage is necessary. The default is '0'. 30777 30778 30779File: gccint.info, Node: Stack Checking, Next: Frame Registers, Prev: Exception Handling, Up: Stack and Calling 30780 3078117.9.3 Specifying How Stack Checking is Done 30782-------------------------------------------- 30783 30784GCC will check that stack references are within the boundaries of the 30785stack, if the option '-fstack-check' is specified, in one of three ways: 30786 30787 1. If the value of the 'STACK_CHECK_BUILTIN' macro is nonzero, GCC 30788 will assume that you have arranged for full stack checking to be 30789 done at appropriate places in the configuration files. GCC will 30790 not do other special processing. 30791 30792 2. If 'STACK_CHECK_BUILTIN' is zero and the value of the 30793 'STACK_CHECK_STATIC_BUILTIN' macro is nonzero, GCC will assume that 30794 you have arranged for static stack checking (checking of the static 30795 stack frame of functions) to be done at appropriate places in the 30796 configuration files. GCC will only emit code to do dynamic stack 30797 checking (checking on dynamic stack allocations) using the third 30798 approach below. 30799 30800 3. If neither of the above are true, GCC will generate code to 30801 periodically "probe" the stack pointer using the values of the 30802 macros defined below. 30803 30804 If neither STACK_CHECK_BUILTIN nor STACK_CHECK_STATIC_BUILTIN is 30805defined, GCC will change its allocation strategy for large objects if 30806the option '-fstack-check' is specified: they will always be allocated 30807dynamically if their size exceeds 'STACK_CHECK_MAX_VAR_SIZE' bytes. 30808 30809 -- Macro: STACK_CHECK_BUILTIN 30810 A nonzero value if stack checking is done by the configuration 30811 files in a machine-dependent manner. You should define this macro 30812 if stack checking is required by the ABI of your machine or if you 30813 would like to do stack checking in some more efficient way than the 30814 generic approach. The default value of this macro is zero. 30815 30816 -- Macro: STACK_CHECK_STATIC_BUILTIN 30817 A nonzero value if static stack checking is done by the 30818 configuration files in a machine-dependent manner. You should 30819 define this macro if you would like to do static stack checking in 30820 some more efficient way than the generic approach. The default 30821 value of this macro is zero. 30822 30823 -- Macro: STACK_CHECK_PROBE_INTERVAL_EXP 30824 An integer specifying the interval at which GCC must generate stack 30825 probe instructions, defined as 2 raised to this integer. You will 30826 normally define this macro so that the interval be no larger than 30827 the size of the "guard pages" at the end of a stack area. The 30828 default value of 12 (4096-byte interval) is suitable for most 30829 systems. 30830 30831 -- Macro: STACK_CHECK_MOVING_SP 30832 An integer which is nonzero if GCC should move the stack pointer 30833 page by page when doing probes. This can be necessary on systems 30834 where the stack pointer contains the bottom address of the memory 30835 area accessible to the executing thread at any point in time. In 30836 this situation an alternate signal stack is required in order to be 30837 able to recover from a stack overflow. The default value of this 30838 macro is zero. 30839 30840 -- Macro: STACK_CHECK_PROTECT 30841 The number of bytes of stack needed to recover from a stack 30842 overflow, for languages where such a recovery is supported. The 30843 default value of 4KB/8KB with the 'setjmp'/'longjmp'-based 30844 exception handling mechanism and 8KB/12KB with other exception 30845 handling mechanisms should be adequate for most architectures and 30846 operating systems. 30847 30848 The following macros are relevant only if neither STACK_CHECK_BUILTIN 30849nor STACK_CHECK_STATIC_BUILTIN is defined; you can omit them altogether 30850in the opposite case. 30851 30852 -- Macro: STACK_CHECK_MAX_FRAME_SIZE 30853 The maximum size of a stack frame, in bytes. GCC will generate 30854 probe instructions in non-leaf functions to ensure at least this 30855 many bytes of stack are available. If a stack frame is larger than 30856 this size, stack checking will not be reliable and GCC will issue a 30857 warning. The default is chosen so that GCC only generates one 30858 instruction on most systems. You should normally not change the 30859 default value of this macro. 30860 30861 -- Macro: STACK_CHECK_FIXED_FRAME_SIZE 30862 GCC uses this value to generate the above warning message. It 30863 represents the amount of fixed frame used by a function, not 30864 including space for any callee-saved registers, temporaries and 30865 user variables. You need only specify an upper bound for this 30866 amount and will normally use the default of four words. 30867 30868 -- Macro: STACK_CHECK_MAX_VAR_SIZE 30869 The maximum size, in bytes, of an object that GCC will place in the 30870 fixed area of the stack frame when the user specifies 30871 '-fstack-check'. GCC computed the default from the values of the 30872 above macros and you will normally not need to override that 30873 default. 30874 30875 30876File: gccint.info, Node: Frame Registers, Next: Elimination, Prev: Stack Checking, Up: Stack and Calling 30877 3087817.9.4 Registers That Address the Stack Frame 30879--------------------------------------------- 30880 30881This discusses registers that address the stack frame. 30882 30883 -- Macro: STACK_POINTER_REGNUM 30884 The register number of the stack pointer register, which must also 30885 be a fixed register according to 'FIXED_REGISTERS'. On most 30886 machines, the hardware determines which register this is. 30887 30888 -- Macro: FRAME_POINTER_REGNUM 30889 The register number of the frame pointer register, which is used to 30890 access automatic variables in the stack frame. On some machines, 30891 the hardware determines which register this is. On other machines, 30892 you can choose any register you wish for this purpose. 30893 30894 -- Macro: HARD_FRAME_POINTER_REGNUM 30895 On some machines the offset between the frame pointer and starting 30896 offset of the automatic variables is not known until after register 30897 allocation has been done (for example, because the saved registers 30898 are between these two locations). On those machines, define 30899 'FRAME_POINTER_REGNUM' the number of a special, fixed register to 30900 be used internally until the offset is known, and define 30901 'HARD_FRAME_POINTER_REGNUM' to be the actual hard register number 30902 used for the frame pointer. 30903 30904 You should define this macro only in the very rare circumstances 30905 when it is not possible to calculate the offset between the frame 30906 pointer and the automatic variables until after register allocation 30907 has been completed. When this macro is defined, you must also 30908 indicate in your definition of 'ELIMINABLE_REGS' how to eliminate 30909 'FRAME_POINTER_REGNUM' into either 'HARD_FRAME_POINTER_REGNUM' or 30910 'STACK_POINTER_REGNUM'. 30911 30912 Do not define this macro if it would be the same as 30913 'FRAME_POINTER_REGNUM'. 30914 30915 -- Macro: ARG_POINTER_REGNUM 30916 The register number of the arg pointer register, which is used to 30917 access the function's argument list. On some machines, this is the 30918 same as the frame pointer register. On some machines, the hardware 30919 determines which register this is. On other machines, you can 30920 choose any register you wish for this purpose. If this is not the 30921 same register as the frame pointer register, then you must mark it 30922 as a fixed register according to 'FIXED_REGISTERS', or arrange to 30923 be able to eliminate it (*note Elimination::). 30924 30925 -- Macro: HARD_FRAME_POINTER_IS_FRAME_POINTER 30926 Define this to a preprocessor constant that is nonzero if 30927 'hard_frame_pointer_rtx' and 'frame_pointer_rtx' should be the 30928 same. The default definition is '(HARD_FRAME_POINTER_REGNUM == 30929 FRAME_POINTER_REGNUM)'; you only need to define this macro if that 30930 definition is not suitable for use in preprocessor conditionals. 30931 30932 -- Macro: HARD_FRAME_POINTER_IS_ARG_POINTER 30933 Define this to a preprocessor constant that is nonzero if 30934 'hard_frame_pointer_rtx' and 'arg_pointer_rtx' should be the same. 30935 The default definition is '(HARD_FRAME_POINTER_REGNUM == 30936 ARG_POINTER_REGNUM)'; you only need to define this macro if that 30937 definition is not suitable for use in preprocessor conditionals. 30938 30939 -- Macro: RETURN_ADDRESS_POINTER_REGNUM 30940 The register number of the return address pointer register, which 30941 is used to access the current function's return address from the 30942 stack. On some machines, the return address is not at a fixed 30943 offset from the frame pointer or stack pointer or argument pointer. 30944 This register can be defined to point to the return address on the 30945 stack, and then be converted by 'ELIMINABLE_REGS' into either the 30946 frame pointer or stack pointer. 30947 30948 Do not define this macro unless there is no other way to get the 30949 return address from the stack. 30950 30951 -- Macro: STATIC_CHAIN_REGNUM 30952 -- Macro: STATIC_CHAIN_INCOMING_REGNUM 30953 Register numbers used for passing a function's static chain 30954 pointer. If register windows are used, the register number as seen 30955 by the called function is 'STATIC_CHAIN_INCOMING_REGNUM', while the 30956 register number as seen by the calling function is 30957 'STATIC_CHAIN_REGNUM'. If these registers are the same, 30958 'STATIC_CHAIN_INCOMING_REGNUM' need not be defined. 30959 30960 The static chain register need not be a fixed register. 30961 30962 If the static chain is passed in memory, these macros should not be 30963 defined; instead, the 'TARGET_STATIC_CHAIN' hook should be used. 30964 30965 -- Target Hook: rtx TARGET_STATIC_CHAIN (const_tree FNDECL_OR_TYPE, 30966 bool INCOMING_P) 30967 This hook replaces the use of 'STATIC_CHAIN_REGNUM' et al for 30968 targets that may use different static chain locations for different 30969 nested functions. This may be required if the target has function 30970 attributes that affect the calling conventions of the function and 30971 those calling conventions use different static chain locations. 30972 30973 The default version of this hook uses 'STATIC_CHAIN_REGNUM' et al. 30974 30975 If the static chain is passed in memory, this hook should be used 30976 to provide rtx giving 'mem' expressions that denote where they are 30977 stored. Often the 'mem' expression as seen by the caller will be 30978 at an offset from the stack pointer and the 'mem' expression as 30979 seen by the callee will be at an offset from the frame pointer. 30980 The variables 'stack_pointer_rtx', 'frame_pointer_rtx', and 30981 'arg_pointer_rtx' will have been initialized and should be used to 30982 refer to those items. 30983 30984 -- Macro: DWARF_FRAME_REGISTERS 30985 This macro specifies the maximum number of hard registers that can 30986 be saved in a call frame. This is used to size data structures 30987 used in DWARF2 exception handling. 30988 30989 Prior to GCC 3.0, this macro was needed in order to establish a 30990 stable exception handling ABI in the face of adding new hard 30991 registers for ISA extensions. In GCC 3.0 and later, the EH ABI is 30992 insulated from changes in the number of hard registers. 30993 Nevertheless, this macro can still be used to reduce the runtime 30994 memory requirements of the exception handling routines, which can 30995 be substantial if the ISA contains a lot of registers that are not 30996 call-saved. 30997 30998 If this macro is not defined, it defaults to 30999 'FIRST_PSEUDO_REGISTER'. 31000 31001 -- Macro: PRE_GCC3_DWARF_FRAME_REGISTERS 31002 31003 This macro is similar to 'DWARF_FRAME_REGISTERS', but is provided 31004 for backward compatibility in pre GCC 3.0 compiled code. 31005 31006 If this macro is not defined, it defaults to 31007 'DWARF_FRAME_REGISTERS'. 31008 31009 -- Macro: DWARF_REG_TO_UNWIND_COLUMN (REGNO) 31010 31011 Define this macro if the target's representation for dwarf 31012 registers is different than the internal representation for unwind 31013 column. Given a dwarf register, this macro should return the 31014 internal unwind column number to use instead. 31015 31016 See the PowerPC's SPE target for an example. 31017 31018 -- Macro: DWARF_FRAME_REGNUM (REGNO) 31019 31020 Define this macro if the target's representation for dwarf 31021 registers used in .eh_frame or .debug_frame is different from that 31022 used in other debug info sections. Given a GCC hard register 31023 number, this macro should return the .eh_frame register number. 31024 The default is 'DBX_REGISTER_NUMBER (REGNO)'. 31025 31026 -- Macro: DWARF2_FRAME_REG_OUT (REGNO, FOR_EH) 31027 31028 Define this macro to map register numbers held in the call frame 31029 info that GCC has collected using 'DWARF_FRAME_REGNUM' to those 31030 that should be output in .debug_frame ('FOR_EH' is zero) and 31031 .eh_frame ('FOR_EH' is nonzero). The default is to return 'REGNO'. 31032 31033 -- Macro: REG_VALUE_IN_UNWIND_CONTEXT 31034 31035 Define this macro if the target stores register values as 31036 '_Unwind_Word' type in unwind context. It should be defined if 31037 target register size is larger than the size of 'void *'. The 31038 default is to store register values as 'void *' type. 31039 31040 -- Macro: ASSUME_EXTENDED_UNWIND_CONTEXT 31041 31042 Define this macro to be 1 if the target always uses extended unwind 31043 context with version, args_size and by_value fields. If it is 31044 undefined, it will be defined to 1 when 31045 'REG_VALUE_IN_UNWIND_CONTEXT' is defined and 0 otherwise. 31046 31047 31048File: gccint.info, Node: Elimination, Next: Stack Arguments, Prev: Frame Registers, Up: Stack and Calling 31049 3105017.9.5 Eliminating Frame Pointer and Arg Pointer 31051------------------------------------------------ 31052 31053This is about eliminating the frame pointer and arg pointer. 31054 31055 -- Target Hook: bool TARGET_FRAME_POINTER_REQUIRED (void) 31056 This target hook should return 'true' if a function must have and 31057 use a frame pointer. This target hook is called in the reload 31058 pass. If its return value is 'true' the function will have a frame 31059 pointer. 31060 31061 This target hook can in principle examine the current function and 31062 decide according to the facts, but on most machines the constant 31063 'false' or the constant 'true' suffices. Use 'false' when the 31064 machine allows code to be generated with no frame pointer, and 31065 doing so saves some time or space. Use 'true' when there is no 31066 possible advantage to avoiding a frame pointer. 31067 31068 In certain cases, the compiler does not know how to produce valid 31069 code without a frame pointer. The compiler recognizes those cases 31070 and automatically gives the function a frame pointer regardless of 31071 what 'TARGET_FRAME_POINTER_REQUIRED' returns. You don't need to 31072 worry about them. 31073 31074 In a function that does not require a frame pointer, the frame 31075 pointer register can be allocated for ordinary usage, unless you 31076 mark it as a fixed register. See 'FIXED_REGISTERS' for more 31077 information. 31078 31079 Default return value is 'false'. 31080 31081 -- Macro: INITIAL_FRAME_POINTER_OFFSET (DEPTH-VAR) 31082 A C statement to store in the variable DEPTH-VAR the difference 31083 between the frame pointer and the stack pointer values immediately 31084 after the function prologue. The value would be computed from 31085 information such as the result of 'get_frame_size ()' and the 31086 tables of registers 'regs_ever_live' and 'call_used_regs'. 31087 31088 If 'ELIMINABLE_REGS' is defined, this macro will be not be used and 31089 need not be defined. Otherwise, it must be defined even if 31090 'TARGET_FRAME_POINTER_REQUIRED' always returns true; in that case, 31091 you may set DEPTH-VAR to anything. 31092 31093 -- Macro: ELIMINABLE_REGS 31094 If defined, this macro specifies a table of register pairs used to 31095 eliminate unneeded registers that point into the stack frame. If 31096 it is not defined, the only elimination attempted by the compiler 31097 is to replace references to the frame pointer with references to 31098 the stack pointer. 31099 31100 The definition of this macro is a list of structure 31101 initializations, each of which specifies an original and 31102 replacement register. 31103 31104 On some machines, the position of the argument pointer is not known 31105 until the compilation is completed. In such a case, a separate 31106 hard register must be used for the argument pointer. This register 31107 can be eliminated by replacing it with either the frame pointer or 31108 the argument pointer, depending on whether or not the frame pointer 31109 has been eliminated. 31110 31111 In this case, you might specify: 31112 #define ELIMINABLE_REGS \ 31113 {{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ 31114 {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ 31115 {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}} 31116 31117 Note that the elimination of the argument pointer with the stack 31118 pointer is specified first since that is the preferred elimination. 31119 31120 -- Target Hook: bool TARGET_CAN_ELIMINATE (const int FROM_REG, const 31121 int TO_REG) 31122 This target hook should returns 'true' if the compiler is allowed 31123 to try to replace register number FROM_REG with register number 31124 TO_REG. This target hook need only be defined if 'ELIMINABLE_REGS' 31125 is defined, and will usually be 'true', since most of the cases 31126 preventing register elimination are things that the compiler 31127 already knows about. 31128 31129 Default return value is 'true'. 31130 31131 -- Macro: INITIAL_ELIMINATION_OFFSET (FROM-REG, TO-REG, OFFSET-VAR) 31132 This macro is similar to 'INITIAL_FRAME_POINTER_OFFSET'. It 31133 specifies the initial difference between the specified pair of 31134 registers. This macro must be defined if 'ELIMINABLE_REGS' is 31135 defined. 31136 31137 31138File: gccint.info, Node: Stack Arguments, Next: Register Arguments, Prev: Elimination, Up: Stack and Calling 31139 3114017.9.6 Passing Function Arguments on the Stack 31141---------------------------------------------- 31142 31143The macros in this section control how arguments are passed on the 31144stack. See the following section for other macros that control passing 31145certain arguments in registers. 31146 31147 -- Target Hook: bool TARGET_PROMOTE_PROTOTYPES (const_tree FNTYPE) 31148 This target hook returns 'true' if an argument declared in a 31149 prototype as an integral type smaller than 'int' should actually be 31150 passed as an 'int'. In addition to avoiding errors in certain 31151 cases of mismatch, it also makes for better code on certain 31152 machines. The default is to not promote prototypes. 31153 31154 -- Macro: PUSH_ARGS 31155 A C expression. If nonzero, push insns will be used to pass 31156 outgoing arguments. If the target machine does not have a push 31157 instruction, set it to zero. That directs GCC to use an alternate 31158 strategy: to allocate the entire argument block and then store the 31159 arguments into it. When 'PUSH_ARGS' is nonzero, 'PUSH_ROUNDING' 31160 must be defined too. 31161 31162 -- Macro: PUSH_ARGS_REVERSED 31163 A C expression. If nonzero, function arguments will be evaluated 31164 from last to first, rather than from first to last. If this macro 31165 is not defined, it defaults to 'PUSH_ARGS' on targets where the 31166 stack and args grow in opposite directions, and 0 otherwise. 31167 31168 -- Macro: PUSH_ROUNDING (NPUSHED) 31169 A C expression that is the number of bytes actually pushed onto the 31170 stack when an instruction attempts to push NPUSHED bytes. 31171 31172 On some machines, the definition 31173 31174 #define PUSH_ROUNDING(BYTES) (BYTES) 31175 31176 will suffice. But on other machines, instructions that appear to 31177 push one byte actually push two bytes in an attempt to maintain 31178 alignment. Then the definition should be 31179 31180 #define PUSH_ROUNDING(BYTES) (((BYTES) + 1) & ~1) 31181 31182 If the value of this macro has a type, it should be an unsigned 31183 type. 31184 31185 -- Macro: ACCUMULATE_OUTGOING_ARGS 31186 A C expression. If nonzero, the maximum amount of space required 31187 for outgoing arguments will be computed and placed into 31188 'crtl->outgoing_args_size'. No space will be pushed onto the stack 31189 for each call; instead, the function prologue should increase the 31190 stack frame size by this amount. 31191 31192 Setting both 'PUSH_ARGS' and 'ACCUMULATE_OUTGOING_ARGS' is not 31193 proper. 31194 31195 -- Macro: REG_PARM_STACK_SPACE (FNDECL) 31196 Define this macro if functions should assume that stack space has 31197 been allocated for arguments even when their values are passed in 31198 registers. 31199 31200 The value of this macro is the size, in bytes, of the area reserved 31201 for arguments passed in registers for the function represented by 31202 FNDECL, which can be zero if GCC is calling a library function. 31203 The argument FNDECL can be the FUNCTION_DECL, or the type itself of 31204 the function. 31205 31206 This space can be allocated by the caller, or be a part of the 31207 machine-dependent stack frame: 'OUTGOING_REG_PARM_STACK_SPACE' says 31208 which. 31209 31210 -- Macro: INCOMING_REG_PARM_STACK_SPACE (FNDECL) 31211 Like 'REG_PARM_STACK_SPACE', but for incoming register arguments. 31212 Define this macro if space guaranteed when compiling a function 31213 body is different to space required when making a call, a situation 31214 that can arise with K&R style function definitions. 31215 31216 -- Macro: OUTGOING_REG_PARM_STACK_SPACE (FNTYPE) 31217 Define this to a nonzero value if it is the responsibility of the 31218 caller to allocate the area reserved for arguments passed in 31219 registers when calling a function of FNTYPE. FNTYPE may be NULL if 31220 the function called is a library function. 31221 31222 If 'ACCUMULATE_OUTGOING_ARGS' is defined, this macro controls 31223 whether the space for these arguments counts in the value of 31224 'crtl->outgoing_args_size'. 31225 31226 -- Macro: STACK_PARMS_IN_REG_PARM_AREA 31227 Define this macro if 'REG_PARM_STACK_SPACE' is defined, but the 31228 stack parameters don't skip the area specified by it. 31229 31230 Normally, when a parameter is not passed in registers, it is placed 31231 on the stack beyond the 'REG_PARM_STACK_SPACE' area. Defining this 31232 macro suppresses this behavior and causes the parameter to be 31233 passed on the stack in its natural location. 31234 31235 -- Target Hook: int TARGET_RETURN_POPS_ARGS (tree FUNDECL, tree 31236 FUNTYPE, int SIZE) 31237 This target hook returns the number of bytes of its own arguments 31238 that a function pops on returning, or 0 if the function pops no 31239 arguments and the caller must therefore pop them all after the 31240 function returns. 31241 31242 FUNDECL is a C variable whose value is a tree node that describes 31243 the function in question. Normally it is a node of type 31244 'FUNCTION_DECL' that describes the declaration of the function. 31245 From this you can obtain the 'DECL_ATTRIBUTES' of the function. 31246 31247 FUNTYPE is a C variable whose value is a tree node that describes 31248 the function in question. Normally it is a node of type 31249 'FUNCTION_TYPE' that describes the data type of the function. From 31250 this it is possible to obtain the data types of the value and 31251 arguments (if known). 31252 31253 When a call to a library function is being considered, FUNDECL will 31254 contain an identifier node for the library function. Thus, if you 31255 need to distinguish among various library functions, you can do so 31256 by their names. Note that "library function" in this context means 31257 a function used to perform arithmetic, whose name is known 31258 specially in the compiler and was not mentioned in the C code being 31259 compiled. 31260 31261 SIZE is the number of bytes of arguments passed on the stack. If a 31262 variable number of bytes is passed, it is zero, and argument 31263 popping will always be the responsibility of the calling function. 31264 31265 On the VAX, all functions always pop their arguments, so the 31266 definition of this macro is SIZE. On the 68000, using the standard 31267 calling convention, no functions pop their arguments, so the value 31268 of the macro is always 0 in this case. But an alternative calling 31269 convention is available in which functions that take a fixed number 31270 of arguments pop them but other functions (such as 'printf') pop 31271 nothing (the caller pops all). When this convention is in use, 31272 FUNTYPE is examined to determine whether a function takes a fixed 31273 number of arguments. 31274 31275 -- Macro: CALL_POPS_ARGS (CUM) 31276 A C expression that should indicate the number of bytes a call 31277 sequence pops off the stack. It is added to the value of 31278 'RETURN_POPS_ARGS' when compiling a function call. 31279 31280 CUM is the variable in which all arguments to the called function 31281 have been accumulated. 31282 31283 On certain architectures, such as the SH5, a call trampoline is 31284 used that pops certain registers off the stack, depending on the 31285 arguments that have been passed to the function. Since this is a 31286 property of the call site, not of the called function, 31287 'RETURN_POPS_ARGS' is not appropriate. 31288 31289 31290File: gccint.info, Node: Register Arguments, Next: Scalar Return, Prev: Stack Arguments, Up: Stack and Calling 31291 3129217.9.7 Passing Arguments in Registers 31293------------------------------------- 31294 31295This section describes the macros which let you control how various 31296types of arguments are passed in registers or how they are arranged in 31297the stack. 31298 31299 -- Target Hook: rtx TARGET_FUNCTION_ARG (cumulative_args_t CA, 31300 machine_mode MODE, const_tree TYPE, bool NAMED) 31301 Return an RTX indicating whether a function argument is passed in a 31302 register and if so, which register. 31303 31304 The arguments are CA, which summarizes all the previous arguments; 31305 MODE, the machine mode of the argument; TYPE, the data type of the 31306 argument as a tree node or 0 if that is not known (which happens 31307 for C support library functions); and NAMED, which is 'true' for an 31308 ordinary argument and 'false' for nameless arguments that 31309 correspond to '...' in the called function's prototype. TYPE can 31310 be an incomplete type if a syntax error has previously occurred. 31311 31312 The return value is usually either a 'reg' RTX for the hard 31313 register in which to pass the argument, or zero to pass the 31314 argument on the stack. 31315 31316 The return value can be a 'const_int' which means argument is 31317 passed in a target specific slot with specified number. Target 31318 hooks should be used to store or load argument in such case. See 31319 'TARGET_STORE_BOUNDS_FOR_ARG' and 'TARGET_LOAD_BOUNDS_FOR_ARG' for 31320 more information. 31321 31322 The value of the expression can also be a 'parallel' RTX. This is 31323 used when an argument is passed in multiple locations. The mode of 31324 the 'parallel' should be the mode of the entire argument. The 31325 'parallel' holds any number of 'expr_list' pairs; each one 31326 describes where part of the argument is passed. In each 31327 'expr_list' the first operand must be a 'reg' RTX for the hard 31328 register in which to pass this part of the argument, and the mode 31329 of the register RTX indicates how large this part of the argument 31330 is. The second operand of the 'expr_list' is a 'const_int' which 31331 gives the offset in bytes into the entire argument of where this 31332 part starts. As a special exception the first 'expr_list' in the 31333 'parallel' RTX may have a first operand of zero. This indicates 31334 that the entire argument is also stored on the stack. 31335 31336 The last time this hook is called, it is called with 'MODE == 31337 VOIDmode', and its result is passed to the 'call' or 'call_value' 31338 pattern as operands 2 and 3 respectively. 31339 31340 The usual way to make the ISO library 'stdarg.h' work on a machine 31341 where some arguments are usually passed in registers, is to cause 31342 nameless arguments to be passed on the stack instead. This is done 31343 by making 'TARGET_FUNCTION_ARG' return 0 whenever NAMED is 'false'. 31344 31345 You may use the hook 'targetm.calls.must_pass_in_stack' in the 31346 definition of this macro to determine if this argument is of a type 31347 that must be passed in the stack. If 'REG_PARM_STACK_SPACE' is not 31348 defined and 'TARGET_FUNCTION_ARG' returns nonzero for such an 31349 argument, the compiler will abort. If 'REG_PARM_STACK_SPACE' is 31350 defined, the argument will be computed in the stack and then loaded 31351 into a register. 31352 31353 -- Target Hook: bool TARGET_MUST_PASS_IN_STACK (machine_mode MODE, 31354 const_tree TYPE) 31355 This target hook should return 'true' if we should not pass TYPE 31356 solely in registers. The file 'expr.h' defines a definition that 31357 is usually appropriate, refer to 'expr.h' for additional 31358 documentation. 31359 31360 -- Target Hook: rtx TARGET_FUNCTION_INCOMING_ARG (cumulative_args_t CA, 31361 machine_mode MODE, const_tree TYPE, bool NAMED) 31362 Define this hook if the target machine has "register windows", so 31363 that the register in which a function sees an arguments is not 31364 necessarily the same as the one in which the caller passed the 31365 argument. 31366 31367 For such machines, 'TARGET_FUNCTION_ARG' computes the register in 31368 which the caller passes the value, and 31369 'TARGET_FUNCTION_INCOMING_ARG' should be defined in a similar 31370 fashion to tell the function being called where the arguments will 31371 arrive. 31372 31373 If 'TARGET_FUNCTION_INCOMING_ARG' is not defined, 31374 'TARGET_FUNCTION_ARG' serves both purposes. 31375 31376 -- Target Hook: bool TARGET_USE_PSEUDO_PIC_REG (void) 31377 This hook should return 1 in case pseudo register should be created 31378 for pic_offset_table_rtx during function expand. 31379 31380 -- Target Hook: void TARGET_INIT_PIC_REG (void) 31381 Perform a target dependent initialization of pic_offset_table_rtx. 31382 This hook is called at the start of register allocation. 31383 31384 -- Target Hook: int TARGET_ARG_PARTIAL_BYTES (cumulative_args_t CUM, 31385 machine_mode MODE, tree TYPE, bool NAMED) 31386 This target hook returns the number of bytes at the beginning of an 31387 argument that must be put in registers. The value must be zero for 31388 arguments that are passed entirely in registers or that are 31389 entirely pushed on the stack. 31390 31391 On some machines, certain arguments must be passed partially in 31392 registers and partially in memory. On these machines, typically 31393 the first few words of arguments are passed in registers, and the 31394 rest on the stack. If a multi-word argument (a 'double' or a 31395 structure) crosses that boundary, its first few words must be 31396 passed in registers and the rest must be pushed. This macro tells 31397 the compiler when this occurs, and how many bytes should go in 31398 registers. 31399 31400 'TARGET_FUNCTION_ARG' for these arguments should return the first 31401 register to be used by the caller for this argument; likewise 31402 'TARGET_FUNCTION_INCOMING_ARG', for the called function. 31403 31404 -- Target Hook: bool TARGET_PASS_BY_REFERENCE (cumulative_args_t CUM, 31405 machine_mode MODE, const_tree TYPE, bool NAMED) 31406 This target hook should return 'true' if an argument at the 31407 position indicated by CUM should be passed by reference. This 31408 predicate is queried after target independent reasons for being 31409 passed by reference, such as 'TREE_ADDRESSABLE (type)'. 31410 31411 If the hook returns true, a copy of that argument is made in memory 31412 and a pointer to the argument is passed instead of the argument 31413 itself. The pointer is passed in whatever way is appropriate for 31414 passing a pointer to that type. 31415 31416 -- Target Hook: bool TARGET_CALLEE_COPIES (cumulative_args_t CUM, 31417 machine_mode MODE, const_tree TYPE, bool NAMED) 31418 The function argument described by the parameters to this hook is 31419 known to be passed by reference. The hook should return true if 31420 the function argument should be copied by the callee instead of 31421 copied by the caller. 31422 31423 For any argument for which the hook returns true, if it can be 31424 determined that the argument is not modified, then a copy need not 31425 be generated. 31426 31427 The default version of this hook always returns false. 31428 31429 -- Macro: CUMULATIVE_ARGS 31430 A C type for declaring a variable that is used as the first 31431 argument of 'TARGET_FUNCTION_ARG' and other related values. For 31432 some target machines, the type 'int' suffices and can hold the 31433 number of bytes of argument so far. 31434 31435 There is no need to record in 'CUMULATIVE_ARGS' anything about the 31436 arguments that have been passed on the stack. The compiler has 31437 other variables to keep track of that. For target machines on 31438 which all arguments are passed on the stack, there is no need to 31439 store anything in 'CUMULATIVE_ARGS'; however, the data structure 31440 must exist and should not be empty, so use 'int'. 31441 31442 -- Macro: OVERRIDE_ABI_FORMAT (FNDECL) 31443 If defined, this macro is called before generating any code for a 31444 function, but after the CFUN descriptor for the function has been 31445 created. The back end may use this macro to update CFUN to reflect 31446 an ABI other than that which would normally be used by default. If 31447 the compiler is generating code for a compiler-generated function, 31448 FNDECL may be 'NULL'. 31449 31450 -- Macro: INIT_CUMULATIVE_ARGS (CUM, FNTYPE, LIBNAME, FNDECL, 31451 N_NAMED_ARGS) 31452 A C statement (sans semicolon) for initializing the variable CUM 31453 for the state at the beginning of the argument list. The variable 31454 has type 'CUMULATIVE_ARGS'. The value of FNTYPE is the tree node 31455 for the data type of the function which will receive the args, or 0 31456 if the args are to a compiler support library function. For direct 31457 calls that are not libcalls, FNDECL contain the declaration node of 31458 the function. FNDECL is also set when 'INIT_CUMULATIVE_ARGS' is 31459 used to find arguments for the function being compiled. 31460 N_NAMED_ARGS is set to the number of named arguments, including a 31461 structure return address if it is passed as a parameter, when 31462 making a call. When processing incoming arguments, N_NAMED_ARGS is 31463 set to -1. 31464 31465 When processing a call to a compiler support library function, 31466 LIBNAME identifies which one. It is a 'symbol_ref' rtx which 31467 contains the name of the function, as a string. LIBNAME is 0 when 31468 an ordinary C function call is being processed. Thus, each time 31469 this macro is called, either LIBNAME or FNTYPE is nonzero, but 31470 never both of them at once. 31471 31472 -- Macro: INIT_CUMULATIVE_LIBCALL_ARGS (CUM, MODE, LIBNAME) 31473 Like 'INIT_CUMULATIVE_ARGS' but only used for outgoing libcalls, it 31474 gets a 'MODE' argument instead of FNTYPE, that would be 'NULL'. 31475 INDIRECT would always be zero, too. If this macro is not defined, 31476 'INIT_CUMULATIVE_ARGS (cum, NULL_RTX, libname, 0)' is used instead. 31477 31478 -- Macro: INIT_CUMULATIVE_INCOMING_ARGS (CUM, FNTYPE, LIBNAME) 31479 Like 'INIT_CUMULATIVE_ARGS' but overrides it for the purposes of 31480 finding the arguments for the function being compiled. If this 31481 macro is undefined, 'INIT_CUMULATIVE_ARGS' is used instead. 31482 31483 The value passed for LIBNAME is always 0, since library routines 31484 with special calling conventions are never compiled with GCC. The 31485 argument LIBNAME exists for symmetry with 'INIT_CUMULATIVE_ARGS'. 31486 31487 -- Target Hook: void TARGET_FUNCTION_ARG_ADVANCE (cumulative_args_t CA, 31488 machine_mode MODE, const_tree TYPE, bool NAMED) 31489 This hook updates the summarizer variable pointed to by CA to 31490 advance past an argument in the argument list. The values MODE, 31491 TYPE and NAMED describe that argument. Once this is done, the 31492 variable CUM is suitable for analyzing the _following_ argument 31493 with 'TARGET_FUNCTION_ARG', etc. 31494 31495 This hook need not do anything if the argument in question was 31496 passed on the stack. The compiler knows how to track the amount of 31497 stack space used for arguments without any special help. 31498 31499 -- Macro: FUNCTION_ARG_OFFSET (MODE, TYPE) 31500 If defined, a C expression that is the number of bytes to add to 31501 the offset of the argument passed in memory. This is needed for 31502 the SPU, which passes 'char' and 'short' arguments in the preferred 31503 slot that is in the middle of the quad word instead of starting at 31504 the top. 31505 31506 -- Macro: FUNCTION_ARG_PADDING (MODE, TYPE) 31507 If defined, a C expression which determines whether, and in which 31508 direction, to pad out an argument with extra space. The value 31509 should be of type 'enum direction': either 'upward' to pad above 31510 the argument, 'downward' to pad below, or 'none' to inhibit 31511 padding. 31512 31513 The _amount_ of padding is not controlled by this macro, but by the 31514 target hook 'TARGET_FUNCTION_ARG_ROUND_BOUNDARY'. It is always 31515 just enough to reach the next multiple of that boundary. 31516 31517 This macro has a default definition which is right for most 31518 systems. For little-endian machines, the default is to pad upward. 31519 For big-endian machines, the default is to pad downward for an 31520 argument of constant size shorter than an 'int', and upward 31521 otherwise. 31522 31523 -- Macro: PAD_VARARGS_DOWN 31524 If defined, a C expression which determines whether the default 31525 implementation of va_arg will attempt to pad down before reading 31526 the next argument, if that argument is smaller than its aligned 31527 space as controlled by 'PARM_BOUNDARY'. If this macro is not 31528 defined, all such arguments are padded down if 'BYTES_BIG_ENDIAN' 31529 is true. 31530 31531 -- Macro: BLOCK_REG_PADDING (MODE, TYPE, FIRST) 31532 Specify padding for the last element of a block move between 31533 registers and memory. FIRST is nonzero if this is the only 31534 element. Defining this macro allows better control of register 31535 function parameters on big-endian machines, without using 31536 'PARALLEL' rtl. In particular, 'MUST_PASS_IN_STACK' need not test 31537 padding and mode of types in registers, as there is no longer a 31538 "wrong" part of a register; For example, a three byte aggregate may 31539 be passed in the high part of a register if so required. 31540 31541 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_BOUNDARY (machine_mode 31542 MODE, const_tree TYPE) 31543 This hook returns the alignment boundary, in bits, of an argument 31544 with the specified mode and type. The default hook returns 31545 'PARM_BOUNDARY' for all arguments. 31546 31547 -- Target Hook: unsigned int TARGET_FUNCTION_ARG_ROUND_BOUNDARY 31548 (machine_mode MODE, const_tree TYPE) 31549 Normally, the size of an argument is rounded up to 'PARM_BOUNDARY', 31550 which is the default value for this hook. You can define this hook 31551 to return a different value if an argument size must be rounded to 31552 a larger value. 31553 31554 -- Macro: FUNCTION_ARG_REGNO_P (REGNO) 31555 A C expression that is nonzero if REGNO is the number of a hard 31556 register in which function arguments are sometimes passed. This 31557 does _not_ include implicit arguments such as the static chain and 31558 the structure-value address. On many machines, no registers can be 31559 used for this purpose since all function arguments are pushed on 31560 the stack. 31561 31562 -- Target Hook: bool TARGET_SPLIT_COMPLEX_ARG (const_tree TYPE) 31563 This hook should return true if parameter of type TYPE are passed 31564 as two scalar parameters. By default, GCC will attempt to pack 31565 complex arguments into the target's word size. Some ABIs require 31566 complex arguments to be split and treated as their individual 31567 components. For example, on AIX64, complex floats should be passed 31568 in a pair of floating point registers, even though a complex float 31569 would fit in one 64-bit floating point register. 31570 31571 The default value of this hook is 'NULL', which is treated as 31572 always false. 31573 31574 -- Target Hook: tree TARGET_BUILD_BUILTIN_VA_LIST (void) 31575 This hook returns a type node for 'va_list' for the target. The 31576 default version of the hook returns 'void*'. 31577 31578 -- Target Hook: int TARGET_ENUM_VA_LIST_P (int IDX, const char **PNAME, 31579 tree *PTREE) 31580 This target hook is used in function 'c_common_nodes_and_builtins' 31581 to iterate through the target specific builtin types for va_list. 31582 The variable IDX is used as iterator. PNAME has to be a pointer to 31583 a 'const char *' and PTREE a pointer to a 'tree' typed variable. 31584 The arguments PNAME and PTREE are used to store the result of this 31585 macro and are set to the name of the va_list builtin type and its 31586 internal type. If the return value of this macro is zero, then 31587 there is no more element. Otherwise the IDX should be increased 31588 for the next call of this macro to iterate through all types. 31589 31590 -- Target Hook: tree TARGET_FN_ABI_VA_LIST (tree FNDECL) 31591 This hook returns the va_list type of the calling convention 31592 specified by FNDECL. The default version of this hook returns 31593 'va_list_type_node'. 31594 31595 -- Target Hook: tree TARGET_CANONICAL_VA_LIST_TYPE (tree TYPE) 31596 This hook returns the va_list type of the calling convention 31597 specified by the type of TYPE. If TYPE is not a valid va_list 31598 type, it returns 'NULL_TREE'. 31599 31600 -- Target Hook: tree TARGET_GIMPLIFY_VA_ARG_EXPR (tree VALIST, tree 31601 TYPE, gimple_seq *PRE_P, gimple_seq *POST_P) 31602 This hook performs target-specific gimplification of 'VA_ARG_EXPR'. 31603 The first two parameters correspond to the arguments to 'va_arg'; 31604 the latter two are as in 'gimplify.c:gimplify_expr'. 31605 31606 -- Target Hook: bool TARGET_VALID_POINTER_MODE (machine_mode MODE) 31607 Define this to return nonzero if the port can handle pointers with 31608 machine mode MODE. The default version of this hook returns true 31609 for both 'ptr_mode' and 'Pmode'. 31610 31611 -- Target Hook: bool TARGET_REF_MAY_ALIAS_ERRNO (struct ao_ref *REF) 31612 Define this to return nonzero if the memory reference REF may alias 31613 with the system C library errno location. The default version of 31614 this hook assumes the system C library errno location is either a 31615 declaration of type int or accessed by dereferencing a pointer to 31616 int. 31617 31618 -- Target Hook: bool TARGET_SCALAR_MODE_SUPPORTED_P (machine_mode MODE) 31619 Define this to return nonzero if the port is prepared to handle 31620 insns involving scalar mode MODE. For a scalar mode to be 31621 considered supported, all the basic arithmetic and comparisons must 31622 work. 31623 31624 The default version of this hook returns true for any mode required 31625 to handle the basic C types (as defined by the port). Included 31626 here are the double-word arithmetic supported by the code in 31627 'optabs.c'. 31628 31629 -- Target Hook: bool TARGET_VECTOR_MODE_SUPPORTED_P (machine_mode MODE) 31630 Define this to return nonzero if the port is prepared to handle 31631 insns involving vector mode MODE. At the very least, it must have 31632 move patterns for this mode. 31633 31634 -- Target Hook: bool TARGET_ARRAY_MODE_SUPPORTED_P (machine_mode MODE, 31635 unsigned HOST_WIDE_INT NELEMS) 31636 Return true if GCC should try to use a scalar mode to store an 31637 array of NELEMS elements, given that each element has mode MODE. 31638 Returning true here overrides the usual 'MAX_FIXED_MODE' limit and 31639 allows GCC to use any defined integer mode. 31640 31641 One use of this hook is to support vector load and store operations 31642 that operate on several homogeneous vectors. For example, ARM NEON 31643 has operations like: 31644 31645 int8x8x3_t vld3_s8 (const int8_t *) 31646 31647 where the return type is defined as: 31648 31649 typedef struct int8x8x3_t 31650 { 31651 int8x8_t val[3]; 31652 } int8x8x3_t; 31653 31654 If this hook allows 'val' to have a scalar mode, then 'int8x8x3_t' 31655 can have the same mode. GCC can then store 'int8x8x3_t's in 31656 registers rather than forcing them onto the stack. 31657 31658 -- Target Hook: bool TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P 31659 (machine_mode MODE) 31660 Define this to return nonzero if libgcc provides support for the 31661 floating-point mode MODE, which is known to pass 31662 'TARGET_SCALAR_MODE_SUPPORTED_P'. The default version of this hook 31663 returns true for all of 'SFmode', 'DFmode', 'XFmode' and 'TFmode', 31664 if such modes exist. 31665 31666 -- Target Hook: bool TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P 31667 (machine_mode MODE) 31668 Define this to return nonzero for machine modes for which the port 31669 has small register classes. If this target hook returns nonzero 31670 for a given MODE, the compiler will try to minimize the lifetime of 31671 registers in MODE. The hook may be called with 'VOIDmode' as 31672 argument. In this case, the hook is expected to return nonzero if 31673 it returns nonzero for any mode. 31674 31675 On some machines, it is risky to let hard registers live across 31676 arbitrary insns. Typically, these machines have instructions that 31677 require values to be in specific registers (like an accumulator), 31678 and reload will fail if the required hard register is used for 31679 another purpose across such an insn. 31680 31681 Passes before reload do not know which hard registers will be used 31682 in an instruction, but the machine modes of the registers set or 31683 used in the instruction are already known. And for some machines, 31684 register classes are small for, say, integer registers but not for 31685 floating point registers. For example, the AMD x86-64 architecture 31686 requires specific registers for the legacy x86 integer 31687 instructions, but there are many SSE registers for floating point 31688 operations. On such targets, a good strategy may be to return 31689 nonzero from this hook for 'INTEGRAL_MODE_P' machine modes but zero 31690 for the SSE register classes. 31691 31692 The default version of this hook returns false for any mode. It is 31693 always safe to redefine this hook to return with a nonzero value. 31694 But if you unnecessarily define it, you will reduce the amount of 31695 optimizations that can be performed in some cases. If you do not 31696 define this hook to return a nonzero value when it is required, the 31697 compiler will run out of spill registers and print a fatal error 31698 message. 31699 31700 31701File: gccint.info, Node: Scalar Return, Next: Aggregate Return, Prev: Register Arguments, Up: Stack and Calling 31702 3170317.9.8 How Scalar Function Values Are Returned 31704---------------------------------------------- 31705 31706This section discusses the macros that control returning scalars as 31707values--values that can fit in registers. 31708 31709 -- Target Hook: rtx TARGET_FUNCTION_VALUE (const_tree RET_TYPE, 31710 const_tree FN_DECL_OR_TYPE, bool OUTGOING) 31711 31712 Define this to return an RTX representing the place where a 31713 function returns or receives a value of data type RET_TYPE, a tree 31714 node representing a data type. FN_DECL_OR_TYPE is a tree node 31715 representing 'FUNCTION_DECL' or 'FUNCTION_TYPE' of a function being 31716 called. If OUTGOING is false, the hook should compute the register 31717 in which the caller will see the return value. Otherwise, the hook 31718 should return an RTX representing the place where a function 31719 returns a value. 31720 31721 On many machines, only 'TYPE_MODE (RET_TYPE)' is relevant. 31722 (Actually, on most machines, scalar values are returned in the same 31723 place regardless of mode.) The value of the expression is usually 31724 a 'reg' RTX for the hard register where the return value is stored. 31725 The value can also be a 'parallel' RTX, if the return value is in 31726 multiple places. See 'TARGET_FUNCTION_ARG' for an explanation of 31727 the 'parallel' form. Note that the callee will populate every 31728 location specified in the 'parallel', but if the first element of 31729 the 'parallel' contains the whole return value, callers will use 31730 that element as the canonical location and ignore the others. The 31731 m68k port uses this type of 'parallel' to return pointers in both 31732 '%a0' (the canonical location) and '%d0'. 31733 31734 If 'TARGET_PROMOTE_FUNCTION_RETURN' returns true, you must apply 31735 the same promotion rules specified in 'PROMOTE_MODE' if VALTYPE is 31736 a scalar type. 31737 31738 If the precise function being called is known, FUNC is a tree node 31739 ('FUNCTION_DECL') for it; otherwise, FUNC is a null pointer. This 31740 makes it possible to use a different value-returning convention for 31741 specific functions when all their calls are known. 31742 31743 Some target machines have "register windows" so that the register 31744 in which a function returns its value is not the same as the one in 31745 which the caller sees the value. For such machines, you should 31746 return different RTX depending on OUTGOING. 31747 31748 'TARGET_FUNCTION_VALUE' is not used for return values with 31749 aggregate data types, because these are returned in another way. 31750 See 'TARGET_STRUCT_VALUE_RTX' and related macros, below. 31751 31752 -- Macro: FUNCTION_VALUE (VALTYPE, FUNC) 31753 This macro has been deprecated. Use 'TARGET_FUNCTION_VALUE' for a 31754 new target instead. 31755 31756 -- Macro: LIBCALL_VALUE (MODE) 31757 A C expression to create an RTX representing the place where a 31758 library function returns a value of mode MODE. 31759 31760 Note that "library function" in this context means a compiler 31761 support routine, used to perform arithmetic, whose name is known 31762 specially by the compiler and was not mentioned in the C code being 31763 compiled. 31764 31765 -- Target Hook: rtx TARGET_LIBCALL_VALUE (machine_mode MODE, const_rtx 31766 FUN) 31767 Define this hook if the back-end needs to know the name of the 31768 libcall function in order to determine where the result should be 31769 returned. 31770 31771 The mode of the result is given by MODE and the name of the called 31772 library function is given by FUN. The hook should return an RTX 31773 representing the place where the library function result will be 31774 returned. 31775 31776 If this hook is not defined, then LIBCALL_VALUE will be used. 31777 31778 -- Macro: FUNCTION_VALUE_REGNO_P (REGNO) 31779 A C expression that is nonzero if REGNO is the number of a hard 31780 register in which the values of called function may come back. 31781 31782 A register whose use for returning values is limited to serving as 31783 the second of a pair (for a value of type 'double', say) need not 31784 be recognized by this macro. So for most machines, this definition 31785 suffices: 31786 31787 #define FUNCTION_VALUE_REGNO_P(N) ((N) == 0) 31788 31789 If the machine has register windows, so that the caller and the 31790 called function use different registers for the return value, this 31791 macro should recognize only the caller's register numbers. 31792 31793 This macro has been deprecated. Use 31794 'TARGET_FUNCTION_VALUE_REGNO_P' for a new target instead. 31795 31796 -- Target Hook: bool TARGET_FUNCTION_VALUE_REGNO_P (const unsigned int 31797 REGNO) 31798 A target hook that return 'true' if REGNO is the number of a hard 31799 register in which the values of called function may come back. 31800 31801 A register whose use for returning values is limited to serving as 31802 the second of a pair (for a value of type 'double', say) need not 31803 be recognized by this target hook. 31804 31805 If the machine has register windows, so that the caller and the 31806 called function use different registers for the return value, this 31807 target hook should recognize only the caller's register numbers. 31808 31809 If this hook is not defined, then FUNCTION_VALUE_REGNO_P will be 31810 used. 31811 31812 -- Macro: APPLY_RESULT_SIZE 31813 Define this macro if 'untyped_call' and 'untyped_return' need more 31814 space than is implied by 'FUNCTION_VALUE_REGNO_P' for saving and 31815 restoring an arbitrary return value. 31816 31817 -- Target Hook: bool TARGET_OMIT_STRUCT_RETURN_REG 31818 Normally, when a function returns a structure by memory, the 31819 address is passed as an invisible pointer argument, but the 31820 compiler also arranges to return the address from the function like 31821 it would a normal pointer return value. Define this to true if 31822 that behavior is undesirable on your target. 31823 31824 -- Target Hook: bool TARGET_RETURN_IN_MSB (const_tree TYPE) 31825 This hook should return true if values of type TYPE are returned at 31826 the most significant end of a register (in other words, if they are 31827 padded at the least significant end). You can assume that TYPE is 31828 returned in a register; the caller is required to check this. 31829 31830 Note that the register provided by 'TARGET_FUNCTION_VALUE' must be 31831 able to hold the complete return value. For example, if a 1-, 2- 31832 or 3-byte structure is returned at the most significant end of a 31833 4-byte register, 'TARGET_FUNCTION_VALUE' should provide an 'SImode' 31834 rtx. 31835 31836 31837File: gccint.info, Node: Aggregate Return, Next: Caller Saves, Prev: Scalar Return, Up: Stack and Calling 31838 3183917.9.9 How Large Values Are Returned 31840------------------------------------ 31841 31842When a function value's mode is 'BLKmode' (and in some other cases), the 31843value is not returned according to 'TARGET_FUNCTION_VALUE' (*note Scalar 31844Return::). Instead, the caller passes the address of a block of memory 31845in which the value should be stored. This address is called the 31846"structure value address". 31847 31848 This section describes how to control returning structure values in 31849memory. 31850 31851 -- Target Hook: bool TARGET_RETURN_IN_MEMORY (const_tree TYPE, 31852 const_tree FNTYPE) 31853 This target hook should return a nonzero value to say to return the 31854 function value in memory, just as large structures are always 31855 returned. Here TYPE will be the data type of the value, and FNTYPE 31856 will be the type of the function doing the returning, or 'NULL' for 31857 libcalls. 31858 31859 Note that values of mode 'BLKmode' must be explicitly handled by 31860 this function. Also, the option '-fpcc-struct-return' takes effect 31861 regardless of this macro. On most systems, it is possible to leave 31862 the hook undefined; this causes a default definition to be used, 31863 whose value is the constant 1 for 'BLKmode' values, and 0 31864 otherwise. 31865 31866 Do not use this hook to indicate that structures and unions should 31867 always be returned in memory. You should instead use 31868 'DEFAULT_PCC_STRUCT_RETURN' to indicate this. 31869 31870 -- Macro: DEFAULT_PCC_STRUCT_RETURN 31871 Define this macro to be 1 if all structure and union return values 31872 must be in memory. Since this results in slower code, this should 31873 be defined only if needed for compatibility with other compilers or 31874 with an ABI. If you define this macro to be 0, then the 31875 conventions used for structure and union return values are decided 31876 by the 'TARGET_RETURN_IN_MEMORY' target hook. 31877 31878 If not defined, this defaults to the value 1. 31879 31880 -- Target Hook: rtx TARGET_STRUCT_VALUE_RTX (tree FNDECL, int INCOMING) 31881 This target hook should return the location of the structure value 31882 address (normally a 'mem' or 'reg'), or 0 if the address is passed 31883 as an "invisible" first argument. Note that FNDECL may be 'NULL', 31884 for libcalls. You do not need to define this target hook if the 31885 address is always passed as an "invisible" first argument. 31886 31887 On some architectures the place where the structure value address 31888 is found by the called function is not the same place that the 31889 caller put it. This can be due to register windows, or it could be 31890 because the function prologue moves it to a different place. 31891 INCOMING is '1' or '2' when the location is needed in the context 31892 of the called function, and '0' in the context of the caller. 31893 31894 If INCOMING is nonzero and the address is to be found on the stack, 31895 return a 'mem' which refers to the frame pointer. If INCOMING is 31896 '2', the result is being used to fetch the structure value address 31897 at the beginning of a function. If you need to emit adjusting 31898 code, you should do it at this point. 31899 31900 -- Macro: PCC_STATIC_STRUCT_RETURN 31901 Define this macro if the usual system convention on the target 31902 machine for returning structures and unions is for the called 31903 function to return the address of a static variable containing the 31904 value. 31905 31906 Do not define this if the usual system convention is for the caller 31907 to pass an address to the subroutine. 31908 31909 This macro has effect in '-fpcc-struct-return' mode, but it does 31910 nothing when you use '-freg-struct-return' mode. 31911 31912 -- Target Hook: machine_mode TARGET_GET_RAW_RESULT_MODE (int REGNO) 31913 This target hook returns the mode to be used when accessing raw 31914 return registers in '__builtin_return'. Define this macro if the 31915 value in REG_RAW_MODE is not correct. 31916 31917 -- Target Hook: machine_mode TARGET_GET_RAW_ARG_MODE (int REGNO) 31918 This target hook returns the mode to be used when accessing raw 31919 argument registers in '__builtin_apply_args'. Define this macro if 31920 the value in REG_RAW_MODE is not correct. 31921 31922 31923File: gccint.info, Node: Caller Saves, Next: Function Entry, Prev: Aggregate Return, Up: Stack and Calling 31924 3192517.9.10 Caller-Saves Register Allocation 31926---------------------------------------- 31927 31928If you enable it, GCC can save registers around function calls. This 31929makes it possible to use call-clobbered registers to hold variables that 31930must live across calls. 31931 31932 -- Macro: HARD_REGNO_CALLER_SAVE_MODE (REGNO, NREGS) 31933 A C expression specifying which mode is required for saving NREGS 31934 of a pseudo-register in call-clobbered hard register REGNO. If 31935 REGNO is unsuitable for caller save, 'VOIDmode' should be returned. 31936 For most machines this macro need not be defined since GCC will 31937 select the smallest suitable mode. 31938 31939 31940File: gccint.info, Node: Function Entry, Next: Profiling, Prev: Caller Saves, Up: Stack and Calling 31941 3194217.9.11 Function Entry and Exit 31943------------------------------- 31944 31945This section describes the macros that output function entry 31946("prologue") and exit ("epilogue") code. 31947 31948 -- Target Hook: void TARGET_ASM_FUNCTION_PROLOGUE (FILE *FILE, 31949 HOST_WIDE_INT SIZE) 31950 If defined, a function that outputs the assembler code for entry to 31951 a function. The prologue is responsible for setting up the stack 31952 frame, initializing the frame pointer register, saving registers 31953 that must be saved, and allocating SIZE additional bytes of storage 31954 for the local variables. SIZE is an integer. FILE is a stdio 31955 stream to which the assembler code should be output. 31956 31957 The label for the beginning of the function need not be output by 31958 this macro. That has already been done when the macro is run. 31959 31960 To determine which registers to save, the macro can refer to the 31961 array 'regs_ever_live': element R is nonzero if hard register R is 31962 used anywhere within the function. This implies the function 31963 prologue should save register R, provided it is not one of the 31964 call-used registers. ('TARGET_ASM_FUNCTION_EPILOGUE' must likewise 31965 use 'regs_ever_live'.) 31966 31967 On machines that have "register windows", the function entry code 31968 does not save on the stack the registers that are in the windows, 31969 even if they are supposed to be preserved by function calls; 31970 instead it takes appropriate steps to "push" the register stack, if 31971 any non-call-used registers are used in the function. 31972 31973 On machines where functions may or may not have frame-pointers, the 31974 function entry code must vary accordingly; it must set up the frame 31975 pointer if one is wanted, and not otherwise. To determine whether 31976 a frame pointer is in wanted, the macro can refer to the variable 31977 'frame_pointer_needed'. The variable's value will be 1 at run time 31978 in a function that needs a frame pointer. *Note Elimination::. 31979 31980 The function entry code is responsible for allocating any stack 31981 space required for the function. This stack space consists of the 31982 regions listed below. In most cases, these regions are allocated 31983 in the order listed, with the last listed region closest to the top 31984 of the stack (the lowest address if 'STACK_GROWS_DOWNWARD' is 31985 defined, and the highest address if it is not defined). You can 31986 use a different order for a machine if doing so is more convenient 31987 or required for compatibility reasons. Except in cases where 31988 required by standard or by a debugger, there is no reason why the 31989 stack layout used by GCC need agree with that used by other 31990 compilers for a machine. 31991 31992 -- Target Hook: void TARGET_ASM_FUNCTION_END_PROLOGUE (FILE *FILE) 31993 If defined, a function that outputs assembler code at the end of a 31994 prologue. This should be used when the function prologue is being 31995 emitted as RTL, and you have some extra assembler that needs to be 31996 emitted. *Note prologue instruction pattern::. 31997 31998 -- Target Hook: void TARGET_ASM_FUNCTION_BEGIN_EPILOGUE (FILE *FILE) 31999 If defined, a function that outputs assembler code at the start of 32000 an epilogue. This should be used when the function epilogue is 32001 being emitted as RTL, and you have some extra assembler that needs 32002 to be emitted. *Note epilogue instruction pattern::. 32003 32004 -- Target Hook: void TARGET_ASM_FUNCTION_EPILOGUE (FILE *FILE, 32005 HOST_WIDE_INT SIZE) 32006 If defined, a function that outputs the assembler code for exit 32007 from a function. The epilogue is responsible for restoring the 32008 saved registers and stack pointer to their values when the function 32009 was called, and returning control to the caller. This macro takes 32010 the same arguments as the macro 'TARGET_ASM_FUNCTION_PROLOGUE', and 32011 the registers to restore are determined from 'regs_ever_live' and 32012 'CALL_USED_REGISTERS' in the same way. 32013 32014 On some machines, there is a single instruction that does all the 32015 work of returning from the function. On these machines, give that 32016 instruction the name 'return' and do not define the macro 32017 'TARGET_ASM_FUNCTION_EPILOGUE' at all. 32018 32019 Do not define a pattern named 'return' if you want the 32020 'TARGET_ASM_FUNCTION_EPILOGUE' to be used. If you want the target 32021 switches to control whether return instructions or epilogues are 32022 used, define a 'return' pattern with a validity condition that 32023 tests the target switches appropriately. If the 'return' pattern's 32024 validity condition is false, epilogues will be used. 32025 32026 On machines where functions may or may not have frame-pointers, the 32027 function exit code must vary accordingly. Sometimes the code for 32028 these two cases is completely different. To determine whether a 32029 frame pointer is wanted, the macro can refer to the variable 32030 'frame_pointer_needed'. The variable's value will be 1 when 32031 compiling a function that needs a frame pointer. 32032 32033 Normally, 'TARGET_ASM_FUNCTION_PROLOGUE' and 32034 'TARGET_ASM_FUNCTION_EPILOGUE' must treat leaf functions specially. 32035 The C variable 'current_function_is_leaf' is nonzero for such a 32036 function. *Note Leaf Functions::. 32037 32038 On some machines, some functions pop their arguments on exit while 32039 others leave that for the caller to do. For example, the 68020 32040 when given '-mrtd' pops arguments in functions that take a fixed 32041 number of arguments. 32042 32043 Your definition of the macro 'RETURN_POPS_ARGS' decides which 32044 functions pop their own arguments. 'TARGET_ASM_FUNCTION_EPILOGUE' 32045 needs to know what was decided. The number of bytes of the current 32046 function's arguments that this function should pop is available in 32047 'crtl->args.pops_args'. *Note Scalar Return::. 32048 32049 * A region of 'crtl->args.pretend_args_size' bytes of uninitialized 32050 space just underneath the first argument arriving on the stack. 32051 (This may not be at the very start of the allocated stack region if 32052 the calling sequence has pushed anything else since pushing the 32053 stack arguments. But usually, on such machines, nothing else has 32054 been pushed yet, because the function prologue itself does all the 32055 pushing.) This region is used on machines where an argument may be 32056 passed partly in registers and partly in memory, and, in some cases 32057 to support the features in '<stdarg.h>'. 32058 32059 * An area of memory used to save certain registers used by the 32060 function. The size of this area, which may also include space for 32061 such things as the return address and pointers to previous stack 32062 frames, is machine-specific and usually depends on which registers 32063 have been used in the function. Machines with register windows 32064 often do not require a save area. 32065 32066 * A region of at least SIZE bytes, possibly rounded up to an 32067 allocation boundary, to contain the local variables of the 32068 function. On some machines, this region and the save area may 32069 occur in the opposite order, with the save area closer to the top 32070 of the stack. 32071 32072 * Optionally, when 'ACCUMULATE_OUTGOING_ARGS' is defined, a region of 32073 'crtl->outgoing_args_size' bytes to be used for outgoing argument 32074 lists of the function. *Note Stack Arguments::. 32075 32076 -- Macro: EXIT_IGNORE_STACK 32077 Define this macro as a C expression that is nonzero if the return 32078 instruction or the function epilogue ignores the value of the stack 32079 pointer; in other words, if it is safe to delete an instruction to 32080 adjust the stack pointer before a return from the function. The 32081 default is 0. 32082 32083 Note that this macro's value is relevant only for functions for 32084 which frame pointers are maintained. It is never safe to delete a 32085 final stack adjustment in a function that has no frame pointer, and 32086 the compiler knows this regardless of 'EXIT_IGNORE_STACK'. 32087 32088 -- Macro: EPILOGUE_USES (REGNO) 32089 Define this macro as a C expression that is nonzero for registers 32090 that are used by the epilogue or the 'return' pattern. The stack 32091 and frame pointer registers are already assumed to be used as 32092 needed. 32093 32094 -- Macro: EH_USES (REGNO) 32095 Define this macro as a C expression that is nonzero for registers 32096 that are used by the exception handling mechanism, and so should be 32097 considered live on entry to an exception edge. 32098 32099 -- Target Hook: void TARGET_ASM_OUTPUT_MI_THUNK (FILE *FILE, tree 32100 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 32101 tree FUNCTION) 32102 A function that outputs the assembler code for a thunk function, 32103 used to implement C++ virtual function calls with multiple 32104 inheritance. The thunk acts as a wrapper around a virtual 32105 function, adjusting the implicit object parameter before handing 32106 control off to the real function. 32107 32108 First, emit code to add the integer DELTA to the location that 32109 contains the incoming first argument. Assume that this argument 32110 contains a pointer, and is the one used to pass the 'this' pointer 32111 in C++. This is the incoming argument _before_ the function 32112 prologue, e.g. '%o0' on a sparc. The addition must preserve the 32113 values of all other incoming arguments. 32114 32115 Then, if VCALL_OFFSET is nonzero, an additional adjustment should 32116 be made after adding 'delta'. In particular, if P is the adjusted 32117 pointer, the following adjustment should be made: 32118 32119 p += (*((ptrdiff_t **)p))[vcall_offset/sizeof(ptrdiff_t)] 32120 32121 After the additions, emit code to jump to FUNCTION, which is a 32122 'FUNCTION_DECL'. This is a direct pure jump, not a call, and does 32123 not touch the return address. Hence returning from FUNCTION will 32124 return to whoever called the current 'thunk'. 32125 32126 The effect must be as if FUNCTION had been called directly with the 32127 adjusted first argument. This macro is responsible for emitting 32128 all of the code for a thunk function; 32129 'TARGET_ASM_FUNCTION_PROLOGUE' and 'TARGET_ASM_FUNCTION_EPILOGUE' 32130 are not invoked. 32131 32132 The THUNK_FNDECL is redundant. (DELTA and FUNCTION have already 32133 been extracted from it.) It might possibly be useful on some 32134 targets, but probably not. 32135 32136 If you do not define this macro, the target-independent code in the 32137 C++ front end will generate a less efficient heavyweight thunk that 32138 calls FUNCTION instead of jumping to it. The generic approach does 32139 not support varargs. 32140 32141 -- Target Hook: bool TARGET_ASM_CAN_OUTPUT_MI_THUNK (const_tree 32142 THUNK_FNDECL, HOST_WIDE_INT DELTA, HOST_WIDE_INT VCALL_OFFSET, 32143 const_tree FUNCTION) 32144 A function that returns true if TARGET_ASM_OUTPUT_MI_THUNK would be 32145 able to output the assembler code for the thunk function specified 32146 by the arguments it is passed, and false otherwise. In the latter 32147 case, the generic approach will be used by the C++ front end, with 32148 the limitations previously exposed. 32149 32150 32151File: gccint.info, Node: Profiling, Next: Tail Calls, Prev: Function Entry, Up: Stack and Calling 32152 3215317.9.12 Generating Code for Profiling 32154------------------------------------- 32155 32156These macros will help you generate code for profiling. 32157 32158 -- Macro: FUNCTION_PROFILER (FILE, LABELNO) 32159 A C statement or compound statement to output to FILE some 32160 assembler code to call the profiling subroutine 'mcount'. 32161 32162 The details of how 'mcount' expects to be called are determined by 32163 your operating system environment, not by GCC. To figure them out, 32164 compile a small program for profiling using the system's installed 32165 C compiler and look at the assembler code that results. 32166 32167 Older implementations of 'mcount' expect the address of a counter 32168 variable to be loaded into some register. The name of this 32169 variable is 'LP' followed by the number LABELNO, so you would 32170 generate the name using 'LP%d' in a 'fprintf'. 32171 32172 -- Macro: PROFILE_HOOK 32173 A C statement or compound statement to output to FILE some assembly 32174 code to call the profiling subroutine 'mcount' even the target does 32175 not support profiling. 32176 32177 -- Macro: NO_PROFILE_COUNTERS 32178 Define this macro to be an expression with a nonzero value if the 32179 'mcount' subroutine on your system does not need a counter variable 32180 allocated for each function. This is true for almost all modern 32181 implementations. If you define this macro, you must not use the 32182 LABELNO argument to 'FUNCTION_PROFILER'. 32183 32184 -- Macro: PROFILE_BEFORE_PROLOGUE 32185 Define this macro if the code for function profiling should come 32186 before the function prologue. Normally, the profiling code comes 32187 after. 32188 32189 -- Target Hook: bool TARGET_KEEP_LEAF_WHEN_PROFILED (void) 32190 This target hook returns true if the target wants the leaf flag for 32191 the current function to stay true even if it calls mcount. This 32192 might make sense for targets using the leaf flag only to determine 32193 whether a stack frame needs to be generated or not and for which 32194 the call to mcount is generated before the function prologue. 32195 32196 32197File: gccint.info, Node: Tail Calls, Next: Stack Smashing Protection, Prev: Profiling, Up: Stack and Calling 32198 3219917.9.13 Permitting tail calls 32200----------------------------- 32201 32202 -- Target Hook: bool TARGET_FUNCTION_OK_FOR_SIBCALL (tree DECL, tree 32203 EXP) 32204 True if it is OK to do sibling call optimization for the specified 32205 call expression EXP. DECL will be the called function, or 'NULL' 32206 if this is an indirect call. 32207 32208 It is not uncommon for limitations of calling conventions to 32209 prevent tail calls to functions outside the current unit of 32210 translation, or during PIC compilation. The hook is used to 32211 enforce these restrictions, as the 'sibcall' md pattern can not 32212 fail, or fall over to a "normal" call. The criteria for successful 32213 sibling call optimization may vary greatly between different 32214 architectures. 32215 32216 -- Target Hook: void TARGET_EXTRA_LIVE_ON_ENTRY (bitmap REGS) 32217 Add any hard registers to REGS that are live on entry to the 32218 function. This hook only needs to be defined to provide registers 32219 that cannot be found by examination of FUNCTION_ARG_REGNO_P, the 32220 callee saved registers, STATIC_CHAIN_INCOMING_REGNUM, 32221 STATIC_CHAIN_REGNUM, TARGET_STRUCT_VALUE_RTX, FRAME_POINTER_REGNUM, 32222 EH_USES, FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and the 32223 PIC_OFFSET_TABLE_REGNUM. 32224 32225 -- Target Hook: void TARGET_SET_UP_BY_PROLOGUE (struct 32226 hard_reg_set_container *) 32227 This hook should add additional registers that are computed by the 32228 prologue to the hard regset for shrink-wrapping optimization 32229 purposes. 32230 32231 -- Target Hook: bool TARGET_WARN_FUNC_RETURN (tree) 32232 True if a function's return statements should be checked for 32233 matching the function's return type. This includes checking for 32234 falling off the end of a non-void function. Return false if no 32235 such check should be made. 32236 32237 32238File: gccint.info, Node: Stack Smashing Protection, Next: Miscellaneous Register Hooks, Prev: Tail Calls, Up: Stack and Calling 32239 3224017.9.14 Stack smashing protection 32241--------------------------------- 32242 32243 -- Target Hook: tree TARGET_STACK_PROTECT_GUARD (void) 32244 This hook returns a 'DECL' node for the external variable to use 32245 for the stack protection guard. This variable is initialized by 32246 the runtime to some random value and is used to initialize the 32247 guard value that is placed at the top of the local stack frame. 32248 The type of this variable must be 'ptr_type_node'. 32249 32250 The default version of this hook creates a variable called 32251 '__stack_chk_guard', which is normally defined in 'libgcc2.c'. 32252 32253 -- Target Hook: tree TARGET_STACK_PROTECT_FAIL (void) 32254 This hook returns a 'CALL_EXPR' that alerts the runtime that the 32255 stack protect guard variable has been modified. This expression 32256 should involve a call to a 'noreturn' function. 32257 32258 The default version of this hook invokes a function called 32259 '__stack_chk_fail', taking no arguments. This function is normally 32260 defined in 'libgcc2.c'. 32261 32262 -- Common Target Hook: bool TARGET_SUPPORTS_SPLIT_STACK (bool REPORT, 32263 struct gcc_options *OPTS) 32264 Whether this target supports splitting the stack when the options 32265 described in OPTS have been passed. This is called after options 32266 have been parsed, so the target may reject splitting the stack in 32267 some configurations. The default version of this hook returns 32268 false. If REPORT is true, this function may issue a warning or 32269 error; if REPORT is false, it must simply return a value 32270 32271 32272File: gccint.info, Node: Miscellaneous Register Hooks, Prev: Stack Smashing Protection, Up: Stack and Calling 32273 3227417.9.15 Miscellaneous register hooks 32275------------------------------------ 32276 32277 -- Target Hook: bool TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS 32278 Set to true if each call that binds to a local definition 32279 explicitly clobbers or sets all non-fixed registers modified by 32280 performing the call. That is, by the call pattern itself, or by 32281 code that might be inserted by the linker (e.g. stubs, veneers, 32282 branch islands), but not including those modifiable by the callee. 32283 The affected registers may be mentioned explicitly in the call 32284 pattern, or included as clobbers in CALL_INSN_FUNCTION_USAGE. The 32285 default version of this hook is set to false. The purpose of this 32286 hook is to enable the fipa-ra optimization. 32287 32288 32289File: gccint.info, Node: Varargs, Next: Trampolines, Prev: Stack and Calling, Up: Target Macros 32290 3229117.10 Implementing the Varargs Macros 32292===================================== 32293 32294GCC comes with an implementation of '<varargs.h>' and '<stdarg.h>' that 32295work without change on machines that pass arguments on the stack. Other 32296machines require their own implementations of varargs, and the two 32297machine independent header files must have conditionals to include it. 32298 32299 ISO '<stdarg.h>' differs from traditional '<varargs.h>' mainly in the 32300calling convention for 'va_start'. The traditional implementation takes 32301just one argument, which is the variable in which to store the argument 32302pointer. The ISO implementation of 'va_start' takes an additional 32303second argument. The user is supposed to write the last named argument 32304of the function here. 32305 32306 However, 'va_start' should not use this argument. The way to find the 32307end of the named arguments is with the built-in functions described 32308below. 32309 32310 -- Macro: __builtin_saveregs () 32311 Use this built-in function to save the argument registers in memory 32312 so that the varargs mechanism can access them. Both ISO and 32313 traditional versions of 'va_start' must use '__builtin_saveregs', 32314 unless you use 'TARGET_SETUP_INCOMING_VARARGS' (see below) instead. 32315 32316 On some machines, '__builtin_saveregs' is open-coded under the 32317 control of the target hook 'TARGET_EXPAND_BUILTIN_SAVEREGS'. On 32318 other machines, it calls a routine written in assembler language, 32319 found in 'libgcc2.c'. 32320 32321 Code generated for the call to '__builtin_saveregs' appears at the 32322 beginning of the function, as opposed to where the call to 32323 '__builtin_saveregs' is written, regardless of what the code is. 32324 This is because the registers must be saved before the function 32325 starts to use them for its own purposes. 32326 32327 -- Macro: __builtin_next_arg (LASTARG) 32328 This builtin returns the address of the first anonymous stack 32329 argument, as type 'void *'. If 'ARGS_GROW_DOWNWARD', it returns 32330 the address of the location above the first anonymous stack 32331 argument. Use it in 'va_start' to initialize the pointer for 32332 fetching arguments from the stack. Also use it in 'va_start' to 32333 verify that the second parameter LASTARG is the last named argument 32334 of the current function. 32335 32336 -- Macro: __builtin_classify_type (OBJECT) 32337 Since each machine has its own conventions for which data types are 32338 passed in which kind of register, your implementation of 'va_arg' 32339 has to embody these conventions. The easiest way to categorize the 32340 specified data type is to use '__builtin_classify_type' together 32341 with 'sizeof' and '__alignof__'. 32342 32343 '__builtin_classify_type' ignores the value of OBJECT, considering 32344 only its data type. It returns an integer describing what kind of 32345 type that is--integer, floating, pointer, structure, and so on. 32346 32347 The file 'typeclass.h' defines an enumeration that you can use to 32348 interpret the values of '__builtin_classify_type'. 32349 32350 These machine description macros help implement varargs: 32351 32352 -- Target Hook: rtx TARGET_EXPAND_BUILTIN_SAVEREGS (void) 32353 If defined, this hook produces the machine-specific code for a call 32354 to '__builtin_saveregs'. This code will be moved to the very 32355 beginning of the function, before any parameter access are made. 32356 The return value of this function should be an RTX that contains 32357 the value to use as the return of '__builtin_saveregs'. 32358 32359 -- Target Hook: void TARGET_SETUP_INCOMING_VARARGS (cumulative_args_t 32360 ARGS_SO_FAR, machine_mode MODE, tree TYPE, int 32361 *PRETEND_ARGS_SIZE, int SECOND_TIME) 32362 This target hook offers an alternative to using 32363 '__builtin_saveregs' and defining the hook 32364 'TARGET_EXPAND_BUILTIN_SAVEREGS'. Use it to store the anonymous 32365 register arguments into the stack so that all the arguments appear 32366 to have been passed consecutively on the stack. Once this is done, 32367 you can use the standard implementation of varargs that works for 32368 machines that pass all their arguments on the stack. 32369 32370 The argument ARGS_SO_FAR points to the 'CUMULATIVE_ARGS' data 32371 structure, containing the values that are obtained after processing 32372 the named arguments. The arguments MODE and TYPE describe the last 32373 named argument--its machine mode and its data type as a tree node. 32374 32375 The target hook should do two things: first, push onto the stack 32376 all the argument registers _not_ used for the named arguments, and 32377 second, store the size of the data thus pushed into the 32378 'int'-valued variable pointed to by PRETEND_ARGS_SIZE. The value 32379 that you store here will serve as additional offset for setting up 32380 the stack frame. 32381 32382 Because you must generate code to push the anonymous arguments at 32383 compile time without knowing their data types, 32384 'TARGET_SETUP_INCOMING_VARARGS' is only useful on machines that 32385 have just a single category of argument register and use it 32386 uniformly for all data types. 32387 32388 If the argument SECOND_TIME is nonzero, it means that the arguments 32389 of the function are being analyzed for the second time. This 32390 happens for an inline function, which is not actually compiled 32391 until the end of the source file. The hook 32392 'TARGET_SETUP_INCOMING_VARARGS' should not generate any 32393 instructions in this case. 32394 32395 -- Target Hook: bool TARGET_STRICT_ARGUMENT_NAMING (cumulative_args_t 32396 CA) 32397 Define this hook to return 'true' if the location where a function 32398 argument is passed depends on whether or not it is a named 32399 argument. 32400 32401 This hook controls how the NAMED argument to 'TARGET_FUNCTION_ARG' 32402 is set for varargs and stdarg functions. If this hook returns 32403 'true', the NAMED argument is always true for named arguments, and 32404 false for unnamed arguments. If it returns 'false', but 32405 'TARGET_PRETEND_OUTGOING_VARARGS_NAMED' returns 'true', then all 32406 arguments are treated as named. Otherwise, all named arguments 32407 except the last are treated as named. 32408 32409 You need not define this hook if it always returns 'false'. 32410 32411 -- Target Hook: void TARGET_CALL_ARGS (rtx, TREE) 32412 While generating RTL for a function call, this target hook is 32413 invoked once for each argument passed to the function, either a 32414 register returned by 'TARGET_FUNCTION_ARG' or a memory location. 32415 It is called just before the point where argument registers are 32416 stored. The type of the function to be called is also passed as 32417 the second argument; it is 'NULL_TREE' for libcalls. The 32418 'TARGET_END_CALL_ARGS' hook is invoked just after the code to copy 32419 the return reg has been emitted. This functionality can be used to 32420 perform special setup of call argument registers if a target needs 32421 it. For functions without arguments, the hook is called once with 32422 'pc_rtx' passed instead of an argument register. Most ports do not 32423 need to implement anything for this hook. 32424 32425 -- Target Hook: void TARGET_END_CALL_ARGS (void) 32426 This target hook is invoked while generating RTL for a function 32427 call, just after the point where the return reg is copied into a 32428 pseudo. It signals that all the call argument and return registers 32429 for the just emitted call are now no longer in use. Most ports do 32430 not need to implement anything for this hook. 32431 32432 -- Target Hook: bool TARGET_PRETEND_OUTGOING_VARARGS_NAMED 32433 (cumulative_args_t CA) 32434 If you need to conditionally change ABIs so that one works with 32435 'TARGET_SETUP_INCOMING_VARARGS', but the other works like neither 32436 'TARGET_SETUP_INCOMING_VARARGS' nor 'TARGET_STRICT_ARGUMENT_NAMING' 32437 was defined, then define this hook to return 'true' if 32438 'TARGET_SETUP_INCOMING_VARARGS' is used, 'false' otherwise. 32439 Otherwise, you should not define this hook. 32440 32441 -- Target Hook: rtx TARGET_LOAD_BOUNDS_FOR_ARG (rtx SLOT, rtx ARG, rtx 32442 SLOT_NO) 32443 This hook is used by expand pass to emit insn to load bounds of ARG 32444 passed in SLOT. Expand pass uses this hook in case bounds of ARG 32445 are not passed in register. If SLOT is a memory, then bounds are 32446 loaded as for regular pointer loaded from memory. If SLOT is not a 32447 memory then SLOT_NO is an integer constant holding number of the 32448 target dependent special slot which should be used to obtain 32449 bounds. Hook returns RTX holding loaded bounds. 32450 32451 -- Target Hook: void TARGET_STORE_BOUNDS_FOR_ARG (rtx ARG, rtx SLOT, 32452 rtx BOUNDS, rtx SLOT_NO) 32453 This hook is used by expand pass to emit insns to store BOUNDS of 32454 ARG passed in SLOT. Expand pass uses this hook in case BOUNDS of 32455 ARG are not passed in register. If SLOT is a memory, then BOUNDS 32456 are stored as for regular pointer stored in memory. If SLOT is not 32457 a memory then SLOT_NO is an integer constant holding number of the 32458 target dependent special slot which should be used to store BOUNDS. 32459 32460 -- Target Hook: rtx TARGET_LOAD_RETURNED_BOUNDS (rtx SLOT) 32461 This hook is used by expand pass to emit insn to load bounds 32462 returned by function call in SLOT. Hook returns RTX holding loaded 32463 bounds. 32464 32465 -- Target Hook: void TARGET_STORE_RETURNED_BOUNDS (rtx SLOT, rtx 32466 BOUNDS) 32467 This hook is used by expand pass to emit insn to store BOUNDS 32468 returned by function call into SLOT. 32469 32470 -- Target Hook: rtx TARGET_CHKP_FUNCTION_VALUE_BOUNDS (const_tree 32471 RET_TYPE, const_tree FN_DECL_OR_TYPE, bool OUTGOING) 32472 Define this to return an RTX representing the place where a 32473 function returns bounds for returned pointers. Arguments meaning 32474 is similar to 'TARGET_FUNCTION_VALUE'. 32475 32476 -- Target Hook: void TARGET_SETUP_INCOMING_VARARG_BOUNDS 32477 (cumulative_args_t ARGS_SO_FAR, enum machine_mode MODE, tree 32478 TYPE, int *PRETEND_ARGS_SIZE, int SECOND_TIME) 32479 Use it to store bounds for anonymous register arguments stored into 32480 the stack. Arguments meaning is similar to 32481 'TARGET_SETUP_INCOMING_VARARGS'. 32482 32483 32484File: gccint.info, Node: Trampolines, Next: Library Calls, Prev: Varargs, Up: Target Macros 32485 3248617.11 Trampolines for Nested Functions 32487====================================== 32488 32489A "trampoline" is a small piece of code that is created at run time when 32490the address of a nested function is taken. It normally resides on the 32491stack, in the stack frame of the containing function. These macros tell 32492GCC how to generate code to allocate and initialize a trampoline. 32493 32494 The instructions in the trampoline must do two things: load a constant 32495address into the static chain register, and jump to the real address of 32496the nested function. On CISC machines such as the m68k, this requires 32497two instructions, a move immediate and a jump. Then the two addresses 32498exist in the trampoline as word-long immediate operands. On RISC 32499machines, it is often necessary to load each address into a register in 32500two parts. Then pieces of each address form separate immediate 32501operands. 32502 32503 The code generated to initialize the trampoline must store the variable 32504parts--the static chain value and the function address--into the 32505immediate operands of the instructions. On a CISC machine, this is 32506simply a matter of copying each address to a memory reference at the 32507proper offset from the start of the trampoline. On a RISC machine, it 32508may be necessary to take out pieces of the address and store them 32509separately. 32510 32511 -- Target Hook: void TARGET_ASM_TRAMPOLINE_TEMPLATE (FILE *F) 32512 This hook is called by 'assemble_trampoline_template' to output, on 32513 the stream F, assembler code for a block of data that contains the 32514 constant parts of a trampoline. This code should not include a 32515 label--the label is taken care of automatically. 32516 32517 If you do not define this hook, it means no template is needed for 32518 the target. Do not define this hook on systems where the block 32519 move code to copy the trampoline into place would be larger than 32520 the code to generate it on the spot. 32521 32522 -- Macro: TRAMPOLINE_SECTION 32523 Return the section into which the trampoline template is to be 32524 placed (*note Sections::). The default value is 32525 'readonly_data_section'. 32526 32527 -- Macro: TRAMPOLINE_SIZE 32528 A C expression for the size in bytes of the trampoline, as an 32529 integer. 32530 32531 -- Macro: TRAMPOLINE_ALIGNMENT 32532 Alignment required for trampolines, in bits. 32533 32534 If you don't define this macro, the value of 'FUNCTION_ALIGNMENT' 32535 is used for aligning trampolines. 32536 32537 -- Target Hook: void TARGET_TRAMPOLINE_INIT (rtx M_TRAMP, tree FNDECL, 32538 rtx STATIC_CHAIN) 32539 This hook is called to initialize a trampoline. M_TRAMP is an RTX 32540 for the memory block for the trampoline; FNDECL is the 32541 'FUNCTION_DECL' for the nested function; STATIC_CHAIN is an RTX for 32542 the static chain value that should be passed to the function when 32543 it is called. 32544 32545 If the target defines 'TARGET_ASM_TRAMPOLINE_TEMPLATE', then the 32546 first thing this hook should do is emit a block move into M_TRAMP 32547 from the memory block returned by 'assemble_trampoline_template'. 32548 Note that the block move need only cover the constant parts of the 32549 trampoline. If the target isolates the variable parts of the 32550 trampoline to the end, not all 'TRAMPOLINE_SIZE' bytes need be 32551 copied. 32552 32553 If the target requires any other actions, such as flushing caches 32554 or enabling stack execution, these actions should be performed 32555 after initializing the trampoline proper. 32556 32557 -- Target Hook: rtx TARGET_TRAMPOLINE_ADJUST_ADDRESS (rtx ADDR) 32558 This hook should perform any machine-specific adjustment in the 32559 address of the trampoline. Its argument contains the address of 32560 the memory block that was passed to 'TARGET_TRAMPOLINE_INIT'. In 32561 case the address to be used for a function call should be different 32562 from the address at which the template was stored, the different 32563 address should be returned; otherwise ADDR should be returned 32564 unchanged. If this hook is not defined, ADDR will be used for 32565 function calls. 32566 32567 Implementing trampolines is difficult on many machines because they 32568have separate instruction and data caches. Writing into a stack 32569location fails to clear the memory in the instruction cache, so when the 32570program jumps to that location, it executes the old contents. 32571 32572 Here are two possible solutions. One is to clear the relevant parts of 32573the instruction cache whenever a trampoline is set up. The other is to 32574make all trampolines identical, by having them jump to a standard 32575subroutine. The former technique makes trampoline execution faster; the 32576latter makes initialization faster. 32577 32578 To clear the instruction cache when a trampoline is initialized, define 32579the following macro. 32580 32581 -- Macro: CLEAR_INSN_CACHE (BEG, END) 32582 If defined, expands to a C expression clearing the _instruction 32583 cache_ in the specified interval. The definition of this macro 32584 would typically be a series of 'asm' statements. Both BEG and END 32585 are both pointer expressions. 32586 32587 To use a standard subroutine, define the following macro. In addition, 32588you must make sure that the instructions in a trampoline fill an entire 32589cache line with identical instructions, or else ensure that the 32590beginning of the trampoline code is always aligned at the same point in 32591its cache line. Look in 'm68k.h' as a guide. 32592 32593 -- Macro: TRANSFER_FROM_TRAMPOLINE 32594 Define this macro if trampolines need a special subroutine to do 32595 their work. The macro should expand to a series of 'asm' 32596 statements which will be compiled with GCC. They go in a library 32597 function named '__transfer_from_trampoline'. 32598 32599 If you need to avoid executing the ordinary prologue code of a 32600 compiled C function when you jump to the subroutine, you can do so 32601 by placing a special label of your own in the assembler code. Use 32602 one 'asm' statement to generate an assembler label, and another to 32603 make the label global. Then trampolines can use that label to jump 32604 directly to your special assembler code. 32605 32606 32607File: gccint.info, Node: Library Calls, Next: Addressing Modes, Prev: Trampolines, Up: Target Macros 32608 3260917.12 Implicit Calls to Library Routines 32610======================================== 32611 32612Here is an explanation of implicit calls to library routines. 32613 32614 -- Macro: DECLARE_LIBRARY_RENAMES 32615 This macro, if defined, should expand to a piece of C code that 32616 will get expanded when compiling functions for libgcc.a. It can be 32617 used to provide alternate names for GCC's internal library 32618 functions if there are ABI-mandated names that the compiler should 32619 provide. 32620 32621 -- Target Hook: void TARGET_INIT_LIBFUNCS (void) 32622 This hook should declare additional library routines or rename 32623 existing ones, using the functions 'set_optab_libfunc' and 32624 'init_one_libfunc' defined in 'optabs.c'. 'init_optabs' calls this 32625 macro after initializing all the normal library routines. 32626 32627 The default is to do nothing. Most ports don't need to define this 32628 hook. 32629 32630 -- Target Hook: bool TARGET_LIBFUNC_GNU_PREFIX 32631 If false (the default), internal library routines start with two 32632 underscores. If set to true, these routines start with '__gnu_' 32633 instead. E.g., '__muldi3' changes to '__gnu_muldi3'. This 32634 currently only affects functions defined in 'libgcc2.c'. If this 32635 is set to true, the 'tm.h' file must also '#define 32636 LIBGCC2_GNU_PREFIX'. 32637 32638 -- Macro: FLOAT_LIB_COMPARE_RETURNS_BOOL (MODE, COMPARISON) 32639 This macro should return 'true' if the library routine that 32640 implements the floating point comparison operator COMPARISON in 32641 mode MODE will return a boolean, and FALSE if it will return a 32642 tristate. 32643 32644 GCC's own floating point libraries return tristates from the 32645 comparison operators, so the default returns false always. Most 32646 ports don't need to define this macro. 32647 32648 -- Macro: TARGET_LIB_INT_CMP_BIASED 32649 This macro should evaluate to 'true' if the integer comparison 32650 functions (like '__cmpdi2') return 0 to indicate that the first 32651 operand is smaller than the second, 1 to indicate that they are 32652 equal, and 2 to indicate that the first operand is greater than the 32653 second. If this macro evaluates to 'false' the comparison 32654 functions return -1, 0, and 1 instead of 0, 1, and 2. If the 32655 target uses the routines in 'libgcc.a', you do not need to define 32656 this macro. 32657 32658 -- Macro: TARGET_HAS_NO_HW_DIVIDE 32659 This macro should be defined if the target has no hardware divide 32660 instructions. If this macro is defined, GCC will use an algorithm 32661 which make use of simple logical and arithmetic operations for 32662 64-bit division. If the macro is not defined, GCC will use an 32663 algorithm which make use of a 64-bit by 32-bit divide primitive. 32664 32665 -- Macro: TARGET_EDOM 32666 The value of 'EDOM' on the target machine, as a C integer constant 32667 expression. If you don't define this macro, GCC does not attempt 32668 to deposit the value of 'EDOM' into 'errno' directly. Look in 32669 '/usr/include/errno.h' to find the value of 'EDOM' on your system. 32670 32671 If you do not define 'TARGET_EDOM', then compiled code reports 32672 domain errors by calling the library function and letting it report 32673 the error. If mathematical functions on your system use 'matherr' 32674 when there is an error, then you should leave 'TARGET_EDOM' 32675 undefined so that 'matherr' is used normally. 32676 32677 -- Macro: GEN_ERRNO_RTX 32678 Define this macro as a C expression to create an rtl expression 32679 that refers to the global "variable" 'errno'. (On certain systems, 32680 'errno' may not actually be a variable.) If you don't define this 32681 macro, a reasonable default is used. 32682 32683 -- Target Hook: bool TARGET_LIBC_HAS_FUNCTION (enum function_class 32684 FN_CLASS) 32685 This hook determines whether a function from a class of functions 32686 FN_CLASS is present at the runtime. 32687 32688 -- Macro: NEXT_OBJC_RUNTIME 32689 Set this macro to 1 to use the "NeXT" Objective-C message sending 32690 conventions by default. This calling convention involves passing 32691 the object, the selector and the method arguments all at once to 32692 the method-lookup library function. This is the usual setting when 32693 targeting Darwin/Mac OS X systems, which have the NeXT runtime 32694 installed. 32695 32696 If the macro is set to 0, the "GNU" Objective-C message sending 32697 convention will be used by default. This convention passes just 32698 the object and the selector to the method-lookup function, which 32699 returns a pointer to the method. 32700 32701 In either case, it remains possible to select code-generation for 32702 the alternate scheme, by means of compiler command line switches. 32703 32704 32705File: gccint.info, Node: Addressing Modes, Next: Anchored Addresses, Prev: Library Calls, Up: Target Macros 32706 3270717.13 Addressing Modes 32708====================== 32709 32710This is about addressing modes. 32711 32712 -- Macro: HAVE_PRE_INCREMENT 32713 -- Macro: HAVE_PRE_DECREMENT 32714 -- Macro: HAVE_POST_INCREMENT 32715 -- Macro: HAVE_POST_DECREMENT 32716 A C expression that is nonzero if the machine supports 32717 pre-increment, pre-decrement, post-increment, or post-decrement 32718 addressing respectively. 32719 32720 -- Macro: HAVE_PRE_MODIFY_DISP 32721 -- Macro: HAVE_POST_MODIFY_DISP 32722 A C expression that is nonzero if the machine supports pre- or 32723 post-address side-effect generation involving constants other than 32724 the size of the memory operand. 32725 32726 -- Macro: HAVE_PRE_MODIFY_REG 32727 -- Macro: HAVE_POST_MODIFY_REG 32728 A C expression that is nonzero if the machine supports pre- or 32729 post-address side-effect generation involving a register 32730 displacement. 32731 32732 -- Macro: CONSTANT_ADDRESS_P (X) 32733 A C expression that is 1 if the RTX X is a constant which is a 32734 valid address. On most machines the default definition of 32735 '(CONSTANT_P (X) && GET_CODE (X) != CONST_DOUBLE)' is acceptable, 32736 but a few machines are more restrictive as to which constant 32737 addresses are supported. 32738 32739 -- Macro: CONSTANT_P (X) 32740 'CONSTANT_P', which is defined by target-independent code, accepts 32741 integer-values expressions whose values are not explicitly known, 32742 such as 'symbol_ref', 'label_ref', and 'high' expressions and 32743 'const' arithmetic expressions, in addition to 'const_int' and 32744 'const_double' expressions. 32745 32746 -- Macro: MAX_REGS_PER_ADDRESS 32747 A number, the maximum number of registers that can appear in a 32748 valid memory address. Note that it is up to you to specify a value 32749 equal to the maximum number that 'TARGET_LEGITIMATE_ADDRESS_P' 32750 would ever accept. 32751 32752 -- Target Hook: bool TARGET_LEGITIMATE_ADDRESS_P (machine_mode MODE, 32753 rtx X, bool STRICT) 32754 A function that returns whether X (an RTX) is a legitimate memory 32755 address on the target machine for a memory operand of mode MODE. 32756 32757 Legitimate addresses are defined in two variants: a strict variant 32758 and a non-strict one. The STRICT parameter chooses which variant 32759 is desired by the caller. 32760 32761 The strict variant is used in the reload pass. It must be defined 32762 so that any pseudo-register that has not been allocated a hard 32763 register is considered a memory reference. This is because in 32764 contexts where some kind of register is required, a pseudo-register 32765 with no hard register must be rejected. For non-hard registers, 32766 the strict variant should look up the 'reg_renumber' array; it 32767 should then proceed using the hard register number in the array, or 32768 treat the pseudo as a memory reference if the array holds '-1'. 32769 32770 The non-strict variant is used in other passes. It must be defined 32771 to accept all pseudo-registers in every context where some kind of 32772 register is required. 32773 32774 Normally, constant addresses which are the sum of a 'symbol_ref' 32775 and an integer are stored inside a 'const' RTX to mark them as 32776 constant. Therefore, there is no need to recognize such sums 32777 specifically as legitimate addresses. Normally you would simply 32778 recognize any 'const' as legitimate. 32779 32780 Usually 'PRINT_OPERAND_ADDRESS' is not prepared to handle constant 32781 sums that are not marked with 'const'. It assumes that a naked 32782 'plus' indicates indexing. If so, then you _must_ reject such 32783 naked constant sums as illegitimate addresses, so that none of them 32784 will be given to 'PRINT_OPERAND_ADDRESS'. 32785 32786 On some machines, whether a symbolic address is legitimate depends 32787 on the section that the address refers to. On these machines, 32788 define the target hook 'TARGET_ENCODE_SECTION_INFO' to store the 32789 information into the 'symbol_ref', and then check for it here. 32790 When you see a 'const', you will have to look inside it to find the 32791 'symbol_ref' in order to determine the section. *Note Assembler 32792 Format::. 32793 32794 Some ports are still using a deprecated legacy substitute for this 32795 hook, the 'GO_IF_LEGITIMATE_ADDRESS' macro. This macro has this 32796 syntax: 32797 32798 #define GO_IF_LEGITIMATE_ADDRESS (MODE, X, LABEL) 32799 32800 and should 'goto LABEL' if the address X is a valid address on the 32801 target machine for a memory operand of mode MODE. 32802 32803 Compiler source files that want to use the strict variant of this 32804 macro define the macro 'REG_OK_STRICT'. You should use an '#ifdef 32805 REG_OK_STRICT' conditional to define the strict variant in that 32806 case and the non-strict variant otherwise. 32807 32808 Using the hook is usually simpler because it limits the number of 32809 files that are recompiled when changes are made. 32810 32811 -- Macro: TARGET_MEM_CONSTRAINT 32812 A single character to be used instead of the default ''m'' 32813 character for general memory addresses. This defines the 32814 constraint letter which matches the memory addresses accepted by 32815 'TARGET_LEGITIMATE_ADDRESS_P'. Define this macro if you want to 32816 support new address formats in your back end without changing the 32817 semantics of the ''m'' constraint. This is necessary in order to 32818 preserve functionality of inline assembly constructs using the 32819 ''m'' constraint. 32820 32821 -- Macro: FIND_BASE_TERM (X) 32822 A C expression to determine the base term of address X, or to 32823 provide a simplified version of X from which 'alias.c' can easily 32824 find the base term. This macro is used in only two places: 32825 'find_base_value' and 'find_base_term' in 'alias.c'. 32826 32827 It is always safe for this macro to not be defined. It exists so 32828 that alias analysis can understand machine-dependent addresses. 32829 32830 The typical use of this macro is to handle addresses containing a 32831 label_ref or symbol_ref within an UNSPEC. 32832 32833 -- Target Hook: rtx TARGET_LEGITIMIZE_ADDRESS (rtx X, rtx OLDX, 32834 machine_mode MODE) 32835 This hook is given an invalid memory address X for an operand of 32836 mode MODE and should try to return a valid memory address. 32837 32838 X will always be the result of a call to 'break_out_memory_refs', 32839 and OLDX will be the operand that was given to that function to 32840 produce X. 32841 32842 The code of the hook should not alter the substructure of X. If it 32843 transforms X into a more legitimate form, it should return the new 32844 X. 32845 32846 It is not necessary for this hook to come up with a legitimate 32847 address, with the exception of native TLS addresses (*note Emulated 32848 TLS::). The compiler has standard ways of doing so in all cases. 32849 In fact, if the target supports only emulated TLS, it is safe to 32850 omit this hook or make it return X if it cannot find a valid way to 32851 legitimize the address. But often a machine-dependent strategy can 32852 generate better code. 32853 32854 -- Macro: LEGITIMIZE_RELOAD_ADDRESS (X, MODE, OPNUM, TYPE, IND_LEVELS, 32855 WIN) 32856 A C compound statement that attempts to replace X, which is an 32857 address that needs reloading, with a valid memory address for an 32858 operand of mode MODE. WIN will be a C statement label elsewhere in 32859 the code. It is not necessary to define this macro, but it might 32860 be useful for performance reasons. 32861 32862 For example, on the i386, it is sometimes possible to use a single 32863 reload register instead of two by reloading a sum of two pseudo 32864 registers into a register. On the other hand, for number of RISC 32865 processors offsets are limited so that often an intermediate 32866 address needs to be generated in order to address a stack slot. By 32867 defining 'LEGITIMIZE_RELOAD_ADDRESS' appropriately, the 32868 intermediate addresses generated for adjacent some stack slots can 32869 be made identical, and thus be shared. 32870 32871 _Note_: This macro should be used with caution. It is necessary to 32872 know something of how reload works in order to effectively use 32873 this, and it is quite easy to produce macros that build in too much 32874 knowledge of reload internals. 32875 32876 _Note_: This macro must be able to reload an address created by a 32877 previous invocation of this macro. If it fails to handle such 32878 addresses then the compiler may generate incorrect code or abort. 32879 32880 The macro definition should use 'push_reload' to indicate parts 32881 that need reloading; OPNUM, TYPE and IND_LEVELS are usually 32882 suitable to be passed unaltered to 'push_reload'. 32883 32884 The code generated by this macro must not alter the substructure of 32885 X. If it transforms X into a more legitimate form, it should 32886 assign X (which will always be a C variable) a new value. This 32887 also applies to parts that you change indirectly by calling 32888 'push_reload'. 32889 32890 The macro definition may use 'strict_memory_address_p' to test if 32891 the address has become legitimate. 32892 32893 If you want to change only a part of X, one standard way of doing 32894 this is to use 'copy_rtx'. Note, however, that it unshares only a 32895 single level of rtl. Thus, if the part to be changed is not at the 32896 top level, you'll need to replace first the top level. It is not 32897 necessary for this macro to come up with a legitimate address; but 32898 often a machine-dependent strategy can generate better code. 32899 32900 -- Target Hook: bool TARGET_MODE_DEPENDENT_ADDRESS_P (const_rtx ADDR, 32901 addr_space_t ADDRSPACE) 32902 This hook returns 'true' if memory address ADDR in address space 32903 ADDRSPACE can have different meanings depending on the machine mode 32904 of the memory reference it is used for or if the address is valid 32905 for some modes but not others. 32906 32907 Autoincrement and autodecrement addresses typically have 32908 mode-dependent effects because the amount of the increment or 32909 decrement is the size of the operand being addressed. Some 32910 machines have other mode-dependent addresses. Many RISC machines 32911 have no mode-dependent addresses. 32912 32913 You may assume that ADDR is a valid address for the machine. 32914 32915 The default version of this hook returns 'false'. 32916 32917 -- Target Hook: bool TARGET_LEGITIMATE_CONSTANT_P (machine_mode MODE, 32918 rtx X) 32919 This hook returns true if X is a legitimate constant for a 32920 MODE-mode immediate operand on the target machine. You can assume 32921 that X satisfies 'CONSTANT_P', so you need not check this. 32922 32923 The default definition returns true. 32924 32925 -- Target Hook: rtx TARGET_DELEGITIMIZE_ADDRESS (rtx X) 32926 This hook is used to undo the possibly obfuscating effects of the 32927 'LEGITIMIZE_ADDRESS' and 'LEGITIMIZE_RELOAD_ADDRESS' target macros. 32928 Some backend implementations of these macros wrap symbol references 32929 inside an 'UNSPEC' rtx to represent PIC or similar addressing 32930 modes. This target hook allows GCC's optimizers to understand the 32931 semantics of these opaque 'UNSPEC's by converting them back into 32932 their original form. 32933 32934 -- Target Hook: bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx X) 32935 This hook should return true if X should not be emitted into debug 32936 sections. 32937 32938 -- Target Hook: bool TARGET_CANNOT_FORCE_CONST_MEM (machine_mode MODE, 32939 rtx X) 32940 This hook should return true if X is of a form that cannot (or 32941 should not) be spilled to the constant pool. MODE is the mode of 32942 X. 32943 32944 The default version of this hook returns false. 32945 32946 The primary reason to define this hook is to prevent reload from 32947 deciding that a non-legitimate constant would be better reloaded 32948 from the constant pool instead of spilling and reloading a register 32949 holding the constant. This restriction is often true of addresses 32950 of TLS symbols for various targets. 32951 32952 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_CONSTANT_P (machine_mode 32953 MODE, const_rtx X) 32954 This hook should return true if pool entries for constant X can be 32955 placed in an 'object_block' structure. MODE is the mode of X. 32956 32957 The default version returns false for all constants. 32958 32959 -- Target Hook: bool TARGET_USE_BLOCKS_FOR_DECL_P (const_tree DECL) 32960 This hook should return true if pool entries for DECL should be 32961 placed in an 'object_block' structure. 32962 32963 The default version returns true for all decls. 32964 32965 -- Target Hook: tree TARGET_BUILTIN_RECIPROCAL (tree FNDECL) 32966 This hook should return the DECL of a function that implements the 32967 reciprocal of the machine-specific builtin function FNDECL, or 32968 'NULL_TREE' if such a function is not available. 32969 32970 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD (void) 32971 This hook should return the DECL of a function F that given an 32972 address ADDR as an argument returns a mask M that can be used to 32973 extract from two vectors the relevant data that resides in ADDR in 32974 case ADDR is not properly aligned. 32975 32976 The autovectorizer, when vectorizing a load operation from an 32977 address ADDR that may be unaligned, will generate two vector loads 32978 from the two aligned addresses around ADDR. It then generates a 32979 'REALIGN_LOAD' operation to extract the relevant data from the two 32980 loaded vectors. The first two arguments to 'REALIGN_LOAD', V1 and 32981 V2, are the two vectors, each of size VS, and the third argument, 32982 OFF, defines how the data will be extracted from these two vectors: 32983 if OFF is 0, then the returned vector is V2; otherwise, the 32984 returned vector is composed from the last VS-OFF elements of V1 32985 concatenated to the first OFF elements of V2. 32986 32987 If this hook is defined, the autovectorizer will generate a call to 32988 F (using the DECL tree that this hook returns) and will use the 32989 return value of F as the argument OFF to 'REALIGN_LOAD'. 32990 Therefore, the mask M returned by F should comply with the 32991 semantics expected by 'REALIGN_LOAD' described above. If this hook 32992 is not defined, then ADDR will be used as the argument OFF to 32993 'REALIGN_LOAD', in which case the low log2(VS) - 1 bits of ADDR 32994 will be considered. 32995 32996 -- Target Hook: int TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST (enum 32997 vect_cost_for_stmt TYPE_OF_COST, tree VECTYPE, int MISALIGN) 32998 Returns cost of different scalar or vector statements for 32999 vectorization cost model. For vector memory operations the cost 33000 may depend on type (VECTYPE) and misalignment value (MISALIGN). 33001 33002 -- Target Hook: bool TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE 33003 (const_tree TYPE, bool IS_PACKED) 33004 Return true if vector alignment is reachable (by peeling N 33005 iterations) for the given scalar type TYPE. IS_PACKED is false if 33006 the scalar access using TYPE is known to be naturally aligned. 33007 33008 -- Target Hook: bool TARGET_VECTORIZE_VEC_PERM_CONST_OK (machine_mode, 33009 const unsigned char *SEL) 33010 Return true if a vector created for 'vec_perm_const' is valid. 33011 33012 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_CONVERSION (unsigned 33013 CODE, tree DEST_TYPE, tree SRC_TYPE) 33014 This hook should return the DECL of a function that implements 33015 conversion of the input vector of type SRC_TYPE to type DEST_TYPE. 33016 The value of CODE is one of the enumerators in 'enum tree_code' and 33017 specifies how the conversion is to be applied (truncation, 33018 rounding, etc.). 33019 33020 If this hook is defined, the autovectorizer will use the 33021 'TARGET_VECTORIZE_BUILTIN_CONVERSION' target hook when vectorizing 33022 conversion. Otherwise, it will return 'NULL_TREE'. 33023 33024 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION 33025 (unsigned CODE, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 33026 This hook should return the decl of a function that implements the 33027 vectorized variant of the function with the 'combined_fn' code CODE 33028 or 'NULL_TREE' if such a function is not available. The return 33029 type of the vectorized function shall be of vector type 33030 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 33031 33032 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION 33033 (tree FNDECL, tree VEC_TYPE_OUT, tree VEC_TYPE_IN) 33034 This hook should return the decl of a function that implements the 33035 vectorized variant of target built-in function 'fndecl'. The 33036 return type of the vectorized function shall be of vector type 33037 VEC_TYPE_OUT and the argument types should be VEC_TYPE_IN. 33038 33039 -- Target Hook: bool TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT 33040 (machine_mode MODE, const_tree TYPE, int MISALIGNMENT, bool 33041 IS_PACKED) 33042 This hook should return true if the target supports misaligned 33043 vector store/load of a specific factor denoted in the MISALIGNMENT 33044 parameter. The vector store/load should be of machine mode MODE 33045 and the elements in the vectors should be of type TYPE. IS_PACKED 33046 parameter is true if the memory access is defined in a packed 33047 struct. 33048 33049 -- Target Hook: machine_mode TARGET_VECTORIZE_PREFERRED_SIMD_MODE 33050 (machine_mode MODE) 33051 This hook should return the preferred mode for vectorizing scalar 33052 mode MODE. The default is equal to 'word_mode', because the 33053 vectorizer can do some transformations even in absence of 33054 specialized SIMD hardware. 33055 33056 -- Target Hook: unsigned int 33057 TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES (void) 33058 This hook should return a mask of sizes that should be iterated 33059 over after trying to autovectorize using the vector size derived 33060 from the mode returned by 'TARGET_VECTORIZE_PREFERRED_SIMD_MODE'. 33061 The default is zero which means to not iterate over other vector 33062 sizes. 33063 33064 -- Target Hook: machine_mode TARGET_VECTORIZE_GET_MASK_MODE (unsigned 33065 NUNITS, unsigned LENGTH) 33066 This hook returns mode to be used for a mask to be used for a 33067 vector of specified LENGTH with NUNITS elements. By default an 33068 integer vector mode of a proper size is returned. 33069 33070 -- Target Hook: void * TARGET_VECTORIZE_INIT_COST (struct loop 33071 *LOOP_INFO) 33072 This hook should initialize target-specific data structures in 33073 preparation for modeling the costs of vectorizing a loop or basic 33074 block. The default allocates three unsigned integers for 33075 accumulating costs for the prologue, body, and epilogue of the loop 33076 or basic block. If LOOP_INFO is non-NULL, it identifies the loop 33077 being vectorized; otherwise a single block is being vectorized. 33078 33079 -- Target Hook: unsigned TARGET_VECTORIZE_ADD_STMT_COST (void *DATA, 33080 int COUNT, enum vect_cost_for_stmt KIND, struct _stmt_vec_info 33081 *STMT_INFO, int MISALIGN, enum vect_cost_model_location WHERE) 33082 This hook should update the target-specific DATA in response to 33083 adding COUNT copies of the given KIND of statement to a loop or 33084 basic block. The default adds the builtin vectorizer cost for the 33085 copies of the statement to the accumulator specified by WHERE, (the 33086 prologue, body, or epilogue) and returns the amount added. The 33087 return value should be viewed as a tentative cost that may later be 33088 revised. 33089 33090 -- Target Hook: void TARGET_VECTORIZE_FINISH_COST (void *DATA, unsigned 33091 *PROLOGUE_COST, unsigned *BODY_COST, unsigned *EPILOGUE_COST) 33092 This hook should complete calculations of the cost of vectorizing a 33093 loop or basic block based on DATA, and return the prologue, body, 33094 and epilogue costs as unsigned integers. The default returns the 33095 value of the three accumulators. 33096 33097 -- Target Hook: void TARGET_VECTORIZE_DESTROY_COST_DATA (void *DATA) 33098 This hook should release DATA and any related data structures 33099 allocated by TARGET_VECTORIZE_INIT_COST. The default releases the 33100 accumulator. 33101 33102 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_GATHER (const_tree 33103 MEM_VECTYPE, const_tree INDEX_TYPE, int SCALE) 33104 Target builtin that implements vector gather operation. 33105 MEM_VECTYPE is the vector type of the load and INDEX_TYPE is scalar 33106 type of the index, scaled by SCALE. The default is 'NULL_TREE' 33107 which means to not vectorize gather loads. 33108 33109 -- Target Hook: tree TARGET_VECTORIZE_BUILTIN_SCATTER (const_tree 33110 VECTYPE, const_tree INDEX_TYPE, int SCALE) 33111 Target builtin that implements vector scatter operation. VECTYPE 33112 is the vector type of the store and INDEX_TYPE is scalar type of 33113 the index, scaled by SCALE. The default is 'NULL_TREE' which means 33114 to not vectorize scatter stores. 33115 33116 -- Target Hook: int TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN 33117 (struct cgraph_node *, struct cgraph_simd_clone *, TREE, INT) 33118 This hook should set VECSIZE_MANGLE, VECSIZE_INT, VECSIZE_FLOAT 33119 fields in SIMD_CLONE structure pointed by CLONE_INFO argument and 33120 also SIMDLEN field if it was previously 0. The hook should return 33121 0 if SIMD clones shouldn't be emitted, or number of VECSIZE_MANGLE 33122 variants that should be emitted. 33123 33124 -- Target Hook: void TARGET_SIMD_CLONE_ADJUST (struct cgraph_node *) 33125 This hook should add implicit 'attribute(target("..."))' attribute 33126 to SIMD clone NODE if needed. 33127 33128 -- Target Hook: int TARGET_SIMD_CLONE_USABLE (struct cgraph_node *) 33129 This hook should return -1 if SIMD clone NODE shouldn't be used in 33130 vectorized loops in current function, or non-negative number if it 33131 is usable. In that case, the smaller the number is, the more 33132 desirable it is to use it. 33133 33134 -- Target Hook: bool TARGET_GOACC_VALIDATE_DIMS (tree DECL, int *DIMS, 33135 int FN_LEVEL) 33136 This hook should check the launch dimensions provided for an 33137 OpenACC compute region, or routine. Defaulted values are 33138 represented as -1 and non-constant values as 0. The FN_LEVEL is 33139 negative for the function corresponding to the compute region. For 33140 a routine is is the outermost level at which partitioned execution 33141 may be spawned. The hook should verify non-default values. If 33142 DECL is NULL, global defaults are being validated and unspecified 33143 defaults should be filled in. Diagnostics should be issued as 33144 appropriate. Return true, if changes have been made. You must 33145 override this hook to provide dimensions larger than 1. 33146 33147 -- Target Hook: int TARGET_GOACC_DIM_LIMIT (int AXIS) 33148 This hook should return the maximum size of a particular dimension, 33149 or zero if unbounded. 33150 33151 -- Target Hook: bool TARGET_GOACC_FORK_JOIN (gcall *CALL, const int 33152 *DIMS, bool IS_FORK) 33153 This hook can be used to convert IFN_GOACC_FORK and IFN_GOACC_JOIN 33154 function calls to target-specific gimple, or indicate whether they 33155 should be retained. It is executed during the oacc_device_lower 33156 pass. It should return true, if the call should be retained. It 33157 should return false, if it is to be deleted (either because 33158 target-specific gimple has been inserted before it, or there is no 33159 need for it). The default hook returns false, if there are no RTL 33160 expanders for them. 33161 33162 -- Target Hook: void TARGET_GOACC_REDUCTION (gcall *CALL) 33163 This hook is used by the oacc_transform pass to expand calls to the 33164 GOACC_REDUCTION internal function, into a sequence of gimple 33165 instructions. CALL is gimple statement containing the call to the 33166 function. This hook removes statement CALL after the expanded 33167 sequence has been inserted. This hook is also responsible for 33168 allocating any storage for reductions when necessary. 33169 33170 33171File: gccint.info, Node: Anchored Addresses, Next: Condition Code, Prev: Addressing Modes, Up: Target Macros 33172 3317317.14 Anchored Addresses 33174======================== 33175 33176GCC usually addresses every static object as a separate entity. For 33177example, if we have: 33178 33179 static int a, b, c; 33180 int foo (void) { return a + b + c; } 33181 33182 the code for 'foo' will usually calculate three separate symbolic 33183addresses: those of 'a', 'b' and 'c'. On some targets, it would be 33184better to calculate just one symbolic address and access the three 33185variables relative to it. The equivalent pseudocode would be something 33186like: 33187 33188 int foo (void) 33189 { 33190 register int *xr = &x; 33191 return xr[&a - &x] + xr[&b - &x] + xr[&c - &x]; 33192 } 33193 33194 (which isn't valid C). We refer to shared addresses like 'x' as 33195"section anchors". Their use is controlled by '-fsection-anchors'. 33196 33197 The hooks below describe the target properties that GCC needs to know 33198in order to make effective use of section anchors. It won't use section 33199anchors at all unless either 'TARGET_MIN_ANCHOR_OFFSET' or 33200'TARGET_MAX_ANCHOR_OFFSET' is set to a nonzero value. 33201 33202 -- Target Hook: HOST_WIDE_INT TARGET_MIN_ANCHOR_OFFSET 33203 The minimum offset that should be applied to a section anchor. On 33204 most targets, it should be the smallest offset that can be applied 33205 to a base register while still giving a legitimate address for 33206 every mode. The default value is 0. 33207 33208 -- Target Hook: HOST_WIDE_INT TARGET_MAX_ANCHOR_OFFSET 33209 Like 'TARGET_MIN_ANCHOR_OFFSET', but the maximum (inclusive) offset 33210 that should be applied to section anchors. The default value is 0. 33211 33212 -- Target Hook: void TARGET_ASM_OUTPUT_ANCHOR (rtx X) 33213 Write the assembly code to define section anchor X, which is a 33214 'SYMBOL_REF' for which 'SYMBOL_REF_ANCHOR_P (X)' is true. The hook 33215 is called with the assembly output position set to the beginning of 33216 'SYMBOL_REF_BLOCK (X)'. 33217 33218 If 'ASM_OUTPUT_DEF' is available, the hook's default definition 33219 uses it to define the symbol as '. + SYMBOL_REF_BLOCK_OFFSET (X)'. 33220 If 'ASM_OUTPUT_DEF' is not available, the hook's default definition 33221 is 'NULL', which disables the use of section anchors altogether. 33222 33223 -- Target Hook: bool TARGET_USE_ANCHORS_FOR_SYMBOL_P (const_rtx X) 33224 Return true if GCC should attempt to use anchors to access 33225 'SYMBOL_REF' X. You can assume 'SYMBOL_REF_HAS_BLOCK_INFO_P (X)' 33226 and '!SYMBOL_REF_ANCHOR_P (X)'. 33227 33228 The default version is correct for most targets, but you might need 33229 to intercept this hook to handle things like target-specific 33230 attributes or target-specific sections. 33231 33232 33233File: gccint.info, Node: Condition Code, Next: Costs, Prev: Anchored Addresses, Up: Target Macros 33234 3323517.15 Condition Code Status 33236=========================== 33237 33238The macros in this section can be split in two families, according to 33239the two ways of representing condition codes in GCC. 33240 33241 The first representation is the so called '(cc0)' representation (*note 33242Jump Patterns::), where all instructions can have an implicit clobber of 33243the condition codes. The second is the condition code register 33244representation, which provides better schedulability for architectures 33245that do have a condition code register, but on which most instructions 33246do not affect it. The latter category includes most RISC machines. 33247 33248 The implicit clobbering poses a strong restriction on the placement of 33249the definition and use of the condition code. In the past the 33250definition and use were always adjacent. However, recent changes to 33251support trapping arithmatic may result in the definition and user being 33252in different blocks. Thus, there may be a 'NOTE_INSN_BASIC_BLOCK' 33253between them. Additionally, the definition may be the source of 33254exception handling edges. 33255 33256 These restrictions can prevent important optimizations on some 33257machines. For example, on the IBM RS/6000, there is a delay for taken 33258branches unless the condition code register is set three instructions 33259earlier than the conditional branch. The instruction scheduler cannot 33260perform this optimization if it is not permitted to separate the 33261definition and use of the condition code register. 33262 33263 For this reason, it is possible and suggested to use a register to 33264represent the condition code for new ports. If there is a specific 33265condition code register in the machine, use a hard register. If the 33266condition code or comparison result can be placed in any general 33267register, or if there are multiple condition registers, use a pseudo 33268register. Registers used to store the condition code value will usually 33269have a mode that is in class 'MODE_CC'. 33270 33271 Alternatively, you can use 'BImode' if the comparison operator is 33272specified already in the compare instruction. In this case, you are not 33273interested in most macros in this section. 33274 33275* Menu: 33276 33277* CC0 Condition Codes:: Old style representation of condition codes. 33278* MODE_CC Condition Codes:: Modern representation of condition codes. 33279 33280 33281File: gccint.info, Node: CC0 Condition Codes, Next: MODE_CC Condition Codes, Up: Condition Code 33282 3328317.15.1 Representation of condition codes using '(cc0)' 33284------------------------------------------------------- 33285 33286The file 'conditions.h' defines a variable 'cc_status' to describe how 33287the condition code was computed (in case the interpretation of the 33288condition code depends on the instruction that it was set by). This 33289variable contains the RTL expressions on which the condition code is 33290currently based, and several standard flags. 33291 33292 Sometimes additional machine-specific flags must be defined in the 33293machine description header file. It can also add additional 33294machine-specific information by defining 'CC_STATUS_MDEP'. 33295 33296 -- Macro: CC_STATUS_MDEP 33297 C code for a data type which is used for declaring the 'mdep' 33298 component of 'cc_status'. It defaults to 'int'. 33299 33300 This macro is not used on machines that do not use 'cc0'. 33301 33302 -- Macro: CC_STATUS_MDEP_INIT 33303 A C expression to initialize the 'mdep' field to "empty". The 33304 default definition does nothing, since most machines don't use the 33305 field anyway. If you want to use the field, you should probably 33306 define this macro to initialize it. 33307 33308 This macro is not used on machines that do not use 'cc0'. 33309 33310 -- Macro: NOTICE_UPDATE_CC (EXP, INSN) 33311 A C compound statement to set the components of 'cc_status' 33312 appropriately for an insn INSN whose body is EXP. It is this 33313 macro's responsibility to recognize insns that set the condition 33314 code as a byproduct of other activity as well as those that 33315 explicitly set '(cc0)'. 33316 33317 This macro is not used on machines that do not use 'cc0'. 33318 33319 If there are insns that do not set the condition code but do alter 33320 other machine registers, this macro must check to see whether they 33321 invalidate the expressions that the condition code is recorded as 33322 reflecting. For example, on the 68000, insns that store in address 33323 registers do not set the condition code, which means that usually 33324 'NOTICE_UPDATE_CC' can leave 'cc_status' unaltered for such insns. 33325 But suppose that the previous insn set the condition code based on 33326 location 'a4@(102)' and the current insn stores a new value in 33327 'a4'. Although the condition code is not changed by this, it will 33328 no longer be true that it reflects the contents of 'a4@(102)'. 33329 Therefore, 'NOTICE_UPDATE_CC' must alter 'cc_status' in this case 33330 to say that nothing is known about the condition code value. 33331 33332 The definition of 'NOTICE_UPDATE_CC' must be prepared to deal with 33333 the results of peephole optimization: insns whose patterns are 33334 'parallel' RTXs containing various 'reg', 'mem' or constants which 33335 are just the operands. The RTL structure of these insns is not 33336 sufficient to indicate what the insns actually do. What 33337 'NOTICE_UPDATE_CC' should do when it sees one is just to run 33338 'CC_STATUS_INIT'. 33339 33340 A possible definition of 'NOTICE_UPDATE_CC' is to call a function 33341 that looks at an attribute (*note Insn Attributes::) named, for 33342 example, 'cc'. This avoids having detailed information about 33343 patterns in two places, the 'md' file and in 'NOTICE_UPDATE_CC'. 33344 33345 33346File: gccint.info, Node: MODE_CC Condition Codes, Prev: CC0 Condition Codes, Up: Condition Code 33347 3334817.15.2 Representation of condition codes using registers 33349--------------------------------------------------------- 33350 33351 -- Macro: SELECT_CC_MODE (OP, X, Y) 33352 On many machines, the condition code may be produced by other 33353 instructions than compares, for example the branch can use directly 33354 the condition code set by a subtract instruction. However, on some 33355 machines when the condition code is set this way some bits (such as 33356 the overflow bit) are not set in the same way as a test 33357 instruction, so that a different branch instruction must be used 33358 for some conditional branches. When this happens, use the machine 33359 mode of the condition code register to record different formats of 33360 the condition code register. Modes can also be used to record 33361 which compare instruction (e.g. a signed or an unsigned 33362 comparison) produced the condition codes. 33363 33364 If other modes than 'CCmode' are required, add them to 33365 'MACHINE-modes.def' and define 'SELECT_CC_MODE' to choose a mode 33366 given an operand of a compare. This is needed because the modes 33367 have to be chosen not only during RTL generation but also, for 33368 example, by instruction combination. The result of 33369 'SELECT_CC_MODE' should be consistent with the mode used in the 33370 patterns; for example to support the case of the add on the SPARC 33371 discussed above, we have the pattern 33372 33373 (define_insn "" 33374 [(set (reg:CC_NOOV 0) 33375 (compare:CC_NOOV 33376 (plus:SI (match_operand:SI 0 "register_operand" "%r") 33377 (match_operand:SI 1 "arith_operand" "rI")) 33378 (const_int 0)))] 33379 "" 33380 "...") 33381 33382 together with a 'SELECT_CC_MODE' that returns 'CC_NOOVmode' for 33383 comparisons whose argument is a 'plus': 33384 33385 #define SELECT_CC_MODE(OP,X,Y) \ 33386 (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ 33387 ? ((OP == LT || OP == LE || OP == GT || OP == GE) \ 33388 ? CCFPEmode : CCFPmode) \ 33389 : ((GET_CODE (X) == PLUS || GET_CODE (X) == MINUS \ 33390 || GET_CODE (X) == NEG || GET_CODE (x) == ASHIFT) \ 33391 ? CC_NOOVmode : CCmode)) 33392 33393 Another reason to use modes is to retain information on which 33394 operands were used by the comparison; see 'REVERSIBLE_CC_MODE' 33395 later in this section. 33396 33397 You should define this macro if and only if you define extra CC 33398 modes in 'MACHINE-modes.def'. 33399 33400 -- Target Hook: void TARGET_CANONICALIZE_COMPARISON (int *CODE, rtx 33401 *OP0, rtx *OP1, bool OP0_PRESERVE_VALUE) 33402 On some machines not all possible comparisons are defined, but you 33403 can convert an invalid comparison into a valid one. For example, 33404 the Alpha does not have a 'GT' comparison, but you can use an 'LT' 33405 comparison instead and swap the order of the operands. 33406 33407 On such machines, implement this hook to do any required 33408 conversions. CODE is the initial comparison code and OP0 and OP1 33409 are the left and right operands of the comparison, respectively. 33410 If OP0_PRESERVE_VALUE is 'true' the implementation is not allowed 33411 to change the value of OP0 since the value might be used in RTXs 33412 which aren't comparisons. E.g. the implementation is not allowed 33413 to swap operands in that case. 33414 33415 GCC will not assume that the comparison resulting from this macro 33416 is valid but will see if the resulting insn matches a pattern in 33417 the 'md' file. 33418 33419 You need not to implement this hook if it would never change the 33420 comparison code or operands. 33421 33422 -- Macro: REVERSIBLE_CC_MODE (MODE) 33423 A C expression whose value is one if it is always safe to reverse a 33424 comparison whose mode is MODE. If 'SELECT_CC_MODE' can ever return 33425 MODE for a floating-point inequality comparison, then 33426 'REVERSIBLE_CC_MODE (MODE)' must be zero. 33427 33428 You need not define this macro if it would always returns zero or 33429 if the floating-point format is anything other than 33430 'IEEE_FLOAT_FORMAT'. For example, here is the definition used on 33431 the SPARC, where floating-point inequality comparisons are given 33432 either 'CCFPEmode' or 'CCFPmode': 33433 33434 #define REVERSIBLE_CC_MODE(MODE) \ 33435 ((MODE) != CCFPEmode && (MODE) != CCFPmode) 33436 33437 -- Macro: REVERSE_CONDITION (CODE, MODE) 33438 A C expression whose value is reversed condition code of the CODE 33439 for comparison done in CC_MODE MODE. The macro is used only in 33440 case 'REVERSIBLE_CC_MODE (MODE)' is nonzero. Define this macro in 33441 case machine has some non-standard way how to reverse certain 33442 conditionals. For instance in case all floating point conditions 33443 are non-trapping, compiler may freely convert unordered compares to 33444 ordered ones. Then definition may look like: 33445 33446 #define REVERSE_CONDITION(CODE, MODE) \ 33447 ((MODE) != CCFPmode ? reverse_condition (CODE) \ 33448 : reverse_condition_maybe_unordered (CODE)) 33449 33450 -- Target Hook: bool TARGET_FIXED_CONDITION_CODE_REGS (unsigned int 33451 *P1, unsigned int *P2) 33452 On targets which do not use '(cc0)', and which use a hard register 33453 rather than a pseudo-register to hold condition codes, the regular 33454 CSE passes are often not able to identify cases in which the hard 33455 register is set to a common value. Use this hook to enable a small 33456 pass which optimizes such cases. This hook should return true to 33457 enable this pass, and it should set the integers to which its 33458 arguments point to the hard register numbers used for condition 33459 codes. When there is only one such register, as is true on most 33460 systems, the integer pointed to by P2 should be set to 33461 'INVALID_REGNUM'. 33462 33463 The default version of this hook returns false. 33464 33465 -- Target Hook: machine_mode TARGET_CC_MODES_COMPATIBLE (machine_mode 33466 M1, machine_mode M2) 33467 On targets which use multiple condition code modes in class 33468 'MODE_CC', it is sometimes the case that a comparison can be 33469 validly done in more than one mode. On such a system, define this 33470 target hook to take two mode arguments and to return a mode in 33471 which both comparisons may be validly done. If there is no such 33472 mode, return 'VOIDmode'. 33473 33474 The default version of this hook checks whether the modes are the 33475 same. If they are, it returns that mode. If they are different, 33476 it returns 'VOIDmode'. 33477 33478 -- Target Hook: unsigned int TARGET_FLAGS_REGNUM 33479 If the target has a dedicated flags register, and it needs to use 33480 the post-reload comparison elimination pass, then this value should 33481 be set appropriately. 33482 33483 33484File: gccint.info, Node: Costs, Next: Scheduling, Prev: Condition Code, Up: Target Macros 33485 3348617.16 Describing Relative Costs of Operations 33487============================================= 33488 33489These macros let you describe the relative speed of various operations 33490on the target machine. 33491 33492 -- Macro: REGISTER_MOVE_COST (MODE, FROM, TO) 33493 A C expression for the cost of moving data of mode MODE from a 33494 register in class FROM to one in class TO. The classes are 33495 expressed using the enumeration values such as 'GENERAL_REGS'. A 33496 value of 2 is the default; other values are interpreted relative to 33497 that. 33498 33499 It is not required that the cost always equal 2 when FROM is the 33500 same as TO; on some machines it is expensive to move between 33501 registers if they are not general registers. 33502 33503 If reload sees an insn consisting of a single 'set' between two 33504 hard registers, and if 'REGISTER_MOVE_COST' applied to their 33505 classes returns a value of 2, reload does not check to ensure that 33506 the constraints of the insn are met. Setting a cost of other than 33507 2 will allow reload to verify that the constraints are met. You 33508 should do this if the 'movM' pattern's constraints do not allow 33509 such copying. 33510 33511 These macros are obsolete, new ports should use the target hook 33512 'TARGET_REGISTER_MOVE_COST' instead. 33513 33514 -- Target Hook: int TARGET_REGISTER_MOVE_COST (machine_mode MODE, 33515 reg_class_t FROM, reg_class_t TO) 33516 This target hook should return the cost of moving data of mode MODE 33517 from a register in class FROM to one in class TO. The classes are 33518 expressed using the enumeration values such as 'GENERAL_REGS'. A 33519 value of 2 is the default; other values are interpreted relative to 33520 that. 33521 33522 It is not required that the cost always equal 2 when FROM is the 33523 same as TO; on some machines it is expensive to move between 33524 registers if they are not general registers. 33525 33526 If reload sees an insn consisting of a single 'set' between two 33527 hard registers, and if 'TARGET_REGISTER_MOVE_COST' applied to their 33528 classes returns a value of 2, reload does not check to ensure that 33529 the constraints of the insn are met. Setting a cost of other than 33530 2 will allow reload to verify that the constraints are met. You 33531 should do this if the 'movM' pattern's constraints do not allow 33532 such copying. 33533 33534 The default version of this function returns 2. 33535 33536 -- Macro: MEMORY_MOVE_COST (MODE, CLASS, IN) 33537 A C expression for the cost of moving data of mode MODE between a 33538 register of class CLASS and memory; IN is zero if the value is to 33539 be written to memory, nonzero if it is to be read in. This cost is 33540 relative to those in 'REGISTER_MOVE_COST'. If moving between 33541 registers and memory is more expensive than between two registers, 33542 you should define this macro to express the relative cost. 33543 33544 If you do not define this macro, GCC uses a default cost of 4 plus 33545 the cost of copying via a secondary reload register, if one is 33546 needed. If your machine requires a secondary reload register to 33547 copy between memory and a register of CLASS but the reload 33548 mechanism is more complex than copying via an intermediate, define 33549 this macro to reflect the actual cost of the move. 33550 33551 GCC defines the function 'memory_move_secondary_cost' if secondary 33552 reloads are needed. It computes the costs due to copying via a 33553 secondary register. If your machine copies from memory using a 33554 secondary register in the conventional way but the default base 33555 value of 4 is not correct for your machine, define this macro to 33556 add some other value to the result of that function. The arguments 33557 to that function are the same as to this macro. 33558 33559 These macros are obsolete, new ports should use the target hook 33560 'TARGET_MEMORY_MOVE_COST' instead. 33561 33562 -- Target Hook: int TARGET_MEMORY_MOVE_COST (machine_mode MODE, 33563 reg_class_t RCLASS, bool IN) 33564 This target hook should return the cost of moving data of mode MODE 33565 between a register of class RCLASS and memory; IN is 'false' if the 33566 value is to be written to memory, 'true' if it is to be read in. 33567 This cost is relative to those in 'TARGET_REGISTER_MOVE_COST'. If 33568 moving between registers and memory is more expensive than between 33569 two registers, you should add this target hook to express the 33570 relative cost. 33571 33572 If you do not add this target hook, GCC uses a default cost of 4 33573 plus the cost of copying via a secondary reload register, if one is 33574 needed. If your machine requires a secondary reload register to 33575 copy between memory and a register of RCLASS but the reload 33576 mechanism is more complex than copying via an intermediate, use 33577 this target hook to reflect the actual cost of the move. 33578 33579 GCC defines the function 'memory_move_secondary_cost' if secondary 33580 reloads are needed. It computes the costs due to copying via a 33581 secondary register. If your machine copies from memory using a 33582 secondary register in the conventional way but the default base 33583 value of 4 is not correct for your machine, use this target hook to 33584 add some other value to the result of that function. The arguments 33585 to that function are the same as to this target hook. 33586 33587 -- Macro: BRANCH_COST (SPEED_P, PREDICTABLE_P) 33588 A C expression for the cost of a branch instruction. A value of 1 33589 is the default; other values are interpreted relative to that. 33590 Parameter SPEED_P is true when the branch in question should be 33591 optimized for speed. When it is false, 'BRANCH_COST' should return 33592 a value optimal for code size rather than performance. 33593 PREDICTABLE_P is true for well-predicted branches. On many 33594 architectures the 'BRANCH_COST' can be reduced then. 33595 33596 Here are additional macros which do not specify precise relative costs, 33597but only that certain actions are more expensive than GCC would 33598ordinarily expect. 33599 33600 -- Macro: SLOW_BYTE_ACCESS 33601 Define this macro as a C expression which is nonzero if accessing 33602 less than a word of memory (i.e. a 'char' or a 'short') is no 33603 faster than accessing a word of memory, i.e., if such access 33604 require more than one instruction or if there is no difference in 33605 cost between byte and (aligned) word loads. 33606 33607 When this macro is not defined, the compiler will access a field by 33608 finding the smallest containing object; when it is defined, a 33609 fullword load will be used if alignment permits. Unless bytes 33610 accesses are faster than word accesses, using word accesses is 33611 preferable since it may eliminate subsequent memory access if 33612 subsequent accesses occur to other fields in the same word of the 33613 structure, but to different bytes. 33614 33615 -- Macro: SLOW_UNALIGNED_ACCESS (MODE, ALIGNMENT) 33616 Define this macro to be the value 1 if memory accesses described by 33617 the MODE and ALIGNMENT parameters have a cost many times greater 33618 than aligned accesses, for example if they are emulated in a trap 33619 handler. 33620 33621 When this macro is nonzero, the compiler will act as if 33622 'STRICT_ALIGNMENT' were nonzero when generating code for block 33623 moves. This can cause significantly more instructions to be 33624 produced. Therefore, do not set this macro nonzero if unaligned 33625 accesses only add a cycle or two to the time for a memory access. 33626 33627 If the value of this macro is always zero, it need not be defined. 33628 If this macro is defined, it should produce a nonzero value when 33629 'STRICT_ALIGNMENT' is nonzero. 33630 33631 -- Macro: MOVE_RATIO (SPEED) 33632 The threshold of number of scalar memory-to-memory move insns, 33633 _below_ which a sequence of insns should be generated instead of a 33634 string move insn or a library call. Increasing the value will 33635 always make code faster, but eventually incurs high cost in 33636 increased code size. 33637 33638 Note that on machines where the corresponding move insn is a 33639 'define_expand' that emits a sequence of insns, this macro counts 33640 the number of such sequences. 33641 33642 The parameter SPEED is true if the code is currently being 33643 optimized for speed rather than size. 33644 33645 If you don't define this, a reasonable default is used. 33646 33647 -- Target Hook: bool TARGET_USE_BY_PIECES_INFRASTRUCTURE_P (unsigned 33648 HOST_WIDE_INT SIZE, unsigned int ALIGNMENT, enum 33649 by_pieces_operation OP, bool SPEED_P) 33650 GCC will attempt several strategies when asked to copy between two 33651 areas of memory, or to set, clear or store to memory, for example 33652 when copying a 'struct'. The 'by_pieces' infrastructure implements 33653 such memory operations as a sequence of load, store or move insns. 33654 Alternate strategies are to expand the 'movmem' or 'setmem' optabs, 33655 to emit a library call, or to emit unit-by-unit, loop-based 33656 operations. 33657 33658 This target hook should return true if, for a memory operation with 33659 a given SIZE and ALIGNMENT, using the 'by_pieces' infrastructure is 33660 expected to result in better code generation. Both SIZE and 33661 ALIGNMENT are measured in terms of storage units. 33662 33663 The parameter OP is one of: 'CLEAR_BY_PIECES', 'MOVE_BY_PIECES', 33664 'SET_BY_PIECES', 'STORE_BY_PIECES'. These describe the type of 33665 memory operation under consideration. 33666 33667 The parameter SPEED_P is true if the code is currently being 33668 optimized for speed rather than size. 33669 33670 Returning true for higher values of SIZE can improve code 33671 generation for speed if the target does not provide an 33672 implementation of the 'movmem' or 'setmem' standard names, if the 33673 'movmem' or 'setmem' implementation would be more expensive than a 33674 sequence of insns, or if the overhead of a library call would 33675 dominate that of the body of the memory operation. 33676 33677 Returning true for higher values of 'size' may also cause an 33678 increase in code size, for example where the number of insns 33679 emitted to perform a move would be greater than that of a library 33680 call. 33681 33682 -- Macro: MOVE_MAX_PIECES 33683 A C expression used by 'move_by_pieces' to determine the largest 33684 unit a load or store used to copy memory is. Defaults to 33685 'MOVE_MAX'. 33686 33687 -- Macro: CLEAR_RATIO (SPEED) 33688 The threshold of number of scalar move insns, _below_ which a 33689 sequence of insns should be generated to clear memory instead of a 33690 string clear insn or a library call. Increasing the value will 33691 always make code faster, but eventually incurs high cost in 33692 increased code size. 33693 33694 The parameter SPEED is true if the code is currently being 33695 optimized for speed rather than size. 33696 33697 If you don't define this, a reasonable default is used. 33698 33699 -- Macro: SET_RATIO (SPEED) 33700 The threshold of number of scalar move insns, _below_ which a 33701 sequence of insns should be generated to set memory to a constant 33702 value, instead of a block set insn or a library call. Increasing 33703 the value will always make code faster, but eventually incurs high 33704 cost in increased code size. 33705 33706 The parameter SPEED is true if the code is currently being 33707 optimized for speed rather than size. 33708 33709 If you don't define this, it defaults to the value of 'MOVE_RATIO'. 33710 33711 -- Macro: USE_LOAD_POST_INCREMENT (MODE) 33712 A C expression used to determine whether a load postincrement is a 33713 good thing to use for a given mode. Defaults to the value of 33714 'HAVE_POST_INCREMENT'. 33715 33716 -- Macro: USE_LOAD_POST_DECREMENT (MODE) 33717 A C expression used to determine whether a load postdecrement is a 33718 good thing to use for a given mode. Defaults to the value of 33719 'HAVE_POST_DECREMENT'. 33720 33721 -- Macro: USE_LOAD_PRE_INCREMENT (MODE) 33722 A C expression used to determine whether a load preincrement is a 33723 good thing to use for a given mode. Defaults to the value of 33724 'HAVE_PRE_INCREMENT'. 33725 33726 -- Macro: USE_LOAD_PRE_DECREMENT (MODE) 33727 A C expression used to determine whether a load predecrement is a 33728 good thing to use for a given mode. Defaults to the value of 33729 'HAVE_PRE_DECREMENT'. 33730 33731 -- Macro: USE_STORE_POST_INCREMENT (MODE) 33732 A C expression used to determine whether a store postincrement is a 33733 good thing to use for a given mode. Defaults to the value of 33734 'HAVE_POST_INCREMENT'. 33735 33736 -- Macro: USE_STORE_POST_DECREMENT (MODE) 33737 A C expression used to determine whether a store postdecrement is a 33738 good thing to use for a given mode. Defaults to the value of 33739 'HAVE_POST_DECREMENT'. 33740 33741 -- Macro: USE_STORE_PRE_INCREMENT (MODE) 33742 This macro is used to determine whether a store preincrement is a 33743 good thing to use for a given mode. Defaults to the value of 33744 'HAVE_PRE_INCREMENT'. 33745 33746 -- Macro: USE_STORE_PRE_DECREMENT (MODE) 33747 This macro is used to determine whether a store predecrement is a 33748 good thing to use for a given mode. Defaults to the value of 33749 'HAVE_PRE_DECREMENT'. 33750 33751 -- Macro: NO_FUNCTION_CSE 33752 Define this macro to be true if it is as good or better to call a 33753 constant function address than to call an address kept in a 33754 register. 33755 33756 -- Macro: LOGICAL_OP_NON_SHORT_CIRCUIT 33757 Define this macro if a non-short-circuit operation produced by 33758 'fold_range_test ()' is optimal. This macro defaults to true if 33759 'BRANCH_COST' is greater than or equal to the value 2. 33760 33761 -- Target Hook: bool TARGET_OPTAB_SUPPORTED_P (int OP, machine_mode 33762 MODE1, machine_mode MODE2, optimization_type OPT_TYPE) 33763 Return true if the optimizers should use optab OP with modes MODE1 33764 and MODE2 for optimization type OPT_TYPE. The optab is known to 33765 have an associated '.md' instruction whose C condition is true. 33766 MODE2 is only meaningful for conversion optabs; for direct optabs 33767 it is a copy of MODE1. 33768 33769 For example, when called with OP equal to 'rint_optab' and MODE1 33770 equal to 'DFmode', the hook should say whether the optimizers 33771 should use optab 'rintdf2'. 33772 33773 The default hook returns true for all inputs. 33774 33775 -- Target Hook: bool TARGET_RTX_COSTS (rtx X, machine_mode MODE, int 33776 OUTER_CODE, int OPNO, int *TOTAL, bool SPEED) 33777 This target hook describes the relative costs of RTL expressions. 33778 33779 The cost may depend on the precise form of the expression, which is 33780 available for examination in X, and the fact that X appears as 33781 operand OPNO of an expression with rtx code OUTER_CODE. That is, 33782 the hook can assume that there is some rtx Y such that 'GET_CODE 33783 (Y) == OUTER_CODE' and such that either (a) 'XEXP (Y, OPNO) == X' 33784 or (b) 'XVEC (Y, OPNO)' contains X. 33785 33786 MODE is X's machine mode, or for cases like 'const_int' that do not 33787 have a mode, the mode in which X is used. 33788 33789 In implementing this hook, you can use the construct 'COSTS_N_INSNS 33790 (N)' to specify a cost equal to N fast instructions. 33791 33792 On entry to the hook, '*TOTAL' contains a default estimate for the 33793 cost of the expression. The hook should modify this value as 33794 necessary. Traditionally, the default costs are 'COSTS_N_INSNS 33795 (5)' for multiplications, 'COSTS_N_INSNS (7)' for division and 33796 modulus operations, and 'COSTS_N_INSNS (1)' for all other 33797 operations. 33798 33799 When optimizing for code size, i.e. when 'speed' is false, this 33800 target hook should be used to estimate the relative size cost of an 33801 expression, again relative to 'COSTS_N_INSNS'. 33802 33803 The hook returns true when all subexpressions of X have been 33804 processed, and false when 'rtx_cost' should recurse. 33805 33806 -- Target Hook: int TARGET_ADDRESS_COST (rtx ADDRESS, machine_mode 33807 MODE, addr_space_t AS, bool SPEED) 33808 This hook computes the cost of an addressing mode that contains 33809 ADDRESS. If not defined, the cost is computed from the ADDRESS 33810 expression and the 'TARGET_RTX_COST' hook. 33811 33812 For most CISC machines, the default cost is a good approximation of 33813 the true cost of the addressing mode. However, on RISC machines, 33814 all instructions normally have the same length and execution time. 33815 Hence all addresses will have equal costs. 33816 33817 In cases where more than one form of an address is known, the form 33818 with the lowest cost will be used. If multiple forms have the 33819 same, lowest, cost, the one that is the most complex will be used. 33820 33821 For example, suppose an address that is equal to the sum of a 33822 register and a constant is used twice in the same basic block. 33823 When this macro is not defined, the address will be computed in a 33824 register and memory references will be indirect through that 33825 register. On machines where the cost of the addressing mode 33826 containing the sum is no higher than that of a simple indirect 33827 reference, this will produce an additional instruction and possibly 33828 require an additional register. Proper specification of this macro 33829 eliminates this overhead for such machines. 33830 33831 This hook is never called with an invalid address. 33832 33833 On machines where an address involving more than one register is as 33834 cheap as an address computation involving only one register, 33835 defining 'TARGET_ADDRESS_COST' to reflect this can cause two 33836 registers to be live over a region of code where only one would 33837 have been if 'TARGET_ADDRESS_COST' were not defined in that manner. 33838 This effect should be considered in the definition of this macro. 33839 Equivalent costs should probably only be given to addresses with 33840 different numbers of registers on machines with lots of registers. 33841 33842 -- Target Hook: bool TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P (void) 33843 This predicate controls the use of the eager delay slot filler to 33844 disallow speculatively executed instructions being placed in delay 33845 slots. Targets such as certain MIPS architectures possess both 33846 branches with and without delay slots. As the eager delay slot 33847 filler can decrease performance, disabling it is beneficial when 33848 ordinary branches are available. Use of delay slot branches filled 33849 using the basic filler is often still desirable as the delay slot 33850 can hide a pipeline bubble. 33851 33852 33853File: gccint.info, Node: Scheduling, Next: Sections, Prev: Costs, Up: Target Macros 33854 3385517.17 Adjusting the Instruction Scheduler 33856========================================= 33857 33858The instruction scheduler may need a fair amount of machine-specific 33859adjustment in order to produce good code. GCC provides several target 33860hooks for this purpose. It is usually enough to define just a few of 33861them: try the first ones in this list first. 33862 33863 -- Target Hook: int TARGET_SCHED_ISSUE_RATE (void) 33864 This hook returns the maximum number of instructions that can ever 33865 issue at the same time on the target machine. The default is one. 33866 Although the insn scheduler can define itself the possibility of 33867 issue an insn on the same cycle, the value can serve as an 33868 additional constraint to issue insns on the same simulated 33869 processor cycle (see hooks 'TARGET_SCHED_REORDER' and 33870 'TARGET_SCHED_REORDER2'). This value must be constant over the 33871 entire compilation. If you need it to vary depending on what the 33872 instructions are, you must use 'TARGET_SCHED_VARIABLE_ISSUE'. 33873 33874 -- Target Hook: int TARGET_SCHED_VARIABLE_ISSUE (FILE *FILE, int 33875 VERBOSE, rtx_insn *INSN, int MORE) 33876 This hook is executed by the scheduler after it has scheduled an 33877 insn from the ready list. It should return the number of insns 33878 which can still be issued in the current cycle. The default is 33879 'MORE - 1' for insns other than 'CLOBBER' and 'USE', which normally 33880 are not counted against the issue rate. You should define this 33881 hook if some insns take more machine resources than others, so that 33882 fewer insns can follow them in the same cycle. FILE is either a 33883 null pointer, or a stdio stream to write any debug output to. 33884 VERBOSE is the verbose level provided by '-fsched-verbose-N'. INSN 33885 is the instruction that was scheduled. 33886 33887 -- Target Hook: int TARGET_SCHED_ADJUST_COST (rtx_insn *INSN, rtx LINK, 33888 rtx_insn *DEP_INSN, int COST) 33889 This function corrects the value of COST based on the relationship 33890 between INSN and DEP_INSN through the dependence LINK. It should 33891 return the new value. The default is to make no adjustment to 33892 COST. This can be used for example to specify to the scheduler 33893 using the traditional pipeline description that an output- or 33894 anti-dependence does not incur the same cost as a data-dependence. 33895 If the scheduler using the automaton based pipeline description, 33896 the cost of anti-dependence is zero and the cost of 33897 output-dependence is maximum of one and the difference of latency 33898 times of the first and the second insns. If these values are not 33899 acceptable, you could use the hook to modify them too. See also 33900 *note Processor pipeline description::. 33901 33902 -- Target Hook: int TARGET_SCHED_ADJUST_PRIORITY (rtx_insn *INSN, int 33903 PRIORITY) 33904 This hook adjusts the integer scheduling priority PRIORITY of INSN. 33905 It should return the new priority. Increase the priority to 33906 execute INSN earlier, reduce the priority to execute INSN later. 33907 Do not define this hook if you do not need to adjust the scheduling 33908 priorities of insns. 33909 33910 -- Target Hook: int TARGET_SCHED_REORDER (FILE *FILE, int VERBOSE, 33911 rtx_insn **READY, int *N_READYP, int CLOCK) 33912 This hook is executed by the scheduler after it has scheduled the 33913 ready list, to allow the machine description to reorder it (for 33914 example to combine two small instructions together on 'VLIW' 33915 machines). FILE is either a null pointer, or a stdio stream to 33916 write any debug output to. VERBOSE is the verbose level provided 33917 by '-fsched-verbose-N'. READY is a pointer to the ready list of 33918 instructions that are ready to be scheduled. N_READYP is a pointer 33919 to the number of elements in the ready list. The scheduler reads 33920 the ready list in reverse order, starting with READY[*N_READYP - 1] 33921 and going to READY[0]. CLOCK is the timer tick of the scheduler. 33922 You may modify the ready list and the number of ready insns. The 33923 return value is the number of insns that can issue this cycle; 33924 normally this is just 'issue_rate'. See also 33925 'TARGET_SCHED_REORDER2'. 33926 33927 -- Target Hook: int TARGET_SCHED_REORDER2 (FILE *FILE, int VERBOSE, 33928 rtx_insn **READY, int *N_READYP, int CLOCK) 33929 Like 'TARGET_SCHED_REORDER', but called at a different time. That 33930 function is called whenever the scheduler starts a new cycle. This 33931 one is called once per iteration over a cycle, immediately after 33932 'TARGET_SCHED_VARIABLE_ISSUE'; it can reorder the ready list and 33933 return the number of insns to be scheduled in the same cycle. 33934 Defining this hook can be useful if there are frequent situations 33935 where scheduling one insn causes other insns to become ready in the 33936 same cycle. These other insns can then be taken into account 33937 properly. 33938 33939 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_P (void) 33940 This hook is used to check whether target platform supports macro 33941 fusion. 33942 33943 -- Target Hook: bool TARGET_SCHED_MACRO_FUSION_PAIR_P (rtx_insn *PREV, 33944 rtx_insn *CURR) 33945 This hook is used to check whether two insns should be macro fused 33946 for a target microarchitecture. If this hook returns true for the 33947 given insn pair (PREV and CURR), the scheduler will put them into a 33948 sched group, and they will not be scheduled apart. The two insns 33949 will be either two SET insns or a compare and a conditional jump 33950 and this hook should validate any dependencies needed to fuse the 33951 two insns together. 33952 33953 -- Target Hook: void TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK 33954 (rtx_insn *HEAD, rtx_insn *TAIL) 33955 This hook is called after evaluation forward dependencies of insns 33956 in chain given by two parameter values (HEAD and TAIL 33957 correspondingly) but before insns scheduling of the insn chain. 33958 For example, it can be used for better insn classification if it 33959 requires analysis of dependencies. This hook can use backward and 33960 forward dependencies of the insn scheduler because they are already 33961 calculated. 33962 33963 -- Target Hook: void TARGET_SCHED_INIT (FILE *FILE, int VERBOSE, int 33964 MAX_READY) 33965 This hook is executed by the scheduler at the beginning of each 33966 block of instructions that are to be scheduled. FILE is either a 33967 null pointer, or a stdio stream to write any debug output to. 33968 VERBOSE is the verbose level provided by '-fsched-verbose-N'. 33969 MAX_READY is the maximum number of insns in the current scheduling 33970 region that can be live at the same time. This can be used to 33971 allocate scratch space if it is needed, e.g. by 33972 'TARGET_SCHED_REORDER'. 33973 33974 -- Target Hook: void TARGET_SCHED_FINISH (FILE *FILE, int VERBOSE) 33975 This hook is executed by the scheduler at the end of each block of 33976 instructions that are to be scheduled. It can be used to perform 33977 cleanup of any actions done by the other scheduling hooks. FILE is 33978 either a null pointer, or a stdio stream to write any debug output 33979 to. VERBOSE is the verbose level provided by '-fsched-verbose-N'. 33980 33981 -- Target Hook: void TARGET_SCHED_INIT_GLOBAL (FILE *FILE, int VERBOSE, 33982 int OLD_MAX_UID) 33983 This hook is executed by the scheduler after function level 33984 initializations. FILE is either a null pointer, or a stdio stream 33985 to write any debug output to. VERBOSE is the verbose level 33986 provided by '-fsched-verbose-N'. OLD_MAX_UID is the maximum insn 33987 uid when scheduling begins. 33988 33989 -- Target Hook: void TARGET_SCHED_FINISH_GLOBAL (FILE *FILE, int 33990 VERBOSE) 33991 This is the cleanup hook corresponding to 33992 'TARGET_SCHED_INIT_GLOBAL'. FILE is either a null pointer, or a 33993 stdio stream to write any debug output to. VERBOSE is the verbose 33994 level provided by '-fsched-verbose-N'. 33995 33996 -- Target Hook: rtx TARGET_SCHED_DFA_PRE_CYCLE_INSN (void) 33997 The hook returns an RTL insn. The automaton state used in the 33998 pipeline hazard recognizer is changed as if the insn were scheduled 33999 when the new simulated processor cycle starts. Usage of the hook 34000 may simplify the automaton pipeline description for some VLIW 34001 processors. If the hook is defined, it is used only for the 34002 automaton based pipeline description. The default is not to change 34003 the state when the new simulated processor cycle starts. 34004 34005 -- Target Hook: void TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN (void) 34006 The hook can be used to initialize data used by the previous hook. 34007 34008 -- Target Hook: rtx_insn * TARGET_SCHED_DFA_POST_CYCLE_INSN (void) 34009 The hook is analogous to 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used 34010 to changed the state as if the insn were scheduled when the new 34011 simulated processor cycle finishes. 34012 34013 -- Target Hook: void TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN (void) 34014 The hook is analogous to 'TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN' but 34015 used to initialize data used by the previous hook. 34016 34017 -- Target Hook: void TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE (void) 34018 The hook to notify target that the current simulated cycle is about 34019 to finish. The hook is analogous to 34020 'TARGET_SCHED_DFA_PRE_CYCLE_INSN' but used to change the state in 34021 more complicated situations - e.g., when advancing state on a 34022 single insn is not enough. 34023 34024 -- Target Hook: void TARGET_SCHED_DFA_POST_ADVANCE_CYCLE (void) 34025 The hook to notify target that new simulated cycle has just 34026 started. The hook is analogous to 34027 'TARGET_SCHED_DFA_POST_CYCLE_INSN' but used to change the state in 34028 more complicated situations - e.g., when advancing state on a 34029 single insn is not enough. 34030 34031 -- Target Hook: int TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD 34032 (void) 34033 This hook controls better choosing an insn from the ready insn 34034 queue for the DFA-based insn scheduler. Usually the scheduler 34035 chooses the first insn from the queue. If the hook returns a 34036 positive value, an additional scheduler code tries all permutations 34037 of 'TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD ()' subsequent 34038 ready insns to choose an insn whose issue will result in maximal 34039 number of issued insns on the same cycle. For the VLIW processor, 34040 the code could actually solve the problem of packing simple insns 34041 into the VLIW insn. Of course, if the rules of VLIW packing are 34042 described in the automaton. 34043 34044 This code also could be used for superscalar RISC processors. Let 34045 us consider a superscalar RISC processor with 3 pipelines. Some 34046 insns can be executed in pipelines A or B, some insns can be 34047 executed only in pipelines B or C, and one insn can be executed in 34048 pipeline B. The processor may issue the 1st insn into A and the 34049 2nd one into B. In this case, the 3rd insn will wait for freeing B 34050 until the next cycle. If the scheduler issues the 3rd insn the 34051 first, the processor could issue all 3 insns per cycle. 34052 34053 Actually this code demonstrates advantages of the automaton based 34054 pipeline hazard recognizer. We try quickly and easy many insn 34055 schedules to choose the best one. 34056 34057 The default is no multipass scheduling. 34058 34059 -- Target Hook: int 34060 TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD 34061 (rtx_insn *INSN, int READY_INDEX) 34062 34063 This hook controls what insns from the ready insn queue will be 34064 considered for the multipass insn scheduling. If the hook returns 34065 zero for INSN, the insn will be considered in multipass scheduling. 34066 Positive return values will remove INSN from consideration on the 34067 current round of multipass scheduling. Negative return values will 34068 remove INSN from consideration for given number of cycles. 34069 Backends should be careful about returning non-zero for highest 34070 priority instruction at position 0 in the ready list. READY_INDEX 34071 is passed to allow backends make correct judgements. 34072 34073 The default is that any ready insns can be chosen to be issued. 34074 34075 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN (void 34076 *DATA, signed char *READY_TRY, int N_READY, bool 34077 FIRST_CYCLE_INSN_P) 34078 This hook prepares the target backend for a new round of multipass 34079 scheduling. 34080 34081 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE (void 34082 *DATA, signed char *READY_TRY, int N_READY, rtx_insn *INSN, 34083 const void *PREV_DATA) 34084 This hook is called when multipass scheduling evaluates instruction 34085 INSN. 34086 34087 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK 34088 (const void *DATA, signed char *READY_TRY, int N_READY) 34089 This is called when multipass scheduling backtracks from evaluation 34090 of an instruction. 34091 34092 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END (const void 34093 *DATA) 34094 This hook notifies the target about the result of the concluded 34095 current round of multipass scheduling. 34096 34097 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT (void 34098 *DATA) 34099 This hook initializes target-specific data used in multipass 34100 scheduling. 34101 34102 -- Target Hook: void TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI (void 34103 *DATA) 34104 This hook finalizes target-specific data used in multipass 34105 scheduling. 34106 34107 -- Target Hook: int TARGET_SCHED_DFA_NEW_CYCLE (FILE *DUMP, int 34108 VERBOSE, rtx_insn *INSN, int LAST_CLOCK, int CLOCK, int 34109 *SORT_P) 34110 This hook is called by the insn scheduler before issuing INSN on 34111 cycle CLOCK. If the hook returns nonzero, INSN is not issued on 34112 this processor cycle. Instead, the processor cycle is advanced. 34113 If *SORT_P is zero, the insn ready queue is not sorted on the new 34114 cycle start as usually. DUMP and VERBOSE specify the file and 34115 verbosity level to use for debugging output. LAST_CLOCK and CLOCK 34116 are, respectively, the processor cycle on which the previous insn 34117 has been issued, and the current processor cycle. 34118 34119 -- Target Hook: bool TARGET_SCHED_IS_COSTLY_DEPENDENCE (struct _dep 34120 *_DEP, int COST, int DISTANCE) 34121 This hook is used to define which dependences are considered costly 34122 by the target, so costly that it is not advisable to schedule the 34123 insns that are involved in the dependence too close to one another. 34124 The parameters to this hook are as follows: The first parameter 34125 _DEP is the dependence being evaluated. The second parameter COST 34126 is the cost of the dependence as estimated by the scheduler, and 34127 the third parameter DISTANCE is the distance in cycles between the 34128 two insns. The hook returns 'true' if considering the distance 34129 between the two insns the dependence between them is considered 34130 costly by the target, and 'false' otherwise. 34131 34132 Defining this hook can be useful in multiple-issue out-of-order 34133 machines, where (a) it's practically hopeless to predict the actual 34134 data/resource delays, however: (b) there's a better chance to 34135 predict the actual grouping that will be formed, and (c) correctly 34136 emulating the grouping can be very important. In such targets one 34137 may want to allow issuing dependent insns closer to one 34138 another--i.e., closer than the dependence distance; however, not in 34139 cases of "costly dependences", which this hooks allows to define. 34140 34141 -- Target Hook: void TARGET_SCHED_H_I_D_EXTENDED (void) 34142 This hook is called by the insn scheduler after emitting a new 34143 instruction to the instruction stream. The hook notifies a target 34144 backend to extend its per instruction data structures. 34145 34146 -- Target Hook: void * TARGET_SCHED_ALLOC_SCHED_CONTEXT (void) 34147 Return a pointer to a store large enough to hold target scheduling 34148 context. 34149 34150 -- Target Hook: void TARGET_SCHED_INIT_SCHED_CONTEXT (void *TC, bool 34151 CLEAN_P) 34152 Initialize store pointed to by TC to hold target scheduling 34153 context. It CLEAN_P is true then initialize TC as if scheduler is 34154 at the beginning of the block. Otherwise, copy the current context 34155 into TC. 34156 34157 -- Target Hook: void TARGET_SCHED_SET_SCHED_CONTEXT (void *TC) 34158 Copy target scheduling context pointed to by TC to the current 34159 context. 34160 34161 -- Target Hook: void TARGET_SCHED_CLEAR_SCHED_CONTEXT (void *TC) 34162 Deallocate internal data in target scheduling context pointed to by 34163 TC. 34164 34165 -- Target Hook: void TARGET_SCHED_FREE_SCHED_CONTEXT (void *TC) 34166 Deallocate a store for target scheduling context pointed to by TC. 34167 34168 -- Target Hook: int TARGET_SCHED_SPECULATE_INSN (rtx_insn *INSN, 34169 unsigned int DEP_STATUS, rtx *NEW_PAT) 34170 This hook is called by the insn scheduler when INSN has only 34171 speculative dependencies and therefore can be scheduled 34172 speculatively. The hook is used to check if the pattern of INSN 34173 has a speculative version and, in case of successful check, to 34174 generate that speculative pattern. The hook should return 1, if 34175 the instruction has a speculative form, or -1, if it doesn't. 34176 REQUEST describes the type of requested speculation. If the return 34177 value equals 1 then NEW_PAT is assigned the generated speculative 34178 pattern. 34179 34180 -- Target Hook: bool TARGET_SCHED_NEEDS_BLOCK_P (unsigned int 34181 DEP_STATUS) 34182 This hook is called by the insn scheduler during generation of 34183 recovery code for INSN. It should return 'true', if the 34184 corresponding check instruction should branch to recovery code, or 34185 'false' otherwise. 34186 34187 -- Target Hook: rtx TARGET_SCHED_GEN_SPEC_CHECK (rtx_insn *INSN, 34188 rtx_insn *LABEL, unsigned int DS) 34189 This hook is called by the insn scheduler to generate a pattern for 34190 recovery check instruction. If MUTATE_P is zero, then INSN is a 34191 speculative instruction for which the check should be generated. 34192 LABEL is either a label of a basic block, where recovery code 34193 should be emitted, or a null pointer, when requested check doesn't 34194 branch to recovery code (a simple check). If MUTATE_P is nonzero, 34195 then a pattern for a branchy check corresponding to a simple check 34196 denoted by INSN should be generated. In this case LABEL can't be 34197 null. 34198 34199 -- Target Hook: void TARGET_SCHED_SET_SCHED_FLAGS (struct spec_info_def 34200 *SPEC_INFO) 34201 This hook is used by the insn scheduler to find out what features 34202 should be enabled/used. The structure *SPEC_INFO should be filled 34203 in by the target. The structure describes speculation types that 34204 can be used in the scheduler. 34205 34206 -- Target Hook: int TARGET_SCHED_SMS_RES_MII (struct ddg *G) 34207 This hook is called by the swing modulo scheduler to calculate a 34208 resource-based lower bound which is based on the resources 34209 available in the machine and the resources required by each 34210 instruction. The target backend can use G to calculate such bound. 34211 A very simple lower bound will be used in case this hook is not 34212 implemented: the total number of instructions divided by the issue 34213 rate. 34214 34215 -- Target Hook: bool TARGET_SCHED_DISPATCH (rtx_insn *INSN, int X) 34216 This hook is called by Haifa Scheduler. It returns true if 34217 dispatch scheduling is supported in hardware and the condition 34218 specified in the parameter is true. 34219 34220 -- Target Hook: void TARGET_SCHED_DISPATCH_DO (rtx_insn *INSN, int X) 34221 This hook is called by Haifa Scheduler. It performs the operation 34222 specified in its second parameter. 34223 34224 -- Target Hook: bool TARGET_SCHED_EXPOSED_PIPELINE 34225 True if the processor has an exposed pipeline, which means that not 34226 just the order of instructions is important for correctness when 34227 scheduling, but also the latencies of operations. 34228 34229 -- Target Hook: int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int OPC, 34230 machine_mode MODE) 34231 This hook is called by tree reassociator to determine a level of 34232 parallelism required in output calculations chain. 34233 34234 -- Target Hook: void TARGET_SCHED_FUSION_PRIORITY (rtx_insn *INSN, int 34235 MAX_PRI, int *FUSION_PRI, int *PRI) 34236 This hook is called by scheduling fusion pass. It calculates 34237 fusion priorities for each instruction passed in by parameter. The 34238 priorities are returned via pointer parameters. 34239 34240 INSN is the instruction whose priorities need to be calculated. 34241 MAX_PRI is the maximum priority can be returned in any cases. 34242 FUSION_PRI is the pointer parameter through which INSN's fusion 34243 priority should be calculated and returned. PRI is the pointer 34244 parameter through which INSN's priority should be calculated and 34245 returned. 34246 34247 Same FUSION_PRI should be returned for instructions which should be 34248 scheduled together. Different PRI should be returned for 34249 instructions with same FUSION_PRI. FUSION_PRI is the major sort 34250 key, PRI is the minor sort key. All instructions will be scheduled 34251 according to the two priorities. All priorities calculated should 34252 be between 0 (exclusive) and MAX_PRI (inclusive). To avoid false 34253 dependencies, FUSION_PRI of instructions which need to be scheduled 34254 together should be smaller than FUSION_PRI of irrelevant 34255 instructions. 34256 34257 Given below example: 34258 34259 ldr r10, [r1, 4] 34260 add r4, r4, r10 34261 ldr r15, [r2, 8] 34262 sub r5, r5, r15 34263 ldr r11, [r1, 0] 34264 add r4, r4, r11 34265 ldr r16, [r2, 12] 34266 sub r5, r5, r16 34267 34268 On targets like ARM/AArch64, the two pairs of consecutive loads 34269 should be merged. Since peephole2 pass can't help in this case 34270 unless consecutive loads are actually next to each other in 34271 instruction flow. That's where this scheduling fusion pass works. 34272 This hook calculates priority for each instruction based on its 34273 fustion type, like: 34274 34275 ldr r10, [r1, 4] ; fusion_pri=99, pri=96 34276 add r4, r4, r10 ; fusion_pri=100, pri=100 34277 ldr r15, [r2, 8] ; fusion_pri=98, pri=92 34278 sub r5, r5, r15 ; fusion_pri=100, pri=100 34279 ldr r11, [r1, 0] ; fusion_pri=99, pri=100 34280 add r4, r4, r11 ; fusion_pri=100, pri=100 34281 ldr r16, [r2, 12] ; fusion_pri=98, pri=88 34282 sub r5, r5, r16 ; fusion_pri=100, pri=100 34283 34284 Scheduling fusion pass then sorts all ready to issue instructions 34285 according to the priorities. As a result, instructions of same 34286 fusion type will be pushed together in instruction flow, like: 34287 34288 ldr r11, [r1, 0] 34289 ldr r10, [r1, 4] 34290 ldr r15, [r2, 8] 34291 ldr r16, [r2, 12] 34292 add r4, r4, r10 34293 sub r5, r5, r15 34294 add r4, r4, r11 34295 sub r5, r5, r16 34296 34297 Now peephole2 pass can simply merge the two pairs of loads. 34298 34299 Since scheduling fusion pass relies on peephole2 to do real fusion 34300 work, it is only enabled by default when peephole2 is in effect. 34301 34302 This is firstly introduced on ARM/AArch64 targets, please refer to 34303 the hook implementation for how different fusion types are 34304 supported. 34305 34306 34307File: gccint.info, Node: Sections, Next: PIC, Prev: Scheduling, Up: Target Macros 34308 3430917.18 Dividing the Output into Sections (Texts, Data, ...) 34310========================================================== 34311 34312An object file is divided into sections containing different types of 34313data. In the most common case, there are three sections: the "text 34314section", which holds instructions and read-only data; the "data 34315section", which holds initialized writable data; and the "bss section", 34316which holds uninitialized data. Some systems have other kinds of 34317sections. 34318 34319 'varasm.c' provides several well-known sections, such as 34320'text_section', 'data_section' and 'bss_section'. The normal way of 34321controlling a 'FOO_section' variable is to define the associated 34322'FOO_SECTION_ASM_OP' macro, as described below. The macros are only 34323read once, when 'varasm.c' initializes itself, so their values must be 34324run-time constants. They may however depend on command-line flags. 34325 34326 _Note:_ Some run-time files, such 'crtstuff.c', also make use of the 34327'FOO_SECTION_ASM_OP' macros, and expect them to be string literals. 34328 34329 Some assemblers require a different string to be written every time a 34330section is selected. If your assembler falls into this category, you 34331should define the 'TARGET_ASM_INIT_SECTIONS' hook and use 34332'get_unnamed_section' to set up the sections. 34333 34334 You must always create a 'text_section', either by defining 34335'TEXT_SECTION_ASM_OP' or by initializing 'text_section' in 34336'TARGET_ASM_INIT_SECTIONS'. The same is true of 'data_section' and 34337'DATA_SECTION_ASM_OP'. If you do not create a distinct 34338'readonly_data_section', the default is to reuse 'text_section'. 34339 34340 All the other 'varasm.c' sections are optional, and are null if the 34341target does not provide them. 34342 34343 -- Macro: TEXT_SECTION_ASM_OP 34344 A C expression whose value is a string, including spacing, 34345 containing the assembler operation that should precede instructions 34346 and read-only data. Normally '"\t.text"' is right. 34347 34348 -- Macro: HOT_TEXT_SECTION_NAME 34349 If defined, a C string constant for the name of the section 34350 containing most frequently executed functions of the program. If 34351 not defined, GCC will provide a default definition if the target 34352 supports named sections. 34353 34354 -- Macro: UNLIKELY_EXECUTED_TEXT_SECTION_NAME 34355 If defined, a C string constant for the name of the section 34356 containing unlikely executed functions in the program. 34357 34358 -- Macro: DATA_SECTION_ASM_OP 34359 A C expression whose value is a string, including spacing, 34360 containing the assembler operation to identify the following data 34361 as writable initialized data. Normally '"\t.data"' is right. 34362 34363 -- Macro: SDATA_SECTION_ASM_OP 34364 If defined, a C expression whose value is a string, including 34365 spacing, containing the assembler operation to identify the 34366 following data as initialized, writable small data. 34367 34368 -- Macro: READONLY_DATA_SECTION_ASM_OP 34369 A C expression whose value is a string, including spacing, 34370 containing the assembler operation to identify the following data 34371 as read-only initialized data. 34372 34373 -- Macro: BSS_SECTION_ASM_OP 34374 If defined, a C expression whose value is a string, including 34375 spacing, containing the assembler operation to identify the 34376 following data as uninitialized global data. If not defined, and 34377 'ASM_OUTPUT_ALIGNED_BSS' not defined, uninitialized global data 34378 will be output in the data section if '-fno-common' is passed, 34379 otherwise 'ASM_OUTPUT_COMMON' will be used. 34380 34381 -- Macro: SBSS_SECTION_ASM_OP 34382 If defined, a C expression whose value is a string, including 34383 spacing, containing the assembler operation to identify the 34384 following data as uninitialized, writable small data. 34385 34386 -- Macro: TLS_COMMON_ASM_OP 34387 If defined, a C expression whose value is a string containing the 34388 assembler operation to identify the following data as thread-local 34389 common data. The default is '".tls_common"'. 34390 34391 -- Macro: TLS_SECTION_ASM_FLAG 34392 If defined, a C expression whose value is a character constant 34393 containing the flag used to mark a section as a TLS section. The 34394 default is ''T''. 34395 34396 -- Macro: INIT_SECTION_ASM_OP 34397 If defined, a C expression whose value is a string, including 34398 spacing, containing the assembler operation to identify the 34399 following data as initialization code. If not defined, GCC will 34400 assume such a section does not exist. This section has no 34401 corresponding 'init_section' variable; it is used entirely in 34402 runtime code. 34403 34404 -- Macro: FINI_SECTION_ASM_OP 34405 If defined, a C expression whose value is a string, including 34406 spacing, containing the assembler operation to identify the 34407 following data as finalization code. If not defined, GCC will 34408 assume such a section does not exist. This section has no 34409 corresponding 'fini_section' variable; it is used entirely in 34410 runtime code. 34411 34412 -- Macro: INIT_ARRAY_SECTION_ASM_OP 34413 If defined, a C expression whose value is a string, including 34414 spacing, containing the assembler operation to identify the 34415 following data as part of the '.init_array' (or equivalent) 34416 section. If not defined, GCC will assume such a section does not 34417 exist. Do not define both this macro and 'INIT_SECTION_ASM_OP'. 34418 34419 -- Macro: FINI_ARRAY_SECTION_ASM_OP 34420 If defined, a C expression whose value is a string, including 34421 spacing, containing the assembler operation to identify the 34422 following data as part of the '.fini_array' (or equivalent) 34423 section. If not defined, GCC will assume such a section does not 34424 exist. Do not define both this macro and 'FINI_SECTION_ASM_OP'. 34425 34426 -- Macro: CRT_CALL_STATIC_FUNCTION (SECTION_OP, FUNCTION) 34427 If defined, an ASM statement that switches to a different section 34428 via SECTION_OP, calls FUNCTION, and switches back to the text 34429 section. This is used in 'crtstuff.c' if 'INIT_SECTION_ASM_OP' or 34430 'FINI_SECTION_ASM_OP' to calls to initialization and finalization 34431 functions from the init and fini sections. By default, this macro 34432 uses a simple function call. Some ports need hand-crafted assembly 34433 code to avoid dependencies on registers initialized in the function 34434 prologue or to ensure that constant pools don't end up too far way 34435 in the text section. 34436 34437 -- Macro: TARGET_LIBGCC_SDATA_SECTION 34438 If defined, a string which names the section into which small 34439 variables defined in crtstuff and libgcc should go. This is useful 34440 when the target has options for optimizing access to small data, 34441 and you want the crtstuff and libgcc routines to be conservative in 34442 what they expect of your application yet liberal in what your 34443 application expects. For example, for targets with a '.sdata' 34444 section (like MIPS), you could compile crtstuff with '-G 0' so that 34445 it doesn't require small data support from your application, but 34446 use this macro to put small data into '.sdata' so that your 34447 application can access these variables whether it uses small data 34448 or not. 34449 34450 -- Macro: FORCE_CODE_SECTION_ALIGN 34451 If defined, an ASM statement that aligns a code section to some 34452 arbitrary boundary. This is used to force all fragments of the 34453 '.init' and '.fini' sections to have to same alignment and thus 34454 prevent the linker from having to add any padding. 34455 34456 -- Macro: JUMP_TABLES_IN_TEXT_SECTION 34457 Define this macro to be an expression with a nonzero value if jump 34458 tables (for 'tablejump' insns) should be output in the text 34459 section, along with the assembler instructions. Otherwise, the 34460 readonly data section is used. 34461 34462 This macro is irrelevant if there is no separate readonly data 34463 section. 34464 34465 -- Target Hook: void TARGET_ASM_INIT_SECTIONS (void) 34466 Define this hook if you need to do something special to set up the 34467 'varasm.c' sections, or if your target has some special sections of 34468 its own that you need to create. 34469 34470 GCC calls this hook after processing the command line, but before 34471 writing any assembly code, and before calling any of the 34472 section-returning hooks described below. 34473 34474 -- Target Hook: int TARGET_ASM_RELOC_RW_MASK (void) 34475 Return a mask describing how relocations should be treated when 34476 selecting sections. Bit 1 should be set if global relocations 34477 should be placed in a read-write section; bit 0 should be set if 34478 local relocations should be placed in a read-write section. 34479 34480 The default version of this function returns 3 when '-fpic' is in 34481 effect, and 0 otherwise. The hook is typically redefined when the 34482 target cannot support (some kinds of) dynamic relocations in 34483 read-only sections even in executables. 34484 34485 -- Target Hook: section * TARGET_ASM_SELECT_SECTION (tree EXP, int 34486 RELOC, unsigned HOST_WIDE_INT ALIGN) 34487 Return the section into which EXP should be placed. You can assume 34488 that EXP is either a 'VAR_DECL' node or a constant of some sort. 34489 RELOC indicates whether the initial value of EXP requires link-time 34490 relocations. Bit 0 is set when variable contains local relocations 34491 only, while bit 1 is set for global relocations. ALIGN is the 34492 constant alignment in bits. 34493 34494 The default version of this function takes care of putting 34495 read-only variables in 'readonly_data_section'. 34496 34497 See also USE_SELECT_SECTION_FOR_FUNCTIONS. 34498 34499 -- Macro: USE_SELECT_SECTION_FOR_FUNCTIONS 34500 Define this macro if you wish TARGET_ASM_SELECT_SECTION to be 34501 called for 'FUNCTION_DECL's as well as for variables and constants. 34502 34503 In the case of a 'FUNCTION_DECL', RELOC will be zero if the 34504 function has been determined to be likely to be called, and nonzero 34505 if it is unlikely to be called. 34506 34507 -- Target Hook: void TARGET_ASM_UNIQUE_SECTION (tree DECL, int RELOC) 34508 Build up a unique section name, expressed as a 'STRING_CST' node, 34509 and assign it to 'DECL_SECTION_NAME (DECL)'. As with 34510 'TARGET_ASM_SELECT_SECTION', RELOC indicates whether the initial 34511 value of EXP requires link-time relocations. 34512 34513 The default version of this function appends the symbol name to the 34514 ELF section name that would normally be used for the symbol. For 34515 example, the function 'foo' would be placed in '.text.foo'. 34516 Whatever the actual target object format, this is often good 34517 enough. 34518 34519 -- Target Hook: section * TARGET_ASM_FUNCTION_RODATA_SECTION (tree 34520 DECL) 34521 Return the readonly data section associated with 'DECL_SECTION_NAME 34522 (DECL)'. The default version of this function selects 34523 '.gnu.linkonce.r.name' if the function's section is 34524 '.gnu.linkonce.t.name', '.rodata.name' if function is in 34525 '.text.name', and the normal readonly-data section otherwise. 34526 34527 -- Target Hook: const char * TARGET_ASM_MERGEABLE_RODATA_PREFIX 34528 Usually, the compiler uses the prefix '".rodata"' to construct 34529 section names for mergeable constant data. Define this macro to 34530 override the string if a different section name should be used. 34531 34532 -- Target Hook: section * TARGET_ASM_TM_CLONE_TABLE_SECTION (void) 34533 Return the section that should be used for transactional memory 34534 clone tables. 34535 34536 -- Target Hook: section * TARGET_ASM_SELECT_RTX_SECTION (machine_mode 34537 MODE, rtx X, unsigned HOST_WIDE_INT ALIGN) 34538 Return the section into which a constant X, of mode MODE, should be 34539 placed. You can assume that X is some kind of constant in RTL. 34540 The argument MODE is redundant except in the case of a 'const_int' 34541 rtx. ALIGN is the constant alignment in bits. 34542 34543 The default version of this function takes care of putting symbolic 34544 constants in 'flag_pic' mode in 'data_section' and everything else 34545 in 'readonly_data_section'. 34546 34547 -- Target Hook: tree TARGET_MANGLE_DECL_ASSEMBLER_NAME (tree DECL, tree 34548 ID) 34549 Define this hook if you need to postprocess the assembler name 34550 generated by target-independent code. The ID provided to this hook 34551 will be the computed name (e.g., the macro 'DECL_NAME' of the DECL 34552 in C, or the mangled name of the DECL in C++). The return value of 34553 the hook is an 'IDENTIFIER_NODE' for the appropriate mangled name 34554 on your target system. The default implementation of this hook 34555 just returns the ID provided. 34556 34557 -- Target Hook: void TARGET_ENCODE_SECTION_INFO (tree DECL, rtx RTL, 34558 int NEW_DECL_P) 34559 Define this hook if references to a symbol or a constant must be 34560 treated differently depending on something about the variable or 34561 function named by the symbol (such as what section it is in). 34562 34563 The hook is executed immediately after rtl has been created for 34564 DECL, which may be a variable or function declaration or an entry 34565 in the constant pool. In either case, RTL is the rtl in question. 34566 Do _not_ use 'DECL_RTL (DECL)' in this hook; that field may not 34567 have been initialized yet. 34568 34569 In the case of a constant, it is safe to assume that the rtl is a 34570 'mem' whose address is a 'symbol_ref'. Most decls will also have 34571 this form, but that is not guaranteed. Global register variables, 34572 for instance, will have a 'reg' for their rtl. (Normally the right 34573 thing to do with such unusual rtl is leave it alone.) 34574 34575 The NEW_DECL_P argument will be true if this is the first time that 34576 'TARGET_ENCODE_SECTION_INFO' has been invoked on this decl. It 34577 will be false for subsequent invocations, which will happen for 34578 duplicate declarations. Whether or not anything must be done for 34579 the duplicate declaration depends on whether the hook examines 34580 'DECL_ATTRIBUTES'. NEW_DECL_P is always true when the hook is 34581 called for a constant. 34582 34583 The usual thing for this hook to do is to record flags in the 34584 'symbol_ref', using 'SYMBOL_REF_FLAG' or 'SYMBOL_REF_FLAGS'. 34585 Historically, the name string was modified if it was necessary to 34586 encode more than one bit of information, but this practice is now 34587 discouraged; use 'SYMBOL_REF_FLAGS'. 34588 34589 The default definition of this hook, 'default_encode_section_info' 34590 in 'varasm.c', sets a number of commonly-useful bits in 34591 'SYMBOL_REF_FLAGS'. Check whether the default does what you need 34592 before overriding it. 34593 34594 -- Target Hook: const char * TARGET_STRIP_NAME_ENCODING (const char 34595 *NAME) 34596 Decode NAME and return the real name part, sans the characters that 34597 'TARGET_ENCODE_SECTION_INFO' may have added. 34598 34599 -- Target Hook: bool TARGET_IN_SMALL_DATA_P (const_tree EXP) 34600 Returns true if EXP should be placed into a "small data" section. 34601 The default version of this hook always returns false. 34602 34603 -- Target Hook: bool TARGET_HAVE_SRODATA_SECTION 34604 Contains the value true if the target places read-only "small data" 34605 into a separate section. The default value is false. 34606 34607 -- Target Hook: bool TARGET_PROFILE_BEFORE_PROLOGUE (void) 34608 It returns true if target wants profile code emitted before 34609 prologue. 34610 34611 The default version of this hook use the target macro 34612 'PROFILE_BEFORE_PROLOGUE'. 34613 34614 -- Target Hook: bool TARGET_BINDS_LOCAL_P (const_tree EXP) 34615 Returns true if EXP names an object for which name resolution rules 34616 must resolve to the current "module" (dynamic shared library or 34617 executable image). 34618 34619 The default version of this hook implements the name resolution 34620 rules for ELF, which has a looser model of global name binding than 34621 other currently supported object file formats. 34622 34623 -- Target Hook: bool TARGET_HAVE_TLS 34624 Contains the value true if the target supports thread-local 34625 storage. The default value is false. 34626 34627 34628File: gccint.info, Node: PIC, Next: Assembler Format, Prev: Sections, Up: Target Macros 34629 3463017.19 Position Independent Code 34631=============================== 34632 34633This section describes macros that help implement generation of position 34634independent code. Simply defining these macros is not enough to 34635generate valid PIC; you must also add support to the hook 34636'TARGET_LEGITIMATE_ADDRESS_P' and to the macro 'PRINT_OPERAND_ADDRESS', 34637as well as 'LEGITIMIZE_ADDRESS'. You must modify the definition of 34638'movsi' to do something appropriate when the source operand contains a 34639symbolic address. You may also need to alter the handling of switch 34640statements so that they use relative addresses. 34641 34642 -- Macro: PIC_OFFSET_TABLE_REGNUM 34643 The register number of the register used to address a table of 34644 static data addresses in memory. In some cases this register is 34645 defined by a processor's "application binary interface" (ABI). 34646 When this macro is defined, RTL is generated for this register 34647 once, as with the stack pointer and frame pointer registers. If 34648 this macro is not defined, it is up to the machine-dependent files 34649 to allocate such a register (if necessary). Note that this 34650 register must be fixed when in use (e.g. when 'flag_pic' is true). 34651 34652 -- Macro: PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 34653 A C expression that is nonzero if the register defined by 34654 'PIC_OFFSET_TABLE_REGNUM' is clobbered by calls. If not defined, 34655 the default is zero. Do not define this macro if 34656 'PIC_OFFSET_TABLE_REGNUM' is not defined. 34657 34658 -- Macro: LEGITIMATE_PIC_OPERAND_P (X) 34659 A C expression that is nonzero if X is a legitimate immediate 34660 operand on the target machine when generating position independent 34661 code. You can assume that X satisfies 'CONSTANT_P', so you need 34662 not check this. You can also assume FLAG_PIC is true, so you need 34663 not check it either. You need not define this macro if all 34664 constants (including 'SYMBOL_REF') can be immediate operands when 34665 generating position independent code. 34666 34667 34668File: gccint.info, Node: Assembler Format, Next: Debugging Info, Prev: PIC, Up: Target Macros 34669 3467017.20 Defining the Output Assembler Language 34671============================================ 34672 34673This section describes macros whose principal purpose is to describe how 34674to write instructions in assembler language--rather than what the 34675instructions do. 34676 34677* Menu: 34678 34679* File Framework:: Structural information for the assembler file. 34680* Data Output:: Output of constants (numbers, strings, addresses). 34681* Uninitialized Data:: Output of uninitialized variables. 34682* Label Output:: Output and generation of labels. 34683* Initialization:: General principles of initialization 34684 and termination routines. 34685* Macros for Initialization:: 34686 Specific macros that control the handling of 34687 initialization and termination routines. 34688* Instruction Output:: Output of actual instructions. 34689* Dispatch Tables:: Output of jump tables. 34690* Exception Region Output:: Output of exception region code. 34691* Alignment Output:: Pseudo ops for alignment and skipping data. 34692 34693 34694File: gccint.info, Node: File Framework, Next: Data Output, Up: Assembler Format 34695 3469617.20.1 The Overall Framework of an Assembler File 34697-------------------------------------------------- 34698 34699This describes the overall framework of an assembly file. 34700 34701 -- Target Hook: void TARGET_ASM_FILE_START (void) 34702 Output to 'asm_out_file' any text which the assembler expects to 34703 find at the beginning of a file. The default behavior is 34704 controlled by two flags, documented below. Unless your target's 34705 assembler is quite unusual, if you override the default, you should 34706 call 'default_file_start' at some point in your target hook. This 34707 lets other target files rely on these variables. 34708 34709 -- Target Hook: bool TARGET_ASM_FILE_START_APP_OFF 34710 If this flag is true, the text of the macro 'ASM_APP_OFF' will be 34711 printed as the very first line in the assembly file, unless 34712 '-fverbose-asm' is in effect. (If that macro has been defined to 34713 the empty string, this variable has no effect.) With the normal 34714 definition of 'ASM_APP_OFF', the effect is to notify the GNU 34715 assembler that it need not bother stripping comments or extra 34716 whitespace from its input. This allows it to work a bit faster. 34717 34718 The default is false. You should not set it to true unless you 34719 have verified that your port does not generate any extra whitespace 34720 or comments that will cause GAS to issue errors in NO_APP mode. 34721 34722 -- Target Hook: bool TARGET_ASM_FILE_START_FILE_DIRECTIVE 34723 If this flag is true, 'output_file_directive' will be called for 34724 the primary source file, immediately after printing 'ASM_APP_OFF' 34725 (if that is enabled). Most ELF assemblers expect this to be done. 34726 The default is false. 34727 34728 -- Target Hook: void TARGET_ASM_FILE_END (void) 34729 Output to 'asm_out_file' any text which the assembler expects to 34730 find at the end of a file. The default is to output nothing. 34731 34732 -- Function: void file_end_indicate_exec_stack () 34733 Some systems use a common convention, the '.note.GNU-stack' special 34734 section, to indicate whether or not an object file relies on the 34735 stack being executable. If your system uses this convention, you 34736 should define 'TARGET_ASM_FILE_END' to this function. If you need 34737 to do other things in that hook, have your hook function call this 34738 function. 34739 34740 -- Target Hook: void TARGET_ASM_LTO_START (void) 34741 Output to 'asm_out_file' any text which the assembler expects to 34742 find at the start of an LTO section. The default is to output 34743 nothing. 34744 34745 -- Target Hook: void TARGET_ASM_LTO_END (void) 34746 Output to 'asm_out_file' any text which the assembler expects to 34747 find at the end of an LTO section. The default is to output 34748 nothing. 34749 34750 -- Target Hook: void TARGET_ASM_CODE_END (void) 34751 Output to 'asm_out_file' any text which is needed before emitting 34752 unwind info and debug info at the end of a file. Some targets emit 34753 here PIC setup thunks that cannot be emitted at the end of file, 34754 because they couldn't have unwind info then. The default is to 34755 output nothing. 34756 34757 -- Macro: ASM_COMMENT_START 34758 A C string constant describing how to begin a comment in the target 34759 assembler language. The compiler assumes that the comment will end 34760 at the end of the line. 34761 34762 -- Macro: ASM_APP_ON 34763 A C string constant for text to be output before each 'asm' 34764 statement or group of consecutive ones. Normally this is '"#APP"', 34765 which is a comment that has no effect on most assemblers but tells 34766 the GNU assembler that it must check the lines that follow for all 34767 valid assembler constructs. 34768 34769 -- Macro: ASM_APP_OFF 34770 A C string constant for text to be output after each 'asm' 34771 statement or group of consecutive ones. Normally this is 34772 '"#NO_APP"', which tells the GNU assembler to resume making the 34773 time-saving assumptions that are valid for ordinary compiler 34774 output. 34775 34776 -- Macro: ASM_OUTPUT_SOURCE_FILENAME (STREAM, NAME) 34777 A C statement to output COFF information or DWARF debugging 34778 information which indicates that filename NAME is the current 34779 source file to the stdio stream STREAM. 34780 34781 This macro need not be defined if the standard form of output for 34782 the file format in use is appropriate. 34783 34784 -- Target Hook: void TARGET_ASM_OUTPUT_SOURCE_FILENAME (FILE *FILE, 34785 const char *NAME) 34786 Output COFF information or DWARF debugging information which 34787 indicates that filename NAME is the current source file to the 34788 stdio stream FILE. 34789 34790 This target hook need not be defined if the standard form of output 34791 for the file format in use is appropriate. 34792 34793 -- Target Hook: void TARGET_ASM_OUTPUT_IDENT (const char *NAME) 34794 Output a string based on NAME, suitable for the '#ident' directive, 34795 or the equivalent directive or pragma in non-C-family languages. 34796 If this hook is not defined, nothing is output for the '#ident' 34797 directive. 34798 34799 -- Macro: OUTPUT_QUOTED_STRING (STREAM, STRING) 34800 A C statement to output the string STRING to the stdio stream 34801 STREAM. If you do not call the function 'output_quoted_string' in 34802 your config files, GCC will only call it to output filenames to the 34803 assembler source. So you can use it to canonicalize the format of 34804 the filename using this macro. 34805 34806 -- Target Hook: void TARGET_ASM_NAMED_SECTION (const char *NAME, 34807 unsigned int FLAGS, tree DECL) 34808 Output assembly directives to switch to section NAME. The section 34809 should have attributes as specified by FLAGS, which is a bit mask 34810 of the 'SECTION_*' flags defined in 'output.h'. If DECL is 34811 non-NULL, it is the 'VAR_DECL' or 'FUNCTION_DECL' with which this 34812 section is associated. 34813 34814 -- Target Hook: section * TARGET_ASM_FUNCTION_SECTION (tree DECL, enum 34815 node_frequency FREQ, bool STARTUP, bool EXIT) 34816 Return preferred text (sub)section for function DECL. Main purpose 34817 of this function is to separate cold, normal and hot functions. 34818 STARTUP is true when function is known to be used only at startup 34819 (from static constructors or it is 'main()'). EXIT is true when 34820 function is known to be used only at exit (from static 34821 destructors). Return NULL if function should go to default text 34822 section. 34823 34824 -- Target Hook: void TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS (FILE 34825 *FILE, tree DECL, bool NEW_IS_COLD) 34826 Used by the target to emit any assembler directives or additional 34827 labels needed when a function is partitioned between different 34828 sections. Output should be written to FILE. The function decl is 34829 available as DECL and the new section is 'cold' if NEW_IS_COLD is 34830 'true'. 34831 34832 -- Common Target Hook: bool TARGET_HAVE_NAMED_SECTIONS 34833 This flag is true if the target supports 34834 'TARGET_ASM_NAMED_SECTION'. It must not be modified by 34835 command-line option processing. 34836 34837 -- Target Hook: bool TARGET_HAVE_SWITCHABLE_BSS_SECTIONS 34838 This flag is true if we can create zeroed data by switching to a 34839 BSS section and then using 'ASM_OUTPUT_SKIP' to allocate the space. 34840 This is true on most ELF targets. 34841 34842 -- Target Hook: unsigned int TARGET_SECTION_TYPE_FLAGS (tree DECL, 34843 const char *NAME, int RELOC) 34844 Choose a set of section attributes for use by 34845 'TARGET_ASM_NAMED_SECTION' based on a variable or function decl, a 34846 section name, and whether or not the declaration's initializer may 34847 contain runtime relocations. DECL may be null, in which case 34848 read-write data should be assumed. 34849 34850 The default version of this function handles choosing code vs data, 34851 read-only vs read-write data, and 'flag_pic'. You should only need 34852 to override this if your target has special flags that might be set 34853 via '__attribute__'. 34854 34855 -- Target Hook: int TARGET_ASM_RECORD_GCC_SWITCHES (print_switch_type 34856 TYPE, const char *TEXT) 34857 Provides the target with the ability to record the gcc command line 34858 switches that have been passed to the compiler, and options that 34859 are enabled. The TYPE argument specifies what is being recorded. 34860 It can take the following values: 34861 34862 'SWITCH_TYPE_PASSED' 34863 TEXT is a command line switch that has been set by the user. 34864 34865 'SWITCH_TYPE_ENABLED' 34866 TEXT is an option which has been enabled. This might be as a 34867 direct result of a command line switch, or because it is 34868 enabled by default or because it has been enabled as a side 34869 effect of a different command line switch. For example, the 34870 '-O2' switch enables various different individual optimization 34871 passes. 34872 34873 'SWITCH_TYPE_DESCRIPTIVE' 34874 TEXT is either NULL or some descriptive text which should be 34875 ignored. If TEXT is NULL then it is being used to warn the 34876 target hook that either recording is starting or ending. The 34877 first time TYPE is SWITCH_TYPE_DESCRIPTIVE and TEXT is NULL, 34878 the warning is for start up and the second time the warning is 34879 for wind down. This feature is to allow the target hook to 34880 make any necessary preparations before it starts to record 34881 switches and to perform any necessary tidying up after it has 34882 finished recording switches. 34883 34884 'SWITCH_TYPE_LINE_START' 34885 This option can be ignored by this target hook. 34886 34887 'SWITCH_TYPE_LINE_END' 34888 This option can be ignored by this target hook. 34889 34890 The hook's return value must be zero. Other return values may be 34891 supported in the future. 34892 34893 By default this hook is set to NULL, but an example implementation 34894 is provided for ELF based targets. Called ELF_RECORD_GCC_SWITCHES, 34895 it records the switches as ASCII text inside a new, string 34896 mergeable section in the assembler output file. The name of the 34897 new section is provided by the 34898 'TARGET_ASM_RECORD_GCC_SWITCHES_SECTION' target hook. 34899 34900 -- Target Hook: const char * TARGET_ASM_RECORD_GCC_SWITCHES_SECTION 34901 This is the name of the section that will be created by the example 34902 ELF implementation of the 'TARGET_ASM_RECORD_GCC_SWITCHES' target 34903 hook. 34904 34905 34906File: gccint.info, Node: Data Output, Next: Uninitialized Data, Prev: File Framework, Up: Assembler Format 34907 3490817.20.2 Output of Data 34909---------------------- 34910 34911 -- Target Hook: const char * TARGET_ASM_BYTE_OP 34912 -- Target Hook: const char * TARGET_ASM_ALIGNED_HI_OP 34913 -- Target Hook: const char * TARGET_ASM_ALIGNED_SI_OP 34914 -- Target Hook: const char * TARGET_ASM_ALIGNED_DI_OP 34915 -- Target Hook: const char * TARGET_ASM_ALIGNED_TI_OP 34916 -- Target Hook: const char * TARGET_ASM_UNALIGNED_HI_OP 34917 -- Target Hook: const char * TARGET_ASM_UNALIGNED_SI_OP 34918 -- Target Hook: const char * TARGET_ASM_UNALIGNED_DI_OP 34919 -- Target Hook: const char * TARGET_ASM_UNALIGNED_TI_OP 34920 These hooks specify assembly directives for creating certain kinds 34921 of integer object. The 'TARGET_ASM_BYTE_OP' directive creates a 34922 byte-sized object, the 'TARGET_ASM_ALIGNED_HI_OP' one creates an 34923 aligned two-byte object, and so on. Any of the hooks may be 34924 'NULL', indicating that no suitable directive is available. 34925 34926 The compiler will print these strings at the start of a new line, 34927 followed immediately by the object's initial value. In most cases, 34928 the string should contain a tab, a pseudo-op, and then another tab. 34929 34930 -- Target Hook: bool TARGET_ASM_INTEGER (rtx X, unsigned int SIZE, int 34931 ALIGNED_P) 34932 The 'assemble_integer' function uses this hook to output an integer 34933 object. X is the object's value, SIZE is its size in bytes and 34934 ALIGNED_P indicates whether it is aligned. The function should 34935 return 'true' if it was able to output the object. If it returns 34936 false, 'assemble_integer' will try to split the object into smaller 34937 parts. 34938 34939 The default implementation of this hook will use the 34940 'TARGET_ASM_BYTE_OP' family of strings, returning 'false' when the 34941 relevant string is 'NULL'. 34942 34943 -- Target Hook: void TARGET_ASM_DECL_END (void) 34944 Define this hook if the target assembler requires a special marker 34945 to terminate an initialized variable declaration. 34946 34947 -- Target Hook: bool TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA (FILE *FILE, 34948 rtx X) 34949 A target hook to recognize RTX patterns that 'output_addr_const' 34950 can't deal with, and output assembly code to FILE corresponding to 34951 the pattern X. This may be used to allow machine-dependent 34952 'UNSPEC's to appear within constants. 34953 34954 If target hook fails to recognize a pattern, it must return 34955 'false', so that a standard error message is printed. If it prints 34956 an error message itself, by calling, for example, 34957 'output_operand_lossage', it may just return 'true'. 34958 34959 -- Macro: ASM_OUTPUT_ASCII (STREAM, PTR, LEN) 34960 A C statement to output to the stdio stream STREAM an assembler 34961 instruction to assemble a string constant containing the LEN bytes 34962 at PTR. PTR will be a C expression of type 'char *' and LEN a C 34963 expression of type 'int'. 34964 34965 If the assembler has a '.ascii' pseudo-op as found in the Berkeley 34966 Unix assembler, do not define the macro 'ASM_OUTPUT_ASCII'. 34967 34968 -- Macro: ASM_OUTPUT_FDESC (STREAM, DECL, N) 34969 A C statement to output word N of a function descriptor for DECL. 34970 This must be defined if 'TARGET_VTABLE_USES_DESCRIPTORS' is 34971 defined, and is otherwise unused. 34972 34973 -- Macro: CONSTANT_POOL_BEFORE_FUNCTION 34974 You may define this macro as a C expression. You should define the 34975 expression to have a nonzero value if GCC should output the 34976 constant pool for a function before the code for the function, or a 34977 zero value if GCC should output the constant pool after the 34978 function. If you do not define this macro, the usual case, GCC 34979 will output the constant pool before the function. 34980 34981 -- Macro: ASM_OUTPUT_POOL_PROLOGUE (FILE, FUNNAME, FUNDECL, SIZE) 34982 A C statement to output assembler commands to define the start of 34983 the constant pool for a function. FUNNAME is a string giving the 34984 name of the function. Should the return type of the function be 34985 required, it can be obtained via FUNDECL. SIZE is the size, in 34986 bytes, of the constant pool that will be written immediately after 34987 this call. 34988 34989 If no constant-pool prefix is required, the usual case, this macro 34990 need not be defined. 34991 34992 -- Macro: ASM_OUTPUT_SPECIAL_POOL_ENTRY (FILE, X, MODE, ALIGN, LABELNO, 34993 JUMPTO) 34994 A C statement (with or without semicolon) to output a constant in 34995 the constant pool, if it needs special treatment. (This macro need 34996 not do anything for RTL expressions that can be output normally.) 34997 34998 The argument FILE is the standard I/O stream to output the 34999 assembler code on. X is the RTL expression for the constant to 35000 output, and MODE is the machine mode (in case X is a 'const_int'). 35001 ALIGN is the required alignment for the value X; you should output 35002 an assembler directive to force this much alignment. 35003 35004 The argument LABELNO is a number to use in an internal label for 35005 the address of this pool entry. The definition of this macro is 35006 responsible for outputting the label definition at the proper 35007 place. Here is how to do this: 35008 35009 (*targetm.asm_out.internal_label) (FILE, "LC", LABELNO); 35010 35011 When you output a pool entry specially, you should end with a 35012 'goto' to the label JUMPTO. This will prevent the same pool entry 35013 from being output a second time in the usual manner. 35014 35015 You need not define this macro if it would do nothing. 35016 35017 -- Macro: ASM_OUTPUT_POOL_EPILOGUE (FILE FUNNAME FUNDECL SIZE) 35018 A C statement to output assembler commands to at the end of the 35019 constant pool for a function. FUNNAME is a string giving the name 35020 of the function. Should the return type of the function be 35021 required, you can obtain it via FUNDECL. SIZE is the size, in 35022 bytes, of the constant pool that GCC wrote immediately before this 35023 call. 35024 35025 If no constant-pool epilogue is required, the usual case, you need 35026 not define this macro. 35027 35028 -- Macro: IS_ASM_LOGICAL_LINE_SEPARATOR (C, STR) 35029 Define this macro as a C expression which is nonzero if C is used 35030 as a logical line separator by the assembler. STR points to the 35031 position in the string where C was found; this can be used if a 35032 line separator uses multiple characters. 35033 35034 If you do not define this macro, the default is that only the 35035 character ';' is treated as a logical line separator. 35036 35037 -- Target Hook: const char * TARGET_ASM_OPEN_PAREN 35038 -- Target Hook: const char * TARGET_ASM_CLOSE_PAREN 35039 These target hooks are C string constants, describing the syntax in 35040 the assembler for grouping arithmetic expressions. If not 35041 overridden, they default to normal parentheses, which is correct 35042 for most assemblers. 35043 35044 These macros are provided by 'real.h' for writing the definitions of 35045'ASM_OUTPUT_DOUBLE' and the like: 35046 35047 -- Macro: REAL_VALUE_TO_TARGET_SINGLE (X, L) 35048 -- Macro: REAL_VALUE_TO_TARGET_DOUBLE (X, L) 35049 -- Macro: REAL_VALUE_TO_TARGET_LONG_DOUBLE (X, L) 35050 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL32 (X, L) 35051 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL64 (X, L) 35052 -- Macro: REAL_VALUE_TO_TARGET_DECIMAL128 (X, L) 35053 These translate X, of type 'REAL_VALUE_TYPE', to the target's 35054 floating point representation, and store its bit pattern in the 35055 variable L. For 'REAL_VALUE_TO_TARGET_SINGLE' and 35056 'REAL_VALUE_TO_TARGET_DECIMAL32', this variable should be a simple 35057 'long int'. For the others, it should be an array of 'long int'. 35058 The number of elements in this array is determined by the size of 35059 the desired target floating point data type: 32 bits of it go in 35060 each 'long int' array element. Each array element holds 32 bits of 35061 the result, even if 'long int' is wider than 32 bits on the host 35062 machine. 35063 35064 The array element values are designed so that you can print them 35065 out using 'fprintf' in the order they should appear in the target 35066 machine's memory. 35067 35068 35069File: gccint.info, Node: Uninitialized Data, Next: Label Output, Prev: Data Output, Up: Assembler Format 35070 3507117.20.3 Output of Uninitialized Variables 35072----------------------------------------- 35073 35074Each of the macros in this section is used to do the whole job of 35075outputting a single uninitialized variable. 35076 35077 -- Macro: ASM_OUTPUT_COMMON (STREAM, NAME, SIZE, ROUNDED) 35078 A C statement (sans semicolon) to output to the stdio stream STREAM 35079 the assembler definition of a common-label named NAME whose size is 35080 SIZE bytes. The variable ROUNDED is the size rounded up to 35081 whatever alignment the caller wants. It is possible that SIZE may 35082 be zero, for instance if a struct with no other member than a 35083 zero-length array is defined. In this case, the backend must 35084 output a symbol definition that allocates at least one byte, both 35085 so that the address of the resulting object does not compare equal 35086 to any other, and because some object formats cannot even express 35087 the concept of a zero-sized common symbol, as that is how they 35088 represent an ordinary undefined external. 35089 35090 Use the expression 'assemble_name (STREAM, NAME)' to output the 35091 name itself; before and after that, output the additional assembler 35092 syntax for defining the name, and a newline. 35093 35094 This macro controls how the assembler definitions of uninitialized 35095 common global variables are output. 35096 35097 -- Macro: ASM_OUTPUT_ALIGNED_COMMON (STREAM, NAME, SIZE, ALIGNMENT) 35098 Like 'ASM_OUTPUT_COMMON' except takes the required alignment as a 35099 separate, explicit argument. If you define this macro, it is used 35100 in place of 'ASM_OUTPUT_COMMON', and gives you more flexibility in 35101 handling the required alignment of the variable. The alignment is 35102 specified as the number of bits. 35103 35104 -- Macro: ASM_OUTPUT_ALIGNED_DECL_COMMON (STREAM, DECL, NAME, SIZE, 35105 ALIGNMENT) 35106 Like 'ASM_OUTPUT_ALIGNED_COMMON' except that DECL of the variable 35107 to be output, if there is one, or 'NULL_TREE' if there is no 35108 corresponding variable. If you define this macro, GCC will use it 35109 in place of both 'ASM_OUTPUT_COMMON' and 35110 'ASM_OUTPUT_ALIGNED_COMMON'. Define this macro when you need to 35111 see the variable's decl in order to chose what to output. 35112 35113 -- Macro: ASM_OUTPUT_ALIGNED_BSS (STREAM, DECL, NAME, SIZE, ALIGNMENT) 35114 A C statement (sans semicolon) to output to the stdio stream STREAM 35115 the assembler definition of uninitialized global DECL named NAME 35116 whose size is SIZE bytes. The variable ALIGNMENT is the alignment 35117 specified as the number of bits. 35118 35119 Try to use function 'asm_output_aligned_bss' defined in file 35120 'varasm.c' when defining this macro. If unable, use the expression 35121 'assemble_name (STREAM, NAME)' to output the name itself; before 35122 and after that, output the additional assembler syntax for defining 35123 the name, and a newline. 35124 35125 There are two ways of handling global BSS. One is to define this 35126 macro. The other is to have 'TARGET_ASM_SELECT_SECTION' return a 35127 switchable BSS section (*note 35128 TARGET_HAVE_SWITCHABLE_BSS_SECTIONS::). You do not need to do 35129 both. 35130 35131 Some languages do not have 'common' data, and require a non-common 35132 form of global BSS in order to handle uninitialized globals 35133 efficiently. C++ is one example of this. However, if the target 35134 does not support global BSS, the front end may choose to make 35135 globals common in order to save space in the object file. 35136 35137 -- Macro: ASM_OUTPUT_LOCAL (STREAM, NAME, SIZE, ROUNDED) 35138 A C statement (sans semicolon) to output to the stdio stream STREAM 35139 the assembler definition of a local-common-label named NAME whose 35140 size is SIZE bytes. The variable ROUNDED is the size rounded up to 35141 whatever alignment the caller wants. 35142 35143 Use the expression 'assemble_name (STREAM, NAME)' to output the 35144 name itself; before and after that, output the additional assembler 35145 syntax for defining the name, and a newline. 35146 35147 This macro controls how the assembler definitions of uninitialized 35148 static variables are output. 35149 35150 -- Macro: ASM_OUTPUT_ALIGNED_LOCAL (STREAM, NAME, SIZE, ALIGNMENT) 35151 Like 'ASM_OUTPUT_LOCAL' except takes the required alignment as a 35152 separate, explicit argument. If you define this macro, it is used 35153 in place of 'ASM_OUTPUT_LOCAL', and gives you more flexibility in 35154 handling the required alignment of the variable. The alignment is 35155 specified as the number of bits. 35156 35157 -- Macro: ASM_OUTPUT_ALIGNED_DECL_LOCAL (STREAM, DECL, NAME, SIZE, 35158 ALIGNMENT) 35159 Like 'ASM_OUTPUT_ALIGNED_DECL' except that DECL of the variable to 35160 be output, if there is one, or 'NULL_TREE' if there is no 35161 corresponding variable. If you define this macro, GCC will use it 35162 in place of both 'ASM_OUTPUT_DECL' and 'ASM_OUTPUT_ALIGNED_DECL'. 35163 Define this macro when you need to see the variable's decl in order 35164 to chose what to output. 35165 35166 35167File: gccint.info, Node: Label Output, Next: Initialization, Prev: Uninitialized Data, Up: Assembler Format 35168 3516917.20.4 Output and Generation of Labels 35170--------------------------------------- 35171 35172This is about outputting labels. 35173 35174 -- Macro: ASM_OUTPUT_LABEL (STREAM, NAME) 35175 A C statement (sans semicolon) to output to the stdio stream STREAM 35176 the assembler definition of a label named NAME. Use the expression 35177 'assemble_name (STREAM, NAME)' to output the name itself; before 35178 and after that, output the additional assembler syntax for defining 35179 the name, and a newline. A default definition of this macro is 35180 provided which is correct for most systems. 35181 35182 -- Macro: ASM_OUTPUT_FUNCTION_LABEL (STREAM, NAME, DECL) 35183 A C statement (sans semicolon) to output to the stdio stream STREAM 35184 the assembler definition of a label named NAME of a function. Use 35185 the expression 'assemble_name (STREAM, NAME)' to output the name 35186 itself; before and after that, output the additional assembler 35187 syntax for defining the name, and a newline. A default definition 35188 of this macro is provided which is correct for most systems. 35189 35190 If this macro is not defined, then the function name is defined in 35191 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 35192 35193 -- Macro: ASM_OUTPUT_INTERNAL_LABEL (STREAM, NAME) 35194 Identical to 'ASM_OUTPUT_LABEL', except that NAME is known to refer 35195 to a compiler-generated label. The default definition uses 35196 'assemble_name_raw', which is like 'assemble_name' except that it 35197 is more efficient. 35198 35199 -- Macro: SIZE_ASM_OP 35200 A C string containing the appropriate assembler directive to 35201 specify the size of a symbol, without any arguments. On systems 35202 that use ELF, the default (in 'config/elfos.h') is '"\t.size\t"'; 35203 on other systems, the default is not to define this macro. 35204 35205 Define this macro only if it is correct to use the default 35206 definitions of 'ASM_OUTPUT_SIZE_DIRECTIVE' and 35207 'ASM_OUTPUT_MEASURED_SIZE' for your system. If you need your own 35208 custom definitions of those macros, or if you do not need explicit 35209 symbol sizes at all, do not define this macro. 35210 35211 -- Macro: ASM_OUTPUT_SIZE_DIRECTIVE (STREAM, NAME, SIZE) 35212 A C statement (sans semicolon) to output to the stdio stream STREAM 35213 a directive telling the assembler that the size of the symbol NAME 35214 is SIZE. SIZE is a 'HOST_WIDE_INT'. If you define 'SIZE_ASM_OP', 35215 a default definition of this macro is provided. 35216 35217 -- Macro: ASM_OUTPUT_MEASURED_SIZE (STREAM, NAME) 35218 A C statement (sans semicolon) to output to the stdio stream STREAM 35219 a directive telling the assembler to calculate the size of the 35220 symbol NAME by subtracting its address from the current address. 35221 35222 If you define 'SIZE_ASM_OP', a default definition of this macro is 35223 provided. The default assumes that the assembler recognizes a 35224 special '.' symbol as referring to the current address, and can 35225 calculate the difference between this and another symbol. If your 35226 assembler does not recognize '.' or cannot do calculations with it, 35227 you will need to redefine 'ASM_OUTPUT_MEASURED_SIZE' to use some 35228 other technique. 35229 35230 -- Macro: NO_DOLLAR_IN_LABEL 35231 Define this macro if the assembler does not accept the character 35232 '$' in label names. By default constructors and destructors in G++ 35233 have '$' in the identifiers. If this macro is defined, '.' is used 35234 instead. 35235 35236 -- Macro: NO_DOT_IN_LABEL 35237 Define this macro if the assembler does not accept the character 35238 '.' in label names. By default constructors and destructors in G++ 35239 have names that use '.'. If this macro is defined, these names are 35240 rewritten to avoid '.'. 35241 35242 -- Macro: TYPE_ASM_OP 35243 A C string containing the appropriate assembler directive to 35244 specify the type of a symbol, without any arguments. On systems 35245 that use ELF, the default (in 'config/elfos.h') is '"\t.type\t"'; 35246 on other systems, the default is not to define this macro. 35247 35248 Define this macro only if it is correct to use the default 35249 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 35250 need your own custom definition of this macro, or if you do not 35251 need explicit symbol types at all, do not define this macro. 35252 35253 -- Macro: TYPE_OPERAND_FMT 35254 A C string which specifies (using 'printf' syntax) the format of 35255 the second operand to 'TYPE_ASM_OP'. On systems that use ELF, the 35256 default (in 'config/elfos.h') is '"@%s"'; on other systems, the 35257 default is not to define this macro. 35258 35259 Define this macro only if it is correct to use the default 35260 definition of 'ASM_OUTPUT_TYPE_DIRECTIVE' for your system. If you 35261 need your own custom definition of this macro, or if you do not 35262 need explicit symbol types at all, do not define this macro. 35263 35264 -- Macro: ASM_OUTPUT_TYPE_DIRECTIVE (STREAM, TYPE) 35265 A C statement (sans semicolon) to output to the stdio stream STREAM 35266 a directive telling the assembler that the type of the symbol NAME 35267 is TYPE. TYPE is a C string; currently, that string is always 35268 either '"function"' or '"object"', but you should not count on 35269 this. 35270 35271 If you define 'TYPE_ASM_OP' and 'TYPE_OPERAND_FMT', a default 35272 definition of this macro is provided. 35273 35274 -- Macro: ASM_DECLARE_FUNCTION_NAME (STREAM, NAME, DECL) 35275 A C statement (sans semicolon) to output to the stdio stream STREAM 35276 any text necessary for declaring the name NAME of a function which 35277 is being defined. This macro is responsible for outputting the 35278 label definition (perhaps using 'ASM_OUTPUT_FUNCTION_LABEL'). The 35279 argument DECL is the 'FUNCTION_DECL' tree node representing the 35280 function. 35281 35282 If this macro is not defined, then the function name is defined in 35283 the usual manner as a label (by means of 35284 'ASM_OUTPUT_FUNCTION_LABEL'). 35285 35286 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 35287 of this macro. 35288 35289 -- Macro: ASM_DECLARE_FUNCTION_SIZE (STREAM, NAME, DECL) 35290 A C statement (sans semicolon) to output to the stdio stream STREAM 35291 any text necessary for declaring the size of a function which is 35292 being defined. The argument NAME is the name of the function. The 35293 argument DECL is the 'FUNCTION_DECL' tree node representing the 35294 function. 35295 35296 If this macro is not defined, then the function size is not 35297 defined. 35298 35299 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 35300 this macro. 35301 35302 -- Macro: ASM_DECLARE_COLD_FUNCTION_NAME (STREAM, NAME, DECL) 35303 A C statement (sans semicolon) to output to the stdio stream STREAM 35304 any text necessary for declaring the name NAME of a cold function 35305 partition which is being defined. This macro is responsible for 35306 outputting the label definition (perhaps using 35307 'ASM_OUTPUT_FUNCTION_LABEL'). The argument DECL is the 35308 'FUNCTION_DECL' tree node representing the function. 35309 35310 If this macro is not defined, then the cold partition name is 35311 defined in the usual manner as a label (by means of 35312 'ASM_OUTPUT_LABEL'). 35313 35314 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in the definition 35315 of this macro. 35316 35317 -- Macro: ASM_DECLARE_COLD_FUNCTION_SIZE (STREAM, NAME, DECL) 35318 A C statement (sans semicolon) to output to the stdio stream STREAM 35319 any text necessary for declaring the size of a cold function 35320 partition which is being defined. The argument NAME is the name of 35321 the cold partition of the function. The argument DECL is the 35322 'FUNCTION_DECL' tree node representing the function. 35323 35324 If this macro is not defined, then the partition size is not 35325 defined. 35326 35327 You may wish to use 'ASM_OUTPUT_MEASURED_SIZE' in the definition of 35328 this macro. 35329 35330 -- Macro: ASM_DECLARE_OBJECT_NAME (STREAM, NAME, DECL) 35331 A C statement (sans semicolon) to output to the stdio stream STREAM 35332 any text necessary for declaring the name NAME of an initialized 35333 variable which is being defined. This macro must output the label 35334 definition (perhaps using 'ASM_OUTPUT_LABEL'). The argument DECL 35335 is the 'VAR_DECL' tree node representing the variable. 35336 35337 If this macro is not defined, then the variable name is defined in 35338 the usual manner as a label (by means of 'ASM_OUTPUT_LABEL'). 35339 35340 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' and/or 35341 'ASM_OUTPUT_SIZE_DIRECTIVE' in the definition of this macro. 35342 35343 -- Target Hook: void TARGET_ASM_DECLARE_CONSTANT_NAME (FILE *FILE, 35344 const char *NAME, const_tree EXPR, HOST_WIDE_INT SIZE) 35345 A target hook to output to the stdio stream FILE any text necessary 35346 for declaring the name NAME of a constant which is being defined. 35347 This target hook is responsible for outputting the label definition 35348 (perhaps using 'assemble_label'). The argument EXP is the value of 35349 the constant, and SIZE is the size of the constant in bytes. The 35350 NAME will be an internal label. 35351 35352 The default version of this target hook, define the NAME in the 35353 usual manner as a label (by means of 'assemble_label'). 35354 35355 You may wish to use 'ASM_OUTPUT_TYPE_DIRECTIVE' in this target 35356 hook. 35357 35358 -- Macro: ASM_DECLARE_REGISTER_GLOBAL (STREAM, DECL, REGNO, NAME) 35359 A C statement (sans semicolon) to output to the stdio stream STREAM 35360 any text necessary for claiming a register REGNO for a global 35361 variable DECL with name NAME. 35362 35363 If you don't define this macro, that is equivalent to defining it 35364 to do nothing. 35365 35366 -- Macro: ASM_FINISH_DECLARE_OBJECT (STREAM, DECL, TOPLEVEL, ATEND) 35367 A C statement (sans semicolon) to finish up declaring a variable 35368 name once the compiler has processed its initializer fully and thus 35369 has had a chance to determine the size of an array when controlled 35370 by an initializer. This is used on systems where it's necessary to 35371 declare something about the size of the object. 35372 35373 If you don't define this macro, that is equivalent to defining it 35374 to do nothing. 35375 35376 You may wish to use 'ASM_OUTPUT_SIZE_DIRECTIVE' and/or 35377 'ASM_OUTPUT_MEASURED_SIZE' in the definition of this macro. 35378 35379 -- Target Hook: void TARGET_ASM_GLOBALIZE_LABEL (FILE *STREAM, const 35380 char *NAME) 35381 This target hook is a function to output to the stdio stream STREAM 35382 some commands that will make the label NAME global; that is, 35383 available for reference from other files. 35384 35385 The default implementation relies on a proper definition of 35386 'GLOBAL_ASM_OP'. 35387 35388 -- Target Hook: void TARGET_ASM_GLOBALIZE_DECL_NAME (FILE *STREAM, tree 35389 DECL) 35390 This target hook is a function to output to the stdio stream STREAM 35391 some commands that will make the name associated with DECL global; 35392 that is, available for reference from other files. 35393 35394 The default implementation uses the TARGET_ASM_GLOBALIZE_LABEL 35395 target hook. 35396 35397 -- Target Hook: void TARGET_ASM_ASSEMBLE_UNDEFINED_DECL (FILE *STREAM, 35398 const char *NAME, const_tree DECL) 35399 This target hook is a function to output to the stdio stream STREAM 35400 some commands that will declare the name associated with DECL which 35401 is not defined in the current translation unit. Most assemblers do 35402 not require anything to be output in this case. 35403 35404 -- Macro: ASM_WEAKEN_LABEL (STREAM, NAME) 35405 A C statement (sans semicolon) to output to the stdio stream STREAM 35406 some commands that will make the label NAME weak; that is, 35407 available for reference from other files but only used if no other 35408 definition is available. Use the expression 'assemble_name 35409 (STREAM, NAME)' to output the name itself; before and after that, 35410 output the additional assembler syntax for making that name weak, 35411 and a newline. 35412 35413 If you don't define this macro or 'ASM_WEAKEN_DECL', GCC will not 35414 support weak symbols and you should not define the 'SUPPORTS_WEAK' 35415 macro. 35416 35417 -- Macro: ASM_WEAKEN_DECL (STREAM, DECL, NAME, VALUE) 35418 Combines (and replaces) the function of 'ASM_WEAKEN_LABEL' and 35419 'ASM_OUTPUT_WEAK_ALIAS', allowing access to the associated function 35420 or variable decl. If VALUE is not 'NULL', this C statement should 35421 output to the stdio stream STREAM assembler code which defines 35422 (equates) the weak symbol NAME to have the value VALUE. If VALUE 35423 is 'NULL', it should output commands to make NAME weak. 35424 35425 -- Macro: ASM_OUTPUT_WEAKREF (STREAM, DECL, NAME, VALUE) 35426 Outputs a directive that enables NAME to be used to refer to symbol 35427 VALUE with weak-symbol semantics. 'decl' is the declaration of 35428 'name'. 35429 35430 -- Macro: SUPPORTS_WEAK 35431 A preprocessor constant expression which evaluates to true if the 35432 target supports weak symbols. 35433 35434 If you don't define this macro, 'defaults.h' provides a default 35435 definition. If either 'ASM_WEAKEN_LABEL' or 'ASM_WEAKEN_DECL' is 35436 defined, the default definition is '1'; otherwise, it is '0'. 35437 35438 -- Macro: TARGET_SUPPORTS_WEAK 35439 A C expression which evaluates to true if the target supports weak 35440 symbols. 35441 35442 If you don't define this macro, 'defaults.h' provides a default 35443 definition. The default definition is '(SUPPORTS_WEAK)'. Define 35444 this macro if you want to control weak symbol support with a 35445 compiler flag such as '-melf'. 35446 35447 -- Macro: MAKE_DECL_ONE_ONLY (DECL) 35448 A C statement (sans semicolon) to mark DECL to be emitted as a 35449 public symbol such that extra copies in multiple translation units 35450 will be discarded by the linker. Define this macro if your object 35451 file format provides support for this concept, such as the 'COMDAT' 35452 section flags in the Microsoft Windows PE/COFF format, and this 35453 support requires changes to DECL, such as putting it in a separate 35454 section. 35455 35456 -- Macro: SUPPORTS_ONE_ONLY 35457 A C expression which evaluates to true if the target supports 35458 one-only semantics. 35459 35460 If you don't define this macro, 'varasm.c' provides a default 35461 definition. If 'MAKE_DECL_ONE_ONLY' is defined, the default 35462 definition is '1'; otherwise, it is '0'. Define this macro if you 35463 want to control one-only symbol support with a compiler flag, or if 35464 setting the 'DECL_ONE_ONLY' flag is enough to mark a declaration to 35465 be emitted as one-only. 35466 35467 -- Target Hook: void TARGET_ASM_ASSEMBLE_VISIBILITY (tree DECL, int 35468 VISIBILITY) 35469 This target hook is a function to output to ASM_OUT_FILE some 35470 commands that will make the symbol(s) associated with DECL have 35471 hidden, protected or internal visibility as specified by 35472 VISIBILITY. 35473 35474 -- Macro: TARGET_WEAK_NOT_IN_ARCHIVE_TOC 35475 A C expression that evaluates to true if the target's linker 35476 expects that weak symbols do not appear in a static archive's table 35477 of contents. The default is '0'. 35478 35479 Leaving weak symbols out of an archive's table of contents means 35480 that, if a symbol will only have a definition in one translation 35481 unit and will have undefined references from other translation 35482 units, that symbol should not be weak. Defining this macro to be 35483 nonzero will thus have the effect that certain symbols that would 35484 normally be weak (explicit template instantiations, and vtables for 35485 polymorphic classes with noninline key methods) will instead be 35486 nonweak. 35487 35488 The C++ ABI requires this macro to be zero. Define this macro for 35489 targets where full C++ ABI compliance is impossible and where 35490 linker restrictions require weak symbols to be left out of a static 35491 archive's table of contents. 35492 35493 -- Macro: ASM_OUTPUT_EXTERNAL (STREAM, DECL, NAME) 35494 A C statement (sans semicolon) to output to the stdio stream STREAM 35495 any text necessary for declaring the name of an external symbol 35496 named NAME which is referenced in this compilation but not defined. 35497 The value of DECL is the tree node for the declaration. 35498 35499 This macro need not be defined if it does not need to output 35500 anything. The GNU assembler and most Unix assemblers don't require 35501 anything. 35502 35503 -- Target Hook: void TARGET_ASM_EXTERNAL_LIBCALL (rtx SYMREF) 35504 This target hook is a function to output to ASM_OUT_FILE an 35505 assembler pseudo-op to declare a library function name external. 35506 The name of the library function is given by SYMREF, which is a 35507 'symbol_ref'. 35508 35509 -- Target Hook: void TARGET_ASM_MARK_DECL_PRESERVED (const char 35510 *SYMBOL) 35511 This target hook is a function to output to ASM_OUT_FILE an 35512 assembler directive to annotate SYMBOL as used. The Darwin target 35513 uses the .no_dead_code_strip directive. 35514 35515 -- Macro: ASM_OUTPUT_LABELREF (STREAM, NAME) 35516 A C statement (sans semicolon) to output to the stdio stream STREAM 35517 a reference in assembler syntax to a label named NAME. This should 35518 add '_' to the front of the name, if that is customary on your 35519 operating system, as it is in most Berkeley Unix systems. This 35520 macro is used in 'assemble_name'. 35521 35522 -- Target Hook: tree TARGET_MANGLE_ASSEMBLER_NAME (const char *NAME) 35523 Given a symbol NAME, perform same mangling as 'varasm.c''s 35524 'assemble_name', but in memory rather than to a file stream, 35525 returning result as an 'IDENTIFIER_NODE'. Required for correct LTO 35526 symtabs. The default implementation calls the 35527 'TARGET_STRIP_NAME_ENCODING' hook and then prepends the 35528 'USER_LABEL_PREFIX', if any. 35529 35530 -- Macro: ASM_OUTPUT_SYMBOL_REF (STREAM, SYM) 35531 A C statement (sans semicolon) to output a reference to 35532 'SYMBOL_REF' SYM. If not defined, 'assemble_name' will be used to 35533 output the name of the symbol. This macro may be used to modify 35534 the way a symbol is referenced depending on information encoded by 35535 'TARGET_ENCODE_SECTION_INFO'. 35536 35537 -- Macro: ASM_OUTPUT_LABEL_REF (STREAM, BUF) 35538 A C statement (sans semicolon) to output a reference to BUF, the 35539 result of 'ASM_GENERATE_INTERNAL_LABEL'. If not defined, 35540 'assemble_name' will be used to output the name of the symbol. 35541 This macro is not used by 'output_asm_label', or the '%l' specifier 35542 that calls it; the intention is that this macro should be set when 35543 it is necessary to output a label differently when its address is 35544 being taken. 35545 35546 -- Target Hook: void TARGET_ASM_INTERNAL_LABEL (FILE *STREAM, const 35547 char *PREFIX, unsigned long LABELNO) 35548 A function to output to the stdio stream STREAM a label whose name 35549 is made from the string PREFIX and the number LABELNO. 35550 35551 It is absolutely essential that these labels be distinct from the 35552 labels used for user-level functions and variables. Otherwise, 35553 certain programs will have name conflicts with internal labels. 35554 35555 It is desirable to exclude internal labels from the symbol table of 35556 the object file. Most assemblers have a naming convention for 35557 labels that should be excluded; on many systems, the letter 'L' at 35558 the beginning of a label has this effect. You should find out what 35559 convention your system uses, and follow it. 35560 35561 The default version of this function utilizes 35562 'ASM_GENERATE_INTERNAL_LABEL'. 35563 35564 -- Macro: ASM_OUTPUT_DEBUG_LABEL (STREAM, PREFIX, NUM) 35565 A C statement to output to the stdio stream STREAM a debug info 35566 label whose name is made from the string PREFIX and the number NUM. 35567 This is useful for VLIW targets, where debug info labels may need 35568 to be treated differently than branch target labels. On some 35569 systems, branch target labels must be at the beginning of 35570 instruction bundles, but debug info labels can occur in the middle 35571 of instruction bundles. 35572 35573 If this macro is not defined, then 35574 '(*targetm.asm_out.internal_label)' will be used. 35575 35576 -- Macro: ASM_GENERATE_INTERNAL_LABEL (STRING, PREFIX, NUM) 35577 A C statement to store into the string STRING a label whose name is 35578 made from the string PREFIX and the number NUM. 35579 35580 This string, when output subsequently by 'assemble_name', should 35581 produce the output that '(*targetm.asm_out.internal_label)' would 35582 produce with the same PREFIX and NUM. 35583 35584 If the string begins with '*', then 'assemble_name' will output the 35585 rest of the string unchanged. It is often convenient for 35586 'ASM_GENERATE_INTERNAL_LABEL' to use '*' in this way. If the 35587 string doesn't start with '*', then 'ASM_OUTPUT_LABELREF' gets to 35588 output the string, and may change it. (Of course, 35589 'ASM_OUTPUT_LABELREF' is also part of your machine description, so 35590 you should know what it does on your machine.) 35591 35592 -- Macro: ASM_FORMAT_PRIVATE_NAME (OUTVAR, NAME, NUMBER) 35593 A C expression to assign to OUTVAR (which is a variable of type 35594 'char *') a newly allocated string made from the string NAME and 35595 the number NUMBER, with some suitable punctuation added. Use 35596 'alloca' to get space for the string. 35597 35598 The string will be used as an argument to 'ASM_OUTPUT_LABELREF' to 35599 produce an assembler label for an internal static variable whose 35600 name is NAME. Therefore, the string must be such as to result in 35601 valid assembler code. The argument NUMBER is different each time 35602 this macro is executed; it prevents conflicts between 35603 similarly-named internal static variables in different scopes. 35604 35605 Ideally this string should not be a valid C identifier, to prevent 35606 any conflict with the user's own symbols. Most assemblers allow 35607 periods or percent signs in assembler symbols; putting at least one 35608 of these between the name and the number will suffice. 35609 35610 If this macro is not defined, a default definition will be provided 35611 which is correct for most systems. 35612 35613 -- Macro: ASM_OUTPUT_DEF (STREAM, NAME, VALUE) 35614 A C statement to output to the stdio stream STREAM assembler code 35615 which defines (equates) the symbol NAME to have the value VALUE. 35616 35617 If 'SET_ASM_OP' is defined, a default definition is provided which 35618 is correct for most systems. 35619 35620 -- Macro: ASM_OUTPUT_DEF_FROM_DECLS (STREAM, DECL_OF_NAME, 35621 DECL_OF_VALUE) 35622 A C statement to output to the stdio stream STREAM assembler code 35623 which defines (equates) the symbol whose tree node is DECL_OF_NAME 35624 to have the value of the tree node DECL_OF_VALUE. This macro will 35625 be used in preference to 'ASM_OUTPUT_DEF' if it is defined and if 35626 the tree nodes are available. 35627 35628 If 'SET_ASM_OP' is defined, a default definition is provided which 35629 is correct for most systems. 35630 35631 -- Macro: TARGET_DEFERRED_OUTPUT_DEFS (DECL_OF_NAME, DECL_OF_VALUE) 35632 A C statement that evaluates to true if the assembler code which 35633 defines (equates) the symbol whose tree node is DECL_OF_NAME to 35634 have the value of the tree node DECL_OF_VALUE should be emitted 35635 near the end of the current compilation unit. The default is to 35636 not defer output of defines. This macro affects defines output by 35637 'ASM_OUTPUT_DEF' and 'ASM_OUTPUT_DEF_FROM_DECLS'. 35638 35639 -- Macro: ASM_OUTPUT_WEAK_ALIAS (STREAM, NAME, VALUE) 35640 A C statement to output to the stdio stream STREAM assembler code 35641 which defines (equates) the weak symbol NAME to have the value 35642 VALUE. If VALUE is 'NULL', it defines NAME as an undefined weak 35643 symbol. 35644 35645 Define this macro if the target only supports weak aliases; define 35646 'ASM_OUTPUT_DEF' instead if possible. 35647 35648 -- Macro: OBJC_GEN_METHOD_LABEL (BUF, IS_INST, CLASS_NAME, CAT_NAME, 35649 SEL_NAME) 35650 Define this macro to override the default assembler names used for 35651 Objective-C methods. 35652 35653 The default name is a unique method number followed by the name of 35654 the class (e.g. '_1_Foo'). For methods in categories, the name of 35655 the category is also included in the assembler name (e.g. 35656 '_1_Foo_Bar'). 35657 35658 These names are safe on most systems, but make debugging difficult 35659 since the method's selector is not present in the name. Therefore, 35660 particular systems define other ways of computing names. 35661 35662 BUF is an expression of type 'char *' which gives you a buffer in 35663 which to store the name; its length is as long as CLASS_NAME, 35664 CAT_NAME and SEL_NAME put together, plus 50 characters extra. 35665 35666 The argument IS_INST specifies whether the method is an instance 35667 method or a class method; CLASS_NAME is the name of the class; 35668 CAT_NAME is the name of the category (or 'NULL' if the method is 35669 not in a category); and SEL_NAME is the name of the selector. 35670 35671 On systems where the assembler can handle quoted names, you can use 35672 this macro to provide more human-readable names. 35673 35674 35675File: gccint.info, Node: Initialization, Next: Macros for Initialization, Prev: Label Output, Up: Assembler Format 35676 3567717.20.5 How Initialization Functions Are Handled 35678------------------------------------------------ 35679 35680The compiled code for certain languages includes "constructors" (also 35681called "initialization routines")--functions to initialize data in the 35682program when the program is started. These functions need to be called 35683before the program is "started"--that is to say, before 'main' is 35684called. 35685 35686 Compiling some languages generates "destructors" (also called 35687"termination routines") that should be called when the program 35688terminates. 35689 35690 To make the initialization and termination functions work, the compiler 35691must output something in the assembler code to cause those functions to 35692be called at the appropriate time. When you port the compiler to a new 35693system, you need to specify how to do this. 35694 35695 There are two major ways that GCC currently supports the execution of 35696initialization and termination functions. Each way has two variants. 35697Much of the structure is common to all four variations. 35698 35699 The linker must build two lists of these functions--a list of 35700initialization functions, called '__CTOR_LIST__', and a list of 35701termination functions, called '__DTOR_LIST__'. 35702 35703 Each list always begins with an ignored function pointer (which may 35704hold 0, -1, or a count of the function pointers after it, depending on 35705the environment). This is followed by a series of zero or more function 35706pointers to constructors (or destructors), followed by a function 35707pointer containing zero. 35708 35709 Depending on the operating system and its executable file format, 35710either 'crtstuff.c' or 'libgcc2.c' traverses these lists at startup time 35711and exit time. Constructors are called in reverse order of the list; 35712destructors in forward order. 35713 35714 The best way to handle static constructors works only for object file 35715formats which provide arbitrarily-named sections. A section is set 35716aside for a list of constructors, and another for a list of destructors. 35717Traditionally these are called '.ctors' and '.dtors'. Each object file 35718that defines an initialization function also puts a word in the 35719constructor section to point to that function. The linker accumulates 35720all these words into one contiguous '.ctors' section. Termination 35721functions are handled similarly. 35722 35723 This method will be chosen as the default by 'target-def.h' if 35724'TARGET_ASM_NAMED_SECTION' is defined. A target that does not support 35725arbitrary sections, but does support special designated constructor and 35726destructor sections may define 'CTORS_SECTION_ASM_OP' and 35727'DTORS_SECTION_ASM_OP' to achieve the same effect. 35728 35729 When arbitrary sections are available, there are two variants, 35730depending upon how the code in 'crtstuff.c' is called. On systems that 35731support a ".init" section which is executed at program startup, parts of 35732'crtstuff.c' are compiled into that section. The program is linked by 35733the 'gcc' driver like this: 35734 35735 ld -o OUTPUT_FILE crti.o crtbegin.o ... -lgcc crtend.o crtn.o 35736 35737 The prologue of a function ('__init') appears in the '.init' section of 35738'crti.o'; the epilogue appears in 'crtn.o'. Likewise for the function 35739'__fini' in the ".fini" section. Normally these files are provided by 35740the operating system or by the GNU C library, but are provided by GCC 35741for a few targets. 35742 35743 The objects 'crtbegin.o' and 'crtend.o' are (for most targets) compiled 35744from 'crtstuff.c'. They contain, among other things, code fragments 35745within the '.init' and '.fini' sections that branch to routines in the 35746'.text' section. The linker will pull all parts of a section together, 35747which results in a complete '__init' function that invokes the routines 35748we need at startup. 35749 35750 To use this variant, you must define the 'INIT_SECTION_ASM_OP' macro 35751properly. 35752 35753 If no init section is available, when GCC compiles any function called 35754'main' (or more accurately, any function designated as a program entry 35755point by the language front end calling 'expand_main_function'), it 35756inserts a procedure call to '__main' as the first executable code after 35757the function prologue. The '__main' function is defined in 'libgcc2.c' 35758and runs the global constructors. 35759 35760 In file formats that don't support arbitrary sections, there are again 35761two variants. In the simplest variant, the GNU linker (GNU 'ld') and an 35762'a.out' format must be used. In this case, 'TARGET_ASM_CONSTRUCTOR' is 35763defined to produce a '.stabs' entry of type 'N_SETT', referencing the 35764name '__CTOR_LIST__', and with the address of the void function 35765containing the initialization code as its value. The GNU linker 35766recognizes this as a request to add the value to a "set"; the values are 35767accumulated, and are eventually placed in the executable as a vector in 35768the format described above, with a leading (ignored) count and a 35769trailing zero element. 'TARGET_ASM_DESTRUCTOR' is handled similarly. 35770Since no init section is available, the absence of 'INIT_SECTION_ASM_OP' 35771causes the compilation of 'main' to call '__main' as above, starting the 35772initialization process. 35773 35774 The last variant uses neither arbitrary sections nor the GNU linker. 35775This is preferable when you want to do dynamic linking and when using 35776file formats which the GNU linker does not support, such as 'ECOFF'. In 35777this case, 'TARGET_HAVE_CTORS_DTORS' is false, initialization and 35778termination functions are recognized simply by their names. This 35779requires an extra program in the linkage step, called 'collect2'. This 35780program pretends to be the linker, for use with GCC; it does its job by 35781running the ordinary linker, but also arranges to include the vectors of 35782initialization and termination functions. These functions are called 35783via '__main' as described above. In order to use this method, 35784'use_collect2' must be defined in the target in 'config.gcc'. 35785 35786 The following section describes the specific macros that control and 35787customize the handling of initialization and termination functions. 35788 35789 35790File: gccint.info, Node: Macros for Initialization, Next: Instruction Output, Prev: Initialization, Up: Assembler Format 35791 3579217.20.6 Macros Controlling Initialization Routines 35793-------------------------------------------------- 35794 35795Here are the macros that control how the compiler handles initialization 35796and termination functions: 35797 35798 -- Macro: INIT_SECTION_ASM_OP 35799 If defined, a C string constant, including spacing, for the 35800 assembler operation to identify the following data as 35801 initialization code. If not defined, GCC will assume such a 35802 section does not exist. When you are using special sections for 35803 initialization and termination functions, this macro also controls 35804 how 'crtstuff.c' and 'libgcc2.c' arrange to run the initialization 35805 functions. 35806 35807 -- Macro: HAS_INIT_SECTION 35808 If defined, 'main' will not call '__main' as described above. This 35809 macro should be defined for systems that control start-up code on a 35810 symbol-by-symbol basis, such as OSF/1, and should not be defined 35811 explicitly for systems that support 'INIT_SECTION_ASM_OP'. 35812 35813 -- Macro: LD_INIT_SWITCH 35814 If defined, a C string constant for a switch that tells the linker 35815 that the following symbol is an initialization routine. 35816 35817 -- Macro: LD_FINI_SWITCH 35818 If defined, a C string constant for a switch that tells the linker 35819 that the following symbol is a finalization routine. 35820 35821 -- Macro: COLLECT_SHARED_INIT_FUNC (STREAM, FUNC) 35822 If defined, a C statement that will write a function that can be 35823 automatically called when a shared library is loaded. The function 35824 should call FUNC, which takes no arguments. If not defined, and 35825 the object format requires an explicit initialization function, 35826 then a function called '_GLOBAL__DI' will be generated. 35827 35828 This function and the following one are used by collect2 when 35829 linking a shared library that needs constructors or destructors, or 35830 has DWARF2 exception tables embedded in the code. 35831 35832 -- Macro: COLLECT_SHARED_FINI_FUNC (STREAM, FUNC) 35833 If defined, a C statement that will write a function that can be 35834 automatically called when a shared library is unloaded. The 35835 function should call FUNC, which takes no arguments. If not 35836 defined, and the object format requires an explicit finalization 35837 function, then a function called '_GLOBAL__DD' will be generated. 35838 35839 -- Macro: INVOKE__main 35840 If defined, 'main' will call '__main' despite the presence of 35841 'INIT_SECTION_ASM_OP'. This macro should be defined for systems 35842 where the init section is not actually run automatically, but is 35843 still useful for collecting the lists of constructors and 35844 destructors. 35845 35846 -- Macro: SUPPORTS_INIT_PRIORITY 35847 If nonzero, the C++ 'init_priority' attribute is supported and the 35848 compiler should emit instructions to control the order of 35849 initialization of objects. If zero, the compiler will issue an 35850 error message upon encountering an 'init_priority' attribute. 35851 35852 -- Target Hook: bool TARGET_HAVE_CTORS_DTORS 35853 This value is true if the target supports some "native" method of 35854 collecting constructors and destructors to be run at startup and 35855 exit. It is false if we must use 'collect2'. 35856 35857 -- Target Hook: void TARGET_ASM_CONSTRUCTOR (rtx SYMBOL, int PRIORITY) 35858 If defined, a function that outputs assembler code to arrange to 35859 call the function referenced by SYMBOL at initialization time. 35860 35861 Assume that SYMBOL is a 'SYMBOL_REF' for a function taking no 35862 arguments and with no return value. If the target supports 35863 initialization priorities, PRIORITY is a value between 0 and 35864 'MAX_INIT_PRIORITY'; otherwise it must be 'DEFAULT_INIT_PRIORITY'. 35865 35866 If this macro is not defined by the target, a suitable default will 35867 be chosen if (1) the target supports arbitrary section names, (2) 35868 the target defines 'CTORS_SECTION_ASM_OP', or (3) 'USE_COLLECT2' is 35869 not defined. 35870 35871 -- Target Hook: void TARGET_ASM_DESTRUCTOR (rtx SYMBOL, int PRIORITY) 35872 This is like 'TARGET_ASM_CONSTRUCTOR' but used for termination 35873 functions rather than initialization functions. 35874 35875 If 'TARGET_HAVE_CTORS_DTORS' is true, the initialization routine 35876generated for the generated object file will have static linkage. 35877 35878 If your system uses 'collect2' as the means of processing constructors, 35879then that program normally uses 'nm' to scan an object file for 35880constructor functions to be called. 35881 35882 On certain kinds of systems, you can define this macro to make 35883'collect2' work faster (and, in some cases, make it work at all): 35884 35885 -- Macro: OBJECT_FORMAT_COFF 35886 Define this macro if the system uses COFF (Common Object File 35887 Format) object files, so that 'collect2' can assume this format and 35888 scan object files directly for dynamic constructor/destructor 35889 functions. 35890 35891 This macro is effective only in a native compiler; 'collect2' as 35892 part of a cross compiler always uses 'nm' for the target machine. 35893 35894 -- Macro: REAL_NM_FILE_NAME 35895 Define this macro as a C string constant containing the file name 35896 to use to execute 'nm'. The default is to search the path normally 35897 for 'nm'. 35898 35899 -- Macro: NM_FLAGS 35900 'collect2' calls 'nm' to scan object files for static constructors 35901 and destructors and LTO info. By default, '-n' is passed. Define 35902 'NM_FLAGS' to a C string constant if other options are needed to 35903 get the same output format as GNU 'nm -n' produces. 35904 35905 If your system supports shared libraries and has a program to list the 35906dynamic dependencies of a given library or executable, you can define 35907these macros to enable support for running initialization and 35908termination functions in shared libraries: 35909 35910 -- Macro: LDD_SUFFIX 35911 Define this macro to a C string constant containing the name of the 35912 program which lists dynamic dependencies, like 'ldd' under SunOS 4. 35913 35914 -- Macro: PARSE_LDD_OUTPUT (PTR) 35915 Define this macro to be C code that extracts filenames from the 35916 output of the program denoted by 'LDD_SUFFIX'. PTR is a variable 35917 of type 'char *' that points to the beginning of a line of output 35918 from 'LDD_SUFFIX'. If the line lists a dynamic dependency, the 35919 code must advance PTR to the beginning of the filename on that 35920 line. Otherwise, it must set PTR to 'NULL'. 35921 35922 -- Macro: SHLIB_SUFFIX 35923 Define this macro to a C string constant containing the default 35924 shared library extension of the target (e.g., '".so"'). 'collect2' 35925 strips version information after this suffix when generating global 35926 constructor and destructor names. This define is only needed on 35927 targets that use 'collect2' to process constructors and 35928 destructors. 35929 35930 35931File: gccint.info, Node: Instruction Output, Next: Dispatch Tables, Prev: Macros for Initialization, Up: Assembler Format 35932 3593317.20.7 Output of Assembler Instructions 35934---------------------------------------- 35935 35936This describes assembler instruction output. 35937 35938 -- Macro: REGISTER_NAMES 35939 A C initializer containing the assembler's names for the machine 35940 registers, each one as a C string constant. This is what 35941 translates register numbers in the compiler into assembler 35942 language. 35943 35944 -- Macro: ADDITIONAL_REGISTER_NAMES 35945 If defined, a C initializer for an array of structures containing a 35946 name and a register number. This macro defines additional names 35947 for hard registers, thus allowing the 'asm' option in declarations 35948 to refer to registers using alternate names. 35949 35950 -- Macro: OVERLAPPING_REGISTER_NAMES 35951 If defined, a C initializer for an array of structures containing a 35952 name, a register number and a count of the number of consecutive 35953 machine registers the name overlaps. This macro defines additional 35954 names for hard registers, thus allowing the 'asm' option in 35955 declarations to refer to registers using alternate names. Unlike 35956 'ADDITIONAL_REGISTER_NAMES', this macro should be used when the 35957 register name implies multiple underlying registers. 35958 35959 This macro should be used when it is important that a clobber in an 35960 'asm' statement clobbers all the underlying values implied by the 35961 register name. For example, on ARM, clobbering the 35962 double-precision VFP register "d0" implies clobbering both 35963 single-precision registers "s0" and "s1". 35964 35965 -- Macro: ASM_OUTPUT_OPCODE (STREAM, PTR) 35966 Define this macro if you are using an unusual assembler that 35967 requires different names for the machine instructions. 35968 35969 The definition is a C statement or statements which output an 35970 assembler instruction opcode to the stdio stream STREAM. The 35971 macro-operand PTR is a variable of type 'char *' which points to 35972 the opcode name in its "internal" form--the form that is written in 35973 the machine description. The definition should output the opcode 35974 name to STREAM, performing any translation you desire, and 35975 increment the variable PTR to point at the end of the opcode so 35976 that it will not be output twice. 35977 35978 In fact, your macro definition may process less than the entire 35979 opcode name, or more than the opcode name; but if you want to 35980 process text that includes '%'-sequences to substitute operands, 35981 you must take care of the substitution yourself. Just be sure to 35982 increment PTR over whatever text should not be output normally. 35983 35984 If you need to look at the operand values, they can be found as the 35985 elements of 'recog_data.operand'. 35986 35987 If the macro definition does nothing, the instruction is output in 35988 the usual way. 35989 35990 -- Macro: FINAL_PRESCAN_INSN (INSN, OPVEC, NOPERANDS) 35991 If defined, a C statement to be executed just prior to the output 35992 of assembler code for INSN, to modify the extracted operands so 35993 they will be output differently. 35994 35995 Here the argument OPVEC is the vector containing the operands 35996 extracted from INSN, and NOPERANDS is the number of elements of the 35997 vector which contain meaningful data for this insn. The contents 35998 of this vector are what will be used to convert the insn template 35999 into assembler code, so you can change the assembler output by 36000 changing the contents of the vector. 36001 36002 This macro is useful when various assembler syntaxes share a single 36003 file of instruction patterns; by defining this macro differently, 36004 you can cause a large class of instructions to be output 36005 differently (such as with rearranged operands). Naturally, 36006 variations in assembler syntax affecting individual insn patterns 36007 ought to be handled by writing conditional output routines in those 36008 patterns. 36009 36010 If this macro is not defined, it is equivalent to a null statement. 36011 36012 -- Target Hook: void TARGET_ASM_FINAL_POSTSCAN_INSN (FILE *FILE, 36013 rtx_insn *INSN, rtx *OPVEC, int NOPERANDS) 36014 If defined, this target hook is a function which is executed just 36015 after the output of assembler code for INSN, to change the mode of 36016 the assembler if necessary. 36017 36018 Here the argument OPVEC is the vector containing the operands 36019 extracted from INSN, and NOPERANDS is the number of elements of the 36020 vector which contain meaningful data for this insn. The contents 36021 of this vector are what was used to convert the insn template into 36022 assembler code, so you can change the assembler mode by checking 36023 the contents of the vector. 36024 36025 -- Macro: PRINT_OPERAND (STREAM, X, CODE) 36026 A C compound statement to output to stdio stream STREAM the 36027 assembler syntax for an instruction operand X. X is an RTL 36028 expression. 36029 36030 CODE is a value that can be used to specify one of several ways of 36031 printing the operand. It is used when identical operands must be 36032 printed differently depending on the context. CODE comes from the 36033 '%' specification that was used to request printing of the operand. 36034 If the specification was just '%DIGIT' then CODE is 0; if the 36035 specification was '%LTR DIGIT' then CODE is the ASCII code for LTR. 36036 36037 If X is a register, this macro should print the register's name. 36038 The names can be found in an array 'reg_names' whose type is 'char 36039 *[]'. 'reg_names' is initialized from 'REGISTER_NAMES'. 36040 36041 When the machine description has a specification '%PUNCT' (a '%' 36042 followed by a punctuation character), this macro is called with a 36043 null pointer for X and the punctuation character for CODE. 36044 36045 -- Macro: PRINT_OPERAND_PUNCT_VALID_P (CODE) 36046 A C expression which evaluates to true if CODE is a valid 36047 punctuation character for use in the 'PRINT_OPERAND' macro. If 36048 'PRINT_OPERAND_PUNCT_VALID_P' is not defined, it means that no 36049 punctuation characters (except for the standard one, '%') are used 36050 in this way. 36051 36052 -- Macro: PRINT_OPERAND_ADDRESS (STREAM, X) 36053 A C compound statement to output to stdio stream STREAM the 36054 assembler syntax for an instruction operand that is a memory 36055 reference whose address is X. X is an RTL expression. 36056 36057 On some machines, the syntax for a symbolic address depends on the 36058 section that the address refers to. On these machines, define the 36059 hook 'TARGET_ENCODE_SECTION_INFO' to store the information into the 36060 'symbol_ref', and then check for it here. *Note Assembler 36061 Format::. 36062 36063 -- Macro: DBR_OUTPUT_SEQEND (FILE) 36064 A C statement, to be executed after all slot-filler instructions 36065 have been output. If necessary, call 'dbr_sequence_length' to 36066 determine the number of slots filled in a sequence (zero if not 36067 currently outputting a sequence), to decide how many no-ops to 36068 output, or whatever. 36069 36070 Don't define this macro if it has nothing to do, but it is helpful 36071 in reading assembly output if the extent of the delay sequence is 36072 made explicit (e.g. with white space). 36073 36074 Note that output routines for instructions with delay slots must be 36075prepared to deal with not being output as part of a sequence (i.e. when 36076the scheduling pass is not run, or when no slot fillers could be found.) 36077The variable 'final_sequence' is null when not processing a sequence, 36078otherwise it contains the 'sequence' rtx being output. 36079 36080 -- Macro: REGISTER_PREFIX 36081 -- Macro: LOCAL_LABEL_PREFIX 36082 -- Macro: USER_LABEL_PREFIX 36083 -- Macro: IMMEDIATE_PREFIX 36084 If defined, C string expressions to be used for the '%R', '%L', 36085 '%U', and '%I' options of 'asm_fprintf' (see 'final.c'). These are 36086 useful when a single 'md' file must support multiple assembler 36087 formats. In that case, the various 'tm.h' files can define these 36088 macros differently. 36089 36090 -- Macro: ASM_FPRINTF_EXTENSIONS (FILE, ARGPTR, FORMAT) 36091 If defined this macro should expand to a series of 'case' 36092 statements which will be parsed inside the 'switch' statement of 36093 the 'asm_fprintf' function. This allows targets to define extra 36094 printf formats which may useful when generating their assembler 36095 statements. Note that uppercase letters are reserved for future 36096 generic extensions to asm_fprintf, and so are not available to 36097 target specific code. The output file is given by the parameter 36098 FILE. The varargs input pointer is ARGPTR and the rest of the 36099 format string, starting the character after the one that is being 36100 switched upon, is pointed to by FORMAT. 36101 36102 -- Macro: ASSEMBLER_DIALECT 36103 If your target supports multiple dialects of assembler language 36104 (such as different opcodes), define this macro as a C expression 36105 that gives the numeric index of the assembler language dialect to 36106 use, with zero as the first variant. 36107 36108 If this macro is defined, you may use constructs of the form 36109 '{option0|option1|option2...}' 36110 in the output templates of patterns (*note Output Template::) or in 36111 the first argument of 'asm_fprintf'. This construct outputs 36112 'option0', 'option1', 'option2', etc., if the value of 36113 'ASSEMBLER_DIALECT' is zero, one, two, etc. Any special characters 36114 within these strings retain their usual meaning. If there are 36115 fewer alternatives within the braces than the value of 36116 'ASSEMBLER_DIALECT', the construct outputs nothing. If it's needed 36117 to print curly braces or '|' character in assembler output 36118 directly, '%{', '%}' and '%|' can be used. 36119 36120 If you do not define this macro, the characters '{', '|' and '}' do 36121 not have any special meaning when used in templates or operands to 36122 'asm_fprintf'. 36123 36124 Define the macros 'REGISTER_PREFIX', 'LOCAL_LABEL_PREFIX', 36125 'USER_LABEL_PREFIX' and 'IMMEDIATE_PREFIX' if you can express the 36126 variations in assembler language syntax with that mechanism. 36127 Define 'ASSEMBLER_DIALECT' and use the '{option0|option1}' syntax 36128 if the syntax variant are larger and involve such things as 36129 different opcodes or operand order. 36130 36131 -- Macro: ASM_OUTPUT_REG_PUSH (STREAM, REGNO) 36132 A C expression to output to STREAM some assembler code which will 36133 push hard register number REGNO onto the stack. The code need not 36134 be optimal, since this macro is used only when profiling. 36135 36136 -- Macro: ASM_OUTPUT_REG_POP (STREAM, REGNO) 36137 A C expression to output to STREAM some assembler code which will 36138 pop hard register number REGNO off of the stack. The code need not 36139 be optimal, since this macro is used only when profiling. 36140 36141 36142File: gccint.info, Node: Dispatch Tables, Next: Exception Region Output, Prev: Instruction Output, Up: Assembler Format 36143 3614417.20.8 Output of Dispatch Tables 36145--------------------------------- 36146 36147This concerns dispatch tables. 36148 36149 -- Macro: ASM_OUTPUT_ADDR_DIFF_ELT (STREAM, BODY, VALUE, REL) 36150 A C statement to output to the stdio stream STREAM an assembler 36151 pseudo-instruction to generate a difference between two labels. 36152 VALUE and REL are the numbers of two internal labels. The 36153 definitions of these labels are output using 36154 '(*targetm.asm_out.internal_label)', and they must be printed in 36155 the same way here. For example, 36156 36157 fprintf (STREAM, "\t.word L%d-L%d\n", 36158 VALUE, REL) 36159 36160 You must provide this macro on machines where the addresses in a 36161 dispatch table are relative to the table's own address. If 36162 defined, GCC will also use this macro on all machines when 36163 producing PIC. BODY is the body of the 'ADDR_DIFF_VEC'; it is 36164 provided so that the mode and flags can be read. 36165 36166 -- Macro: ASM_OUTPUT_ADDR_VEC_ELT (STREAM, VALUE) 36167 This macro should be provided on machines where the addresses in a 36168 dispatch table are absolute. 36169 36170 The definition should be a C statement to output to the stdio 36171 stream STREAM an assembler pseudo-instruction to generate a 36172 reference to a label. VALUE is the number of an internal label 36173 whose definition is output using 36174 '(*targetm.asm_out.internal_label)'. For example, 36175 36176 fprintf (STREAM, "\t.word L%d\n", VALUE) 36177 36178 -- Macro: ASM_OUTPUT_CASE_LABEL (STREAM, PREFIX, NUM, TABLE) 36179 Define this if the label before a jump-table needs to be output 36180 specially. The first three arguments are the same as for 36181 '(*targetm.asm_out.internal_label)'; the fourth argument is the 36182 jump-table which follows (a 'jump_table_data' containing an 36183 'addr_vec' or 'addr_diff_vec'). 36184 36185 This feature is used on system V to output a 'swbeg' statement for 36186 the table. 36187 36188 If this macro is not defined, these labels are output with 36189 '(*targetm.asm_out.internal_label)'. 36190 36191 -- Macro: ASM_OUTPUT_CASE_END (STREAM, NUM, TABLE) 36192 Define this if something special must be output at the end of a 36193 jump-table. The definition should be a C statement to be executed 36194 after the assembler code for the table is written. It should write 36195 the appropriate code to stdio stream STREAM. The argument TABLE is 36196 the jump-table insn, and NUM is the label-number of the preceding 36197 label. 36198 36199 If this macro is not defined, nothing special is output at the end 36200 of the jump-table. 36201 36202 -- Target Hook: void TARGET_ASM_EMIT_UNWIND_LABEL (FILE *STREAM, tree 36203 DECL, int FOR_EH, int EMPTY) 36204 This target hook emits a label at the beginning of each FDE. It 36205 should be defined on targets where FDEs need special labels, and it 36206 should write the appropriate label, for the FDE associated with the 36207 function declaration DECL, to the stdio stream STREAM. The third 36208 argument, FOR_EH, is a boolean: true if this is for an exception 36209 table. The fourth argument, EMPTY, is a boolean: true if this is a 36210 placeholder label for an omitted FDE. 36211 36212 The default is that FDEs are not given nonlocal labels. 36213 36214 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL (FILE *STREAM) 36215 This target hook emits a label at the beginning of the exception 36216 table. It should be defined on targets where it is desirable for 36217 the table to be broken up according to function. 36218 36219 The default is that no label is emitted. 36220 36221 -- Target Hook: void TARGET_ASM_EMIT_EXCEPT_PERSONALITY (rtx 36222 PERSONALITY) 36223 If the target implements 'TARGET_ASM_UNWIND_EMIT', this hook may be 36224 used to emit a directive to install a personality hook into the 36225 unwind info. This hook should not be used if dwarf2 unwind info is 36226 used. 36227 36228 -- Target Hook: void TARGET_ASM_UNWIND_EMIT (FILE *STREAM, rtx_insn 36229 *INSN) 36230 This target hook emits assembly directives required to unwind the 36231 given instruction. This is only used when 36232 'TARGET_EXCEPT_UNWIND_INFO' returns 'UI_TARGET'. 36233 36234 -- Target Hook: bool TARGET_ASM_UNWIND_EMIT_BEFORE_INSN 36235 True if the 'TARGET_ASM_UNWIND_EMIT' hook should be called before 36236 the assembly for INSN has been emitted, false if the hook should be 36237 called afterward. 36238 36239 36240File: gccint.info, Node: Exception Region Output, Next: Alignment Output, Prev: Dispatch Tables, Up: Assembler Format 36241 3624217.20.9 Assembler Commands for Exception Regions 36243------------------------------------------------ 36244 36245This describes commands marking the start and the end of an exception 36246region. 36247 36248 -- Macro: EH_FRAME_SECTION_NAME 36249 If defined, a C string constant for the name of the section 36250 containing exception handling frame unwind information. If not 36251 defined, GCC will provide a default definition if the target 36252 supports named sections. 'crtstuff.c' uses this macro to switch to 36253 the appropriate section. 36254 36255 You should define this symbol if your target supports DWARF 2 frame 36256 unwind information and the default definition does not work. 36257 36258 -- Macro: EH_FRAME_THROUGH_COLLECT2 36259 If defined, DWARF 2 frame unwind information will identified by 36260 specially named labels. The collect2 process will locate these 36261 labels and generate code to register the frames. 36262 36263 This might be necessary, for instance, if the system linker will 36264 not place the eh_frames in-between the sentinals from 'crtstuff.c', 36265 or if the system linker does garbage collection and sections cannot 36266 be marked as not to be collected. 36267 36268 -- Macro: EH_TABLES_CAN_BE_READ_ONLY 36269 Define this macro to 1 if your target is such that no frame unwind 36270 information encoding used with non-PIC code will ever require a 36271 runtime relocation, but the linker may not support merging 36272 read-only and read-write sections into a single read-write section. 36273 36274 -- Macro: MASK_RETURN_ADDR 36275 An rtx used to mask the return address found via 'RETURN_ADDR_RTX', 36276 so that it does not contain any extraneous set bits in it. 36277 36278 -- Macro: DWARF2_UNWIND_INFO 36279 Define this macro to 0 if your target supports DWARF 2 frame unwind 36280 information, but it does not yet work with exception handling. 36281 Otherwise, if your target supports this information (if it defines 36282 'INCOMING_RETURN_ADDR_RTX' and 'OBJECT_FORMAT_ELF'), GCC will 36283 provide a default definition of 1. 36284 36285 -- Common Target Hook: enum unwind_info_type TARGET_EXCEPT_UNWIND_INFO 36286 (struct gcc_options *OPTS) 36287 This hook defines the mechanism that will be used for exception 36288 handling by the target. If the target has ABI specified unwind 36289 tables, the hook should return 'UI_TARGET'. If the target is to 36290 use the 'setjmp'/'longjmp'-based exception handling scheme, the 36291 hook should return 'UI_SJLJ'. If the target supports DWARF 2 frame 36292 unwind information, the hook should return 'UI_DWARF2'. 36293 36294 A target may, if exceptions are disabled, choose to return 36295 'UI_NONE'. This may end up simplifying other parts of 36296 target-specific code. The default implementation of this hook 36297 never returns 'UI_NONE'. 36298 36299 Note that the value returned by this hook should be constant. It 36300 should not depend on anything except the command-line switches 36301 described by OPTS. In particular, the setting 'UI_SJLJ' must be 36302 fixed at compiler start-up as C pre-processor macros and builtin 36303 functions related to exception handling are set up depending on 36304 this setting. 36305 36306 The default implementation of the hook first honors the 36307 '--enable-sjlj-exceptions' configure option, then 36308 'DWARF2_UNWIND_INFO', and finally defaults to 'UI_SJLJ'. If 36309 'DWARF2_UNWIND_INFO' depends on command-line options, the target 36310 must define this hook so that OPTS is used correctly. 36311 36312 -- Common Target Hook: bool TARGET_UNWIND_TABLES_DEFAULT 36313 This variable should be set to 'true' if the target ABI requires 36314 unwinding tables even when exceptions are not used. It must not be 36315 modified by command-line option processing. 36316 36317 -- Macro: DONT_USE_BUILTIN_SETJMP 36318 Define this macro to 1 if the 'setjmp'/'longjmp'-based scheme 36319 should use the 'setjmp'/'longjmp' functions from the C library 36320 instead of the '__builtin_setjmp'/'__builtin_longjmp' machinery. 36321 36322 -- Macro: JMP_BUF_SIZE 36323 This macro has no effect unless 'DONT_USE_BUILTIN_SETJMP' is also 36324 defined. Define this macro if the default size of 'jmp_buf' buffer 36325 for the 'setjmp'/'longjmp'-based exception handling mechanism is 36326 not large enough, or if it is much too large. The default size is 36327 'FIRST_PSEUDO_REGISTER * sizeof(void *)'. 36328 36329 -- Macro: DWARF_CIE_DATA_ALIGNMENT 36330 This macro need only be defined if the target might save registers 36331 in the function prologue at an offset to the stack pointer that is 36332 not aligned to 'UNITS_PER_WORD'. The definition should be the 36333 negative minimum alignment if 'STACK_GROWS_DOWNWARD' is true, and 36334 the positive minimum alignment otherwise. *Note SDB and DWARF::. 36335 Only applicable if the target supports DWARF 2 frame unwind 36336 information. 36337 36338 -- Target Hook: bool TARGET_TERMINATE_DW2_EH_FRAME_INFO 36339 Contains the value true if the target should add a zero word onto 36340 the end of a Dwarf-2 frame info section when used for exception 36341 handling. Default value is false if 'EH_FRAME_SECTION_NAME' is 36342 defined, and true otherwise. 36343 36344 -- Target Hook: rtx TARGET_DWARF_REGISTER_SPAN (rtx REG) 36345 Given a register, this hook should return a parallel of registers 36346 to represent where to find the register pieces. Define this hook 36347 if the register and its mode are represented in Dwarf in 36348 non-contiguous locations, or if the register should be represented 36349 in more than one register in Dwarf. Otherwise, this hook should 36350 return 'NULL_RTX'. If not defined, the default is to return 36351 'NULL_RTX'. 36352 36353 -- Target Hook: machine_mode TARGET_DWARF_FRAME_REG_MODE (int REGNO) 36354 Given a register, this hook should return the mode which the 36355 corresponding Dwarf frame register should have. This is normally 36356 used to return a smaller mode than the raw mode to prevent call 36357 clobbered parts of a register altering the frame register size 36358 36359 -- Target Hook: void TARGET_INIT_DWARF_REG_SIZES_EXTRA (tree ADDRESS) 36360 If some registers are represented in Dwarf-2 unwind information in 36361 multiple pieces, define this hook to fill in information about the 36362 sizes of those pieces in the table used by the unwinder at runtime. 36363 It will be called by 'expand_builtin_init_dwarf_reg_sizes' after 36364 filling in a single size corresponding to each hard register; 36365 ADDRESS is the address of the table. 36366 36367 -- Target Hook: bool TARGET_ASM_TTYPE (rtx SYM) 36368 This hook is used to output a reference from a frame unwinding 36369 table to the type_info object identified by SYM. It should return 36370 'true' if the reference was output. Returning 'false' will cause 36371 the reference to be output using the normal Dwarf2 routines. 36372 36373 -- Target Hook: bool TARGET_ARM_EABI_UNWINDER 36374 This flag should be set to 'true' on targets that use an ARM EABI 36375 based unwinding library, and 'false' on other targets. This 36376 effects the format of unwinding tables, and how the unwinder in 36377 entered after running a cleanup. The default is 'false'. 36378 36379 36380File: gccint.info, Node: Alignment Output, Prev: Exception Region Output, Up: Assembler Format 36381 3638217.20.10 Assembler Commands for Alignment 36383----------------------------------------- 36384 36385This describes commands for alignment. 36386 36387 -- Macro: JUMP_ALIGN (LABEL) 36388 The alignment (log base 2) to put in front of LABEL, which is a 36389 common destination of jumps and has no fallthru incoming edge. 36390 36391 This macro need not be defined if you don't want any special 36392 alignment to be done at such a time. Most machine descriptions do 36393 not currently define the macro. 36394 36395 Unless it's necessary to inspect the LABEL parameter, it is better 36396 to set the variable ALIGN_JUMPS in the target's 36397 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36398 user's selection in ALIGN_JUMPS in a 'JUMP_ALIGN' implementation. 36399 36400 -- Target Hook: int TARGET_ASM_JUMP_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36401 The maximum number of bytes to skip before LABEL when applying 36402 'JUMP_ALIGN'. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is 36403 defined. 36404 36405 -- Macro: LABEL_ALIGN_AFTER_BARRIER (LABEL) 36406 The alignment (log base 2) to put in front of LABEL, which follows 36407 a 'BARRIER'. 36408 36409 This macro need not be defined if you don't want any special 36410 alignment to be done at such a time. Most machine descriptions do 36411 not currently define the macro. 36412 36413 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP 36414 (rtx_insn *LABEL) 36415 The maximum number of bytes to skip before LABEL when applying 36416 'LABEL_ALIGN_AFTER_BARRIER'. This works only if 36417 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36418 36419 -- Macro: LOOP_ALIGN (LABEL) 36420 The alignment (log base 2) to put in front of LABEL that heads a 36421 frequently executed basic block (usually the header of a loop). 36422 36423 This macro need not be defined if you don't want any special 36424 alignment to be done at such a time. Most machine descriptions do 36425 not currently define the macro. 36426 36427 Unless it's necessary to inspect the LABEL parameter, it is better 36428 to set the variable 'align_loops' in the target's 36429 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36430 user's selection in 'align_loops' in a 'LOOP_ALIGN' implementation. 36431 36432 -- Target Hook: int TARGET_ASM_LOOP_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36433 The maximum number of bytes to skip when applying 'LOOP_ALIGN' to 36434 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36435 36436 -- Macro: LABEL_ALIGN (LABEL) 36437 The alignment (log base 2) to put in front of LABEL. If 36438 'LABEL_ALIGN_AFTER_BARRIER' / 'LOOP_ALIGN' specify a different 36439 alignment, the maximum of the specified values is used. 36440 36441 Unless it's necessary to inspect the LABEL parameter, it is better 36442 to set the variable 'align_labels' in the target's 36443 'TARGET_OPTION_OVERRIDE'. Otherwise, you should try to honor the 36444 user's selection in 'align_labels' in a 'LABEL_ALIGN' 36445 implementation. 36446 36447 -- Target Hook: int TARGET_ASM_LABEL_ALIGN_MAX_SKIP (rtx_insn *LABEL) 36448 The maximum number of bytes to skip when applying 'LABEL_ALIGN' to 36449 LABEL. This works only if 'ASM_OUTPUT_MAX_SKIP_ALIGN' is defined. 36450 36451 -- Macro: ASM_OUTPUT_SKIP (STREAM, NBYTES) 36452 A C statement to output to the stdio stream STREAM an assembler 36453 instruction to advance the location counter by NBYTES bytes. Those 36454 bytes should be zero when loaded. NBYTES will be a C expression of 36455 type 'unsigned HOST_WIDE_INT'. 36456 36457 -- Macro: ASM_NO_SKIP_IN_TEXT 36458 Define this macro if 'ASM_OUTPUT_SKIP' should not be used in the 36459 text section because it fails to put zeros in the bytes that are 36460 skipped. This is true on many Unix systems, where the pseudo-op to 36461 skip bytes produces no-op instructions rather than zeros when used 36462 in the text section. 36463 36464 -- Macro: ASM_OUTPUT_ALIGN (STREAM, POWER) 36465 A C statement to output to the stdio stream STREAM an assembler 36466 command to advance the location counter to a multiple of 2 to the 36467 POWER bytes. POWER will be a C expression of type 'int'. 36468 36469 -- Macro: ASM_OUTPUT_ALIGN_WITH_NOP (STREAM, POWER) 36470 Like 'ASM_OUTPUT_ALIGN', except that the "nop" instruction is used 36471 for padding, if necessary. 36472 36473 -- Macro: ASM_OUTPUT_MAX_SKIP_ALIGN (STREAM, POWER, MAX_SKIP) 36474 A C statement to output to the stdio stream STREAM an assembler 36475 command to advance the location counter to a multiple of 2 to the 36476 POWER bytes, but only if MAX_SKIP or fewer bytes are needed to 36477 satisfy the alignment request. POWER and MAX_SKIP will be a C 36478 expression of type 'int'. 36479 36480 36481File: gccint.info, Node: Debugging Info, Next: Floating Point, Prev: Assembler Format, Up: Target Macros 36482 3648317.21 Controlling Debugging Information Format 36484============================================== 36485 36486This describes how to specify debugging information. 36487 36488* Menu: 36489 36490* All Debuggers:: Macros that affect all debugging formats uniformly. 36491* DBX Options:: Macros enabling specific options in DBX format. 36492* DBX Hooks:: Hook macros for varying DBX format. 36493* File Names and DBX:: Macros controlling output of file names in DBX format. 36494* SDB and DWARF:: Macros for SDB (COFF) and DWARF formats. 36495* VMS Debug:: Macros for VMS debug format. 36496 36497 36498File: gccint.info, Node: All Debuggers, Next: DBX Options, Up: Debugging Info 36499 3650017.21.1 Macros Affecting All Debugging Formats 36501---------------------------------------------- 36502 36503These macros affect all debugging formats. 36504 36505 -- Macro: DBX_REGISTER_NUMBER (REGNO) 36506 A C expression that returns the DBX register number for the 36507 compiler register number REGNO. In the default macro provided, the 36508 value of this expression will be REGNO itself. But sometimes there 36509 are some registers that the compiler knows about and DBX does not, 36510 or vice versa. In such cases, some register may need to have one 36511 number in the compiler and another for DBX. 36512 36513 If two registers have consecutive numbers inside GCC, and they can 36514 be used as a pair to hold a multiword value, then they _must_ have 36515 consecutive numbers after renumbering with 'DBX_REGISTER_NUMBER'. 36516 Otherwise, debuggers will be unable to access such a pair, because 36517 they expect register pairs to be consecutive in their own numbering 36518 scheme. 36519 36520 If you find yourself defining 'DBX_REGISTER_NUMBER' in way that 36521 does not preserve register pairs, then what you must do instead is 36522 redefine the actual register numbering scheme. 36523 36524 -- Macro: DEBUGGER_AUTO_OFFSET (X) 36525 A C expression that returns the integer offset value for an 36526 automatic variable having address X (an RTL expression). The 36527 default computation assumes that X is based on the frame-pointer 36528 and gives the offset from the frame-pointer. This is required for 36529 targets that produce debugging output for DBX or COFF-style 36530 debugging output for SDB and allow the frame-pointer to be 36531 eliminated when the '-g' options is used. 36532 36533 -- Macro: DEBUGGER_ARG_OFFSET (OFFSET, X) 36534 A C expression that returns the integer offset value for an 36535 argument having address X (an RTL expression). The nominal offset 36536 is OFFSET. 36537 36538 -- Macro: PREFERRED_DEBUGGING_TYPE 36539 A C expression that returns the type of debugging output GCC should 36540 produce when the user specifies just '-g'. Define this if you have 36541 arranged for GCC to support more than one format of debugging 36542 output. Currently, the allowable values are 'DBX_DEBUG', 36543 'SDB_DEBUG', 'DWARF_DEBUG', 'DWARF2_DEBUG', 'XCOFF_DEBUG', 36544 'VMS_DEBUG', and 'VMS_AND_DWARF2_DEBUG'. 36545 36546 When the user specifies '-ggdb', GCC normally also uses the value 36547 of this macro to select the debugging output format, but with two 36548 exceptions. If 'DWARF2_DEBUGGING_INFO' is defined, GCC uses the 36549 value 'DWARF2_DEBUG'. Otherwise, if 'DBX_DEBUGGING_INFO' is 36550 defined, GCC uses 'DBX_DEBUG'. 36551 36552 The value of this macro only affects the default debugging output; 36553 the user can always get a specific type of output by using 36554 '-gstabs', '-gcoff', '-gdwarf-2', '-gxcoff', or '-gvms'. 36555 36556 36557File: gccint.info, Node: DBX Options, Next: DBX Hooks, Prev: All Debuggers, Up: Debugging Info 36558 3655917.21.2 Specific Options for DBX Output 36560--------------------------------------- 36561 36562These are specific options for DBX output. 36563 36564 -- Macro: DBX_DEBUGGING_INFO 36565 Define this macro if GCC should produce debugging output for DBX in 36566 response to the '-g' option. 36567 36568 -- Macro: XCOFF_DEBUGGING_INFO 36569 Define this macro if GCC should produce XCOFF format debugging 36570 output in response to the '-g' option. This is a variant of DBX 36571 format. 36572 36573 -- Macro: DEFAULT_GDB_EXTENSIONS 36574 Define this macro to control whether GCC should by default generate 36575 GDB's extended version of DBX debugging information (assuming 36576 DBX-format debugging information is enabled at all). If you don't 36577 define the macro, the default is 1: always generate the extended 36578 information if there is any occasion to. 36579 36580 -- Macro: DEBUG_SYMS_TEXT 36581 Define this macro if all '.stabs' commands should be output while 36582 in the text section. 36583 36584 -- Macro: ASM_STABS_OP 36585 A C string constant, including spacing, naming the assembler pseudo 36586 op to use instead of '"\t.stabs\t"' to define an ordinary debugging 36587 symbol. If you don't define this macro, '"\t.stabs\t"' is used. 36588 This macro applies only to DBX debugging information format. 36589 36590 -- Macro: ASM_STABD_OP 36591 A C string constant, including spacing, naming the assembler pseudo 36592 op to use instead of '"\t.stabd\t"' to define a debugging symbol 36593 whose value is the current location. If you don't define this 36594 macro, '"\t.stabd\t"' is used. This macro applies only to DBX 36595 debugging information format. 36596 36597 -- Macro: ASM_STABN_OP 36598 A C string constant, including spacing, naming the assembler pseudo 36599 op to use instead of '"\t.stabn\t"' to define a debugging symbol 36600 with no name. If you don't define this macro, '"\t.stabn\t"' is 36601 used. This macro applies only to DBX debugging information format. 36602 36603 -- Macro: DBX_NO_XREFS 36604 Define this macro if DBX on your system does not support the 36605 construct 'xsTAGNAME'. On some systems, this construct is used to 36606 describe a forward reference to a structure named TAGNAME. On 36607 other systems, this construct is not supported at all. 36608 36609 -- Macro: DBX_CONTIN_LENGTH 36610 A symbol name in DBX-format debugging information is normally 36611 continued (split into two separate '.stabs' directives) when it 36612 exceeds a certain length (by default, 80 characters). On some 36613 operating systems, DBX requires this splitting; on others, 36614 splitting must not be done. You can inhibit splitting by defining 36615 this macro with the value zero. You can override the default 36616 splitting-length by defining this macro as an expression for the 36617 length you desire. 36618 36619 -- Macro: DBX_CONTIN_CHAR 36620 Normally continuation is indicated by adding a '\' character to the 36621 end of a '.stabs' string when a continuation follows. To use a 36622 different character instead, define this macro as a character 36623 constant for the character you want to use. Do not define this 36624 macro if backslash is correct for your system. 36625 36626 -- Macro: DBX_STATIC_STAB_DATA_SECTION 36627 Define this macro if it is necessary to go to the data section 36628 before outputting the '.stabs' pseudo-op for a non-global static 36629 variable. 36630 36631 -- Macro: DBX_TYPE_DECL_STABS_CODE 36632 The value to use in the "code" field of the '.stabs' directive for 36633 a typedef. The default is 'N_LSYM'. 36634 36635 -- Macro: DBX_STATIC_CONST_VAR_CODE 36636 The value to use in the "code" field of the '.stabs' directive for 36637 a static variable located in the text section. DBX format does not 36638 provide any "right" way to do this. The default is 'N_FUN'. 36639 36640 -- Macro: DBX_REGPARM_STABS_CODE 36641 The value to use in the "code" field of the '.stabs' directive for 36642 a parameter passed in registers. DBX format does not provide any 36643 "right" way to do this. The default is 'N_RSYM'. 36644 36645 -- Macro: DBX_REGPARM_STABS_LETTER 36646 The letter to use in DBX symbol data to identify a symbol as a 36647 parameter passed in registers. DBX format does not customarily 36648 provide any way to do this. The default is ''P''. 36649 36650 -- Macro: DBX_FUNCTION_FIRST 36651 Define this macro if the DBX information for a function and its 36652 arguments should precede the assembler code for the function. 36653 Normally, in DBX format, the debugging information entirely follows 36654 the assembler code. 36655 36656 -- Macro: DBX_BLOCKS_FUNCTION_RELATIVE 36657 Define this macro, with value 1, if the value of a symbol 36658 describing the scope of a block ('N_LBRAC' or 'N_RBRAC') should be 36659 relative to the start of the enclosing function. Normally, GCC 36660 uses an absolute address. 36661 36662 -- Macro: DBX_LINES_FUNCTION_RELATIVE 36663 Define this macro, with value 1, if the value of a symbol 36664 indicating the current line number ('N_SLINE') should be relative 36665 to the start of the enclosing function. Normally, GCC uses an 36666 absolute address. 36667 36668 -- Macro: DBX_USE_BINCL 36669 Define this macro if GCC should generate 'N_BINCL' and 'N_EINCL' 36670 stabs for included header files, as on Sun systems. This macro 36671 also directs GCC to output a type number as a pair of a file number 36672 and a type number within the file. Normally, GCC does not generate 36673 'N_BINCL' or 'N_EINCL' stabs, and it outputs a single number for a 36674 type number. 36675 36676 36677File: gccint.info, Node: DBX Hooks, Next: File Names and DBX, Prev: DBX Options, Up: Debugging Info 36678 3667917.21.3 Open-Ended Hooks for DBX Format 36680--------------------------------------- 36681 36682These are hooks for DBX format. 36683 36684 -- Macro: DBX_OUTPUT_SOURCE_LINE (STREAM, LINE, COUNTER) 36685 A C statement to output DBX debugging information before code for 36686 line number LINE of the current source file to the stdio stream 36687 STREAM. COUNTER is the number of time the macro was invoked, 36688 including the current invocation; it is intended to generate unique 36689 labels in the assembly output. 36690 36691 This macro should not be defined if the default output is correct, 36692 or if it can be made correct by defining 36693 'DBX_LINES_FUNCTION_RELATIVE'. 36694 36695 -- Macro: NO_DBX_FUNCTION_END 36696 Some stabs encapsulation formats (in particular ECOFF), cannot 36697 handle the '.stabs "",N_FUN,,0,0,Lscope-function-1' gdb dbx 36698 extension construct. On those machines, define this macro to turn 36699 this feature off without disturbing the rest of the gdb extensions. 36700 36701 -- Macro: NO_DBX_BNSYM_ENSYM 36702 Some assemblers cannot handle the '.stabd BNSYM/ENSYM,0,0' gdb dbx 36703 extension construct. On those machines, define this macro to turn 36704 this feature off without disturbing the rest of the gdb extensions. 36705 36706 36707File: gccint.info, Node: File Names and DBX, Next: SDB and DWARF, Prev: DBX Hooks, Up: Debugging Info 36708 3670917.21.4 File Names in DBX Format 36710-------------------------------- 36711 36712This describes file names in DBX format. 36713 36714 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILENAME (STREAM, NAME) 36715 A C statement to output DBX debugging information to the stdio 36716 stream STREAM, which indicates that file NAME is the main source 36717 file--the file specified as the input file for compilation. This 36718 macro is called only once, at the beginning of compilation. 36719 36720 This macro need not be defined if the standard form of output for 36721 DBX debugging information is appropriate. 36722 36723 It may be necessary to refer to a label equal to the beginning of 36724 the text section. You can use 'assemble_name (stream, 36725 ltext_label_name)' to do so. If you do this, you must also set the 36726 variable USED_LTEXT_LABEL_NAME to 'true'. 36727 36728 -- Macro: NO_DBX_MAIN_SOURCE_DIRECTORY 36729 Define this macro, with value 1, if GCC should not emit an 36730 indication of the current directory for compilation and current 36731 source language at the beginning of the file. 36732 36733 -- Macro: NO_DBX_GCC_MARKER 36734 Define this macro, with value 1, if GCC should not emit an 36735 indication that this object file was compiled by GCC. The default 36736 is to emit an 'N_OPT' stab at the beginning of every source file, 36737 with 'gcc2_compiled.' for the string and value 0. 36738 36739 -- Macro: DBX_OUTPUT_MAIN_SOURCE_FILE_END (STREAM, NAME) 36740 A C statement to output DBX debugging information at the end of 36741 compilation of the main source file NAME. Output should be written 36742 to the stdio stream STREAM. 36743 36744 If you don't define this macro, nothing special is output at the 36745 end of compilation, which is correct for most machines. 36746 36747 -- Macro: DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END 36748 Define this macro _instead of_ defining 36749 'DBX_OUTPUT_MAIN_SOURCE_FILE_END', if what needs to be output at 36750 the end of compilation is an 'N_SO' stab with an empty string, 36751 whose value is the highest absolute text address in the file. 36752 36753 36754File: gccint.info, Node: SDB and DWARF, Next: VMS Debug, Prev: File Names and DBX, Up: Debugging Info 36755 3675617.21.5 Macros for SDB and DWARF Output 36757--------------------------------------- 36758 36759Here are macros for SDB and DWARF output. 36760 36761 -- Macro: SDB_DEBUGGING_INFO 36762 Define this macro to 1 if GCC should produce COFF-style debugging 36763 output for SDB in response to the '-g' option. 36764 36765 -- Macro: DWARF2_DEBUGGING_INFO 36766 Define this macro if GCC should produce dwarf version 2 format 36767 debugging output in response to the '-g' option. 36768 36769 -- Target Hook: int TARGET_DWARF_CALLING_CONVENTION (const_tree 36770 FUNCTION) 36771 Define this to enable the dwarf attribute 36772 'DW_AT_calling_convention' to be emitted for each function. 36773 Instead of an integer return the enum value for the 'DW_CC_' 36774 tag. 36775 36776 To support optional call frame debugging information, you must also 36777 define 'INCOMING_RETURN_ADDR_RTX' and either set 36778 'RTX_FRAME_RELATED_P' on the prologue insns if you use RTL for the 36779 prologue, or call 'dwarf2out_def_cfa' and 'dwarf2out_reg_save' as 36780 appropriate from 'TARGET_ASM_FUNCTION_PROLOGUE' if you don't. 36781 36782 -- Macro: DWARF2_FRAME_INFO 36783 Define this macro to a nonzero value if GCC should always output 36784 Dwarf 2 frame information. If 'TARGET_EXCEPT_UNWIND_INFO' (*note 36785 Exception Region Output::) returns 'UI_DWARF2', and exceptions are 36786 enabled, GCC will output this information not matter how you define 36787 'DWARF2_FRAME_INFO'. 36788 36789 -- Target Hook: enum unwind_info_type TARGET_DEBUG_UNWIND_INFO (void) 36790 This hook defines the mechanism that will be used for describing 36791 frame unwind information to the debugger. Normally the hook will 36792 return 'UI_DWARF2' if DWARF 2 debug information is enabled, and 36793 return 'UI_NONE' otherwise. 36794 36795 A target may return 'UI_DWARF2' even when DWARF 2 debug information 36796 is disabled in order to always output DWARF 2 frame information. 36797 36798 A target may return 'UI_TARGET' if it has ABI specified unwind 36799 tables. This will suppress generation of the normal debug frame 36800 unwind information. 36801 36802 -- Macro: DWARF2_ASM_LINE_DEBUG_INFO 36803 Define this macro to be a nonzero value if the assembler can 36804 generate Dwarf 2 line debug info sections. This will result in 36805 much more compact line number tables, and hence is desirable if it 36806 works. 36807 36808 -- Target Hook: bool TARGET_WANT_DEBUG_PUB_SECTIONS 36809 True if the '.debug_pubtypes' and '.debug_pubnames' sections should 36810 be emitted. These sections are not used on most platforms, and in 36811 particular GDB does not use them. 36812 36813 -- Target Hook: bool TARGET_FORCE_AT_COMP_DIR 36814 True if the 'DW_AT_comp_dir' attribute should be emitted for each 36815 compilation unit. This attribute is required for the darwin linker 36816 to emit debug information. 36817 36818 -- Target Hook: bool TARGET_DELAY_SCHED2 36819 True if sched2 is not to be run at its normal place. This usually 36820 means it will be run as part of machine-specific reorg. 36821 36822 -- Target Hook: bool TARGET_DELAY_VARTRACK 36823 True if vartrack is not to be run at its normal place. This 36824 usually means it will be run as part of machine-specific reorg. 36825 36826 -- Target Hook: bool TARGET_NO_REGISTER_ALLOCATION 36827 True if register allocation and the passes following it should not 36828 be run. Usually true only for virtual assembler targets. 36829 36830 -- Macro: ASM_OUTPUT_DWARF_DELTA (STREAM, SIZE, LABEL1, LABEL2) 36831 A C statement to issue assembly directives that create a difference 36832 LAB1 minus LAB2, using an integer of the given SIZE. 36833 36834 -- Macro: ASM_OUTPUT_DWARF_VMS_DELTA (STREAM, SIZE, LABEL1, LABEL2) 36835 A C statement to issue assembly directives that create a difference 36836 between the two given labels in system defined units, e.g. 36837 instruction slots on IA64 VMS, using an integer of the given size. 36838 36839 -- Macro: ASM_OUTPUT_DWARF_OFFSET (STREAM, SIZE, LABEL, SECTION) 36840 A C statement to issue assembly directives that create a 36841 section-relative reference to the given LABEL, using an integer of 36842 the given SIZE. The label is known to be defined in the given 36843 SECTION. 36844 36845 -- Macro: ASM_OUTPUT_DWARF_PCREL (STREAM, SIZE, LABEL) 36846 A C statement to issue assembly directives that create a 36847 self-relative reference to the given LABEL, using an integer of the 36848 given SIZE. 36849 36850 -- Macro: ASM_OUTPUT_DWARF_DATAREL (STREAM, SIZE, LABEL) 36851 A C statement to issue assembly directives that create a reference 36852 to the given LABEL relative to the dbase, using an integer of the 36853 given SIZE. 36854 36855 -- Macro: ASM_OUTPUT_DWARF_TABLE_REF (LABEL) 36856 A C statement to issue assembly directives that create a reference 36857 to the DWARF table identifier LABEL from the current section. This 36858 is used on some systems to avoid garbage collecting a DWARF table 36859 which is referenced by a function. 36860 36861 -- Target Hook: void TARGET_ASM_OUTPUT_DWARF_DTPREL (FILE *FILE, int 36862 SIZE, rtx X) 36863 If defined, this target hook is a function which outputs a 36864 DTP-relative reference to the given TLS symbol of the specified 36865 size. 36866 36867 -- Macro: PUT_SDB_... 36868 Define these macros to override the assembler syntax for the 36869 special SDB assembler directives. See 'sdbout.c' for a list of 36870 these macros and their arguments. If the standard syntax is used, 36871 you need not define them yourself. 36872 36873 -- Macro: SDB_DELIM 36874 Some assemblers do not support a semicolon as a delimiter, even 36875 between SDB assembler directives. In that case, define this macro 36876 to be the delimiter to use (usually '\n'). It is not necessary to 36877 define a new set of 'PUT_SDB_OP' macros if this is the only change 36878 required. 36879 36880 -- Macro: SDB_ALLOW_UNKNOWN_REFERENCES 36881 Define this macro to allow references to unknown structure, union, 36882 or enumeration tags to be emitted. Standard COFF does not allow 36883 handling of unknown references, MIPS ECOFF has support for it. 36884 36885 -- Macro: SDB_ALLOW_FORWARD_REFERENCES 36886 Define this macro to allow references to structure, union, or 36887 enumeration tags that have not yet been seen to be handled. Some 36888 assemblers choke if forward tags are used, while some require it. 36889 36890 -- Macro: SDB_OUTPUT_SOURCE_LINE (STREAM, LINE) 36891 A C statement to output SDB debugging information before code for 36892 line number LINE of the current source file to the stdio stream 36893 STREAM. The default is to emit an '.ln' directive. 36894 36895 36896File: gccint.info, Node: VMS Debug, Prev: SDB and DWARF, Up: Debugging Info 36897 3689817.21.6 Macros for VMS Debug Format 36899----------------------------------- 36900 36901Here are macros for VMS debug format. 36902 36903 -- Macro: VMS_DEBUGGING_INFO 36904 Define this macro if GCC should produce debugging output for VMS in 36905 response to the '-g' option. The default behavior for VMS is to 36906 generate minimal debug info for a traceback in the absence of '-g' 36907 unless explicitly overridden with '-g0'. This behavior is 36908 controlled by 'TARGET_OPTION_OPTIMIZATION' and 36909 'TARGET_OPTION_OVERRIDE'. 36910 36911 36912File: gccint.info, Node: Floating Point, Next: Mode Switching, Prev: Debugging Info, Up: Target Macros 36913 3691417.22 Cross Compilation and Floating Point 36915========================================== 36916 36917While all modern machines use twos-complement representation for 36918integers, there are a variety of representations for floating point 36919numbers. This means that in a cross-compiler the representation of 36920floating point numbers in the compiled program may be different from 36921that used in the machine doing the compilation. 36922 36923 Because different representation systems may offer different amounts of 36924range and precision, all floating point constants must be represented in 36925the target machine's format. Therefore, the cross compiler cannot 36926safely use the host machine's floating point arithmetic; it must emulate 36927the target's arithmetic. To ensure consistency, GCC always uses 36928emulation to work with floating point values, even when the host and 36929target floating point formats are identical. 36930 36931 The following macros are provided by 'real.h' for the compiler to use. 36932All parts of the compiler which generate or optimize floating-point 36933calculations must use these macros. They may evaluate their operands 36934more than once, so operands must not have side effects. 36935 36936 -- Macro: REAL_VALUE_TYPE 36937 The C data type to be used to hold a floating point value in the 36938 target machine's format. Typically this is a 'struct' containing 36939 an array of 'HOST_WIDE_INT', but all code should treat it as an 36940 opaque quantity. 36941 36942 -- Macro: HOST_WIDE_INT REAL_VALUE_FIX (REAL_VALUE_TYPE X) 36943 Truncates X to a signed integer, rounding toward zero. 36944 36945 -- Macro: unsigned HOST_WIDE_INT REAL_VALUE_UNSIGNED_FIX 36946 (REAL_VALUE_TYPE X) 36947 Truncates X to an unsigned integer, rounding toward zero. If X is 36948 negative, returns zero. 36949 36950 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ATOF (const char *STRING, 36951 machine_mode MODE) 36952 Converts STRING into a floating point number in the target 36953 machine's representation for mode MODE. This routine can handle 36954 both decimal and hexadecimal floating point constants, using the 36955 syntax defined by the C language for both. 36956 36957 -- Macro: int REAL_VALUE_NEGATIVE (REAL_VALUE_TYPE X) 36958 Returns 1 if X is negative (including negative zero), 0 otherwise. 36959 36960 -- Macro: int REAL_VALUE_ISINF (REAL_VALUE_TYPE X) 36961 Determines whether X represents infinity (positive or negative). 36962 36963 -- Macro: int REAL_VALUE_ISNAN (REAL_VALUE_TYPE X) 36964 Determines whether X represents a "NaN" (not-a-number). 36965 36966 -- Macro: REAL_VALUE_TYPE REAL_VALUE_NEGATE (REAL_VALUE_TYPE X) 36967 Returns the negative of the floating point value X. 36968 36969 -- Macro: REAL_VALUE_TYPE REAL_VALUE_ABS (REAL_VALUE_TYPE X) 36970 Returns the absolute value of X. 36971 36972 36973File: gccint.info, Node: Mode Switching, Next: Target Attributes, Prev: Floating Point, Up: Target Macros 36974 3697517.23 Mode Switching Instructions 36976================================= 36977 36978The following macros control mode switching optimizations: 36979 36980 -- Macro: OPTIMIZE_MODE_SWITCHING (ENTITY) 36981 Define this macro if the port needs extra instructions inserted for 36982 mode switching in an optimizing compilation. 36983 36984 For an example, the SH4 can perform both single and double 36985 precision floating point operations, but to perform a single 36986 precision operation, the FPSCR PR bit has to be cleared, while for 36987 a double precision operation, this bit has to be set. Changing the 36988 PR bit requires a general purpose register as a scratch register, 36989 hence these FPSCR sets have to be inserted before reload, i.e. you 36990 can't put this into instruction emitting or 36991 'TARGET_MACHINE_DEPENDENT_REORG'. 36992 36993 You can have multiple entities that are mode-switched, and select 36994 at run time which entities actually need it. 36995 'OPTIMIZE_MODE_SWITCHING' should return nonzero for any ENTITY that 36996 needs mode-switching. If you define this macro, you also have to 36997 define 'NUM_MODES_FOR_MODE_SWITCHING', 'TARGET_MODE_NEEDED', 36998 'TARGET_MODE_PRIORITY' and 'TARGET_MODE_EMIT'. 36999 'TARGET_MODE_AFTER', 'TARGET_MODE_ENTRY', and 'TARGET_MODE_EXIT' 37000 are optional. 37001 37002 -- Macro: NUM_MODES_FOR_MODE_SWITCHING 37003 If you define 'OPTIMIZE_MODE_SWITCHING', you have to define this as 37004 initializer for an array of integers. Each initializer element N 37005 refers to an entity that needs mode switching, and specifies the 37006 number of different modes that might need to be set for this 37007 entity. The position of the initializer in the 37008 initializer--starting counting at zero--determines the integer that 37009 is used to refer to the mode-switched entity in question. In 37010 macros that take mode arguments / yield a mode result, modes are 37011 represented as numbers 0 ... N - 1. N is used to specify that no 37012 mode switch is needed / supplied. 37013 37014 -- Target Hook: void TARGET_MODE_EMIT (int ENTITY, int MODE, int 37015 PREV_MODE, HARD_REG_SET REGS_LIVE) 37016 Generate one or more insns to set ENTITY to MODE. HARD_REG_LIVE is 37017 the set of hard registers live at the point where the insn(s) are 37018 to be inserted. PREV_MOXDE indicates the mode to switch from. 37019 Sets of a lower numbered entity will be emitted before sets of a 37020 higher numbered entity to a mode of the same or lower priority. 37021 37022 -- Target Hook: int TARGET_MODE_NEEDED (int ENTITY, rtx_insn *INSN) 37023 ENTITY is an integer specifying a mode-switched entity. If 37024 'OPTIMIZE_MODE_SWITCHING' is defined, you must define this macro to 37025 return an integer value not larger than the corresponding element 37026 in 'NUM_MODES_FOR_MODE_SWITCHING', to denote the mode that ENTITY 37027 must be switched into prior to the execution of INSN. 37028 37029 -- Target Hook: int TARGET_MODE_AFTER (int ENTITY, int MODE, rtx_insn 37030 *INSN) 37031 ENTITY is an integer specifying a mode-switched entity. If this 37032 macro is defined, it is evaluated for every INSN during mode 37033 switching. It determines the mode that an insn results in (if 37034 different from the incoming mode). 37035 37036 -- Target Hook: int TARGET_MODE_ENTRY (int ENTITY) 37037 If this macro is defined, it is evaluated for every ENTITY that 37038 needs mode switching. It should evaluate to an integer, which is a 37039 mode that ENTITY is assumed to be switched to at function entry. 37040 If 'TARGET_MODE_ENTRY' is defined then 'TARGET_MODE_EXIT' must be 37041 defined. 37042 37043 -- Target Hook: int TARGET_MODE_EXIT (int ENTITY) 37044 If this macro is defined, it is evaluated for every ENTITY that 37045 needs mode switching. It should evaluate to an integer, which is a 37046 mode that ENTITY is assumed to be switched to at function exit. If 37047 'TARGET_MODE_EXIT' is defined then 'TARGET_MODE_ENTRY' must be 37048 defined. 37049 37050 -- Target Hook: int TARGET_MODE_PRIORITY (int ENTITY, int N) 37051 This macro specifies the order in which modes for ENTITY are 37052 processed. 0 is the highest priority, 37053 'NUM_MODES_FOR_MODE_SWITCHING[ENTITY] - 1' the lowest. The value 37054 of the macro should be an integer designating a mode for ENTITY. 37055 For any fixed ENTITY, 'mode_priority' (ENTITY, N) shall be a 37056 bijection in 0 ... 'num_modes_for_mode_switching[ENTITY] - 1'. 37057 37058 37059File: gccint.info, Node: Target Attributes, Next: Emulated TLS, Prev: Mode Switching, Up: Target Macros 37060 3706117.24 Defining target-specific uses of '__attribute__' 37062====================================================== 37063 37064Target-specific attributes may be defined for functions, data and types. 37065These are described using the following target hooks; they also need to 37066be documented in 'extend.texi'. 37067 37068 -- Target Hook: const struct attribute_spec * TARGET_ATTRIBUTE_TABLE 37069 If defined, this target hook points to an array of 'struct 37070 attribute_spec' (defined in 'tree-core.h') specifying the machine 37071 specific attributes for this target and some of the restrictions on 37072 the entities to which these attributes are applied and the 37073 arguments they take. 37074 37075 -- Target Hook: bool TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P (const_tree 37076 NAME) 37077 If defined, this target hook is a function which returns true if 37078 the machine-specific attribute named NAME expects an identifier 37079 given as its first argument to be passed on as a plain identifier, 37080 not subjected to name lookup. If this is not defined, the default 37081 is false for all machine-specific attributes. 37082 37083 -- Target Hook: int TARGET_COMP_TYPE_ATTRIBUTES (const_tree TYPE1, 37084 const_tree TYPE2) 37085 If defined, this target hook is a function which returns zero if 37086 the attributes on TYPE1 and TYPE2 are incompatible, one if they are 37087 compatible, and two if they are nearly compatible (which causes a 37088 warning to be generated). If this is not defined, machine-specific 37089 attributes are supposed always to be compatible. 37090 37091 -- Target Hook: void TARGET_SET_DEFAULT_TYPE_ATTRIBUTES (tree TYPE) 37092 If defined, this target hook is a function which assigns default 37093 attributes to the newly defined TYPE. 37094 37095 -- Target Hook: tree TARGET_MERGE_TYPE_ATTRIBUTES (tree TYPE1, tree 37096 TYPE2) 37097 Define this target hook if the merging of type attributes needs 37098 special handling. If defined, the result is a list of the combined 37099 'TYPE_ATTRIBUTES' of TYPE1 and TYPE2. It is assumed that 37100 'comptypes' has already been called and returned 1. This function 37101 may call 'merge_attributes' to handle machine-independent merging. 37102 37103 -- Target Hook: tree TARGET_MERGE_DECL_ATTRIBUTES (tree OLDDECL, tree 37104 NEWDECL) 37105 Define this target hook if the merging of decl attributes needs 37106 special handling. If defined, the result is a list of the combined 37107 'DECL_ATTRIBUTES' of OLDDECL and NEWDECL. NEWDECL is a duplicate 37108 declaration of OLDDECL. Examples of when this is needed are when 37109 one attribute overrides another, or when an attribute is nullified 37110 by a subsequent definition. This function may call 37111 'merge_attributes' to handle machine-independent merging. 37112 37113 If the only target-specific handling you require is 'dllimport' for 37114 Microsoft Windows targets, you should define the macro 37115 'TARGET_DLLIMPORT_DECL_ATTRIBUTES' to '1'. The compiler will then 37116 define a function called 'merge_dllimport_decl_attributes' which 37117 can then be defined as the expansion of 37118 'TARGET_MERGE_DECL_ATTRIBUTES'. You can also add 37119 'handle_dll_attribute' in the attribute table for your port to 37120 perform initial processing of the 'dllimport' and 'dllexport' 37121 attributes. This is done in 'i386/cygwin.h' and 'i386/i386.c', for 37122 example. 37123 37124 -- Target Hook: bool TARGET_VALID_DLLIMPORT_ATTRIBUTE_P (const_tree 37125 DECL) 37126 DECL is a variable or function with '__attribute__((dllimport))' 37127 specified. Use this hook if the target needs to add extra 37128 validation checks to 'handle_dll_attribute'. 37129 37130 -- Macro: TARGET_DECLSPEC 37131 Define this macro to a nonzero value if you want to treat 37132 '__declspec(X)' as equivalent to '__attribute((X))'. By default, 37133 this behavior is enabled only for targets that define 37134 'TARGET_DLLIMPORT_DECL_ATTRIBUTES'. The current implementation of 37135 '__declspec' is via a built-in macro, but you should not rely on 37136 this implementation detail. 37137 37138 -- Target Hook: void TARGET_INSERT_ATTRIBUTES (tree NODE, tree 37139 *ATTR_PTR) 37140 Define this target hook if you want to be able to add attributes to 37141 a decl when it is being created. This is normally useful for back 37142 ends which wish to implement a pragma by using the attributes which 37143 correspond to the pragma's effect. The NODE argument is the decl 37144 which is being created. The ATTR_PTR argument is a pointer to the 37145 attribute list for this decl. The list itself should not be 37146 modified, since it may be shared with other decls, but attributes 37147 may be chained on the head of the list and '*ATTR_PTR' modified to 37148 point to the new attributes, or a copy of the list may be made if 37149 further changes are needed. 37150 37151 -- Target Hook: bool TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P (const_tree 37152 FNDECL) 37153 This target hook returns 'true' if it is OK to inline FNDECL into 37154 the current function, despite its having target-specific 37155 attributes, 'false' otherwise. By default, if a function has a 37156 target specific attribute attached to it, it will not be inlined. 37157 37158 -- Target Hook: bool TARGET_OPTION_VALID_ATTRIBUTE_P (tree FNDECL, tree 37159 NAME, tree ARGS, int FLAGS) 37160 This hook is called to parse 'attribute(target("..."))', which 37161 allows setting target-specific options on individual functions. 37162 These function-specific options may differ from the options 37163 specified on the command line. The hook should return 'true' if 37164 the options are valid. 37165 37166 The hook should set the 'DECL_FUNCTION_SPECIFIC_TARGET' field in 37167 the function declaration to hold a pointer to a target-specific 37168 'struct cl_target_option' structure. 37169 37170 -- Target Hook: void TARGET_OPTION_SAVE (struct cl_target_option *PTR, 37171 struct gcc_options *OPTS) 37172 This hook is called to save any additional target-specific 37173 information in the 'struct cl_target_option' structure for 37174 function-specific options from the 'struct gcc_options' structure. 37175 *Note Option file format::. 37176 37177 -- Target Hook: void TARGET_OPTION_RESTORE (struct gcc_options *OPTS, 37178 struct cl_target_option *PTR) 37179 This hook is called to restore any additional target-specific 37180 information in the 'struct cl_target_option' structure for 37181 function-specific options to the 'struct gcc_options' structure. 37182 37183 -- Target Hook: void TARGET_OPTION_POST_STREAM_IN (struct 37184 cl_target_option *PTR) 37185 This hook is called to update target-specific information in the 37186 'struct cl_target_option' structure after it is streamed in from 37187 LTO bytecode. 37188 37189 -- Target Hook: void TARGET_OPTION_PRINT (FILE *FILE, int INDENT, 37190 struct cl_target_option *PTR) 37191 This hook is called to print any additional target-specific 37192 information in the 'struct cl_target_option' structure for 37193 function-specific options. 37194 37195 -- Target Hook: bool TARGET_OPTION_PRAGMA_PARSE (tree ARGS, tree 37196 POP_TARGET) 37197 This target hook parses the options for '#pragma GCC target', which 37198 sets the target-specific options for functions that occur later in 37199 the input stream. The options accepted should be the same as those 37200 handled by the 'TARGET_OPTION_VALID_ATTRIBUTE_P' hook. 37201 37202 -- Target Hook: void TARGET_OPTION_OVERRIDE (void) 37203 Sometimes certain combinations of command options do not make sense 37204 on a particular target machine. You can override the hook 37205 'TARGET_OPTION_OVERRIDE' to take account of this. This hooks is 37206 called once just after all the command options have been parsed. 37207 37208 Don't use this hook to turn on various extra optimizations for 37209 '-O'. That is what 'TARGET_OPTION_OPTIMIZATION' is for. 37210 37211 If you need to do something whenever the optimization level is 37212 changed via the optimize attribute or pragma, see 37213 'TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE' 37214 37215 -- Target Hook: bool TARGET_OPTION_FUNCTION_VERSIONS (tree DECL1, tree 37216 DECL2) 37217 This target hook returns 'true' if DECL1 and DECL2 are versions of 37218 the same function. DECL1 and DECL2 are function versions if and 37219 only if they have the same function signature and different target 37220 specific attributes, that is, they are compiled for different 37221 target machines. 37222 37223 -- Target Hook: bool TARGET_CAN_INLINE_P (tree CALLER, tree CALLEE) 37224 This target hook returns 'false' if the CALLER function cannot 37225 inline CALLEE, based on target specific information. By default, 37226 inlining is not allowed if the callee function has function 37227 specific target options and the caller does not use the same 37228 options. 37229 37230 -- Target Hook: void TARGET_RELAYOUT_FUNCTION (tree FNDECL) 37231 This target hook fixes function FNDECL after attributes are 37232 processed. Default does nothing. On ARM, the default function's 37233 alignment is updated with the attribute target. 37234 37235 37236File: gccint.info, Node: Emulated TLS, Next: MIPS Coprocessors, Prev: Target Attributes, Up: Target Macros 37237 3723817.25 Emulating TLS 37239=================== 37240 37241For targets whose psABI does not provide Thread Local Storage via 37242specific relocations and instruction sequences, an emulation layer is 37243used. A set of target hooks allows this emulation layer to be 37244configured for the requirements of a particular target. For instance 37245the psABI may in fact specify TLS support in terms of an emulation 37246layer. 37247 37248 The emulation layer works by creating a control object for every TLS 37249object. To access the TLS object, a lookup function is provided which, 37250when given the address of the control object, will return the address of 37251the current thread's instance of the TLS object. 37252 37253 -- Target Hook: const char * TARGET_EMUTLS_GET_ADDRESS 37254 Contains the name of the helper function that uses a TLS control 37255 object to locate a TLS instance. The default causes libgcc's 37256 emulated TLS helper function to be used. 37257 37258 -- Target Hook: const char * TARGET_EMUTLS_REGISTER_COMMON 37259 Contains the name of the helper function that should be used at 37260 program startup to register TLS objects that are implicitly 37261 initialized to zero. If this is 'NULL', all TLS objects will have 37262 explicit initializers. The default causes libgcc's emulated TLS 37263 registration function to be used. 37264 37265 -- Target Hook: const char * TARGET_EMUTLS_VAR_SECTION 37266 Contains the name of the section in which TLS control variables 37267 should be placed. The default of 'NULL' allows these to be placed 37268 in any section. 37269 37270 -- Target Hook: const char * TARGET_EMUTLS_TMPL_SECTION 37271 Contains the name of the section in which TLS initializers should 37272 be placed. The default of 'NULL' allows these to be placed in any 37273 section. 37274 37275 -- Target Hook: const char * TARGET_EMUTLS_VAR_PREFIX 37276 Contains the prefix to be prepended to TLS control variable names. 37277 The default of 'NULL' uses a target-specific prefix. 37278 37279 -- Target Hook: const char * TARGET_EMUTLS_TMPL_PREFIX 37280 Contains the prefix to be prepended to TLS initializer objects. 37281 The default of 'NULL' uses a target-specific prefix. 37282 37283 -- Target Hook: tree TARGET_EMUTLS_VAR_FIELDS (tree TYPE, tree *NAME) 37284 Specifies a function that generates the FIELD_DECLs for a TLS 37285 control object type. TYPE is the RECORD_TYPE the fields are for 37286 and NAME should be filled with the structure tag, if the default of 37287 '__emutls_object' is unsuitable. The default creates a type 37288 suitable for libgcc's emulated TLS function. 37289 37290 -- Target Hook: tree TARGET_EMUTLS_VAR_INIT (tree VAR, tree DECL, tree 37291 TMPL_ADDR) 37292 Specifies a function that generates the CONSTRUCTOR to initialize a 37293 TLS control object. VAR is the TLS control object, DECL is the TLS 37294 object and TMPL_ADDR is the address of the initializer. The 37295 default initializes libgcc's emulated TLS control object. 37296 37297 -- Target Hook: bool TARGET_EMUTLS_VAR_ALIGN_FIXED 37298 Specifies whether the alignment of TLS control variable objects is 37299 fixed and should not be increased as some backends may do to 37300 optimize single objects. The default is false. 37301 37302 -- Target Hook: bool TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS 37303 Specifies whether a DWARF 'DW_OP_form_tls_address' location 37304 descriptor may be used to describe emulated TLS control objects. 37305 37306 37307File: gccint.info, Node: MIPS Coprocessors, Next: PCH Target, Prev: Emulated TLS, Up: Target Macros 37308 3730917.26 Defining coprocessor specifics for MIPS targets. 37310====================================================== 37311 37312The MIPS specification allows MIPS implementations to have as many as 4 37313coprocessors, each with as many as 32 private registers. GCC supports 37314accessing these registers and transferring values between the registers 37315and memory using asm-ized variables. For example: 37316 37317 register unsigned int cp0count asm ("c0r1"); 37318 unsigned int d; 37319 37320 d = cp0count + 3; 37321 37322 ("c0r1" is the default name of register 1 in coprocessor 0; alternate 37323names may be added as described below, or the default names may be 37324overridden entirely in 'SUBTARGET_CONDITIONAL_REGISTER_USAGE'.) 37325 37326 Coprocessor registers are assumed to be epilogue-used; sets to them 37327will be preserved even if it does not appear that the register is used 37328again later in the function. 37329 37330 Another note: according to the MIPS spec, coprocessor 1 (if present) is 37331the FPU. One accesses COP1 registers through standard mips 37332floating-point support; they are not included in this mechanism. 37333 37334 37335File: gccint.info, Node: PCH Target, Next: C++ ABI, Prev: MIPS Coprocessors, Up: Target Macros 37336 3733717.27 Parameters for Precompiled Header Validity Checking 37338========================================================= 37339 37340 -- Target Hook: void * TARGET_GET_PCH_VALIDITY (size_t *SZ) 37341 This hook returns a pointer to the data needed by 37342 'TARGET_PCH_VALID_P' and sets '*SZ' to the size of the data in 37343 bytes. 37344 37345 -- Target Hook: const char * TARGET_PCH_VALID_P (const void *DATA, 37346 size_t SZ) 37347 This hook checks whether the options used to create a PCH file are 37348 compatible with the current settings. It returns 'NULL' if so and 37349 a suitable error message if not. Error messages will be presented 37350 to the user and must be localized using '_(MSG)'. 37351 37352 DATA is the data that was returned by 'TARGET_GET_PCH_VALIDITY' 37353 when the PCH file was created and SZ is the size of that data in 37354 bytes. It's safe to assume that the data was created by the same 37355 version of the compiler, so no format checking is needed. 37356 37357 The default definition of 'default_pch_valid_p' should be suitable 37358 for most targets. 37359 37360 -- Target Hook: const char * TARGET_CHECK_PCH_TARGET_FLAGS (int 37361 PCH_FLAGS) 37362 If this hook is nonnull, the default implementation of 37363 'TARGET_PCH_VALID_P' will use it to check for compatible values of 37364 'target_flags'. PCH_FLAGS specifies the value that 'target_flags' 37365 had when the PCH file was created. The return value is the same as 37366 for 'TARGET_PCH_VALID_P'. 37367 37368 -- Target Hook: void TARGET_PREPARE_PCH_SAVE (void) 37369 Called before writing out a PCH file. If the target has some 37370 garbage-collected data that needs to be in a particular state on 37371 PCH loads, it can use this hook to enforce that state. Very few 37372 targets need to do anything here. 37373 37374 37375File: gccint.info, Node: C++ ABI, Next: Named Address Spaces, Prev: PCH Target, Up: Target Macros 37376 3737717.28 C++ ABI parameters 37378======================== 37379 37380 -- Target Hook: tree TARGET_CXX_GUARD_TYPE (void) 37381 Define this hook to override the integer type used for guard 37382 variables. These are used to implement one-time construction of 37383 static objects. The default is long_long_integer_type_node. 37384 37385 -- Target Hook: bool TARGET_CXX_GUARD_MASK_BIT (void) 37386 This hook determines how guard variables are used. It should 37387 return 'false' (the default) if the first byte should be used. A 37388 return value of 'true' indicates that only the least significant 37389 bit should be used. 37390 37391 -- Target Hook: tree TARGET_CXX_GET_COOKIE_SIZE (tree TYPE) 37392 This hook returns the size of the cookie to use when allocating an 37393 array whose elements have the indicated TYPE. Assumes that it is 37394 already known that a cookie is needed. The default is 'max(sizeof 37395 (size_t), alignof(type))', as defined in section 2.7 of the 37396 IA64/Generic C++ ABI. 37397 37398 -- Target Hook: bool TARGET_CXX_COOKIE_HAS_SIZE (void) 37399 This hook should return 'true' if the element size should be stored 37400 in array cookies. The default is to return 'false'. 37401 37402 -- Target Hook: int TARGET_CXX_IMPORT_EXPORT_CLASS (tree TYPE, int 37403 IMPORT_EXPORT) 37404 If defined by a backend this hook allows the decision made to 37405 export class TYPE to be overruled. Upon entry IMPORT_EXPORT will 37406 contain 1 if the class is going to be exported, -1 if it is going 37407 to be imported and 0 otherwise. This function should return the 37408 modified value and perform any other actions necessary to support 37409 the backend's targeted operating system. 37410 37411 -- Target Hook: bool TARGET_CXX_CDTOR_RETURNS_THIS (void) 37412 This hook should return 'true' if constructors and destructors 37413 return the address of the object created/destroyed. The default is 37414 to return 'false'. 37415 37416 -- Target Hook: bool TARGET_CXX_KEY_METHOD_MAY_BE_INLINE (void) 37417 This hook returns true if the key method for a class (i.e., the 37418 method which, if defined in the current translation unit, causes 37419 the virtual table to be emitted) may be an inline function. Under 37420 the standard Itanium C++ ABI the key method may be an inline 37421 function so long as the function is not declared inline in the 37422 class definition. Under some variants of the ABI, an inline 37423 function can never be the key method. The default is to return 37424 'true'. 37425 37426 -- Target Hook: void TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY (tree 37427 DECL) 37428 DECL is a virtual table, virtual table table, typeinfo object, or 37429 other similar implicit class data object that will be emitted with 37430 external linkage in this translation unit. No ELF visibility has 37431 been explicitly specified. If the target needs to specify a 37432 visibility other than that of the containing class, use this hook 37433 to set 'DECL_VISIBILITY' and 'DECL_VISIBILITY_SPECIFIED'. 37434 37435 -- Target Hook: bool TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT (void) 37436 This hook returns true (the default) if virtual tables and other 37437 similar implicit class data objects are always COMDAT if they have 37438 external linkage. If this hook returns false, then class data for 37439 classes whose virtual table will be emitted in only one translation 37440 unit will not be COMDAT. 37441 37442 -- Target Hook: bool TARGET_CXX_LIBRARY_RTTI_COMDAT (void) 37443 This hook returns true (the default) if the RTTI information for 37444 the basic types which is defined in the C++ runtime should always 37445 be COMDAT, false if it should not be COMDAT. 37446 37447 -- Target Hook: bool TARGET_CXX_USE_AEABI_ATEXIT (void) 37448 This hook returns true if '__aeabi_atexit' (as defined by the ARM 37449 EABI) should be used to register static destructors when 37450 '-fuse-cxa-atexit' is in effect. The default is to return false to 37451 use '__cxa_atexit'. 37452 37453 -- Target Hook: bool TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT (void) 37454 This hook returns true if the target 'atexit' function can be used 37455 in the same manner as '__cxa_atexit' to register C++ static 37456 destructors. This requires that 'atexit'-registered functions in 37457 shared libraries are run in the correct order when the libraries 37458 are unloaded. The default is to return false. 37459 37460 -- Target Hook: void TARGET_CXX_ADJUST_CLASS_AT_DEFINITION (tree TYPE) 37461 TYPE is a C++ class (i.e., RECORD_TYPE or UNION_TYPE) that has just 37462 been defined. Use this hook to make adjustments to the class (eg, 37463 tweak visibility or perform any other required target 37464 modifications). 37465 37466 -- Target Hook: tree TARGET_CXX_DECL_MANGLING_CONTEXT (const_tree DECL) 37467 Return target-specific mangling context of DECL or 'NULL_TREE'. 37468 37469 37470File: gccint.info, Node: Named Address Spaces, Next: Misc, Prev: C++ ABI, Up: Target Macros 37471 3747217.29 Adding support for named address spaces 37473============================================= 37474 37475The draft technical report of the ISO/IEC JTC1 S22 WG14 N1275 standards 37476committee, 'Programming Languages - C - Extensions to support embedded 37477processors', specifies a syntax for embedded processors to specify 37478alternate address spaces. You can configure a GCC port to support 37479section 5.1 of the draft report to add support for address spaces other 37480than the default address space. These address spaces are new keywords 37481that are similar to the 'volatile' and 'const' type attributes. 37482 37483 Pointers to named address spaces can have a different size than 37484pointers to the generic address space. 37485 37486 For example, the SPU port uses the '__ea' address space to refer to 37487memory in the host processor, rather than memory local to the SPU 37488processor. Access to memory in the '__ea' address space involves 37489issuing DMA operations to move data between the host processor and the 37490local processor memory address space. Pointers in the '__ea' address 37491space are either 32 bits or 64 bits based on the '-mea32' or '-mea64' 37492switches (native SPU pointers are always 32 bits). 37493 37494 Internally, address spaces are represented as a small integer in the 37495range 0 to 15 with address space 0 being reserved for the generic 37496address space. 37497 37498 To register a named address space qualifier keyword with the C front 37499end, the target may call the 'c_register_addr_space' routine. For 37500example, the SPU port uses the following to declare '__ea' as the 37501keyword for named address space #1: 37502 #define ADDR_SPACE_EA 1 37503 c_register_addr_space ("__ea", ADDR_SPACE_EA); 37504 37505 -- Target Hook: machine_mode TARGET_ADDR_SPACE_POINTER_MODE 37506 (addr_space_t ADDRESS_SPACE) 37507 Define this to return the machine mode to use for pointers to 37508 ADDRESS_SPACE if the target supports named address spaces. The 37509 default version of this hook returns 'ptr_mode'. 37510 37511 -- Target Hook: machine_mode TARGET_ADDR_SPACE_ADDRESS_MODE 37512 (addr_space_t ADDRESS_SPACE) 37513 Define this to return the machine mode to use for addresses in 37514 ADDRESS_SPACE if the target supports named address spaces. The 37515 default version of this hook returns 'Pmode'. 37516 37517 -- Target Hook: bool TARGET_ADDR_SPACE_VALID_POINTER_MODE (machine_mode 37518 MODE, addr_space_t AS) 37519 Define this to return nonzero if the port can handle pointers with 37520 machine mode MODE to address space AS. This target hook is the 37521 same as the 'TARGET_VALID_POINTER_MODE' target hook, except that it 37522 includes explicit named address space support. The default version 37523 of this hook returns true for the modes returned by either the 37524 'TARGET_ADDR_SPACE_POINTER_MODE' or 37525 'TARGET_ADDR_SPACE_ADDRESS_MODE' target hooks for the given address 37526 space. 37527 37528 -- Target Hook: bool TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P 37529 (machine_mode MODE, rtx EXP, bool STRICT, addr_space_t AS) 37530 Define this to return true if EXP is a valid address for mode MODE 37531 in the named address space AS. The STRICT parameter says whether 37532 strict addressing is in effect after reload has finished. This 37533 target hook is the same as the 'TARGET_LEGITIMATE_ADDRESS_P' target 37534 hook, except that it includes explicit named address space support. 37535 37536 -- Target Hook: rtx TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS (rtx X, rtx 37537 OLDX, machine_mode MODE, addr_space_t AS) 37538 Define this to modify an invalid address X to be a valid address 37539 with mode MODE in the named address space AS. This target hook is 37540 the same as the 'TARGET_LEGITIMIZE_ADDRESS' target hook, except 37541 that it includes explicit named address space support. 37542 37543 -- Target Hook: bool TARGET_ADDR_SPACE_SUBSET_P (addr_space_t SUBSET, 37544 addr_space_t SUPERSET) 37545 Define this to return whether the SUBSET named address space is 37546 contained within the SUPERSET named address space. Pointers to a 37547 named address space that is a subset of another named address space 37548 will be converted automatically without a cast if used together in 37549 arithmetic operations. Pointers to a superset address space can be 37550 converted to pointers to a subset address space via explicit casts. 37551 37552 -- Target Hook: bool TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID (addr_space_t 37553 AS) 37554 Define this to modify the default handling of address 0 for the 37555 address space. Return true if 0 should be considered a valid 37556 address. 37557 37558 -- Target Hook: rtx TARGET_ADDR_SPACE_CONVERT (rtx OP, tree FROM_TYPE, 37559 tree TO_TYPE) 37560 Define this to convert the pointer expression represented by the 37561 RTL OP with type FROM_TYPE that points to a named address space to 37562 a new pointer expression with type TO_TYPE that points to a 37563 different named address space. When this hook it called, it is 37564 guaranteed that one of the two address spaces is a subset of the 37565 other, as determined by the 'TARGET_ADDR_SPACE_SUBSET_P' target 37566 hook. 37567 37568 -- Target Hook: int TARGET_ADDR_SPACE_DEBUG (addr_space_t AS) 37569 Define this to define how the address space is encoded in dwarf. 37570 The result is the value to be used with 'DW_AT_address_class'. 37571 37572 37573File: gccint.info, Node: Misc, Prev: Named Address Spaces, Up: Target Macros 37574 3757517.30 Miscellaneous Parameters 37576============================== 37577 37578Here are several miscellaneous parameters. 37579 37580 -- Macro: HAS_LONG_COND_BRANCH 37581 Define this boolean macro to indicate whether or not your 37582 architecture has conditional branches that can span all of memory. 37583 It is used in conjunction with an optimization that partitions hot 37584 and cold basic blocks into separate sections of the executable. If 37585 this macro is set to false, gcc will convert any conditional 37586 branches that attempt to cross between sections into unconditional 37587 branches or indirect jumps. 37588 37589 -- Macro: HAS_LONG_UNCOND_BRANCH 37590 Define this boolean macro to indicate whether or not your 37591 architecture has unconditional branches that can span all of 37592 memory. It is used in conjunction with an optimization that 37593 partitions hot and cold basic blocks into separate sections of the 37594 executable. If this macro is set to false, gcc will convert any 37595 unconditional branches that attempt to cross between sections into 37596 indirect jumps. 37597 37598 -- Macro: CASE_VECTOR_MODE 37599 An alias for a machine mode name. This is the machine mode that 37600 elements of a jump-table should have. 37601 37602 -- Macro: CASE_VECTOR_SHORTEN_MODE (MIN_OFFSET, MAX_OFFSET, BODY) 37603 Optional: return the preferred mode for an 'addr_diff_vec' when the 37604 minimum and maximum offset are known. If you define this, it 37605 enables extra code in branch shortening to deal with 37606 'addr_diff_vec'. To make this work, you also have to define 37607 'INSN_ALIGN' and make the alignment for 'addr_diff_vec' explicit. 37608 The BODY argument is provided so that the offset_unsigned and scale 37609 flags can be updated. 37610 37611 -- Macro: CASE_VECTOR_PC_RELATIVE 37612 Define this macro to be a C expression to indicate when jump-tables 37613 should contain relative addresses. You need not define this macro 37614 if jump-tables never contain relative addresses, or jump-tables 37615 should contain relative addresses only when '-fPIC' or '-fPIC' is 37616 in effect. 37617 37618 -- Target Hook: unsigned int TARGET_CASE_VALUES_THRESHOLD (void) 37619 This function return the smallest number of different values for 37620 which it is best to use a jump-table instead of a tree of 37621 conditional branches. The default is four for machines with a 37622 'casesi' instruction and five otherwise. This is best for most 37623 machines. 37624 37625 -- Macro: WORD_REGISTER_OPERATIONS 37626 Define this macro to 1 if operations between registers with 37627 integral mode smaller than a word are always performed on the 37628 entire register. Most RISC machines have this property and most 37629 CISC machines do not. 37630 37631 -- Macro: LOAD_EXTEND_OP (MEM_MODE) 37632 Define this macro to be a C expression indicating when insns that 37633 read memory in MEM_MODE, an integral mode narrower than a word, set 37634 the bits outside of MEM_MODE to be either the sign-extension or the 37635 zero-extension of the data read. Return 'SIGN_EXTEND' for values 37636 of MEM_MODE for which the insn sign-extends, 'ZERO_EXTEND' for 37637 which it zero-extends, and 'UNKNOWN' for other modes. 37638 37639 This macro is not called with MEM_MODE non-integral or with a width 37640 greater than or equal to 'BITS_PER_WORD', so you may return any 37641 value in this case. Do not define this macro if it would always 37642 return 'UNKNOWN'. On machines where this macro is defined, you 37643 will normally define it as the constant 'SIGN_EXTEND' or 37644 'ZERO_EXTEND'. 37645 37646 You may return a non-'UNKNOWN' value even if for some hard 37647 registers the sign extension is not performed, if for the 37648 'REGNO_REG_CLASS' of these hard registers 37649 'CANNOT_CHANGE_MODE_CLASS' returns nonzero when the FROM mode is 37650 MEM_MODE and the TO mode is any integral mode larger than this but 37651 not larger than 'word_mode'. 37652 37653 You must return 'UNKNOWN' if for some hard registers that allow 37654 this mode, 'CANNOT_CHANGE_MODE_CLASS' says that they cannot change 37655 to 'word_mode', but that they can change to another integral mode 37656 that is larger then MEM_MODE but still smaller than 'word_mode'. 37657 37658 -- Macro: SHORT_IMMEDIATES_SIGN_EXTEND 37659 Define this macro to 1 if loading short immediate values into 37660 registers sign extends. 37661 37662 -- Target Hook: unsigned int TARGET_MIN_DIVISIONS_FOR_RECIP_MUL 37663 (machine_mode MODE) 37664 When '-ffast-math' is in effect, GCC tries to optimize divisions by 37665 the same divisor, by turning them into multiplications by the 37666 reciprocal. This target hook specifies the minimum number of 37667 divisions that should be there for GCC to perform the optimization 37668 for a variable of mode MODE. The default implementation returns 3 37669 if the machine has an instruction for the division, and 2 if it 37670 does not. 37671 37672 -- Macro: MOVE_MAX 37673 The maximum number of bytes that a single instruction can move 37674 quickly between memory and registers or between two memory 37675 locations. 37676 37677 -- Macro: MAX_MOVE_MAX 37678 The maximum number of bytes that a single instruction can move 37679 quickly between memory and registers or between two memory 37680 locations. If this is undefined, the default is 'MOVE_MAX'. 37681 Otherwise, it is the constant value that is the largest value that 37682 'MOVE_MAX' can have at run-time. 37683 37684 -- Macro: SHIFT_COUNT_TRUNCATED 37685 A C expression that is nonzero if on this machine the number of 37686 bits actually used for the count of a shift operation is equal to 37687 the number of bits needed to represent the size of the object being 37688 shifted. When this macro is nonzero, the compiler will assume that 37689 it is safe to omit a sign-extend, zero-extend, and certain bitwise 37690 'and' instructions that truncates the count of a shift operation. 37691 On machines that have instructions that act on bit-fields at 37692 variable positions, which may include 'bit test' instructions, a 37693 nonzero 'SHIFT_COUNT_TRUNCATED' also enables deletion of 37694 truncations of the values that serve as arguments to bit-field 37695 instructions. 37696 37697 If both types of instructions truncate the count (for shifts) and 37698 position (for bit-field operations), or if no variable-position 37699 bit-field instructions exist, you should define this macro. 37700 37701 However, on some machines, such as the 80386 and the 680x0, 37702 truncation only applies to shift operations and not the (real or 37703 pretended) bit-field operations. Define 'SHIFT_COUNT_TRUNCATED' to 37704 be zero on such machines. Instead, add patterns to the 'md' file 37705 that include the implied truncation of the shift instructions. 37706 37707 You need not define this macro if it would always have the value of 37708 zero. 37709 37710 -- Target Hook: unsigned HOST_WIDE_INT TARGET_SHIFT_TRUNCATION_MASK 37711 (machine_mode MODE) 37712 This function describes how the standard shift patterns for MODE 37713 deal with shifts by negative amounts or by more than the width of 37714 the mode. *Note shift patterns::. 37715 37716 On many machines, the shift patterns will apply a mask M to the 37717 shift count, meaning that a fixed-width shift of X by Y is 37718 equivalent to an arbitrary-width shift of X by Y & M. If this is 37719 true for mode MODE, the function should return M, otherwise it 37720 should return 0. A return value of 0 indicates that no particular 37721 behavior is guaranteed. 37722 37723 Note that, unlike 'SHIFT_COUNT_TRUNCATED', this function does _not_ 37724 apply to general shift rtxes; it applies only to instructions that 37725 are generated by the named shift patterns. 37726 37727 The default implementation of this function returns 37728 'GET_MODE_BITSIZE (MODE) - 1' if 'SHIFT_COUNT_TRUNCATED' and 0 37729 otherwise. This definition is always safe, but if 37730 'SHIFT_COUNT_TRUNCATED' is false, and some shift patterns 37731 nevertheless truncate the shift count, you may get better code by 37732 overriding it. 37733 37734 -- Macro: TRULY_NOOP_TRUNCATION (OUTPREC, INPREC) 37735 A C expression which is nonzero if on this machine it is safe to 37736 "convert" an integer of INPREC bits to one of OUTPREC bits (where 37737 OUTPREC is smaller than INPREC) by merely operating on it as if it 37738 had only OUTPREC bits. 37739 37740 On many machines, this expression can be 1. 37741 37742 When 'TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for 37743 modes for which 'MODES_TIEABLE_P' is 0, suboptimal code can result. 37744 If this is the case, making 'TRULY_NOOP_TRUNCATION' return 0 in 37745 such cases may improve things. 37746 37747 -- Target Hook: int TARGET_MODE_REP_EXTENDED (machine_mode MODE, 37748 machine_mode REP_MODE) 37749 The representation of an integral mode can be such that the values 37750 are always extended to a wider integral mode. Return 'SIGN_EXTEND' 37751 if values of MODE are represented in sign-extended form to 37752 REP_MODE. Return 'UNKNOWN' otherwise. (Currently, none of the 37753 targets use zero-extended representation this way so unlike 37754 'LOAD_EXTEND_OP', 'TARGET_MODE_REP_EXTENDED' is expected to return 37755 either 'SIGN_EXTEND' or 'UNKNOWN'. Also no target extends MODE to 37756 REP_MODE so that REP_MODE is not the next widest integral mode and 37757 currently we take advantage of this fact.) 37758 37759 Similarly to 'LOAD_EXTEND_OP' you may return a non-'UNKNOWN' value 37760 even if the extension is not performed on certain hard registers as 37761 long as for the 'REGNO_REG_CLASS' of these hard registers 37762 'CANNOT_CHANGE_MODE_CLASS' returns nonzero. 37763 37764 Note that 'TARGET_MODE_REP_EXTENDED' and 'LOAD_EXTEND_OP' describe 37765 two related properties. If you define 'TARGET_MODE_REP_EXTENDED 37766 (mode, word_mode)' you probably also want to define 'LOAD_EXTEND_OP 37767 (mode)' to return the same type of extension. 37768 37769 In order to enforce the representation of 'mode', 37770 'TRULY_NOOP_TRUNCATION' should return false when truncating to 37771 'mode'. 37772 37773 -- Macro: STORE_FLAG_VALUE 37774 A C expression describing the value returned by a comparison 37775 operator with an integral mode and stored by a store-flag 37776 instruction ('cstoreMODE4') when the condition is true. This 37777 description must apply to _all_ the 'cstoreMODE4' patterns and all 37778 the comparison operators whose results have a 'MODE_INT' mode. 37779 37780 A value of 1 or -1 means that the instruction implementing the 37781 comparison operator returns exactly 1 or -1 when the comparison is 37782 true and 0 when the comparison is false. Otherwise, the value 37783 indicates which bits of the result are guaranteed to be 1 when the 37784 comparison is true. This value is interpreted in the mode of the 37785 comparison operation, which is given by the mode of the first 37786 operand in the 'cstoreMODE4' pattern. Either the low bit or the 37787 sign bit of 'STORE_FLAG_VALUE' be on. Presently, only those bits 37788 are used by the compiler. 37789 37790 If 'STORE_FLAG_VALUE' is neither 1 or -1, the compiler will 37791 generate code that depends only on the specified bits. It can also 37792 replace comparison operators with equivalent operations if they 37793 cause the required bits to be set, even if the remaining bits are 37794 undefined. For example, on a machine whose comparison operators 37795 return an 'SImode' value and where 'STORE_FLAG_VALUE' is defined as 37796 '0x80000000', saying that just the sign bit is relevant, the 37797 expression 37798 37799 (ne:SI (and:SI X (const_int POWER-OF-2)) (const_int 0)) 37800 37801 can be converted to 37802 37803 (ashift:SI X (const_int N)) 37804 37805 where N is the appropriate shift count to move the bit being tested 37806 into the sign bit. 37807 37808 There is no way to describe a machine that always sets the 37809 low-order bit for a true value, but does not guarantee the value of 37810 any other bits, but we do not know of any machine that has such an 37811 instruction. If you are trying to port GCC to such a machine, 37812 include an instruction to perform a logical-and of the result with 37813 1 in the pattern for the comparison operators and let us know at 37814 <gcc@gcc.gnu.org>. 37815 37816 Often, a machine will have multiple instructions that obtain a 37817 value from a comparison (or the condition codes). Here are rules 37818 to guide the choice of value for 'STORE_FLAG_VALUE', and hence the 37819 instructions to be used: 37820 37821 * Use the shortest sequence that yields a valid definition for 37822 'STORE_FLAG_VALUE'. It is more efficient for the compiler to 37823 "normalize" the value (convert it to, e.g., 1 or 0) than for 37824 the comparison operators to do so because there may be 37825 opportunities to combine the normalization with other 37826 operations. 37827 37828 * For equal-length sequences, use a value of 1 or -1, with -1 37829 being slightly preferred on machines with expensive jumps and 37830 1 preferred on other machines. 37831 37832 * As a second choice, choose a value of '0x80000001' if 37833 instructions exist that set both the sign and low-order bits 37834 but do not define the others. 37835 37836 * Otherwise, use a value of '0x80000000'. 37837 37838 Many machines can produce both the value chosen for 37839 'STORE_FLAG_VALUE' and its negation in the same number of 37840 instructions. On those machines, you should also define a pattern 37841 for those cases, e.g., one matching 37842 37843 (set A (neg:M (ne:M B C))) 37844 37845 Some machines can also perform 'and' or 'plus' operations on 37846 condition code values with less instructions than the corresponding 37847 'cstoreMODE4' insn followed by 'and' or 'plus'. On those machines, 37848 define the appropriate patterns. Use the names 'incscc' and 37849 'decscc', respectively, for the patterns which perform 'plus' or 37850 'minus' operations on condition code values. See 'rs6000.md' for 37851 some examples. The GNU Superoptimizer can be used to find such 37852 instruction sequences on other machines. 37853 37854 If this macro is not defined, the default value, 1, is used. You 37855 need not define 'STORE_FLAG_VALUE' if the machine has no store-flag 37856 instructions, or if the value generated by these instructions is 1. 37857 37858 -- Macro: FLOAT_STORE_FLAG_VALUE (MODE) 37859 A C expression that gives a nonzero 'REAL_VALUE_TYPE' value that is 37860 returned when comparison operators with floating-point results are 37861 true. Define this macro on machines that have comparison 37862 operations that return floating-point values. If there are no such 37863 operations, do not define this macro. 37864 37865 -- Macro: VECTOR_STORE_FLAG_VALUE (MODE) 37866 A C expression that gives a rtx representing the nonzero true 37867 element for vector comparisons. The returned rtx should be valid 37868 for the inner mode of MODE which is guaranteed to be a vector mode. 37869 Define this macro on machines that have vector comparison 37870 operations that return a vector result. If there are no such 37871 operations, do not define this macro. Typically, this macro is 37872 defined as 'const1_rtx' or 'constm1_rtx'. This macro may return 37873 'NULL_RTX' to prevent the compiler optimizing such vector 37874 comparison operations for the given mode. 37875 37876 -- Macro: CLZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 37877 -- Macro: CTZ_DEFINED_VALUE_AT_ZERO (MODE, VALUE) 37878 A C expression that indicates whether the architecture defines a 37879 value for 'clz' or 'ctz' with a zero operand. A result of '0' 37880 indicates the value is undefined. If the value is defined for only 37881 the RTL expression, the macro should evaluate to '1'; if the value 37882 applies also to the corresponding optab entry (which is normally 37883 the case if it expands directly into the corresponding RTL), then 37884 the macro should evaluate to '2'. In the cases where the value is 37885 defined, VALUE should be set to this value. 37886 37887 If this macro is not defined, the value of 'clz' or 'ctz' at zero 37888 is assumed to be undefined. 37889 37890 This macro must be defined if the target's expansion for 'ffs' 37891 relies on a particular value to get correct results. Otherwise it 37892 is not necessary, though it may be used to optimize some corner 37893 cases, and to provide a default expansion for the 'ffs' optab. 37894 37895 Note that regardless of this macro the "definedness" of 'clz' and 37896 'ctz' at zero do _not_ extend to the builtin functions visible to 37897 the user. Thus one may be free to adjust the value at will to 37898 match the target expansion of these operations without fear of 37899 breaking the API. 37900 37901 -- Macro: Pmode 37902 An alias for the machine mode for pointers. On most machines, 37903 define this to be the integer mode corresponding to the width of a 37904 hardware pointer; 'SImode' on 32-bit machine or 'DImode' on 64-bit 37905 machines. On some machines you must define this to be one of the 37906 partial integer modes, such as 'PSImode'. 37907 37908 The width of 'Pmode' must be at least as large as the value of 37909 'POINTER_SIZE'. If it is not equal, you must define the macro 37910 'POINTERS_EXTEND_UNSIGNED' to specify how pointers are extended to 37911 'Pmode'. 37912 37913 -- Macro: FUNCTION_MODE 37914 An alias for the machine mode used for memory references to 37915 functions being called, in 'call' RTL expressions. On most CISC 37916 machines, where an instruction can begin at any byte address, this 37917 should be 'QImode'. On most RISC machines, where all instructions 37918 have fixed size and alignment, this should be a mode with the same 37919 size and alignment as the machine instruction words - typically 37920 'SImode' or 'HImode'. 37921 37922 -- Macro: STDC_0_IN_SYSTEM_HEADERS 37923 In normal operation, the preprocessor expands '__STDC__' to the 37924 constant 1, to signify that GCC conforms to ISO Standard C. On 37925 some hosts, like Solaris, the system compiler uses a different 37926 convention, where '__STDC__' is normally 0, but is 1 if the user 37927 specifies strict conformance to the C Standard. 37928 37929 Defining 'STDC_0_IN_SYSTEM_HEADERS' makes GNU CPP follows the host 37930 convention when processing system header files, but when processing 37931 user files '__STDC__' will always expand to 1. 37932 37933 -- C Target Hook: const char * TARGET_C_PREINCLUDE (void) 37934 Define this hook to return the name of a header file to be included 37935 at the start of all compilations, as if it had been included with 37936 '#include <FILE>'. If this hook returns 'NULL', or is not defined, 37937 or the header is not found, or if the user specifies 37938 '-ffreestanding' or '-nostdinc', no header is included. 37939 37940 This hook can be used together with a header provided by the system 37941 C library to implement ISO C requirements for certain macros to be 37942 predefined that describe properties of the whole implementation 37943 rather than just the compiler. 37944 37945 -- C Target Hook: bool TARGET_CXX_IMPLICIT_EXTERN_C (const char*) 37946 Define this hook to add target-specific C++ implicit extern C 37947 functions. If this function returns true for the name of a 37948 file-scope function, that function implicitly gets extern "C" 37949 linkage rather than whatever language linkage the declaration would 37950 normally have. An example of such function is WinMain on Win32 37951 targets. 37952 37953 -- Macro: NO_IMPLICIT_EXTERN_C 37954 Define this macro if the system header files support C++ as well as 37955 C. This macro inhibits the usual method of using system header 37956 files in C++, which is to pretend that the file's contents are 37957 enclosed in 'extern "C" {...}'. 37958 37959 -- Macro: REGISTER_TARGET_PRAGMAS () 37960 Define this macro if you want to implement any target-specific 37961 pragmas. If defined, it is a C expression which makes a series of 37962 calls to 'c_register_pragma' or 'c_register_pragma_with_expansion' 37963 for each pragma. The macro may also do any setup required for the 37964 pragmas. 37965 37966 The primary reason to define this macro is to provide compatibility 37967 with other compilers for the same target. In general, we 37968 discourage definition of target-specific pragmas for GCC. 37969 37970 If the pragma can be implemented by attributes then you should 37971 consider defining the target hook 'TARGET_INSERT_ATTRIBUTES' as 37972 well. 37973 37974 Preprocessor macros that appear on pragma lines are not expanded. 37975 All '#pragma' directives that do not match any registered pragma 37976 are silently ignored, unless the user specifies 37977 '-Wunknown-pragmas'. 37978 37979 -- Function: void c_register_pragma (const char *SPACE, const char 37980 *NAME, void (*CALLBACK) (struct cpp_reader *)) 37981 -- Function: void c_register_pragma_with_expansion (const char *SPACE, 37982 const char *NAME, void (*CALLBACK) (struct cpp_reader *)) 37983 37984 Each call to 'c_register_pragma' or 37985 'c_register_pragma_with_expansion' establishes one pragma. The 37986 CALLBACK routine will be called when the preprocessor encounters a 37987 pragma of the form 37988 37989 #pragma [SPACE] NAME ... 37990 37991 SPACE is the case-sensitive namespace of the pragma, or 'NULL' to 37992 put the pragma in the global namespace. The callback routine 37993 receives PFILE as its first argument, which can be passed on to 37994 cpplib's functions if necessary. You can lex tokens after the NAME 37995 by calling 'pragma_lex'. Tokens that are not read by the callback 37996 will be silently ignored. The end of the line is indicated by a 37997 token of type 'CPP_EOF'. Macro expansion occurs on the arguments 37998 of pragmas registered with 'c_register_pragma_with_expansion' but 37999 not on the arguments of pragmas registered with 38000 'c_register_pragma'. 38001 38002 Note that the use of 'pragma_lex' is specific to the C and C++ 38003 compilers. It will not work in the Java or Fortran compilers, or 38004 any other language compilers for that matter. Thus if 'pragma_lex' 38005 is going to be called from target-specific code, it must only be 38006 done so when building the C and C++ compilers. This can be done by 38007 defining the variables 'c_target_objs' and 'cxx_target_objs' in the 38008 target entry in the 'config.gcc' file. These variables should name 38009 the target-specific, language-specific object file which contains 38010 the code that uses 'pragma_lex'. Note it will also be necessary to 38011 add a rule to the makefile fragment pointed to by 'tmake_file' that 38012 shows how to build this object file. 38013 38014 -- Macro: HANDLE_PRAGMA_PACK_WITH_EXPANSION 38015 Define this macro if macros should be expanded in the arguments of 38016 '#pragma pack'. 38017 38018 -- Macro: TARGET_DEFAULT_PACK_STRUCT 38019 If your target requires a structure packing default other than 0 38020 (meaning the machine default), define this macro to the necessary 38021 value (in bytes). This must be a value that would also be valid to 38022 use with '#pragma pack()' (that is, a small power of two). 38023 38024 -- Macro: DOLLARS_IN_IDENTIFIERS 38025 Define this macro to control use of the character '$' in identifier 38026 names for the C family of languages. 0 means '$' is not allowed by 38027 default; 1 means it is allowed. 1 is the default; there is no need 38028 to define this macro in that case. 38029 38030 -- Macro: INSN_SETS_ARE_DELAYED (INSN) 38031 Define this macro as a C expression that is nonzero if it is safe 38032 for the delay slot scheduler to place instructions in the delay 38033 slot of INSN, even if they appear to use a resource set or 38034 clobbered in INSN. INSN is always a 'jump_insn' or an 'insn'; GCC 38035 knows that every 'call_insn' has this behavior. On machines where 38036 some 'insn' or 'jump_insn' is really a function call and hence has 38037 this behavior, you should define this macro. 38038 38039 You need not define this macro if it would always return zero. 38040 38041 -- Macro: INSN_REFERENCES_ARE_DELAYED (INSN) 38042 Define this macro as a C expression that is nonzero if it is safe 38043 for the delay slot scheduler to place instructions in the delay 38044 slot of INSN, even if they appear to set or clobber a resource 38045 referenced in INSN. INSN is always a 'jump_insn' or an 'insn'. On 38046 machines where some 'insn' or 'jump_insn' is really a function call 38047 and its operands are registers whose use is actually in the 38048 subroutine it calls, you should define this macro. Doing so allows 38049 the delay slot scheduler to move instructions which copy arguments 38050 into the argument registers into the delay slot of INSN. 38051 38052 You need not define this macro if it would always return zero. 38053 38054 -- Macro: MULTIPLE_SYMBOL_SPACES 38055 Define this macro as a C expression that is nonzero if, in some 38056 cases, global symbols from one translation unit may not be bound to 38057 undefined symbols in another translation unit without user 38058 intervention. For instance, under Microsoft Windows symbols must 38059 be explicitly imported from shared libraries (DLLs). 38060 38061 You need not define this macro if it would always evaluate to zero. 38062 38063 -- Target Hook: rtx_insn * TARGET_MD_ASM_ADJUST (vec<rtx>& OUTPUTS, 38064 vec<rtx>& INPUTS, vec<const char *>& CONSTRAINTS, vec<rtx>& 38065 CLOBBERS, HARD_REG_SET& CLOBBERED_REGS) 38066 This target hook may add "clobbers" to CLOBBERS and CLOBBERED_REGS 38067 for any hard regs the port wishes to automatically clobber for an 38068 asm. The OUTPUTS and INPUTS may be inspected to avoid clobbering a 38069 register that is already used by the asm. 38070 38071 It may modify the OUTPUTS, INPUTS, and CONSTRAINTS as necessary for 38072 other pre-processing. In this case the return value is a sequence 38073 of insns to emit after the asm. 38074 38075 -- Macro: MATH_LIBRARY 38076 Define this macro as a C string constant for the linker argument to 38077 link in the system math library, minus the initial '"-l"', or '""' 38078 if the target does not have a separate math library. 38079 38080 You need only define this macro if the default of '"m"' is wrong. 38081 38082 -- Macro: LIBRARY_PATH_ENV 38083 Define this macro as a C string constant for the environment 38084 variable that specifies where the linker should look for libraries. 38085 38086 You need only define this macro if the default of '"LIBRARY_PATH"' 38087 is wrong. 38088 38089 -- Macro: TARGET_POSIX_IO 38090 Define this macro if the target supports the following POSIX file 38091 functions, access, mkdir and file locking with fcntl / F_SETLKW. 38092 Defining 'TARGET_POSIX_IO' will enable the test coverage code to 38093 use file locking when exiting a program, which avoids race 38094 conditions if the program has forked. It will also create 38095 directories at run-time for cross-profiling. 38096 38097 -- Macro: MAX_CONDITIONAL_EXECUTE 38098 38099 A C expression for the maximum number of instructions to execute 38100 via conditional execution instructions instead of a branch. A 38101 value of 'BRANCH_COST'+1 is the default if the machine does not use 38102 cc0, and 1 if it does use cc0. 38103 38104 -- Macro: IFCVT_MODIFY_TESTS (CE_INFO, TRUE_EXPR, FALSE_EXPR) 38105 Used if the target needs to perform machine-dependent modifications 38106 on the conditionals used for turning basic blocks into 38107 conditionally executed code. CE_INFO points to a data structure, 38108 'struct ce_if_block', which contains information about the 38109 currently processed blocks. TRUE_EXPR and FALSE_EXPR are the tests 38110 that are used for converting the then-block and the else-block, 38111 respectively. Set either TRUE_EXPR or FALSE_EXPR to a null pointer 38112 if the tests cannot be converted. 38113 38114 -- Macro: IFCVT_MODIFY_MULTIPLE_TESTS (CE_INFO, BB, TRUE_EXPR, 38115 FALSE_EXPR) 38116 Like 'IFCVT_MODIFY_TESTS', but used when converting more 38117 complicated if-statements into conditions combined by 'and' and 38118 'or' operations. BB contains the basic block that contains the 38119 test that is currently being processed and about to be turned into 38120 a condition. 38121 38122 -- Macro: IFCVT_MODIFY_INSN (CE_INFO, PATTERN, INSN) 38123 A C expression to modify the PATTERN of an INSN that is to be 38124 converted to conditional execution format. CE_INFO points to a 38125 data structure, 'struct ce_if_block', which contains information 38126 about the currently processed blocks. 38127 38128 -- Macro: IFCVT_MODIFY_FINAL (CE_INFO) 38129 A C expression to perform any final machine dependent modifications 38130 in converting code to conditional execution. The involved basic 38131 blocks can be found in the 'struct ce_if_block' structure that is 38132 pointed to by CE_INFO. 38133 38134 -- Macro: IFCVT_MODIFY_CANCEL (CE_INFO) 38135 A C expression to cancel any machine dependent modifications in 38136 converting code to conditional execution. The involved basic 38137 blocks can be found in the 'struct ce_if_block' structure that is 38138 pointed to by CE_INFO. 38139 38140 -- Macro: IFCVT_MACHDEP_INIT (CE_INFO) 38141 A C expression to initialize any machine specific data for 38142 if-conversion of the if-block in the 'struct ce_if_block' structure 38143 that is pointed to by CE_INFO. 38144 38145 -- Target Hook: void TARGET_MACHINE_DEPENDENT_REORG (void) 38146 If non-null, this hook performs a target-specific pass over the 38147 instruction stream. The compiler will run it at all optimization 38148 levels, just before the point at which it normally does 38149 delayed-branch scheduling. 38150 38151 The exact purpose of the hook varies from target to target. Some 38152 use it to do transformations that are necessary for correctness, 38153 such as laying out in-function constant pools or avoiding hardware 38154 hazards. Others use it as an opportunity to do some 38155 machine-dependent optimizations. 38156 38157 You need not implement the hook if it has nothing to do. The 38158 default definition is null. 38159 38160 -- Target Hook: void TARGET_INIT_BUILTINS (void) 38161 Define this hook if you have any machine-specific built-in 38162 functions that need to be defined. It should be a function that 38163 performs the necessary setup. 38164 38165 Machine specific built-in functions can be useful to expand special 38166 machine instructions that would otherwise not normally be generated 38167 because they have no equivalent in the source language (for 38168 example, SIMD vector instructions or prefetch instructions). 38169 38170 To create a built-in function, call the function 38171 'lang_hooks.builtin_function' which is defined by the language 38172 front end. You can use any type nodes set up by 38173 'build_common_tree_nodes'; only language front ends that use those 38174 two functions will call 'TARGET_INIT_BUILTINS'. 38175 38176 -- Target Hook: tree TARGET_BUILTIN_DECL (unsigned CODE, bool 38177 INITIALIZE_P) 38178 Define this hook if you have any machine-specific built-in 38179 functions that need to be defined. It should be a function that 38180 returns the builtin function declaration for the builtin function 38181 code CODE. If there is no such builtin and it cannot be 38182 initialized at this time if INITIALIZE_P is true the function 38183 should return 'NULL_TREE'. If CODE is out of range the function 38184 should return 'error_mark_node'. 38185 38186 -- Target Hook: rtx TARGET_EXPAND_BUILTIN (tree EXP, rtx TARGET, rtx 38187 SUBTARGET, machine_mode MODE, int IGNORE) 38188 38189 Expand a call to a machine specific built-in function that was set 38190 up by 'TARGET_INIT_BUILTINS'. EXP is the expression for the 38191 function call; the result should go to TARGET if that is 38192 convenient, and have mode MODE if that is convenient. SUBTARGET 38193 may be used as the target for computing one of EXP's operands. 38194 IGNORE is nonzero if the value is to be ignored. This function 38195 should return the result of the call to the built-in function. 38196 38197 -- Target Hook: tree TARGET_BUILTIN_CHKP_FUNCTION (unsigned FCODE) 38198 This hook allows target to redefine built-in functions used by 38199 Pointer Bounds Checker for code instrumentation. Hook should 38200 return fndecl of function implementing generic builtin whose code 38201 is passed in FCODE. Currently following built-in functions are 38202 obtained using this hook: 38203 -- Built-in Function: __bounds_type __chkp_bndmk (const void *LB, 38204 size_t SIZE) 38205 Function code - BUILT_IN_CHKP_BNDMK. This built-in function is 38206 used by Pointer Bounds Checker to create bound values. LB 38207 holds low bound of the resulting bounds. SIZE holds size of 38208 created bounds. 38209 38210 -- Built-in Function: void __chkp_bndstx (const void *PTR, 38211 __bounds_type B, const void **LOC) 38212 Function code - 'BUILT_IN_CHKP_BNDSTX'. This built-in 38213 function is used by Pointer Bounds Checker to store bounds B 38214 for pointer PTR when PTR is stored by address LOC. 38215 38216 -- Built-in Function: __bounds_type __chkp_bndldx (const void 38217 **LOC, const void *PTR) 38218 Function code - 'BUILT_IN_CHKP_BNDLDX'. This built-in 38219 function is used by Pointer Bounds Checker to get bounds of 38220 pointer PTR loaded by address LOC. 38221 38222 -- Built-in Function: void __chkp_bndcl (const void *PTR, 38223 __bounds_type B) 38224 Function code - 'BUILT_IN_CHKP_BNDCL'. This built-in function 38225 is used by Pointer Bounds Checker to perform check for pointer 38226 PTR against lower bound of bounds B. 38227 38228 -- Built-in Function: void __chkp_bndcu (const void *PTR, 38229 __bounds_type B) 38230 Function code - 'BUILT_IN_CHKP_BNDCU'. This built-in function 38231 is used by Pointer Bounds Checker to perform check for pointer 38232 PTR against upper bound of bounds B. 38233 38234 -- Built-in Function: __bounds_type __chkp_bndret (void *PTR) 38235 Function code - 'BUILT_IN_CHKP_BNDRET'. This built-in 38236 function is used by Pointer Bounds Checker to obtain bounds 38237 returned by a call statement. PTR passed to built-in is 38238 'SSA_NAME' returned by the call. 38239 38240 -- Built-in Function: __bounds_type __chkp_intersect 38241 (__bounds_type B1, __bounds_type B2) 38242 Function code - 'BUILT_IN_CHKP_INTERSECT'. This built-in 38243 function returns intersection of bounds B1 and B2. 38244 38245 -- Built-in Function: __bounds_type __chkp_narrow (const void 38246 *PTR, __bounds_type B, size_t S) 38247 Function code - 'BUILT_IN_CHKP_NARROW'. This built-in 38248 function returns intersection of bounds B and [PTR, PTR + S - 38249 '1']. 38250 38251 -- Built-in Function: size_t __chkp_sizeof (const void *PTR) 38252 Function code - 'BUILT_IN_CHKP_SIZEOF'. This built-in 38253 function returns size of object referenced by PTR. PTR is 38254 always 'ADDR_EXPR' of 'VAR_DECL'. This built-in is used by 38255 Pointer Bounds Checker when bounds of object cannot be 38256 computed statically (e.g. object has incomplete type). 38257 38258 -- Built-in Function: const void *__chkp_extract_lower 38259 (__bounds_type B) 38260 Function code - 'BUILT_IN_CHKP_EXTRACT_LOWER'. This built-in 38261 function returns lower bound of bounds B. 38262 38263 -- Built-in Function: const void *__chkp_extract_upper 38264 (__bounds_type B) 38265 Function code - 'BUILT_IN_CHKP_EXTRACT_UPPER'. This built-in 38266 function returns upper bound of bounds B. 38267 -- Target Hook: tree TARGET_CHKP_BOUND_TYPE (void) 38268 Return type to be used for bounds 38269 -- Target Hook: enum machine_mode TARGET_CHKP_BOUND_MODE (void) 38270 Return mode to be used for bounds. 38271 -- Target Hook: tree TARGET_CHKP_MAKE_BOUNDS_CONSTANT (HOST_WIDE_INT 38272 LB, HOST_WIDE_INT UB) 38273 Return constant used to statically initialize constant bounds with 38274 specified lower bound LB and upper bounds UB. 38275 -- Target Hook: int TARGET_CHKP_INITIALIZE_BOUNDS (tree VAR, tree LB, 38276 tree UB, tree *STMTS) 38277 Generate a list of statements STMTS to initialize pointer bounds 38278 variable VAR with bounds LB and UB. Return the number of generated 38279 statements. 38280 38281 -- Target Hook: tree TARGET_RESOLVE_OVERLOADED_BUILTIN (unsigned int 38282 LOC, tree FNDECL, void *ARGLIST) 38283 Select a replacement for a machine specific built-in function that 38284 was set up by 'TARGET_INIT_BUILTINS'. This is done _before_ 38285 regular type checking, and so allows the target to implement a 38286 crude form of function overloading. FNDECL is the declaration of 38287 the built-in function. ARGLIST is the list of arguments passed to 38288 the built-in function. The result is a complete expression that 38289 implements the operation, usually another 'CALL_EXPR'. ARGLIST 38290 really has type 'VEC(tree,gc)*' 38291 38292 -- Target Hook: tree TARGET_FOLD_BUILTIN (tree FNDECL, int N_ARGS, tree 38293 *ARGP, bool IGNORE) 38294 Fold a call to a machine specific built-in function that was set up 38295 by 'TARGET_INIT_BUILTINS'. FNDECL is the declaration of the 38296 built-in function. N_ARGS is the number of arguments passed to the 38297 function; the arguments themselves are pointed to by ARGP. The 38298 result is another tree, valid for both GIMPLE and GENERIC, 38299 containing a simplified expression for the call's result. If 38300 IGNORE is true the value will be ignored. 38301 38302 -- Target Hook: bool TARGET_GIMPLE_FOLD_BUILTIN (gimple_stmt_iterator 38303 *GSI) 38304 Fold a call to a machine specific built-in function that was set up 38305 by 'TARGET_INIT_BUILTINS'. GSI points to the gimple statement 38306 holding the function call. Returns true if any change was made to 38307 the GIMPLE stream. 38308 38309 -- Target Hook: int TARGET_COMPARE_VERSION_PRIORITY (tree DECL1, tree 38310 DECL2) 38311 This hook is used to compare the target attributes in two functions 38312 to determine which function's features get higher priority. This 38313 is used during function multi-versioning to figure out the order in 38314 which two versions must be dispatched. A function version with a 38315 higher priority is checked for dispatching earlier. DECL1 and 38316 DECL2 are the two function decls that will be compared. 38317 38318 -- Target Hook: tree TARGET_GET_FUNCTION_VERSIONS_DISPATCHER (void 38319 *DECL) 38320 This hook is used to get the dispatcher function for a set of 38321 function versions. The dispatcher function is called to invoke the 38322 right function version at run-time. DECL is one version from a set 38323 of semantically identical versions. 38324 38325 -- Target Hook: tree TARGET_GENERATE_VERSION_DISPATCHER_BODY (void 38326 *ARG) 38327 This hook is used to generate the dispatcher logic to invoke the 38328 right function version at run-time for a given set of function 38329 versions. ARG points to the callgraph node of the dispatcher 38330 function whose body must be generated. 38331 38332 -- Target Hook: bool TARGET_CAN_USE_DOLOOP_P (const widest_int 38333 &ITERATIONS, const widest_int &ITERATIONS_MAX, unsigned int 38334 LOOP_DEPTH, bool ENTERED_AT_TOP) 38335 Return true if it is possible to use low-overhead loops 38336 ('doloop_end' and 'doloop_begin') for a particular loop. 38337 ITERATIONS gives the exact number of iterations, or 0 if not known. 38338 ITERATIONS_MAX gives the maximum number of iterations, or 0 if not 38339 known. LOOP_DEPTH is the nesting depth of the loop, with 1 for 38340 innermost loops, 2 for loops that contain innermost loops, and so 38341 on. ENTERED_AT_TOP is true if the loop is only entered from the 38342 top. 38343 38344 This hook is only used if 'doloop_end' is available. The default 38345 implementation returns true. You can use 38346 'can_use_doloop_if_innermost' if the loop must be the innermost, 38347 and if there are no other restrictions. 38348 38349 -- Target Hook: const char * TARGET_INVALID_WITHIN_DOLOOP (const 38350 rtx_insn *INSN) 38351 38352 Take an instruction in INSN and return NULL if it is valid within a 38353 low-overhead loop, otherwise return a string explaining why doloop 38354 could not be applied. 38355 38356 Many targets use special registers for low-overhead looping. For 38357 any instruction that clobbers these this function should return a 38358 string indicating the reason why the doloop could not be applied. 38359 By default, the RTL loop optimizer does not use a present doloop 38360 pattern for loops containing function calls or branch on table 38361 instructions. 38362 38363 -- Target Hook: bool TARGET_LEGITIMATE_COMBINED_INSN (rtx_insn *INSN) 38364 Take an instruction in INSN and return 'false' if the instruction 38365 is not appropriate as a combination of two or more instructions. 38366 The default is to accept all instructions. 38367 38368 -- Target Hook: bool TARGET_CAN_FOLLOW_JUMP (const rtx_insn *FOLLOWER, 38369 const rtx_insn *FOLLOWEE) 38370 FOLLOWER and FOLLOWEE are JUMP_INSN instructions; return true if 38371 FOLLOWER may be modified to follow FOLLOWEE; false, if it can't. 38372 For example, on some targets, certain kinds of branches can't be 38373 made to follow through a hot/cold partitioning. 38374 38375 -- Target Hook: bool TARGET_COMMUTATIVE_P (const_rtx X, int OUTER_CODE) 38376 This target hook returns 'true' if X is considered to be 38377 commutative. Usually, this is just COMMUTATIVE_P (X), but the HP 38378 PA doesn't consider PLUS to be commutative inside a MEM. 38379 OUTER_CODE is the rtx code of the enclosing rtl, if known, 38380 otherwise it is UNKNOWN. 38381 38382 -- Target Hook: rtx TARGET_ALLOCATE_INITIAL_VALUE (rtx HARD_REG) 38383 38384 When the initial value of a hard register has been copied in a 38385 pseudo register, it is often not necessary to actually allocate 38386 another register to this pseudo register, because the original hard 38387 register or a stack slot it has been saved into can be used. 38388 'TARGET_ALLOCATE_INITIAL_VALUE' is called at the start of register 38389 allocation once for each hard register that had its initial value 38390 copied by using 'get_func_hard_reg_initial_val' or 38391 'get_hard_reg_initial_val'. Possible values are 'NULL_RTX', if you 38392 don't want to do any special allocation, a 'REG' rtx--that would 38393 typically be the hard register itself, if it is known not to be 38394 clobbered--or a 'MEM'. If you are returning a 'MEM', this is only 38395 a hint for the allocator; it might decide to use another register 38396 anyways. You may use 'current_function_is_leaf' or 'REG_N_SETS' in 38397 the hook to determine if the hard register in question will not be 38398 clobbered. The default value of this hook is 'NULL', which 38399 disables any special allocation. 38400 38401 -- Target Hook: int TARGET_UNSPEC_MAY_TRAP_P (const_rtx X, unsigned 38402 FLAGS) 38403 This target hook returns nonzero if X, an 'unspec' or 38404 'unspec_volatile' operation, might cause a trap. Targets can use 38405 this hook to enhance precision of analysis for 'unspec' and 38406 'unspec_volatile' operations. You may call 'may_trap_p_1' to 38407 analyze inner elements of X in which case FLAGS should be passed 38408 along. 38409 38410 -- Target Hook: void TARGET_SET_CURRENT_FUNCTION (tree DECL) 38411 The compiler invokes this hook whenever it changes its current 38412 function context ('cfun'). You can define this function if the 38413 back end needs to perform any initialization or reset actions on a 38414 per-function basis. For example, it may be used to implement 38415 function attributes that affect register usage or code generation 38416 patterns. The argument DECL is the declaration for the new 38417 function context, and may be null to indicate that the compiler has 38418 left a function context and is returning to processing at the top 38419 level. The default hook function does nothing. 38420 38421 GCC sets 'cfun' to a dummy function context during initialization 38422 of some parts of the back end. The hook function is not invoked in 38423 this situation; you need not worry about the hook being invoked 38424 recursively, or when the back end is in a partially-initialized 38425 state. 'cfun' might be 'NULL' to indicate processing at top level, 38426 outside of any function scope. 38427 38428 -- Macro: TARGET_OBJECT_SUFFIX 38429 Define this macro to be a C string representing the suffix for 38430 object files on your target machine. If you do not define this 38431 macro, GCC will use '.o' as the suffix for object files. 38432 38433 -- Macro: TARGET_EXECUTABLE_SUFFIX 38434 Define this macro to be a C string representing the suffix to be 38435 automatically added to executable files on your target machine. If 38436 you do not define this macro, GCC will use the null string as the 38437 suffix for executable files. 38438 38439 -- Macro: COLLECT_EXPORT_LIST 38440 If defined, 'collect2' will scan the individual object files 38441 specified on its command line and create an export list for the 38442 linker. Define this macro for systems like AIX, where the linker 38443 discards object files that are not referenced from 'main' and uses 38444 export lists. 38445 38446 -- Macro: MODIFY_JNI_METHOD_CALL (MDECL) 38447 Define this macro to a C expression representing a variant of the 38448 method call MDECL, if Java Native Interface (JNI) methods must be 38449 invoked differently from other methods on your target. For 38450 example, on 32-bit Microsoft Windows, JNI methods must be invoked 38451 using the 'stdcall' calling convention and this macro is then 38452 defined as this expression: 38453 38454 build_type_attribute_variant (MDECL, 38455 build_tree_list 38456 (get_identifier ("stdcall"), 38457 NULL)) 38458 38459 -- Target Hook: bool TARGET_CANNOT_MODIFY_JUMPS_P (void) 38460 This target hook returns 'true' past the point in which new jump 38461 instructions could be created. On machines that require a register 38462 for every jump such as the SHmedia ISA of SH5, this point would 38463 typically be reload, so this target hook should be defined to a 38464 function such as: 38465 38466 static bool 38467 cannot_modify_jumps_past_reload_p () 38468 { 38469 return (reload_completed || reload_in_progress); 38470 } 38471 38472 -- Target Hook: reg_class_t TARGET_BRANCH_TARGET_REGISTER_CLASS (void) 38473 This target hook returns a register class for which branch target 38474 register optimizations should be applied. All registers in this 38475 class should be usable interchangeably. After reload, registers in 38476 this class will be re-allocated and loads will be hoisted out of 38477 loops and be subjected to inter-block scheduling. 38478 38479 -- Target Hook: bool TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED (bool 38480 AFTER_PROLOGUE_EPILOGUE_GEN) 38481 Branch target register optimization will by default exclude 38482 callee-saved registers that are not already live during the current 38483 function; if this target hook returns true, they will be included. 38484 The target code must than make sure that all target registers in 38485 the class returned by 'TARGET_BRANCH_TARGET_REGISTER_CLASS' that 38486 might need saving are saved. AFTER_PROLOGUE_EPILOGUE_GEN indicates 38487 if prologues and epilogues have already been generated. Note, even 38488 if you only return true when AFTER_PROLOGUE_EPILOGUE_GEN is false, 38489 you still are likely to have to make special provisions in 38490 'INITIAL_ELIMINATION_OFFSET' to reserve space for caller-saved 38491 target registers. 38492 38493 -- Target Hook: bool TARGET_HAVE_CONDITIONAL_EXECUTION (void) 38494 This target hook returns true if the target supports conditional 38495 execution. This target hook is required only when the target has 38496 several different modes and they have different conditional 38497 execution capability, such as ARM. 38498 38499 -- Target Hook: rtx TARGET_GEN_CCMP_FIRST (rtx *PREP_SEQ, rtx *GEN_SEQ, 38500 int CODE, tree OP0, tree OP1) 38501 This function prepares to emit a comparison insn for the first 38502 compare in a sequence of conditional comparisions. It returns an 38503 appropriate comparison with 'CC' for passing to 'gen_ccmp_next' or 38504 'cbranch_optab'. The insns to prepare the compare are saved in 38505 PREP_SEQ and the compare insns are saved in GEN_SEQ. They will be 38506 emitted when all the compares in the the conditional comparision 38507 are generated without error. CODE is the 'rtx_code' of the compare 38508 for OP0 and OP1. 38509 38510 -- Target Hook: rtx TARGET_GEN_CCMP_NEXT (rtx *PREP_SEQ, rtx *GEN_SEQ, 38511 rtx PREV, int CMP_CODE, tree OP0, tree OP1, int BIT_CODE) 38512 This function prepares to emit a conditional comparison within a 38513 sequence of conditional comparisons. It returns an appropriate 38514 comparison with 'CC' for passing to 'gen_ccmp_next' or 38515 'cbranch_optab'. The insns to prepare the compare are saved in 38516 PREP_SEQ and the compare insns are saved in GEN_SEQ. They will be 38517 emitted when all the compares in the conditional comparision are 38518 generated without error. The PREV expression is the result of a 38519 prior call to 'gen_ccmp_first' or 'gen_ccmp_next'. It may return 38520 'NULL' if the combination of PREV and this comparison is not 38521 supported, otherwise the result must be appropriate for passing to 38522 'gen_ccmp_next' or 'cbranch_optab'. CODE is the 'rtx_code' of the 38523 compare for OP0 and OP1. BIT_CODE is 'AND' or 'IOR', which is the 38524 op on the compares. 38525 38526 -- Target Hook: unsigned TARGET_LOOP_UNROLL_ADJUST (unsigned NUNROLL, 38527 struct loop *LOOP) 38528 This target hook returns a new value for the number of times LOOP 38529 should be unrolled. The parameter NUNROLL is the number of times 38530 the loop is to be unrolled. The parameter LOOP is a pointer to the 38531 loop, which is going to be checked for unrolling. This target hook 38532 is required only when the target has special constraints like 38533 maximum number of memory accesses. 38534 38535 -- Macro: POWI_MAX_MULTS 38536 If defined, this macro is interpreted as a signed integer C 38537 expression that specifies the maximum number of floating point 38538 multiplications that should be emitted when expanding 38539 exponentiation by an integer constant inline. When this value is 38540 defined, exponentiation requiring more than this number of 38541 multiplications is implemented by calling the system library's 38542 'pow', 'powf' or 'powl' routines. The default value places no 38543 upper bound on the multiplication count. 38544 38545 -- Macro: void TARGET_EXTRA_INCLUDES (const char *SYSROOT, const char 38546 *IPREFIX, int STDINC) 38547 This target hook should register any extra include files for the 38548 target. The parameter STDINC indicates if normal include files are 38549 present. The parameter SYSROOT is the system root directory. The 38550 parameter IPREFIX is the prefix for the gcc directory. 38551 38552 -- Macro: void TARGET_EXTRA_PRE_INCLUDES (const char *SYSROOT, const 38553 char *IPREFIX, int STDINC) 38554 This target hook should register any extra include files for the 38555 target before any standard headers. The parameter STDINC indicates 38556 if normal include files are present. The parameter SYSROOT is the 38557 system root directory. The parameter IPREFIX is the prefix for the 38558 gcc directory. 38559 38560 -- Macro: void TARGET_OPTF (char *PATH) 38561 This target hook should register special include paths for the 38562 target. The parameter PATH is the include to register. On Darwin 38563 systems, this is used for Framework includes, which have semantics 38564 that are different from '-I'. 38565 38566 -- Macro: bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree FNDECL) 38567 This target macro returns 'true' if it is safe to use a local alias 38568 for a virtual function FNDECL when constructing thunks, 'false' 38569 otherwise. By default, the macro returns 'true' for all functions, 38570 if a target supports aliases (i.e. defines 'ASM_OUTPUT_DEF'), 38571 'false' otherwise, 38572 38573 -- Macro: TARGET_FORMAT_TYPES 38574 If defined, this macro is the name of a global variable containing 38575 target-specific format checking information for the '-Wformat' 38576 option. The default is to have no target-specific format checks. 38577 38578 -- Macro: TARGET_N_FORMAT_TYPES 38579 If defined, this macro is the number of entries in 38580 'TARGET_FORMAT_TYPES'. 38581 38582 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES 38583 If defined, this macro is the name of a global variable containing 38584 target-specific format overrides for the '-Wformat' option. The 38585 default is to have no target-specific format overrides. If 38586 defined, 'TARGET_FORMAT_TYPES' must be defined, too. 38587 38588 -- Macro: TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT 38589 If defined, this macro specifies the number of entries in 38590 'TARGET_OVERRIDES_FORMAT_ATTRIBUTES'. 38591 38592 -- Macro: TARGET_OVERRIDES_FORMAT_INIT 38593 If defined, this macro specifies the optional initialization 38594 routine for target specific customizations of the system printf and 38595 scanf formatter settings. 38596 38597 -- Target Hook: const char * TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN 38598 (const_tree TYPELIST, const_tree FUNCDECL, const_tree VAL) 38599 If defined, this macro returns the diagnostic message when it is 38600 illegal to pass argument VAL to function FUNCDECL with prototype 38601 TYPELIST. 38602 38603 -- Target Hook: const char * TARGET_INVALID_CONVERSION (const_tree 38604 FROMTYPE, const_tree TOTYPE) 38605 If defined, this macro returns the diagnostic message when it is 38606 invalid to convert from FROMTYPE to TOTYPE, or 'NULL' if validity 38607 should be determined by the front end. 38608 38609 -- Target Hook: const char * TARGET_INVALID_UNARY_OP (int OP, 38610 const_tree TYPE) 38611 If defined, this macro returns the diagnostic message when it is 38612 invalid to apply operation OP (where unary plus is denoted by 38613 'CONVERT_EXPR') to an operand of type TYPE, or 'NULL' if validity 38614 should be determined by the front end. 38615 38616 -- Target Hook: const char * TARGET_INVALID_BINARY_OP (int OP, 38617 const_tree TYPE1, const_tree TYPE2) 38618 If defined, this macro returns the diagnostic message when it is 38619 invalid to apply operation OP to operands of types TYPE1 and TYPE2, 38620 or 'NULL' if validity should be determined by the front end. 38621 38622 -- Target Hook: const char * TARGET_INVALID_PARAMETER_TYPE (const_tree 38623 TYPE) 38624 If defined, this macro returns the diagnostic message when it is 38625 invalid for functions to include parameters of type TYPE, or 'NULL' 38626 if validity should be determined by the front end. This is 38627 currently used only by the C and C++ front ends. 38628 38629 -- Target Hook: const char * TARGET_INVALID_RETURN_TYPE (const_tree 38630 TYPE) 38631 If defined, this macro returns the diagnostic message when it is 38632 invalid for functions to have return type TYPE, or 'NULL' if 38633 validity should be determined by the front end. This is currently 38634 used only by the C and C++ front ends. 38635 38636 -- Target Hook: tree TARGET_PROMOTED_TYPE (const_tree TYPE) 38637 If defined, this target hook returns the type to which values of 38638 TYPE should be promoted when they appear in expressions, analogous 38639 to the integer promotions, or 'NULL_TREE' to use the front end's 38640 normal promotion rules. This hook is useful when there are 38641 target-specific types with special promotion rules. This is 38642 currently used only by the C and C++ front ends. 38643 38644 -- Target Hook: tree TARGET_CONVERT_TO_TYPE (tree TYPE, tree EXPR) 38645 If defined, this hook returns the result of converting EXPR to 38646 TYPE. It should return the converted expression, or 'NULL_TREE' to 38647 apply the front end's normal conversion rules. This hook is useful 38648 when there are target-specific types with special conversion rules. 38649 This is currently used only by the C and C++ front ends. 38650 38651 -- Macro: TARGET_USE_JCR_SECTION 38652 This macro determines whether to use the JCR section to register 38653 Java classes. By default, TARGET_USE_JCR_SECTION is defined to 1 38654 if both SUPPORTS_WEAK and TARGET_HAVE_NAMED_SECTIONS are true, else 38655 0. 38656 38657 -- Macro: OBJC_JBLEN 38658 This macro determines the size of the objective C jump buffer for 38659 the NeXT runtime. By default, OBJC_JBLEN is defined to an 38660 innocuous value. 38661 38662 -- Macro: LIBGCC2_UNWIND_ATTRIBUTE 38663 Define this macro if any target-specific attributes need to be 38664 attached to the functions in 'libgcc' that provide low-level 38665 support for call stack unwinding. It is used in declarations in 38666 'unwind-generic.h' and the associated definitions of those 38667 functions. 38668 38669 -- Target Hook: void TARGET_UPDATE_STACK_BOUNDARY (void) 38670 Define this macro to update the current function stack boundary if 38671 necessary. 38672 38673 -- Target Hook: rtx TARGET_GET_DRAP_RTX (void) 38674 This hook should return an rtx for Dynamic Realign Argument Pointer 38675 (DRAP) if a different argument pointer register is needed to access 38676 the function's argument list due to stack realignment. Return 38677 'NULL' if no DRAP is needed. 38678 38679 -- Target Hook: bool TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS (void) 38680 When optimization is disabled, this hook indicates whether or not 38681 arguments should be allocated to stack slots. Normally, GCC 38682 allocates stacks slots for arguments when not optimizing in order 38683 to make debugging easier. However, when a function is declared 38684 with '__attribute__((naked))', there is no stack frame, and the 38685 compiler cannot safely move arguments from the registers in which 38686 they are passed to the stack. Therefore, this hook should return 38687 true in general, but false for naked functions. The default 38688 implementation always returns true. 38689 38690 -- Target Hook: unsigned HOST_WIDE_INT TARGET_CONST_ANCHOR 38691 On some architectures it can take multiple instructions to 38692 synthesize a constant. If there is another constant already in a 38693 register that is close enough in value then it is preferable that 38694 the new constant is computed from this register using immediate 38695 addition or subtraction. We accomplish this through CSE. Besides 38696 the value of the constant we also add a lower and an upper constant 38697 anchor to the available expressions. These are then queried when 38698 encountering new constants. The anchors are computed by rounding 38699 the constant up and down to a multiple of the value of 38700 'TARGET_CONST_ANCHOR'. 'TARGET_CONST_ANCHOR' should be the maximum 38701 positive value accepted by immediate-add plus one. We currently 38702 assume that the value of 'TARGET_CONST_ANCHOR' is a power of 2. 38703 For example, on MIPS, where add-immediate takes a 16-bit signed 38704 value, 'TARGET_CONST_ANCHOR' is set to '0x8000'. The default value 38705 is zero, which disables this optimization. 38706 38707 -- Target Hook: unsigned HOST_WIDE_INT TARGET_ASAN_SHADOW_OFFSET (void) 38708 Return the offset bitwise ored into shifted address to get 38709 corresponding Address Sanitizer shadow memory address. NULL if 38710 Address Sanitizer is not supported by the target. 38711 38712 -- Target Hook: unsigned HOST_WIDE_INT TARGET_MEMMODEL_CHECK (unsigned 38713 HOST_WIDE_INT VAL) 38714 Validate target specific memory model mask bits. When NULL no 38715 target specific memory model bits are allowed. 38716 38717 -- Target Hook: unsigned char TARGET_ATOMIC_TEST_AND_SET_TRUEVAL 38718 This value should be set if the result written by 38719 'atomic_test_and_set' is not exactly 1, i.e. the 'bool' 'true'. 38720 38721 -- Target Hook: bool TARGET_HAS_IFUNC_P (void) 38722 It returns true if the target supports GNU indirect functions. The 38723 support includes the assembler, linker and dynamic linker. The 38724 default value of this hook is based on target's libc. 38725 38726 -- Target Hook: unsigned int TARGET_ATOMIC_ALIGN_FOR_MODE (machine_mode 38727 MODE) 38728 If defined, this function returns an appropriate alignment in bits 38729 for an atomic object of machine_mode MODE. If 0 is returned then 38730 the default alignment for the specified mode is used. 38731 38732 -- Target Hook: void TARGET_ATOMIC_ASSIGN_EXPAND_FENV (tree *HOLD, tree 38733 *CLEAR, tree *UPDATE) 38734 ISO C11 requires atomic compound assignments that may raise 38735 floating-point exceptions to raise exceptions corresponding to the 38736 arithmetic operation whose result was successfully stored in a 38737 compare-and-exchange sequence. This requires code equivalent to 38738 calls to 'feholdexcept', 'feclearexcept' and 'feupdateenv' to be 38739 generated at appropriate points in the compare-and-exchange 38740 sequence. This hook should set '*HOLD' to an expression equivalent 38741 to the call to 'feholdexcept', '*CLEAR' to an expression equivalent 38742 to the call to 'feclearexcept' and '*UPDATE' to an expression 38743 equivalent to the call to 'feupdateenv'. The three expressions are 38744 'NULL_TREE' on entry to the hook and may be left as 'NULL_TREE' if 38745 no code is required in a particular place. The default 38746 implementation leaves all three expressions as 'NULL_TREE'. The 38747 '__atomic_feraiseexcept' function from 'libatomic' may be of use as 38748 part of the code generated in '*UPDATE'. 38749 38750 -- Target Hook: void TARGET_RECORD_OFFLOAD_SYMBOL (tree) 38751 Used when offloaded functions are seen in the compilation unit and 38752 no named sections are available. It is called once for each symbol 38753 that must be recorded in the offload function and variable table. 38754 38755 -- Target Hook: char * TARGET_OFFLOAD_OPTIONS (void) 38756 Used when writing out the list of options into an LTO file. It 38757 should translate any relevant target-specific options (such as the 38758 ABI in use) into one of the '-foffload' options that exist as a 38759 common interface to express such options. It should return a 38760 string containing these options, separated by spaces, which the 38761 caller will free. 38762 38763 -- Macro: TARGET_SUPPORTS_WIDE_INT 38764 38765 On older ports, large integers are stored in 'CONST_DOUBLE' rtl 38766 objects. Newer ports define 'TARGET_SUPPORTS_WIDE_INT' to be 38767 nonzero to indicate that large integers are stored in 38768 'CONST_WIDE_INT' rtl objects. The 'CONST_WIDE_INT' allows very 38769 large integer constants to be represented. 'CONST_DOUBLE' is 38770 limited to twice the size of the host's 'HOST_WIDE_INT' 38771 representation. 38772 38773 Converting a port mostly requires looking for the places where 38774 'CONST_DOUBLE's are used with 'VOIDmode' and replacing that code 38775 with code that accesses 'CONST_WIDE_INT's. '"grep -i 38776 const_double"' at the port level gets you to 95% of the changes 38777 that need to be made. There are a few places that require a deeper 38778 look. 38779 38780 * There is no equivalent to 'hval' and 'lval' for 38781 'CONST_WIDE_INT's. This would be difficult to express in the 38782 md language since there are a variable number of elements. 38783 38784 Most ports only check that 'hval' is either 0 or -1 to see if 38785 the value is small. As mentioned above, this will no longer 38786 be necessary since small constants are always 'CONST_INT'. Of 38787 course there are still a few exceptions, the alpha's 38788 constraint used by the zap instruction certainly requires 38789 careful examination by C code. However, all the current code 38790 does is pass the hval and lval to C code, so evolving the c 38791 code to look at the 'CONST_WIDE_INT' is not really a large 38792 change. 38793 38794 * Because there is no standard template that ports use to 38795 materialize constants, there is likely to be some futzing that 38796 is unique to each port in this code. 38797 38798 * The rtx costs may have to be adjusted to properly account for 38799 larger constants that are represented as 'CONST_WIDE_INT'. 38800 38801 All and all it does not take long to convert ports that the 38802 maintainer is familiar with. 38803 38804 38805File: gccint.info, Node: Host Config, Next: Fragments, Prev: Target Macros, Up: Top 38806 3880718 Host Configuration 38808********************* 38809 38810Most details about the machine and system on which the compiler is 38811actually running are detected by the 'configure' script. Some things 38812are impossible for 'configure' to detect; these are described in two 38813ways, either by macros defined in a file named 'xm-MACHINE.h' or by hook 38814functions in the file specified by the OUT_HOST_HOOK_OBJ variable in 38815'config.gcc'. (The intention is that very few hosts will need a header 38816file but nearly every fully supported host will need to override some 38817hooks.) 38818 38819 If you need to define only a few macros, and they have simple 38820definitions, consider using the 'xm_defines' variable in your 38821'config.gcc' entry instead of creating a host configuration header. 38822*Note System Config::. 38823 38824* Menu: 38825 38826* Host Common:: Things every host probably needs implemented. 38827* Filesystem:: Your host can't have the letter 'a' in filenames? 38828* Host Misc:: Rare configuration options for hosts. 38829 38830 38831File: gccint.info, Node: Host Common, Next: Filesystem, Up: Host Config 38832 3883318.1 Host Common 38834================ 38835 38836Some things are just not portable, even between similar operating 38837systems, and are too difficult for autoconf to detect. They get 38838implemented using hook functions in the file specified by the 38839HOST_HOOK_OBJ variable in 'config.gcc'. 38840 38841 -- Host Hook: void HOST_HOOKS_EXTRA_SIGNALS (void) 38842 This host hook is used to set up handling for extra signals. The 38843 most common thing to do in this hook is to detect stack overflow. 38844 38845 -- Host Hook: void * HOST_HOOKS_GT_PCH_GET_ADDRESS (size_t SIZE, int 38846 FD) 38847 This host hook returns the address of some space that is likely to 38848 be free in some subsequent invocation of the compiler. We intend 38849 to load the PCH data at this address such that the data need not be 38850 relocated. The area should be able to hold SIZE bytes. If the 38851 host uses 'mmap', FD is an open file descriptor that can be used 38852 for probing. 38853 38854 -- Host Hook: int HOST_HOOKS_GT_PCH_USE_ADDRESS (void * ADDRESS, size_t 38855 SIZE, int FD, size_t OFFSET) 38856 This host hook is called when a PCH file is about to be loaded. We 38857 want to load SIZE bytes from FD at OFFSET into memory at ADDRESS. 38858 The given address will be the result of a previous invocation of 38859 'HOST_HOOKS_GT_PCH_GET_ADDRESS'. Return -1 if we couldn't allocate 38860 SIZE bytes at ADDRESS. Return 0 if the memory is allocated but the 38861 data is not loaded. Return 1 if the hook has performed everything. 38862 38863 If the implementation uses reserved address space, free any 38864 reserved space beyond SIZE, regardless of the return value. If no 38865 PCH will be loaded, this hook may be called with SIZE zero, in 38866 which case all reserved address space should be freed. 38867 38868 Do not try to handle values of ADDRESS that could not have been 38869 returned by this executable; just return -1. Such values usually 38870 indicate an out-of-date PCH file (built by some other GCC 38871 executable), and such a PCH file won't work. 38872 38873 -- Host Hook: size_t HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY (void); 38874 This host hook returns the alignment required for allocating 38875 virtual memory. Usually this is the same as getpagesize, but on 38876 some hosts the alignment for reserving memory differs from the 38877 pagesize for committing memory. 38878 38879 38880File: gccint.info, Node: Filesystem, Next: Host Misc, Prev: Host Common, Up: Host Config 38881 3888218.2 Host Filesystem 38883==================== 38884 38885GCC needs to know a number of things about the semantics of the host 38886machine's filesystem. Filesystems with Unix and MS-DOS semantics are 38887automatically detected. For other systems, you can define the following 38888macros in 'xm-MACHINE.h'. 38889 38890'HAVE_DOS_BASED_FILE_SYSTEM' 38891 This macro is automatically defined by 'system.h' if the host file 38892 system obeys the semantics defined by MS-DOS instead of Unix. DOS 38893 file systems are case insensitive, file specifications may begin 38894 with a drive letter, and both forward slash and backslash ('/' and 38895 '\') are directory separators. 38896 38897'DIR_SEPARATOR' 38898'DIR_SEPARATOR_2' 38899 If defined, these macros expand to character constants specifying 38900 separators for directory names within a file specification. 38901 'system.h' will automatically give them appropriate values on Unix 38902 and MS-DOS file systems. If your file system is neither of these, 38903 define one or both appropriately in 'xm-MACHINE.h'. 38904 38905 However, operating systems like VMS, where constructing a pathname 38906 is more complicated than just stringing together directory names 38907 separated by a special character, should not define either of these 38908 macros. 38909 38910'PATH_SEPARATOR' 38911 If defined, this macro should expand to a character constant 38912 specifying the separator for elements of search paths. The default 38913 value is a colon (':'). DOS-based systems usually, but not always, 38914 use semicolon (';'). 38915 38916'VMS' 38917 Define this macro if the host system is VMS. 38918 38919'HOST_OBJECT_SUFFIX' 38920 Define this macro to be a C string representing the suffix for 38921 object files on your host machine. If you do not define this 38922 macro, GCC will use '.o' as the suffix for object files. 38923 38924'HOST_EXECUTABLE_SUFFIX' 38925 Define this macro to be a C string representing the suffix for 38926 executable files on your host machine. If you do not define this 38927 macro, GCC will use the null string as the suffix for executable 38928 files. 38929 38930'HOST_BIT_BUCKET' 38931 A pathname defined by the host operating system, which can be 38932 opened as a file and written to, but all the information written is 38933 discarded. This is commonly known as a "bit bucket" or "null 38934 device". If you do not define this macro, GCC will use '/dev/null' 38935 as the bit bucket. If the host does not support a bit bucket, 38936 define this macro to an invalid filename. 38937 38938'UPDATE_PATH_HOST_CANONICALIZE (PATH)' 38939 If defined, a C statement (sans semicolon) that performs 38940 host-dependent canonicalization when a path used in a compilation 38941 driver or preprocessor is canonicalized. PATH is a malloc-ed path 38942 to be canonicalized. If the C statement does canonicalize PATH 38943 into a different buffer, the old path should be freed and the new 38944 buffer should have been allocated with malloc. 38945 38946'DUMPFILE_FORMAT' 38947 Define this macro to be a C string representing the format to use 38948 for constructing the index part of debugging dump file names. The 38949 resultant string must fit in fifteen bytes. The full filename will 38950 be the concatenation of: the prefix of the assembler file name, the 38951 string resulting from applying this format to an index number, and 38952 a string unique to each dump file kind, e.g. 'rtl'. 38953 38954 If you do not define this macro, GCC will use '.%02d.'. You should 38955 define this macro if using the default will create an invalid file 38956 name. 38957 38958'DELETE_IF_ORDINARY' 38959 Define this macro to be a C statement (sans semicolon) that 38960 performs host-dependent removal of ordinary temp files in the 38961 compilation driver. 38962 38963 If you do not define this macro, GCC will use the default version. 38964 You should define this macro if the default version does not 38965 reliably remove the temp file as, for example, on VMS which allows 38966 multiple versions of a file. 38967 38968'HOST_LACKS_INODE_NUMBERS' 38969 Define this macro if the host filesystem does not report meaningful 38970 inode numbers in struct stat. 38971 38972 38973File: gccint.info, Node: Host Misc, Prev: Filesystem, Up: Host Config 38974 3897518.3 Host Misc 38976============== 38977 38978'FATAL_EXIT_CODE' 38979 A C expression for the status code to be returned when the compiler 38980 exits after serious errors. The default is the system-provided 38981 macro 'EXIT_FAILURE', or '1' if the system doesn't define that 38982 macro. Define this macro only if these defaults are incorrect. 38983 38984'SUCCESS_EXIT_CODE' 38985 A C expression for the status code to be returned when the compiler 38986 exits without serious errors. (Warnings are not serious errors.) 38987 The default is the system-provided macro 'EXIT_SUCCESS', or '0' if 38988 the system doesn't define that macro. Define this macro only if 38989 these defaults are incorrect. 38990 38991'USE_C_ALLOCA' 38992 Define this macro if GCC should use the C implementation of 38993 'alloca' provided by 'libiberty.a'. This only affects how some 38994 parts of the compiler itself allocate memory. It does not change 38995 code generation. 38996 38997 When GCC is built with a compiler other than itself, the C 'alloca' 38998 is always used. This is because most other implementations have 38999 serious bugs. You should define this macro only on a system where 39000 no stack-based 'alloca' can possibly work. For instance, if a 39001 system has a small limit on the size of the stack, GCC's builtin 39002 'alloca' will not work reliably. 39003 39004'COLLECT2_HOST_INITIALIZATION' 39005 If defined, a C statement (sans semicolon) that performs 39006 host-dependent initialization when 'collect2' is being initialized. 39007 39008'GCC_DRIVER_HOST_INITIALIZATION' 39009 If defined, a C statement (sans semicolon) that performs 39010 host-dependent initialization when a compilation driver is being 39011 initialized. 39012 39013'HOST_LONG_LONG_FORMAT' 39014 If defined, the string used to indicate an argument of type 'long 39015 long' to functions like 'printf'. The default value is '"ll"'. 39016 39017'HOST_LONG_FORMAT' 39018 If defined, the string used to indicate an argument of type 'long' 39019 to functions like 'printf'. The default value is '"l"'. 39020 39021'HOST_PTR_PRINTF' 39022 If defined, the string used to indicate an argument of type 'void 39023 *' to functions like 'printf'. The default value is '"%p"'. 39024 39025 In addition, if 'configure' generates an incorrect definition of any of 39026the macros in 'auto-host.h', you can override that definition in a host 39027configuration header. If you need to do this, first see if it is 39028possible to fix 'configure'. 39029 39030 39031File: gccint.info, Node: Fragments, Next: Collect2, Prev: Host Config, Up: Top 39032 3903319 Makefile Fragments 39034********************* 39035 39036When you configure GCC using the 'configure' script, it will construct 39037the file 'Makefile' from the template file 'Makefile.in'. When it does 39038this, it can incorporate makefile fragments from the 'config' directory. 39039These are used to set Makefile parameters that are not amenable to being 39040calculated by autoconf. The list of fragments to incorporate is set by 39041'config.gcc' (and occasionally 'config.build' and 'config.host'); *Note 39042System Config::. 39043 39044 Fragments are named either 't-TARGET' or 'x-HOST', depending on whether 39045they are relevant to configuring GCC to produce code for a particular 39046target, or to configuring GCC to run on a particular host. Here TARGET 39047and HOST are mnemonics which usually have some relationship to the 39048canonical system name, but no formal connection. 39049 39050 If these files do not exist, it means nothing needs to be added for a 39051given target or host. Most targets need a few 't-TARGET' fragments, but 39052needing 'x-HOST' fragments is rare. 39053 39054* Menu: 39055 39056* Target Fragment:: Writing 't-TARGET' files. 39057* Host Fragment:: Writing 'x-HOST' files. 39058 39059 39060File: gccint.info, Node: Target Fragment, Next: Host Fragment, Up: Fragments 39061 3906219.1 Target Makefile Fragments 39063============================== 39064 39065Target makefile fragments can set these Makefile variables. 39066 39067'LIBGCC2_CFLAGS' 39068 Compiler flags to use when compiling 'libgcc2.c'. 39069 39070'LIB2FUNCS_EXTRA' 39071 A list of source file names to be compiled or assembled and 39072 inserted into 'libgcc.a'. 39073 39074'CRTSTUFF_T_CFLAGS' 39075 Special flags used when compiling 'crtstuff.c'. *Note 39076 Initialization::. 39077 39078'CRTSTUFF_T_CFLAGS_S' 39079 Special flags used when compiling 'crtstuff.c' for shared linking. 39080 Used if you use 'crtbeginS.o' and 'crtendS.o' in 'EXTRA-PARTS'. 39081 *Note Initialization::. 39082 39083'MULTILIB_OPTIONS' 39084 For some targets, invoking GCC in different ways produces objects 39085 that can not be linked together. For example, for some targets GCC 39086 produces both big and little endian code. For these targets, you 39087 must arrange for multiple versions of 'libgcc.a' to be compiled, 39088 one for each set of incompatible options. When GCC invokes the 39089 linker, it arranges to link in the right version of 'libgcc.a', 39090 based on the command line options used. 39091 39092 The 'MULTILIB_OPTIONS' macro lists the set of options for which 39093 special versions of 'libgcc.a' must be built. Write options that 39094 are mutually incompatible side by side, separated by a slash. 39095 Write options that may be used together separated by a space. The 39096 build procedure will build all combinations of compatible options. 39097 39098 For example, if you set 'MULTILIB_OPTIONS' to 'm68000/m68020 39099 msoft-float', 'Makefile' will build special versions of 'libgcc.a' 39100 using the following sets of options: '-m68000', '-m68020', 39101 '-msoft-float', '-m68000 -msoft-float', and '-m68020 -msoft-float'. 39102 39103'MULTILIB_DIRNAMES' 39104 If 'MULTILIB_OPTIONS' is used, this variable specifies the 39105 directory names that should be used to hold the various libraries. 39106 Write one element in 'MULTILIB_DIRNAMES' for each element in 39107 'MULTILIB_OPTIONS'. If 'MULTILIB_DIRNAMES' is not used, the 39108 default value will be 'MULTILIB_OPTIONS', with all slashes treated 39109 as spaces. 39110 39111 'MULTILIB_DIRNAMES' describes the multilib directories using GCC 39112 conventions and is applied to directories that are part of the GCC 39113 installation. When multilib-enabled, the compiler will add a 39114 subdirectory of the form PREFIX/MULTILIB before each directory in 39115 the search path for libraries and crt files. 39116 39117 For example, if 'MULTILIB_OPTIONS' is set to 'm68000/m68020 39118 msoft-float', then the default value of 'MULTILIB_DIRNAMES' is 39119 'm68000 m68020 msoft-float'. You may specify a different value if 39120 you desire a different set of directory names. 39121 39122'MULTILIB_MATCHES' 39123 Sometimes the same option may be written in two different ways. If 39124 an option is listed in 'MULTILIB_OPTIONS', GCC needs to know about 39125 any synonyms. In that case, set 'MULTILIB_MATCHES' to a list of 39126 items of the form 'option=option' to describe all relevant 39127 synonyms. For example, 'm68000=mc68000 m68020=mc68020'. 39128 39129'MULTILIB_EXCEPTIONS' 39130 Sometimes when there are multiple sets of 'MULTILIB_OPTIONS' being 39131 specified, there are combinations that should not be built. In 39132 that case, set 'MULTILIB_EXCEPTIONS' to be all of the switch 39133 exceptions in shell case syntax that should not be built. 39134 39135 For example the ARM processor cannot execute both hardware floating 39136 point instructions and the reduced size THUMB instructions at the 39137 same time, so there is no need to build libraries with both of 39138 these options enabled. Therefore 'MULTILIB_EXCEPTIONS' is set to: 39139 *mthumb/*mhard-float* 39140 39141'MULTILIB_REQUIRED' 39142 Sometimes when there are only a few combinations are required, it 39143 would be a big effort to come up with a 'MULTILIB_EXCEPTIONS' list 39144 to cover all undesired ones. In such a case, just listing all the 39145 required combinations in 'MULTILIB_REQUIRED' would be more 39146 straightforward. 39147 39148 The way to specify the entries in 'MULTILIB_REQUIRED' is same with 39149 the way used for 'MULTILIB_EXCEPTIONS', only this time what are 39150 required will be specified. Suppose there are multiple sets of 39151 'MULTILIB_OPTIONS' and only two combinations are required, one for 39152 ARMv7-M and one for ARMv7-R with hard floating-point ABI and FPU, 39153 the 'MULTILIB_REQUIRED' can be set to: 39154 MULTILIB_REQUIRED = mthumb/march=armv7-m 39155 MULTILIB_REQUIRED += march=armv7-r/mfloat-abi=hard/mfpu=vfpv3-d16 39156 39157 The 'MULTILIB_REQUIRED' can be used together with 39158 'MULTILIB_EXCEPTIONS'. The option combinations generated from 39159 'MULTILIB_OPTIONS' will be filtered by 'MULTILIB_EXCEPTIONS' and 39160 then by 'MULTILIB_REQUIRED'. 39161 39162'MULTILIB_REUSE' 39163 Sometimes it is desirable to reuse one existing multilib for 39164 different sets of options. Such kind of reuse can minimize the 39165 number of multilib variants. And for some targets it is better to 39166 reuse an existing multilib than to fall back to default multilib 39167 when there is no corresponding multilib. This can be done by 39168 adding reuse rules to 'MULTILIB_REUSE'. 39169 39170 A reuse rule is comprised of two parts connected by equality sign. 39171 The left part is option set used to build multilib and the right 39172 part is option set that will reuse this multilib. The order of 39173 options in the left part matters and should be same with those 39174 specified in 'MULTILIB_REQUIRED' or aligned with order in 39175 'MULTILIB_OPTIONS'. There is no such limitation for options in 39176 right part as we don't build multilib from them. But the equality 39177 sign in both parts should be replaced with period. 39178 39179 The 'MULTILIB_REUSE' is different from 'MULTILIB_MATCHES' in that 39180 it sets up relations between two option sets rather than two 39181 options. Here is an example to demo how we reuse libraries built 39182 in Thumb mode for applications built in ARM mode: 39183 MULTILIB_REUSE = mthumb/march.armv7-r=marm/march.armv7-r 39184 39185 Before the advent of 'MULTILIB_REUSE', GCC select multilib by 39186 comparing command line options with options used to build multilib. 39187 The 'MULTILIB_REUSE' is complementary to that way. Only when the 39188 original comparison matches nothing it will work to see if it is OK 39189 to reuse some existing multilib. 39190 39191'MULTILIB_EXTRA_OPTS' 39192 Sometimes it is desirable that when building multiple versions of 39193 'libgcc.a' certain options should always be passed on to the 39194 compiler. In that case, set 'MULTILIB_EXTRA_OPTS' to be the list 39195 of options to be used for all builds. If you set this, you should 39196 probably set 'CRTSTUFF_T_CFLAGS' to a dash followed by it. 39197 39198'MULTILIB_OSDIRNAMES' 39199 If 'MULTILIB_OPTIONS' is used, this variable specifies a list of 39200 subdirectory names, that are used to modify the search path 39201 depending on the chosen multilib. Unlike 'MULTILIB_DIRNAMES', 39202 'MULTILIB_OSDIRNAMES' describes the multilib directories using 39203 operating systems conventions, and is applied to the directories 39204 such as 'lib' or those in the 'LIBRARY_PATH' environment variable. 39205 The format is either the same as of 'MULTILIB_DIRNAMES', or a set 39206 of mappings. When it is the same as 'MULTILIB_DIRNAMES', it 39207 describes the multilib directories using operating system 39208 conventions, rather than GCC conventions. When it is a set of 39209 mappings of the form GCCDIR=OSDIR, the left side gives the GCC 39210 convention and the right gives the equivalent OS defined location. 39211 If the OSDIR part begins with a '!', GCC will not search in the 39212 non-multilib directory and use exclusively the multilib directory. 39213 Otherwise, the compiler will examine the search path for libraries 39214 and crt files twice; the first time it will add MULTILIB to each 39215 directory in the search path, the second it will not. 39216 39217 For configurations that support both multilib and multiarch, 39218 'MULTILIB_OSDIRNAMES' also encodes the multiarch name, thus 39219 subsuming 'MULTIARCH_DIRNAME'. The multiarch name is appended to 39220 each directory name, separated by a colon (e.g. 39221 '../lib32:i386-linux-gnu'). 39222 39223 Each multiarch subdirectory will be searched before the 39224 corresponding OS multilib directory, for example 39225 '/lib/i386-linux-gnu' before '/lib/../lib32'. The multiarch name 39226 will also be used to modify the system header search path, as 39227 explained for 'MULTIARCH_DIRNAME'. 39228 39229'MULTIARCH_DIRNAME' 39230 This variable specifies the multiarch name for configurations that 39231 are multiarch-enabled but not multilibbed configurations. 39232 39233 The multiarch name is used to augment the search path for 39234 libraries, crt files and system header files with additional 39235 locations. The compiler will add a multiarch subdirectory of the 39236 form PREFIX/MULTIARCH before each directory in the library and crt 39237 search path. It will also add two directories 39238 'LOCAL_INCLUDE_DIR'/MULTIARCH and 39239 'NATIVE_SYSTEM_HEADER_DIR'/MULTIARCH) to the system header search 39240 path, respectively before 'LOCAL_INCLUDE_DIR' and 39241 'NATIVE_SYSTEM_HEADER_DIR'. 39242 39243 'MULTIARCH_DIRNAME' is not used for configurations that support 39244 both multilib and multiarch. In that case, multiarch names are 39245 encoded in 'MULTILIB_OSDIRNAMES' instead. 39246 39247 More documentation about multiarch can be found at 39248 <https://wiki.debian.org/Multiarch>. 39249 39250'SPECS' 39251 Unfortunately, setting 'MULTILIB_EXTRA_OPTS' is not enough, since 39252 it does not affect the build of target libraries, at least not the 39253 build of the default multilib. One possible work-around is to use 39254 'DRIVER_SELF_SPECS' to bring options from the 'specs' file as if 39255 they had been passed in the compiler driver command line. However, 39256 you don't want to be adding these options after the toolchain is 39257 installed, so you can instead tweak the 'specs' file that will be 39258 used during the toolchain build, while you still install the 39259 original, built-in 'specs'. The trick is to set 'SPECS' to some 39260 other filename (say 'specs.install'), that will then be created out 39261 of the built-in specs, and introduce a 'Makefile' rule to generate 39262 the 'specs' file that's going to be used at build time out of your 39263 'specs.install'. 39264 39265'T_CFLAGS' 39266 These are extra flags to pass to the C compiler. They are used 39267 both when building GCC, and when compiling things with the 39268 just-built GCC. This variable is deprecated and should not be 39269 used. 39270 39271 39272File: gccint.info, Node: Host Fragment, Prev: Target Fragment, Up: Fragments 39273 3927419.2 Host Makefile Fragments 39275============================ 39276 39277The use of 'x-HOST' fragments is discouraged. You should only use it 39278for makefile dependencies. 39279 39280 39281File: gccint.info, Node: Collect2, Next: Header Dirs, Prev: Fragments, Up: Top 39282 3928320 'collect2' 39284************* 39285 39286GCC uses a utility called 'collect2' on nearly all systems to arrange to 39287call various initialization functions at start time. 39288 39289 The program 'collect2' works by linking the program once and looking 39290through the linker output file for symbols with particular names 39291indicating they are constructor functions. If it finds any, it creates 39292a new temporary '.c' file containing a table of them, compiles it, and 39293links the program a second time including that file. 39294 39295 The actual calls to the constructors are carried out by a subroutine 39296called '__main', which is called (automatically) at the beginning of the 39297body of 'main' (provided 'main' was compiled with GNU CC). Calling 39298'__main' is necessary, even when compiling C code, to allow linking C 39299and C++ object code together. (If you use '-nostdlib', you get an 39300unresolved reference to '__main', since it's defined in the standard GCC 39301library. Include '-lgcc' at the end of your compiler command line to 39302resolve this reference.) 39303 39304 The program 'collect2' is installed as 'ld' in the directory where the 39305passes of the compiler are installed. When 'collect2' needs to find the 39306_real_ 'ld', it tries the following file names: 39307 39308 * a hard coded linker file name, if GCC was configured with the 39309 '--with-ld' option. 39310 39311 * 'real-ld' in the directories listed in the compiler's search 39312 directories. 39313 39314 * 'real-ld' in the directories listed in the environment variable 39315 'PATH'. 39316 39317 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 39318 if specified. 39319 39320 * 'ld' in the compiler's search directories, except that 'collect2' 39321 will not execute itself recursively. 39322 39323 * 'ld' in 'PATH'. 39324 39325 "The compiler's search directories" means all the directories where 39326'gcc' searches for passes of the compiler. This includes directories 39327that you specify with '-B'. 39328 39329 Cross-compilers search a little differently: 39330 39331 * 'real-ld' in the compiler's search directories. 39332 39333 * 'TARGET-real-ld' in 'PATH'. 39334 39335 * The file specified in the 'REAL_LD_FILE_NAME' configuration macro, 39336 if specified. 39337 39338 * 'ld' in the compiler's search directories. 39339 39340 * 'TARGET-ld' in 'PATH'. 39341 39342 'collect2' explicitly avoids running 'ld' using the file name under 39343which 'collect2' itself was invoked. In fact, it remembers up a list of 39344such names--in case one copy of 'collect2' finds another copy (or 39345version) of 'collect2' installed as 'ld' in a second place in the search 39346path. 39347 39348 'collect2' searches for the utilities 'nm' and 'strip' using the same 39349algorithm as above for 'ld'. 39350 39351 39352File: gccint.info, Node: Header Dirs, Next: Type Information, Prev: Collect2, Up: Top 39353 3935421 Standard Header File Directories 39355*********************************** 39356 39357'GCC_INCLUDE_DIR' means the same thing for native and cross. It is 39358where GCC stores its private include files, and also where GCC stores 39359the fixed include files. A cross compiled GCC runs 'fixincludes' on the 39360header files in '$(tooldir)/include'. (If the cross compilation header 39361files need to be fixed, they must be installed before GCC is built. If 39362the cross compilation header files are already suitable for GCC, nothing 39363special need be done). 39364 39365 'GPLUSPLUS_INCLUDE_DIR' means the same thing for native and cross. It 39366is where 'g++' looks first for header files. The C++ library installs 39367only target independent header files in that directory. 39368 39369 'LOCAL_INCLUDE_DIR' is used only by native compilers. GCC doesn't 39370install anything there. It is normally '/usr/local/include'. This is 39371where local additions to a packaged system should place header files. 39372 39373 'CROSS_INCLUDE_DIR' is used only by cross compilers. GCC doesn't 39374install anything there. 39375 39376 'TOOL_INCLUDE_DIR' is used for both native and cross compilers. It is 39377the place for other packages to install header files that GCC will use. 39378For a cross-compiler, this is the equivalent of '/usr/include'. When 39379you build a cross-compiler, 'fixincludes' processes any header files in 39380this directory. 39381 39382 39383File: gccint.info, Node: Type Information, Next: Plugins, Prev: Header Dirs, Up: Top 39384 3938522 Memory Management and Type Information 39386***************************************** 39387 39388GCC uses some fairly sophisticated memory management techniques, which 39389involve determining information about GCC's data structures from GCC's 39390source code and using this information to perform garbage collection and 39391implement precompiled headers. 39392 39393 A full C++ parser would be too complicated for this task, so a limited 39394subset of C++ is interpreted and special markers are used to determine 39395what parts of the source to look at. All 'struct', 'union' and 39396'template' structure declarations that define data structures that are 39397allocated under control of the garbage collector must be marked. All 39398global variables that hold pointers to garbage-collected memory must 39399also be marked. Finally, all global variables that need to be saved and 39400restored by a precompiled header must be marked. (The precompiled 39401header mechanism can only save static variables if they're scalar. 39402Complex data structures must be allocated in garbage-collected memory to 39403be saved in a precompiled header.) 39404 39405 The full format of a marker is 39406 GTY (([OPTION] [(PARAM)], [OPTION] [(PARAM)] ...)) 39407but in most cases no options are needed. The outer double parentheses 39408are still necessary, though: 'GTY(())'. Markers can appear: 39409 39410 * In a structure definition, before the open brace; 39411 * In a global variable declaration, after the keyword 'static' or 39412 'extern'; and 39413 * In a structure field definition, before the name of the field. 39414 39415 Here are some examples of marking simple data structures and globals. 39416 39417 struct GTY(()) TAG 39418 { 39419 FIELDS... 39420 }; 39421 39422 typedef struct GTY(()) TAG 39423 { 39424 FIELDS... 39425 } *TYPENAME; 39426 39427 static GTY(()) struct TAG *LIST; /* points to GC memory */ 39428 static GTY(()) int COUNTER; /* save counter in a PCH */ 39429 39430 The parser understands simple typedefs such as 'typedef struct TAG 39431*NAME;' and 'typedef int NAME;'. These don't need to be marked. 39432 39433 Since 'gengtype''s understanding of C++ is limited, there are several 39434constructs and declarations that are not supported inside 39435classes/structures marked for automatic GC code generation. The 39436following C++ constructs produce a 'gengtype' error on 39437structures/classes marked for automatic GC code generation: 39438 39439 * Type definitions inside classes/structures are not supported. 39440 * Enumerations inside classes/structures are not supported. 39441 39442 If you have a class or structure using any of the above constructs, you 39443need to mark that class as 'GTY ((user))' and provide your own marking 39444routines (see section *note User GC:: for details). 39445 39446 It is always valid to include function definitions inside classes. 39447Those are always ignored by 'gengtype', as it only cares about data 39448members. 39449 39450* Menu: 39451 39452* GTY Options:: What goes inside a 'GTY(())'. 39453* Inheritance and GTY:: Adding GTY to a class hierarchy. 39454* User GC:: Adding user-provided GC marking routines. 39455* GGC Roots:: Making global variables GGC roots. 39456* Files:: How the generated files work. 39457* Invoking the garbage collector:: How to invoke the garbage collector. 39458* Troubleshooting:: When something does not work as expected. 39459 39460 39461File: gccint.info, Node: GTY Options, Next: Inheritance and GTY, Up: Type Information 39462 3946322.1 The Inside of a 'GTY(())' 39464============================== 39465 39466Sometimes the C code is not enough to fully describe the type structure. 39467Extra information can be provided with 'GTY' options and additional 39468markers. Some options take a parameter, which may be either a string or 39469a type name, depending on the parameter. If an option takes no 39470parameter, it is acceptable either to omit the parameter entirely, or to 39471provide an empty string as a parameter. For example, 'GTY ((skip))' and 39472'GTY ((skip ("")))' are equivalent. 39473 39474 When the parameter is a string, often it is a fragment of C code. Four 39475special escapes may be used in these strings, to refer to pieces of the 39476data structure being marked: 39477 39478'%h' 39479 The current structure. 39480'%1' 39481 The structure that immediately contains the current structure. 39482'%0' 39483 The outermost structure that contains the current structure. 39484'%a' 39485 A partial expression of the form '[i1][i2]...' that indexes the 39486 array item currently being marked. 39487 39488 For instance, suppose that you have a structure of the form 39489 struct A { 39490 ... 39491 }; 39492 struct B { 39493 struct A foo[12]; 39494 }; 39495and 'b' is a variable of type 'struct B'. When marking 'b.foo[11]', 39496'%h' would expand to 'b.foo[11]', '%0' and '%1' would both expand to 39497'b', and '%a' would expand to '[11]'. 39498 39499 As in ordinary C, adjacent strings will be concatenated; this is 39500helpful when you have a complicated expression. 39501 GTY ((chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE" 39502 " ? TYPE_NEXT_VARIANT (&%h.generic)" 39503 " : TREE_CHAIN (&%h.generic)"))) 39504 39505 The available options are: 39506 39507'length ("EXPRESSION")' 39508 39509 There are two places the type machinery will need to be explicitly 39510 told the length of an array of non-atomic objects. The first case 39511 is when a structure ends in a variable-length array, like this: 39512 struct GTY(()) rtvec_def { 39513 int num_elem; /* number of elements */ 39514 rtx GTY ((length ("%h.num_elem"))) elem[1]; 39515 }; 39516 39517 In this case, the 'length' option is used to override the specified 39518 array length (which should usually be '1'). The parameter of the 39519 option is a fragment of C code that calculates the length. 39520 39521 The second case is when a structure or a global variable contains a 39522 pointer to an array, like this: 39523 struct gimple_omp_for_iter * GTY((length ("%h.collapse"))) iter; 39524 In this case, 'iter' has been allocated by writing something like 39525 x->iter = ggc_alloc_cleared_vec_gimple_omp_for_iter (collapse); 39526 and the 'collapse' provides the length of the field. 39527 39528 This second use of 'length' also works on global variables, like: 39529 static GTY((length("reg_known_value_size"))) rtx *reg_known_value; 39530 39531 Note that the 'length' option is only meant for use with arrays of 39532 non-atomic objects, that is, objects that contain pointers pointing 39533 to other GTY-managed objects. For other GC-allocated arrays and 39534 strings you should use 'atomic'. 39535 39536'skip' 39537 39538 If 'skip' is applied to a field, the type machinery will ignore it. 39539 This is somewhat dangerous; the only safe use is in a union when 39540 one field really isn't ever used. 39541 39542 Use this to mark types that need to be marked by user gc routines, 39543 but are not refered to in a template argument. So if you have some 39544 user gc type T1 and a non user gc type T2 you can give T2 the 39545 for_user option so that the marking functions for T1 can call non 39546 mangled functions to mark T2. 39547 39548'desc ("EXPRESSION")' 39549'tag ("CONSTANT")' 39550'default' 39551 39552 The type machinery needs to be told which field of a 'union' is 39553 currently active. This is done by giving each field a constant 39554 'tag' value, and then specifying a discriminator using 'desc'. The 39555 value of the expression given by 'desc' is compared against each 39556 'tag' value, each of which should be different. If no 'tag' is 39557 matched, the field marked with 'default' is used if there is one, 39558 otherwise no field in the union will be marked. 39559 39560 In the 'desc' option, the "current structure" is the union that it 39561 discriminates. Use '%1' to mean the structure containing it. 39562 There are no escapes available to the 'tag' option, since it is a 39563 constant. 39564 39565 For example, 39566 struct GTY(()) tree_binding 39567 { 39568 struct tree_common common; 39569 union tree_binding_u { 39570 tree GTY ((tag ("0"))) scope; 39571 struct cp_binding_level * GTY ((tag ("1"))) level; 39572 } GTY ((desc ("BINDING_HAS_LEVEL_P ((tree)&%0)"))) xscope; 39573 tree value; 39574 }; 39575 39576 In this example, the value of BINDING_HAS_LEVEL_P when applied to a 39577 'struct tree_binding *' is presumed to be 0 or 1. If 1, the type 39578 mechanism will treat the field 'level' as being present and if 0, 39579 will treat the field 'scope' as being present. 39580 39581 The 'desc' and 'tag' options can also be used for inheritance to 39582 denote which subclass an instance is. See *note Inheritance and 39583 GTY:: for more information. 39584 39585'cache' 39586 39587 When the 'cache' option is applied to a global variable 39588 gt_clear_cache is called on that variable between the mark and 39589 sweep phases of garbage collection. The gt_clear_cache function is 39590 free to mark blocks as used, or to clear pointers in the variable. 39591 39592'deletable' 39593 39594 'deletable', when applied to a global variable, indicates that when 39595 garbage collection runs, there's no need to mark anything pointed 39596 to by this variable, it can just be set to 'NULL' instead. This is 39597 used to keep a list of free structures around for re-use. 39598 39599'maybe_undef' 39600 39601 When applied to a field, 'maybe_undef' indicates that it's OK if 39602 the structure that this fields points to is never defined, so long 39603 as this field is always 'NULL'. This is used to avoid requiring 39604 backends to define certain optional structures. It doesn't work 39605 with language frontends. 39606 39607'nested_ptr (TYPE, "TO EXPRESSION", "FROM EXPRESSION")' 39608 39609 The type machinery expects all pointers to point to the start of an 39610 object. Sometimes for abstraction purposes it's convenient to have 39611 a pointer which points inside an object. So long as it's possible 39612 to convert the original object to and from the pointer, such 39613 pointers can still be used. TYPE is the type of the original 39614 object, the TO EXPRESSION returns the pointer given the original 39615 object, and the FROM EXPRESSION returns the original object given 39616 the pointer. The pointer will be available using the '%h' escape. 39617 39618'chain_next ("EXPRESSION")' 39619'chain_prev ("EXPRESSION")' 39620'chain_circular ("EXPRESSION")' 39621 39622 It's helpful for the type machinery to know if objects are often 39623 chained together in long lists; this lets it generate code that 39624 uses less stack space by iterating along the list instead of 39625 recursing down it. 'chain_next' is an expression for the next item 39626 in the list, 'chain_prev' is an expression for the previous item. 39627 For singly linked lists, use only 'chain_next'; for doubly linked 39628 lists, use both. The machinery requires that taking the next item 39629 of the previous item gives the original item. 'chain_circular' is 39630 similar to 'chain_next', but can be used for circular single linked 39631 lists. 39632 39633'reorder ("FUNCTION NAME")' 39634 39635 Some data structures depend on the relative ordering of pointers. 39636 If the precompiled header machinery needs to change that ordering, 39637 it will call the function referenced by the 'reorder' option, 39638 before changing the pointers in the object that's pointed to by the 39639 field the option applies to. The function must take four 39640 arguments, with the signature 39641 'void *, void *, gt_pointer_operator, void *'. The first parameter 39642 is a pointer to the structure that contains the object being 39643 updated, or the object itself if there is no containing structure. 39644 The second parameter is a cookie that should be ignored. The third 39645 parameter is a routine that, given a pointer, will update it to its 39646 correct new value. The fourth parameter is a cookie that must be 39647 passed to the second parameter. 39648 39649 PCH cannot handle data structures that depend on the absolute 39650 values of pointers. 'reorder' functions can be expensive. When 39651 possible, it is better to depend on properties of the data, like an 39652 ID number or the hash of a string instead. 39653 39654'atomic' 39655 39656 The 'atomic' option can only be used with pointers. It informs the 39657 GC machinery that the memory that the pointer points to does not 39658 contain any pointers, and hence it should be treated by the GC and 39659 PCH machinery as an "atomic" block of memory that does not need to 39660 be examined when scanning memory for pointers. In particular, the 39661 machinery will not scan that memory for pointers to mark them as 39662 reachable (when marking pointers for GC) or to relocate them (when 39663 writing a PCH file). 39664 39665 The 'atomic' option differs from the 'skip' option. 'atomic' keeps 39666 the memory under Garbage Collection, but makes the GC ignore the 39667 contents of the memory. 'skip' is more drastic in that it causes 39668 the pointer and the memory to be completely ignored by the Garbage 39669 Collector. So, memory marked as 'atomic' is automatically freed 39670 when no longer reachable, while memory marked as 'skip' is not. 39671 39672 The 'atomic' option must be used with great care, because all sorts 39673 of problem can occur if used incorrectly, that is, if the memory 39674 the pointer points to does actually contain a pointer. 39675 39676 Here is an example of how to use it: 39677 struct GTY(()) my_struct { 39678 int number_of_elements; 39679 unsigned int * GTY ((atomic)) elements; 39680 }; 39681 In this case, 'elements' is a pointer under GC, and the memory it 39682 points to needs to be allocated using the Garbage Collector, and 39683 will be freed automatically by the Garbage Collector when it is no 39684 longer referenced. But the memory that the pointer points to is an 39685 array of 'unsigned int' elements, and the GC must not try to scan 39686 it to find pointers to mark or relocate, which is why it is marked 39687 with the 'atomic' option. 39688 39689 Note that, currently, global variables can not be marked with 39690 'atomic'; only fields of a struct can. This is a known limitation. 39691 It would be useful to be able to mark global pointers with 'atomic' 39692 to make the PCH machinery aware of them so that they are saved and 39693 restored correctly to PCH files. 39694 39695'special ("NAME")' 39696 39697 The 'special' option is used to mark types that have to be dealt 39698 with by special case machinery. The parameter is the name of the 39699 special case. See 'gengtype.c' for further details. Avoid adding 39700 new special cases unless there is no other alternative. 39701 39702'user' 39703 39704 The 'user' option indicates that the code to mark structure fields 39705 is completely handled by user-provided routines. See section *note 39706 User GC:: for details on what functions need to be provided. 39707 39708 39709File: gccint.info, Node: Inheritance and GTY, Next: User GC, Prev: GTY Options, Up: Type Information 39710 3971122.2 Support for inheritance 39712============================ 39713 39714gengtype has some support for simple class hierarchies. You can use 39715this to have gengtype autogenerate marking routines, provided: 39716 39717 * There must be a concrete base class, with a discriminator 39718 expression that can be used to identify which subclass an instance 39719 is. 39720 * Only single inheritance is used. 39721 * None of the classes within the hierarchy are templates. 39722 39723 If your class hierarchy does not fit in this pattern, you must use 39724*note User GC:: instead. 39725 39726 The base class and its discriminator must be identified using the 39727"desc" option. Each concrete subclass must use the "tag" option to 39728identify which value of the discriminator it corresponds to. 39729 39730 Every class in the hierarchy must have a 'GTY(())' marker, as gengtype 39731will only attempt to parse classes that have such a marker (1). 39732 39733 class GTY((desc("%h.kind"), tag("0"))) example_base 39734 { 39735 public: 39736 int kind; 39737 tree a; 39738 }; 39739 39740 class GTY((tag("1"))) some_subclass : public example_base 39741 { 39742 public: 39743 tree b; 39744 }; 39745 39746 class GTY((tag("2"))) some_other_subclass : public example_base 39747 { 39748 public: 39749 tree c; 39750 }; 39751 39752 The generated marking routines for the above will contain a "switch" on 39753"kind", visiting all appropriate fields. For example, if kind is 2, it 39754will cast to "some_other_subclass" and visit fields a, b, and c. 39755 39756 ---------- Footnotes ---------- 39757 39758 (1) Classes lacking such a marker will not be identified as being 39759part of the hierarchy, and so the marking routines will not handle them, 39760leading to a assertion failure within the marking routines due to an 39761unknown tag value (assuming that assertions are enabled). 39762 39763 39764File: gccint.info, Node: User GC, Next: GGC Roots, Prev: Inheritance and GTY, Up: Type Information 39765 3976622.3 Support for user-provided GC marking routines 39767================================================== 39768 39769The garbage collector supports types for which no automatic marking code 39770is generated. For these types, the user is required to provide three 39771functions: one to act as a marker for garbage collection, and two 39772functions to act as marker and pointer walker for pre-compiled headers. 39773 39774 Given a structure 'struct GTY((user)) my_struct', the following 39775functions should be defined to mark 'my_struct': 39776 39777 void gt_ggc_mx (my_struct *p) 39778 { 39779 /* This marks field 'fld'. */ 39780 gt_ggc_mx (p->fld); 39781 } 39782 39783 void gt_pch_nx (my_struct *p) 39784 { 39785 /* This marks field 'fld'. */ 39786 gt_pch_nx (tp->fld); 39787 } 39788 39789 void gt_pch_nx (my_struct *p, gt_pointer_operator op, void *cookie) 39790 { 39791 /* For every field 'fld', call the given pointer operator. */ 39792 op (&(tp->fld), cookie); 39793 } 39794 39795 In general, each marker 'M' should call 'M' for every pointer field in 39796the structure. Fields that are not allocated in GC or are not pointers 39797must be ignored. 39798 39799 For embedded lists (e.g., structures with a 'next' or 'prev' pointer), 39800the marker must follow the chain and mark every element in it. 39801 39802 Note that the rules for the pointer walker 'gt_pch_nx (my_struct *, 39803gt_pointer_operator, void *)' are slightly different. In this case, the 39804operation 'op' must be applied to the _address_ of every pointer field. 39805 3980622.3.1 User-provided marking routines for template types 39807-------------------------------------------------------- 39808 39809When a template type 'TP' is marked with 'GTY', all instances of that 39810type are considered user-provided types. This means that the individual 39811instances of 'TP' do not need to be marked with 'GTY'. The user needs 39812to provide template functions to mark all the fields of the type. 39813 39814 The following code snippets represent all the functions that need to be 39815provided. Note that type 'TP' may reference to more than one type. In 39816these snippets, there is only one type 'T', but there could be more. 39817 39818 template<typename T> 39819 void gt_ggc_mx (TP<T> *tp) 39820 { 39821 extern void gt_ggc_mx (T&); 39822 39823 /* This marks field 'fld' of type 'T'. */ 39824 gt_ggc_mx (tp->fld); 39825 } 39826 39827 template<typename T> 39828 void gt_pch_nx (TP<T> *tp) 39829 { 39830 extern void gt_pch_nx (T&); 39831 39832 /* This marks field 'fld' of type 'T'. */ 39833 gt_pch_nx (tp->fld); 39834 } 39835 39836 template<typename T> 39837 void gt_pch_nx (TP<T *> *tp, gt_pointer_operator op, void *cookie) 39838 { 39839 /* For every field 'fld' of 'tp' with type 'T *', call the given 39840 pointer operator. */ 39841 op (&(tp->fld), cookie); 39842 } 39843 39844 template<typename T> 39845 void gt_pch_nx (TP<T> *tp, gt_pointer_operator, void *cookie) 39846 { 39847 extern void gt_pch_nx (T *, gt_pointer_operator, void *); 39848 39849 /* For every field 'fld' of 'tp' with type 'T', call the pointer 39850 walker for all the fields of T. */ 39851 gt_pch_nx (&(tp->fld), op, cookie); 39852 } 39853 39854 Support for user-defined types is currently limited. The following 39855restrictions apply: 39856 39857 1. Type 'TP' and all the argument types 'T' must be marked with 'GTY'. 39858 39859 2. Type 'TP' can only have type names in its argument list. 39860 39861 3. The pointer walker functions are different for 'TP<T>' and 'TP<T 39862 *>'. In the case of 'TP<T>', references to 'T' must be handled by 39863 calling 'gt_pch_nx' (which will, in turn, walk all the pointers 39864 inside fields of 'T'). In the case of 'TP<T *>', references to 'T 39865 *' must be handled by calling the 'op' function on the address of 39866 the pointer (see the code snippets above). 39867 39868 39869File: gccint.info, Node: GGC Roots, Next: Files, Prev: User GC, Up: Type Information 39870 3987122.4 Marking Roots for the Garbage Collector 39872============================================ 39873 39874In addition to keeping track of types, the type machinery also locates 39875the global variables ("roots") that the garbage collector starts at. 39876Roots must be declared using one of the following syntaxes: 39877 39878 * 'extern GTY(([OPTIONS])) TYPE NAME;' 39879 * 'static GTY(([OPTIONS])) TYPE NAME;' 39880The syntax 39881 * 'GTY(([OPTIONS])) TYPE NAME;' 39882is _not_ accepted. There should be an 'extern' declaration of such a 39883variable in a header somewhere--mark that, not the definition. Or, if 39884the variable is only used in one file, make it 'static'. 39885 39886 39887File: gccint.info, Node: Files, Next: Invoking the garbage collector, Prev: GGC Roots, Up: Type Information 39888 3988922.5 Source Files Containing Type Information 39890============================================= 39891 39892Whenever you add 'GTY' markers to a source file that previously had 39893none, or create a new source file containing 'GTY' markers, there are 39894three things you need to do: 39895 39896 1. You need to add the file to the list of source files the type 39897 machinery scans. There are four cases: 39898 39899 a. For a back-end file, this is usually done automatically; if 39900 not, you should add it to 'target_gtfiles' in the appropriate 39901 port's entries in 'config.gcc'. 39902 39903 b. For files shared by all front ends, add the filename to the 39904 'GTFILES' variable in 'Makefile.in'. 39905 39906 c. For files that are part of one front end, add the filename to 39907 the 'gtfiles' variable defined in the appropriate 39908 'config-lang.in'. Headers should appear before non-headers in 39909 this list. 39910 39911 d. For files that are part of some but not all front ends, add 39912 the filename to the 'gtfiles' variable of _all_ the front ends 39913 that use it. 39914 39915 2. If the file was a header file, you'll need to check that it's 39916 included in the right place to be visible to the generated files. 39917 For a back-end header file, this should be done automatically. For 39918 a front-end header file, it needs to be included by the same file 39919 that includes 'gtype-LANG.h'. For other header files, it needs to 39920 be included in 'gtype-desc.c', which is a generated file, so add it 39921 to 'ifiles' in 'open_base_file' in 'gengtype.c'. 39922 39923 For source files that aren't header files, the machinery will 39924 generate a header file that should be included in the source file 39925 you just changed. The file will be called 'gt-PATH.h' where PATH 39926 is the pathname relative to the 'gcc' directory with slashes 39927 replaced by -, so for example the header file to be included in 39928 'cp/parser.c' is called 'gt-cp-parser.c'. The generated header 39929 file should be included after everything else in the source file. 39930 Don't forget to mention this file as a dependency in the 39931 'Makefile'! 39932 39933 For language frontends, there is another file that needs to be included 39934somewhere. It will be called 'gtype-LANG.h', where LANG is the name of 39935the subdirectory the language is contained in. 39936 39937 Plugins can add additional root tables. Run the 'gengtype' utility in 39938plugin mode as 'gengtype -P pluginout.h SOURCE-DIR FILE-LIST PLUGIN*.C' 39939with your plugin files PLUGIN*.C using 'GTY' to generate the PLUGINOUT.H 39940file. The GCC build tree is needed to be present in that mode. 39941 39942 39943File: gccint.info, Node: Invoking the garbage collector, Next: Troubleshooting, Prev: Files, Up: Type Information 39944 3994522.6 How to invoke the garbage collector 39946======================================== 39947 39948The GCC garbage collector GGC is only invoked explicitly. In contrast 39949with many other garbage collectors, it is not implicitly invoked by 39950allocation routines when a lot of memory has been consumed. So the only 39951way to have GGC reclaim storage is to call the 'ggc_collect' function 39952explicitly. This call is an expensive operation, as it may have to scan 39953the entire heap. Beware that local variables (on the GCC call stack) 39954are not followed by such an invocation (as many other garbage collectors 39955do): you should reference all your data from static or external 'GTY'-ed 39956variables, and it is advised to call 'ggc_collect' with a shallow call 39957stack. The GGC is an exact mark and sweep garbage collector (so it does 39958not scan the call stack for pointers). In practice GCC passes don't 39959often call 'ggc_collect' themselves, because it is called by the pass 39960manager between passes. 39961 39962 At the time of the 'ggc_collect' call all pointers in the GC-marked 39963structures must be valid or 'NULL'. In practice this means that there 39964should not be uninitialized pointer fields in the structures even if 39965your code never reads or writes those fields at a particular instance. 39966One way to ensure this is to use cleared versions of allocators unless 39967all the fields are initialized manually immediately after allocation. 39968 39969 39970File: gccint.info, Node: Troubleshooting, Prev: Invoking the garbage collector, Up: Type Information 39971 3997222.7 Troubleshooting the garbage collector 39973========================================== 39974 39975With the current garbage collector implementation, most issues should 39976show up as GCC compilation errors. Some of the most commonly 39977encountered issues are described below. 39978 39979 * Gengtype does not produce allocators for a 'GTY'-marked type. 39980 Gengtype checks if there is at least one possible path from GC 39981 roots to at least one instance of each type before outputting 39982 allocators. If there is no such path, the 'GTY' markers will be 39983 ignored and no allocators will be output. Solve this by making 39984 sure that there exists at least one such path. If creating it is 39985 unfeasible or raises a "code smell", consider if you really must 39986 use GC for allocating such type. 39987 39988 * Link-time errors about undefined 'gt_ggc_r_foo_bar' and 39989 similarly-named symbols. Check if your 'foo_bar' source file has 39990 '#include "gt-foo_bar.h"' as its very last line. 39991 39992 39993File: gccint.info, Node: Plugins, Next: LTO, Prev: Type Information, Up: Top 39994 3999523 Plugins 39996********** 39997 39998GCC plugins are loadable modules that provide extra features to the 39999compiler. Like GCC itself they can be distributed in source and binary 40000forms. 40001 40002 GCC plugins provide developers with a rich subset of the GCC API to 40003allow them to extend GCC as they see fit. Whether it is writing an 40004additional optimization pass, transforming code, or analyzing 40005information, plugins can be quite useful. 40006 40007* Menu: 40008 40009* Plugins loading:: How can we load plugins. 40010* Plugin API:: The APIs for plugins. 40011* Plugins pass:: How a plugin interact with the pass manager. 40012* Plugins GC:: How a plugin Interact with GCC Garbage Collector. 40013* Plugins description:: Giving information about a plugin itself. 40014* Plugins attr:: Registering custom attributes or pragmas. 40015* Plugins recording:: Recording information about pass execution. 40016* Plugins gate:: Controlling which passes are being run. 40017* Plugins tracking:: Keeping track of available passes. 40018* Plugins building:: How can we build a plugin. 40019 40020 40021File: gccint.info, Node: Plugins loading, Next: Plugin API, Up: Plugins 40022 4002323.1 Loading Plugins 40024==================== 40025 40026Plugins are supported on platforms that support '-ldl -rdynamic'. They 40027are loaded by the compiler using 'dlopen' and invoked at pre-determined 40028locations in the compilation process. 40029 40030 Plugins are loaded with 40031 40032 '-fplugin=/path/to/NAME.so' '-fplugin-arg-NAME-KEY1[=VALUE1]' 40033 40034 The plugin arguments are parsed by GCC and passed to respective plugins 40035as key-value pairs. Multiple plugins can be invoked by specifying 40036multiple '-fplugin' arguments. 40037 40038 A plugin can be simply given by its short name (no dots or slashes). 40039When simply passing '-fplugin=NAME', the plugin is loaded from the 40040'plugin' directory, so '-fplugin=NAME' is the same as '-fplugin=`gcc 40041-print-file-name=plugin`/NAME.so', using backquote shell syntax to query 40042the 'plugin' directory. 40043 40044 40045File: gccint.info, Node: Plugin API, Next: Plugins pass, Prev: Plugins loading, Up: Plugins 40046 4004723.2 Plugin API 40048=============== 40049 40050Plugins are activated by the compiler at specific events as defined in 40051'gcc-plugin.h'. For each event of interest, the plugin should call 40052'register_callback' specifying the name of the event and address of the 40053callback function that will handle that event. 40054 40055 The header 'gcc-plugin.h' must be the first gcc header to be included. 40056 4005723.2.1 Plugin license check 40058--------------------------- 40059 40060Every plugin should define the global symbol 'plugin_is_GPL_compatible' 40061to assert that it has been licensed under a GPL-compatible license. If 40062this symbol does not exist, the compiler will emit a fatal error and 40063exit with the error message: 40064 40065 fatal error: plugin NAME is not licensed under a GPL-compatible license 40066 NAME: undefined symbol: plugin_is_GPL_compatible 40067 compilation terminated 40068 40069 The declared type of the symbol should be int, to match a forward 40070declaration in 'gcc-plugin.h' that suppresses C++ mangling. It does not 40071need to be in any allocated section, though. The compiler merely 40072asserts that the symbol exists in the global scope. Something like this 40073is enough: 40074 40075 int plugin_is_GPL_compatible; 40076 4007723.2.2 Plugin initialization 40078---------------------------- 40079 40080Every plugin should export a function called 'plugin_init' that is 40081called right after the plugin is loaded. This function is responsible 40082for registering all the callbacks required by the plugin and do any 40083other required initialization. 40084 40085 This function is called from 'compile_file' right before invoking the 40086parser. The arguments to 'plugin_init' are: 40087 40088 * 'plugin_info': Plugin invocation information. 40089 * 'version': GCC version. 40090 40091 The 'plugin_info' struct is defined as follows: 40092 40093 struct plugin_name_args 40094 { 40095 char *base_name; /* Short name of the plugin 40096 (filename without .so suffix). */ 40097 const char *full_name; /* Path to the plugin as specified with 40098 -fplugin=. */ 40099 int argc; /* Number of arguments specified with 40100 -fplugin-arg-.... */ 40101 struct plugin_argument *argv; /* Array of ARGC key-value pairs. */ 40102 const char *version; /* Version string provided by plugin. */ 40103 const char *help; /* Help string provided by plugin. */ 40104 } 40105 40106 If initialization fails, 'plugin_init' must return a non-zero value. 40107Otherwise, it should return 0. 40108 40109 The version of the GCC compiler loading the plugin is described by the 40110following structure: 40111 40112 struct plugin_gcc_version 40113 { 40114 const char *basever; 40115 const char *datestamp; 40116 const char *devphase; 40117 const char *revision; 40118 const char *configuration_arguments; 40119 }; 40120 40121 The function 'plugin_default_version_check' takes two pointers to such 40122structure and compare them field by field. It can be used by the 40123plugin's 'plugin_init' function. 40124 40125 The version of GCC used to compile the plugin can be found in the 40126symbol 'gcc_version' defined in the header 'plugin-version.h'. The 40127recommended version check to perform looks like 40128 40129 #include "plugin-version.h" 40130 ... 40131 40132 int 40133 plugin_init (struct plugin_name_args *plugin_info, 40134 struct plugin_gcc_version *version) 40135 { 40136 if (!plugin_default_version_check (version, &gcc_version)) 40137 return 1; 40138 40139 } 40140 40141 but you can also check the individual fields if you want a less strict 40142check. 40143 4014423.2.3 Plugin callbacks 40145----------------------- 40146 40147Callback functions have the following prototype: 40148 40149 /* The prototype for a plugin callback function. 40150 gcc_data - event-specific data provided by GCC 40151 user_data - plugin-specific data provided by the plug-in. */ 40152 typedef void (*plugin_callback_func)(void *gcc_data, void *user_data); 40153 40154 Callbacks can be invoked at the following pre-determined events: 40155 40156 enum plugin_event 40157 { 40158 PLUGIN_START_PARSE_FUNCTION, /* Called before parsing the body of a function. */ 40159 PLUGIN_FINISH_PARSE_FUNCTION, /* After finishing parsing a function. */ 40160 PLUGIN_PASS_MANAGER_SETUP, /* To hook into pass manager. */ 40161 PLUGIN_FINISH_TYPE, /* After finishing parsing a type. */ 40162 PLUGIN_FINISH_DECL, /* After finishing parsing a declaration. */ 40163 PLUGIN_FINISH_UNIT, /* Useful for summary processing. */ 40164 PLUGIN_PRE_GENERICIZE, /* Allows to see low level AST in C and C++ frontends. */ 40165 PLUGIN_FINISH, /* Called before GCC exits. */ 40166 PLUGIN_INFO, /* Information about the plugin. */ 40167 PLUGIN_GGC_START, /* Called at start of GCC Garbage Collection. */ 40168 PLUGIN_GGC_MARKING, /* Extend the GGC marking. */ 40169 PLUGIN_GGC_END, /* Called at end of GGC. */ 40170 PLUGIN_REGISTER_GGC_ROOTS, /* Register an extra GGC root table. */ 40171 PLUGIN_ATTRIBUTES, /* Called during attribute registration */ 40172 PLUGIN_START_UNIT, /* Called before processing a translation unit. */ 40173 PLUGIN_PRAGMAS, /* Called during pragma registration. */ 40174 /* Called before first pass from all_passes. */ 40175 PLUGIN_ALL_PASSES_START, 40176 /* Called after last pass from all_passes. */ 40177 PLUGIN_ALL_PASSES_END, 40178 /* Called before first ipa pass. */ 40179 PLUGIN_ALL_IPA_PASSES_START, 40180 /* Called after last ipa pass. */ 40181 PLUGIN_ALL_IPA_PASSES_END, 40182 /* Allows to override pass gate decision for current_pass. */ 40183 PLUGIN_OVERRIDE_GATE, 40184 /* Called before executing a pass. */ 40185 PLUGIN_PASS_EXECUTION, 40186 /* Called before executing subpasses of a GIMPLE_PASS in 40187 execute_ipa_pass_list. */ 40188 PLUGIN_EARLY_GIMPLE_PASSES_START, 40189 /* Called after executing subpasses of a GIMPLE_PASS in 40190 execute_ipa_pass_list. */ 40191 PLUGIN_EARLY_GIMPLE_PASSES_END, 40192 /* Called when a pass is first instantiated. */ 40193 PLUGIN_NEW_PASS, 40194 /* Called when a file is #include-d or given via the #line directive. 40195 This could happen many times. The event data is the included file path, 40196 as a const char* pointer. */ 40197 PLUGIN_INCLUDE_FILE, 40198 40199 PLUGIN_EVENT_FIRST_DYNAMIC /* Dummy event used for indexing callback 40200 array. */ 40201 }; 40202 40203 In addition, plugins can also look up the enumerator of a named event, 40204and / or generate new events dynamically, by calling the function 40205'get_named_event_id'. 40206 40207 To register a callback, the plugin calls 'register_callback' with the 40208arguments: 40209 40210 * 'char *name': Plugin name. 40211 * 'int event': The event code. 40212 * 'plugin_callback_func callback': The function that handles 'event'. 40213 * 'void *user_data': Pointer to plugin-specific data. 40214 40215 For the PLUGIN_PASS_MANAGER_SETUP, PLUGIN_INFO, and 40216PLUGIN_REGISTER_GGC_ROOTS pseudo-events the 'callback' should be null, 40217and the 'user_data' is specific. 40218 40219 When the PLUGIN_PRAGMAS event is triggered (with a null pointer as data 40220from GCC), plugins may register their own pragmas. Notice that pragmas 40221are not available from 'lto1', so plugins used with '-flto' option to 40222GCC during link-time optimization cannot use pragmas and do not even see 40223functions like 'c_register_pragma' or 'pragma_lex'. 40224 40225 The PLUGIN_INCLUDE_FILE event, with a 'const char*' file path as GCC 40226data, is triggered for processing of '#include' or '#line' directives. 40227 40228 The PLUGIN_FINISH event is the last time that plugins can call GCC 40229functions, notably emit diagnostics with 'warning', 'error' etc. 40230 40231 40232File: gccint.info, Node: Plugins pass, Next: Plugins GC, Prev: Plugin API, Up: Plugins 40233 4023423.3 Interacting with the pass manager 40235====================================== 40236 40237There needs to be a way to add/reorder/remove passes dynamically. This 40238is useful for both analysis plugins (plugging in after a certain pass 40239such as CFG or an IPA pass) and optimization plugins. 40240 40241 Basic support for inserting new passes or replacing existing passes is 40242provided. A plugin registers a new pass with GCC by calling 40243'register_callback' with the 'PLUGIN_PASS_MANAGER_SETUP' event and a 40244pointer to a 'struct register_pass_info' object defined as follows 40245 40246 enum pass_positioning_ops 40247 { 40248 PASS_POS_INSERT_AFTER, // Insert after the reference pass. 40249 PASS_POS_INSERT_BEFORE, // Insert before the reference pass. 40250 PASS_POS_REPLACE // Replace the reference pass. 40251 }; 40252 40253 struct register_pass_info 40254 { 40255 struct opt_pass *pass; /* New pass provided by the plugin. */ 40256 const char *reference_pass_name; /* Name of the reference pass for hooking 40257 up the new pass. */ 40258 int ref_pass_instance_number; /* Insert the pass at the specified 40259 instance number of the reference pass. */ 40260 /* Do it for every instance if it is 0. */ 40261 enum pass_positioning_ops pos_op; /* how to insert the new pass. */ 40262 }; 40263 40264 40265 /* Sample plugin code that registers a new pass. */ 40266 int 40267 plugin_init (struct plugin_name_args *plugin_info, 40268 struct plugin_gcc_version *version) 40269 { 40270 struct register_pass_info pass_info; 40271 40272 ... 40273 40274 /* Code to fill in the pass_info object with new pass information. */ 40275 40276 ... 40277 40278 /* Register the new pass. */ 40279 register_callback (plugin_info->base_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info); 40280 40281 ... 40282 } 40283 40284 40285File: gccint.info, Node: Plugins GC, Next: Plugins description, Prev: Plugins pass, Up: Plugins 40286 4028723.4 Interacting with the GCC Garbage Collector 40288=============================================== 40289 40290Some plugins may want to be informed when GGC (the GCC Garbage 40291Collector) is running. They can register callbacks for the 40292'PLUGIN_GGC_START' and 'PLUGIN_GGC_END' events (for which the callback 40293is called with a null 'gcc_data') to be notified of the start or end of 40294the GCC garbage collection. 40295 40296 Some plugins may need to have GGC mark additional data. This can be 40297done by registering a callback (called with a null 'gcc_data') for the 40298'PLUGIN_GGC_MARKING' event. Such callbacks can call the 'ggc_set_mark' 40299routine, preferably through the 'ggc_mark' macro (and conversely, these 40300routines should usually not be used in plugins outside of the 40301'PLUGIN_GGC_MARKING' event). Plugins that wish to hold weak references 40302to gc data may also use this event to drop weak references when the 40303object is about to be collected. The 'ggc_marked_p' function can be 40304used to tell if an object is marked, or is about to be collected. The 40305'gt_clear_cache' overloads which some types define may also be of use in 40306managing weak references. 40307 40308 Some plugins may need to add extra GGC root tables, e.g. to handle 40309their own 'GTY'-ed data. This can be done with the 40310'PLUGIN_REGISTER_GGC_ROOTS' pseudo-event with a null callback and the 40311extra root table (of type 'struct ggc_root_tab*') as 'user_data'. 40312Running the 'gengtype -p SOURCE-DIR FILE-LIST PLUGIN*.C ...' utility 40313generates these extra root tables. 40314 40315 You should understand the details of memory management inside GCC 40316before using 'PLUGIN_GGC_MARKING' or 'PLUGIN_REGISTER_GGC_ROOTS'. 40317 40318 40319File: gccint.info, Node: Plugins description, Next: Plugins attr, Prev: Plugins GC, Up: Plugins 40320 4032123.5 Giving information about a plugin 40322====================================== 40323 40324A plugin should give some information to the user about itself. This 40325uses the following structure: 40326 40327 struct plugin_info 40328 { 40329 const char *version; 40330 const char *help; 40331 }; 40332 40333 Such a structure is passed as the 'user_data' by the plugin's init 40334routine using 'register_callback' with the 'PLUGIN_INFO' pseudo-event 40335and a null callback. 40336 40337 40338File: gccint.info, Node: Plugins attr, Next: Plugins recording, Prev: Plugins description, Up: Plugins 40339 4034023.6 Registering custom attributes or pragmas 40341============================================= 40342 40343For analysis (or other) purposes it is useful to be able to add custom 40344attributes or pragmas. 40345 40346 The 'PLUGIN_ATTRIBUTES' callback is called during attribute 40347registration. Use the 'register_attribute' function to register custom 40348attributes. 40349 40350 /* Attribute handler callback */ 40351 static tree 40352 handle_user_attribute (tree *node, tree name, tree args, 40353 int flags, bool *no_add_attrs) 40354 { 40355 return NULL_TREE; 40356 } 40357 40358 /* Attribute definition */ 40359 static struct attribute_spec user_attr = 40360 { "user", 1, 1, false, false, false, handle_user_attribute, false }; 40361 40362 /* Plugin callback called during attribute registration. 40363 Registered with register_callback (plugin_name, PLUGIN_ATTRIBUTES, register_attributes, NULL) 40364 */ 40365 static void 40366 register_attributes (void *event_data, void *data) 40367 { 40368 warning (0, G_("Callback to register attributes")); 40369 register_attribute (&user_attr); 40370 } 40371 40372 40373 The PLUGIN_PRAGMAS callback is called once during pragmas registration. 40374Use the 'c_register_pragma', 'c_register_pragma_with_data', 40375'c_register_pragma_with_expansion', 40376'c_register_pragma_with_expansion_and_data' functions to register custom 40377pragmas and their handlers (which often want to call 'pragma_lex') from 40378'c-family/c-pragma.h'. 40379 40380 /* Plugin callback called during pragmas registration. Registered with 40381 register_callback (plugin_name, PLUGIN_PRAGMAS, 40382 register_my_pragma, NULL); 40383 */ 40384 static void 40385 register_my_pragma (void *event_data, void *data) 40386 { 40387 warning (0, G_("Callback to register pragmas")); 40388 c_register_pragma ("GCCPLUGIN", "sayhello", handle_pragma_sayhello); 40389 } 40390 40391 It is suggested to pass '"GCCPLUGIN"' (or a short name identifying your 40392plugin) as the "space" argument of your pragma. 40393 40394 Pragmas registered with 'c_register_pragma_with_expansion' or 40395'c_register_pragma_with_expansion_and_data' support preprocessor 40396expansions. For example: 40397 40398 #define NUMBER 10 40399 #pragma GCCPLUGIN foothreshold (NUMBER) 40400 40401 40402File: gccint.info, Node: Plugins recording, Next: Plugins gate, Prev: Plugins attr, Up: Plugins 40403 4040423.7 Recording information about pass execution 40405=============================================== 40406 40407The event PLUGIN_PASS_EXECUTION passes the pointer to the executed pass 40408(the same as current_pass) as 'gcc_data' to the callback. You can also 40409inspect cfun to find out about which function this pass is executed for. 40410Note that this event will only be invoked if the gate check (if 40411applicable, modified by PLUGIN_OVERRIDE_GATE) succeeds. You can use 40412other hooks, like 'PLUGIN_ALL_PASSES_START', 'PLUGIN_ALL_PASSES_END', 40413'PLUGIN_ALL_IPA_PASSES_START', 'PLUGIN_ALL_IPA_PASSES_END', 40414'PLUGIN_EARLY_GIMPLE_PASSES_START', and/or 40415'PLUGIN_EARLY_GIMPLE_PASSES_END' to manipulate global state in your 40416plugin(s) in order to get context for the pass execution. 40417 40418 40419File: gccint.info, Node: Plugins gate, Next: Plugins tracking, Prev: Plugins recording, Up: Plugins 40420 4042123.8 Controlling which passes are being run 40422=========================================== 40423 40424After the original gate function for a pass is called, its result - the 40425gate status - is stored as an integer. Then the event 40426'PLUGIN_OVERRIDE_GATE' is invoked, with a pointer to the gate status in 40427the 'gcc_data' parameter to the callback function. A nonzero value of 40428the gate status means that the pass is to be executed. You can both 40429read and write the gate status via the passed pointer. 40430 40431 40432File: gccint.info, Node: Plugins tracking, Next: Plugins building, Prev: Plugins gate, Up: Plugins 40433 4043423.9 Keeping track of available passes 40435====================================== 40436 40437When your plugin is loaded, you can inspect the various pass lists to 40438determine what passes are available. However, other plugins might add 40439new passes. Also, future changes to GCC might cause generic passes to 40440be added after plugin loading. When a pass is first added to one of the 40441pass lists, the event 'PLUGIN_NEW_PASS' is invoked, with the callback 40442parameter 'gcc_data' pointing to the new pass. 40443 40444 40445File: gccint.info, Node: Plugins building, Prev: Plugins tracking, Up: Plugins 40446 4044723.10 Building GCC plugins 40448========================== 40449 40450If plugins are enabled, GCC installs the headers needed to build a 40451plugin (somewhere in the installation tree, e.g. under '/usr/local'). 40452In particular a 'plugin/include' directory is installed, containing all 40453the header files needed to build plugins. 40454 40455 On most systems, you can query this 'plugin' directory by invoking 'gcc 40456-print-file-name=plugin' (replace if needed 'gcc' with the appropriate 40457program path). 40458 40459 Inside plugins, this 'plugin' directory name can be queried by calling 40460'default_plugin_dir_name ()'. 40461 40462 Plugins may know, when they are compiled, the GCC version for which 40463'plugin-version.h' is provided. The constant macros 40464'GCCPLUGIN_VERSION_MAJOR', 'GCCPLUGIN_VERSION_MINOR', 40465'GCCPLUGIN_VERSION_PATCHLEVEL', 'GCCPLUGIN_VERSION' are integer numbers, 40466so a plugin could ensure it is built for GCC 4.7 with 40467 #if GCCPLUGIN_VERSION != 4007 40468 #error this GCC plugin is for GCC 4.7 40469 #endif 40470 40471 The following GNU Makefile excerpt shows how to build a simple plugin: 40472 40473 HOST_GCC=g++ 40474 TARGET_GCC=gcc 40475 PLUGIN_SOURCE_FILES= plugin1.c plugin2.cc 40476 GCCPLUGINS_DIR:= $(shell $(TARGET_GCC) -print-file-name=plugin) 40477 CXXFLAGS+= -I$(GCCPLUGINS_DIR)/include -fPIC -fno-rtti -O2 40478 40479 plugin.so: $(PLUGIN_SOURCE_FILES) 40480 $(HOST_GCC) -shared $(CXXFLAGS) $^ -o $@ 40481 40482 A single source file plugin may be built with 'g++ -I`gcc 40483-print-file-name=plugin`/include -fPIC -shared -fno-rtti -O2 plugin.c -o 40484plugin.so', using backquote shell syntax to query the 'plugin' 40485directory. 40486 40487 When a plugin needs to use 'gengtype', be sure that both 'gengtype' and 40488'gtype.state' have the same version as the GCC for which the plugin is 40489built. 40490 40491 40492File: gccint.info, Node: LTO, Next: Match and Simplify, Prev: Plugins, Up: Top 40493 4049424 Link Time Optimization 40495************************* 40496 40497Link Time Optimization (LTO) gives GCC the capability of dumping its 40498internal representation (GIMPLE) to disk, so that all the different 40499compilation units that make up a single executable can be optimized as a 40500single module. This expands the scope of inter-procedural optimizations 40501to encompass the whole program (or, rather, everything that is visible 40502at link time). 40503 40504* Menu: 40505 40506* LTO Overview:: Overview of LTO. 40507* LTO object file layout:: LTO file sections in ELF. 40508* IPA:: Using summary information in IPA passes. 40509* WHOPR:: Whole program assumptions, 40510 linker plugin and symbol visibilities. 40511* Internal flags:: Internal flags controlling 'lto1'. 40512 40513 40514File: gccint.info, Node: LTO Overview, Next: LTO object file layout, Up: LTO 40515 4051624.1 Design Overview 40517==================== 40518 40519Link time optimization is implemented as a GCC front end for a bytecode 40520representation of GIMPLE that is emitted in special sections of '.o' 40521files. Currently, LTO support is enabled in most ELF-based systems, as 40522well as darwin, cygwin and mingw systems. 40523 40524 Since GIMPLE bytecode is saved alongside final object code, object 40525files generated with LTO support are larger than regular object files. 40526This "fat" object format makes it easy to integrate LTO into existing 40527build systems, as one can, for instance, produce archives of the files. 40528Additionally, one might be able to ship one set of fat objects which 40529could be used both for development and the production of optimized 40530builds. A, perhaps surprising, side effect of this feature is that any 40531mistake in the toolchain leads to LTO information not being used (e.g. 40532an older 'libtool' calling 'ld' directly). This is both an advantage, 40533as the system is more robust, and a disadvantage, as the user is not 40534informed that the optimization has been disabled. 40535 40536 The current implementation only produces "fat" objects, effectively 40537doubling compilation time and increasing file sizes up to 5x the 40538original size. This hides the problem that some tools, such as 'ar' and 40539'nm', need to understand symbol tables of LTO sections. These tools 40540were extended to use the plugin infrastructure, and with these problems 40541solved, GCC will also support "slim" objects consisting of the 40542intermediate code alone. 40543 40544 At the highest level, LTO splits the compiler in two. The first half 40545(the "writer") produces a streaming representation of all the internal 40546data structures needed to optimize and generate code. This includes 40547declarations, types, the callgraph and the GIMPLE representation of 40548function bodies. 40549 40550 When '-flto' is given during compilation of a source file, the pass 40551manager executes all the passes in 'all_lto_gen_passes'. Currently, 40552this phase is composed of two IPA passes: 40553 40554 * 'pass_ipa_lto_gimple_out' This pass executes the function 40555 'lto_output' in 'lto-streamer-out.c', which traverses the call 40556 graph encoding every reachable declaration, type and function. 40557 This generates a memory representation of all the file sections 40558 described below. 40559 40560 * 'pass_ipa_lto_finish_out' This pass executes the function 40561 'produce_asm_for_decls' in 'lto-streamer-out.c', which takes the 40562 memory image built in the previous pass and encodes it in the 40563 corresponding ELF file sections. 40564 40565 The second half of LTO support is the "reader". This is implemented as 40566the GCC front end 'lto1' in 'lto/lto.c'. When 'collect2' detects a link 40567set of '.o'/'.a' files with LTO information and the '-flto' is enabled, 40568it invokes 'lto1' which reads the set of files and aggregates them into 40569a single translation unit for optimization. The main entry point for 40570the reader is 'lto/lto.c':'lto_main'. 40571 4057224.1.1 LTO modes of operation 40573----------------------------- 40574 40575One of the main goals of the GCC link-time infrastructure was to allow 40576effective compilation of large programs. For this reason GCC implements 40577two link-time compilation modes. 40578 40579 1. _LTO mode_, in which the whole program is read into the compiler at 40580 link-time and optimized in a similar way as if it were a single 40581 source-level compilation unit. 40582 40583 2. _WHOPR or partitioned mode_, designed to utilize multiple CPUs 40584 and/or a distributed compilation environment to quickly link large 40585 applications. WHOPR stands for WHOle Program optimizeR (not to be 40586 confused with the semantics of '-fwhole-program'). It partitions 40587 the aggregated callgraph from many different '.o' files and 40588 distributes the compilation of the sub-graphs to different CPUs. 40589 40590 Note that distributed compilation is not implemented yet, but since 40591 the parallelism is facilitated via generating a 'Makefile', it 40592 would be easy to implement. 40593 40594 WHOPR splits LTO into three main stages: 40595 1. Local generation (LGEN) This stage executes in parallel. Every 40596 file in the program is compiled into the intermediate language and 40597 packaged together with the local call-graph and summary 40598 information. This stage is the same for both the LTO and WHOPR 40599 compilation mode. 40600 40601 2. Whole Program Analysis (WPA) WPA is performed sequentially. The 40602 global call-graph is generated, and a global analysis procedure 40603 makes transformation decisions. The global call-graph is 40604 partitioned to facilitate parallel optimization during phase 3. 40605 The results of the WPA stage are stored into new object files which 40606 contain the partitions of program expressed in the intermediate 40607 language and the optimization decisions. 40608 40609 3. Local transformations (LTRANS) This stage executes in parallel. 40610 All the decisions made during phase 2 are implemented locally in 40611 each partitioned object file, and the final object code is 40612 generated. Optimizations which cannot be decided efficiently 40613 during the phase 2 may be performed on the local call-graph 40614 partitions. 40615 40616 WHOPR can be seen as an extension of the usual LTO mode of compilation. 40617In LTO, WPA and LTRANS are executed within a single execution of the 40618compiler, after the whole program has been read into memory. 40619 40620 When compiling in WHOPR mode, the callgraph is partitioned during the 40621WPA stage. The whole program is split into a given number of partitions 40622of roughly the same size. The compiler tries to minimize the number of 40623references which cross partition boundaries. The main advantage of 40624WHOPR is to allow the parallel execution of LTRANS stages, which are the 40625most time-consuming part of the compilation process. Additionally, it 40626avoids the need to load the whole program into memory. 40627 40628 40629File: gccint.info, Node: LTO object file layout, Next: IPA, Prev: LTO Overview, Up: LTO 40630 4063124.2 LTO file sections 40632====================== 40633 40634LTO information is stored in several ELF sections inside object files. 40635Data structures and enum codes for sections are defined in 40636'lto-streamer.h'. 40637 40638 These sections are emitted from 'lto-streamer-out.c' and mapped in all 40639at once from 'lto/lto.c':'lto_file_read'. The individual functions 40640dealing with the reading/writing of each section are described below. 40641 40642 * Command line options ('.gnu.lto_.opts') 40643 40644 This section contains the command line options used to generate the 40645 object files. This is used at link time to determine the 40646 optimization level and other settings when they are not explicitly 40647 specified at the linker command line. 40648 40649 Currently, GCC does not support combining LTO object files compiled 40650 with different set of the command line options into a single 40651 binary. At link time, the options given on the command line and 40652 the options saved on all the files in a link-time set are applied 40653 globally. No attempt is made at validating the combination of 40654 flags (other than the usual validation done by option processing). 40655 This is implemented in 'lto/lto.c':'lto_read_all_file_options'. 40656 40657 * Symbol table ('.gnu.lto_.symtab') 40658 40659 This table replaces the ELF symbol table for functions and 40660 variables represented in the LTO IL. Symbols used and exported by 40661 the optimized assembly code of "fat" objects might not match the 40662 ones used and exported by the intermediate code. This table is 40663 necessary because the intermediate code is less optimized and thus 40664 requires a separate symbol table. 40665 40666 Additionally, the binary code in the "fat" object will lack a call 40667 to a function, since the call was optimized out at compilation time 40668 after the intermediate language was streamed out. In some special 40669 cases, the same optimization may not happen during link-time 40670 optimization. This would lead to an undefined symbol if only one 40671 symbol table was used. 40672 40673 The symbol table is emitted in 40674 'lto-streamer-out.c':'produce_symtab'. 40675 40676 * Global declarations and types ('.gnu.lto_.decls') 40677 40678 This section contains an intermediate language dump of all 40679 declarations and types required to represent the callgraph, static 40680 variables and top-level debug info. 40681 40682 The contents of this section are emitted in 40683 'lto-streamer-out.c':'produce_asm_for_decls'. Types and symbols 40684 are emitted in a topological order that preserves the sharing of 40685 pointers when the file is read back in 40686 ('lto.c':'read_cgraph_and_symbols'). 40687 40688 * The callgraph ('.gnu.lto_.cgraph') 40689 40690 This section contains the basic data structure used by the GCC 40691 inter-procedural optimization infrastructure. This section stores 40692 an annotated multi-graph which represents the functions and call 40693 sites as well as the variables, aliases and top-level 'asm' 40694 statements. 40695 40696 This section is emitted in 'lto-streamer-out.c':'output_cgraph' and 40697 read in 'lto-cgraph.c':'input_cgraph'. 40698 40699 * IPA references ('.gnu.lto_.refs') 40700 40701 This section contains references between function and static 40702 variables. It is emitted by 'lto-cgraph.c':'output_refs' and read 40703 by 'lto-cgraph.c':'input_refs'. 40704 40705 * Function bodies ('.gnu.lto_.function_body.<name>') 40706 40707 This section contains function bodies in the intermediate language 40708 representation. Every function body is in a separate section to 40709 allow copying of the section independently to different object 40710 files or reading the function on demand. 40711 40712 Functions are emitted in 'lto-streamer-out.c':'output_function' and 40713 read in 'lto-streamer-in.c':'input_function'. 40714 40715 * Static variable initializers ('.gnu.lto_.vars') 40716 40717 This section contains all the symbols in the global variable pool. 40718 It is emitted by 'lto-cgraph.c':'output_varpool' and read in 40719 'lto-cgraph.c':'input_cgraph'. 40720 40721 * Summaries and optimization summaries used by IPA passes 40722 ('.gnu.lto_.<xxx>', where '<xxx>' is one of 'jmpfuncs', 'pureconst' 40723 or 'reference') 40724 40725 These sections are used by IPA passes that need to emit summary 40726 information during LTO generation to be read and aggregated at link 40727 time. Each pass is responsible for implementing two pass manager 40728 hooks: one for writing the summary and another for reading it in. 40729 The format of these sections is entirely up to each individual 40730 pass. The only requirement is that the writer and reader hooks 40731 agree on the format. 40732 40733 40734File: gccint.info, Node: IPA, Next: WHOPR, Prev: LTO object file layout, Up: LTO 40735 4073624.3 Using summary information in IPA passes 40737============================================ 40738 40739Programs are represented internally as a _callgraph_ (a multi-graph 40740where nodes are functions and edges are call sites) and a _varpool_ (a 40741list of static and external variables in the program). 40742 40743 The inter-procedural optimization is organized as a sequence of 40744individual passes, which operate on the callgraph and the varpool. To 40745make the implementation of WHOPR possible, every inter-procedural 40746optimization pass is split into several stages that are executed at 40747different times during WHOPR compilation: 40748 40749 * LGEN time 40750 1. _Generate summary_ ('generate_summary' in 'struct 40751 ipa_opt_pass_d'). This stage analyzes every function body and 40752 variable initializer is examined and stores relevant 40753 information into a pass-specific data structure. 40754 40755 2. _Write summary_ ('write_summary' in 'struct ipa_opt_pass_d'). 40756 This stage writes all the pass-specific information generated 40757 by 'generate_summary'. Summaries go into their own 40758 'LTO_section_*' sections that have to be declared in 40759 'lto-streamer.h':'enum lto_section_type'. A new section is 40760 created by calling 'create_output_block' and data can be 40761 written using the 'lto_output_*' routines. 40762 40763 * WPA time 40764 1. _Read summary_ ('read_summary' in 'struct ipa_opt_pass_d'). 40765 This stage reads all the pass-specific information in exactly 40766 the same order that it was written by 'write_summary'. 40767 40768 2. _Execute_ ('execute' in 'struct opt_pass'). This performs 40769 inter-procedural propagation. This must be done without 40770 actual access to the individual function bodies or variable 40771 initializers. Typically, this results in a transitive closure 40772 operation over the summary information of all the nodes in the 40773 callgraph. 40774 40775 3. _Write optimization summary_ ('write_optimization_summary' in 40776 'struct ipa_opt_pass_d'). This writes the result of the 40777 inter-procedural propagation into the object file. This can 40778 use the same data structures and helper routines used in 40779 'write_summary'. 40780 40781 * LTRANS time 40782 1. _Read optimization summary_ ('read_optimization_summary' in 40783 'struct ipa_opt_pass_d'). The counterpart to 40784 'write_optimization_summary'. This reads the interprocedural 40785 optimization decisions in exactly the same format emitted by 40786 'write_optimization_summary'. 40787 40788 2. _Transform_ ('function_transform' and 'variable_transform' in 40789 'struct ipa_opt_pass_d'). The actual function bodies and 40790 variable initializers are updated based on the information 40791 passed down from the _Execute_ stage. 40792 40793 The implementation of the inter-procedural passes are shared between 40794LTO, WHOPR and classic non-LTO compilation. 40795 40796 * During the traditional file-by-file mode every pass executes its 40797 own _Generate summary_, _Execute_, and _Transform_ stages within 40798 the single execution context of the compiler. 40799 40800 * In LTO compilation mode, every pass uses _Generate summary_ and 40801 _Write summary_ stages at compilation time, while the _Read 40802 summary_, _Execute_, and _Transform_ stages are executed at link 40803 time. 40804 40805 * In WHOPR mode all stages are used. 40806 40807 To simplify development, the GCC pass manager differentiates between 40808normal inter-procedural passes and small inter-procedural passes. A 40809_small inter-procedural pass_ ('SIMPLE_IPA_PASS') is a pass that does 40810everything at once and thus it can not be executed during WPA in WHOPR 40811mode. It defines only the _Execute_ stage and during this stage it 40812accesses and modifies the function bodies. Such passes are useful for 40813optimization at LGEN or LTRANS time and are used, for example, to 40814implement early optimization before writing object files. The simple 40815inter-procedural passes can also be used for easier prototyping and 40816development of a new inter-procedural pass. 40817 4081824.3.1 Virtual clones 40819--------------------- 40820 40821One of the main challenges of introducing the WHOPR compilation mode was 40822addressing the interactions between optimization passes. In LTO 40823compilation mode, the passes are executed in a sequence, each of which 40824consists of analysis (or _Generate summary_), propagation (or _Execute_) 40825and _Transform_ stages. Once the work of one pass is finished, the next 40826pass sees the updated program representation and can execute. This 40827makes the individual passes dependent on each other. 40828 40829 In WHOPR mode all passes first execute their _Generate summary_ stage. 40830Then summary writing marks the end of the LGEN stage. At WPA time, the 40831summaries are read back into memory and all passes run the _Execute_ 40832stage. Optimization summaries are streamed and sent to LTRANS, where 40833all the passes execute the _Transform_ stage. 40834 40835 Most optimization passes split naturally into analysis, propagation and 40836transformation stages. But some do not. The main problem arises when 40837one pass performs changes and the following pass gets confused by seeing 40838different callgraphs between the _Transform_ stage and the _Generate 40839summary_ or _Execute_ stage. This means that the passes are required to 40840communicate their decisions with each other. 40841 40842 To facilitate this communication, the GCC callgraph infrastructure 40843implements _virtual clones_, a method of representing the changes 40844performed by the optimization passes in the callgraph without needing to 40845update function bodies. 40846 40847 A _virtual clone_ in the callgraph is a function that has no associated 40848body, just a description of how to create its body based on a different 40849function (which itself may be a virtual clone). 40850 40851 The description of function modifications includes adjustments to the 40852function's signature (which allows, for example, removing or adding 40853function arguments), substitutions to perform on the function body, and, 40854for inlined functions, a pointer to the function that it will be inlined 40855into. 40856 40857 It is also possible to redirect any edge of the callgraph from a 40858function to its virtual clone. This implies updating of the call site 40859to adjust for the new function signature. 40860 40861 Most of the transformations performed by inter-procedural optimizations 40862can be represented via virtual clones. For instance, a constant 40863propagation pass can produce a virtual clone of the function which 40864replaces one of its arguments by a constant. The inliner can represent 40865its decisions by producing a clone of a function whose body will be 40866later integrated into a given function. 40867 40868 Using _virtual clones_, the program can be easily updated during the 40869_Execute_ stage, solving most of pass interactions problems that would 40870otherwise occur during _Transform_. 40871 40872 Virtual clones are later materialized in the LTRANS stage and turned 40873into real functions. Passes executed after the virtual clone were 40874introduced also perform their _Transform_ stage on new functions, so for 40875a pass there is no significant difference between operating on a real 40876function or a virtual clone introduced before its _Execute_ stage. 40877 40878 Optimization passes then work on virtual clones introduced before their 40879_Execute_ stage as if they were real functions. The only difference is 40880that clones are not visible during the _Generate Summary_ stage. 40881 40882 To keep function summaries updated, the callgraph interface allows an 40883optimizer to register a callback that is called every time a new clone 40884is introduced as well as when the actual function or variable is 40885generated or when a function or variable is removed. These hooks are 40886registered in the _Generate summary_ stage and allow the pass to keep 40887its information intact until the _Execute_ stage. The same hooks can 40888also be registered during the _Execute_ stage to keep the optimization 40889summaries updated for the _Transform_ stage. 40890 4089124.3.2 IPA references 40892--------------------- 40893 40894GCC represents IPA references in the callgraph. For a function or 40895variable 'A', the _IPA reference_ is a list of all locations where the 40896address of 'A' is taken and, when 'A' is a variable, a list of all 40897direct stores and reads to/from 'A'. References represent an oriented 40898multi-graph on the union of nodes of the callgraph and the varpool. See 40899'ipa-reference.c':'ipa_reference_write_optimization_summary' and 40900'ipa-reference.c':'ipa_reference_read_optimization_summary' for details. 40901 4090224.3.3 Jump functions 40903--------------------- 40904 40905Suppose that an optimization pass sees a function 'A' and it knows the 40906values of (some of) its arguments. The _jump function_ describes the 40907value of a parameter of a given function call in function 'A' based on 40908this knowledge. 40909 40910 Jump functions are used by several optimizations, such as the 40911inter-procedural constant propagation pass and the devirtualization 40912pass. The inliner also uses jump functions to perform inlining of 40913callbacks. 40914 40915 40916File: gccint.info, Node: WHOPR, Next: Internal flags, Prev: IPA, Up: LTO 40917 4091824.4 Whole program assumptions, linker plugin and symbol visibilities 40919===================================================================== 40920 40921Link-time optimization gives relatively minor benefits when used alone. 40922The problem is that propagation of inter-procedural information does not 40923work well across functions and variables that are called or referenced 40924by other compilation units (such as from a dynamically linked library). 40925We say that such functions and variables are _externally visible_. 40926 40927 To make the situation even more difficult, many applications organize 40928themselves as a set of shared libraries, and the default ELF visibility 40929rules allow one to overwrite any externally visible symbol with a 40930different symbol at runtime. This basically disables any optimizations 40931across such functions and variables, because the compiler cannot be sure 40932that the function body it is seeing is the same function body that will 40933be used at runtime. Any function or variable not declared 'static' in 40934the sources degrades the quality of inter-procedural optimization. 40935 40936 To avoid this problem the compiler must assume that it sees the whole 40937program when doing link-time optimization. Strictly speaking, the whole 40938program is rarely visible even at link-time. Standard system libraries 40939are usually linked dynamically or not provided with the link-time 40940information. In GCC, the whole program option ('-fwhole-program') 40941asserts that every function and variable defined in the current 40942compilation unit is static, except for function 'main' (note: at link 40943time, the current unit is the union of all objects compiled with LTO). 40944Since some functions and variables need to be referenced externally, for 40945example by another DSO or from an assembler file, GCC also provides the 40946function and variable attribute 'externally_visible' which can be used 40947to disable the effect of '-fwhole-program' on a specific symbol. 40948 40949 The whole program mode assumptions are slightly more complex in C++, 40950where inline functions in headers are put into _COMDAT_ sections. 40951COMDAT function and variables can be defined by multiple object files 40952and their bodies are unified at link-time and dynamic link-time. COMDAT 40953functions are changed to local only when their address is not taken and 40954thus un-sharing them with a library is not harmful. COMDAT variables 40955always remain externally visible, however for readonly variables it is 40956assumed that their initializers cannot be overwritten by a different 40957value. 40958 40959 GCC provides the function and variable attribute 'visibility' that can 40960be used to specify the visibility of externally visible symbols (or 40961alternatively an '-fdefault-visibility' command line option). ELF 40962defines the 'default', 'protected', 'hidden' and 'internal' 40963visibilities. 40964 40965 The most commonly used is visibility is 'hidden'. It specifies that 40966the symbol cannot be referenced from outside of the current shared 40967library. Unfortunately, this information cannot be used directly by the 40968link-time optimization in the compiler since the whole shared library 40969also might contain non-LTO objects and those are not visible to the 40970compiler. 40971 40972 GCC solves this problem using linker plugins. A _linker plugin_ is an 40973interface to the linker that allows an external program to claim the 40974ownership of a given object file. The linker then performs the linking 40975procedure by querying the plugin about the symbol table of the claimed 40976objects and once the linking decisions are complete, the plugin is 40977allowed to provide the final object file before the actual linking is 40978made. The linker plugin obtains the symbol resolution information which 40979specifies which symbols provided by the claimed objects are bound from 40980the rest of a binary being linked. 40981 40982 GCC is designed to be independent of the rest of the toolchain and aims 40983to support linkers without plugin support. For this reason it does not 40984use the linker plugin by default. Instead, the object files are 40985examined by 'collect2' before being passed to the linker and objects 40986found to have LTO sections are passed to 'lto1' first. This mode does 40987not work for library archives. The decision on what object files from 40988the archive are needed depends on the actual linking and thus GCC would 40989have to implement the linker itself. The resolution information is 40990missing too and thus GCC needs to make an educated guess based on 40991'-fwhole-program'. Without the linker plugin GCC also assumes that 40992symbols are declared 'hidden' and not referred by non-LTO code by 40993default. 40994 40995 40996File: gccint.info, Node: Internal flags, Prev: WHOPR, Up: LTO 40997 4099824.5 Internal flags controlling 'lto1' 40999====================================== 41000 41001The following flags are passed into 'lto1' and are not meant to be used 41002directly from the command line. 41003 41004 * -fwpa This option runs the serial part of the link-time optimizer 41005 performing the inter-procedural propagation (WPA mode). The 41006 compiler reads in summary information from all inputs and performs 41007 an analysis based on summary information only. It generates object 41008 files for subsequent runs of the link-time optimizer where 41009 individual object files are optimized using both summary 41010 information from the WPA mode and the actual function bodies. It 41011 then drives the LTRANS phase. 41012 41013 * -fltrans This option runs the link-time optimizer in the 41014 local-transformation (LTRANS) mode, which reads in output from a 41015 previous run of the LTO in WPA mode. In the LTRANS mode, LTO 41016 optimizes an object and produces the final assembly. 41017 41018 * -fltrans-output-list=FILE This option specifies a file to which the 41019 names of LTRANS output files are written. This option is only 41020 meaningful in conjunction with '-fwpa'. 41021 41022 * -fresolution=FILE This option specifies the linker resolution file. 41023 This option is only meaningful in conjunction with '-fwpa' and as 41024 option to pass through to the LTO linker plugin. 41025 41026 41027File: gccint.info, Node: Match and Simplify, Next: Funding, Prev: LTO, Up: Top 41028 4102925 Match and Simplify 41030********************* 41031 41032The GIMPLE and GENERIC pattern matching project match-and-simplify tries 41033to address several issues. 41034 41035 1. unify expression simplifications currently spread and duplicated 41036 over separate files like fold-const.c, gimple-fold.c and builtins.c 41037 2. allow for a cheap way to implement building and simplifying 41038 non-trivial GIMPLE expressions, avoiding the need to go through 41039 building and simplifying GENERIC via fold_buildN and then 41040 gimplifying via force_gimple_operand 41041 41042 To address these the project introduces a simple domain specific 41043language to write expression simplifications from which code targeting 41044GIMPLE and GENERIC is auto-generated. The GENERIC variant follows the 41045fold_buildN API while for the GIMPLE variant and to address 2) new APIs 41046are introduced. 41047 41048* Menu: 41049 41050* GIMPLE API:: 41051* The Language:: 41052 41053 41054File: gccint.info, Node: GIMPLE API, Next: The Language, Up: Match and Simplify 41055 4105625.1 GIMPLE API 41057=============== 41058 41059 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 41060 gimple_seq *, tree (*)(tree)) 41061 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 41062 tree, gimple_seq *, tree (*)(tree)) 41063 -- GIMPLE function: tree gimple_simplify (enum tree_code, tree, tree, 41064 tree, tree, gimple_seq *, tree (*)(tree)) 41065 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 41066 tree, gimple_seq *, tree (*)(tree)) 41067 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 41068 tree, tree, gimple_seq *, tree (*)(tree)) 41069 -- GIMPLE function: tree gimple_simplify (enum built_in_function, tree, 41070 tree, tree, tree, gimple_seq *, tree (*)(tree)) 41071 The main GIMPLE API entry to the expression simplifications 41072 mimicing that of the GENERIC fold_{unary,binary,ternary} functions. 41073 41074 thus providing n-ary overloads for operation or function. The 41075additional arguments are a gimple_seq where built statements are 41076inserted on (if 'NULL' then simplifications requiring new statements are 41077not performed) and a valueization hook that can be used to tie 41078simplifications to a SSA lattice. 41079 41080 In addition to those APIs 'fold_stmt' is overloaded with a valueization 41081hook: 41082 41083 -- bool: fold_stmt (gimple_stmt_iterator *, tree (*)(tree)); 41084 41085 Ontop of these a 'fold_buildN'-like API for GIMPLE is introduced: 41086 41087 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41088 tree_code, tree, tree, tree (*valueize) (tree) = NULL); 41089 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41090 tree_code, tree, tree, tree, tree (*valueize) (tree) = NULL); 41091 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41092 tree_code, tree, tree, tree, tree, tree (*valueize) (tree) = 41093 NULL); 41094 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41095 built_in_function, tree, tree, tree (*valueize) (tree) = 41096 NULL); 41097 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41098 built_in_function, tree, tree, tree, tree (*valueize) (tree) = 41099 NULL); 41100 -- GIMPLE function: tree gimple_build (gimple_seq *, location_t, enum 41101 built_in_function, tree, tree, tree, tree, tree (*valueize) 41102 (tree) = NULL); 41103 -- GIMPLE function: tree gimple_convert (gimple_seq *, location_t, 41104 tree, tree); 41105 41106 which is supposed to replace 'force_gimple_operand (fold_buildN (...), 41107...)' and calls to 'fold_convert'. Overloads without the 'location_t' 41108argument exist. Built statements are inserted on the provided sequence 41109and simplification is performed using the optional valueization hook. 41110 41111 41112File: gccint.info, Node: The Language, Prev: GIMPLE API, Up: Match and Simplify 41113 4111425.2 The Language 41115================= 41116 41117The language to write expression simplifications in resembles other 41118domain-specific languages GCC uses. Thus it is lispy. Lets start with 41119an example from the match.pd file: 41120 41121 (simplify 41122 (bit_and @0 integer_all_onesp) 41123 @0) 41124 41125 This example contains all required parts of an expression 41126simplification. A simplification is wrapped inside a '(simplify ...)' 41127expression. That contains at least two operands - an expression that is 41128matched with the GIMPLE or GENERIC IL and a replacement expression that 41129is returned if the match was successful. 41130 41131 Expressions have an operator ID, 'bit_and' in this case. Expressions 41132can be lower-case tree codes with '_expr' stripped off or builtin 41133function code names in all-caps, like 'BUILT_IN_SQRT'. 41134 41135 '@n' denotes a so-called capture. It captures the operand and lets you 41136refer to it in other places of the match-and-simplify. In the above 41137example it is refered to in the replacement expression. Captures are 41138'@' followed by a number or an identifier. 41139 41140 (simplify 41141 (bit_xor @0 @0) 41142 { build_zero_cst (type); }) 41143 41144 In this example '@0' is mentioned twice which constrains the matched 41145expression to have two equal operands. This example also introduces 41146operands written in C code. These can be used in the expression 41147replacements and are supposed to evaluate to a tree node which has to be 41148a valid GIMPLE operand (so you cannot generate expressions in C code). 41149 41150 (simplify 41151 (trunc_mod integer_zerop@0 @1) 41152 (if (!integer_zerop (@1)) 41153 @0)) 41154 41155 Here '@0' captures the first operand of the trunc_mod expression which 41156is also predicated with 'integer_zerop'. Expression operands may be 41157either expressions, predicates or captures. Captures can be 41158unconstrained or capture expresions or predicates. 41159 41160 This example introduces an optional operand of simplify, the 41161if-expression. This condition is evaluated after the expression matched 41162in the IL and is required to evaluate to true to enable the replacement 41163expression in the second operand position. The expression operand of 41164the 'if' is a standard C expression which may contain references to 41165captures. The 'if' has an optional third operand which may contain the 41166replacement expression that is enabled when the condition evaluates to 41167false. 41168 41169 A 'if' expression can be used to specify a common condition for 41170multiple simplify patterns, avoiding the need to repeat that multiple 41171times: 41172 41173 (if (!TYPE_SATURATING (type) 41174 && !FLOAT_TYPE_P (type) && !FIXED_POINT_TYPE_P (type)) 41175 (simplify 41176 (minus (plus @0 @1) @0) 41177 @1) 41178 (simplify 41179 (minus (minus @0 @1) @0) 41180 (negate @1))) 41181 41182 Note that 'if's in outer position do not have the optional else clause 41183but instead have multiple then clauses. 41184 41185 Ifs can be nested. 41186 41187 There exists a 'switch' expression which can be used to chain 41188conditions avoiding nesting 'if's too much: 41189 41190 (simplify 41191 (simple_comparison @0 REAL_CST@1) 41192 (switch 41193 /* a CMP (-0) -> a CMP 0 */ 41194 (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1))) 41195 (cmp @0 { build_real (TREE_TYPE (@1), dconst0); })) 41196 /* x != NaN is always true, other ops are always false. */ 41197 (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1)) 41198 && ! HONOR_SNANS (@1)) 41199 { constant_boolean_node (cmp == NE_EXPR, type); }))) 41200 41201 Is equal to 41202 41203 (simplify 41204 (simple_comparison @0 REAL_CST@1) 41205 (switch 41206 /* a CMP (-0) -> a CMP 0 */ 41207 (if (REAL_VALUE_MINUS_ZERO (TREE_REAL_CST (@1))) 41208 (cmp @0 { build_real (TREE_TYPE (@1), dconst0); }) 41209 /* x != NaN is always true, other ops are always false. */ 41210 (if (REAL_VALUE_ISNAN (TREE_REAL_CST (@1)) 41211 && ! HONOR_SNANS (@1)) 41212 { constant_boolean_node (cmp == NE_EXPR, type); })))) 41213 41214 which has the second 'if' in the else operand of the first. The 41215'switch' expression takes 'if' expressions as operands (which may not 41216have else clauses) and as a last operand a replacement expression which 41217should be enabled by default if no other condition evaluated to true. 41218 41219 Captures can also be used for capturing results of sub-expressions. 41220 41221 #if GIMPLE 41222 (simplify 41223 (pointer_plus (addr@2 @0) INTEGER_CST_P@1) 41224 (if (is_gimple_min_invariant (@2))) 41225 { 41226 HOST_WIDE_INT off; 41227 tree base = get_addr_base_and_unit_offset (@0, &off); 41228 off += tree_to_uhwi (@1); 41229 /* Now with that we should be able to simply write 41230 (addr (mem_ref (addr @base) (plus @off @1))) */ 41231 build1 (ADDR_EXPR, type, 41232 build2 (MEM_REF, TREE_TYPE (TREE_TYPE (@2)), 41233 build_fold_addr_expr (base), 41234 build_int_cst (ptr_type_node, off))); 41235 }) 41236 #endif 41237 41238 In the above example, '@2' captures the result of the expression '(addr 41239@0)'. For outermost expression only its type can be captured, and the 41240keyword 'type' is reserved for this purpose. The above example also 41241gives a way to conditionalize patterns to only apply to 'GIMPLE' or 41242'GENERIC' by means of using the pre-defined preprocessor macros 'GIMPLE' 41243and 'GENERIC' and using preprocessor directives. 41244 41245 (simplify 41246 (bit_and:c integral_op_p@0 (bit_ior:c (bit_not @0) @1)) 41247 (bit_and @1 @0)) 41248 41249 Here we introduce flags on match expressions. The flag used above, 41250'c', denotes that the expression should be also matched commutated. 41251Thus the above match expression is really the following four match 41252expressions: 41253 41254 (bit_and integral_op_p@0 (bit_ior (bit_not @0) @1)) 41255 (bit_and (bit_ior (bit_not @0) @1) integral_op_p@0) 41256 (bit_and integral_op_p@0 (bit_ior @1 (bit_not @0))) 41257 (bit_and (bit_ior @1 (bit_not @0)) integral_op_p@0) 41258 41259 Usual canonicalizations you know from GENERIC expressions are applied 41260before matching, so for example constant operands always come second in 41261commutative expressions. 41262 41263 The second supported flag is 's' which tells the code generator to fail 41264the pattern if the expression marked with 's' does have more than one 41265use. For example in 41266 41267 (simplify 41268 (pointer_plus (pointer_plus:s @0 @1) @3) 41269 (pointer_plus @0 (plus @1 @3))) 41270 41271 this avoids the association if '(pointer_plus @0 @1)' is used outside 41272of the matched expression and thus it would stay live and not trivially 41273removed by dead code elimination. 41274 41275 More features exist to avoid too much repetition. 41276 41277 (for op (plus pointer_plus minus bit_ior bit_xor) 41278 (simplify 41279 (op @0 integer_zerop) 41280 @0)) 41281 41282 A 'for' expression can be used to repeat a pattern for each operator 41283specified, substituting 'op'. 'for' can be nested and a 'for' can have 41284multiple operators to iterate. 41285 41286 (for opa (plus minus) 41287 opb (minus plus) 41288 (for opc (plus minus) 41289 (simplify... 41290 41291 In this example the pattern will be repeated four times with 'opa, opb, 41292opc' being 'plus, minus, plus', 'plus, minus, minus', 'minus, plus, 41293plus', 'minus, plus, minus'. 41294 41295 To avoid repeating operator lists in 'for' you can name them via 41296 41297 (define_operator_list pmm plus minus mult) 41298 41299 and use them in 'for' operator lists where they get expanded. 41300 41301 (for opa (pmm trunc_div) 41302 (simplify... 41303 41304 So this example iterates over 'plus', 'minus', 'mult' and 'trunc_div'. 41305 41306 Using operator lists can also remove the need to explicitely write a 41307'for'. All operator list uses that appear in a 'simplify' or 'match' 41308pattern in operator positions will implicitely be added to a new 'for'. 41309For example 41310 41311 (define_operator_list SQRT BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 41312 (define_operator_list POW BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 41313 (simplify 41314 (SQRT (POW @0 @1)) 41315 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); }))) 41316 41317 is the same as 41318 41319 (for SQRT (BUILT_IN_SQRTF BUILT_IN_SQRT BUILT_IN_SQRTL) 41320 POW (BUILT_IN_POWF BUILT_IN_POW BUILT_IN_POWL) 41321 (simplify 41322 (SQRT (POW @0 @1)) 41323 (POW (abs @0) (mult @1 { built_real (TREE_TYPE (@1), dconsthalf); })))) 41324 41325 'for's and operator lists can include the special identifier 'null' 41326that matches nothing and can never be generated. This can be used to 41327pad an operator list so that it has a standard form, even if there isn't 41328a suitable operator for every form. 41329 41330 Another building block are 'with' expressions in the result expression 41331which nest the generated code in a new C block followed by its argument: 41332 41333 (simplify 41334 (convert (mult @0 @1)) 41335 (with { tree utype = unsigned_type_for (type); } 41336 (convert (mult (convert:utype @0) (convert:utype @1))))) 41337 41338 This allows code nested in the 'with' to refer to the declared 41339variables. In the above case we use the feature to specify the type of 41340a generated expression with the ':type' syntax where 'type' needs to be 41341an identifier that refers to the desired type. Usually the types of the 41342generated result expressions are determined from the context, but 41343sometimes like in the above case it is required that you specify them 41344explicitely. 41345 41346 As intermediate conversions are often optional there is a way to avoid 41347the need to repeat patterns both with and without such conversions. 41348Namely you can mark a conversion as being optional with a '?': 41349 41350 (simplify 41351 (eq (convert@0 @1) (convert? @2)) 41352 (eq @1 (convert @2))) 41353 41354 which will match both '(eq (convert @1) (convert @2))' and '(eq 41355(convert @1) @2)'. The optional converts are supposed to be all either 41356present or not, thus '(eq (convert? @1) (convert? @2))' will result in 41357two patterns only. If you want to match all four combinations you have 41358access to two additional conditional converts as in '(eq (convert1? @1) 41359(convert2? @2))'. 41360 41361 Predicates available from the GCC middle-end need to be made available 41362explicitely via 'define_predicates': 41363 41364 (define_predicates 41365 integer_onep integer_zerop integer_all_onesp) 41366 41367 You can also define predicates using the pattern matching language and 41368the 'match' form: 41369 41370 (match negate_expr_p 41371 INTEGER_CST 41372 (if (TYPE_OVERFLOW_WRAPS (type) 41373 || may_negate_without_overflow_p (t)))) 41374 (match negate_expr_p 41375 (negate @0)) 41376 41377 This shows that for 'match' expressions there is 't' available which 41378captures the outermost expression (something not possible in the 41379'simplify' context). As you can see 'match' has an identifier as first 41380operand which is how you refer to the predicate in patterns. Multiple 41381'match' for the same identifier add additional cases where the predicate 41382matches. 41383 41384 Predicates can also match an expression in which case you need to 41385provide a template specifying the identifier and where to get its 41386operands from: 41387 41388 (match (logical_inverted_value @0) 41389 (eq @0 integer_zerop)) 41390 (match (logical_inverted_value @0) 41391 (bit_not truth_valued_p@0)) 41392 41393 You can use the above predicate like 41394 41395 (simplify 41396 (bit_and @0 (logical_inverted_value @0)) 41397 { build_zero_cst (type); }) 41398 41399 Which will match a bitwise and of an operand with its logical inverted 41400value. 41401 41402 41403File: gccint.info, Node: Funding, Next: GNU Project, Prev: Match and Simplify, Up: Top 41404 41405Funding Free Software 41406********************* 41407 41408If you want to have more free software a few years from now, it makes 41409sense for you to help encourage people to contribute funds for its 41410development. The most effective approach known is to encourage 41411commercial redistributors to donate. 41412 41413 Users of free software systems can boost the pace of development by 41414encouraging for-a-fee distributors to donate part of their selling price 41415to free software developers--the Free Software Foundation, and others. 41416 41417 The way to convince distributors to do this is to demand it and expect 41418it from them. So when you compare distributors, judge them partly by 41419how much they give to free software development. Show distributors they 41420must compete to be the one who gives the most. 41421 41422 To make this approach work, you must insist on numbers that you can 41423compare, such as, "We will donate ten dollars to the Frobnitz project 41424for each disk sold." Don't be satisfied with a vague promise, such as 41425"A portion of the profits are donated," since it doesn't give a basis 41426for comparison. 41427 41428 Even a precise fraction "of the profits from this disk" is not very 41429meaningful, since creative accounting and unrelated business decisions 41430can greatly alter what fraction of the sales price counts as profit. If 41431the price you pay is $50, ten percent of the profit is probably less 41432than a dollar; it might be a few cents, or nothing at all. 41433 41434 Some redistributors do development work themselves. This is useful 41435too; but to keep everyone honest, you need to inquire how much they do, 41436and what kind. Some kinds of development make much more long-term 41437difference than others. For example, maintaining a separate version of 41438a program contributes very little; maintaining the standard version of a 41439program for the whole community contributes much. Easy new ports 41440contribute little, since someone else would surely do them; difficult 41441ports such as adding a new CPU to the GNU Compiler Collection contribute 41442more; major new features or packages contribute the most. 41443 41444 By establishing the idea that supporting further development is "the 41445proper thing to do" when distributing free software for a fee, we can 41446assure a steady flow of resources into making more free software. 41447 41448 Copyright (C) 1994 Free Software Foundation, Inc. 41449 Verbatim copying and redistribution of this section is permitted 41450 without royalty; alteration is not permitted. 41451 41452 41453File: gccint.info, Node: GNU Project, Next: Copying, Prev: Funding, Up: Top 41454 41455The GNU Project and GNU/Linux 41456***************************** 41457 41458The GNU Project was launched in 1984 to develop a complete Unix-like 41459operating system which is free software: the GNU system. (GNU is a 41460recursive acronym for "GNU's Not Unix"; it is pronounced "guh-NEW".) 41461Variants of the GNU operating system, which use the kernel Linux, are 41462now widely used; though these systems are often referred to as "Linux", 41463they are more accurately called GNU/Linux systems. 41464 41465 For more information, see: 41466 <http://www.gnu.org/> 41467 <http://www.gnu.org/gnu/linux-and-gnu.html> 41468 41469 41470File: gccint.info, Node: Copying, Next: GNU Free Documentation License, Prev: GNU Project, Up: Top 41471 41472GNU General Public License 41473************************** 41474 41475 Version 3, 29 June 2007 41476 41477 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> 41478 41479 Everyone is permitted to copy and distribute verbatim copies of this 41480 license document, but changing it is not allowed. 41481 41482Preamble 41483======== 41484 41485The GNU General Public License is a free, copyleft license for software 41486and other kinds of works. 41487 41488 The licenses for most software and other practical works are designed 41489to take away your freedom to share and change the works. By contrast, 41490the GNU General Public License is intended to guarantee your freedom to 41491share and change all versions of a program-to make sure it remains free 41492software for all its users. We, the Free Software Foundation, use the 41493GNU General Public License for most of our software; it applies also to 41494any other work released this way by its authors. You can apply it to 41495your programs, too. 41496 41497 When we speak of free software, we are referring to freedom, not price. 41498Our General Public Licenses are designed to make sure that you have the 41499freedom to distribute copies of free software (and charge for them if 41500you wish), that you receive source code or can get it if you want it, 41501that you can change the software or use pieces of it in new free 41502programs, and that you know you can do these things. 41503 41504 To protect your rights, we need to prevent others from denying you 41505these rights or asking you to surrender the rights. Therefore, you have 41506certain responsibilities if you distribute copies of the software, or if 41507you modify it: responsibilities to respect the freedom of others. 41508 41509 For example, if you distribute copies of such a program, whether gratis 41510or for a fee, you must pass on to the recipients the same freedoms that 41511you received. You must make sure that they, too, receive or can get the 41512source code. And you must show them these terms so they know their 41513rights. 41514 41515 Developers that use the GNU GPL protect your rights with two steps: (1) 41516assert copyright on the software, and (2) offer you this License giving 41517you legal permission to copy, distribute and/or modify it. 41518 41519 For the developers' and authors' protection, the GPL clearly explains 41520that there is no warranty for this free software. For both users' and 41521authors' sake, the GPL requires that modified versions be marked as 41522changed, so that their problems will not be attributed erroneously to 41523authors of previous versions. 41524 41525 Some devices are designed to deny users access to install or run 41526modified versions of the software inside them, although the manufacturer 41527can do so. This is fundamentally incompatible with the aim of 41528protecting users' freedom to change the software. The systematic 41529pattern of such abuse occurs in the area of products for individuals to 41530use, which is precisely where it is most unacceptable. Therefore, we 41531have designed this version of the GPL to prohibit the practice for those 41532products. If such problems arise substantially in other domains, we 41533stand ready to extend this provision to those domains in future versions 41534of the GPL, as needed to protect the freedom of users. 41535 41536 Finally, every program is threatened constantly by software patents. 41537States should not allow patents to restrict development and use of 41538software on general-purpose computers, but in those that do, we wish to 41539avoid the special danger that patents applied to a free program could 41540make it effectively proprietary. To prevent this, the GPL assures that 41541patents cannot be used to render the program non-free. 41542 41543 The precise terms and conditions for copying, distribution and 41544modification follow. 41545 41546TERMS AND CONDITIONS 41547==================== 41548 41549 0. Definitions. 41550 41551 "This License" refers to version 3 of the GNU General Public 41552 License. 41553 41554 "Copyright" also means copyright-like laws that apply to other 41555 kinds of works, such as semiconductor masks. 41556 41557 "The Program" refers to any copyrightable work licensed under this 41558 License. Each licensee is addressed as "you". "Licensees" and 41559 "recipients" may be individuals or organizations. 41560 41561 To "modify" a work means to copy from or adapt all or part of the 41562 work in a fashion requiring copyright permission, other than the 41563 making of an exact copy. The resulting work is called a "modified 41564 version" of the earlier work or a work "based on" the earlier work. 41565 41566 A "covered work" means either the unmodified Program or a work 41567 based on the Program. 41568 41569 To "propagate" a work means to do anything with it that, without 41570 permission, would make you directly or secondarily liable for 41571 infringement under applicable copyright law, except executing it on 41572 a computer or modifying a private copy. Propagation includes 41573 copying, distribution (with or without modification), making 41574 available to the public, and in some countries other activities as 41575 well. 41576 41577 To "convey" a work means any kind of propagation that enables other 41578 parties to make or receive copies. Mere interaction with a user 41579 through a computer network, with no transfer of a copy, is not 41580 conveying. 41581 41582 An interactive user interface displays "Appropriate Legal Notices" 41583 to the extent that it includes a convenient and prominently visible 41584 feature that (1) displays an appropriate copyright notice, and (2) 41585 tells the user that there is no warranty for the work (except to 41586 the extent that warranties are provided), that licensees may convey 41587 the work under this License, and how to view a copy of this 41588 License. If the interface presents a list of user commands or 41589 options, such as a menu, a prominent item in the list meets this 41590 criterion. 41591 41592 1. Source Code. 41593 41594 The "source code" for a work means the preferred form of the work 41595 for making modifications to it. "Object code" means any non-source 41596 form of a work. 41597 41598 A "Standard Interface" means an interface that either is an 41599 official standard defined by a recognized standards body, or, in 41600 the case of interfaces specified for a particular programming 41601 language, one that is widely used among developers working in that 41602 language. 41603 41604 The "System Libraries" of an executable work include anything, 41605 other than the work as a whole, that (a) is included in the normal 41606 form of packaging a Major Component, but which is not part of that 41607 Major Component, and (b) serves only to enable use of the work with 41608 that Major Component, or to implement a Standard Interface for 41609 which an implementation is available to the public in source code 41610 form. A "Major Component", in this context, means a major 41611 essential component (kernel, window system, and so on) of the 41612 specific operating system (if any) on which the executable work 41613 runs, or a compiler used to produce the work, or an object code 41614 interpreter used to run it. 41615 41616 The "Corresponding Source" for a work in object code form means all 41617 the source code needed to generate, install, and (for an executable 41618 work) run the object code and to modify the work, including scripts 41619 to control those activities. However, it does not include the 41620 work's System Libraries, or general-purpose tools or generally 41621 available free programs which are used unmodified in performing 41622 those activities but which are not part of the work. For example, 41623 Corresponding Source includes interface definition files associated 41624 with source files for the work, and the source code for shared 41625 libraries and dynamically linked subprograms that the work is 41626 specifically designed to require, such as by intimate data 41627 communication or control flow between those subprograms and other 41628 parts of the work. 41629 41630 The Corresponding Source need not include anything that users can 41631 regenerate automatically from other parts of the Corresponding 41632 Source. 41633 41634 The Corresponding Source for a work in source code form is that 41635 same work. 41636 41637 2. Basic Permissions. 41638 41639 All rights granted under this License are granted for the term of 41640 copyright on the Program, and are irrevocable provided the stated 41641 conditions are met. This License explicitly affirms your unlimited 41642 permission to run the unmodified Program. The output from running 41643 a covered work is covered by this License only if the output, given 41644 its content, constitutes a covered work. This License acknowledges 41645 your rights of fair use or other equivalent, as provided by 41646 copyright law. 41647 41648 You may make, run and propagate covered works that you do not 41649 convey, without conditions so long as your license otherwise 41650 remains in force. You may convey covered works to others for the 41651 sole purpose of having them make modifications exclusively for you, 41652 or provide you with facilities for running those works, provided 41653 that you comply with the terms of this License in conveying all 41654 material for which you do not control copyright. Those thus making 41655 or running the covered works for you must do so exclusively on your 41656 behalf, under your direction and control, on terms that prohibit 41657 them from making any copies of your copyrighted material outside 41658 their relationship with you. 41659 41660 Conveying under any other circumstances is permitted solely under 41661 the conditions stated below. Sublicensing is not allowed; section 41662 10 makes it unnecessary. 41663 41664 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 41665 41666 No covered work shall be deemed part of an effective technological 41667 measure under any applicable law fulfilling obligations under 41668 article 11 of the WIPO copyright treaty adopted on 20 December 41669 1996, or similar laws prohibiting or restricting circumvention of 41670 such measures. 41671 41672 When you convey a covered work, you waive any legal power to forbid 41673 circumvention of technological measures to the extent such 41674 circumvention is effected by exercising rights under this License 41675 with respect to the covered work, and you disclaim any intention to 41676 limit operation or modification of the work as a means of 41677 enforcing, against the work's users, your or third parties' legal 41678 rights to forbid circumvention of technological measures. 41679 41680 4. Conveying Verbatim Copies. 41681 41682 You may convey verbatim copies of the Program's source code as you 41683 receive it, in any medium, provided that you conspicuously and 41684 appropriately publish on each copy an appropriate copyright notice; 41685 keep intact all notices stating that this License and any 41686 non-permissive terms added in accord with section 7 apply to the 41687 code; keep intact all notices of the absence of any warranty; and 41688 give all recipients a copy of this License along with the Program. 41689 41690 You may charge any price or no price for each copy that you convey, 41691 and you may offer support or warranty protection for a fee. 41692 41693 5. Conveying Modified Source Versions. 41694 41695 You may convey a work based on the Program, or the modifications to 41696 produce it from the Program, in the form of source code under the 41697 terms of section 4, provided that you also meet all of these 41698 conditions: 41699 41700 a. The work must carry prominent notices stating that you 41701 modified it, and giving a relevant date. 41702 41703 b. The work must carry prominent notices stating that it is 41704 released under this License and any conditions added under 41705 section 7. This requirement modifies the requirement in 41706 section 4 to "keep intact all notices". 41707 41708 c. You must license the entire work, as a whole, under this 41709 License to anyone who comes into possession of a copy. This 41710 License will therefore apply, along with any applicable 41711 section 7 additional terms, to the whole of the work, and all 41712 its parts, regardless of how they are packaged. This License 41713 gives no permission to license the work in any other way, but 41714 it does not invalidate such permission if you have separately 41715 received it. 41716 41717 d. If the work has interactive user interfaces, each must display 41718 Appropriate Legal Notices; however, if the Program has 41719 interactive interfaces that do not display Appropriate Legal 41720 Notices, your work need not make them do so. 41721 41722 A compilation of a covered work with other separate and independent 41723 works, which are not by their nature extensions of the covered 41724 work, and which are not combined with it such as to form a larger 41725 program, in or on a volume of a storage or distribution medium, is 41726 called an "aggregate" if the compilation and its resulting 41727 copyright are not used to limit the access or legal rights of the 41728 compilation's users beyond what the individual works permit. 41729 Inclusion of a covered work in an aggregate does not cause this 41730 License to apply to the other parts of the aggregate. 41731 41732 6. Conveying Non-Source Forms. 41733 41734 You may convey a covered work in object code form under the terms 41735 of sections 4 and 5, provided that you also convey the 41736 machine-readable Corresponding Source under the terms of this 41737 License, in one of these ways: 41738 41739 a. Convey the object code in, or embodied in, a physical product 41740 (including a physical distribution medium), accompanied by the 41741 Corresponding Source fixed on a durable physical medium 41742 customarily used for software interchange. 41743 41744 b. Convey the object code in, or embodied in, a physical product 41745 (including a physical distribution medium), accompanied by a 41746 written offer, valid for at least three years and valid for as 41747 long as you offer spare parts or customer support for that 41748 product model, to give anyone who possesses the object code 41749 either (1) a copy of the Corresponding Source for all the 41750 software in the product that is covered by this License, on a 41751 durable physical medium customarily used for software 41752 interchange, for a price no more than your reasonable cost of 41753 physically performing this conveying of source, or (2) access 41754 to copy the Corresponding Source from a network server at no 41755 charge. 41756 41757 c. Convey individual copies of the object code with a copy of the 41758 written offer to provide the Corresponding Source. This 41759 alternative is allowed only occasionally and noncommercially, 41760 and only if you received the object code with such an offer, 41761 in accord with subsection 6b. 41762 41763 d. Convey the object code by offering access from a designated 41764 place (gratis or for a charge), and offer equivalent access to 41765 the Corresponding Source in the same way through the same 41766 place at no further charge. You need not require recipients 41767 to copy the Corresponding Source along with the object code. 41768 If the place to copy the object code is a network server, the 41769 Corresponding Source may be on a different server (operated by 41770 you or a third party) that supports equivalent copying 41771 facilities, provided you maintain clear directions next to the 41772 object code saying where to find the Corresponding Source. 41773 Regardless of what server hosts the Corresponding Source, you 41774 remain obligated to ensure that it is available for as long as 41775 needed to satisfy these requirements. 41776 41777 e. Convey the object code using peer-to-peer transmission, 41778 provided you inform other peers where the object code and 41779 Corresponding Source of the work are being offered to the 41780 general public at no charge under subsection 6d. 41781 41782 A separable portion of the object code, whose source code is 41783 excluded from the Corresponding Source as a System Library, need 41784 not be included in conveying the object code work. 41785 41786 A "User Product" is either (1) a "consumer product", which means 41787 any tangible personal property which is normally used for personal, 41788 family, or household purposes, or (2) anything designed or sold for 41789 incorporation into a dwelling. In determining whether a product is 41790 a consumer product, doubtful cases shall be resolved in favor of 41791 coverage. For a particular product received by a particular user, 41792 "normally used" refers to a typical or common use of that class of 41793 product, regardless of the status of the particular user or of the 41794 way in which the particular user actually uses, or expects or is 41795 expected to use, the product. A product is a consumer product 41796 regardless of whether the product has substantial commercial, 41797 industrial or non-consumer uses, unless such uses represent the 41798 only significant mode of use of the product. 41799 41800 "Installation Information" for a User Product means any methods, 41801 procedures, authorization keys, or other information required to 41802 install and execute modified versions of a covered work in that 41803 User Product from a modified version of its Corresponding Source. 41804 The information must suffice to ensure that the continued 41805 functioning of the modified object code is in no case prevented or 41806 interfered with solely because modification has been made. 41807 41808 If you convey an object code work under this section in, or with, 41809 or specifically for use in, a User Product, and the conveying 41810 occurs as part of a transaction in which the right of possession 41811 and use of the User Product is transferred to the recipient in 41812 perpetuity or for a fixed term (regardless of how the transaction 41813 is characterized), the Corresponding Source conveyed under this 41814 section must be accompanied by the Installation Information. But 41815 this requirement does not apply if neither you nor any third party 41816 retains the ability to install modified object code on the User 41817 Product (for example, the work has been installed in ROM). 41818 41819 The requirement to provide Installation Information does not 41820 include a requirement to continue to provide support service, 41821 warranty, or updates for a work that has been modified or installed 41822 by the recipient, or for the User Product in which it has been 41823 modified or installed. Access to a network may be denied when the 41824 modification itself materially and adversely affects the operation 41825 of the network or violates the rules and protocols for 41826 communication across the network. 41827 41828 Corresponding Source conveyed, and Installation Information 41829 provided, in accord with this section must be in a format that is 41830 publicly documented (and with an implementation available to the 41831 public in source code form), and must require no special password 41832 or key for unpacking, reading or copying. 41833 41834 7. Additional Terms. 41835 41836 "Additional permissions" are terms that supplement the terms of 41837 this License by making exceptions from one or more of its 41838 conditions. Additional permissions that are applicable to the 41839 entire Program shall be treated as though they were included in 41840 this License, to the extent that they are valid under applicable 41841 law. If additional permissions apply only to part of the Program, 41842 that part may be used separately under those permissions, but the 41843 entire Program remains governed by this License without regard to 41844 the additional permissions. 41845 41846 When you convey a copy of a covered work, you may at your option 41847 remove any additional permissions from that copy, or from any part 41848 of it. (Additional permissions may be written to require their own 41849 removal in certain cases when you modify the work.) You may place 41850 additional permissions on material, added by you to a covered work, 41851 for which you have or can give appropriate copyright permission. 41852 41853 Notwithstanding any other provision of this License, for material 41854 you add to a covered work, you may (if authorized by the copyright 41855 holders of that material) supplement the terms of this License with 41856 terms: 41857 41858 a. Disclaiming warranty or limiting liability differently from 41859 the terms of sections 15 and 16 of this License; or 41860 41861 b. Requiring preservation of specified reasonable legal notices 41862 or author attributions in that material or in the Appropriate 41863 Legal Notices displayed by works containing it; or 41864 41865 c. Prohibiting misrepresentation of the origin of that material, 41866 or requiring that modified versions of such material be marked 41867 in reasonable ways as different from the original version; or 41868 41869 d. Limiting the use for publicity purposes of names of licensors 41870 or authors of the material; or 41871 41872 e. Declining to grant rights under trademark law for use of some 41873 trade names, trademarks, or service marks; or 41874 41875 f. Requiring indemnification of licensors and authors of that 41876 material by anyone who conveys the material (or modified 41877 versions of it) with contractual assumptions of liability to 41878 the recipient, for any liability that these contractual 41879 assumptions directly impose on those licensors and authors. 41880 41881 All other non-permissive additional terms are considered "further 41882 restrictions" within the meaning of section 10. If the Program as 41883 you received it, or any part of it, contains a notice stating that 41884 it is governed by this License along with a term that is a further 41885 restriction, you may remove that term. If a license document 41886 contains a further restriction but permits relicensing or conveying 41887 under this License, you may add to a covered work material governed 41888 by the terms of that license document, provided that the further 41889 restriction does not survive such relicensing or conveying. 41890 41891 If you add terms to a covered work in accord with this section, you 41892 must place, in the relevant source files, a statement of the 41893 additional terms that apply to those files, or a notice indicating 41894 where to find the applicable terms. 41895 41896 Additional terms, permissive or non-permissive, may be stated in 41897 the form of a separately written license, or stated as exceptions; 41898 the above requirements apply either way. 41899 41900 8. Termination. 41901 41902 You may not propagate or modify a covered work except as expressly 41903 provided under this License. Any attempt otherwise to propagate or 41904 modify it is void, and will automatically terminate your rights 41905 under this License (including any patent licenses granted under the 41906 third paragraph of section 11). 41907 41908 However, if you cease all violation of this License, then your 41909 license from a particular copyright holder is reinstated (a) 41910 provisionally, unless and until the copyright holder explicitly and 41911 finally terminates your license, and (b) permanently, if the 41912 copyright holder fails to notify you of the violation by some 41913 reasonable means prior to 60 days after the cessation. 41914 41915 Moreover, your license from a particular copyright holder is 41916 reinstated permanently if the copyright holder notifies you of the 41917 violation by some reasonable means, this is the first time you have 41918 received notice of violation of this License (for any work) from 41919 that copyright holder, and you cure the violation prior to 30 days 41920 after your receipt of the notice. 41921 41922 Termination of your rights under this section does not terminate 41923 the licenses of parties who have received copies or rights from you 41924 under this License. If your rights have been terminated and not 41925 permanently reinstated, you do not qualify to receive new licenses 41926 for the same material under section 10. 41927 41928 9. Acceptance Not Required for Having Copies. 41929 41930 You are not required to accept this License in order to receive or 41931 run a copy of the Program. Ancillary propagation of a covered work 41932 occurring solely as a consequence of using peer-to-peer 41933 transmission to receive a copy likewise does not require 41934 acceptance. However, nothing other than this License grants you 41935 permission to propagate or modify any covered work. These actions 41936 infringe copyright if you do not accept this License. Therefore, 41937 by modifying or propagating a covered work, you indicate your 41938 acceptance of this License to do so. 41939 41940 10. Automatic Licensing of Downstream Recipients. 41941 41942 Each time you convey a covered work, the recipient automatically 41943 receives a license from the original licensors, to run, modify and 41944 propagate that work, subject to this License. You are not 41945 responsible for enforcing compliance by third parties with this 41946 License. 41947 41948 An "entity transaction" is a transaction transferring control of an 41949 organization, or substantially all assets of one, or subdividing an 41950 organization, or merging organizations. If propagation of a 41951 covered work results from an entity transaction, each party to that 41952 transaction who receives a copy of the work also receives whatever 41953 licenses to the work the party's predecessor in interest had or 41954 could give under the previous paragraph, plus a right to possession 41955 of the Corresponding Source of the work from the predecessor in 41956 interest, if the predecessor has it or can get it with reasonable 41957 efforts. 41958 41959 You may not impose any further restrictions on the exercise of the 41960 rights granted or affirmed under this License. For example, you 41961 may not impose a license fee, royalty, or other charge for exercise 41962 of rights granted under this License, and you may not initiate 41963 litigation (including a cross-claim or counterclaim in a lawsuit) 41964 alleging that any patent claim is infringed by making, using, 41965 selling, offering for sale, or importing the Program or any portion 41966 of it. 41967 41968 11. Patents. 41969 41970 A "contributor" is a copyright holder who authorizes use under this 41971 License of the Program or a work on which the Program is based. 41972 The work thus licensed is called the contributor's "contributor 41973 version". 41974 41975 A contributor's "essential patent claims" are all patent claims 41976 owned or controlled by the contributor, whether already acquired or 41977 hereafter acquired, that would be infringed by some manner, 41978 permitted by this License, of making, using, or selling its 41979 contributor version, but do not include claims that would be 41980 infringed only as a consequence of further modification of the 41981 contributor version. For purposes of this definition, "control" 41982 includes the right to grant patent sublicenses in a manner 41983 consistent with the requirements of this License. 41984 41985 Each contributor grants you a non-exclusive, worldwide, 41986 royalty-free patent license under the contributor's essential 41987 patent claims, to make, use, sell, offer for sale, import and 41988 otherwise run, modify and propagate the contents of its contributor 41989 version. 41990 41991 In the following three paragraphs, a "patent license" is any 41992 express agreement or commitment, however denominated, not to 41993 enforce a patent (such as an express permission to practice a 41994 patent or covenant not to sue for patent infringement). To "grant" 41995 such a patent license to a party means to make such an agreement or 41996 commitment not to enforce a patent against the party. 41997 41998 If you convey a covered work, knowingly relying on a patent 41999 license, and the Corresponding Source of the work is not available 42000 for anyone to copy, free of charge and under the terms of this 42001 License, through a publicly available network server or other 42002 readily accessible means, then you must either (1) cause the 42003 Corresponding Source to be so available, or (2) arrange to deprive 42004 yourself of the benefit of the patent license for this particular 42005 work, or (3) arrange, in a manner consistent with the requirements 42006 of this License, to extend the patent license to downstream 42007 recipients. "Knowingly relying" means you have actual knowledge 42008 that, but for the patent license, your conveying the covered work 42009 in a country, or your recipient's use of the covered work in a 42010 country, would infringe one or more identifiable patents in that 42011 country that you have reason to believe are valid. 42012 42013 If, pursuant to or in connection with a single transaction or 42014 arrangement, you convey, or propagate by procuring conveyance of, a 42015 covered work, and grant a patent license to some of the parties 42016 receiving the covered work authorizing them to use, propagate, 42017 modify or convey a specific copy of the covered work, then the 42018 patent license you grant is automatically extended to all 42019 recipients of the covered work and works based on it. 42020 42021 A patent license is "discriminatory" if it does not include within 42022 the scope of its coverage, prohibits the exercise of, or is 42023 conditioned on the non-exercise of one or more of the rights that 42024 are specifically granted under this License. You may not convey a 42025 covered work if you are a party to an arrangement with a third 42026 party that is in the business of distributing software, under which 42027 you make payment to the third party based on the extent of your 42028 activity of conveying the work, and under which the third party 42029 grants, to any of the parties who would receive the covered work 42030 from you, a discriminatory patent license (a) in connection with 42031 copies of the covered work conveyed by you (or copies made from 42032 those copies), or (b) primarily for and in connection with specific 42033 products or compilations that contain the covered work, unless you 42034 entered into that arrangement, or that patent license was granted, 42035 prior to 28 March 2007. 42036 42037 Nothing in this License shall be construed as excluding or limiting 42038 any implied license or other defenses to infringement that may 42039 otherwise be available to you under applicable patent law. 42040 42041 12. No Surrender of Others' Freedom. 42042 42043 If conditions are imposed on you (whether by court order, agreement 42044 or otherwise) that contradict the conditions of this License, they 42045 do not excuse you from the conditions of this License. If you 42046 cannot convey a covered work so as to satisfy simultaneously your 42047 obligations under this License and any other pertinent obligations, 42048 then as a consequence you may not convey it at all. For example, 42049 if you agree to terms that obligate you to collect a royalty for 42050 further conveying from those to whom you convey the Program, the 42051 only way you could satisfy both those terms and this License would 42052 be to refrain entirely from conveying the Program. 42053 42054 13. Use with the GNU Affero General Public License. 42055 42056 Notwithstanding any other provision of this License, you have 42057 permission to link or combine any covered work with a work licensed 42058 under version 3 of the GNU Affero General Public License into a 42059 single combined work, and to convey the resulting work. The terms 42060 of this License will continue to apply to the part which is the 42061 covered work, but the special requirements of the GNU Affero 42062 General Public License, section 13, concerning interaction through 42063 a network will apply to the combination as such. 42064 42065 14. Revised Versions of this License. 42066 42067 The Free Software Foundation may publish revised and/or new 42068 versions of the GNU General Public License from time to time. Such 42069 new versions will be similar in spirit to the present version, but 42070 may differ in detail to address new problems or concerns. 42071 42072 Each version is given a distinguishing version number. If the 42073 Program specifies that a certain numbered version of the GNU 42074 General Public License "or any later version" applies to it, you 42075 have the option of following the terms and conditions either of 42076 that numbered version or of any later version published by the Free 42077 Software Foundation. If the Program does not specify a version 42078 number of the GNU General Public License, you may choose any 42079 version ever published by the Free Software Foundation. 42080 42081 If the Program specifies that a proxy can decide which future 42082 versions of the GNU General Public License can be used, that 42083 proxy's public statement of acceptance of a version permanently 42084 authorizes you to choose that version for the Program. 42085 42086 Later license versions may give you additional or different 42087 permissions. However, no additional obligations are imposed on any 42088 author or copyright holder as a result of your choosing to follow a 42089 later version. 42090 42091 15. Disclaimer of Warranty. 42092 42093 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 42094 APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE 42095 COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" 42096 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 42097 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 42098 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE 42099 RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. 42100 SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL 42101 NECESSARY SERVICING, REPAIR OR CORRECTION. 42102 42103 16. Limitation of Liability. 42104 42105 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 42106 WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES 42107 AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 42108 DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 42109 CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE 42110 THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA 42111 BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 42112 PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 42113 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF 42114 THE POSSIBILITY OF SUCH DAMAGES. 42115 42116 17. Interpretation of Sections 15 and 16. 42117 42118 If the disclaimer of warranty and limitation of liability provided 42119 above cannot be given local legal effect according to their terms, 42120 reviewing courts shall apply local law that most closely 42121 approximates an absolute waiver of all civil liability in 42122 connection with the Program, unless a warranty or assumption of 42123 liability accompanies a copy of the Program in return for a fee. 42124 42125END OF TERMS AND CONDITIONS 42126=========================== 42127 42128How to Apply These Terms to Your New Programs 42129============================================= 42130 42131If you develop a new program, and you want it to be of the greatest 42132possible use to the public, the best way to achieve this is to make it 42133free software which everyone can redistribute and change under these 42134terms. 42135 42136 To do so, attach the following notices to the program. It is safest to 42137attach them to the start of each source file to most effectively state 42138the exclusion of warranty; and each file should have at least the 42139"copyright" line and a pointer to where the full notice is found. 42140 42141 ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. 42142 Copyright (C) YEAR NAME OF AUTHOR 42143 42144 This program is free software: you can redistribute it and/or modify 42145 it under the terms of the GNU General Public License as published by 42146 the Free Software Foundation, either version 3 of the License, or (at 42147 your option) any later version. 42148 42149 This program is distributed in the hope that it will be useful, but 42150 WITHOUT ANY WARRANTY; without even the implied warranty of 42151 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 42152 General Public License for more details. 42153 42154 You should have received a copy of the GNU General Public License 42155 along with this program. If not, see <http://www.gnu.org/licenses/>. 42156 42157 Also add information on how to contact you by electronic and paper 42158mail. 42159 42160 If the program does terminal interaction, make it output a short notice 42161like this when it starts in an interactive mode: 42162 42163 PROGRAM Copyright (C) YEAR NAME OF AUTHOR 42164 This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 42165 This is free software, and you are welcome to redistribute it 42166 under certain conditions; type 'show c' for details. 42167 42168 The hypothetical commands 'show w' and 'show c' should show the 42169appropriate parts of the General Public License. Of course, your 42170program's commands might be different; for a GUI interface, you would 42171use an "about box". 42172 42173 You should also get your employer (if you work as a programmer) or 42174school, if any, to sign a "copyright disclaimer" for the program, if 42175necessary. For more information on this, and how to apply and follow 42176the GNU GPL, see <http://www.gnu.org/licenses/>. 42177 42178 The GNU General Public License does not permit incorporating your 42179program into proprietary programs. If your program is a subroutine 42180library, you may consider it more useful to permit linking proprietary 42181applications with the library. If this is what you want to do, use the 42182GNU Lesser General Public License instead of this License. But first, 42183please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. 42184 42185 42186File: gccint.info, Node: GNU Free Documentation License, Next: Contributors, Prev: Copying, Up: Top 42187 42188GNU Free Documentation License 42189****************************** 42190 42191 Version 1.3, 3 November 2008 42192 42193 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 42194 <http://fsf.org/> 42195 42196 Everyone is permitted to copy and distribute verbatim copies 42197 of this license document, but changing it is not allowed. 42198 42199 0. PREAMBLE 42200 42201 The purpose of this License is to make a manual, textbook, or other 42202 functional and useful document "free" in the sense of freedom: to 42203 assure everyone the effective freedom to copy and redistribute it, 42204 with or without modifying it, either commercially or 42205 noncommercially. Secondarily, this License preserves for the 42206 author and publisher a way to get credit for their work, while not 42207 being considered responsible for modifications made by others. 42208 42209 This License is a kind of "copyleft", which means that derivative 42210 works of the document must themselves be free in the same sense. 42211 It complements the GNU General Public License, which is a copyleft 42212 license designed for free software. 42213 42214 We have designed this License in order to use it for manuals for 42215 free software, because free software needs free documentation: a 42216 free program should come with manuals providing the same freedoms 42217 that the software does. But this License is not limited to 42218 software manuals; it can be used for any textual work, regardless 42219 of subject matter or whether it is published as a printed book. We 42220 recommend this License principally for works whose purpose is 42221 instruction or reference. 42222 42223 1. APPLICABILITY AND DEFINITIONS 42224 42225 This License applies to any manual or other work, in any medium, 42226 that contains a notice placed by the copyright holder saying it can 42227 be distributed under the terms of this License. Such a notice 42228 grants a world-wide, royalty-free license, unlimited in duration, 42229 to use that work under the conditions stated herein. The 42230 "Document", below, refers to any such manual or work. Any member 42231 of the public is a licensee, and is addressed as "you". You accept 42232 the license if you copy, modify or distribute the work in a way 42233 requiring permission under copyright law. 42234 42235 A "Modified Version" of the Document means any work containing the 42236 Document or a portion of it, either copied verbatim, or with 42237 modifications and/or translated into another language. 42238 42239 A "Secondary Section" is a named appendix or a front-matter section 42240 of the Document that deals exclusively with the relationship of the 42241 publishers or authors of the Document to the Document's overall 42242 subject (or to related matters) and contains nothing that could 42243 fall directly within that overall subject. (Thus, if the Document 42244 is in part a textbook of mathematics, a Secondary Section may not 42245 explain any mathematics.) The relationship could be a matter of 42246 historical connection with the subject or with related matters, or 42247 of legal, commercial, philosophical, ethical or political position 42248 regarding them. 42249 42250 The "Invariant Sections" are certain Secondary Sections whose 42251 titles are designated, as being those of Invariant Sections, in the 42252 notice that says that the Document is released under this License. 42253 If a section does not fit the above definition of Secondary then it 42254 is not allowed to be designated as Invariant. The Document may 42255 contain zero Invariant Sections. If the Document does not identify 42256 any Invariant Sections then there are none. 42257 42258 The "Cover Texts" are certain short passages of text that are 42259 listed, as Front-Cover Texts or Back-Cover Texts, in the notice 42260 that says that the Document is released under this License. A 42261 Front-Cover Text may be at most 5 words, and a Back-Cover Text may 42262 be at most 25 words. 42263 42264 A "Transparent" copy of the Document means a machine-readable copy, 42265 represented in a format whose specification is available to the 42266 general public, that is suitable for revising the document 42267 straightforwardly with generic text editors or (for images composed 42268 of pixels) generic paint programs or (for drawings) some widely 42269 available drawing editor, and that is suitable for input to text 42270 formatters or for automatic translation to a variety of formats 42271 suitable for input to text formatters. A copy made in an otherwise 42272 Transparent file format whose markup, or absence of markup, has 42273 been arranged to thwart or discourage subsequent modification by 42274 readers is not Transparent. An image format is not Transparent if 42275 used for any substantial amount of text. A copy that is not 42276 "Transparent" is called "Opaque". 42277 42278 Examples of suitable formats for Transparent copies include plain 42279 ASCII without markup, Texinfo input format, LaTeX input format, 42280 SGML or XML using a publicly available DTD, and standard-conforming 42281 simple HTML, PostScript or PDF designed for human modification. 42282 Examples of transparent image formats include PNG, XCF and JPG. 42283 Opaque formats include proprietary formats that can be read and 42284 edited only by proprietary word processors, SGML or XML for which 42285 the DTD and/or processing tools are not generally available, and 42286 the machine-generated HTML, PostScript or PDF produced by some word 42287 processors for output purposes only. 42288 42289 The "Title Page" means, for a printed book, the title page itself, 42290 plus such following pages as are needed to hold, legibly, the 42291 material this License requires to appear in the title page. For 42292 works in formats which do not have any title page as such, "Title 42293 Page" means the text near the most prominent appearance of the 42294 work's title, preceding the beginning of the body of the text. 42295 42296 The "publisher" means any person or entity that distributes copies 42297 of the Document to the public. 42298 42299 A section "Entitled XYZ" means a named subunit of the Document 42300 whose title either is precisely XYZ or contains XYZ in parentheses 42301 following text that translates XYZ in another language. (Here XYZ 42302 stands for a specific section name mentioned below, such as 42303 "Acknowledgements", "Dedications", "Endorsements", or "History".) 42304 To "Preserve the Title" of such a section when you modify the 42305 Document means that it remains a section "Entitled XYZ" according 42306 to this definition. 42307 42308 The Document may include Warranty Disclaimers next to the notice 42309 which states that this License applies to the Document. These 42310 Warranty Disclaimers are considered to be included by reference in 42311 this License, but only as regards disclaiming warranties: any other 42312 implication that these Warranty Disclaimers may have is void and 42313 has no effect on the meaning of this License. 42314 42315 2. VERBATIM COPYING 42316 42317 You may copy and distribute the Document in any medium, either 42318 commercially or noncommercially, provided that this License, the 42319 copyright notices, and the license notice saying this License 42320 applies to the Document are reproduced in all copies, and that you 42321 add no other conditions whatsoever to those of this License. You 42322 may not use technical measures to obstruct or control the reading 42323 or further copying of the copies you make or distribute. However, 42324 you may accept compensation in exchange for copies. If you 42325 distribute a large enough number of copies you must also follow the 42326 conditions in section 3. 42327 42328 You may also lend copies, under the same conditions stated above, 42329 and you may publicly display copies. 42330 42331 3. COPYING IN QUANTITY 42332 42333 If you publish printed copies (or copies in media that commonly 42334 have printed covers) of the Document, numbering more than 100, and 42335 the Document's license notice requires Cover Texts, you must 42336 enclose the copies in covers that carry, clearly and legibly, all 42337 these Cover Texts: Front-Cover Texts on the front cover, and 42338 Back-Cover Texts on the back cover. Both covers must also clearly 42339 and legibly identify you as the publisher of these copies. The 42340 front cover must present the full title with all words of the title 42341 equally prominent and visible. You may add other material on the 42342 covers in addition. Copying with changes limited to the covers, as 42343 long as they preserve the title of the Document and satisfy these 42344 conditions, can be treated as verbatim copying in other respects. 42345 42346 If the required texts for either cover are too voluminous to fit 42347 legibly, you should put the first ones listed (as many as fit 42348 reasonably) on the actual cover, and continue the rest onto 42349 adjacent pages. 42350 42351 If you publish or distribute Opaque copies of the Document 42352 numbering more than 100, you must either include a machine-readable 42353 Transparent copy along with each Opaque copy, or state in or with 42354 each Opaque copy a computer-network location from which the general 42355 network-using public has access to download using public-standard 42356 network protocols a complete Transparent copy of the Document, free 42357 of added material. If you use the latter option, you must take 42358 reasonably prudent steps, when you begin distribution of Opaque 42359 copies in quantity, to ensure that this Transparent copy will 42360 remain thus accessible at the stated location until at least one 42361 year after the last time you distribute an Opaque copy (directly or 42362 through your agents or retailers) of that edition to the public. 42363 42364 It is requested, but not required, that you contact the authors of 42365 the Document well before redistributing any large number of copies, 42366 to give them a chance to provide you with an updated version of the 42367 Document. 42368 42369 4. MODIFICATIONS 42370 42371 You may copy and distribute a Modified Version of the Document 42372 under the conditions of sections 2 and 3 above, provided that you 42373 release the Modified Version under precisely this License, with the 42374 Modified Version filling the role of the Document, thus licensing 42375 distribution and modification of the Modified Version to whoever 42376 possesses a copy of it. In addition, you must do these things in 42377 the Modified Version: 42378 42379 A. Use in the Title Page (and on the covers, if any) a title 42380 distinct from that of the Document, and from those of previous 42381 versions (which should, if there were any, be listed in the 42382 History section of the Document). You may use the same title 42383 as a previous version if the original publisher of that 42384 version gives permission. 42385 42386 B. List on the Title Page, as authors, one or more persons or 42387 entities responsible for authorship of the modifications in 42388 the Modified Version, together with at least five of the 42389 principal authors of the Document (all of its principal 42390 authors, if it has fewer than five), unless they release you 42391 from this requirement. 42392 42393 C. State on the Title page the name of the publisher of the 42394 Modified Version, as the publisher. 42395 42396 D. Preserve all the copyright notices of the Document. 42397 42398 E. Add an appropriate copyright notice for your modifications 42399 adjacent to the other copyright notices. 42400 42401 F. Include, immediately after the copyright notices, a license 42402 notice giving the public permission to use the Modified 42403 Version under the terms of this License, in the form shown in 42404 the Addendum below. 42405 42406 G. Preserve in that license notice the full lists of Invariant 42407 Sections and required Cover Texts given in the Document's 42408 license notice. 42409 42410 H. Include an unaltered copy of this License. 42411 42412 I. Preserve the section Entitled "History", Preserve its Title, 42413 and add to it an item stating at least the title, year, new 42414 authors, and publisher of the Modified Version as given on the 42415 Title Page. If there is no section Entitled "History" in the 42416 Document, create one stating the title, year, authors, and 42417 publisher of the Document as given on its Title Page, then add 42418 an item describing the Modified Version as stated in the 42419 previous sentence. 42420 42421 J. Preserve the network location, if any, given in the Document 42422 for public access to a Transparent copy of the Document, and 42423 likewise the network locations given in the Document for 42424 previous versions it was based on. These may be placed in the 42425 "History" section. You may omit a network location for a work 42426 that was published at least four years before the Document 42427 itself, or if the original publisher of the version it refers 42428 to gives permission. 42429 42430 K. For any section Entitled "Acknowledgements" or "Dedications", 42431 Preserve the Title of the section, and preserve in the section 42432 all the substance and tone of each of the contributor 42433 acknowledgements and/or dedications given therein. 42434 42435 L. Preserve all the Invariant Sections of the Document, unaltered 42436 in their text and in their titles. Section numbers or the 42437 equivalent are not considered part of the section titles. 42438 42439 M. Delete any section Entitled "Endorsements". Such a section 42440 may not be included in the Modified Version. 42441 42442 N. Do not retitle any existing section to be Entitled 42443 "Endorsements" or to conflict in title with any Invariant 42444 Section. 42445 42446 O. Preserve any Warranty Disclaimers. 42447 42448 If the Modified Version includes new front-matter sections or 42449 appendices that qualify as Secondary Sections and contain no 42450 material copied from the Document, you may at your option designate 42451 some or all of these sections as invariant. To do this, add their 42452 titles to the list of Invariant Sections in the Modified Version's 42453 license notice. These titles must be distinct from any other 42454 section titles. 42455 42456 You may add a section Entitled "Endorsements", provided it contains 42457 nothing but endorsements of your Modified Version by various 42458 parties--for example, statements of peer review or that the text 42459 has been approved by an organization as the authoritative 42460 definition of a standard. 42461 42462 You may add a passage of up to five words as a Front-Cover Text, 42463 and a passage of up to 25 words as a Back-Cover Text, to the end of 42464 the list of Cover Texts in the Modified Version. Only one passage 42465 of Front-Cover Text and one of Back-Cover Text may be added by (or 42466 through arrangements made by) any one entity. If the Document 42467 already includes a cover text for the same cover, previously added 42468 by you or by arrangement made by the same entity you are acting on 42469 behalf of, you may not add another; but you may replace the old 42470 one, on explicit permission from the previous publisher that added 42471 the old one. 42472 42473 The author(s) and publisher(s) of the Document do not by this 42474 License give permission to use their names for publicity for or to 42475 assert or imply endorsement of any Modified Version. 42476 42477 5. COMBINING DOCUMENTS 42478 42479 You may combine the Document with other documents released under 42480 this License, under the terms defined in section 4 above for 42481 modified versions, provided that you include in the combination all 42482 of the Invariant Sections of all of the original documents, 42483 unmodified, and list them all as Invariant Sections of your 42484 combined work in its license notice, and that you preserve all 42485 their Warranty Disclaimers. 42486 42487 The combined work need only contain one copy of this License, and 42488 multiple identical Invariant Sections may be replaced with a single 42489 copy. If there are multiple Invariant Sections with the same name 42490 but different contents, make the title of each such section unique 42491 by adding at the end of it, in parentheses, the name of the 42492 original author or publisher of that section if known, or else a 42493 unique number. Make the same adjustment to the section titles in 42494 the list of Invariant Sections in the license notice of the 42495 combined work. 42496 42497 In the combination, you must combine any sections Entitled 42498 "History" in the various original documents, forming one section 42499 Entitled "History"; likewise combine any sections Entitled 42500 "Acknowledgements", and any sections Entitled "Dedications". You 42501 must delete all sections Entitled "Endorsements." 42502 42503 6. COLLECTIONS OF DOCUMENTS 42504 42505 You may make a collection consisting of the Document and other 42506 documents released under this License, and replace the individual 42507 copies of this License in the various documents with a single copy 42508 that is included in the collection, provided that you follow the 42509 rules of this License for verbatim copying of each of the documents 42510 in all other respects. 42511 42512 You may extract a single document from such a collection, and 42513 distribute it individually under this License, provided you insert 42514 a copy of this License into the extracted document, and follow this 42515 License in all other respects regarding verbatim copying of that 42516 document. 42517 42518 7. AGGREGATION WITH INDEPENDENT WORKS 42519 42520 A compilation of the Document or its derivatives with other 42521 separate and independent documents or works, in or on a volume of a 42522 storage or distribution medium, is called an "aggregate" if the 42523 copyright resulting from the compilation is not used to limit the 42524 legal rights of the compilation's users beyond what the individual 42525 works permit. When the Document is included in an aggregate, this 42526 License does not apply to the other works in the aggregate which 42527 are not themselves derivative works of the Document. 42528 42529 If the Cover Text requirement of section 3 is applicable to these 42530 copies of the Document, then if the Document is less than one half 42531 of the entire aggregate, the Document's Cover Texts may be placed 42532 on covers that bracket the Document within the aggregate, or the 42533 electronic equivalent of covers if the Document is in electronic 42534 form. Otherwise they must appear on printed covers that bracket 42535 the whole aggregate. 42536 42537 8. TRANSLATION 42538 42539 Translation is considered a kind of modification, so you may 42540 distribute translations of the Document under the terms of section 42541 4. Replacing Invariant Sections with translations requires special 42542 permission from their copyright holders, but you may include 42543 translations of some or all Invariant Sections in addition to the 42544 original versions of these Invariant Sections. You may include a 42545 translation of this License, and all the license notices in the 42546 Document, and any Warranty Disclaimers, provided that you also 42547 include the original English version of this License and the 42548 original versions of those notices and disclaimers. In case of a 42549 disagreement between the translation and the original version of 42550 this License or a notice or disclaimer, the original version will 42551 prevail. 42552 42553 If a section in the Document is Entitled "Acknowledgements", 42554 "Dedications", or "History", the requirement (section 4) to 42555 Preserve its Title (section 1) will typically require changing the 42556 actual title. 42557 42558 9. TERMINATION 42559 42560 You may not copy, modify, sublicense, or distribute the Document 42561 except as expressly provided under this License. Any attempt 42562 otherwise to copy, modify, sublicense, or distribute it is void, 42563 and will automatically terminate your rights under this License. 42564 42565 However, if you cease all violation of this License, then your 42566 license from a particular copyright holder is reinstated (a) 42567 provisionally, unless and until the copyright holder explicitly and 42568 finally terminates your license, and (b) permanently, if the 42569 copyright holder fails to notify you of the violation by some 42570 reasonable means prior to 60 days after the cessation. 42571 42572 Moreover, your license from a particular copyright holder is 42573 reinstated permanently if the copyright holder notifies you of the 42574 violation by some reasonable means, this is the first time you have 42575 received notice of violation of this License (for any work) from 42576 that copyright holder, and you cure the violation prior to 30 days 42577 after your receipt of the notice. 42578 42579 Termination of your rights under this section does not terminate 42580 the licenses of parties who have received copies or rights from you 42581 under this License. If your rights have been terminated and not 42582 permanently reinstated, receipt of a copy of some or all of the 42583 same material does not give you any rights to use it. 42584 42585 10. FUTURE REVISIONS OF THIS LICENSE 42586 42587 The Free Software Foundation may publish new, revised versions of 42588 the GNU Free Documentation License from time to time. Such new 42589 versions will be similar in spirit to the present version, but may 42590 differ in detail to address new problems or concerns. See 42591 <http://www.gnu.org/copyleft/>. 42592 42593 Each version of the License is given a distinguishing version 42594 number. If the Document specifies that a particular numbered 42595 version of this License "or any later version" applies to it, you 42596 have the option of following the terms and conditions either of 42597 that specified version or of any later version that has been 42598 published (not as a draft) by the Free Software Foundation. If the 42599 Document does not specify a version number of this License, you may 42600 choose any version ever published (not as a draft) by the Free 42601 Software Foundation. If the Document specifies that a proxy can 42602 decide which future versions of this License can be used, that 42603 proxy's public statement of acceptance of a version permanently 42604 authorizes you to choose that version for the Document. 42605 42606 11. RELICENSING 42607 42608 "Massive Multiauthor Collaboration Site" (or "MMC Site") means any 42609 World Wide Web server that publishes copyrightable works and also 42610 provides prominent facilities for anybody to edit those works. A 42611 public wiki that anybody can edit is an example of such a server. 42612 A "Massive Multiauthor Collaboration" (or "MMC") contained in the 42613 site means any set of copyrightable works thus published on the MMC 42614 site. 42615 42616 "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 42617 license published by Creative Commons Corporation, a not-for-profit 42618 corporation with a principal place of business in San Francisco, 42619 California, as well as future copyleft versions of that license 42620 published by that same organization. 42621 42622 "Incorporate" means to publish or republish a Document, in whole or 42623 in part, as part of another Document. 42624 42625 An MMC is "eligible for relicensing" if it is licensed under this 42626 License, and if all works that were first published under this 42627 License somewhere other than this MMC, and subsequently 42628 incorporated in whole or in part into the MMC, (1) had no cover 42629 texts or invariant sections, and (2) were thus incorporated prior 42630 to November 1, 2008. 42631 42632 The operator of an MMC Site may republish an MMC contained in the 42633 site under CC-BY-SA on the same site at any time before August 1, 42634 2009, provided the MMC is eligible for relicensing. 42635 42636ADDENDUM: How to use this License for your documents 42637==================================================== 42638 42639To use this License in a document you have written, include a copy of 42640the License in the document and put the following copyright and license 42641notices just after the title page: 42642 42643 Copyright (C) YEAR YOUR NAME. 42644 Permission is granted to copy, distribute and/or modify this document 42645 under the terms of the GNU Free Documentation License, Version 1.3 42646 or any later version published by the Free Software Foundation; 42647 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover 42648 Texts. A copy of the license is included in the section entitled ``GNU 42649 Free Documentation License''. 42650 42651 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, 42652replace the "with...Texts." line with this: 42653 42654 with the Invariant Sections being LIST THEIR TITLES, with 42655 the Front-Cover Texts being LIST, and with the Back-Cover Texts 42656 being LIST. 42657 42658 If you have Invariant Sections without Cover Texts, or some other 42659combination of the three, merge those two alternatives to suit the 42660situation. 42661 42662 If your document contains nontrivial examples of program code, we 42663recommend releasing these examples in parallel under your choice of free 42664software license, such as the GNU General Public License, to permit 42665their use in free software. 42666 42667 42668File: gccint.info, Node: Contributors, Next: Option Index, Prev: GNU Free Documentation License, Up: Top 42669 42670Contributors to GCC 42671******************* 42672 42673The GCC project would like to thank its many contributors. Without them 42674the project would not have been nearly as successful as it has been. 42675Any omissions in this list are accidental. Feel free to contact 42676<law@redhat.com> or <gerald@pfeifer.com> if you have been left out or 42677some of your contributions are not listed. Please keep this list in 42678alphabetical order. 42679 42680 * Analog Devices helped implement the support for complex data types 42681 and iterators. 42682 42683 * John David Anglin for threading-related fixes and improvements to 42684 libstdc++-v3, and the HP-UX port. 42685 42686 * James van Artsdalen wrote the code that makes efficient use of the 42687 Intel 80387 register stack. 42688 42689 * Abramo and Roberto Bagnara for the SysV68 Motorola 3300 Delta 42690 Series port. 42691 42692 * Alasdair Baird for various bug fixes. 42693 42694 * Giovanni Bajo for analyzing lots of complicated C++ problem 42695 reports. 42696 42697 * Peter Barada for his work to improve code generation for new 42698 ColdFire cores. 42699 42700 * Gerald Baumgartner added the signature extension to the C++ front 42701 end. 42702 42703 * Godmar Back for his Java improvements and encouragement. 42704 42705 * Scott Bambrough for help porting the Java compiler. 42706 42707 * Wolfgang Bangerth for processing tons of bug reports. 42708 42709 * Jon Beniston for his Microsoft Windows port of Java and port to 42710 Lattice Mico32. 42711 42712 * Daniel Berlin for better DWARF 2 support, faster/better 42713 optimizations, improved alias analysis, plus migrating GCC to 42714 Bugzilla. 42715 42716 * Geoff Berry for his Java object serialization work and various 42717 patches. 42718 42719 * David Binderman tests weekly snapshots of GCC trunk against Fedora 42720 Rawhide for several architectures. 42721 42722 * Laurynas Biveinis for memory management work and DJGPP port fixes. 42723 42724 * Uros Bizjak for the implementation of x87 math built-in functions 42725 and for various middle end and i386 back end improvements and bug 42726 fixes. 42727 42728 * Eric Blake for helping to make GCJ and libgcj conform to the 42729 specifications. 42730 42731 * Janne Blomqvist for contributions to GNU Fortran. 42732 42733 * Segher Boessenkool for various fixes. 42734 42735 * Hans-J. Boehm for his garbage collector, IA-64 libffi port, and 42736 other Java work. 42737 42738 * Neil Booth for work on cpplib, lang hooks, debug hooks and other 42739 miscellaneous clean-ups. 42740 42741 * Steven Bosscher for integrating the GNU Fortran front end into GCC 42742 and for contributing to the tree-ssa branch. 42743 42744 * Eric Botcazou for fixing middle- and backend bugs left and right. 42745 42746 * Per Bothner for his direction via the steering committee and 42747 various improvements to the infrastructure for supporting new 42748 languages. Chill front end implementation. Initial 42749 implementations of cpplib, fix-header, config.guess, libio, and 42750 past C++ library (libg++) maintainer. Dreaming up, designing and 42751 implementing much of GCJ. 42752 42753 * Devon Bowen helped port GCC to the Tahoe. 42754 42755 * Don Bowman for mips-vxworks contributions. 42756 42757 * James Bowman for the FT32 port. 42758 42759 * Dave Brolley for work on cpplib and Chill. 42760 42761 * Paul Brook for work on the ARM architecture and maintaining GNU 42762 Fortran. 42763 42764 * Robert Brown implemented the support for Encore 32000 systems. 42765 42766 * Christian Bruel for improvements to local store elimination. 42767 42768 * Herman A.J. ten Brugge for various fixes. 42769 42770 * Joerg Brunsmann for Java compiler hacking and help with the GCJ 42771 FAQ. 42772 42773 * Joe Buck for his direction via the steering committee from its 42774 creation to 2013. 42775 42776 * Craig Burley for leadership of the G77 Fortran effort. 42777 42778 * Stephan Buys for contributing Doxygen notes for libstdc++. 42779 42780 * Paolo Carlini for libstdc++ work: lots of efficiency improvements 42781 to the C++ strings, streambufs and formatted I/O, hard detective 42782 work on the frustrating localization issues, and keeping up with 42783 the problem reports. 42784 42785 * John Carr for his alias work, SPARC hacking, infrastructure 42786 improvements, previous contributions to the steering committee, 42787 loop optimizations, etc. 42788 42789 * Stephane Carrez for 68HC11 and 68HC12 ports. 42790 42791 * Steve Chamberlain for support for the Renesas SH and H8 processors 42792 and the PicoJava processor, and for GCJ config fixes. 42793 42794 * Glenn Chambers for help with the GCJ FAQ. 42795 42796 * John-Marc Chandonia for various libgcj patches. 42797 42798 * Denis Chertykov for contributing and maintaining the AVR port, the 42799 first GCC port for an 8-bit architecture. 42800 42801 * Scott Christley for his Objective-C contributions. 42802 42803 * Eric Christopher for his Java porting help and clean-ups. 42804 42805 * Branko Cibej for more warning contributions. 42806 42807 * The GNU Classpath project for all of their merged runtime code. 42808 42809 * Nick Clifton for arm, mcore, fr30, v850, m32r, msp430 rx work, 42810 '--help', and other random hacking. 42811 42812 * Michael Cook for libstdc++ cleanup patches to reduce warnings. 42813 42814 * R. Kelley Cook for making GCC buildable from a read-only directory 42815 as well as other miscellaneous build process and documentation 42816 clean-ups. 42817 42818 * Ralf Corsepius for SH testing and minor bug fixing. 42819 42820 * Stan Cox for care and feeding of the x86 port and lots of behind 42821 the scenes hacking. 42822 42823 * Alex Crain provided changes for the 3b1. 42824 42825 * Ian Dall for major improvements to the NS32k port. 42826 42827 * Paul Dale for his work to add uClinux platform support to the m68k 42828 backend. 42829 42830 * Dario Dariol contributed the four varieties of sample programs that 42831 print a copy of their source. 42832 42833 * Russell Davidson for fstream and stringstream fixes in libstdc++. 42834 42835 * Bud Davis for work on the G77 and GNU Fortran compilers. 42836 42837 * Mo DeJong for GCJ and libgcj bug fixes. 42838 42839 * DJ Delorie for the DJGPP port, build and libiberty maintenance, 42840 various bug fixes, and the M32C, MeP, MSP430, and RL78 ports. 42841 42842 * Arnaud Desitter for helping to debug GNU Fortran. 42843 42844 * Gabriel Dos Reis for contributions to G++, contributions and 42845 maintenance of GCC diagnostics infrastructure, libstdc++-v3, 42846 including 'valarray<>', 'complex<>', maintaining the numerics 42847 library (including that pesky '<limits>' :-) and keeping up-to-date 42848 anything to do with numbers. 42849 42850 * Ulrich Drepper for his work on glibc, testing of GCC using glibc, 42851 ISO C99 support, CFG dumping support, etc., plus support of the C++ 42852 runtime libraries including for all kinds of C interface issues, 42853 contributing and maintaining 'complex<>', sanity checking and 42854 disbursement, configuration architecture, libio maintenance, and 42855 early math work. 42856 42857 * Franc,ois Dumont for his work on libstdc++-v3, especially 42858 maintaining and improving 'debug-mode' and associative and 42859 unordered containers. 42860 42861 * Zdenek Dvorak for a new loop unroller and various fixes. 42862 42863 * Michael Eager for his work on the Xilinx MicroBlaze port. 42864 42865 * Richard Earnshaw for his ongoing work with the ARM. 42866 42867 * David Edelsohn for his direction via the steering committee, 42868 ongoing work with the RS6000/PowerPC port, help cleaning up Haifa 42869 loop changes, doing the entire AIX port of libstdc++ with his bare 42870 hands, and for ensuring GCC properly keeps working on AIX. 42871 42872 * Kevin Ediger for the floating point formatting of num_put::do_put 42873 in libstdc++. 42874 42875 * Phil Edwards for libstdc++ work including configuration hackery, 42876 documentation maintainer, chief breaker of the web pages, the 42877 occasional iostream bug fix, and work on shared library symbol 42878 versioning. 42879 42880 * Paul Eggert for random hacking all over GCC. 42881 42882 * Mark Elbrecht for various DJGPP improvements, and for libstdc++ 42883 configuration support for locales and fstream-related fixes. 42884 42885 * Vadim Egorov for libstdc++ fixes in strings, streambufs, and 42886 iostreams. 42887 42888 * Christian Ehrhardt for dealing with bug reports. 42889 42890 * Ben Elliston for his work to move the Objective-C runtime into its 42891 own subdirectory and for his work on autoconf. 42892 42893 * Revital Eres for work on the PowerPC 750CL port. 42894 42895 * Marc Espie for OpenBSD support. 42896 42897 * Doug Evans for much of the global optimization framework, arc, 42898 m32r, and SPARC work. 42899 42900 * Christopher Faylor for his work on the Cygwin port and for caring 42901 and feeding the gcc.gnu.org box and saving its users tons of spam. 42902 42903 * Fred Fish for BeOS support and Ada fixes. 42904 42905 * Ivan Fontes Garcia for the Portuguese translation of the GCJ FAQ. 42906 42907 * Peter Gerwinski for various bug fixes and the Pascal front end. 42908 42909 * Kaveh R. Ghazi for his direction via the steering committee, 42910 amazing work to make '-W -Wall -W* -Werror' useful, and testing GCC 42911 on a plethora of platforms. Kaveh extends his gratitude to the 42912 CAIP Center at Rutgers University for providing him with computing 42913 resources to work on Free Software from the late 1980s to 2010. 42914 42915 * John Gilmore for a donation to the FSF earmarked improving GNU 42916 Java. 42917 42918 * Judy Goldberg for c++ contributions. 42919 42920 * Torbjorn Granlund for various fixes and the c-torture testsuite, 42921 multiply- and divide-by-constant optimization, improved long long 42922 support, improved leaf function register allocation, and his 42923 direction via the steering committee. 42924 42925 * Jonny Grant for improvements to 'collect2's' '--help' 42926 documentation. 42927 42928 * Anthony Green for his '-Os' contributions, the moxie port, and Java 42929 front end work. 42930 42931 * Stu Grossman for gdb hacking, allowing GCJ developers to debug Java 42932 code. 42933 42934 * Michael K. Gschwind contributed the port to the PDP-11. 42935 42936 * Richard Biener for his ongoing middle-end contributions and bug 42937 fixes and for release management. 42938 42939 * Ron Guilmette implemented the 'protoize' and 'unprotoize' tools, 42940 the support for DWARF 1 symbolic debugging information, and much of 42941 the support for System V Release 4. He has also worked heavily on 42942 the Intel 386 and 860 support. 42943 42944 * Sumanth Gundapaneni for contributing the CR16 port. 42945 42946 * Mostafa Hagog for Swing Modulo Scheduling (SMS) and post reload 42947 GCSE. 42948 42949 * Bruno Haible for improvements in the runtime overhead for EH, new 42950 warnings and assorted bug fixes. 42951 42952 * Andrew Haley for his amazing Java compiler and library efforts. 42953 42954 * Chris Hanson assisted in making GCC work on HP-UX for the 9000 42955 series 300. 42956 42957 * Michael Hayes for various thankless work he's done trying to get 42958 the c30/c40 ports functional. Lots of loop and unroll improvements 42959 and fixes. 42960 42961 * Dara Hazeghi for wading through myriads of target-specific bug 42962 reports. 42963 42964 * Kate Hedstrom for staking the G77 folks with an initial testsuite. 42965 42966 * Richard Henderson for his ongoing SPARC, alpha, ia32, and ia64 42967 work, loop opts, and generally fixing lots of old problems we've 42968 ignored for years, flow rewrite and lots of further stuff, 42969 including reviewing tons of patches. 42970 42971 * Aldy Hernandez for working on the PowerPC port, SIMD support, and 42972 various fixes. 42973 42974 * Nobuyuki Hikichi of Software Research Associates, Tokyo, 42975 contributed the support for the Sony NEWS machine. 42976 42977 * Kazu Hirata for caring and feeding the Renesas H8/300 port and 42978 various fixes. 42979 42980 * Katherine Holcomb for work on GNU Fortran. 42981 42982 * Manfred Hollstein for his ongoing work to keep the m88k alive, lots 42983 of testing and bug fixing, particularly of GCC configury code. 42984 42985 * Steve Holmgren for MachTen patches. 42986 42987 * Mat Hostetter for work on the TILE-Gx and TILEPro ports. 42988 42989 * Jan Hubicka for his x86 port improvements. 42990 42991 * Falk Hueffner for working on C and optimization bug reports. 42992 42993 * Bernardo Innocenti for his m68k work, including merging of ColdFire 42994 improvements and uClinux support. 42995 42996 * Christian Iseli for various bug fixes. 42997 42998 * Kamil Iskra for general m68k hacking. 42999 43000 * Lee Iverson for random fixes and MIPS testing. 43001 43002 * Balaji V. Iyer for Cilk+ development and merging. 43003 43004 * Andreas Jaeger for testing and benchmarking of GCC and various bug 43005 fixes. 43006 43007 * Martin Jambor for his work on inter-procedural optimizations, the 43008 switch conversion pass, and scalar replacement of aggregates. 43009 43010 * Jakub Jelinek for his SPARC work and sibling call optimizations as 43011 well as lots of bug fixes and test cases, and for improving the 43012 Java build system. 43013 43014 * Janis Johnson for ia64 testing and fixes, her quality improvement 43015 sidetracks, and web page maintenance. 43016 43017 * Kean Johnston for SCO OpenServer support and various fixes. 43018 43019 * Tim Josling for the sample language treelang based originally on 43020 Richard Kenner's "toy" language. 43021 43022 * Nicolai Josuttis for additional libstdc++ documentation. 43023 43024 * Klaus Kaempf for his ongoing work to make alpha-vms a viable 43025 target. 43026 43027 * Steven G. Kargl for work on GNU Fortran. 43028 43029 * David Kashtan of SRI adapted GCC to VMS. 43030 43031 * Ryszard Kabatek for many, many libstdc++ bug fixes and 43032 optimizations of strings, especially member functions, and for 43033 auto_ptr fixes. 43034 43035 * Geoffrey Keating for his ongoing work to make the PPC work for 43036 GNU/Linux and his automatic regression tester. 43037 43038 * Brendan Kehoe for his ongoing work with G++ and for a lot of early 43039 work in just about every part of libstdc++. 43040 43041 * Oliver M. Kellogg of Deutsche Aerospace contributed the port to the 43042 MIL-STD-1750A. 43043 43044 * Richard Kenner of the New York University Ultracomputer Research 43045 Laboratory wrote the machine descriptions for the AMD 29000, the 43046 DEC Alpha, the IBM RT PC, and the IBM RS/6000 as well as the 43047 support for instruction attributes. He also made changes to better 43048 support RISC processors including changes to common subexpression 43049 elimination, strength reduction, function calling sequence 43050 handling, and condition code support, in addition to generalizing 43051 the code for frame pointer elimination and delay slot scheduling. 43052 Richard Kenner was also the head maintainer of GCC for several 43053 years. 43054 43055 * Mumit Khan for various contributions to the Cygwin and Mingw32 43056 ports and maintaining binary releases for Microsoft Windows hosts, 43057 and for massive libstdc++ porting work to Cygwin/Mingw32. 43058 43059 * Robin Kirkham for cpu32 support. 43060 43061 * Mark Klein for PA improvements. 43062 43063 * Thomas Koenig for various bug fixes. 43064 43065 * Bruce Korb for the new and improved fixincludes code. 43066 43067 * Benjamin Kosnik for his G++ work and for leading the libstdc++-v3 43068 effort. 43069 43070 * Maxim Kuvyrkov for contributions to the instruction scheduler, the 43071 Android and m68k/Coldfire ports, and optimizations. 43072 43073 * Charles LaBrec contributed the support for the Integrated Solutions 43074 68020 system. 43075 43076 * Asher Langton and Mike Kumbera for contributing Cray pointer 43077 support to GNU Fortran, and for other GNU Fortran improvements. 43078 43079 * Jeff Law for his direction via the steering committee, coordinating 43080 the entire egcs project and GCC 2.95, rolling out snapshots and 43081 releases, handling merges from GCC2, reviewing tons of patches that 43082 might have fallen through the cracks else, and random but extensive 43083 hacking. 43084 43085 * Walter Lee for work on the TILE-Gx and TILEPro ports. 43086 43087 * Marc Lehmann for his direction via the steering committee and 43088 helping with analysis and improvements of x86 performance. 43089 43090 * Victor Leikehman for work on GNU Fortran. 43091 43092 * Ted Lemon wrote parts of the RTL reader and printer. 43093 43094 * Kriang Lerdsuwanakij for C++ improvements including template as 43095 template parameter support, and many C++ fixes. 43096 43097 * Warren Levy for tremendous work on libgcj (Java Runtime Library) 43098 and random work on the Java front end. 43099 43100 * Alain Lichnewsky ported GCC to the MIPS CPU. 43101 43102 * Oskar Liljeblad for hacking on AWT and his many Java bug reports 43103 and patches. 43104 43105 * Robert Lipe for OpenServer support, new testsuites, testing, etc. 43106 43107 * Chen Liqin for various S+core related fixes/improvement, and for 43108 maintaining the S+core port. 43109 43110 * Weiwen Liu for testing and various bug fixes. 43111 43112 * Manuel Lo'pez-Iba'n~ez for improving '-Wconversion' and many other 43113 diagnostics fixes and improvements. 43114 43115 * Dave Love for his ongoing work with the Fortran front end and 43116 runtime libraries. 43117 43118 * Martin von Lo"wis for internal consistency checking infrastructure, 43119 various C++ improvements including namespace support, and tons of 43120 assistance with libstdc++/compiler merges. 43121 43122 * H.J. Lu for his previous contributions to the steering committee, 43123 many x86 bug reports, prototype patches, and keeping the GNU/Linux 43124 ports working. 43125 43126 * Greg McGary for random fixes and (someday) bounded pointers. 43127 43128 * Andrew MacLeod for his ongoing work in building a real EH system, 43129 various code generation improvements, work on the global optimizer, 43130 etc. 43131 43132 * Vladimir Makarov for hacking some ugly i960 problems, PowerPC 43133 hacking improvements to compile-time performance, overall knowledge 43134 and direction in the area of instruction scheduling, and design and 43135 implementation of the automaton based instruction scheduler. 43136 43137 * Bob Manson for his behind the scenes work on dejagnu. 43138 43139 * John Marino for contributing the DragonFly BSD port. 43140 43141 * Philip Martin for lots of libstdc++ string and vector iterator 43142 fixes and improvements, and string clean up and testsuites. 43143 43144 * Michael Matz for his work on dominance tree discovery, the x86-64 43145 port, link-time optimization framework and general optimization 43146 improvements. 43147 43148 * All of the Mauve project contributors, for Java test code. 43149 43150 * Bryce McKinlay for numerous GCJ and libgcj fixes and improvements. 43151 43152 * Adam Megacz for his work on the Microsoft Windows port of GCJ. 43153 43154 * Michael Meissner for LRS framework, ia32, m32r, v850, m88k, MIPS, 43155 powerpc, haifa, ECOFF debug support, and other assorted hacking. 43156 43157 * Jason Merrill for his direction via the steering committee and 43158 leading the G++ effort. 43159 43160 * Martin Michlmayr for testing GCC on several architectures using the 43161 entire Debian archive. 43162 43163 * David Miller for his direction via the steering committee, lots of 43164 SPARC work, improvements in jump.c and interfacing with the Linux 43165 kernel developers. 43166 43167 * Gary Miller ported GCC to Charles River Data Systems machines. 43168 43169 * Alfred Minarik for libstdc++ string and ios bug fixes, and turning 43170 the entire libstdc++ testsuite namespace-compatible. 43171 43172 * Mark Mitchell for his direction via the steering committee, 43173 mountains of C++ work, load/store hoisting out of loops, alias 43174 analysis improvements, ISO C 'restrict' support, and serving as 43175 release manager from 2000 to 2011. 43176 43177 * Alan Modra for various GNU/Linux bits and testing. 43178 43179 * Toon Moene for his direction via the steering committee, Fortran 43180 maintenance, and his ongoing work to make us make Fortran run fast. 43181 43182 * Jason Molenda for major help in the care and feeding of all the 43183 services on the gcc.gnu.org (formerly egcs.cygnus.com) 43184 machine--mail, web services, ftp services, etc etc. Doing all this 43185 work on scrap paper and the backs of envelopes would have been... 43186 difficult. 43187 43188 * Catherine Moore for fixing various ugly problems we have sent her 43189 way, including the haifa bug which was killing the Alpha & PowerPC 43190 Linux kernels. 43191 43192 * Mike Moreton for his various Java patches. 43193 43194 * David Mosberger-Tang for various Alpha improvements, and for the 43195 initial IA-64 port. 43196 43197 * Stephen Moshier contributed the floating point emulator that 43198 assists in cross-compilation and permits support for floating point 43199 numbers wider than 64 bits and for ISO C99 support. 43200 43201 * Bill Moyer for his behind the scenes work on various issues. 43202 43203 * Philippe De Muyter for his work on the m68k port. 43204 43205 * Joseph S. Myers for his work on the PDP-11 port, format checking 43206 and ISO C99 support, and continuous emphasis on (and contributions 43207 to) documentation. 43208 43209 * Nathan Myers for his work on libstdc++-v3: architecture and 43210 authorship through the first three snapshots, including 43211 implementation of locale infrastructure, string, shadow C headers, 43212 and the initial project documentation (DESIGN, CHECKLIST, and so 43213 forth). Later, more work on MT-safe string and shadow headers. 43214 43215 * Felix Natter for documentation on porting libstdc++. 43216 43217 * Nathanael Nerode for cleaning up the configuration/build process. 43218 43219 * NeXT, Inc. donated the front end that supports the Objective-C 43220 language. 43221 43222 * Hans-Peter Nilsson for the CRIS and MMIX ports, improvements to the 43223 search engine setup, various documentation fixes and other small 43224 fixes. 43225 43226 * Geoff Noer for his work on getting cygwin native builds working. 43227 43228 * Diego Novillo for his work on Tree SSA, OpenMP, SPEC performance 43229 tracking web pages, GIMPLE tuples, and assorted fixes. 43230 43231 * David O'Brien for the FreeBSD/alpha, FreeBSD/AMD x86-64, 43232 FreeBSD/ARM, FreeBSD/PowerPC, and FreeBSD/SPARC64 ports and related 43233 infrastructure improvements. 43234 43235 * Alexandre Oliva for various build infrastructure improvements, 43236 scripts and amazing testing work, including keeping libtool issues 43237 sane and happy. 43238 43239 * Stefan Olsson for work on mt_alloc. 43240 43241 * Melissa O'Neill for various NeXT fixes. 43242 43243 * Rainer Orth for random MIPS work, including improvements to GCC's 43244 o32 ABI support, improvements to dejagnu's MIPS support, Java 43245 configuration clean-ups and porting work, and maintaining the IRIX, 43246 Solaris 2, and Tru64 UNIX ports. 43247 43248 * Hartmut Penner for work on the s390 port. 43249 43250 * Paul Petersen wrote the machine description for the Alliant FX/8. 43251 43252 * Alexandre Petit-Bianco for implementing much of the Java compiler 43253 and continued Java maintainership. 43254 43255 * Matthias Pfaller for major improvements to the NS32k port. 43256 43257 * Gerald Pfeifer for his direction via the steering committee, 43258 pointing out lots of problems we need to solve, maintenance of the 43259 web pages, and taking care of documentation maintenance in general. 43260 43261 * Andrew Pinski for processing bug reports by the dozen. 43262 43263 * Ovidiu Predescu for his work on the Objective-C front end and 43264 runtime libraries. 43265 43266 * Jerry Quinn for major performance improvements in C++ formatted 43267 I/O. 43268 43269 * Ken Raeburn for various improvements to checker, MIPS ports and 43270 various cleanups in the compiler. 43271 43272 * Rolf W. Rasmussen for hacking on AWT. 43273 43274 * David Reese of Sun Microsystems contributed to the Solaris on 43275 PowerPC port. 43276 43277 * Volker Reichelt for keeping up with the problem reports. 43278 43279 * Joern Rennecke for maintaining the sh port, loop, regmove & reload 43280 hacking and developing and maintaining the Epiphany port. 43281 43282 * Loren J. Rittle for improvements to libstdc++-v3 including the 43283 FreeBSD port, threading fixes, thread-related configury changes, 43284 critical threading documentation, and solutions to really tricky 43285 I/O problems, as well as keeping GCC properly working on FreeBSD 43286 and continuous testing. 43287 43288 * Craig Rodrigues for processing tons of bug reports. 43289 43290 * Ola Ro"nnerup for work on mt_alloc. 43291 43292 * Gavin Romig-Koch for lots of behind the scenes MIPS work. 43293 43294 * David Ronis inspired and encouraged Craig to rewrite the G77 43295 documentation in texinfo format by contributing a first pass at a 43296 translation of the old 'g77-0.5.16/f/DOC' file. 43297 43298 * Ken Rose for fixes to GCC's delay slot filling code. 43299 43300 * Ira Rosen for her contributions to the auto-vectorizer. 43301 43302 * Paul Rubin wrote most of the preprocessor. 43303 43304 * Pe'tur Runo'lfsson for major performance improvements in C++ 43305 formatted I/O and large file support in C++ filebuf. 43306 43307 * Chip Salzenberg for libstdc++ patches and improvements to locales, 43308 traits, Makefiles, libio, libtool hackery, and "long long" support. 43309 43310 * Juha Sarlin for improvements to the H8 code generator. 43311 43312 * Greg Satz assisted in making GCC work on HP-UX for the 9000 series 43313 300. 43314 43315 * Roger Sayle for improvements to constant folding and GCC's RTL 43316 optimizers as well as for fixing numerous bugs. 43317 43318 * Bradley Schatz for his work on the GCJ FAQ. 43319 43320 * Peter Schauer wrote the code to allow debugging to work on the 43321 Alpha. 43322 43323 * William Schelter did most of the work on the Intel 80386 support. 43324 43325 * Tobias Schlu"ter for work on GNU Fortran. 43326 43327 * Bernd Schmidt for various code generation improvements and major 43328 work in the reload pass, serving as release manager for GCC 2.95.3, 43329 and work on the Blackfin and C6X ports. 43330 43331 * Peter Schmid for constant testing of libstdc++--especially 43332 application testing, going above and beyond what was requested for 43333 the release criteria--and libstdc++ header file tweaks. 43334 43335 * Jason Schroeder for jcf-dump patches. 43336 43337 * Andreas Schwab for his work on the m68k port. 43338 43339 * Lars Segerlund for work on GNU Fortran. 43340 43341 * Dodji Seketeli for numerous C++ bug fixes and debug info 43342 improvements. 43343 43344 * Tim Shen for major work on '<regex>'. 43345 43346 * Joel Sherrill for his direction via the steering committee, RTEMS 43347 contributions and RTEMS testing. 43348 43349 * Nathan Sidwell for many C++ fixes/improvements. 43350 43351 * Jeffrey Siegal for helping RMS with the original design of GCC, 43352 some code which handles the parse tree and RTL data structures, 43353 constant folding and help with the original VAX & m68k ports. 43354 43355 * Kenny Simpson for prompting libstdc++ fixes due to defect reports 43356 from the LWG (thereby keeping GCC in line with updates from the 43357 ISO). 43358 43359 * Franz Sirl for his ongoing work with making the PPC port stable for 43360 GNU/Linux. 43361 43362 * Andrey Slepuhin for assorted AIX hacking. 43363 43364 * Trevor Smigiel for contributing the SPU port. 43365 43366 * Christopher Smith did the port for Convex machines. 43367 43368 * Danny Smith for his major efforts on the Mingw (and Cygwin) ports. 43369 Retired from GCC maintainership August 2010, having mentored two 43370 new maintainers into the role. 43371 43372 * Randy Smith finished the Sun FPA support. 43373 43374 * Ed Smith-Rowland for his continuous work on libstdc++-v3, special 43375 functions, '<random>', and various improvements to C++11 features. 43376 43377 * Scott Snyder for queue, iterator, istream, and string fixes and 43378 libstdc++ testsuite entries. Also for providing the patch to G77 43379 to add rudimentary support for 'INTEGER*1', 'INTEGER*2', and 43380 'LOGICAL*1'. 43381 43382 * Zdenek Sojka for running automated regression testing of GCC and 43383 reporting numerous bugs. 43384 43385 * Jayant Sonar for contributing the CR16 port. 43386 43387 * Brad Spencer for contributions to the GLIBCPP_FORCE_NEW technique. 43388 43389 * Richard Stallman, for writing the original GCC and launching the 43390 GNU project. 43391 43392 * Jan Stein of the Chalmers Computer Society provided support for 43393 Genix, as well as part of the 32000 machine description. 43394 43395 * Nigel Stephens for various mips16 related fixes/improvements. 43396 43397 * Jonathan Stone wrote the machine description for the Pyramid 43398 computer. 43399 43400 * Graham Stott for various infrastructure improvements. 43401 43402 * John Stracke for his Java HTTP protocol fixes. 43403 43404 * Mike Stump for his Elxsi port, G++ contributions over the years and 43405 more recently his vxworks contributions 43406 43407 * Jeff Sturm for Java porting help, bug fixes, and encouragement. 43408 43409 * Shigeya Suzuki for this fixes for the bsdi platforms. 43410 43411 * Ian Lance Taylor for the Go frontend, the initial mips16 and mips64 43412 support, general configury hacking, fixincludes, etc. 43413 43414 * Holger Teutsch provided the support for the Clipper CPU. 43415 43416 * Gary Thomas for his ongoing work to make the PPC work for 43417 GNU/Linux. 43418 43419 * Philipp Thomas for random bug fixes throughout the compiler 43420 43421 * Jason Thorpe for thread support in libstdc++ on NetBSD. 43422 43423 * Kresten Krab Thorup wrote the run time support for the Objective-C 43424 language and the fantastic Java bytecode interpreter. 43425 43426 * Michael Tiemann for random bug fixes, the first instruction 43427 scheduler, initial C++ support, function integration, NS32k, SPARC 43428 and M88k machine description work, delay slot scheduling. 43429 43430 * Andreas Tobler for his work porting libgcj to Darwin. 43431 43432 * Teemu Torma for thread safe exception handling support. 43433 43434 * Leonard Tower wrote parts of the parser, RTL generator, and RTL 43435 definitions, and of the VAX machine description. 43436 43437 * Daniel Towner and Hariharan Sandanagobalane contributed and 43438 maintain the picoChip port. 43439 43440 * Tom Tromey for internationalization support and for his many Java 43441 contributions and libgcj maintainership. 43442 43443 * Lassi Tuura for improvements to config.guess to determine HP 43444 processor types. 43445 43446 * Petter Urkedal for libstdc++ CXXFLAGS, math, and algorithms fixes. 43447 43448 * Andy Vaught for the design and initial implementation of the GNU 43449 Fortran front end. 43450 43451 * Brent Verner for work with the libstdc++ cshadow files and their 43452 associated configure steps. 43453 43454 * Todd Vierling for contributions for NetBSD ports. 43455 43456 * Jonathan Wakely for contributing libstdc++ Doxygen notes and XHTML 43457 guidance. 43458 43459 * Dean Wakerley for converting the install documentation from HTML to 43460 texinfo in time for GCC 3.0. 43461 43462 * Krister Walfridsson for random bug fixes. 43463 43464 * Feng Wang for contributions to GNU Fortran. 43465 43466 * Stephen M. Webb for time and effort on making libstdc++ shadow 43467 files work with the tricky Solaris 8+ headers, and for pushing the 43468 build-time header tree. Also, for starting and driving the 43469 '<regex>' effort. 43470 43471 * John Wehle for various improvements for the x86 code generator, 43472 related infrastructure improvements to help x86 code generation, 43473 value range propagation and other work, WE32k port. 43474 43475 * Ulrich Weigand for work on the s390 port. 43476 43477 * Zack Weinberg for major work on cpplib and various other bug fixes. 43478 43479 * Matt Welsh for help with Linux Threads support in GCJ. 43480 43481 * Urban Widmark for help fixing java.io. 43482 43483 * Mark Wielaard for new Java library code and his work integrating 43484 with Classpath. 43485 43486 * Dale Wiles helped port GCC to the Tahoe. 43487 43488 * Bob Wilson from Tensilica, Inc. for the Xtensa port. 43489 43490 * Jim Wilson for his direction via the steering committee, tackling 43491 hard problems in various places that nobody else wanted to work on, 43492 strength reduction and other loop optimizations. 43493 43494 * Paul Woegerer and Tal Agmon for the CRX port. 43495 43496 * Carlo Wood for various fixes. 43497 43498 * Tom Wood for work on the m88k port. 43499 43500 * Chung-Ju Wu for his work on the Andes NDS32 port. 43501 43502 * Canqun Yang for work on GNU Fortran. 43503 43504 * Masanobu Yuhara of Fujitsu Laboratories implemented the machine 43505 description for the Tron architecture (specifically, the Gmicro). 43506 43507 * Kevin Zachmann helped port GCC to the Tahoe. 43508 43509 * Ayal Zaks for Swing Modulo Scheduling (SMS). 43510 43511 * Xiaoqiang Zhang for work on GNU Fortran. 43512 43513 * Gilles Zunino for help porting Java to Irix. 43514 43515 The following people are recognized for their contributions to GNAT, 43516the Ada front end of GCC: 43517 * Bernard Banner 43518 43519 * Romain Berrendonner 43520 43521 * Geert Bosch 43522 43523 * Emmanuel Briot 43524 43525 * Joel Brobecker 43526 43527 * Ben Brosgol 43528 43529 * Vincent Celier 43530 43531 * Arnaud Charlet 43532 43533 * Chien Chieng 43534 43535 * Cyrille Comar 43536 43537 * Cyrille Crozes 43538 43539 * Robert Dewar 43540 43541 * Gary Dismukes 43542 43543 * Robert Duff 43544 43545 * Ed Falis 43546 43547 * Ramon Fernandez 43548 43549 * Sam Figueroa 43550 43551 * Vasiliy Fofanov 43552 43553 * Michael Friess 43554 43555 * Franco Gasperoni 43556 43557 * Ted Giering 43558 43559 * Matthew Gingell 43560 43561 * Laurent Guerby 43562 43563 * Jerome Guitton 43564 43565 * Olivier Hainque 43566 43567 * Jerome Hugues 43568 43569 * Hristian Kirtchev 43570 43571 * Jerome Lambourg 43572 43573 * Bruno Leclerc 43574 43575 * Albert Lee 43576 43577 * Sean McNeil 43578 43579 * Javier Miranda 43580 43581 * Laurent Nana 43582 43583 * Pascal Obry 43584 43585 * Dong-Ik Oh 43586 43587 * Laurent Pautet 43588 43589 * Brett Porter 43590 43591 * Thomas Quinot 43592 43593 * Nicolas Roche 43594 43595 * Pat Rogers 43596 43597 * Jose Ruiz 43598 43599 * Douglas Rupp 43600 43601 * Sergey Rybin 43602 43603 * Gail Schenker 43604 43605 * Ed Schonberg 43606 43607 * Nicolas Setton 43608 43609 * Samuel Tardieu 43610 43611 The following people are recognized for their contributions of new 43612features, bug reports, testing and integration of classpath/libgcj for 43613GCC version 4.1: 43614 * Lillian Angel for 'JTree' implementation and lots Free Swing 43615 additions and bug fixes. 43616 43617 * Wolfgang Baer for 'GapContent' bug fixes. 43618 43619 * Anthony Balkissoon for 'JList', Free Swing 1.5 updates and mouse 43620 event fixes, lots of Free Swing work including 'JTable' editing. 43621 43622 * Stuart Ballard for RMI constant fixes. 43623 43624 * Goffredo Baroncelli for 'HTTPURLConnection' fixes. 43625 43626 * Gary Benson for 'MessageFormat' fixes. 43627 43628 * Daniel Bonniot for 'Serialization' fixes. 43629 43630 * Chris Burdess for lots of gnu.xml and http protocol fixes, 'StAX' 43631 and 'DOM xml:id' support. 43632 43633 * Ka-Hing Cheung for 'TreePath' and 'TreeSelection' fixes. 43634 43635 * Archie Cobbs for build fixes, VM interface updates, 43636 'URLClassLoader' updates. 43637 43638 * Kelley Cook for build fixes. 43639 43640 * Martin Cordova for Suggestions for better 'SocketTimeoutException'. 43641 43642 * David Daney for 'BitSet' bug fixes, 'HttpURLConnection' rewrite and 43643 improvements. 43644 43645 * Thomas Fitzsimmons for lots of upgrades to the gtk+ AWT and Cairo 43646 2D support. Lots of imageio framework additions, lots of AWT and 43647 Free Swing bug fixes. 43648 43649 * Jeroen Frijters for 'ClassLoader' and nio cleanups, serialization 43650 fixes, better 'Proxy' support, bug fixes and IKVM integration. 43651 43652 * Santiago Gala for 'AccessControlContext' fixes. 43653 43654 * Nicolas Geoffray for 'VMClassLoader' and 'AccessController' 43655 improvements. 43656 43657 * David Gilbert for 'basic' and 'metal' icon and plaf support and 43658 lots of documenting, Lots of Free Swing and metal theme additions. 43659 'MetalIconFactory' implementation. 43660 43661 * Anthony Green for 'MIDI' framework, 'ALSA' and 'DSSI' providers. 43662 43663 * Andrew Haley for 'Serialization' and 'URLClassLoader' fixes, gcj 43664 build speedups. 43665 43666 * Kim Ho for 'JFileChooser' implementation. 43667 43668 * Andrew John Hughes for 'Locale' and net fixes, URI RFC2986 updates, 43669 'Serialization' fixes, 'Properties' XML support and generic branch 43670 work, VMIntegration guide update. 43671 43672 * Bastiaan Huisman for 'TimeZone' bug fixing. 43673 43674 * Andreas Jaeger for mprec updates. 43675 43676 * Paul Jenner for better '-Werror' support. 43677 43678 * Ito Kazumitsu for 'NetworkInterface' implementation and updates. 43679 43680 * Roman Kennke for 'BoxLayout', 'GrayFilter' and 'SplitPane', plus 43681 bug fixes all over. Lots of Free Swing work including styled text. 43682 43683 * Simon Kitching for 'String' cleanups and optimization suggestions. 43684 43685 * Michael Koch for configuration fixes, 'Locale' updates, bug and 43686 build fixes. 43687 43688 * Guilhem Lavaux for configuration, thread and channel fixes and 43689 Kaffe integration. JCL native 'Pointer' updates. Logger bug 43690 fixes. 43691 43692 * David Lichteblau for JCL support library global/local reference 43693 cleanups. 43694 43695 * Aaron Luchko for JDWP updates and documentation fixes. 43696 43697 * Ziga Mahkovec for 'Graphics2D' upgraded to Cairo 0.5 and new regex 43698 features. 43699 43700 * Sven de Marothy for BMP imageio support, CSS and 'TextLayout' 43701 fixes. 'GtkImage' rewrite, 2D, awt, free swing and date/time fixes 43702 and implementing the Qt4 peers. 43703 43704 * Casey Marshall for crypto algorithm fixes, 'FileChannel' lock, 43705 'SystemLogger' and 'FileHandler' rotate implementations, NIO 43706 'FileChannel.map' support, security and policy updates. 43707 43708 * Bryce McKinlay for RMI work. 43709 43710 * Audrius Meskauskas for lots of Free Corba, RMI and HTML work plus 43711 testing and documenting. 43712 43713 * Kalle Olavi Niemitalo for build fixes. 43714 43715 * Rainer Orth for build fixes. 43716 43717 * Andrew Overholt for 'File' locking fixes. 43718 43719 * Ingo Proetel for 'Image', 'Logger' and 'URLClassLoader' updates. 43720 43721 * Olga Rodimina for 'MenuSelectionManager' implementation. 43722 43723 * Jan Roehrich for 'BasicTreeUI' and 'JTree' fixes. 43724 43725 * Julian Scheid for documentation updates and gjdoc support. 43726 43727 * Christian Schlichtherle for zip fixes and cleanups. 43728 43729 * Robert Schuster for documentation updates and beans fixes, 43730 'TreeNode' enumerations and 'ActionCommand' and various fixes, XML 43731 and URL, AWT and Free Swing bug fixes. 43732 43733 * Keith Seitz for lots of JDWP work. 43734 43735 * Christian Thalinger for 64-bit cleanups, Configuration and VM 43736 interface fixes and 'CACAO' integration, 'fdlibm' updates. 43737 43738 * Gael Thomas for 'VMClassLoader' boot packages support suggestions. 43739 43740 * Andreas Tobler for Darwin and Solaris testing and fixing, 'Qt4' 43741 support for Darwin/OS X, 'Graphics2D' support, 'gtk+' updates. 43742 43743 * Dalibor Topic for better 'DEBUG' support, build cleanups and Kaffe 43744 integration. 'Qt4' build infrastructure, 'SHA1PRNG' and 43745 'GdkPixbugDecoder' updates. 43746 43747 * Tom Tromey for Eclipse integration, generics work, lots of bug 43748 fixes and gcj integration including coordinating The Big Merge. 43749 43750 * Mark Wielaard for bug fixes, packaging and release management, 43751 'Clipboard' implementation, system call interrupts and network 43752 timeouts and 'GdkPixpufDecoder' fixes. 43753 43754 In addition to the above, all of which also contributed time and energy 43755in testing GCC, we would like to thank the following for their 43756contributions to testing: 43757 43758 * Michael Abd-El-Malek 43759 43760 * Thomas Arend 43761 43762 * Bonzo Armstrong 43763 43764 * Steven Ashe 43765 43766 * Chris Baldwin 43767 43768 * David Billinghurst 43769 43770 * Jim Blandy 43771 43772 * Stephane Bortzmeyer 43773 43774 * Horst von Brand 43775 43776 * Frank Braun 43777 43778 * Rodney Brown 43779 43780 * Sidney Cadot 43781 43782 * Bradford Castalia 43783 43784 * Robert Clark 43785 43786 * Jonathan Corbet 43787 43788 * Ralph Doncaster 43789 43790 * Richard Emberson 43791 43792 * Levente Farkas 43793 43794 * Graham Fawcett 43795 43796 * Mark Fernyhough 43797 43798 * Robert A. French 43799 43800 * Jo"rgen Freyh 43801 43802 * Mark K. Gardner 43803 43804 * Charles-Antoine Gauthier 43805 43806 * Yung Shing Gene 43807 43808 * David Gilbert 43809 43810 * Simon Gornall 43811 43812 * Fred Gray 43813 43814 * John Griffin 43815 43816 * Patrik Hagglund 43817 43818 * Phil Hargett 43819 43820 * Amancio Hasty 43821 43822 * Takafumi Hayashi 43823 43824 * Bryan W. Headley 43825 43826 * Kevin B. Hendricks 43827 43828 * Joep Jansen 43829 43830 * Christian Joensson 43831 43832 * Michel Kern 43833 43834 * David Kidd 43835 43836 * Tobias Kuipers 43837 43838 * Anand Krishnaswamy 43839 43840 * A. O. V. Le Blanc 43841 43842 * llewelly 43843 43844 * Damon Love 43845 43846 * Brad Lucier 43847 43848 * Matthias Klose 43849 43850 * Martin Knoblauch 43851 43852 * Rick Lutowski 43853 43854 * Jesse Macnish 43855 43856 * Stefan Morrell 43857 43858 * Anon A. Mous 43859 43860 * Matthias Mueller 43861 43862 * Pekka Nikander 43863 43864 * Rick Niles 43865 43866 * Jon Olson 43867 43868 * Magnus Persson 43869 43870 * Chris Pollard 43871 43872 * Richard Polton 43873 43874 * Derk Reefman 43875 43876 * David Rees 43877 43878 * Paul Reilly 43879 43880 * Tom Reilly 43881 43882 * Torsten Rueger 43883 43884 * Danny Sadinoff 43885 43886 * Marc Schifer 43887 43888 * Erik Schnetter 43889 43890 * Wayne K. Schroll 43891 43892 * David Schuler 43893 43894 * Vin Shelton 43895 43896 * Tim Souder 43897 43898 * Adam Sulmicki 43899 43900 * Bill Thorson 43901 43902 * George Talbot 43903 43904 * Pedro A. M. Vazquez 43905 43906 * Gregory Warnes 43907 43908 * Ian Watson 43909 43910 * David E. Young 43911 43912 * And many others 43913 43914 And finally we'd like to thank everyone who uses the compiler, provides 43915feedback and generally reminds us why we're doing this work in the first 43916place. 43917 43918 43919File: gccint.info, Node: Option Index, Next: Concept Index, Prev: Contributors, Up: Top 43920 43921Option Index 43922************ 43923 43924GCC's command line options are indexed here without any initial '-' or 43925'--'. Where an option has both positive and negative forms (such as 43926'-fOPTION' and '-fno-OPTION'), relevant entries in the manual are 43927indexed under the most appropriate form; it may sometimes be useful to 43928look up both forms. 43929 43930[index] 43931* Menu: 43932 43933* fltrans: Internal flags. (line 18) 43934* fltrans-output-list: Internal flags. (line 23) 43935* fresolution: Internal flags. (line 27) 43936* fwpa: Internal flags. (line 9) 43937* msoft-float: Soft float library routines. 43938 (line 6) 43939 43940 43941File: gccint.info, Node: Concept Index, Prev: Option Index, Up: Top 43942 43943Concept Index 43944************* 43945 43946[index] 43947* Menu: 43948 43949* ! in constraint: Multi-Alternative. (line 48) 43950* # in constraint: Modifiers. (line 78) 43951* # in template: Output Template. (line 66) 43952* #pragma: Misc. (line 387) 43953* $ in constraint: Multi-Alternative. (line 57) 43954* % in constraint: Modifiers. (line 52) 43955* % in GTY option: GTY Options. (line 18) 43956* % in template: Output Template. (line 6) 43957* & in constraint: Modifiers. (line 25) 43958* (gimple_stmt_iterator: GIMPLE API. (line 30) 43959* (nil): RTL Objects. (line 73) 43960* * in constraint: Modifiers. (line 83) 43961* * in template: Output Statement. (line 29) 43962* *gimple_build_asm_vec: GIMPLE_ASM. (line 6) 43963* *gimple_build_assign: GIMPLE_ASSIGN. (line 6) 43964* *gimple_build_assign <1>: GIMPLE_ASSIGN. (line 18) 43965* *gimple_build_assign <2>: GIMPLE_ASSIGN. (line 29) 43966* *gimple_build_assign <3>: GIMPLE_ASSIGN. (line 35) 43967* *gimple_build_bind: GIMPLE_BIND. (line 6) 43968* *gimple_build_call: GIMPLE_CALL. (line 6) 43969* *gimple_build_call_from_tree: GIMPLE_CALL. (line 15) 43970* *gimple_build_call_vec: GIMPLE_CALL. (line 23) 43971* *gimple_build_catch: GIMPLE_CATCH. (line 6) 43972* *gimple_build_cond: GIMPLE_COND. (line 6) 43973* *gimple_build_cond_from_tree: GIMPLE_COND. (line 14) 43974* *gimple_build_debug_bind: GIMPLE_DEBUG. (line 6) 43975* *gimple_build_eh_filter: GIMPLE_EH_FILTER. (line 6) 43976* *gimple_build_goto: GIMPLE_GOTO. (line 6) 43977* *gimple_build_label: GIMPLE_LABEL. (line 6) 43978* *gimple_build_omp_atomic_load: GIMPLE_OMP_ATOMIC_LOAD. 43979 (line 6) 43980* *gimple_build_omp_atomic_store: GIMPLE_OMP_ATOMIC_STORE. 43981 (line 6) 43982* *gimple_build_omp_continue: GIMPLE_OMP_CONTINUE. 43983 (line 6) 43984* *gimple_build_omp_critical: GIMPLE_OMP_CRITICAL. 43985 (line 6) 43986* *gimple_build_omp_for: GIMPLE_OMP_FOR. (line 6) 43987* *gimple_build_omp_parallel: GIMPLE_OMP_PARALLEL. 43988 (line 6) 43989* *gimple_build_omp_sections: GIMPLE_OMP_SECTIONS. 43990 (line 6) 43991* *gimple_build_omp_single: GIMPLE_OMP_SINGLE. (line 6) 43992* *gimple_build_resx: GIMPLE_RESX. (line 6) 43993* *gimple_build_return: GIMPLE_RETURN. (line 6) 43994* *gimple_build_switch: GIMPLE_SWITCH. (line 6) 43995* *gimple_build_try: GIMPLE_TRY. (line 6) 43996* + in constraint: Modifiers. (line 12) 43997* -fsection-anchors: Special Accessors. (line 117) 43998* -fsection-anchors <1>: Anchored Addresses. (line 6) 43999* /c in RTL dump: Flags. (line 221) 44000* /f in RTL dump: Flags. (line 229) 44001* /i in RTL dump: Flags. (line 274) 44002* /j in RTL dump: Flags. (line 286) 44003* /s in RTL dump: Flags. (line 245) 44004* /u in RTL dump: Flags. (line 296) 44005* /v in RTL dump: Flags. (line 328) 44006* 0 in constraint: Simple Constraints. (line 128) 44007* < in constraint: Simple Constraints. (line 47) 44008* = in constraint: Modifiers. (line 8) 44009* > in constraint: Simple Constraints. (line 59) 44010* ? in constraint: Multi-Alternative. (line 42) 44011* \: Output Template. (line 46) 44012* ^ in constraint: Multi-Alternative. (line 53) 44013* __absvdi2: Integer library routines. 44014 (line 106) 44015* __absvsi2: Integer library routines. 44016 (line 105) 44017* __addda3: Fixed-point fractional library routines. 44018 (line 52) 44019* __adddf3: Soft float library routines. 44020 (line 22) 44021* __adddq3: Fixed-point fractional library routines. 44022 (line 39) 44023* __addha3: Fixed-point fractional library routines. 44024 (line 49) 44025* __addhq3: Fixed-point fractional library routines. 44026 (line 37) 44027* __addqq3: Fixed-point fractional library routines. 44028 (line 35) 44029* __addsa3: Fixed-point fractional library routines. 44030 (line 51) 44031* __addsf3: Soft float library routines. 44032 (line 21) 44033* __addsq3: Fixed-point fractional library routines. 44034 (line 38) 44035* __addta3: Fixed-point fractional library routines. 44036 (line 53) 44037* __addtf3: Soft float library routines. 44038 (line 23) 44039* __adduda3: Fixed-point fractional library routines. 44040 (line 59) 44041* __addudq3: Fixed-point fractional library routines. 44042 (line 47) 44043* __adduha3: Fixed-point fractional library routines. 44044 (line 55) 44045* __adduhq3: Fixed-point fractional library routines. 44046 (line 43) 44047* __adduqq3: Fixed-point fractional library routines. 44048 (line 41) 44049* __addusa3: Fixed-point fractional library routines. 44050 (line 57) 44051* __addusq3: Fixed-point fractional library routines. 44052 (line 45) 44053* __adduta3: Fixed-point fractional library routines. 44054 (line 61) 44055* __addvdi3: Integer library routines. 44056 (line 110) 44057* __addvsi3: Integer library routines. 44058 (line 109) 44059* __addxf3: Soft float library routines. 44060 (line 25) 44061* __ashlda3: Fixed-point fractional library routines. 44062 (line 358) 44063* __ashldi3: Integer library routines. 44064 (line 13) 44065* __ashldq3: Fixed-point fractional library routines. 44066 (line 346) 44067* __ashlha3: Fixed-point fractional library routines. 44068 (line 356) 44069* __ashlhq3: Fixed-point fractional library routines. 44070 (line 344) 44071* __ashlqq3: Fixed-point fractional library routines. 44072 (line 343) 44073* __ashlsa3: Fixed-point fractional library routines. 44074 (line 357) 44075* __ashlsi3: Integer library routines. 44076 (line 12) 44077* __ashlsq3: Fixed-point fractional library routines. 44078 (line 345) 44079* __ashlta3: Fixed-point fractional library routines. 44080 (line 359) 44081* __ashlti3: Integer library routines. 44082 (line 14) 44083* __ashluda3: Fixed-point fractional library routines. 44084 (line 365) 44085* __ashludq3: Fixed-point fractional library routines. 44086 (line 354) 44087* __ashluha3: Fixed-point fractional library routines. 44088 (line 361) 44089* __ashluhq3: Fixed-point fractional library routines. 44090 (line 350) 44091* __ashluqq3: Fixed-point fractional library routines. 44092 (line 348) 44093* __ashlusa3: Fixed-point fractional library routines. 44094 (line 363) 44095* __ashlusq3: Fixed-point fractional library routines. 44096 (line 352) 44097* __ashluta3: Fixed-point fractional library routines. 44098 (line 367) 44099* __ashrda3: Fixed-point fractional library routines. 44100 (line 378) 44101* __ashrdi3: Integer library routines. 44102 (line 18) 44103* __ashrdq3: Fixed-point fractional library routines. 44104 (line 374) 44105* __ashrha3: Fixed-point fractional library routines. 44106 (line 376) 44107* __ashrhq3: Fixed-point fractional library routines. 44108 (line 372) 44109* __ashrqq3: Fixed-point fractional library routines. 44110 (line 371) 44111* __ashrsa3: Fixed-point fractional library routines. 44112 (line 377) 44113* __ashrsi3: Integer library routines. 44114 (line 17) 44115* __ashrsq3: Fixed-point fractional library routines. 44116 (line 373) 44117* __ashrta3: Fixed-point fractional library routines. 44118 (line 379) 44119* __ashrti3: Integer library routines. 44120 (line 19) 44121* __bid_adddd3: Decimal float library routines. 44122 (line 23) 44123* __bid_addsd3: Decimal float library routines. 44124 (line 19) 44125* __bid_addtd3: Decimal float library routines. 44126 (line 27) 44127* __bid_divdd3: Decimal float library routines. 44128 (line 66) 44129* __bid_divsd3: Decimal float library routines. 44130 (line 62) 44131* __bid_divtd3: Decimal float library routines. 44132 (line 70) 44133* __bid_eqdd2: Decimal float library routines. 44134 (line 258) 44135* __bid_eqsd2: Decimal float library routines. 44136 (line 256) 44137* __bid_eqtd2: Decimal float library routines. 44138 (line 260) 44139* __bid_extendddtd2: Decimal float library routines. 44140 (line 91) 44141* __bid_extendddtf: Decimal float library routines. 44142 (line 139) 44143* __bid_extendddxf: Decimal float library routines. 44144 (line 133) 44145* __bid_extenddfdd: Decimal float library routines. 44146 (line 146) 44147* __bid_extenddftd: Decimal float library routines. 44148 (line 106) 44149* __bid_extendsddd2: Decimal float library routines. 44150 (line 87) 44151* __bid_extendsddf: Decimal float library routines. 44152 (line 127) 44153* __bid_extendsdtd2: Decimal float library routines. 44154 (line 89) 44155* __bid_extendsdtf: Decimal float library routines. 44156 (line 137) 44157* __bid_extendsdxf: Decimal float library routines. 44158 (line 131) 44159* __bid_extendsfdd: Decimal float library routines. 44160 (line 102) 44161* __bid_extendsfsd: Decimal float library routines. 44162 (line 144) 44163* __bid_extendsftd: Decimal float library routines. 44164 (line 104) 44165* __bid_extendtftd: Decimal float library routines. 44166 (line 148) 44167* __bid_extendxftd: Decimal float library routines. 44168 (line 108) 44169* __bid_fixdddi: Decimal float library routines. 44170 (line 169) 44171* __bid_fixddsi: Decimal float library routines. 44172 (line 161) 44173* __bid_fixsddi: Decimal float library routines. 44174 (line 167) 44175* __bid_fixsdsi: Decimal float library routines. 44176 (line 159) 44177* __bid_fixtddi: Decimal float library routines. 44178 (line 171) 44179* __bid_fixtdsi: Decimal float library routines. 44180 (line 163) 44181* __bid_fixunsdddi: Decimal float library routines. 44182 (line 186) 44183* __bid_fixunsddsi: Decimal float library routines. 44184 (line 177) 44185* __bid_fixunssddi: Decimal float library routines. 44186 (line 184) 44187* __bid_fixunssdsi: Decimal float library routines. 44188 (line 175) 44189* __bid_fixunstddi: Decimal float library routines. 44190 (line 188) 44191* __bid_fixunstdsi: Decimal float library routines. 44192 (line 179) 44193* __bid_floatdidd: Decimal float library routines. 44194 (line 204) 44195* __bid_floatdisd: Decimal float library routines. 44196 (line 202) 44197* __bid_floatditd: Decimal float library routines. 44198 (line 206) 44199* __bid_floatsidd: Decimal float library routines. 44200 (line 195) 44201* __bid_floatsisd: Decimal float library routines. 44202 (line 193) 44203* __bid_floatsitd: Decimal float library routines. 44204 (line 197) 44205* __bid_floatunsdidd: Decimal float library routines. 44206 (line 222) 44207* __bid_floatunsdisd: Decimal float library routines. 44208 (line 220) 44209* __bid_floatunsditd: Decimal float library routines. 44210 (line 224) 44211* __bid_floatunssidd: Decimal float library routines. 44212 (line 213) 44213* __bid_floatunssisd: Decimal float library routines. 44214 (line 211) 44215* __bid_floatunssitd: Decimal float library routines. 44216 (line 215) 44217* __bid_gedd2: Decimal float library routines. 44218 (line 276) 44219* __bid_gesd2: Decimal float library routines. 44220 (line 274) 44221* __bid_getd2: Decimal float library routines. 44222 (line 278) 44223* __bid_gtdd2: Decimal float library routines. 44224 (line 303) 44225* __bid_gtsd2: Decimal float library routines. 44226 (line 301) 44227* __bid_gttd2: Decimal float library routines. 44228 (line 305) 44229* __bid_ledd2: Decimal float library routines. 44230 (line 294) 44231* __bid_lesd2: Decimal float library routines. 44232 (line 292) 44233* __bid_letd2: Decimal float library routines. 44234 (line 296) 44235* __bid_ltdd2: Decimal float library routines. 44236 (line 285) 44237* __bid_ltsd2: Decimal float library routines. 44238 (line 283) 44239* __bid_lttd2: Decimal float library routines. 44240 (line 287) 44241* __bid_muldd3: Decimal float library routines. 44242 (line 52) 44243* __bid_mulsd3: Decimal float library routines. 44244 (line 48) 44245* __bid_multd3: Decimal float library routines. 44246 (line 56) 44247* __bid_nedd2: Decimal float library routines. 44248 (line 267) 44249* __bid_negdd2: Decimal float library routines. 44250 (line 77) 44251* __bid_negsd2: Decimal float library routines. 44252 (line 75) 44253* __bid_negtd2: Decimal float library routines. 44254 (line 79) 44255* __bid_nesd2: Decimal float library routines. 44256 (line 265) 44257* __bid_netd2: Decimal float library routines. 44258 (line 269) 44259* __bid_subdd3: Decimal float library routines. 44260 (line 37) 44261* __bid_subsd3: Decimal float library routines. 44262 (line 33) 44263* __bid_subtd3: Decimal float library routines. 44264 (line 41) 44265* __bid_truncdddf: Decimal float library routines. 44266 (line 152) 44267* __bid_truncddsd2: Decimal float library routines. 44268 (line 93) 44269* __bid_truncddsf: Decimal float library routines. 44270 (line 123) 44271* __bid_truncdfsd: Decimal float library routines. 44272 (line 110) 44273* __bid_truncsdsf: Decimal float library routines. 44274 (line 150) 44275* __bid_trunctddd2: Decimal float library routines. 44276 (line 97) 44277* __bid_trunctddf: Decimal float library routines. 44278 (line 129) 44279* __bid_trunctdsd2: Decimal float library routines. 44280 (line 95) 44281* __bid_trunctdsf: Decimal float library routines. 44282 (line 125) 44283* __bid_trunctdtf: Decimal float library routines. 44284 (line 154) 44285* __bid_trunctdxf: Decimal float library routines. 44286 (line 135) 44287* __bid_trunctfdd: Decimal float library routines. 44288 (line 118) 44289* __bid_trunctfsd: Decimal float library routines. 44290 (line 114) 44291* __bid_truncxfdd: Decimal float library routines. 44292 (line 116) 44293* __bid_truncxfsd: Decimal float library routines. 44294 (line 112) 44295* __bid_unorddd2: Decimal float library routines. 44296 (line 234) 44297* __bid_unordsd2: Decimal float library routines. 44298 (line 232) 44299* __bid_unordtd2: Decimal float library routines. 44300 (line 236) 44301* __bswapdi2: Integer library routines. 44302 (line 161) 44303* __bswapsi2: Integer library routines. 44304 (line 160) 44305* __builtin_classify_type: Varargs. (line 48) 44306* __builtin_next_arg: Varargs. (line 39) 44307* __builtin_saveregs: Varargs. (line 22) 44308* __chkp_bndcl: Misc. (line 650) 44309* __chkp_bndcu: Misc. (line 656) 44310* __chkp_bndldx: Misc. (line 644) 44311* __chkp_bndmk: Misc. (line 631) 44312* __chkp_bndret: Misc. (line 662) 44313* __chkp_bndstx: Misc. (line 638) 44314* __chkp_intersect: Misc. (line 668) 44315* __chkp_narrow: Misc. (line 673) 44316* __chkp_sizeof: Misc. (line 679) 44317* __clear_cache: Miscellaneous routines. 44318 (line 9) 44319* __clzdi2: Integer library routines. 44320 (line 130) 44321* __clzsi2: Integer library routines. 44322 (line 129) 44323* __clzti2: Integer library routines. 44324 (line 131) 44325* __cmpda2: Fixed-point fractional library routines. 44326 (line 458) 44327* __cmpdf2: Soft float library routines. 44328 (line 163) 44329* __cmpdi2: Integer library routines. 44330 (line 86) 44331* __cmpdq2: Fixed-point fractional library routines. 44332 (line 447) 44333* __cmpha2: Fixed-point fractional library routines. 44334 (line 456) 44335* __cmphq2: Fixed-point fractional library routines. 44336 (line 445) 44337* __cmpqq2: Fixed-point fractional library routines. 44338 (line 444) 44339* __cmpsa2: Fixed-point fractional library routines. 44340 (line 457) 44341* __cmpsf2: Soft float library routines. 44342 (line 162) 44343* __cmpsq2: Fixed-point fractional library routines. 44344 (line 446) 44345* __cmpta2: Fixed-point fractional library routines. 44346 (line 459) 44347* __cmptf2: Soft float library routines. 44348 (line 164) 44349* __cmpti2: Integer library routines. 44350 (line 87) 44351* __cmpuda2: Fixed-point fractional library routines. 44352 (line 464) 44353* __cmpudq2: Fixed-point fractional library routines. 44354 (line 454) 44355* __cmpuha2: Fixed-point fractional library routines. 44356 (line 461) 44357* __cmpuhq2: Fixed-point fractional library routines. 44358 (line 451) 44359* __cmpuqq2: Fixed-point fractional library routines. 44360 (line 449) 44361* __cmpusa2: Fixed-point fractional library routines. 44362 (line 463) 44363* __cmpusq2: Fixed-point fractional library routines. 44364 (line 452) 44365* __cmputa2: Fixed-point fractional library routines. 44366 (line 466) 44367* __CTOR_LIST__: Initialization. (line 25) 44368* __ctzdi2: Integer library routines. 44369 (line 137) 44370* __ctzsi2: Integer library routines. 44371 (line 136) 44372* __ctzti2: Integer library routines. 44373 (line 138) 44374* __divda3: Fixed-point fractional library routines. 44375 (line 234) 44376* __divdc3: Soft float library routines. 44377 (line 250) 44378* __divdf3: Soft float library routines. 44379 (line 47) 44380* __divdi3: Integer library routines. 44381 (line 24) 44382* __divdq3: Fixed-point fractional library routines. 44383 (line 229) 44384* __divha3: Fixed-point fractional library routines. 44385 (line 231) 44386* __divhq3: Fixed-point fractional library routines. 44387 (line 227) 44388* __divqq3: Fixed-point fractional library routines. 44389 (line 225) 44390* __divsa3: Fixed-point fractional library routines. 44391 (line 233) 44392* __divsc3: Soft float library routines. 44393 (line 248) 44394* __divsf3: Soft float library routines. 44395 (line 46) 44396* __divsi3: Integer library routines. 44397 (line 23) 44398* __divsq3: Fixed-point fractional library routines. 44399 (line 228) 44400* __divta3: Fixed-point fractional library routines. 44401 (line 235) 44402* __divtc3: Soft float library routines. 44403 (line 252) 44404* __divtf3: Soft float library routines. 44405 (line 48) 44406* __divti3: Integer library routines. 44407 (line 25) 44408* __divxc3: Soft float library routines. 44409 (line 254) 44410* __divxf3: Soft float library routines. 44411 (line 50) 44412* __dpd_adddd3: Decimal float library routines. 44413 (line 21) 44414* __dpd_addsd3: Decimal float library routines. 44415 (line 17) 44416* __dpd_addtd3: Decimal float library routines. 44417 (line 25) 44418* __dpd_divdd3: Decimal float library routines. 44419 (line 64) 44420* __dpd_divsd3: Decimal float library routines. 44421 (line 60) 44422* __dpd_divtd3: Decimal float library routines. 44423 (line 68) 44424* __dpd_eqdd2: Decimal float library routines. 44425 (line 257) 44426* __dpd_eqsd2: Decimal float library routines. 44427 (line 255) 44428* __dpd_eqtd2: Decimal float library routines. 44429 (line 259) 44430* __dpd_extendddtd2: Decimal float library routines. 44431 (line 90) 44432* __dpd_extendddtf: Decimal float library routines. 44433 (line 138) 44434* __dpd_extendddxf: Decimal float library routines. 44435 (line 132) 44436* __dpd_extenddfdd: Decimal float library routines. 44437 (line 145) 44438* __dpd_extenddftd: Decimal float library routines. 44439 (line 105) 44440* __dpd_extendsddd2: Decimal float library routines. 44441 (line 86) 44442* __dpd_extendsddf: Decimal float library routines. 44443 (line 126) 44444* __dpd_extendsdtd2: Decimal float library routines. 44445 (line 88) 44446* __dpd_extendsdtf: Decimal float library routines. 44447 (line 136) 44448* __dpd_extendsdxf: Decimal float library routines. 44449 (line 130) 44450* __dpd_extendsfdd: Decimal float library routines. 44451 (line 101) 44452* __dpd_extendsfsd: Decimal float library routines. 44453 (line 143) 44454* __dpd_extendsftd: Decimal float library routines. 44455 (line 103) 44456* __dpd_extendtftd: Decimal float library routines. 44457 (line 147) 44458* __dpd_extendxftd: Decimal float library routines. 44459 (line 107) 44460* __dpd_fixdddi: Decimal float library routines. 44461 (line 168) 44462* __dpd_fixddsi: Decimal float library routines. 44463 (line 160) 44464* __dpd_fixsddi: Decimal float library routines. 44465 (line 166) 44466* __dpd_fixsdsi: Decimal float library routines. 44467 (line 158) 44468* __dpd_fixtddi: Decimal float library routines. 44469 (line 170) 44470* __dpd_fixtdsi: Decimal float library routines. 44471 (line 162) 44472* __dpd_fixunsdddi: Decimal float library routines. 44473 (line 185) 44474* __dpd_fixunsddsi: Decimal float library routines. 44475 (line 176) 44476* __dpd_fixunssddi: Decimal float library routines. 44477 (line 183) 44478* __dpd_fixunssdsi: Decimal float library routines. 44479 (line 174) 44480* __dpd_fixunstddi: Decimal float library routines. 44481 (line 187) 44482* __dpd_fixunstdsi: Decimal float library routines. 44483 (line 178) 44484* __dpd_floatdidd: Decimal float library routines. 44485 (line 203) 44486* __dpd_floatdisd: Decimal float library routines. 44487 (line 201) 44488* __dpd_floatditd: Decimal float library routines. 44489 (line 205) 44490* __dpd_floatsidd: Decimal float library routines. 44491 (line 194) 44492* __dpd_floatsisd: Decimal float library routines. 44493 (line 192) 44494* __dpd_floatsitd: Decimal float library routines. 44495 (line 196) 44496* __dpd_floatunsdidd: Decimal float library routines. 44497 (line 221) 44498* __dpd_floatunsdisd: Decimal float library routines. 44499 (line 219) 44500* __dpd_floatunsditd: Decimal float library routines. 44501 (line 223) 44502* __dpd_floatunssidd: Decimal float library routines. 44503 (line 212) 44504* __dpd_floatunssisd: Decimal float library routines. 44505 (line 210) 44506* __dpd_floatunssitd: Decimal float library routines. 44507 (line 214) 44508* __dpd_gedd2: Decimal float library routines. 44509 (line 275) 44510* __dpd_gesd2: Decimal float library routines. 44511 (line 273) 44512* __dpd_getd2: Decimal float library routines. 44513 (line 277) 44514* __dpd_gtdd2: Decimal float library routines. 44515 (line 302) 44516* __dpd_gtsd2: Decimal float library routines. 44517 (line 300) 44518* __dpd_gttd2: Decimal float library routines. 44519 (line 304) 44520* __dpd_ledd2: Decimal float library routines. 44521 (line 293) 44522* __dpd_lesd2: Decimal float library routines. 44523 (line 291) 44524* __dpd_letd2: Decimal float library routines. 44525 (line 295) 44526* __dpd_ltdd2: Decimal float library routines. 44527 (line 284) 44528* __dpd_ltsd2: Decimal float library routines. 44529 (line 282) 44530* __dpd_lttd2: Decimal float library routines. 44531 (line 286) 44532* __dpd_muldd3: Decimal float library routines. 44533 (line 50) 44534* __dpd_mulsd3: Decimal float library routines. 44535 (line 46) 44536* __dpd_multd3: Decimal float library routines. 44537 (line 54) 44538* __dpd_nedd2: Decimal float library routines. 44539 (line 266) 44540* __dpd_negdd2: Decimal float library routines. 44541 (line 76) 44542* __dpd_negsd2: Decimal float library routines. 44543 (line 74) 44544* __dpd_negtd2: Decimal float library routines. 44545 (line 78) 44546* __dpd_nesd2: Decimal float library routines. 44547 (line 264) 44548* __dpd_netd2: Decimal float library routines. 44549 (line 268) 44550* __dpd_subdd3: Decimal float library routines. 44551 (line 35) 44552* __dpd_subsd3: Decimal float library routines. 44553 (line 31) 44554* __dpd_subtd3: Decimal float library routines. 44555 (line 39) 44556* __dpd_truncdddf: Decimal float library routines. 44557 (line 151) 44558* __dpd_truncddsd2: Decimal float library routines. 44559 (line 92) 44560* __dpd_truncddsf: Decimal float library routines. 44561 (line 122) 44562* __dpd_truncdfsd: Decimal float library routines. 44563 (line 109) 44564* __dpd_truncsdsf: Decimal float library routines. 44565 (line 149) 44566* __dpd_trunctddd2: Decimal float library routines. 44567 (line 96) 44568* __dpd_trunctddf: Decimal float library routines. 44569 (line 128) 44570* __dpd_trunctdsd2: Decimal float library routines. 44571 (line 94) 44572* __dpd_trunctdsf: Decimal float library routines. 44573 (line 124) 44574* __dpd_trunctdtf: Decimal float library routines. 44575 (line 153) 44576* __dpd_trunctdxf: Decimal float library routines. 44577 (line 134) 44578* __dpd_trunctfdd: Decimal float library routines. 44579 (line 117) 44580* __dpd_trunctfsd: Decimal float library routines. 44581 (line 113) 44582* __dpd_truncxfdd: Decimal float library routines. 44583 (line 115) 44584* __dpd_truncxfsd: Decimal float library routines. 44585 (line 111) 44586* __dpd_unorddd2: Decimal float library routines. 44587 (line 233) 44588* __dpd_unordsd2: Decimal float library routines. 44589 (line 231) 44590* __dpd_unordtd2: Decimal float library routines. 44591 (line 235) 44592* __DTOR_LIST__: Initialization. (line 25) 44593* __eqdf2: Soft float library routines. 44594 (line 193) 44595* __eqsf2: Soft float library routines. 44596 (line 192) 44597* __eqtf2: Soft float library routines. 44598 (line 194) 44599* __extenddftf2: Soft float library routines. 44600 (line 67) 44601* __extenddfxf2: Soft float library routines. 44602 (line 68) 44603* __extendsfdf2: Soft float library routines. 44604 (line 64) 44605* __extendsftf2: Soft float library routines. 44606 (line 65) 44607* __extendsfxf2: Soft float library routines. 44608 (line 66) 44609* __ffsdi2: Integer library routines. 44610 (line 143) 44611* __ffsti2: Integer library routines. 44612 (line 144) 44613* __fixdfdi: Soft float library routines. 44614 (line 87) 44615* __fixdfsi: Soft float library routines. 44616 (line 80) 44617* __fixdfti: Soft float library routines. 44618 (line 93) 44619* __fixsfdi: Soft float library routines. 44620 (line 86) 44621* __fixsfsi: Soft float library routines. 44622 (line 79) 44623* __fixsfti: Soft float library routines. 44624 (line 92) 44625* __fixtfdi: Soft float library routines. 44626 (line 88) 44627* __fixtfsi: Soft float library routines. 44628 (line 81) 44629* __fixtfti: Soft float library routines. 44630 (line 94) 44631* __fixunsdfdi: Soft float library routines. 44632 (line 107) 44633* __fixunsdfsi: Soft float library routines. 44634 (line 100) 44635* __fixunsdfti: Soft float library routines. 44636 (line 114) 44637* __fixunssfdi: Soft float library routines. 44638 (line 106) 44639* __fixunssfsi: Soft float library routines. 44640 (line 99) 44641* __fixunssfti: Soft float library routines. 44642 (line 113) 44643* __fixunstfdi: Soft float library routines. 44644 (line 108) 44645* __fixunstfsi: Soft float library routines. 44646 (line 101) 44647* __fixunstfti: Soft float library routines. 44648 (line 115) 44649* __fixunsxfdi: Soft float library routines. 44650 (line 109) 44651* __fixunsxfsi: Soft float library routines. 44652 (line 102) 44653* __fixunsxfti: Soft float library routines. 44654 (line 116) 44655* __fixxfdi: Soft float library routines. 44656 (line 89) 44657* __fixxfsi: Soft float library routines. 44658 (line 82) 44659* __fixxfti: Soft float library routines. 44660 (line 95) 44661* __floatdidf: Soft float library routines. 44662 (line 127) 44663* __floatdisf: Soft float library routines. 44664 (line 126) 44665* __floatditf: Soft float library routines. 44666 (line 128) 44667* __floatdixf: Soft float library routines. 44668 (line 129) 44669* __floatsidf: Soft float library routines. 44670 (line 121) 44671* __floatsisf: Soft float library routines. 44672 (line 120) 44673* __floatsitf: Soft float library routines. 44674 (line 122) 44675* __floatsixf: Soft float library routines. 44676 (line 123) 44677* __floattidf: Soft float library routines. 44678 (line 133) 44679* __floattisf: Soft float library routines. 44680 (line 132) 44681* __floattitf: Soft float library routines. 44682 (line 134) 44683* __floattixf: Soft float library routines. 44684 (line 135) 44685* __floatundidf: Soft float library routines. 44686 (line 145) 44687* __floatundisf: Soft float library routines. 44688 (line 144) 44689* __floatunditf: Soft float library routines. 44690 (line 146) 44691* __floatundixf: Soft float library routines. 44692 (line 147) 44693* __floatunsidf: Soft float library routines. 44694 (line 139) 44695* __floatunsisf: Soft float library routines. 44696 (line 138) 44697* __floatunsitf: Soft float library routines. 44698 (line 140) 44699* __floatunsixf: Soft float library routines. 44700 (line 141) 44701* __floatuntidf: Soft float library routines. 44702 (line 151) 44703* __floatuntisf: Soft float library routines. 44704 (line 150) 44705* __floatuntitf: Soft float library routines. 44706 (line 152) 44707* __floatuntixf: Soft float library routines. 44708 (line 153) 44709* __fractdadf: Fixed-point fractional library routines. 44710 (line 643) 44711* __fractdadi: Fixed-point fractional library routines. 44712 (line 640) 44713* __fractdadq: Fixed-point fractional library routines. 44714 (line 623) 44715* __fractdaha2: Fixed-point fractional library routines. 44716 (line 624) 44717* __fractdahi: Fixed-point fractional library routines. 44718 (line 638) 44719* __fractdahq: Fixed-point fractional library routines. 44720 (line 621) 44721* __fractdaqi: Fixed-point fractional library routines. 44722 (line 637) 44723* __fractdaqq: Fixed-point fractional library routines. 44724 (line 620) 44725* __fractdasa2: Fixed-point fractional library routines. 44726 (line 625) 44727* __fractdasf: Fixed-point fractional library routines. 44728 (line 642) 44729* __fractdasi: Fixed-point fractional library routines. 44730 (line 639) 44731* __fractdasq: Fixed-point fractional library routines. 44732 (line 622) 44733* __fractdata2: Fixed-point fractional library routines. 44734 (line 626) 44735* __fractdati: Fixed-point fractional library routines. 44736 (line 641) 44737* __fractdauda: Fixed-point fractional library routines. 44738 (line 634) 44739* __fractdaudq: Fixed-point fractional library routines. 44740 (line 630) 44741* __fractdauha: Fixed-point fractional library routines. 44742 (line 632) 44743* __fractdauhq: Fixed-point fractional library routines. 44744 (line 628) 44745* __fractdauqq: Fixed-point fractional library routines. 44746 (line 627) 44747* __fractdausa: Fixed-point fractional library routines. 44748 (line 633) 44749* __fractdausq: Fixed-point fractional library routines. 44750 (line 629) 44751* __fractdauta: Fixed-point fractional library routines. 44752 (line 635) 44753* __fractdfda: Fixed-point fractional library routines. 44754 (line 1032) 44755* __fractdfdq: Fixed-point fractional library routines. 44756 (line 1029) 44757* __fractdfha: Fixed-point fractional library routines. 44758 (line 1030) 44759* __fractdfhq: Fixed-point fractional library routines. 44760 (line 1027) 44761* __fractdfqq: Fixed-point fractional library routines. 44762 (line 1026) 44763* __fractdfsa: Fixed-point fractional library routines. 44764 (line 1031) 44765* __fractdfsq: Fixed-point fractional library routines. 44766 (line 1028) 44767* __fractdfta: Fixed-point fractional library routines. 44768 (line 1033) 44769* __fractdfuda: Fixed-point fractional library routines. 44770 (line 1040) 44771* __fractdfudq: Fixed-point fractional library routines. 44772 (line 1037) 44773* __fractdfuha: Fixed-point fractional library routines. 44774 (line 1038) 44775* __fractdfuhq: Fixed-point fractional library routines. 44776 (line 1035) 44777* __fractdfuqq: Fixed-point fractional library routines. 44778 (line 1034) 44779* __fractdfusa: Fixed-point fractional library routines. 44780 (line 1039) 44781* __fractdfusq: Fixed-point fractional library routines. 44782 (line 1036) 44783* __fractdfuta: Fixed-point fractional library routines. 44784 (line 1041) 44785* __fractdida: Fixed-point fractional library routines. 44786 (line 982) 44787* __fractdidq: Fixed-point fractional library routines. 44788 (line 979) 44789* __fractdiha: Fixed-point fractional library routines. 44790 (line 980) 44791* __fractdihq: Fixed-point fractional library routines. 44792 (line 977) 44793* __fractdiqq: Fixed-point fractional library routines. 44794 (line 976) 44795* __fractdisa: Fixed-point fractional library routines. 44796 (line 981) 44797* __fractdisq: Fixed-point fractional library routines. 44798 (line 978) 44799* __fractdita: Fixed-point fractional library routines. 44800 (line 983) 44801* __fractdiuda: Fixed-point fractional library routines. 44802 (line 990) 44803* __fractdiudq: Fixed-point fractional library routines. 44804 (line 987) 44805* __fractdiuha: Fixed-point fractional library routines. 44806 (line 988) 44807* __fractdiuhq: Fixed-point fractional library routines. 44808 (line 985) 44809* __fractdiuqq: Fixed-point fractional library routines. 44810 (line 984) 44811* __fractdiusa: Fixed-point fractional library routines. 44812 (line 989) 44813* __fractdiusq: Fixed-point fractional library routines. 44814 (line 986) 44815* __fractdiuta: Fixed-point fractional library routines. 44816 (line 991) 44817* __fractdqda: Fixed-point fractional library routines. 44818 (line 551) 44819* __fractdqdf: Fixed-point fractional library routines. 44820 (line 573) 44821* __fractdqdi: Fixed-point fractional library routines. 44822 (line 570) 44823* __fractdqha: Fixed-point fractional library routines. 44824 (line 549) 44825* __fractdqhi: Fixed-point fractional library routines. 44826 (line 568) 44827* __fractdqhq2: Fixed-point fractional library routines. 44828 (line 547) 44829* __fractdqqi: Fixed-point fractional library routines. 44830 (line 567) 44831* __fractdqqq2: Fixed-point fractional library routines. 44832 (line 546) 44833* __fractdqsa: Fixed-point fractional library routines. 44834 (line 550) 44835* __fractdqsf: Fixed-point fractional library routines. 44836 (line 572) 44837* __fractdqsi: Fixed-point fractional library routines. 44838 (line 569) 44839* __fractdqsq2: Fixed-point fractional library routines. 44840 (line 548) 44841* __fractdqta: Fixed-point fractional library routines. 44842 (line 552) 44843* __fractdqti: Fixed-point fractional library routines. 44844 (line 571) 44845* __fractdquda: Fixed-point fractional library routines. 44846 (line 563) 44847* __fractdqudq: Fixed-point fractional library routines. 44848 (line 558) 44849* __fractdquha: Fixed-point fractional library routines. 44850 (line 560) 44851* __fractdquhq: Fixed-point fractional library routines. 44852 (line 555) 44853* __fractdquqq: Fixed-point fractional library routines. 44854 (line 553) 44855* __fractdqusa: Fixed-point fractional library routines. 44856 (line 562) 44857* __fractdqusq: Fixed-point fractional library routines. 44858 (line 556) 44859* __fractdquta: Fixed-point fractional library routines. 44860 (line 565) 44861* __fracthada2: Fixed-point fractional library routines. 44862 (line 579) 44863* __fracthadf: Fixed-point fractional library routines. 44864 (line 597) 44865* __fracthadi: Fixed-point fractional library routines. 44866 (line 594) 44867* __fracthadq: Fixed-point fractional library routines. 44868 (line 577) 44869* __fracthahi: Fixed-point fractional library routines. 44870 (line 592) 44871* __fracthahq: Fixed-point fractional library routines. 44872 (line 575) 44873* __fracthaqi: Fixed-point fractional library routines. 44874 (line 591) 44875* __fracthaqq: Fixed-point fractional library routines. 44876 (line 574) 44877* __fracthasa2: Fixed-point fractional library routines. 44878 (line 578) 44879* __fracthasf: Fixed-point fractional library routines. 44880 (line 596) 44881* __fracthasi: Fixed-point fractional library routines. 44882 (line 593) 44883* __fracthasq: Fixed-point fractional library routines. 44884 (line 576) 44885* __fracthata2: Fixed-point fractional library routines. 44886 (line 580) 44887* __fracthati: Fixed-point fractional library routines. 44888 (line 595) 44889* __fracthauda: Fixed-point fractional library routines. 44890 (line 588) 44891* __fracthaudq: Fixed-point fractional library routines. 44892 (line 584) 44893* __fracthauha: Fixed-point fractional library routines. 44894 (line 586) 44895* __fracthauhq: Fixed-point fractional library routines. 44896 (line 582) 44897* __fracthauqq: Fixed-point fractional library routines. 44898 (line 581) 44899* __fracthausa: Fixed-point fractional library routines. 44900 (line 587) 44901* __fracthausq: Fixed-point fractional library routines. 44902 (line 583) 44903* __fracthauta: Fixed-point fractional library routines. 44904 (line 589) 44905* __fracthida: Fixed-point fractional library routines. 44906 (line 950) 44907* __fracthidq: Fixed-point fractional library routines. 44908 (line 947) 44909* __fracthiha: Fixed-point fractional library routines. 44910 (line 948) 44911* __fracthihq: Fixed-point fractional library routines. 44912 (line 945) 44913* __fracthiqq: Fixed-point fractional library routines. 44914 (line 944) 44915* __fracthisa: Fixed-point fractional library routines. 44916 (line 949) 44917* __fracthisq: Fixed-point fractional library routines. 44918 (line 946) 44919* __fracthita: Fixed-point fractional library routines. 44920 (line 951) 44921* __fracthiuda: Fixed-point fractional library routines. 44922 (line 958) 44923* __fracthiudq: Fixed-point fractional library routines. 44924 (line 955) 44925* __fracthiuha: Fixed-point fractional library routines. 44926 (line 956) 44927* __fracthiuhq: Fixed-point fractional library routines. 44928 (line 953) 44929* __fracthiuqq: Fixed-point fractional library routines. 44930 (line 952) 44931* __fracthiusa: Fixed-point fractional library routines. 44932 (line 957) 44933* __fracthiusq: Fixed-point fractional library routines. 44934 (line 954) 44935* __fracthiuta: Fixed-point fractional library routines. 44936 (line 959) 44937* __fracthqda: Fixed-point fractional library routines. 44938 (line 505) 44939* __fracthqdf: Fixed-point fractional library routines. 44940 (line 521) 44941* __fracthqdi: Fixed-point fractional library routines. 44942 (line 518) 44943* __fracthqdq2: Fixed-point fractional library routines. 44944 (line 502) 44945* __fracthqha: Fixed-point fractional library routines. 44946 (line 503) 44947* __fracthqhi: Fixed-point fractional library routines. 44948 (line 516) 44949* __fracthqqi: Fixed-point fractional library routines. 44950 (line 515) 44951* __fracthqqq2: Fixed-point fractional library routines. 44952 (line 500) 44953* __fracthqsa: Fixed-point fractional library routines. 44954 (line 504) 44955* __fracthqsf: Fixed-point fractional library routines. 44956 (line 520) 44957* __fracthqsi: Fixed-point fractional library routines. 44958 (line 517) 44959* __fracthqsq2: Fixed-point fractional library routines. 44960 (line 501) 44961* __fracthqta: Fixed-point fractional library routines. 44962 (line 506) 44963* __fracthqti: Fixed-point fractional library routines. 44964 (line 519) 44965* __fracthquda: Fixed-point fractional library routines. 44966 (line 513) 44967* __fracthqudq: Fixed-point fractional library routines. 44968 (line 510) 44969* __fracthquha: Fixed-point fractional library routines. 44970 (line 511) 44971* __fracthquhq: Fixed-point fractional library routines. 44972 (line 508) 44973* __fracthquqq: Fixed-point fractional library routines. 44974 (line 507) 44975* __fracthqusa: Fixed-point fractional library routines. 44976 (line 512) 44977* __fracthqusq: Fixed-point fractional library routines. 44978 (line 509) 44979* __fracthquta: Fixed-point fractional library routines. 44980 (line 514) 44981* __fractqida: Fixed-point fractional library routines. 44982 (line 932) 44983* __fractqidq: Fixed-point fractional library routines. 44984 (line 929) 44985* __fractqiha: Fixed-point fractional library routines. 44986 (line 930) 44987* __fractqihq: Fixed-point fractional library routines. 44988 (line 927) 44989* __fractqiqq: Fixed-point fractional library routines. 44990 (line 926) 44991* __fractqisa: Fixed-point fractional library routines. 44992 (line 931) 44993* __fractqisq: Fixed-point fractional library routines. 44994 (line 928) 44995* __fractqita: Fixed-point fractional library routines. 44996 (line 933) 44997* __fractqiuda: Fixed-point fractional library routines. 44998 (line 941) 44999* __fractqiudq: Fixed-point fractional library routines. 45000 (line 937) 45001* __fractqiuha: Fixed-point fractional library routines. 45002 (line 939) 45003* __fractqiuhq: Fixed-point fractional library routines. 45004 (line 935) 45005* __fractqiuqq: Fixed-point fractional library routines. 45006 (line 934) 45007* __fractqiusa: Fixed-point fractional library routines. 45008 (line 940) 45009* __fractqiusq: Fixed-point fractional library routines. 45010 (line 936) 45011* __fractqiuta: Fixed-point fractional library routines. 45012 (line 942) 45013* __fractqqda: Fixed-point fractional library routines. 45014 (line 481) 45015* __fractqqdf: Fixed-point fractional library routines. 45016 (line 499) 45017* __fractqqdi: Fixed-point fractional library routines. 45018 (line 496) 45019* __fractqqdq2: Fixed-point fractional library routines. 45020 (line 478) 45021* __fractqqha: Fixed-point fractional library routines. 45022 (line 479) 45023* __fractqqhi: Fixed-point fractional library routines. 45024 (line 494) 45025* __fractqqhq2: Fixed-point fractional library routines. 45026 (line 476) 45027* __fractqqqi: Fixed-point fractional library routines. 45028 (line 493) 45029* __fractqqsa: Fixed-point fractional library routines. 45030 (line 480) 45031* __fractqqsf: Fixed-point fractional library routines. 45032 (line 498) 45033* __fractqqsi: Fixed-point fractional library routines. 45034 (line 495) 45035* __fractqqsq2: Fixed-point fractional library routines. 45036 (line 477) 45037* __fractqqta: Fixed-point fractional library routines. 45038 (line 482) 45039* __fractqqti: Fixed-point fractional library routines. 45040 (line 497) 45041* __fractqquda: Fixed-point fractional library routines. 45042 (line 490) 45043* __fractqqudq: Fixed-point fractional library routines. 45044 (line 486) 45045* __fractqquha: Fixed-point fractional library routines. 45046 (line 488) 45047* __fractqquhq: Fixed-point fractional library routines. 45048 (line 484) 45049* __fractqquqq: Fixed-point fractional library routines. 45050 (line 483) 45051* __fractqqusa: Fixed-point fractional library routines. 45052 (line 489) 45053* __fractqqusq: Fixed-point fractional library routines. 45054 (line 485) 45055* __fractqquta: Fixed-point fractional library routines. 45056 (line 491) 45057* __fractsada2: Fixed-point fractional library routines. 45058 (line 603) 45059* __fractsadf: Fixed-point fractional library routines. 45060 (line 619) 45061* __fractsadi: Fixed-point fractional library routines. 45062 (line 616) 45063* __fractsadq: Fixed-point fractional library routines. 45064 (line 601) 45065* __fractsaha2: Fixed-point fractional library routines. 45066 (line 602) 45067* __fractsahi: Fixed-point fractional library routines. 45068 (line 614) 45069* __fractsahq: Fixed-point fractional library routines. 45070 (line 599) 45071* __fractsaqi: Fixed-point fractional library routines. 45072 (line 613) 45073* __fractsaqq: Fixed-point fractional library routines. 45074 (line 598) 45075* __fractsasf: Fixed-point fractional library routines. 45076 (line 618) 45077* __fractsasi: Fixed-point fractional library routines. 45078 (line 615) 45079* __fractsasq: Fixed-point fractional library routines. 45080 (line 600) 45081* __fractsata2: Fixed-point fractional library routines. 45082 (line 604) 45083* __fractsati: Fixed-point fractional library routines. 45084 (line 617) 45085* __fractsauda: Fixed-point fractional library routines. 45086 (line 611) 45087* __fractsaudq: Fixed-point fractional library routines. 45088 (line 608) 45089* __fractsauha: Fixed-point fractional library routines. 45090 (line 609) 45091* __fractsauhq: Fixed-point fractional library routines. 45092 (line 606) 45093* __fractsauqq: Fixed-point fractional library routines. 45094 (line 605) 45095* __fractsausa: Fixed-point fractional library routines. 45096 (line 610) 45097* __fractsausq: Fixed-point fractional library routines. 45098 (line 607) 45099* __fractsauta: Fixed-point fractional library routines. 45100 (line 612) 45101* __fractsfda: Fixed-point fractional library routines. 45102 (line 1016) 45103* __fractsfdq: Fixed-point fractional library routines. 45104 (line 1013) 45105* __fractsfha: Fixed-point fractional library routines. 45106 (line 1014) 45107* __fractsfhq: Fixed-point fractional library routines. 45108 (line 1011) 45109* __fractsfqq: Fixed-point fractional library routines. 45110 (line 1010) 45111* __fractsfsa: Fixed-point fractional library routines. 45112 (line 1015) 45113* __fractsfsq: Fixed-point fractional library routines. 45114 (line 1012) 45115* __fractsfta: Fixed-point fractional library routines. 45116 (line 1017) 45117* __fractsfuda: Fixed-point fractional library routines. 45118 (line 1024) 45119* __fractsfudq: Fixed-point fractional library routines. 45120 (line 1021) 45121* __fractsfuha: Fixed-point fractional library routines. 45122 (line 1022) 45123* __fractsfuhq: Fixed-point fractional library routines. 45124 (line 1019) 45125* __fractsfuqq: Fixed-point fractional library routines. 45126 (line 1018) 45127* __fractsfusa: Fixed-point fractional library routines. 45128 (line 1023) 45129* __fractsfusq: Fixed-point fractional library routines. 45130 (line 1020) 45131* __fractsfuta: Fixed-point fractional library routines. 45132 (line 1025) 45133* __fractsida: Fixed-point fractional library routines. 45134 (line 966) 45135* __fractsidq: Fixed-point fractional library routines. 45136 (line 963) 45137* __fractsiha: Fixed-point fractional library routines. 45138 (line 964) 45139* __fractsihq: Fixed-point fractional library routines. 45140 (line 961) 45141* __fractsiqq: Fixed-point fractional library routines. 45142 (line 960) 45143* __fractsisa: Fixed-point fractional library routines. 45144 (line 965) 45145* __fractsisq: Fixed-point fractional library routines. 45146 (line 962) 45147* __fractsita: Fixed-point fractional library routines. 45148 (line 967) 45149* __fractsiuda: Fixed-point fractional library routines. 45150 (line 974) 45151* __fractsiudq: Fixed-point fractional library routines. 45152 (line 971) 45153* __fractsiuha: Fixed-point fractional library routines. 45154 (line 972) 45155* __fractsiuhq: Fixed-point fractional library routines. 45156 (line 969) 45157* __fractsiuqq: Fixed-point fractional library routines. 45158 (line 968) 45159* __fractsiusa: Fixed-point fractional library routines. 45160 (line 973) 45161* __fractsiusq: Fixed-point fractional library routines. 45162 (line 970) 45163* __fractsiuta: Fixed-point fractional library routines. 45164 (line 975) 45165* __fractsqda: Fixed-point fractional library routines. 45166 (line 527) 45167* __fractsqdf: Fixed-point fractional library routines. 45168 (line 545) 45169* __fractsqdi: Fixed-point fractional library routines. 45170 (line 542) 45171* __fractsqdq2: Fixed-point fractional library routines. 45172 (line 524) 45173* __fractsqha: Fixed-point fractional library routines. 45174 (line 525) 45175* __fractsqhi: Fixed-point fractional library routines. 45176 (line 540) 45177* __fractsqhq2: Fixed-point fractional library routines. 45178 (line 523) 45179* __fractsqqi: Fixed-point fractional library routines. 45180 (line 539) 45181* __fractsqqq2: Fixed-point fractional library routines. 45182 (line 522) 45183* __fractsqsa: Fixed-point fractional library routines. 45184 (line 526) 45185* __fractsqsf: Fixed-point fractional library routines. 45186 (line 544) 45187* __fractsqsi: Fixed-point fractional library routines. 45188 (line 541) 45189* __fractsqta: Fixed-point fractional library routines. 45190 (line 528) 45191* __fractsqti: Fixed-point fractional library routines. 45192 (line 543) 45193* __fractsquda: Fixed-point fractional library routines. 45194 (line 536) 45195* __fractsqudq: Fixed-point fractional library routines. 45196 (line 532) 45197* __fractsquha: Fixed-point fractional library routines. 45198 (line 534) 45199* __fractsquhq: Fixed-point fractional library routines. 45200 (line 530) 45201* __fractsquqq: Fixed-point fractional library routines. 45202 (line 529) 45203* __fractsqusa: Fixed-point fractional library routines. 45204 (line 535) 45205* __fractsqusq: Fixed-point fractional library routines. 45206 (line 531) 45207* __fractsquta: Fixed-point fractional library routines. 45208 (line 537) 45209* __fracttada2: Fixed-point fractional library routines. 45210 (line 650) 45211* __fracttadf: Fixed-point fractional library routines. 45212 (line 671) 45213* __fracttadi: Fixed-point fractional library routines. 45214 (line 668) 45215* __fracttadq: Fixed-point fractional library routines. 45216 (line 647) 45217* __fracttaha2: Fixed-point fractional library routines. 45218 (line 648) 45219* __fracttahi: Fixed-point fractional library routines. 45220 (line 666) 45221* __fracttahq: Fixed-point fractional library routines. 45222 (line 645) 45223* __fracttaqi: Fixed-point fractional library routines. 45224 (line 665) 45225* __fracttaqq: Fixed-point fractional library routines. 45226 (line 644) 45227* __fracttasa2: Fixed-point fractional library routines. 45228 (line 649) 45229* __fracttasf: Fixed-point fractional library routines. 45230 (line 670) 45231* __fracttasi: Fixed-point fractional library routines. 45232 (line 667) 45233* __fracttasq: Fixed-point fractional library routines. 45234 (line 646) 45235* __fracttati: Fixed-point fractional library routines. 45236 (line 669) 45237* __fracttauda: Fixed-point fractional library routines. 45238 (line 661) 45239* __fracttaudq: Fixed-point fractional library routines. 45240 (line 656) 45241* __fracttauha: Fixed-point fractional library routines. 45242 (line 658) 45243* __fracttauhq: Fixed-point fractional library routines. 45244 (line 653) 45245* __fracttauqq: Fixed-point fractional library routines. 45246 (line 651) 45247* __fracttausa: Fixed-point fractional library routines. 45248 (line 660) 45249* __fracttausq: Fixed-point fractional library routines. 45250 (line 654) 45251* __fracttauta: Fixed-point fractional library routines. 45252 (line 663) 45253* __fracttida: Fixed-point fractional library routines. 45254 (line 998) 45255* __fracttidq: Fixed-point fractional library routines. 45256 (line 995) 45257* __fracttiha: Fixed-point fractional library routines. 45258 (line 996) 45259* __fracttihq: Fixed-point fractional library routines. 45260 (line 993) 45261* __fracttiqq: Fixed-point fractional library routines. 45262 (line 992) 45263* __fracttisa: Fixed-point fractional library routines. 45264 (line 997) 45265* __fracttisq: Fixed-point fractional library routines. 45266 (line 994) 45267* __fracttita: Fixed-point fractional library routines. 45268 (line 999) 45269* __fracttiuda: Fixed-point fractional library routines. 45270 (line 1007) 45271* __fracttiudq: Fixed-point fractional library routines. 45272 (line 1003) 45273* __fracttiuha: Fixed-point fractional library routines. 45274 (line 1005) 45275* __fracttiuhq: Fixed-point fractional library routines. 45276 (line 1001) 45277* __fracttiuqq: Fixed-point fractional library routines. 45278 (line 1000) 45279* __fracttiusa: Fixed-point fractional library routines. 45280 (line 1006) 45281* __fracttiusq: Fixed-point fractional library routines. 45282 (line 1002) 45283* __fracttiuta: Fixed-point fractional library routines. 45284 (line 1008) 45285* __fractudada: Fixed-point fractional library routines. 45286 (line 865) 45287* __fractudadf: Fixed-point fractional library routines. 45288 (line 888) 45289* __fractudadi: Fixed-point fractional library routines. 45290 (line 885) 45291* __fractudadq: Fixed-point fractional library routines. 45292 (line 861) 45293* __fractudaha: Fixed-point fractional library routines. 45294 (line 863) 45295* __fractudahi: Fixed-point fractional library routines. 45296 (line 883) 45297* __fractudahq: Fixed-point fractional library routines. 45298 (line 859) 45299* __fractudaqi: Fixed-point fractional library routines. 45300 (line 882) 45301* __fractudaqq: Fixed-point fractional library routines. 45302 (line 858) 45303* __fractudasa: Fixed-point fractional library routines. 45304 (line 864) 45305* __fractudasf: Fixed-point fractional library routines. 45306 (line 887) 45307* __fractudasi: Fixed-point fractional library routines. 45308 (line 884) 45309* __fractudasq: Fixed-point fractional library routines. 45310 (line 860) 45311* __fractudata: Fixed-point fractional library routines. 45312 (line 866) 45313* __fractudati: Fixed-point fractional library routines. 45314 (line 886) 45315* __fractudaudq: Fixed-point fractional library routines. 45316 (line 874) 45317* __fractudauha2: Fixed-point fractional library routines. 45318 (line 876) 45319* __fractudauhq: Fixed-point fractional library routines. 45320 (line 870) 45321* __fractudauqq: Fixed-point fractional library routines. 45322 (line 868) 45323* __fractudausa2: Fixed-point fractional library routines. 45324 (line 878) 45325* __fractudausq: Fixed-point fractional library routines. 45326 (line 872) 45327* __fractudauta2: Fixed-point fractional library routines. 45328 (line 880) 45329* __fractudqda: Fixed-point fractional library routines. 45330 (line 772) 45331* __fractudqdf: Fixed-point fractional library routines. 45332 (line 798) 45333* __fractudqdi: Fixed-point fractional library routines. 45334 (line 794) 45335* __fractudqdq: Fixed-point fractional library routines. 45336 (line 767) 45337* __fractudqha: Fixed-point fractional library routines. 45338 (line 769) 45339* __fractudqhi: Fixed-point fractional library routines. 45340 (line 792) 45341* __fractudqhq: Fixed-point fractional library routines. 45342 (line 764) 45343* __fractudqqi: Fixed-point fractional library routines. 45344 (line 790) 45345* __fractudqqq: Fixed-point fractional library routines. 45346 (line 762) 45347* __fractudqsa: Fixed-point fractional library routines. 45348 (line 771) 45349* __fractudqsf: Fixed-point fractional library routines. 45350 (line 797) 45351* __fractudqsi: Fixed-point fractional library routines. 45352 (line 793) 45353* __fractudqsq: Fixed-point fractional library routines. 45354 (line 765) 45355* __fractudqta: Fixed-point fractional library routines. 45356 (line 774) 45357* __fractudqti: Fixed-point fractional library routines. 45358 (line 795) 45359* __fractudquda: Fixed-point fractional library routines. 45360 (line 786) 45361* __fractudquha: Fixed-point fractional library routines. 45362 (line 782) 45363* __fractudquhq2: Fixed-point fractional library routines. 45364 (line 778) 45365* __fractudquqq2: Fixed-point fractional library routines. 45366 (line 776) 45367* __fractudqusa: Fixed-point fractional library routines. 45368 (line 784) 45369* __fractudqusq2: Fixed-point fractional library routines. 45370 (line 780) 45371* __fractudquta: Fixed-point fractional library routines. 45372 (line 788) 45373* __fractuhada: Fixed-point fractional library routines. 45374 (line 806) 45375* __fractuhadf: Fixed-point fractional library routines. 45376 (line 829) 45377* __fractuhadi: Fixed-point fractional library routines. 45378 (line 826) 45379* __fractuhadq: Fixed-point fractional library routines. 45380 (line 802) 45381* __fractuhaha: Fixed-point fractional library routines. 45382 (line 804) 45383* __fractuhahi: Fixed-point fractional library routines. 45384 (line 824) 45385* __fractuhahq: Fixed-point fractional library routines. 45386 (line 800) 45387* __fractuhaqi: Fixed-point fractional library routines. 45388 (line 823) 45389* __fractuhaqq: Fixed-point fractional library routines. 45390 (line 799) 45391* __fractuhasa: Fixed-point fractional library routines. 45392 (line 805) 45393* __fractuhasf: Fixed-point fractional library routines. 45394 (line 828) 45395* __fractuhasi: Fixed-point fractional library routines. 45396 (line 825) 45397* __fractuhasq: Fixed-point fractional library routines. 45398 (line 801) 45399* __fractuhata: Fixed-point fractional library routines. 45400 (line 807) 45401* __fractuhati: Fixed-point fractional library routines. 45402 (line 827) 45403* __fractuhauda2: Fixed-point fractional library routines. 45404 (line 819) 45405* __fractuhaudq: Fixed-point fractional library routines. 45406 (line 815) 45407* __fractuhauhq: Fixed-point fractional library routines. 45408 (line 811) 45409* __fractuhauqq: Fixed-point fractional library routines. 45410 (line 809) 45411* __fractuhausa2: Fixed-point fractional library routines. 45412 (line 817) 45413* __fractuhausq: Fixed-point fractional library routines. 45414 (line 813) 45415* __fractuhauta2: Fixed-point fractional library routines. 45416 (line 821) 45417* __fractuhqda: Fixed-point fractional library routines. 45418 (line 709) 45419* __fractuhqdf: Fixed-point fractional library routines. 45420 (line 730) 45421* __fractuhqdi: Fixed-point fractional library routines. 45422 (line 727) 45423* __fractuhqdq: Fixed-point fractional library routines. 45424 (line 706) 45425* __fractuhqha: Fixed-point fractional library routines. 45426 (line 707) 45427* __fractuhqhi: Fixed-point fractional library routines. 45428 (line 725) 45429* __fractuhqhq: Fixed-point fractional library routines. 45430 (line 704) 45431* __fractuhqqi: Fixed-point fractional library routines. 45432 (line 724) 45433* __fractuhqqq: Fixed-point fractional library routines. 45434 (line 703) 45435* __fractuhqsa: Fixed-point fractional library routines. 45436 (line 708) 45437* __fractuhqsf: Fixed-point fractional library routines. 45438 (line 729) 45439* __fractuhqsi: Fixed-point fractional library routines. 45440 (line 726) 45441* __fractuhqsq: Fixed-point fractional library routines. 45442 (line 705) 45443* __fractuhqta: Fixed-point fractional library routines. 45444 (line 710) 45445* __fractuhqti: Fixed-point fractional library routines. 45446 (line 728) 45447* __fractuhquda: Fixed-point fractional library routines. 45448 (line 720) 45449* __fractuhqudq2: Fixed-point fractional library routines. 45450 (line 715) 45451* __fractuhquha: Fixed-point fractional library routines. 45452 (line 717) 45453* __fractuhquqq2: Fixed-point fractional library routines. 45454 (line 711) 45455* __fractuhqusa: Fixed-point fractional library routines. 45456 (line 719) 45457* __fractuhqusq2: Fixed-point fractional library routines. 45458 (line 713) 45459* __fractuhquta: Fixed-point fractional library routines. 45460 (line 722) 45461* __fractunsdadi: Fixed-point fractional library routines. 45462 (line 1562) 45463* __fractunsdahi: Fixed-point fractional library routines. 45464 (line 1560) 45465* __fractunsdaqi: Fixed-point fractional library routines. 45466 (line 1559) 45467* __fractunsdasi: Fixed-point fractional library routines. 45468 (line 1561) 45469* __fractunsdati: Fixed-point fractional library routines. 45470 (line 1563) 45471* __fractunsdida: Fixed-point fractional library routines. 45472 (line 1714) 45473* __fractunsdidq: Fixed-point fractional library routines. 45474 (line 1711) 45475* __fractunsdiha: Fixed-point fractional library routines. 45476 (line 1712) 45477* __fractunsdihq: Fixed-point fractional library routines. 45478 (line 1709) 45479* __fractunsdiqq: Fixed-point fractional library routines. 45480 (line 1708) 45481* __fractunsdisa: Fixed-point fractional library routines. 45482 (line 1713) 45483* __fractunsdisq: Fixed-point fractional library routines. 45484 (line 1710) 45485* __fractunsdita: Fixed-point fractional library routines. 45486 (line 1715) 45487* __fractunsdiuda: Fixed-point fractional library routines. 45488 (line 1726) 45489* __fractunsdiudq: Fixed-point fractional library routines. 45490 (line 1721) 45491* __fractunsdiuha: Fixed-point fractional library routines. 45492 (line 1723) 45493* __fractunsdiuhq: Fixed-point fractional library routines. 45494 (line 1718) 45495* __fractunsdiuqq: Fixed-point fractional library routines. 45496 (line 1716) 45497* __fractunsdiusa: Fixed-point fractional library routines. 45498 (line 1725) 45499* __fractunsdiusq: Fixed-point fractional library routines. 45500 (line 1719) 45501* __fractunsdiuta: Fixed-point fractional library routines. 45502 (line 1728) 45503* __fractunsdqdi: Fixed-point fractional library routines. 45504 (line 1546) 45505* __fractunsdqhi: Fixed-point fractional library routines. 45506 (line 1544) 45507* __fractunsdqqi: Fixed-point fractional library routines. 45508 (line 1543) 45509* __fractunsdqsi: Fixed-point fractional library routines. 45510 (line 1545) 45511* __fractunsdqti: Fixed-point fractional library routines. 45512 (line 1547) 45513* __fractunshadi: Fixed-point fractional library routines. 45514 (line 1552) 45515* __fractunshahi: Fixed-point fractional library routines. 45516 (line 1550) 45517* __fractunshaqi: Fixed-point fractional library routines. 45518 (line 1549) 45519* __fractunshasi: Fixed-point fractional library routines. 45520 (line 1551) 45521* __fractunshati: Fixed-point fractional library routines. 45522 (line 1553) 45523* __fractunshida: Fixed-point fractional library routines. 45524 (line 1670) 45525* __fractunshidq: Fixed-point fractional library routines. 45526 (line 1667) 45527* __fractunshiha: Fixed-point fractional library routines. 45528 (line 1668) 45529* __fractunshihq: Fixed-point fractional library routines. 45530 (line 1665) 45531* __fractunshiqq: Fixed-point fractional library routines. 45532 (line 1664) 45533* __fractunshisa: Fixed-point fractional library routines. 45534 (line 1669) 45535* __fractunshisq: Fixed-point fractional library routines. 45536 (line 1666) 45537* __fractunshita: Fixed-point fractional library routines. 45538 (line 1671) 45539* __fractunshiuda: Fixed-point fractional library routines. 45540 (line 1682) 45541* __fractunshiudq: Fixed-point fractional library routines. 45542 (line 1677) 45543* __fractunshiuha: Fixed-point fractional library routines. 45544 (line 1679) 45545* __fractunshiuhq: Fixed-point fractional library routines. 45546 (line 1674) 45547* __fractunshiuqq: Fixed-point fractional library routines. 45548 (line 1672) 45549* __fractunshiusa: Fixed-point fractional library routines. 45550 (line 1681) 45551* __fractunshiusq: Fixed-point fractional library routines. 45552 (line 1675) 45553* __fractunshiuta: Fixed-point fractional library routines. 45554 (line 1684) 45555* __fractunshqdi: Fixed-point fractional library routines. 45556 (line 1536) 45557* __fractunshqhi: Fixed-point fractional library routines. 45558 (line 1534) 45559* __fractunshqqi: Fixed-point fractional library routines. 45560 (line 1533) 45561* __fractunshqsi: Fixed-point fractional library routines. 45562 (line 1535) 45563* __fractunshqti: Fixed-point fractional library routines. 45564 (line 1537) 45565* __fractunsqida: Fixed-point fractional library routines. 45566 (line 1648) 45567* __fractunsqidq: Fixed-point fractional library routines. 45568 (line 1645) 45569* __fractunsqiha: Fixed-point fractional library routines. 45570 (line 1646) 45571* __fractunsqihq: Fixed-point fractional library routines. 45572 (line 1643) 45573* __fractunsqiqq: Fixed-point fractional library routines. 45574 (line 1642) 45575* __fractunsqisa: Fixed-point fractional library routines. 45576 (line 1647) 45577* __fractunsqisq: Fixed-point fractional library routines. 45578 (line 1644) 45579* __fractunsqita: Fixed-point fractional library routines. 45580 (line 1649) 45581* __fractunsqiuda: Fixed-point fractional library routines. 45582 (line 1660) 45583* __fractunsqiudq: Fixed-point fractional library routines. 45584 (line 1655) 45585* __fractunsqiuha: Fixed-point fractional library routines. 45586 (line 1657) 45587* __fractunsqiuhq: Fixed-point fractional library routines. 45588 (line 1652) 45589* __fractunsqiuqq: Fixed-point fractional library routines. 45590 (line 1650) 45591* __fractunsqiusa: Fixed-point fractional library routines. 45592 (line 1659) 45593* __fractunsqiusq: Fixed-point fractional library routines. 45594 (line 1653) 45595* __fractunsqiuta: Fixed-point fractional library routines. 45596 (line 1662) 45597* __fractunsqqdi: Fixed-point fractional library routines. 45598 (line 1531) 45599* __fractunsqqhi: Fixed-point fractional library routines. 45600 (line 1529) 45601* __fractunsqqqi: Fixed-point fractional library routines. 45602 (line 1528) 45603* __fractunsqqsi: Fixed-point fractional library routines. 45604 (line 1530) 45605* __fractunsqqti: Fixed-point fractional library routines. 45606 (line 1532) 45607* __fractunssadi: Fixed-point fractional library routines. 45608 (line 1557) 45609* __fractunssahi: Fixed-point fractional library routines. 45610 (line 1555) 45611* __fractunssaqi: Fixed-point fractional library routines. 45612 (line 1554) 45613* __fractunssasi: Fixed-point fractional library routines. 45614 (line 1556) 45615* __fractunssati: Fixed-point fractional library routines. 45616 (line 1558) 45617* __fractunssida: Fixed-point fractional library routines. 45618 (line 1692) 45619* __fractunssidq: Fixed-point fractional library routines. 45620 (line 1689) 45621* __fractunssiha: Fixed-point fractional library routines. 45622 (line 1690) 45623* __fractunssihq: Fixed-point fractional library routines. 45624 (line 1687) 45625* __fractunssiqq: Fixed-point fractional library routines. 45626 (line 1686) 45627* __fractunssisa: Fixed-point fractional library routines. 45628 (line 1691) 45629* __fractunssisq: Fixed-point fractional library routines. 45630 (line 1688) 45631* __fractunssita: Fixed-point fractional library routines. 45632 (line 1693) 45633* __fractunssiuda: Fixed-point fractional library routines. 45634 (line 1704) 45635* __fractunssiudq: Fixed-point fractional library routines. 45636 (line 1699) 45637* __fractunssiuha: Fixed-point fractional library routines. 45638 (line 1701) 45639* __fractunssiuhq: Fixed-point fractional library routines. 45640 (line 1696) 45641* __fractunssiuqq: Fixed-point fractional library routines. 45642 (line 1694) 45643* __fractunssiusa: Fixed-point fractional library routines. 45644 (line 1703) 45645* __fractunssiusq: Fixed-point fractional library routines. 45646 (line 1697) 45647* __fractunssiuta: Fixed-point fractional library routines. 45648 (line 1706) 45649* __fractunssqdi: Fixed-point fractional library routines. 45650 (line 1541) 45651* __fractunssqhi: Fixed-point fractional library routines. 45652 (line 1539) 45653* __fractunssqqi: Fixed-point fractional library routines. 45654 (line 1538) 45655* __fractunssqsi: Fixed-point fractional library routines. 45656 (line 1540) 45657* __fractunssqti: Fixed-point fractional library routines. 45658 (line 1542) 45659* __fractunstadi: Fixed-point fractional library routines. 45660 (line 1567) 45661* __fractunstahi: Fixed-point fractional library routines. 45662 (line 1565) 45663* __fractunstaqi: Fixed-point fractional library routines. 45664 (line 1564) 45665* __fractunstasi: Fixed-point fractional library routines. 45666 (line 1566) 45667* __fractunstati: Fixed-point fractional library routines. 45668 (line 1568) 45669* __fractunstida: Fixed-point fractional library routines. 45670 (line 1737) 45671* __fractunstidq: Fixed-point fractional library routines. 45672 (line 1733) 45673* __fractunstiha: Fixed-point fractional library routines. 45674 (line 1735) 45675* __fractunstihq: Fixed-point fractional library routines. 45676 (line 1731) 45677* __fractunstiqq: Fixed-point fractional library routines. 45678 (line 1730) 45679* __fractunstisa: Fixed-point fractional library routines. 45680 (line 1736) 45681* __fractunstisq: Fixed-point fractional library routines. 45682 (line 1732) 45683* __fractunstita: Fixed-point fractional library routines. 45684 (line 1738) 45685* __fractunstiuda: Fixed-point fractional library routines. 45686 (line 1752) 45687* __fractunstiudq: Fixed-point fractional library routines. 45688 (line 1746) 45689* __fractunstiuha: Fixed-point fractional library routines. 45690 (line 1748) 45691* __fractunstiuhq: Fixed-point fractional library routines. 45692 (line 1742) 45693* __fractunstiuqq: Fixed-point fractional library routines. 45694 (line 1740) 45695* __fractunstiusa: Fixed-point fractional library routines. 45696 (line 1750) 45697* __fractunstiusq: Fixed-point fractional library routines. 45698 (line 1744) 45699* __fractunstiuta: Fixed-point fractional library routines. 45700 (line 1754) 45701* __fractunsudadi: Fixed-point fractional library routines. 45702 (line 1628) 45703* __fractunsudahi: Fixed-point fractional library routines. 45704 (line 1624) 45705* __fractunsudaqi: Fixed-point fractional library routines. 45706 (line 1622) 45707* __fractunsudasi: Fixed-point fractional library routines. 45708 (line 1626) 45709* __fractunsudati: Fixed-point fractional library routines. 45710 (line 1630) 45711* __fractunsudqdi: Fixed-point fractional library routines. 45712 (line 1602) 45713* __fractunsudqhi: Fixed-point fractional library routines. 45714 (line 1598) 45715* __fractunsudqqi: Fixed-point fractional library routines. 45716 (line 1596) 45717* __fractunsudqsi: Fixed-point fractional library routines. 45718 (line 1600) 45719* __fractunsudqti: Fixed-point fractional library routines. 45720 (line 1604) 45721* __fractunsuhadi: Fixed-point fractional library routines. 45722 (line 1612) 45723* __fractunsuhahi: Fixed-point fractional library routines. 45724 (line 1608) 45725* __fractunsuhaqi: Fixed-point fractional library routines. 45726 (line 1606) 45727* __fractunsuhasi: Fixed-point fractional library routines. 45728 (line 1610) 45729* __fractunsuhati: Fixed-point fractional library routines. 45730 (line 1614) 45731* __fractunsuhqdi: Fixed-point fractional library routines. 45732 (line 1583) 45733* __fractunsuhqhi: Fixed-point fractional library routines. 45734 (line 1581) 45735* __fractunsuhqqi: Fixed-point fractional library routines. 45736 (line 1580) 45737* __fractunsuhqsi: Fixed-point fractional library routines. 45738 (line 1582) 45739* __fractunsuhqti: Fixed-point fractional library routines. 45740 (line 1584) 45741* __fractunsuqqdi: Fixed-point fractional library routines. 45742 (line 1576) 45743* __fractunsuqqhi: Fixed-point fractional library routines. 45744 (line 1572) 45745* __fractunsuqqqi: Fixed-point fractional library routines. 45746 (line 1570) 45747* __fractunsuqqsi: Fixed-point fractional library routines. 45748 (line 1574) 45749* __fractunsuqqti: Fixed-point fractional library routines. 45750 (line 1578) 45751* __fractunsusadi: Fixed-point fractional library routines. 45752 (line 1619) 45753* __fractunsusahi: Fixed-point fractional library routines. 45754 (line 1617) 45755* __fractunsusaqi: Fixed-point fractional library routines. 45756 (line 1616) 45757* __fractunsusasi: Fixed-point fractional library routines. 45758 (line 1618) 45759* __fractunsusati: Fixed-point fractional library routines. 45760 (line 1620) 45761* __fractunsusqdi: Fixed-point fractional library routines. 45762 (line 1592) 45763* __fractunsusqhi: Fixed-point fractional library routines. 45764 (line 1588) 45765* __fractunsusqqi: Fixed-point fractional library routines. 45766 (line 1586) 45767* __fractunsusqsi: Fixed-point fractional library routines. 45768 (line 1590) 45769* __fractunsusqti: Fixed-point fractional library routines. 45770 (line 1594) 45771* __fractunsutadi: Fixed-point fractional library routines. 45772 (line 1638) 45773* __fractunsutahi: Fixed-point fractional library routines. 45774 (line 1634) 45775* __fractunsutaqi: Fixed-point fractional library routines. 45776 (line 1632) 45777* __fractunsutasi: Fixed-point fractional library routines. 45778 (line 1636) 45779* __fractunsutati: Fixed-point fractional library routines. 45780 (line 1640) 45781* __fractuqqda: Fixed-point fractional library routines. 45782 (line 679) 45783* __fractuqqdf: Fixed-point fractional library routines. 45784 (line 702) 45785* __fractuqqdi: Fixed-point fractional library routines. 45786 (line 699) 45787* __fractuqqdq: Fixed-point fractional library routines. 45788 (line 675) 45789* __fractuqqha: Fixed-point fractional library routines. 45790 (line 677) 45791* __fractuqqhi: Fixed-point fractional library routines. 45792 (line 697) 45793* __fractuqqhq: Fixed-point fractional library routines. 45794 (line 673) 45795* __fractuqqqi: Fixed-point fractional library routines. 45796 (line 696) 45797* __fractuqqqq: Fixed-point fractional library routines. 45798 (line 672) 45799* __fractuqqsa: Fixed-point fractional library routines. 45800 (line 678) 45801* __fractuqqsf: Fixed-point fractional library routines. 45802 (line 701) 45803* __fractuqqsi: Fixed-point fractional library routines. 45804 (line 698) 45805* __fractuqqsq: Fixed-point fractional library routines. 45806 (line 674) 45807* __fractuqqta: Fixed-point fractional library routines. 45808 (line 680) 45809* __fractuqqti: Fixed-point fractional library routines. 45810 (line 700) 45811* __fractuqquda: Fixed-point fractional library routines. 45812 (line 692) 45813* __fractuqqudq2: Fixed-point fractional library routines. 45814 (line 686) 45815* __fractuqquha: Fixed-point fractional library routines. 45816 (line 688) 45817* __fractuqquhq2: Fixed-point fractional library routines. 45818 (line 682) 45819* __fractuqqusa: Fixed-point fractional library routines. 45820 (line 690) 45821* __fractuqqusq2: Fixed-point fractional library routines. 45822 (line 684) 45823* __fractuqquta: Fixed-point fractional library routines. 45824 (line 694) 45825* __fractusada: Fixed-point fractional library routines. 45826 (line 836) 45827* __fractusadf: Fixed-point fractional library routines. 45828 (line 857) 45829* __fractusadi: Fixed-point fractional library routines. 45830 (line 854) 45831* __fractusadq: Fixed-point fractional library routines. 45832 (line 833) 45833* __fractusaha: Fixed-point fractional library routines. 45834 (line 834) 45835* __fractusahi: Fixed-point fractional library routines. 45836 (line 852) 45837* __fractusahq: Fixed-point fractional library routines. 45838 (line 831) 45839* __fractusaqi: Fixed-point fractional library routines. 45840 (line 851) 45841* __fractusaqq: Fixed-point fractional library routines. 45842 (line 830) 45843* __fractusasa: Fixed-point fractional library routines. 45844 (line 835) 45845* __fractusasf: Fixed-point fractional library routines. 45846 (line 856) 45847* __fractusasi: Fixed-point fractional library routines. 45848 (line 853) 45849* __fractusasq: Fixed-point fractional library routines. 45850 (line 832) 45851* __fractusata: Fixed-point fractional library routines. 45852 (line 837) 45853* __fractusati: Fixed-point fractional library routines. 45854 (line 855) 45855* __fractusauda2: Fixed-point fractional library routines. 45856 (line 847) 45857* __fractusaudq: Fixed-point fractional library routines. 45858 (line 843) 45859* __fractusauha2: Fixed-point fractional library routines. 45860 (line 845) 45861* __fractusauhq: Fixed-point fractional library routines. 45862 (line 840) 45863* __fractusauqq: Fixed-point fractional library routines. 45864 (line 838) 45865* __fractusausq: Fixed-point fractional library routines. 45866 (line 841) 45867* __fractusauta2: Fixed-point fractional library routines. 45868 (line 849) 45869* __fractusqda: Fixed-point fractional library routines. 45870 (line 738) 45871* __fractusqdf: Fixed-point fractional library routines. 45872 (line 761) 45873* __fractusqdi: Fixed-point fractional library routines. 45874 (line 758) 45875* __fractusqdq: Fixed-point fractional library routines. 45876 (line 734) 45877* __fractusqha: Fixed-point fractional library routines. 45878 (line 736) 45879* __fractusqhi: Fixed-point fractional library routines. 45880 (line 756) 45881* __fractusqhq: Fixed-point fractional library routines. 45882 (line 732) 45883* __fractusqqi: Fixed-point fractional library routines. 45884 (line 755) 45885* __fractusqqq: Fixed-point fractional library routines. 45886 (line 731) 45887* __fractusqsa: Fixed-point fractional library routines. 45888 (line 737) 45889* __fractusqsf: Fixed-point fractional library routines. 45890 (line 760) 45891* __fractusqsi: Fixed-point fractional library routines. 45892 (line 757) 45893* __fractusqsq: Fixed-point fractional library routines. 45894 (line 733) 45895* __fractusqta: Fixed-point fractional library routines. 45896 (line 739) 45897* __fractusqti: Fixed-point fractional library routines. 45898 (line 759) 45899* __fractusquda: Fixed-point fractional library routines. 45900 (line 751) 45901* __fractusqudq2: Fixed-point fractional library routines. 45902 (line 745) 45903* __fractusquha: Fixed-point fractional library routines. 45904 (line 747) 45905* __fractusquhq2: Fixed-point fractional library routines. 45906 (line 743) 45907* __fractusquqq2: Fixed-point fractional library routines. 45908 (line 741) 45909* __fractusqusa: Fixed-point fractional library routines. 45910 (line 749) 45911* __fractusquta: Fixed-point fractional library routines. 45912 (line 753) 45913* __fractutada: Fixed-point fractional library routines. 45914 (line 899) 45915* __fractutadf: Fixed-point fractional library routines. 45916 (line 925) 45917* __fractutadi: Fixed-point fractional library routines. 45918 (line 921) 45919* __fractutadq: Fixed-point fractional library routines. 45920 (line 894) 45921* __fractutaha: Fixed-point fractional library routines. 45922 (line 896) 45923* __fractutahi: Fixed-point fractional library routines. 45924 (line 919) 45925* __fractutahq: Fixed-point fractional library routines. 45926 (line 891) 45927* __fractutaqi: Fixed-point fractional library routines. 45928 (line 917) 45929* __fractutaqq: Fixed-point fractional library routines. 45930 (line 889) 45931* __fractutasa: Fixed-point fractional library routines. 45932 (line 898) 45933* __fractutasf: Fixed-point fractional library routines. 45934 (line 924) 45935* __fractutasi: Fixed-point fractional library routines. 45936 (line 920) 45937* __fractutasq: Fixed-point fractional library routines. 45938 (line 892) 45939* __fractutata: Fixed-point fractional library routines. 45940 (line 901) 45941* __fractutati: Fixed-point fractional library routines. 45942 (line 922) 45943* __fractutauda2: Fixed-point fractional library routines. 45944 (line 915) 45945* __fractutaudq: Fixed-point fractional library routines. 45946 (line 909) 45947* __fractutauha2: Fixed-point fractional library routines. 45948 (line 911) 45949* __fractutauhq: Fixed-point fractional library routines. 45950 (line 905) 45951* __fractutauqq: Fixed-point fractional library routines. 45952 (line 903) 45953* __fractutausa2: Fixed-point fractional library routines. 45954 (line 913) 45955* __fractutausq: Fixed-point fractional library routines. 45956 (line 907) 45957* __gedf2: Soft float library routines. 45958 (line 205) 45959* __gesf2: Soft float library routines. 45960 (line 204) 45961* __getf2: Soft float library routines. 45962 (line 206) 45963* __gtdf2: Soft float library routines. 45964 (line 223) 45965* __gtsf2: Soft float library routines. 45966 (line 222) 45967* __gttf2: Soft float library routines. 45968 (line 224) 45969* __ledf2: Soft float library routines. 45970 (line 217) 45971* __lesf2: Soft float library routines. 45972 (line 216) 45973* __letf2: Soft float library routines. 45974 (line 218) 45975* __lshrdi3: Integer library routines. 45976 (line 30) 45977* __lshrsi3: Integer library routines. 45978 (line 29) 45979* __lshrti3: Integer library routines. 45980 (line 31) 45981* __lshruda3: Fixed-point fractional library routines. 45982 (line 396) 45983* __lshrudq3: Fixed-point fractional library routines. 45984 (line 390) 45985* __lshruha3: Fixed-point fractional library routines. 45986 (line 392) 45987* __lshruhq3: Fixed-point fractional library routines. 45988 (line 386) 45989* __lshruqq3: Fixed-point fractional library routines. 45990 (line 384) 45991* __lshrusa3: Fixed-point fractional library routines. 45992 (line 394) 45993* __lshrusq3: Fixed-point fractional library routines. 45994 (line 388) 45995* __lshruta3: Fixed-point fractional library routines. 45996 (line 398) 45997* __ltdf2: Soft float library routines. 45998 (line 211) 45999* __ltsf2: Soft float library routines. 46000 (line 210) 46001* __lttf2: Soft float library routines. 46002 (line 212) 46003* __main: Collect2. (line 15) 46004* __moddi3: Integer library routines. 46005 (line 36) 46006* __modsi3: Integer library routines. 46007 (line 35) 46008* __modti3: Integer library routines. 46009 (line 37) 46010* __morestack_current_segment: Miscellaneous routines. 46011 (line 45) 46012* __morestack_initial_sp: Miscellaneous routines. 46013 (line 46) 46014* __morestack_segments: Miscellaneous routines. 46015 (line 44) 46016* __mulda3: Fixed-point fractional library routines. 46017 (line 178) 46018* __muldc3: Soft float library routines. 46019 (line 239) 46020* __muldf3: Soft float library routines. 46021 (line 39) 46022* __muldi3: Integer library routines. 46023 (line 42) 46024* __muldq3: Fixed-point fractional library routines. 46025 (line 165) 46026* __mulha3: Fixed-point fractional library routines. 46027 (line 175) 46028* __mulhq3: Fixed-point fractional library routines. 46029 (line 163) 46030* __mulqq3: Fixed-point fractional library routines. 46031 (line 161) 46032* __mulsa3: Fixed-point fractional library routines. 46033 (line 177) 46034* __mulsc3: Soft float library routines. 46035 (line 237) 46036* __mulsf3: Soft float library routines. 46037 (line 38) 46038* __mulsi3: Integer library routines. 46039 (line 41) 46040* __mulsq3: Fixed-point fractional library routines. 46041 (line 164) 46042* __multa3: Fixed-point fractional library routines. 46043 (line 179) 46044* __multc3: Soft float library routines. 46045 (line 241) 46046* __multf3: Soft float library routines. 46047 (line 40) 46048* __multi3: Integer library routines. 46049 (line 43) 46050* __muluda3: Fixed-point fractional library routines. 46051 (line 185) 46052* __muludq3: Fixed-point fractional library routines. 46053 (line 173) 46054* __muluha3: Fixed-point fractional library routines. 46055 (line 181) 46056* __muluhq3: Fixed-point fractional library routines. 46057 (line 169) 46058* __muluqq3: Fixed-point fractional library routines. 46059 (line 167) 46060* __mulusa3: Fixed-point fractional library routines. 46061 (line 183) 46062* __mulusq3: Fixed-point fractional library routines. 46063 (line 171) 46064* __muluta3: Fixed-point fractional library routines. 46065 (line 187) 46066* __mulvdi3: Integer library routines. 46067 (line 114) 46068* __mulvsi3: Integer library routines. 46069 (line 113) 46070* __mulxc3: Soft float library routines. 46071 (line 243) 46072* __mulxf3: Soft float library routines. 46073 (line 42) 46074* __nedf2: Soft float library routines. 46075 (line 199) 46076* __negda2: Fixed-point fractional library routines. 46077 (line 306) 46078* __negdf2: Soft float library routines. 46079 (line 55) 46080* __negdi2: Integer library routines. 46081 (line 46) 46082* __negdq2: Fixed-point fractional library routines. 46083 (line 296) 46084* __negha2: Fixed-point fractional library routines. 46085 (line 304) 46086* __neghq2: Fixed-point fractional library routines. 46087 (line 294) 46088* __negqq2: Fixed-point fractional library routines. 46089 (line 293) 46090* __negsa2: Fixed-point fractional library routines. 46091 (line 305) 46092* __negsf2: Soft float library routines. 46093 (line 54) 46094* __negsq2: Fixed-point fractional library routines. 46095 (line 295) 46096* __negta2: Fixed-point fractional library routines. 46097 (line 307) 46098* __negtf2: Soft float library routines. 46099 (line 56) 46100* __negti2: Integer library routines. 46101 (line 47) 46102* __neguda2: Fixed-point fractional library routines. 46103 (line 311) 46104* __negudq2: Fixed-point fractional library routines. 46105 (line 302) 46106* __neguha2: Fixed-point fractional library routines. 46107 (line 308) 46108* __neguhq2: Fixed-point fractional library routines. 46109 (line 299) 46110* __neguqq2: Fixed-point fractional library routines. 46111 (line 297) 46112* __negusa2: Fixed-point fractional library routines. 46113 (line 310) 46114* __negusq2: Fixed-point fractional library routines. 46115 (line 300) 46116* __neguta2: Fixed-point fractional library routines. 46117 (line 313) 46118* __negvdi2: Integer library routines. 46119 (line 118) 46120* __negvsi2: Integer library routines. 46121 (line 117) 46122* __negxf2: Soft float library routines. 46123 (line 57) 46124* __nesf2: Soft float library routines. 46125 (line 198) 46126* __netf2: Soft float library routines. 46127 (line 200) 46128* __paritydi2: Integer library routines. 46129 (line 150) 46130* __paritysi2: Integer library routines. 46131 (line 149) 46132* __parityti2: Integer library routines. 46133 (line 151) 46134* __popcountdi2: Integer library routines. 46135 (line 156) 46136* __popcountsi2: Integer library routines. 46137 (line 155) 46138* __popcountti2: Integer library routines. 46139 (line 157) 46140* __powidf2: Soft float library routines. 46141 (line 232) 46142* __powisf2: Soft float library routines. 46143 (line 231) 46144* __powitf2: Soft float library routines. 46145 (line 233) 46146* __powixf2: Soft float library routines. 46147 (line 234) 46148* __satfractdadq: Fixed-point fractional library routines. 46149 (line 1160) 46150* __satfractdaha2: Fixed-point fractional library routines. 46151 (line 1161) 46152* __satfractdahq: Fixed-point fractional library routines. 46153 (line 1158) 46154* __satfractdaqq: Fixed-point fractional library routines. 46155 (line 1157) 46156* __satfractdasa2: Fixed-point fractional library routines. 46157 (line 1162) 46158* __satfractdasq: Fixed-point fractional library routines. 46159 (line 1159) 46160* __satfractdata2: Fixed-point fractional library routines. 46161 (line 1163) 46162* __satfractdauda: Fixed-point fractional library routines. 46163 (line 1173) 46164* __satfractdaudq: Fixed-point fractional library routines. 46165 (line 1168) 46166* __satfractdauha: Fixed-point fractional library routines. 46167 (line 1170) 46168* __satfractdauhq: Fixed-point fractional library routines. 46169 (line 1166) 46170* __satfractdauqq: Fixed-point fractional library routines. 46171 (line 1164) 46172* __satfractdausa: Fixed-point fractional library routines. 46173 (line 1172) 46174* __satfractdausq: Fixed-point fractional library routines. 46175 (line 1167) 46176* __satfractdauta: Fixed-point fractional library routines. 46177 (line 1174) 46178* __satfractdfda: Fixed-point fractional library routines. 46179 (line 1513) 46180* __satfractdfdq: Fixed-point fractional library routines. 46181 (line 1510) 46182* __satfractdfha: Fixed-point fractional library routines. 46183 (line 1511) 46184* __satfractdfhq: Fixed-point fractional library routines. 46185 (line 1508) 46186* __satfractdfqq: Fixed-point fractional library routines. 46187 (line 1507) 46188* __satfractdfsa: Fixed-point fractional library routines. 46189 (line 1512) 46190* __satfractdfsq: Fixed-point fractional library routines. 46191 (line 1509) 46192* __satfractdfta: Fixed-point fractional library routines. 46193 (line 1514) 46194* __satfractdfuda: Fixed-point fractional library routines. 46195 (line 1522) 46196* __satfractdfudq: Fixed-point fractional library routines. 46197 (line 1518) 46198* __satfractdfuha: Fixed-point fractional library routines. 46199 (line 1520) 46200* __satfractdfuhq: Fixed-point fractional library routines. 46201 (line 1516) 46202* __satfractdfuqq: Fixed-point fractional library routines. 46203 (line 1515) 46204* __satfractdfusa: Fixed-point fractional library routines. 46205 (line 1521) 46206* __satfractdfusq: Fixed-point fractional library routines. 46207 (line 1517) 46208* __satfractdfuta: Fixed-point fractional library routines. 46209 (line 1523) 46210* __satfractdida: Fixed-point fractional library routines. 46211 (line 1463) 46212* __satfractdidq: Fixed-point fractional library routines. 46213 (line 1460) 46214* __satfractdiha: Fixed-point fractional library routines. 46215 (line 1461) 46216* __satfractdihq: Fixed-point fractional library routines. 46217 (line 1458) 46218* __satfractdiqq: Fixed-point fractional library routines. 46219 (line 1457) 46220* __satfractdisa: Fixed-point fractional library routines. 46221 (line 1462) 46222* __satfractdisq: Fixed-point fractional library routines. 46223 (line 1459) 46224* __satfractdita: Fixed-point fractional library routines. 46225 (line 1464) 46226* __satfractdiuda: Fixed-point fractional library routines. 46227 (line 1471) 46228* __satfractdiudq: Fixed-point fractional library routines. 46229 (line 1468) 46230* __satfractdiuha: Fixed-point fractional library routines. 46231 (line 1469) 46232* __satfractdiuhq: Fixed-point fractional library routines. 46233 (line 1466) 46234* __satfractdiuqq: Fixed-point fractional library routines. 46235 (line 1465) 46236* __satfractdiusa: Fixed-point fractional library routines. 46237 (line 1470) 46238* __satfractdiusq: Fixed-point fractional library routines. 46239 (line 1467) 46240* __satfractdiuta: Fixed-point fractional library routines. 46241 (line 1472) 46242* __satfractdqda: Fixed-point fractional library routines. 46243 (line 1105) 46244* __satfractdqha: Fixed-point fractional library routines. 46245 (line 1103) 46246* __satfractdqhq2: Fixed-point fractional library routines. 46247 (line 1101) 46248* __satfractdqqq2: Fixed-point fractional library routines. 46249 (line 1100) 46250* __satfractdqsa: Fixed-point fractional library routines. 46251 (line 1104) 46252* __satfractdqsq2: Fixed-point fractional library routines. 46253 (line 1102) 46254* __satfractdqta: Fixed-point fractional library routines. 46255 (line 1106) 46256* __satfractdquda: Fixed-point fractional library routines. 46257 (line 1117) 46258* __satfractdqudq: Fixed-point fractional library routines. 46259 (line 1112) 46260* __satfractdquha: Fixed-point fractional library routines. 46261 (line 1114) 46262* __satfractdquhq: Fixed-point fractional library routines. 46263 (line 1109) 46264* __satfractdquqq: Fixed-point fractional library routines. 46265 (line 1107) 46266* __satfractdqusa: Fixed-point fractional library routines. 46267 (line 1116) 46268* __satfractdqusq: Fixed-point fractional library routines. 46269 (line 1110) 46270* __satfractdquta: Fixed-point fractional library routines. 46271 (line 1119) 46272* __satfracthada2: Fixed-point fractional library routines. 46273 (line 1126) 46274* __satfracthadq: Fixed-point fractional library routines. 46275 (line 1124) 46276* __satfracthahq: Fixed-point fractional library routines. 46277 (line 1122) 46278* __satfracthaqq: Fixed-point fractional library routines. 46279 (line 1121) 46280* __satfracthasa2: Fixed-point fractional library routines. 46281 (line 1125) 46282* __satfracthasq: Fixed-point fractional library routines. 46283 (line 1123) 46284* __satfracthata2: Fixed-point fractional library routines. 46285 (line 1127) 46286* __satfracthauda: Fixed-point fractional library routines. 46287 (line 1138) 46288* __satfracthaudq: Fixed-point fractional library routines. 46289 (line 1133) 46290* __satfracthauha: Fixed-point fractional library routines. 46291 (line 1135) 46292* __satfracthauhq: Fixed-point fractional library routines. 46293 (line 1130) 46294* __satfracthauqq: Fixed-point fractional library routines. 46295 (line 1128) 46296* __satfracthausa: Fixed-point fractional library routines. 46297 (line 1137) 46298* __satfracthausq: Fixed-point fractional library routines. 46299 (line 1131) 46300* __satfracthauta: Fixed-point fractional library routines. 46301 (line 1140) 46302* __satfracthida: Fixed-point fractional library routines. 46303 (line 1431) 46304* __satfracthidq: Fixed-point fractional library routines. 46305 (line 1428) 46306* __satfracthiha: Fixed-point fractional library routines. 46307 (line 1429) 46308* __satfracthihq: Fixed-point fractional library routines. 46309 (line 1426) 46310* __satfracthiqq: Fixed-point fractional library routines. 46311 (line 1425) 46312* __satfracthisa: Fixed-point fractional library routines. 46313 (line 1430) 46314* __satfracthisq: Fixed-point fractional library routines. 46315 (line 1427) 46316* __satfracthita: Fixed-point fractional library routines. 46317 (line 1432) 46318* __satfracthiuda: Fixed-point fractional library routines. 46319 (line 1439) 46320* __satfracthiudq: Fixed-point fractional library routines. 46321 (line 1436) 46322* __satfracthiuha: Fixed-point fractional library routines. 46323 (line 1437) 46324* __satfracthiuhq: Fixed-point fractional library routines. 46325 (line 1434) 46326* __satfracthiuqq: Fixed-point fractional library routines. 46327 (line 1433) 46328* __satfracthiusa: Fixed-point fractional library routines. 46329 (line 1438) 46330* __satfracthiusq: Fixed-point fractional library routines. 46331 (line 1435) 46332* __satfracthiuta: Fixed-point fractional library routines. 46333 (line 1440) 46334* __satfracthqda: Fixed-point fractional library routines. 46335 (line 1071) 46336* __satfracthqdq2: Fixed-point fractional library routines. 46337 (line 1068) 46338* __satfracthqha: Fixed-point fractional library routines. 46339 (line 1069) 46340* __satfracthqqq2: Fixed-point fractional library routines. 46341 (line 1066) 46342* __satfracthqsa: Fixed-point fractional library routines. 46343 (line 1070) 46344* __satfracthqsq2: Fixed-point fractional library routines. 46345 (line 1067) 46346* __satfracthqta: Fixed-point fractional library routines. 46347 (line 1072) 46348* __satfracthquda: Fixed-point fractional library routines. 46349 (line 1079) 46350* __satfracthqudq: Fixed-point fractional library routines. 46351 (line 1076) 46352* __satfracthquha: Fixed-point fractional library routines. 46353 (line 1077) 46354* __satfracthquhq: Fixed-point fractional library routines. 46355 (line 1074) 46356* __satfracthquqq: Fixed-point fractional library routines. 46357 (line 1073) 46358* __satfracthqusa: Fixed-point fractional library routines. 46359 (line 1078) 46360* __satfracthqusq: Fixed-point fractional library routines. 46361 (line 1075) 46362* __satfracthquta: Fixed-point fractional library routines. 46363 (line 1080) 46364* __satfractqida: Fixed-point fractional library routines. 46365 (line 1409) 46366* __satfractqidq: Fixed-point fractional library routines. 46367 (line 1406) 46368* __satfractqiha: Fixed-point fractional library routines. 46369 (line 1407) 46370* __satfractqihq: Fixed-point fractional library routines. 46371 (line 1404) 46372* __satfractqiqq: Fixed-point fractional library routines. 46373 (line 1403) 46374* __satfractqisa: Fixed-point fractional library routines. 46375 (line 1408) 46376* __satfractqisq: Fixed-point fractional library routines. 46377 (line 1405) 46378* __satfractqita: Fixed-point fractional library routines. 46379 (line 1410) 46380* __satfractqiuda: Fixed-point fractional library routines. 46381 (line 1421) 46382* __satfractqiudq: Fixed-point fractional library routines. 46383 (line 1416) 46384* __satfractqiuha: Fixed-point fractional library routines. 46385 (line 1418) 46386* __satfractqiuhq: Fixed-point fractional library routines. 46387 (line 1413) 46388* __satfractqiuqq: Fixed-point fractional library routines. 46389 (line 1411) 46390* __satfractqiusa: Fixed-point fractional library routines. 46391 (line 1420) 46392* __satfractqiusq: Fixed-point fractional library routines. 46393 (line 1414) 46394* __satfractqiuta: Fixed-point fractional library routines. 46395 (line 1423) 46396* __satfractqqda: Fixed-point fractional library routines. 46397 (line 1050) 46398* __satfractqqdq2: Fixed-point fractional library routines. 46399 (line 1047) 46400* __satfractqqha: Fixed-point fractional library routines. 46401 (line 1048) 46402* __satfractqqhq2: Fixed-point fractional library routines. 46403 (line 1045) 46404* __satfractqqsa: Fixed-point fractional library routines. 46405 (line 1049) 46406* __satfractqqsq2: Fixed-point fractional library routines. 46407 (line 1046) 46408* __satfractqqta: Fixed-point fractional library routines. 46409 (line 1051) 46410* __satfractqquda: Fixed-point fractional library routines. 46411 (line 1062) 46412* __satfractqqudq: Fixed-point fractional library routines. 46413 (line 1057) 46414* __satfractqquha: Fixed-point fractional library routines. 46415 (line 1059) 46416* __satfractqquhq: Fixed-point fractional library routines. 46417 (line 1054) 46418* __satfractqquqq: Fixed-point fractional library routines. 46419 (line 1052) 46420* __satfractqqusa: Fixed-point fractional library routines. 46421 (line 1061) 46422* __satfractqqusq: Fixed-point fractional library routines. 46423 (line 1055) 46424* __satfractqquta: Fixed-point fractional library routines. 46425 (line 1064) 46426* __satfractsada2: Fixed-point fractional library routines. 46427 (line 1147) 46428* __satfractsadq: Fixed-point fractional library routines. 46429 (line 1145) 46430* __satfractsaha2: Fixed-point fractional library routines. 46431 (line 1146) 46432* __satfractsahq: Fixed-point fractional library routines. 46433 (line 1143) 46434* __satfractsaqq: Fixed-point fractional library routines. 46435 (line 1142) 46436* __satfractsasq: Fixed-point fractional library routines. 46437 (line 1144) 46438* __satfractsata2: Fixed-point fractional library routines. 46439 (line 1148) 46440* __satfractsauda: Fixed-point fractional library routines. 46441 (line 1155) 46442* __satfractsaudq: Fixed-point fractional library routines. 46443 (line 1152) 46444* __satfractsauha: Fixed-point fractional library routines. 46445 (line 1153) 46446* __satfractsauhq: Fixed-point fractional library routines. 46447 (line 1150) 46448* __satfractsauqq: Fixed-point fractional library routines. 46449 (line 1149) 46450* __satfractsausa: Fixed-point fractional library routines. 46451 (line 1154) 46452* __satfractsausq: Fixed-point fractional library routines. 46453 (line 1151) 46454* __satfractsauta: Fixed-point fractional library routines. 46455 (line 1156) 46456* __satfractsfda: Fixed-point fractional library routines. 46457 (line 1497) 46458* __satfractsfdq: Fixed-point fractional library routines. 46459 (line 1494) 46460* __satfractsfha: Fixed-point fractional library routines. 46461 (line 1495) 46462* __satfractsfhq: Fixed-point fractional library routines. 46463 (line 1492) 46464* __satfractsfqq: Fixed-point fractional library routines. 46465 (line 1491) 46466* __satfractsfsa: Fixed-point fractional library routines. 46467 (line 1496) 46468* __satfractsfsq: Fixed-point fractional library routines. 46469 (line 1493) 46470* __satfractsfta: Fixed-point fractional library routines. 46471 (line 1498) 46472* __satfractsfuda: Fixed-point fractional library routines. 46473 (line 1505) 46474* __satfractsfudq: Fixed-point fractional library routines. 46475 (line 1502) 46476* __satfractsfuha: Fixed-point fractional library routines. 46477 (line 1503) 46478* __satfractsfuhq: Fixed-point fractional library routines. 46479 (line 1500) 46480* __satfractsfuqq: Fixed-point fractional library routines. 46481 (line 1499) 46482* __satfractsfusa: Fixed-point fractional library routines. 46483 (line 1504) 46484* __satfractsfusq: Fixed-point fractional library routines. 46485 (line 1501) 46486* __satfractsfuta: Fixed-point fractional library routines. 46487 (line 1506) 46488* __satfractsida: Fixed-point fractional library routines. 46489 (line 1447) 46490* __satfractsidq: Fixed-point fractional library routines. 46491 (line 1444) 46492* __satfractsiha: Fixed-point fractional library routines. 46493 (line 1445) 46494* __satfractsihq: Fixed-point fractional library routines. 46495 (line 1442) 46496* __satfractsiqq: Fixed-point fractional library routines. 46497 (line 1441) 46498* __satfractsisa: Fixed-point fractional library routines. 46499 (line 1446) 46500* __satfractsisq: Fixed-point fractional library routines. 46501 (line 1443) 46502* __satfractsita: Fixed-point fractional library routines. 46503 (line 1448) 46504* __satfractsiuda: Fixed-point fractional library routines. 46505 (line 1455) 46506* __satfractsiudq: Fixed-point fractional library routines. 46507 (line 1452) 46508* __satfractsiuha: Fixed-point fractional library routines. 46509 (line 1453) 46510* __satfractsiuhq: Fixed-point fractional library routines. 46511 (line 1450) 46512* __satfractsiuqq: Fixed-point fractional library routines. 46513 (line 1449) 46514* __satfractsiusa: Fixed-point fractional library routines. 46515 (line 1454) 46516* __satfractsiusq: Fixed-point fractional library routines. 46517 (line 1451) 46518* __satfractsiuta: Fixed-point fractional library routines. 46519 (line 1456) 46520* __satfractsqda: Fixed-point fractional library routines. 46521 (line 1086) 46522* __satfractsqdq2: Fixed-point fractional library routines. 46523 (line 1083) 46524* __satfractsqha: Fixed-point fractional library routines. 46525 (line 1084) 46526* __satfractsqhq2: Fixed-point fractional library routines. 46527 (line 1082) 46528* __satfractsqqq2: Fixed-point fractional library routines. 46529 (line 1081) 46530* __satfractsqsa: Fixed-point fractional library routines. 46531 (line 1085) 46532* __satfractsqta: Fixed-point fractional library routines. 46533 (line 1087) 46534* __satfractsquda: Fixed-point fractional library routines. 46535 (line 1097) 46536* __satfractsqudq: Fixed-point fractional library routines. 46537 (line 1092) 46538* __satfractsquha: Fixed-point fractional library routines. 46539 (line 1094) 46540* __satfractsquhq: Fixed-point fractional library routines. 46541 (line 1090) 46542* __satfractsquqq: Fixed-point fractional library routines. 46543 (line 1088) 46544* __satfractsqusa: Fixed-point fractional library routines. 46545 (line 1096) 46546* __satfractsqusq: Fixed-point fractional library routines. 46547 (line 1091) 46548* __satfractsquta: Fixed-point fractional library routines. 46549 (line 1098) 46550* __satfracttada2: Fixed-point fractional library routines. 46551 (line 1182) 46552* __satfracttadq: Fixed-point fractional library routines. 46553 (line 1179) 46554* __satfracttaha2: Fixed-point fractional library routines. 46555 (line 1180) 46556* __satfracttahq: Fixed-point fractional library routines. 46557 (line 1177) 46558* __satfracttaqq: Fixed-point fractional library routines. 46559 (line 1176) 46560* __satfracttasa2: Fixed-point fractional library routines. 46561 (line 1181) 46562* __satfracttasq: Fixed-point fractional library routines. 46563 (line 1178) 46564* __satfracttauda: Fixed-point fractional library routines. 46565 (line 1193) 46566* __satfracttaudq: Fixed-point fractional library routines. 46567 (line 1188) 46568* __satfracttauha: Fixed-point fractional library routines. 46569 (line 1190) 46570* __satfracttauhq: Fixed-point fractional library routines. 46571 (line 1185) 46572* __satfracttauqq: Fixed-point fractional library routines. 46573 (line 1183) 46574* __satfracttausa: Fixed-point fractional library routines. 46575 (line 1192) 46576* __satfracttausq: Fixed-point fractional library routines. 46577 (line 1186) 46578* __satfracttauta: Fixed-point fractional library routines. 46579 (line 1195) 46580* __satfracttida: Fixed-point fractional library routines. 46581 (line 1479) 46582* __satfracttidq: Fixed-point fractional library routines. 46583 (line 1476) 46584* __satfracttiha: Fixed-point fractional library routines. 46585 (line 1477) 46586* __satfracttihq: Fixed-point fractional library routines. 46587 (line 1474) 46588* __satfracttiqq: Fixed-point fractional library routines. 46589 (line 1473) 46590* __satfracttisa: Fixed-point fractional library routines. 46591 (line 1478) 46592* __satfracttisq: Fixed-point fractional library routines. 46593 (line 1475) 46594* __satfracttita: Fixed-point fractional library routines. 46595 (line 1480) 46596* __satfracttiuda: Fixed-point fractional library routines. 46597 (line 1488) 46598* __satfracttiudq: Fixed-point fractional library routines. 46599 (line 1484) 46600* __satfracttiuha: Fixed-point fractional library routines. 46601 (line 1486) 46602* __satfracttiuhq: Fixed-point fractional library routines. 46603 (line 1482) 46604* __satfracttiuqq: Fixed-point fractional library routines. 46605 (line 1481) 46606* __satfracttiusa: Fixed-point fractional library routines. 46607 (line 1487) 46608* __satfracttiusq: Fixed-point fractional library routines. 46609 (line 1483) 46610* __satfracttiuta: Fixed-point fractional library routines. 46611 (line 1489) 46612* __satfractudada: Fixed-point fractional library routines. 46613 (line 1358) 46614* __satfractudadq: Fixed-point fractional library routines. 46615 (line 1353) 46616* __satfractudaha: Fixed-point fractional library routines. 46617 (line 1355) 46618* __satfractudahq: Fixed-point fractional library routines. 46619 (line 1351) 46620* __satfractudaqq: Fixed-point fractional library routines. 46621 (line 1349) 46622* __satfractudasa: Fixed-point fractional library routines. 46623 (line 1357) 46624* __satfractudasq: Fixed-point fractional library routines. 46625 (line 1352) 46626* __satfractudata: Fixed-point fractional library routines. 46627 (line 1359) 46628* __satfractudaudq: Fixed-point fractional library routines. 46629 (line 1367) 46630* __satfractudauha2: Fixed-point fractional library routines. 46631 (line 1369) 46632* __satfractudauhq: Fixed-point fractional library routines. 46633 (line 1363) 46634* __satfractudauqq: Fixed-point fractional library routines. 46635 (line 1361) 46636* __satfractudausa2: Fixed-point fractional library routines. 46637 (line 1371) 46638* __satfractudausq: Fixed-point fractional library routines. 46639 (line 1365) 46640* __satfractudauta2: Fixed-point fractional library routines. 46641 (line 1373) 46642* __satfractudqda: Fixed-point fractional library routines. 46643 (line 1282) 46644* __satfractudqdq: Fixed-point fractional library routines. 46645 (line 1277) 46646* __satfractudqha: Fixed-point fractional library routines. 46647 (line 1279) 46648* __satfractudqhq: Fixed-point fractional library routines. 46649 (line 1274) 46650* __satfractudqqq: Fixed-point fractional library routines. 46651 (line 1272) 46652* __satfractudqsa: Fixed-point fractional library routines. 46653 (line 1281) 46654* __satfractudqsq: Fixed-point fractional library routines. 46655 (line 1275) 46656* __satfractudqta: Fixed-point fractional library routines. 46657 (line 1284) 46658* __satfractudquda: Fixed-point fractional library routines. 46659 (line 1296) 46660* __satfractudquha: Fixed-point fractional library routines. 46661 (line 1292) 46662* __satfractudquhq2: Fixed-point fractional library routines. 46663 (line 1288) 46664* __satfractudquqq2: Fixed-point fractional library routines. 46665 (line 1286) 46666* __satfractudqusa: Fixed-point fractional library routines. 46667 (line 1294) 46668* __satfractudqusq2: Fixed-point fractional library routines. 46669 (line 1290) 46670* __satfractudquta: Fixed-point fractional library routines. 46671 (line 1298) 46672* __satfractuhada: Fixed-point fractional library routines. 46673 (line 1310) 46674* __satfractuhadq: Fixed-point fractional library routines. 46675 (line 1305) 46676* __satfractuhaha: Fixed-point fractional library routines. 46677 (line 1307) 46678* __satfractuhahq: Fixed-point fractional library routines. 46679 (line 1302) 46680* __satfractuhaqq: Fixed-point fractional library routines. 46681 (line 1300) 46682* __satfractuhasa: Fixed-point fractional library routines. 46683 (line 1309) 46684* __satfractuhasq: Fixed-point fractional library routines. 46685 (line 1303) 46686* __satfractuhata: Fixed-point fractional library routines. 46687 (line 1312) 46688* __satfractuhauda2: Fixed-point fractional library routines. 46689 (line 1324) 46690* __satfractuhaudq: Fixed-point fractional library routines. 46691 (line 1320) 46692* __satfractuhauhq: Fixed-point fractional library routines. 46693 (line 1316) 46694* __satfractuhauqq: Fixed-point fractional library routines. 46695 (line 1314) 46696* __satfractuhausa2: Fixed-point fractional library routines. 46697 (line 1322) 46698* __satfractuhausq: Fixed-point fractional library routines. 46699 (line 1318) 46700* __satfractuhauta2: Fixed-point fractional library routines. 46701 (line 1326) 46702* __satfractuhqda: Fixed-point fractional library routines. 46703 (line 1231) 46704* __satfractuhqdq: Fixed-point fractional library routines. 46705 (line 1228) 46706* __satfractuhqha: Fixed-point fractional library routines. 46707 (line 1229) 46708* __satfractuhqhq: Fixed-point fractional library routines. 46709 (line 1226) 46710* __satfractuhqqq: Fixed-point fractional library routines. 46711 (line 1225) 46712* __satfractuhqsa: Fixed-point fractional library routines. 46713 (line 1230) 46714* __satfractuhqsq: Fixed-point fractional library routines. 46715 (line 1227) 46716* __satfractuhqta: Fixed-point fractional library routines. 46717 (line 1232) 46718* __satfractuhquda: Fixed-point fractional library routines. 46719 (line 1242) 46720* __satfractuhqudq2: Fixed-point fractional library routines. 46721 (line 1237) 46722* __satfractuhquha: Fixed-point fractional library routines. 46723 (line 1239) 46724* __satfractuhquqq2: Fixed-point fractional library routines. 46725 (line 1233) 46726* __satfractuhqusa: Fixed-point fractional library routines. 46727 (line 1241) 46728* __satfractuhqusq2: Fixed-point fractional library routines. 46729 (line 1235) 46730* __satfractuhquta: Fixed-point fractional library routines. 46731 (line 1244) 46732* __satfractunsdida: Fixed-point fractional library routines. 46733 (line 1841) 46734* __satfractunsdidq: Fixed-point fractional library routines. 46735 (line 1837) 46736* __satfractunsdiha: Fixed-point fractional library routines. 46737 (line 1839) 46738* __satfractunsdihq: Fixed-point fractional library routines. 46739 (line 1835) 46740* __satfractunsdiqq: Fixed-point fractional library routines. 46741 (line 1834) 46742* __satfractunsdisa: Fixed-point fractional library routines. 46743 (line 1840) 46744* __satfractunsdisq: Fixed-point fractional library routines. 46745 (line 1836) 46746* __satfractunsdita: Fixed-point fractional library routines. 46747 (line 1842) 46748* __satfractunsdiuda: Fixed-point fractional library routines. 46749 (line 1856) 46750* __satfractunsdiudq: Fixed-point fractional library routines. 46751 (line 1850) 46752* __satfractunsdiuha: Fixed-point fractional library routines. 46753 (line 1852) 46754* __satfractunsdiuhq: Fixed-point fractional library routines. 46755 (line 1846) 46756* __satfractunsdiuqq: Fixed-point fractional library routines. 46757 (line 1844) 46758* __satfractunsdiusa: Fixed-point fractional library routines. 46759 (line 1854) 46760* __satfractunsdiusq: Fixed-point fractional library routines. 46761 (line 1848) 46762* __satfractunsdiuta: Fixed-point fractional library routines. 46763 (line 1858) 46764* __satfractunshida: Fixed-point fractional library routines. 46765 (line 1793) 46766* __satfractunshidq: Fixed-point fractional library routines. 46767 (line 1789) 46768* __satfractunshiha: Fixed-point fractional library routines. 46769 (line 1791) 46770* __satfractunshihq: Fixed-point fractional library routines. 46771 (line 1787) 46772* __satfractunshiqq: Fixed-point fractional library routines. 46773 (line 1786) 46774* __satfractunshisa: Fixed-point fractional library routines. 46775 (line 1792) 46776* __satfractunshisq: Fixed-point fractional library routines. 46777 (line 1788) 46778* __satfractunshita: Fixed-point fractional library routines. 46779 (line 1794) 46780* __satfractunshiuda: Fixed-point fractional library routines. 46781 (line 1808) 46782* __satfractunshiudq: Fixed-point fractional library routines. 46783 (line 1802) 46784* __satfractunshiuha: Fixed-point fractional library routines. 46785 (line 1804) 46786* __satfractunshiuhq: Fixed-point fractional library routines. 46787 (line 1798) 46788* __satfractunshiuqq: Fixed-point fractional library routines. 46789 (line 1796) 46790* __satfractunshiusa: Fixed-point fractional library routines. 46791 (line 1806) 46792* __satfractunshiusq: Fixed-point fractional library routines. 46793 (line 1800) 46794* __satfractunshiuta: Fixed-point fractional library routines. 46795 (line 1810) 46796* __satfractunsqida: Fixed-point fractional library routines. 46797 (line 1767) 46798* __satfractunsqidq: Fixed-point fractional library routines. 46799 (line 1763) 46800* __satfractunsqiha: Fixed-point fractional library routines. 46801 (line 1765) 46802* __satfractunsqihq: Fixed-point fractional library routines. 46803 (line 1761) 46804* __satfractunsqiqq: Fixed-point fractional library routines. 46805 (line 1760) 46806* __satfractunsqisa: Fixed-point fractional library routines. 46807 (line 1766) 46808* __satfractunsqisq: Fixed-point fractional library routines. 46809 (line 1762) 46810* __satfractunsqita: Fixed-point fractional library routines. 46811 (line 1768) 46812* __satfractunsqiuda: Fixed-point fractional library routines. 46813 (line 1782) 46814* __satfractunsqiudq: Fixed-point fractional library routines. 46815 (line 1776) 46816* __satfractunsqiuha: Fixed-point fractional library routines. 46817 (line 1778) 46818* __satfractunsqiuhq: Fixed-point fractional library routines. 46819 (line 1772) 46820* __satfractunsqiuqq: Fixed-point fractional library routines. 46821 (line 1770) 46822* __satfractunsqiusa: Fixed-point fractional library routines. 46823 (line 1780) 46824* __satfractunsqiusq: Fixed-point fractional library routines. 46825 (line 1774) 46826* __satfractunsqiuta: Fixed-point fractional library routines. 46827 (line 1784) 46828* __satfractunssida: Fixed-point fractional library routines. 46829 (line 1818) 46830* __satfractunssidq: Fixed-point fractional library routines. 46831 (line 1815) 46832* __satfractunssiha: Fixed-point fractional library routines. 46833 (line 1816) 46834* __satfractunssihq: Fixed-point fractional library routines. 46835 (line 1813) 46836* __satfractunssiqq: Fixed-point fractional library routines. 46837 (line 1812) 46838* __satfractunssisa: Fixed-point fractional library routines. 46839 (line 1817) 46840* __satfractunssisq: Fixed-point fractional library routines. 46841 (line 1814) 46842* __satfractunssita: Fixed-point fractional library routines. 46843 (line 1819) 46844* __satfractunssiuda: Fixed-point fractional library routines. 46845 (line 1830) 46846* __satfractunssiudq: Fixed-point fractional library routines. 46847 (line 1825) 46848* __satfractunssiuha: Fixed-point fractional library routines. 46849 (line 1827) 46850* __satfractunssiuhq: Fixed-point fractional library routines. 46851 (line 1822) 46852* __satfractunssiuqq: Fixed-point fractional library routines. 46853 (line 1820) 46854* __satfractunssiusa: Fixed-point fractional library routines. 46855 (line 1829) 46856* __satfractunssiusq: Fixed-point fractional library routines. 46857 (line 1823) 46858* __satfractunssiuta: Fixed-point fractional library routines. 46859 (line 1832) 46860* __satfractunstida: Fixed-point fractional library routines. 46861 (line 1870) 46862* __satfractunstidq: Fixed-point fractional library routines. 46863 (line 1865) 46864* __satfractunstiha: Fixed-point fractional library routines. 46865 (line 1867) 46866* __satfractunstihq: Fixed-point fractional library routines. 46867 (line 1862) 46868* __satfractunstiqq: Fixed-point fractional library routines. 46869 (line 1860) 46870* __satfractunstisa: Fixed-point fractional library routines. 46871 (line 1869) 46872* __satfractunstisq: Fixed-point fractional library routines. 46873 (line 1863) 46874* __satfractunstita: Fixed-point fractional library routines. 46875 (line 1872) 46876* __satfractunstiuda: Fixed-point fractional library routines. 46877 (line 1886) 46878* __satfractunstiudq: Fixed-point fractional library routines. 46879 (line 1880) 46880* __satfractunstiuha: Fixed-point fractional library routines. 46881 (line 1882) 46882* __satfractunstiuhq: Fixed-point fractional library routines. 46883 (line 1876) 46884* __satfractunstiuqq: Fixed-point fractional library routines. 46885 (line 1874) 46886* __satfractunstiusa: Fixed-point fractional library routines. 46887 (line 1884) 46888* __satfractunstiusq: Fixed-point fractional library routines. 46889 (line 1878) 46890* __satfractunstiuta: Fixed-point fractional library routines. 46891 (line 1888) 46892* __satfractuqqda: Fixed-point fractional library routines. 46893 (line 1207) 46894* __satfractuqqdq: Fixed-point fractional library routines. 46895 (line 1202) 46896* __satfractuqqha: Fixed-point fractional library routines. 46897 (line 1204) 46898* __satfractuqqhq: Fixed-point fractional library routines. 46899 (line 1199) 46900* __satfractuqqqq: Fixed-point fractional library routines. 46901 (line 1197) 46902* __satfractuqqsa: Fixed-point fractional library routines. 46903 (line 1206) 46904* __satfractuqqsq: Fixed-point fractional library routines. 46905 (line 1200) 46906* __satfractuqqta: Fixed-point fractional library routines. 46907 (line 1209) 46908* __satfractuqquda: Fixed-point fractional library routines. 46909 (line 1221) 46910* __satfractuqqudq2: Fixed-point fractional library routines. 46911 (line 1215) 46912* __satfractuqquha: Fixed-point fractional library routines. 46913 (line 1217) 46914* __satfractuqquhq2: Fixed-point fractional library routines. 46915 (line 1211) 46916* __satfractuqqusa: Fixed-point fractional library routines. 46917 (line 1219) 46918* __satfractuqqusq2: Fixed-point fractional library routines. 46919 (line 1213) 46920* __satfractuqquta: Fixed-point fractional library routines. 46921 (line 1223) 46922* __satfractusada: Fixed-point fractional library routines. 46923 (line 1334) 46924* __satfractusadq: Fixed-point fractional library routines. 46925 (line 1331) 46926* __satfractusaha: Fixed-point fractional library routines. 46927 (line 1332) 46928* __satfractusahq: Fixed-point fractional library routines. 46929 (line 1329) 46930* __satfractusaqq: Fixed-point fractional library routines. 46931 (line 1328) 46932* __satfractusasa: Fixed-point fractional library routines. 46933 (line 1333) 46934* __satfractusasq: Fixed-point fractional library routines. 46935 (line 1330) 46936* __satfractusata: Fixed-point fractional library routines. 46937 (line 1335) 46938* __satfractusauda2: Fixed-point fractional library routines. 46939 (line 1345) 46940* __satfractusaudq: Fixed-point fractional library routines. 46941 (line 1341) 46942* __satfractusauha2: Fixed-point fractional library routines. 46943 (line 1343) 46944* __satfractusauhq: Fixed-point fractional library routines. 46945 (line 1338) 46946* __satfractusauqq: Fixed-point fractional library routines. 46947 (line 1336) 46948* __satfractusausq: Fixed-point fractional library routines. 46949 (line 1339) 46950* __satfractusauta2: Fixed-point fractional library routines. 46951 (line 1347) 46952* __satfractusqda: Fixed-point fractional library routines. 46953 (line 1255) 46954* __satfractusqdq: Fixed-point fractional library routines. 46955 (line 1250) 46956* __satfractusqha: Fixed-point fractional library routines. 46957 (line 1252) 46958* __satfractusqhq: Fixed-point fractional library routines. 46959 (line 1248) 46960* __satfractusqqq: Fixed-point fractional library routines. 46961 (line 1246) 46962* __satfractusqsa: Fixed-point fractional library routines. 46963 (line 1254) 46964* __satfractusqsq: Fixed-point fractional library routines. 46965 (line 1249) 46966* __satfractusqta: Fixed-point fractional library routines. 46967 (line 1256) 46968* __satfractusquda: Fixed-point fractional library routines. 46969 (line 1268) 46970* __satfractusqudq2: Fixed-point fractional library routines. 46971 (line 1262) 46972* __satfractusquha: Fixed-point fractional library routines. 46973 (line 1264) 46974* __satfractusquhq2: Fixed-point fractional library routines. 46975 (line 1260) 46976* __satfractusquqq2: Fixed-point fractional library routines. 46977 (line 1258) 46978* __satfractusqusa: Fixed-point fractional library routines. 46979 (line 1266) 46980* __satfractusquta: Fixed-point fractional library routines. 46981 (line 1270) 46982* __satfractutada: Fixed-point fractional library routines. 46983 (line 1385) 46984* __satfractutadq: Fixed-point fractional library routines. 46985 (line 1380) 46986* __satfractutaha: Fixed-point fractional library routines. 46987 (line 1382) 46988* __satfractutahq: Fixed-point fractional library routines. 46989 (line 1377) 46990* __satfractutaqq: Fixed-point fractional library routines. 46991 (line 1375) 46992* __satfractutasa: Fixed-point fractional library routines. 46993 (line 1384) 46994* __satfractutasq: Fixed-point fractional library routines. 46995 (line 1378) 46996* __satfractutata: Fixed-point fractional library routines. 46997 (line 1387) 46998* __satfractutauda2: Fixed-point fractional library routines. 46999 (line 1401) 47000* __satfractutaudq: Fixed-point fractional library routines. 47001 (line 1395) 47002* __satfractutauha2: Fixed-point fractional library routines. 47003 (line 1397) 47004* __satfractutauhq: Fixed-point fractional library routines. 47005 (line 1391) 47006* __satfractutauqq: Fixed-point fractional library routines. 47007 (line 1389) 47008* __satfractutausa2: Fixed-point fractional library routines. 47009 (line 1399) 47010* __satfractutausq: Fixed-point fractional library routines. 47011 (line 1393) 47012* __splitstack_find: Miscellaneous routines. 47013 (line 15) 47014* __ssaddda3: Fixed-point fractional library routines. 47015 (line 74) 47016* __ssadddq3: Fixed-point fractional library routines. 47017 (line 69) 47018* __ssaddha3: Fixed-point fractional library routines. 47019 (line 71) 47020* __ssaddhq3: Fixed-point fractional library routines. 47021 (line 67) 47022* __ssaddqq3: Fixed-point fractional library routines. 47023 (line 65) 47024* __ssaddsa3: Fixed-point fractional library routines. 47025 (line 73) 47026* __ssaddsq3: Fixed-point fractional library routines. 47027 (line 68) 47028* __ssaddta3: Fixed-point fractional library routines. 47029 (line 75) 47030* __ssashlda3: Fixed-point fractional library routines. 47031 (line 409) 47032* __ssashldq3: Fixed-point fractional library routines. 47033 (line 405) 47034* __ssashlha3: Fixed-point fractional library routines. 47035 (line 407) 47036* __ssashlhq3: Fixed-point fractional library routines. 47037 (line 403) 47038* __ssashlsa3: Fixed-point fractional library routines. 47039 (line 408) 47040* __ssashlsq3: Fixed-point fractional library routines. 47041 (line 404) 47042* __ssashlta3: Fixed-point fractional library routines. 47043 (line 410) 47044* __ssdivda3: Fixed-point fractional library routines. 47045 (line 268) 47046* __ssdivdq3: Fixed-point fractional library routines. 47047 (line 263) 47048* __ssdivha3: Fixed-point fractional library routines. 47049 (line 265) 47050* __ssdivhq3: Fixed-point fractional library routines. 47051 (line 261) 47052* __ssdivqq3: Fixed-point fractional library routines. 47053 (line 259) 47054* __ssdivsa3: Fixed-point fractional library routines. 47055 (line 267) 47056* __ssdivsq3: Fixed-point fractional library routines. 47057 (line 262) 47058* __ssdivta3: Fixed-point fractional library routines. 47059 (line 269) 47060* __ssmulda3: Fixed-point fractional library routines. 47061 (line 200) 47062* __ssmuldq3: Fixed-point fractional library routines. 47063 (line 195) 47064* __ssmulha3: Fixed-point fractional library routines. 47065 (line 197) 47066* __ssmulhq3: Fixed-point fractional library routines. 47067 (line 193) 47068* __ssmulqq3: Fixed-point fractional library routines. 47069 (line 191) 47070* __ssmulsa3: Fixed-point fractional library routines. 47071 (line 199) 47072* __ssmulsq3: Fixed-point fractional library routines. 47073 (line 194) 47074* __ssmulta3: Fixed-point fractional library routines. 47075 (line 201) 47076* __ssnegda2: Fixed-point fractional library routines. 47077 (line 323) 47078* __ssnegdq2: Fixed-point fractional library routines. 47079 (line 320) 47080* __ssnegha2: Fixed-point fractional library routines. 47081 (line 321) 47082* __ssneghq2: Fixed-point fractional library routines. 47083 (line 318) 47084* __ssnegqq2: Fixed-point fractional library routines. 47085 (line 317) 47086* __ssnegsa2: Fixed-point fractional library routines. 47087 (line 322) 47088* __ssnegsq2: Fixed-point fractional library routines. 47089 (line 319) 47090* __ssnegta2: Fixed-point fractional library routines. 47091 (line 324) 47092* __sssubda3: Fixed-point fractional library routines. 47093 (line 136) 47094* __sssubdq3: Fixed-point fractional library routines. 47095 (line 131) 47096* __sssubha3: Fixed-point fractional library routines. 47097 (line 133) 47098* __sssubhq3: Fixed-point fractional library routines. 47099 (line 129) 47100* __sssubqq3: Fixed-point fractional library routines. 47101 (line 127) 47102* __sssubsa3: Fixed-point fractional library routines. 47103 (line 135) 47104* __sssubsq3: Fixed-point fractional library routines. 47105 (line 130) 47106* __sssubta3: Fixed-point fractional library routines. 47107 (line 137) 47108* __subda3: Fixed-point fractional library routines. 47109 (line 114) 47110* __subdf3: Soft float library routines. 47111 (line 30) 47112* __subdq3: Fixed-point fractional library routines. 47113 (line 101) 47114* __subha3: Fixed-point fractional library routines. 47115 (line 111) 47116* __subhq3: Fixed-point fractional library routines. 47117 (line 99) 47118* __subqq3: Fixed-point fractional library routines. 47119 (line 97) 47120* __subsa3: Fixed-point fractional library routines. 47121 (line 113) 47122* __subsf3: Soft float library routines. 47123 (line 29) 47124* __subsq3: Fixed-point fractional library routines. 47125 (line 100) 47126* __subta3: Fixed-point fractional library routines. 47127 (line 115) 47128* __subtf3: Soft float library routines. 47129 (line 31) 47130* __subuda3: Fixed-point fractional library routines. 47131 (line 121) 47132* __subudq3: Fixed-point fractional library routines. 47133 (line 109) 47134* __subuha3: Fixed-point fractional library routines. 47135 (line 117) 47136* __subuhq3: Fixed-point fractional library routines. 47137 (line 105) 47138* __subuqq3: Fixed-point fractional library routines. 47139 (line 103) 47140* __subusa3: Fixed-point fractional library routines. 47141 (line 119) 47142* __subusq3: Fixed-point fractional library routines. 47143 (line 107) 47144* __subuta3: Fixed-point fractional library routines. 47145 (line 123) 47146* __subvdi3: Integer library routines. 47147 (line 122) 47148* __subvsi3: Integer library routines. 47149 (line 121) 47150* __subxf3: Soft float library routines. 47151 (line 33) 47152* __truncdfsf2: Soft float library routines. 47153 (line 75) 47154* __trunctfdf2: Soft float library routines. 47155 (line 72) 47156* __trunctfsf2: Soft float library routines. 47157 (line 74) 47158* __truncxfdf2: Soft float library routines. 47159 (line 71) 47160* __truncxfsf2: Soft float library routines. 47161 (line 73) 47162* __ucmpdi2: Integer library routines. 47163 (line 92) 47164* __ucmpti2: Integer library routines. 47165 (line 93) 47166* __udivdi3: Integer library routines. 47167 (line 52) 47168* __udivmoddi4: Integer library routines. 47169 (line 59) 47170* __udivmodti4: Integer library routines. 47171 (line 61) 47172* __udivsi3: Integer library routines. 47173 (line 50) 47174* __udivti3: Integer library routines. 47175 (line 54) 47176* __udivuda3: Fixed-point fractional library routines. 47177 (line 252) 47178* __udivudq3: Fixed-point fractional library routines. 47179 (line 246) 47180* __udivuha3: Fixed-point fractional library routines. 47181 (line 248) 47182* __udivuhq3: Fixed-point fractional library routines. 47183 (line 242) 47184* __udivuqq3: Fixed-point fractional library routines. 47185 (line 240) 47186* __udivusa3: Fixed-point fractional library routines. 47187 (line 250) 47188* __udivusq3: Fixed-point fractional library routines. 47189 (line 244) 47190* __udivuta3: Fixed-point fractional library routines. 47191 (line 254) 47192* __umoddi3: Integer library routines. 47193 (line 69) 47194* __umodsi3: Integer library routines. 47195 (line 67) 47196* __umodti3: Integer library routines. 47197 (line 71) 47198* __unorddf2: Soft float library routines. 47199 (line 172) 47200* __unordsf2: Soft float library routines. 47201 (line 171) 47202* __unordtf2: Soft float library routines. 47203 (line 173) 47204* __usadduda3: Fixed-point fractional library routines. 47205 (line 91) 47206* __usaddudq3: Fixed-point fractional library routines. 47207 (line 85) 47208* __usadduha3: Fixed-point fractional library routines. 47209 (line 87) 47210* __usadduhq3: Fixed-point fractional library routines. 47211 (line 81) 47212* __usadduqq3: Fixed-point fractional library routines. 47213 (line 79) 47214* __usaddusa3: Fixed-point fractional library routines. 47215 (line 89) 47216* __usaddusq3: Fixed-point fractional library routines. 47217 (line 83) 47218* __usadduta3: Fixed-point fractional library routines. 47219 (line 93) 47220* __usashluda3: Fixed-point fractional library routines. 47221 (line 427) 47222* __usashludq3: Fixed-point fractional library routines. 47223 (line 421) 47224* __usashluha3: Fixed-point fractional library routines. 47225 (line 423) 47226* __usashluhq3: Fixed-point fractional library routines. 47227 (line 417) 47228* __usashluqq3: Fixed-point fractional library routines. 47229 (line 415) 47230* __usashlusa3: Fixed-point fractional library routines. 47231 (line 425) 47232* __usashlusq3: Fixed-point fractional library routines. 47233 (line 419) 47234* __usashluta3: Fixed-point fractional library routines. 47235 (line 429) 47236* __usdivuda3: Fixed-point fractional library routines. 47237 (line 286) 47238* __usdivudq3: Fixed-point fractional library routines. 47239 (line 280) 47240* __usdivuha3: Fixed-point fractional library routines. 47241 (line 282) 47242* __usdivuhq3: Fixed-point fractional library routines. 47243 (line 276) 47244* __usdivuqq3: Fixed-point fractional library routines. 47245 (line 274) 47246* __usdivusa3: Fixed-point fractional library routines. 47247 (line 284) 47248* __usdivusq3: Fixed-point fractional library routines. 47249 (line 278) 47250* __usdivuta3: Fixed-point fractional library routines. 47251 (line 288) 47252* __usmuluda3: Fixed-point fractional library routines. 47253 (line 218) 47254* __usmuludq3: Fixed-point fractional library routines. 47255 (line 212) 47256* __usmuluha3: Fixed-point fractional library routines. 47257 (line 214) 47258* __usmuluhq3: Fixed-point fractional library routines. 47259 (line 208) 47260* __usmuluqq3: Fixed-point fractional library routines. 47261 (line 206) 47262* __usmulusa3: Fixed-point fractional library routines. 47263 (line 216) 47264* __usmulusq3: Fixed-point fractional library routines. 47265 (line 210) 47266* __usmuluta3: Fixed-point fractional library routines. 47267 (line 220) 47268* __usneguda2: Fixed-point fractional library routines. 47269 (line 337) 47270* __usnegudq2: Fixed-point fractional library routines. 47271 (line 332) 47272* __usneguha2: Fixed-point fractional library routines. 47273 (line 334) 47274* __usneguhq2: Fixed-point fractional library routines. 47275 (line 329) 47276* __usneguqq2: Fixed-point fractional library routines. 47277 (line 327) 47278* __usnegusa2: Fixed-point fractional library routines. 47279 (line 336) 47280* __usnegusq2: Fixed-point fractional library routines. 47281 (line 330) 47282* __usneguta2: Fixed-point fractional library routines. 47283 (line 339) 47284* __ussubuda3: Fixed-point fractional library routines. 47285 (line 154) 47286* __ussubudq3: Fixed-point fractional library routines. 47287 (line 148) 47288* __ussubuha3: Fixed-point fractional library routines. 47289 (line 150) 47290* __ussubuhq3: Fixed-point fractional library routines. 47291 (line 144) 47292* __ussubuqq3: Fixed-point fractional library routines. 47293 (line 142) 47294* __ussubusa3: Fixed-point fractional library routines. 47295 (line 152) 47296* __ussubusq3: Fixed-point fractional library routines. 47297 (line 146) 47298* __ussubuta3: Fixed-point fractional library routines. 47299 (line 156) 47300* abort: Portability. (line 20) 47301* abs: Arithmetic. (line 200) 47302* abs and attributes: Expressions. (line 83) 47303* absence_set: Processor pipeline description. 47304 (line 223) 47305* absM2 instruction pattern: Standard Names. (line 610) 47306* absolute value: Arithmetic. (line 200) 47307* ABS_EXPR: Unary and Binary Expressions. 47308 (line 6) 47309* access to operands: Accessors. (line 6) 47310* access to special operands: Special Accessors. (line 6) 47311* accessors: Accessors. (line 6) 47312* ACCUMULATE_OUTGOING_ARGS: Stack Arguments. (line 48) 47313* ACCUMULATE_OUTGOING_ARGS and stack frames: Function Entry. (line 133) 47314* ACCUM_TYPE_SIZE: Type Layout. (line 87) 47315* acosM2 instruction pattern: Standard Names. (line 697) 47316* ADA_LONG_TYPE_SIZE: Type Layout. (line 25) 47317* Adding a new GIMPLE statement code: Adding a new GIMPLE statement code. 47318 (line 6) 47319* ADDITIONAL_REGISTER_NAMES: Instruction Output. (line 14) 47320* addM3 instruction pattern: Standard Names. (line 295) 47321* addMODEcc instruction pattern: Standard Names. (line 1266) 47322* addptrM3 instruction pattern: Standard Names. (line 328) 47323* address constraints: Simple Constraints. (line 162) 47324* addressing modes: Addressing Modes. (line 6) 47325* address_operand: Machine-Independent Predicates. 47326 (line 62) 47327* address_operand <1>: Simple Constraints. (line 166) 47328* addr_diff_vec: Side Effects. (line 314) 47329* addr_diff_vec, length of: Insn Lengths. (line 26) 47330* ADDR_EXPR: Storage References. (line 6) 47331* addr_vec: Side Effects. (line 309) 47332* addr_vec, length of: Insn Lengths. (line 26) 47333* addvM4 instruction pattern: Standard Names. (line 311) 47334* ADJUST_FIELD_ALIGN: Storage Layout. (line 195) 47335* ADJUST_INSN_LENGTH: Insn Lengths. (line 41) 47336* ADJUST_REG_ALLOC_ORDER: Allocation Order. (line 22) 47337* aggregates as return values: Aggregate Return. (line 6) 47338* alias: Alias analysis. (line 6) 47339* allocate_stack instruction pattern: Standard Names. (line 1594) 47340* ALL_REGS: Register Classes. (line 17) 47341* alternate entry points: Insns. (line 146) 47342* anchored addresses: Anchored Addresses. (line 6) 47343* and: Arithmetic. (line 158) 47344* and and attributes: Expressions. (line 50) 47345* and, canonicalization of: Insn Canonicalizations. 47346 (line 51) 47347* andM3 instruction pattern: Standard Names. (line 301) 47348* ANNOTATE_EXPR: Unary and Binary Expressions. 47349 (line 6) 47350* annotations: Annotations. (line 6) 47351* APPLY_RESULT_SIZE: Scalar Return. (line 112) 47352* ARGS_GROW_DOWNWARD: Frame Layout. (line 30) 47353* argument passing: Interface. (line 36) 47354* arguments in registers: Register Arguments. (line 6) 47355* arguments on stack: Stack Arguments. (line 6) 47356* ARG_POINTER_CFA_OFFSET: Frame Layout. (line 190) 47357* ARG_POINTER_REGNUM: Frame Registers. (line 40) 47358* ARG_POINTER_REGNUM and virtual registers: Regs and Memory. (line 65) 47359* arg_pointer_rtx: Frame Registers. (line 104) 47360* arithmetic library: Soft float library routines. 47361 (line 6) 47362* arithmetic shift: Arithmetic. (line 173) 47363* arithmetic shift with signed saturation: Arithmetic. (line 173) 47364* arithmetic shift with unsigned saturation: Arithmetic. (line 173) 47365* arithmetic, in RTL: Arithmetic. (line 6) 47366* ARITHMETIC_TYPE_P: Types for C++. (line 59) 47367* array: Types. (line 6) 47368* ARRAY_RANGE_REF: Storage References. (line 6) 47369* ARRAY_REF: Storage References. (line 6) 47370* ARRAY_TYPE: Types. (line 6) 47371* ashift: Arithmetic. (line 173) 47372* ashift and attributes: Expressions. (line 83) 47373* ashiftrt: Arithmetic. (line 190) 47374* ashiftrt and attributes: Expressions. (line 83) 47375* ashlM3 instruction pattern: Standard Names. (line 579) 47376* ashrM3 instruction pattern: Standard Names. (line 591) 47377* asinM2 instruction pattern: Standard Names. (line 691) 47378* ASM_APP_OFF: File Framework. (line 76) 47379* ASM_APP_ON: File Framework. (line 69) 47380* ASM_COMMENT_START: File Framework. (line 64) 47381* ASM_DECLARE_COLD_FUNCTION_NAME: Label Output. (line 136) 47382* ASM_DECLARE_COLD_FUNCTION_SIZE: Label Output. (line 151) 47383* ASM_DECLARE_FUNCTION_NAME: Label Output. (line 108) 47384* ASM_DECLARE_FUNCTION_SIZE: Label Output. (line 123) 47385* ASM_DECLARE_OBJECT_NAME: Label Output. (line 164) 47386* ASM_DECLARE_REGISTER_GLOBAL: Label Output. (line 192) 47387* ASM_FINAL_SPEC: Driver. (line 81) 47388* ASM_FINISH_DECLARE_OBJECT: Label Output. (line 200) 47389* ASM_FORMAT_PRIVATE_NAME: Label Output. (line 426) 47390* asm_fprintf: Instruction Output. (line 150) 47391* ASM_FPRINTF_EXTENSIONS: Instruction Output. (line 160) 47392* ASM_GENERATE_INTERNAL_LABEL: Label Output. (line 410) 47393* asm_input: Side Effects. (line 296) 47394* asm_input and /v: Flags. (line 76) 47395* ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX: Exception Handling. (line 80) 47396* asm_noperands: Insns. (line 304) 47397* ASM_NO_SKIP_IN_TEXT: Alignment Output. (line 78) 47398* asm_operands and /v: Flags. (line 76) 47399* asm_operands, RTL sharing: Sharing. (line 45) 47400* asm_operands, usage: Assembler. (line 6) 47401* ASM_OUTPUT_ADDR_DIFF_ELT: Dispatch Tables. (line 8) 47402* ASM_OUTPUT_ADDR_VEC_ELT: Dispatch Tables. (line 25) 47403* ASM_OUTPUT_ALIGN: Alignment Output. (line 85) 47404* ASM_OUTPUT_ALIGNED_BSS: Uninitialized Data. (line 45) 47405* ASM_OUTPUT_ALIGNED_COMMON: Uninitialized Data. (line 29) 47406* ASM_OUTPUT_ALIGNED_DECL_COMMON: Uninitialized Data. (line 36) 47407* ASM_OUTPUT_ALIGNED_DECL_LOCAL: Uninitialized Data. (line 89) 47408* ASM_OUTPUT_ALIGNED_LOCAL: Uninitialized Data. (line 82) 47409* ASM_OUTPUT_ALIGN_WITH_NOP: Alignment Output. (line 90) 47410* ASM_OUTPUT_ASCII: Data Output. (line 54) 47411* ASM_OUTPUT_CASE_END: Dispatch Tables. (line 50) 47412* ASM_OUTPUT_CASE_LABEL: Dispatch Tables. (line 37) 47413* ASM_OUTPUT_COMMON: Uninitialized Data. (line 9) 47414* ASM_OUTPUT_DEBUG_LABEL: Label Output. (line 398) 47415* ASM_OUTPUT_DEF: Label Output. (line 447) 47416* ASM_OUTPUT_DEF_FROM_DECLS: Label Output. (line 454) 47417* ASM_OUTPUT_DWARF_DATAREL: SDB and DWARF. (line 97) 47418* ASM_OUTPUT_DWARF_DELTA: SDB and DWARF. (line 77) 47419* ASM_OUTPUT_DWARF_OFFSET: SDB and DWARF. (line 86) 47420* ASM_OUTPUT_DWARF_PCREL: SDB and DWARF. (line 92) 47421* ASM_OUTPUT_DWARF_TABLE_REF: SDB and DWARF. (line 102) 47422* ASM_OUTPUT_DWARF_VMS_DELTA: SDB and DWARF. (line 81) 47423* ASM_OUTPUT_EXTERNAL: Label Output. (line 327) 47424* ASM_OUTPUT_FDESC: Data Output. (line 63) 47425* ASM_OUTPUT_FUNCTION_LABEL: Label Output. (line 16) 47426* ASM_OUTPUT_INTERNAL_LABEL: Label Output. (line 27) 47427* ASM_OUTPUT_LABEL: Label Output. (line 8) 47428* ASM_OUTPUT_LABELREF: Label Output. (line 349) 47429* ASM_OUTPUT_LABEL_REF: Label Output. (line 371) 47430* ASM_OUTPUT_LOCAL: Uninitialized Data. (line 69) 47431* ASM_OUTPUT_MAX_SKIP_ALIGN: Alignment Output. (line 94) 47432* ASM_OUTPUT_MEASURED_SIZE: Label Output. (line 51) 47433* ASM_OUTPUT_OPCODE: Instruction Output. (line 35) 47434* ASM_OUTPUT_POOL_EPILOGUE: Data Output. (line 112) 47435* ASM_OUTPUT_POOL_PROLOGUE: Data Output. (line 76) 47436* ASM_OUTPUT_REG_POP: Instruction Output. (line 206) 47437* ASM_OUTPUT_REG_PUSH: Instruction Output. (line 201) 47438* ASM_OUTPUT_SIZE_DIRECTIVE: Label Output. (line 45) 47439* ASM_OUTPUT_SKIP: Alignment Output. (line 72) 47440* ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 83) 47441* ASM_OUTPUT_SPECIAL_POOL_ENTRY: Data Output. (line 87) 47442* ASM_OUTPUT_SYMBOL_REF: Label Output. (line 364) 47443* ASM_OUTPUT_TYPE_DIRECTIVE: Label Output. (line 98) 47444* ASM_OUTPUT_WEAKREF: Label Output. (line 259) 47445* ASM_OUTPUT_WEAK_ALIAS: Label Output. (line 473) 47446* ASM_PREFERRED_EH_DATA_FORMAT: Exception Handling. (line 66) 47447* ASM_SPEC: Driver. (line 73) 47448* ASM_STABD_OP: DBX Options. (line 34) 47449* ASM_STABN_OP: DBX Options. (line 41) 47450* ASM_STABS_OP: DBX Options. (line 28) 47451* ASM_WEAKEN_DECL: Label Output. (line 251) 47452* ASM_WEAKEN_LABEL: Label Output. (line 238) 47453* assembler format: File Framework. (line 6) 47454* assembler instructions in RTL: Assembler. (line 6) 47455* ASSEMBLER_DIALECT: Instruction Output. (line 172) 47456* assemble_name: Label Output. (line 8) 47457* assemble_name_raw: Label Output. (line 27) 47458* assigning attribute values to insns: Tagging Insns. (line 6) 47459* ASSUME_EXTENDED_UNWIND_CONTEXT: Frame Registers. (line 165) 47460* asterisk in template: Output Statement. (line 29) 47461* AS_NEEDS_DASH_FOR_PIPED_INPUT: Driver. (line 88) 47462* atan2M3 instruction pattern: Standard Names. (line 792) 47463* atanM2 instruction pattern: Standard Names. (line 703) 47464* atomic: GTY Options. (line 195) 47465* atomic_addMODE instruction pattern: Standard Names. (line 1996) 47466* atomic_add_fetchMODE instruction pattern: Standard Names. (line 2025) 47467* atomic_andMODE instruction pattern: Standard Names. (line 1996) 47468* atomic_and_fetchMODE instruction pattern: Standard Names. (line 2025) 47469* atomic_compare_and_swapMODE instruction pattern: Standard Names. 47470 (line 1932) 47471* atomic_exchangeMODE instruction pattern: Standard Names. (line 1984) 47472* atomic_fetch_addMODE instruction pattern: Standard Names. (line 2010) 47473* atomic_fetch_andMODE instruction pattern: Standard Names. (line 2010) 47474* atomic_fetch_nandMODE instruction pattern: Standard Names. (line 2010) 47475* atomic_fetch_orMODE instruction pattern: Standard Names. (line 2010) 47476* atomic_fetch_subMODE instruction pattern: Standard Names. (line 2010) 47477* atomic_fetch_xorMODE instruction pattern: Standard Names. (line 2010) 47478* atomic_loadMODE instruction pattern: Standard Names. (line 1963) 47479* atomic_nandMODE instruction pattern: Standard Names. (line 1996) 47480* atomic_nand_fetchMODE instruction pattern: Standard Names. (line 2025) 47481* atomic_orMODE instruction pattern: Standard Names. (line 1996) 47482* atomic_or_fetchMODE instruction pattern: Standard Names. (line 2025) 47483* atomic_storeMODE instruction pattern: Standard Names. (line 1973) 47484* atomic_subMODE instruction pattern: Standard Names. (line 1996) 47485* atomic_sub_fetchMODE instruction pattern: Standard Names. (line 2025) 47486* atomic_test_and_set instruction pattern: Standard Names. (line 2042) 47487* atomic_xorMODE instruction pattern: Standard Names. (line 1996) 47488* atomic_xor_fetchMODE instruction pattern: Standard Names. (line 2025) 47489* attr: Expressions. (line 163) 47490* attr <1>: Tagging Insns. (line 54) 47491* attribute expressions: Expressions. (line 6) 47492* attribute specifications: Attr Example. (line 6) 47493* attribute specifications example: Attr Example. (line 6) 47494* attributes: Attributes. (line 6) 47495* attributes, defining: Defining Attributes. 47496 (line 6) 47497* attributes, target-specific: Target Attributes. (line 6) 47498* ATTRIBUTE_ALIGNED_VALUE: Storage Layout. (line 177) 47499* attr_flag: Expressions. (line 138) 47500* autoincrement addressing, availability: Portability. (line 20) 47501* autoincrement/decrement addressing: Simple Constraints. (line 30) 47502* automata_option: Processor pipeline description. 47503 (line 304) 47504* automaton based pipeline description: Processor pipeline description. 47505 (line 6) 47506* automaton based pipeline description <1>: Processor pipeline description. 47507 (line 49) 47508* automaton based scheduler: Processor pipeline description. 47509 (line 6) 47510* AVOID_CCMODE_COPIES: Values in Registers. 47511 (line 150) 47512* backslash: Output Template. (line 46) 47513* barrier: Insns. (line 176) 47514* barrier and /f: Flags. (line 107) 47515* barrier and /v: Flags. (line 44) 47516* BASE_REG_CLASS: Register Classes. (line 111) 47517* basic block: Basic Blocks. (line 6) 47518* Basic Statements: Basic Statements. (line 6) 47519* basic-block.h: Control Flow. (line 6) 47520* basic_block: Basic Blocks. (line 6) 47521* BASIC_BLOCK: Basic Blocks. (line 14) 47522* BB_HEAD, BB_END: Maintaining the CFG. 47523 (line 76) 47524* bb_seq: GIMPLE sequences. (line 72) 47525* BIGGEST_ALIGNMENT: Storage Layout. (line 162) 47526* BIGGEST_FIELD_ALIGNMENT: Storage Layout. (line 188) 47527* BImode: Machine Modes. (line 22) 47528* BIND_EXPR: Unary and Binary Expressions. 47529 (line 6) 47530* BINFO_TYPE: Classes. (line 6) 47531* bit-fields: Bit-Fields. (line 6) 47532* BITFIELD_NBYTES_LIMITED: Storage Layout. (line 398) 47533* BITS_BIG_ENDIAN: Storage Layout. (line 11) 47534* BITS_BIG_ENDIAN, effect on sign_extract: Bit-Fields. (line 8) 47535* BITS_PER_UNIT: Machine Modes. (line 354) 47536* BITS_PER_WORD: Storage Layout. (line 50) 47537* bitwise complement: Arithmetic. (line 154) 47538* bitwise exclusive-or: Arithmetic. (line 168) 47539* bitwise inclusive-or: Arithmetic. (line 163) 47540* bitwise logical-and: Arithmetic. (line 158) 47541* BIT_AND_EXPR: Unary and Binary Expressions. 47542 (line 6) 47543* BIT_IOR_EXPR: Unary and Binary Expressions. 47544 (line 6) 47545* BIT_NOT_EXPR: Unary and Binary Expressions. 47546 (line 6) 47547* BIT_XOR_EXPR: Unary and Binary Expressions. 47548 (line 6) 47549* BLKmode: Machine Modes. (line 185) 47550* BLKmode, and function return values: Calls. (line 23) 47551* blockage instruction pattern: Standard Names. (line 1795) 47552* Blocks: Blocks. (line 6) 47553* BLOCK_FOR_INSN, gimple_bb: Maintaining the CFG. 47554 (line 28) 47555* BLOCK_REG_PADDING: Register Arguments. (line 242) 47556* BND32mode: Machine Modes. (line 209) 47557* BND64mode: Machine Modes. (line 209) 47558* bool: Misc. (line 994) 47559* BOOLEAN_TYPE: Types. (line 6) 47560* BOOL_TYPE_SIZE: Type Layout. (line 43) 47561* branch prediction: Profile information. 47562 (line 24) 47563* BRANCH_COST: Costs. (line 104) 47564* break_out_memory_refs: Addressing Modes. (line 134) 47565* BREAK_STMT: Statements for C++. (line 6) 47566* BSS_SECTION_ASM_OP: Sections. (line 67) 47567* bswap: Arithmetic. (line 246) 47568* bswapM2 instruction pattern: Standard Names. (line 599) 47569* btruncM2 instruction pattern: Standard Names. (line 807) 47570* build0: Macros and Functions. 47571 (line 16) 47572* build1: Macros and Functions. 47573 (line 17) 47574* build2: Macros and Functions. 47575 (line 18) 47576* build3: Macros and Functions. 47577 (line 19) 47578* build4: Macros and Functions. 47579 (line 20) 47580* build5: Macros and Functions. 47581 (line 21) 47582* build6: Macros and Functions. 47583 (line 22) 47584* builtin_longjmp instruction pattern: Standard Names. (line 1692) 47585* builtin_setjmp_receiver instruction pattern: Standard Names. 47586 (line 1682) 47587* builtin_setjmp_setup instruction pattern: Standard Names. (line 1671) 47588* BYTES_BIG_ENDIAN: Storage Layout. (line 23) 47589* BYTES_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 219) 47590* byte_mode: Machine Modes. (line 367) 47591* C statements for assembler output: Output Statement. (line 6) 47592* cache: GTY Options. (line 125) 47593* call: Flags. (line 221) 47594* call <1>: Side Effects. (line 92) 47595* call instruction pattern: Standard Names. (line 1337) 47596* call usage: Calls. (line 10) 47597* call, in call_insn: Flags. (line 33) 47598* call, in mem: Flags. (line 81) 47599* call-clobbered register: Register Basics. (line 35) 47600* call-clobbered register <1>: Register Basics. (line 46) 47601* call-clobbered register <2>: Register Basics. (line 53) 47602* call-saved register: Register Basics. (line 35) 47603* call-saved register <1>: Register Basics. (line 46) 47604* call-saved register <2>: Register Basics. (line 53) 47605* call-used register: Register Basics. (line 35) 47606* call-used register <1>: Register Basics. (line 46) 47607* call-used register <2>: Register Basics. (line 53) 47608* calling conventions: Stack and Calling. (line 6) 47609* calling functions in RTL: Calls. (line 6) 47610* CALL_EXPR: Unary and Binary Expressions. 47611 (line 6) 47612* call_insn: Insns. (line 95) 47613* call_insn and /c: Flags. (line 33) 47614* call_insn and /f: Flags. (line 107) 47615* call_insn and /i: Flags. (line 24) 47616* call_insn and /j: Flags. (line 161) 47617* call_insn and /s: Flags. (line 49) 47618* call_insn and /s <1>: Flags. (line 148) 47619* call_insn and /u: Flags. (line 19) 47620* call_insn and /u <1>: Flags. (line 39) 47621* call_insn and /u or /i: Flags. (line 29) 47622* call_insn and /v: Flags. (line 44) 47623* CALL_INSN_FUNCTION_USAGE: Insns. (line 101) 47624* call_pop instruction pattern: Standard Names. (line 1365) 47625* CALL_POPS_ARGS: Stack Arguments. (line 138) 47626* CALL_REALLY_USED_REGISTERS: Register Basics. (line 45) 47627* CALL_USED_REGISTERS: Register Basics. (line 34) 47628* call_used_regs: Register Basics. (line 59) 47629* call_value instruction pattern: Standard Names. (line 1357) 47630* call_value_pop instruction pattern: Standard Names. (line 1365) 47631* canadian: Configure Terms. (line 6) 47632* CANNOT_CHANGE_MODE_CLASS: Register Classes. (line 533) 47633* CANNOT_CHANGE_MODE_CLASS and subreg semantics: Regs and Memory. 47634 (line 276) 47635* canonicalization of instructions: Insn Canonicalizations. 47636 (line 6) 47637* canonicalize_funcptr_for_compare instruction pattern: Standard Names. 47638 (line 1526) 47639* can_create_pseudo_p: Standard Names. (line 75) 47640* can_fallthru: Basic Blocks. (line 67) 47641* caret: Multi-Alternative. (line 53) 47642* casesi instruction pattern: Standard Names. (line 1458) 47643* CASE_VECTOR_MODE: Misc. (line 26) 47644* CASE_VECTOR_PC_RELATIVE: Misc. (line 39) 47645* CASE_VECTOR_SHORTEN_MODE: Misc. (line 30) 47646* cbranchMODE4 instruction pattern: Standard Names. (line 1326) 47647* cc0: Regs and Memory. (line 303) 47648* cc0 <1>: CC0 Condition Codes. 47649 (line 6) 47650* cc0, RTL sharing: Sharing. (line 27) 47651* cc0_rtx: Regs and Memory. (line 329) 47652* CC1PLUS_SPEC: Driver. (line 63) 47653* CC1_SPEC: Driver. (line 55) 47654* CCmode: Machine Modes. (line 178) 47655* CCmode <1>: MODE_CC Condition Codes. 47656 (line 6) 47657* cc_status: CC0 Condition Codes. 47658 (line 6) 47659* CC_STATUS_MDEP: CC0 Condition Codes. 47660 (line 16) 47661* CC_STATUS_MDEP_INIT: CC0 Condition Codes. 47662 (line 22) 47663* CDImode: Machine Modes. (line 204) 47664* ceilM2 instruction pattern: Standard Names. (line 822) 47665* CEIL_DIV_EXPR: Unary and Binary Expressions. 47666 (line 6) 47667* CEIL_MOD_EXPR: Unary and Binary Expressions. 47668 (line 6) 47669* CFA_FRAME_BASE_OFFSET: Frame Layout. (line 222) 47670* CFG verification: Maintaining the CFG. 47671 (line 117) 47672* CFG, Control Flow Graph: Control Flow. (line 6) 47673* cfghooks.h: Maintaining the CFG. 47674 (line 6) 47675* cgraph_finalize_function: Parsing pass. (line 51) 47676* chain_circular: GTY Options. (line 158) 47677* chain_next: GTY Options. (line 158) 47678* chain_prev: GTY Options. (line 158) 47679* change_address: Standard Names. (line 47) 47680* CHAR_TYPE_SIZE: Type Layout. (line 38) 47681* check_stack instruction pattern: Standard Names. (line 1612) 47682* CHImode: Machine Modes. (line 204) 47683* CILK_PLUS: Cilk Plus Transformation. 47684 (line 6) 47685* class definitions, register: Register Classes. (line 6) 47686* class preference constraints: Class Preferences. (line 6) 47687* class, scope: Classes. (line 6) 47688* classes of RTX codes: RTL Classes. (line 6) 47689* CLASSTYPE_DECLARED_CLASS: Classes. (line 6) 47690* CLASSTYPE_HAS_MUTABLE: Classes. (line 85) 47691* CLASSTYPE_NON_POD_P: Classes. (line 90) 47692* CLASS_MAX_NREGS: Register Classes. (line 521) 47693* CLASS_TYPE_P: Types for C++. (line 63) 47694* Cleanups: Cleanups. (line 6) 47695* CLEANUP_DECL: Statements for C++. (line 6) 47696* CLEANUP_EXPR: Statements for C++. (line 6) 47697* CLEANUP_POINT_EXPR: Unary and Binary Expressions. 47698 (line 6) 47699* CLEANUP_STMT: Statements for C++. (line 6) 47700* clear_cache instruction pattern: Standard Names. (line 2102) 47701* CLEAR_INSN_CACHE: Trampolines. (line 98) 47702* CLEAR_RATIO: Costs. (line 204) 47703* clobber: Side Effects. (line 106) 47704* clrsb: Arithmetic. (line 215) 47705* clrsbM2 instruction pattern: Standard Names. (line 885) 47706* clz: Arithmetic. (line 222) 47707* clzM2 instruction pattern: Standard Names. (line 901) 47708* CLZ_DEFINED_VALUE_AT_ZERO: Misc. (line 304) 47709* cmpmemM instruction pattern: Standard Names. (line 1066) 47710* cmpstrM instruction pattern: Standard Names. (line 1045) 47711* cmpstrnM instruction pattern: Standard Names. (line 1032) 47712* code generation RTL sequences: Expander Definitions. 47713 (line 6) 47714* code iterators in .md files: Code Iterators. (line 6) 47715* codes, RTL expression: RTL Objects. (line 47) 47716* code_label: Insns. (line 125) 47717* CODE_LABEL: Basic Blocks. (line 50) 47718* code_label and /i: Flags. (line 59) 47719* code_label and /v: Flags. (line 44) 47720* CODE_LABEL_NUMBER: Insns. (line 125) 47721* COImode: Machine Modes. (line 204) 47722* COLLECT2_HOST_INITIALIZATION: Host Misc. (line 32) 47723* COLLECT_EXPORT_LIST: Misc. (line 867) 47724* COLLECT_SHARED_FINI_FUNC: Macros for Initialization. 47725 (line 43) 47726* COLLECT_SHARED_INIT_FUNC: Macros for Initialization. 47727 (line 32) 47728* commit_edge_insertions: Maintaining the CFG. 47729 (line 105) 47730* compare: Arithmetic. (line 46) 47731* compare, canonicalization of: Insn Canonicalizations. 47732 (line 36) 47733* comparison_operator: Machine-Independent Predicates. 47734 (line 110) 47735* compiler passes and files: Passes. (line 6) 47736* complement, bitwise: Arithmetic. (line 154) 47737* COMPLEX_CST: Constant expressions. 47738 (line 6) 47739* COMPLEX_EXPR: Unary and Binary Expressions. 47740 (line 6) 47741* COMPLEX_TYPE: Types. (line 6) 47742* COMPONENT_REF: Storage References. (line 6) 47743* Compound Expressions: Compound Expressions. 47744 (line 6) 47745* Compound Lvalues: Compound Lvalues. (line 6) 47746* COMPOUND_EXPR: Unary and Binary Expressions. 47747 (line 6) 47748* COMPOUND_LITERAL_EXPR: Unary and Binary Expressions. 47749 (line 6) 47750* COMPOUND_LITERAL_EXPR_DECL: Unary and Binary Expressions. 47751 (line 377) 47752* COMPOUND_LITERAL_EXPR_DECL_EXPR: Unary and Binary Expressions. 47753 (line 377) 47754* computed jump: Edges. (line 127) 47755* computing the length of an insn: Insn Lengths. (line 6) 47756* concat: Regs and Memory. (line 381) 47757* concatn: Regs and Memory. (line 387) 47758* cond: Comparisons. (line 90) 47759* cond and attributes: Expressions. (line 37) 47760* condition code register: Regs and Memory. (line 303) 47761* condition code status: Condition Code. (line 6) 47762* condition codes: Comparisons. (line 20) 47763* conditional execution: Conditional Execution. 47764 (line 6) 47765* Conditional Expressions: Conditional Expressions. 47766 (line 6) 47767* conditions, in patterns: Patterns. (line 43) 47768* cond_exec: Side Effects. (line 254) 47769* COND_EXPR: Unary and Binary Expressions. 47770 (line 6) 47771* configuration file: Filesystem. (line 6) 47772* configuration file <1>: Host Misc. (line 6) 47773* configure terms: Configure Terms. (line 6) 47774* CONJ_EXPR: Unary and Binary Expressions. 47775 (line 6) 47776* const: Constants. (line 140) 47777* const0_rtx: Constants. (line 21) 47778* CONST0_RTX: Constants. (line 160) 47779* const1_rtx: Constants. (line 21) 47780* CONST1_RTX: Constants. (line 160) 47781* const2_rtx: Constants. (line 21) 47782* CONST2_RTX: Constants. (line 160) 47783* constant attributes: Constant Attributes. 47784 (line 6) 47785* constant definitions: Constant Definitions. 47786 (line 6) 47787* constants in constraints: Simple Constraints. (line 68) 47788* CONSTANT_ADDRESS_P: Addressing Modes. (line 28) 47789* CONSTANT_ALIGNMENT: Storage Layout. (line 241) 47790* CONSTANT_P: Addressing Modes. (line 35) 47791* CONSTANT_POOL_ADDRESS_P: Flags. (line 10) 47792* CONSTANT_POOL_BEFORE_FUNCTION: Data Output. (line 68) 47793* constm1_rtx: Constants. (line 21) 47794* constraint modifier characters: Modifiers. (line 6) 47795* constraint, matching: Simple Constraints. (line 140) 47796* constraints: Constraints. (line 6) 47797* constraints, defining: Define Constraints. (line 6) 47798* constraints, machine specific: Machine Constraints. 47799 (line 6) 47800* constraints, testing: C Constraint Interface. 47801 (line 6) 47802* constraint_num: C Constraint Interface. 47803 (line 30) 47804* constraint_satisfied_p: C Constraint Interface. 47805 (line 42) 47806* CONSTRUCTOR: Unary and Binary Expressions. 47807 (line 6) 47808* constructors, automatic calls: Collect2. (line 15) 47809* constructors, output of: Initialization. (line 6) 47810* CONST_DECL: Declarations. (line 6) 47811* const_double: Constants. (line 37) 47812* const_double, RTL sharing: Sharing. (line 29) 47813* CONST_DOUBLE_LOW: Constants. (line 54) 47814* const_double_operand: Machine-Independent Predicates. 47815 (line 20) 47816* const_fixed: Constants. (line 93) 47817* const_int: Constants. (line 8) 47818* const_int and attribute tests: Expressions. (line 47) 47819* const_int and attributes: Expressions. (line 10) 47820* const_int, RTL sharing: Sharing. (line 23) 47821* const_int_operand: Machine-Independent Predicates. 47822 (line 15) 47823* const_string: Constants. (line 112) 47824* const_string and attributes: Expressions. (line 20) 47825* const_true_rtx: Constants. (line 31) 47826* const_vector: Constants. (line 100) 47827* const_vector, RTL sharing: Sharing. (line 32) 47828* CONST_WIDE_INT: Constants. (line 67) 47829* CONST_WIDE_INT_ELT: Constants. (line 89) 47830* CONST_WIDE_INT_NUNITS: Constants. (line 84) 47831* CONST_WIDE_INT_VEC: Constants. (line 80) 47832* container: Containers. (line 6) 47833* CONTINUE_STMT: Statements for C++. (line 6) 47834* contributors: Contributors. (line 6) 47835* controlling register usage: Register Basics. (line 73) 47836* controlling the compilation driver: Driver. (line 6) 47837* conventions, run-time: Interface. (line 6) 47838* conversions: Conversions. (line 6) 47839* CONVERT_EXPR: Unary and Binary Expressions. 47840 (line 6) 47841* copysignM3 instruction pattern: Standard Names. (line 865) 47842* copy_rtx: Addressing Modes. (line 189) 47843* copy_rtx_if_shared: Sharing. (line 64) 47844* cosM2 instruction pattern: Standard Names. (line 662) 47845* costs of instructions: Costs. (line 6) 47846* CPLUSPLUS_CPP_SPEC: Driver. (line 50) 47847* CPP_SPEC: Driver. (line 43) 47848* CP_INTEGRAL_TYPE: Types for C++. (line 55) 47849* cp_namespace_decls: Namespaces. (line 49) 47850* CP_TYPE_CONST_NON_VOLATILE_P: Types for C++. (line 33) 47851* CP_TYPE_CONST_P: Types for C++. (line 24) 47852* cp_type_quals: Types for C++. (line 6) 47853* cp_type_quals <1>: Types for C++. (line 16) 47854* CP_TYPE_RESTRICT_P: Types for C++. (line 30) 47855* CP_TYPE_VOLATILE_P: Types for C++. (line 27) 47856* CQImode: Machine Modes. (line 204) 47857* cross compilation and floating point: Floating Point. (line 6) 47858* crtl->args.pops_args: Function Entry. (line 104) 47859* crtl->args.pretend_args_size: Function Entry. (line 110) 47860* crtl->outgoing_args_size: Stack Arguments. (line 48) 47861* CRTSTUFF_T_CFLAGS: Target Fragment. (line 15) 47862* CRTSTUFF_T_CFLAGS_S: Target Fragment. (line 19) 47863* CRT_CALL_STATIC_FUNCTION: Sections. (line 120) 47864* CSImode: Machine Modes. (line 204) 47865* cstoreMODE4 instruction pattern: Standard Names. (line 1287) 47866* CTImode: Machine Modes. (line 204) 47867* ctrapMM4 instruction pattern: Standard Names. (line 1764) 47868* ctz: Arithmetic. (line 230) 47869* ctzM2 instruction pattern: Standard Names. (line 916) 47870* CTZ_DEFINED_VALUE_AT_ZERO: Misc. (line 305) 47871* CUMULATIVE_ARGS: Register Arguments. (line 140) 47872* current_function_is_leaf: Leaf Functions. (line 50) 47873* current_function_uses_only_leaf_regs: Leaf Functions. (line 50) 47874* current_insn_predicate: Conditional Execution. 47875 (line 27) 47876* C_COMMON_OVERRIDE_OPTIONS: Run-time Target. (line 136) 47877* c_register_pragma: Misc. (line 407) 47878* c_register_pragma_with_expansion: Misc. (line 409) 47879* DAmode: Machine Modes. (line 154) 47880* data bypass: Processor pipeline description. 47881 (line 105) 47882* data bypass <1>: Processor pipeline description. 47883 (line 196) 47884* data dependence delays: Processor pipeline description. 47885 (line 6) 47886* Data Dependency Analysis: Dependency analysis. 47887 (line 6) 47888* data structures: Per-Function Data. (line 6) 47889* DATA_ABI_ALIGNMENT: Storage Layout. (line 233) 47890* DATA_ALIGNMENT: Storage Layout. (line 220) 47891* DATA_SECTION_ASM_OP: Sections. (line 52) 47892* DBR_OUTPUT_SEQEND: Instruction Output. (line 133) 47893* dbr_sequence_length: Instruction Output. (line 133) 47894* DBX_BLOCKS_FUNCTION_RELATIVE: DBX Options. (line 100) 47895* DBX_CONTIN_CHAR: DBX Options. (line 63) 47896* DBX_CONTIN_LENGTH: DBX Options. (line 53) 47897* DBX_DEBUGGING_INFO: DBX Options. (line 8) 47898* DBX_FUNCTION_FIRST: DBX Options. (line 94) 47899* DBX_LINES_FUNCTION_RELATIVE: DBX Options. (line 106) 47900* DBX_NO_XREFS: DBX Options. (line 47) 47901* DBX_OUTPUT_MAIN_SOURCE_FILENAME: File Names and DBX. (line 8) 47902* DBX_OUTPUT_MAIN_SOURCE_FILE_END: File Names and DBX. (line 33) 47903* DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END: File Names and DBX. 47904 (line 41) 47905* DBX_OUTPUT_SOURCE_LINE: DBX Hooks. (line 8) 47906* DBX_REGISTER_NUMBER: All Debuggers. (line 8) 47907* DBX_REGPARM_STABS_CODE: DBX Options. (line 84) 47908* DBX_REGPARM_STABS_LETTER: DBX Options. (line 89) 47909* DBX_STATIC_CONST_VAR_CODE: DBX Options. (line 79) 47910* DBX_STATIC_STAB_DATA_SECTION: DBX Options. (line 70) 47911* DBX_TYPE_DECL_STABS_CODE: DBX Options. (line 75) 47912* DBX_USE_BINCL: DBX Options. (line 112) 47913* DCmode: Machine Modes. (line 199) 47914* DDmode: Machine Modes. (line 93) 47915* De Morgan's law: Insn Canonicalizations. 47916 (line 51) 47917* dead_or_set_p: define_peephole. (line 65) 47918* DEBUGGER_ARG_OFFSET: All Debuggers. (line 36) 47919* DEBUGGER_AUTO_OFFSET: All Debuggers. (line 27) 47920* debug_expr: Debug Information. (line 22) 47921* DEBUG_EXPR_DECL: Declarations. (line 6) 47922* debug_insn: Insns. (line 236) 47923* DEBUG_SYMS_TEXT: DBX Options. (line 24) 47924* decimal float library: Decimal float library routines. 47925 (line 6) 47926* declaration: Declarations. (line 6) 47927* declarations, RTL: RTL Declarations. (line 6) 47928* DECLARE_LIBRARY_RENAMES: Library Calls. (line 8) 47929* DECL_ALIGN: Declarations. (line 6) 47930* DECL_ANTICIPATED: Functions for C++. (line 42) 47931* DECL_ARGUMENTS: Function Basics. (line 36) 47932* DECL_ARRAY_DELETE_OPERATOR_P: Functions for C++. (line 158) 47933* DECL_ARTIFICIAL: Working with declarations. 47934 (line 24) 47935* DECL_ARTIFICIAL <1>: Function Basics. (line 6) 47936* DECL_ARTIFICIAL <2>: Function Properties. 47937 (line 47) 47938* DECL_ASSEMBLER_NAME: Function Basics. (line 6) 47939* DECL_ASSEMBLER_NAME <1>: Function Basics. (line 19) 47940* DECL_ATTRIBUTES: Attributes. (line 21) 47941* DECL_BASE_CONSTRUCTOR_P: Functions for C++. (line 88) 47942* DECL_COMPLETE_CONSTRUCTOR_P: Functions for C++. (line 84) 47943* DECL_COMPLETE_DESTRUCTOR_P: Functions for C++. (line 98) 47944* DECL_CONSTRUCTOR_P: Functions for C++. (line 77) 47945* DECL_CONST_MEMFUNC_P: Functions for C++. (line 71) 47946* DECL_CONTEXT: Namespaces. (line 31) 47947* DECL_CONV_FN_P: Functions for C++. (line 105) 47948* DECL_COPY_CONSTRUCTOR_P: Functions for C++. (line 92) 47949* DECL_DESTRUCTOR_P: Functions for C++. (line 95) 47950* DECL_EXTERNAL: Declarations. (line 6) 47951* DECL_EXTERNAL <1>: Function Properties. 47952 (line 25) 47953* DECL_EXTERN_C_FUNCTION_P: Functions for C++. (line 46) 47954* DECL_FUNCTION_MEMBER_P: Functions for C++. (line 61) 47955* DECL_FUNCTION_SPECIFIC_OPTIMIZATION: Function Basics. (line 6) 47956* DECL_FUNCTION_SPECIFIC_OPTIMIZATION <1>: Function Properties. 47957 (line 61) 47958* DECL_FUNCTION_SPECIFIC_TARGET: Function Basics. (line 6) 47959* DECL_FUNCTION_SPECIFIC_TARGET <1>: Function Properties. 47960 (line 55) 47961* DECL_GLOBAL_CTOR_P: Functions for C++. (line 108) 47962* DECL_GLOBAL_DTOR_P: Functions for C++. (line 112) 47963* DECL_INITIAL: Declarations. (line 6) 47964* DECL_INITIAL <1>: Function Basics. (line 51) 47965* DECL_LINKONCE_P: Functions for C++. (line 50) 47966* DECL_LOCAL_FUNCTION_P: Functions for C++. (line 38) 47967* DECL_MAIN_P: Functions for C++. (line 34) 47968* DECL_NAME: Working with declarations. 47969 (line 7) 47970* DECL_NAME <1>: Function Basics. (line 6) 47971* DECL_NAME <2>: Function Basics. (line 9) 47972* DECL_NAME <3>: Namespaces. (line 20) 47973* DECL_NAMESPACE_ALIAS: Namespaces. (line 35) 47974* DECL_NAMESPACE_STD_P: Namespaces. (line 45) 47975* DECL_NONCONVERTING_P: Functions for C++. (line 80) 47976* DECL_NONSTATIC_MEMBER_FUNCTION_P: Functions for C++. (line 68) 47977* DECL_NON_THUNK_FUNCTION_P: Functions for C++. (line 138) 47978* DECL_OVERLOADED_OPERATOR_P: Functions for C++. (line 102) 47979* DECL_PURE_P: Function Properties. 47980 (line 40) 47981* DECL_RESULT: Function Basics. (line 41) 47982* DECL_SAVED_TREE: Function Basics. (line 44) 47983* DECL_SIZE: Declarations. (line 6) 47984* DECL_STATIC_FUNCTION_P: Functions for C++. (line 65) 47985* DECL_STMT: Statements for C++. (line 6) 47986* DECL_STMT_DECL: Statements for C++. (line 6) 47987* DECL_THUNK_P: Functions for C++. (line 116) 47988* DECL_VIRTUAL_P: Function Properties. 47989 (line 44) 47990* DECL_VOLATILE_MEMFUNC_P: Functions for C++. (line 74) 47991* decrement_and_branch_until_zero instruction pattern: Standard Names. 47992 (line 1495) 47993* default: GTY Options. (line 88) 47994* default_file_start: File Framework. (line 8) 47995* DEFAULT_GDB_EXTENSIONS: DBX Options. (line 17) 47996* DEFAULT_PCC_STRUCT_RETURN: Aggregate Return. (line 34) 47997* DEFAULT_SIGNED_CHAR: Type Layout. (line 123) 47998* define_address_constraint: Define Constraints. (line 113) 47999* define_asm_attributes: Tagging Insns. (line 73) 48000* define_attr: Defining Attributes. 48001 (line 6) 48002* define_automaton: Processor pipeline description. 48003 (line 53) 48004* define_bypass: Processor pipeline description. 48005 (line 196) 48006* define_code_attr: Code Iterators. (line 6) 48007* define_code_iterator: Code Iterators. (line 6) 48008* define_cond_exec: Conditional Execution. 48009 (line 13) 48010* define_constants: Constant Definitions. 48011 (line 6) 48012* define_constraint: Define Constraints. (line 45) 48013* define_cpu_unit: Processor pipeline description. 48014 (line 68) 48015* define_c_enum: Constant Definitions. 48016 (line 49) 48017* define_delay: Delay Slots. (line 25) 48018* define_enum: Constant Definitions. 48019 (line 118) 48020* define_enum_attr: Defining Attributes. 48021 (line 83) 48022* define_enum_attr <1>: Constant Definitions. 48023 (line 136) 48024* define_expand: Expander Definitions. 48025 (line 11) 48026* define_insn: Patterns. (line 6) 48027* define_insn example: Example. (line 6) 48028* define_insn_and_split: Insn Splitting. (line 170) 48029* define_insn_reservation: Processor pipeline description. 48030 (line 105) 48031* define_int_attr: Int Iterators. (line 6) 48032* define_int_iterator: Int Iterators. (line 6) 48033* define_memory_constraint: Define Constraints. (line 80) 48034* define_mode_attr: Substitutions. (line 6) 48035* define_mode_iterator: Defining Mode Iterators. 48036 (line 6) 48037* define_peephole: define_peephole. (line 6) 48038* define_peephole2: define_peephole2. (line 6) 48039* define_predicate: Defining Predicates. 48040 (line 6) 48041* define_query_cpu_unit: Processor pipeline description. 48042 (line 90) 48043* define_register_constraint: Define Constraints. (line 26) 48044* define_reservation: Processor pipeline description. 48045 (line 185) 48046* define_special_memory_constraint: Define Constraints. (line 99) 48047* define_special_predicate: Defining Predicates. 48048 (line 6) 48049* define_split: Insn Splitting. (line 32) 48050* define_subst: Define Subst. (line 6) 48051* define_subst <1>: Define Subst Example. 48052 (line 6) 48053* define_subst <2>: Define Subst Pattern Matching. 48054 (line 6) 48055* define_subst <3>: Define Subst Output Template. 48056 (line 6) 48057* define_subst <4>: Define Subst. (line 14) 48058* define_subst <5>: Subst Iterators. (line 6) 48059* define_subst_attr: Subst Iterators. (line 6) 48060* define_subst_attr <1>: Subst Iterators. (line 26) 48061* defining attributes and their values: Defining Attributes. 48062 (line 6) 48063* defining constraints: Define Constraints. (line 6) 48064* defining jump instruction patterns: Jump Patterns. (line 6) 48065* defining looping instruction patterns: Looping Patterns. (line 6) 48066* defining peephole optimizers: Peephole Definitions. 48067 (line 6) 48068* defining predicates: Defining Predicates. 48069 (line 6) 48070* defining RTL sequences for code generation: Expander Definitions. 48071 (line 6) 48072* delay slots, defining: Delay Slots. (line 6) 48073* deletable: GTY Options. (line 132) 48074* DELETE_IF_ORDINARY: Filesystem. (line 79) 48075* Dependent Patterns: Dependent Patterns. (line 6) 48076* desc: GTY Options. (line 88) 48077* destructors, output of: Initialization. (line 6) 48078* deterministic finite state automaton: Processor pipeline description. 48079 (line 6) 48080* deterministic finite state automaton <1>: Processor pipeline description. 48081 (line 304) 48082* DFmode: Machine Modes. (line 76) 48083* digits in constraint: Simple Constraints. (line 128) 48084* DImode: Machine Modes. (line 45) 48085* directory options .md: Including Patterns. (line 47) 48086* DIR_SEPARATOR: Filesystem. (line 18) 48087* DIR_SEPARATOR_2: Filesystem. (line 19) 48088* disabling certain registers: Register Basics. (line 73) 48089* dispatch table: Dispatch Tables. (line 8) 48090* div: Arithmetic. (line 116) 48091* div and attributes: Expressions. (line 83) 48092* division: Arithmetic. (line 116) 48093* division <1>: Arithmetic. (line 130) 48094* division <2>: Arithmetic. (line 136) 48095* divM3 instruction pattern: Standard Names. (line 301) 48096* divmodM4 instruction pattern: Standard Names. (line 559) 48097* dollar sign: Multi-Alternative. (line 57) 48098* DOLLARS_IN_IDENTIFIERS: Misc. (line 452) 48099* doloop_begin instruction pattern: Standard Names. (line 1517) 48100* doloop_end instruction pattern: Standard Names. (line 1505) 48101* DONE: Expander Definitions. 48102 (line 77) 48103* DONT_USE_BUILTIN_SETJMP: Exception Region Output. 48104 (line 78) 48105* DOUBLE_TYPE_SIZE: Type Layout. (line 52) 48106* DO_BODY: Statements for C++. (line 6) 48107* DO_COND: Statements for C++. (line 6) 48108* DO_STMT: Statements for C++. (line 6) 48109* DQmode: Machine Modes. (line 118) 48110* driver: Driver. (line 6) 48111* DRIVER_SELF_SPECS: Driver. (line 8) 48112* dump examples: Dump examples. (line 6) 48113* dump setup: Dump setup. (line 6) 48114* dump types: Dump types. (line 6) 48115* dump verbosity: Dump output verbosity. 48116 (line 6) 48117* DUMPFILE_FORMAT: Filesystem. (line 67) 48118* dump_basic_block: Dump types. (line 29) 48119* dump_generic_expr: Dump types. (line 31) 48120* dump_gimple_stmt: Dump types. (line 33) 48121* dump_printf: Dump types. (line 6) 48122* DWARF2_ASM_LINE_DEBUG_INFO: SDB and DWARF. (line 49) 48123* DWARF2_DEBUGGING_INFO: SDB and DWARF. (line 12) 48124* DWARF2_FRAME_INFO: SDB and DWARF. (line 29) 48125* DWARF2_FRAME_REG_OUT: Frame Registers. (line 151) 48126* DWARF2_UNWIND_INFO: Exception Region Output. 48127 (line 39) 48128* DWARF_ALT_FRAME_RETURN_COLUMN: Frame Layout. (line 148) 48129* DWARF_CIE_DATA_ALIGNMENT: Exception Region Output. 48130 (line 90) 48131* DWARF_FRAME_REGISTERS: Frame Registers. (line 109) 48132* DWARF_FRAME_REGNUM: Frame Registers. (line 143) 48133* DWARF_REG_TO_UNWIND_COLUMN: Frame Registers. (line 134) 48134* DWARF_ZERO_REG: Frame Layout. (line 159) 48135* DYNAMIC_CHAIN_ADDRESS: Frame Layout. (line 86) 48136* E in constraint: Simple Constraints. (line 87) 48137* earlyclobber operand: Modifiers. (line 25) 48138* edge: Edges. (line 6) 48139* edge in the flow graph: Edges. (line 6) 48140* edge iterators: Edges. (line 15) 48141* edge splitting: Maintaining the CFG. 48142 (line 105) 48143* EDGE_ABNORMAL: Edges. (line 127) 48144* EDGE_ABNORMAL, EDGE_ABNORMAL_CALL: Edges. (line 171) 48145* EDGE_ABNORMAL, EDGE_EH: Edges. (line 95) 48146* EDGE_ABNORMAL, EDGE_SIBCALL: Edges. (line 121) 48147* EDGE_FALLTHRU, force_nonfallthru: Edges. (line 85) 48148* EDOM, implicit usage: Library Calls. (line 59) 48149* EH_FRAME_SECTION_NAME: Exception Region Output. 48150 (line 9) 48151* EH_FRAME_THROUGH_COLLECT2: Exception Region Output. 48152 (line 19) 48153* eh_return instruction pattern: Standard Names. (line 1698) 48154* EH_RETURN_DATA_REGNO: Exception Handling. (line 6) 48155* EH_RETURN_HANDLER_RTX: Exception Handling. (line 38) 48156* EH_RETURN_STACKADJ_RTX: Exception Handling. (line 21) 48157* EH_TABLES_CAN_BE_READ_ONLY: Exception Region Output. 48158 (line 29) 48159* EH_USES: Function Entry. (line 155) 48160* ei_edge: Edges. (line 43) 48161* ei_end_p: Edges. (line 27) 48162* ei_last: Edges. (line 23) 48163* ei_next: Edges. (line 35) 48164* ei_one_before_end_p: Edges. (line 31) 48165* ei_prev: Edges. (line 39) 48166* ei_safe_safe: Edges. (line 47) 48167* ei_start: Edges. (line 19) 48168* ELIMINABLE_REGS: Elimination. (line 46) 48169* ELSE_CLAUSE: Statements for C++. (line 6) 48170* Embedded C: Fixed-point fractional library routines. 48171 (line 6) 48172* Empty Statements: Empty Statements. (line 6) 48173* EMPTY_CLASS_EXPR: Statements for C++. (line 6) 48174* EMPTY_FIELD_BOUNDARY: Storage Layout. (line 311) 48175* Emulated TLS: Emulated TLS. (line 6) 48176* enabled: Disable Insn Alternatives. 48177 (line 6) 48178* ENDFILE_SPEC: Driver. (line 155) 48179* endianness: Portability. (line 20) 48180* ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR: Basic Blocks. (line 10) 48181* enum reg_class: Register Classes. (line 70) 48182* ENUMERAL_TYPE: Types. (line 6) 48183* enumerations: Constant Definitions. 48184 (line 49) 48185* epilogue: Function Entry. (line 6) 48186* epilogue instruction pattern: Standard Names. (line 1736) 48187* EPILOGUE_USES: Function Entry. (line 149) 48188* eq: Comparisons. (line 52) 48189* eq and attributes: Expressions. (line 83) 48190* equal: Comparisons. (line 52) 48191* eq_attr: Expressions. (line 104) 48192* EQ_EXPR: Unary and Binary Expressions. 48193 (line 6) 48194* errno, implicit usage: Library Calls. (line 71) 48195* EXACT_DIV_EXPR: Unary and Binary Expressions. 48196 (line 6) 48197* examining SSA_NAMEs: SSA. (line 182) 48198* exception handling: Edges. (line 95) 48199* exception handling <1>: Exception Handling. (line 6) 48200* exception_receiver instruction pattern: Standard Names. (line 1663) 48201* exclamation point: Multi-Alternative. (line 48) 48202* exclusion_set: Processor pipeline description. 48203 (line 223) 48204* exclusive-or, bitwise: Arithmetic. (line 168) 48205* EXIT_EXPR: Unary and Binary Expressions. 48206 (line 6) 48207* EXIT_IGNORE_STACK: Function Entry. (line 137) 48208* exp10M2 instruction pattern: Standard Names. (line 726) 48209* exp2M2 instruction pattern: Standard Names. (line 733) 48210* expander definitions: Expander Definitions. 48211 (line 6) 48212* expm1M2 instruction pattern: Standard Names. (line 716) 48213* expM2 instruction pattern: Standard Names. (line 709) 48214* expression: Expression trees. (line 6) 48215* expression codes: RTL Objects. (line 47) 48216* EXPR_FILENAME: Working with declarations. 48217 (line 14) 48218* EXPR_LINENO: Working with declarations. 48219 (line 20) 48220* expr_list: Insns. (line 540) 48221* EXPR_STMT: Statements for C++. (line 6) 48222* EXPR_STMT_EXPR: Statements for C++. (line 6) 48223* extendMN2 instruction pattern: Standard Names. (line 1124) 48224* extensible constraints: Simple Constraints. (line 171) 48225* EXTRA_SPECS: Driver. (line 182) 48226* extv instruction pattern: Standard Names. (line 1215) 48227* extvM instruction pattern: Standard Names. (line 1160) 48228* extvmisalignM instruction pattern: Standard Names. (line 1170) 48229* extzv instruction pattern: Standard Names. (line 1233) 48230* extzvM instruction pattern: Standard Names. (line 1184) 48231* extzvmisalignM instruction pattern: Standard Names. (line 1187) 48232* F in constraint: Simple Constraints. (line 92) 48233* FAIL: Expander Definitions. 48234 (line 83) 48235* fall-thru: Edges. (line 68) 48236* FATAL_EXIT_CODE: Host Misc. (line 6) 48237* FDL, GNU Free Documentation License: GNU Free Documentation License. 48238 (line 6) 48239* features, optional, in system conventions: Run-time Target. 48240 (line 59) 48241* ffs: Arithmetic. (line 210) 48242* ffsM2 instruction pattern: Standard Names. (line 872) 48243* FIELD_DECL: Declarations. (line 6) 48244* files and passes of the compiler: Passes. (line 6) 48245* files, generated: Files. (line 6) 48246* file_end_indicate_exec_stack: File Framework. (line 39) 48247* final_absence_set: Processor pipeline description. 48248 (line 223) 48249* FINAL_PRESCAN_INSN: Instruction Output. (line 60) 48250* final_presence_set: Processor pipeline description. 48251 (line 223) 48252* final_sequence: Instruction Output. (line 144) 48253* FIND_BASE_TERM: Addressing Modes. (line 117) 48254* finite state automaton minimization: Processor pipeline description. 48255 (line 304) 48256* FINI_ARRAY_SECTION_ASM_OP: Sections. (line 113) 48257* FINI_SECTION_ASM_OP: Sections. (line 98) 48258* FIRST_PARM_OFFSET: Frame Layout. (line 61) 48259* FIRST_PARM_OFFSET and virtual registers: Regs and Memory. (line 65) 48260* FIRST_PSEUDO_REGISTER: Register Basics. (line 8) 48261* FIRST_STACK_REG: Stack Registers. (line 26) 48262* FIRST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 48263* fix: Conversions. (line 66) 48264* fixed register: Register Basics. (line 15) 48265* fixed-point fractional library: Fixed-point fractional library routines. 48266 (line 6) 48267* FIXED_CONVERT_EXPR: Unary and Binary Expressions. 48268 (line 6) 48269* FIXED_CST: Constant expressions. 48270 (line 6) 48271* FIXED_POINT_TYPE: Types. (line 6) 48272* FIXED_REGISTERS: Register Basics. (line 14) 48273* fixed_regs: Register Basics. (line 59) 48274* fixMN2 instruction pattern: Standard Names. (line 1091) 48275* fixunsMN2 instruction pattern: Standard Names. (line 1100) 48276* fixuns_truncMN2 instruction pattern: Standard Names. (line 1115) 48277* fix_truncMN2 instruction pattern: Standard Names. (line 1111) 48278* FIX_TRUNC_EXPR: Unary and Binary Expressions. 48279 (line 6) 48280* flags in RTL expression: Flags. (line 6) 48281* float: Conversions. (line 58) 48282* floating point and cross compilation: Floating Point. (line 6) 48283* floatMN2 instruction pattern: Standard Names. (line 1083) 48284* floatunsMN2 instruction pattern: Standard Names. (line 1087) 48285* FLOAT_EXPR: Unary and Binary Expressions. 48286 (line 6) 48287* float_extend: Conversions. (line 33) 48288* FLOAT_LIB_COMPARE_RETURNS_BOOL: Library Calls. (line 32) 48289* FLOAT_STORE_FLAG_VALUE: Misc. (line 286) 48290* float_truncate: Conversions. (line 53) 48291* FLOAT_TYPE_SIZE: Type Layout. (line 48) 48292* FLOAT_WORDS_BIG_ENDIAN: Storage Layout. (line 41) 48293* FLOAT_WORDS_BIG_ENDIAN, (lack of) effect on subreg: Regs and Memory. 48294 (line 224) 48295* floorM2 instruction pattern: Standard Names. (line 800) 48296* FLOOR_DIV_EXPR: Unary and Binary Expressions. 48297 (line 6) 48298* FLOOR_MOD_EXPR: Unary and Binary Expressions. 48299 (line 6) 48300* flow-insensitive alias analysis: Alias analysis. (line 6) 48301* flow-sensitive alias analysis: Alias analysis. (line 6) 48302* fma: Arithmetic. (line 112) 48303* fmaM4 instruction pattern: Standard Names. (line 338) 48304* fmaxM3 instruction pattern: Standard Names. (line 369) 48305* fminM3 instruction pattern: Standard Names. (line 369) 48306* fmodM3 instruction pattern: Standard Names. (line 632) 48307* fmsM4 instruction pattern: Standard Names. (line 345) 48308* fnmaM4 instruction pattern: Standard Names. (line 351) 48309* fnmsM4 instruction pattern: Standard Names. (line 357) 48310* FORCE_CODE_SECTION_ALIGN: Sections. (line 144) 48311* force_reg: Standard Names. (line 36) 48312* FOR_BODY: Statements for C++. (line 6) 48313* FOR_COND: Statements for C++. (line 6) 48314* FOR_EXPR: Statements for C++. (line 6) 48315* FOR_INIT_STMT: Statements for C++. (line 6) 48316* FOR_STMT: Statements for C++. (line 6) 48317* for_user: GTY Options. (line 82) 48318* fractional types: Fixed-point fractional library routines. 48319 (line 6) 48320* fractMN2 instruction pattern: Standard Names. (line 1133) 48321* fractunsMN2 instruction pattern: Standard Names. (line 1148) 48322* fract_convert: Conversions. (line 82) 48323* FRACT_TYPE_SIZE: Type Layout. (line 67) 48324* frame layout: Frame Layout. (line 6) 48325* FRAME_ADDR_RTX: Frame Layout. (line 110) 48326* FRAME_GROWS_DOWNWARD: Frame Layout. (line 26) 48327* FRAME_GROWS_DOWNWARD and virtual registers: Regs and Memory. 48328 (line 69) 48329* FRAME_POINTER_CFA_OFFSET: Frame Layout. (line 208) 48330* frame_pointer_needed: Function Entry. (line 34) 48331* FRAME_POINTER_REGNUM: Frame Registers. (line 13) 48332* FRAME_POINTER_REGNUM and virtual registers: Regs and Memory. 48333 (line 74) 48334* frame_pointer_rtx: Frame Registers. (line 104) 48335* frame_related: Flags. (line 229) 48336* frame_related, in insn, call_insn, jump_insn, barrier, and set: Flags. 48337 (line 107) 48338* frame_related, in mem: Flags. (line 85) 48339* frame_related, in reg: Flags. (line 94) 48340* frame_related, in symbol_ref: Flags. (line 165) 48341* frequency, count, BB_FREQ_BASE: Profile information. 48342 (line 30) 48343* ftruncM2 instruction pattern: Standard Names. (line 1106) 48344* function: Functions. (line 6) 48345* function <1>: Functions for C++. (line 6) 48346* function call conventions: Interface. (line 6) 48347* function entry and exit: Function Entry. (line 6) 48348* function entry point, alternate function entry point: Edges. 48349 (line 180) 48350* function properties: Function Properties. 48351 (line 6) 48352* function-call insns: Calls. (line 6) 48353* functions, leaf: Leaf Functions. (line 6) 48354* FUNCTION_ARG_OFFSET: Register Arguments. (line 210) 48355* FUNCTION_ARG_PADDING: Register Arguments. (line 217) 48356* FUNCTION_ARG_REGNO_P: Register Arguments. (line 265) 48357* FUNCTION_BOUNDARY: Storage Layout. (line 159) 48358* FUNCTION_DECL: Functions. (line 6) 48359* FUNCTION_DECL <1>: Functions for C++. (line 6) 48360* FUNCTION_MODE: Misc. (line 341) 48361* FUNCTION_PROFILER: Profiling. (line 8) 48362* FUNCTION_TYPE: Types. (line 6) 48363* FUNCTION_VALUE: Scalar Return. (line 52) 48364* FUNCTION_VALUE_REGNO_P: Scalar Return. (line 78) 48365* fundamental type: Types. (line 6) 48366* G in constraint: Simple Constraints. (line 96) 48367* g in constraint: Simple Constraints. (line 118) 48368* garbage collector, invocation: Invoking the garbage collector. 48369 (line 6) 48370* garbage collector, troubleshooting: Troubleshooting. (line 6) 48371* GCC and portability: Portability. (line 6) 48372* GCC_DRIVER_HOST_INITIALIZATION: Host Misc. (line 36) 48373* gcov_type: Profile information. 48374 (line 41) 48375* ge: Comparisons. (line 72) 48376* ge and attributes: Expressions. (line 83) 48377* gencodes: RTL passes. (line 18) 48378* general_operand: Machine-Independent Predicates. 48379 (line 104) 48380* GENERAL_REGS: Register Classes. (line 22) 48381* generated files: Files. (line 6) 48382* generating assembler output: Output Statement. (line 6) 48383* generating insns: RTL Template. (line 6) 48384* GENERIC: Parsing pass. (line 6) 48385* GENERIC <1>: GENERIC. (line 6) 48386* generic predicates: Machine-Independent Predicates. 48387 (line 6) 48388* genflags: RTL passes. (line 18) 48389* GEN_ERRNO_RTX: Library Calls. (line 71) 48390* get_attr: Expressions. (line 99) 48391* get_attr_length: Insn Lengths. (line 52) 48392* GET_CLASS_NARROWEST_MODE: Machine Modes. (line 344) 48393* GET_CODE: RTL Objects. (line 47) 48394* get_frame_size: Elimination. (line 34) 48395* get_insns: Insns. (line 34) 48396* get_last_insn: Insns. (line 34) 48397* GET_MODE: Machine Modes. (line 291) 48398* GET_MODE_ALIGNMENT: Machine Modes. (line 331) 48399* GET_MODE_BITSIZE: Machine Modes. (line 315) 48400* GET_MODE_CLASS: Machine Modes. (line 305) 48401* GET_MODE_FBIT: Machine Modes. (line 322) 48402* GET_MODE_IBIT: Machine Modes. (line 318) 48403* GET_MODE_MASK: Machine Modes. (line 326) 48404* GET_MODE_NAME: Machine Modes. (line 302) 48405* GET_MODE_NUNITS: Machine Modes. (line 340) 48406* GET_MODE_SIZE: Machine Modes. (line 312) 48407* GET_MODE_UNIT_SIZE: Machine Modes. (line 334) 48408* GET_MODE_WIDER_MODE: Machine Modes. (line 308) 48409* GET_RTX_CLASS: RTL Classes. (line 6) 48410* GET_RTX_FORMAT: RTL Classes. (line 131) 48411* GET_RTX_LENGTH: RTL Classes. (line 128) 48412* get_thread_pointerMODE instruction pattern: Standard Names. 48413 (line 2073) 48414* geu: Comparisons. (line 72) 48415* geu and attributes: Expressions. (line 83) 48416* GE_EXPR: Unary and Binary Expressions. 48417 (line 6) 48418* GGC: Type Information. (line 6) 48419* ggc_collect: Invoking the garbage collector. 48420 (line 6) 48421* GIMPLE: Parsing pass. (line 13) 48422* GIMPLE <1>: Gimplification pass. 48423 (line 6) 48424* GIMPLE <2>: GIMPLE. (line 6) 48425* gimple: Tuple representation. 48426 (line 14) 48427* GIMPLE API: GIMPLE API. (line 6) 48428* GIMPLE class hierarchy: Class hierarchy of GIMPLE statements. 48429 (line 6) 48430* GIMPLE Exception Handling: GIMPLE Exception Handling. 48431 (line 6) 48432* GIMPLE instruction set: GIMPLE instruction set. 48433 (line 6) 48434* GIMPLE sequences: GIMPLE sequences. (line 6) 48435* GIMPLE statement iterators: Basic Blocks. (line 78) 48436* GIMPLE statement iterators <1>: Maintaining the CFG. 48437 (line 33) 48438* gimple_addresses_taken: Manipulating GIMPLE statements. 48439 (line 89) 48440* GIMPLE_ASM: GIMPLE_ASM. (line 6) 48441* gimple_asm_clobber_op: GIMPLE_ASM. (line 39) 48442* gimple_asm_input_op: GIMPLE_ASM. (line 23) 48443* gimple_asm_nclobbers: GIMPLE_ASM. (line 20) 48444* gimple_asm_ninputs: GIMPLE_ASM. (line 14) 48445* gimple_asm_noutputs: GIMPLE_ASM. (line 17) 48446* gimple_asm_output_op: GIMPLE_ASM. (line 31) 48447* gimple_asm_set_clobber_op: GIMPLE_ASM. (line 43) 48448* gimple_asm_set_input_op: GIMPLE_ASM. (line 27) 48449* gimple_asm_set_output_op: GIMPLE_ASM. (line 35) 48450* gimple_asm_set_volatile: GIMPLE_ASM. (line 54) 48451* gimple_asm_string: GIMPLE_ASM. (line 47) 48452* gimple_asm_volatile_p: GIMPLE_ASM. (line 51) 48453* GIMPLE_ASSIGN: GIMPLE_ASSIGN. (line 6) 48454* gimple_assign_cast_p: Logical Operators. (line 158) 48455* gimple_assign_cast_p <1>: GIMPLE_ASSIGN. (line 104) 48456* gimple_assign_lhs: GIMPLE_ASSIGN. (line 62) 48457* gimple_assign_lhs_ptr: GIMPLE_ASSIGN. (line 65) 48458* gimple_assign_rhs1: GIMPLE_ASSIGN. (line 68) 48459* gimple_assign_rhs1_ptr: GIMPLE_ASSIGN. (line 71) 48460* gimple_assign_rhs2: GIMPLE_ASSIGN. (line 75) 48461* gimple_assign_rhs2_ptr: GIMPLE_ASSIGN. (line 78) 48462* gimple_assign_rhs3: GIMPLE_ASSIGN. (line 82) 48463* gimple_assign_rhs3_ptr: GIMPLE_ASSIGN. (line 85) 48464* gimple_assign_rhs_class: GIMPLE_ASSIGN. (line 56) 48465* gimple_assign_rhs_code: GIMPLE_ASSIGN. (line 52) 48466* gimple_assign_set_lhs: GIMPLE_ASSIGN. (line 89) 48467* gimple_assign_set_rhs1: GIMPLE_ASSIGN. (line 92) 48468* gimple_assign_set_rhs2: GIMPLE_ASSIGN. (line 96) 48469* gimple_assign_set_rhs3: GIMPLE_ASSIGN. (line 100) 48470* gimple_bb: Manipulating GIMPLE statements. 48471 (line 17) 48472* GIMPLE_BIND: GIMPLE_BIND. (line 6) 48473* gimple_bind_add_seq: GIMPLE_BIND. (line 34) 48474* gimple_bind_add_stmt: GIMPLE_BIND. (line 31) 48475* gimple_bind_append_vars: GIMPLE_BIND. (line 18) 48476* gimple_bind_block: GIMPLE_BIND. (line 39) 48477* gimple_bind_body: GIMPLE_BIND. (line 22) 48478* gimple_bind_set_block: GIMPLE_BIND. (line 44) 48479* gimple_bind_set_body: GIMPLE_BIND. (line 26) 48480* gimple_bind_set_vars: GIMPLE_BIND. (line 14) 48481* gimple_bind_vars: GIMPLE_BIND. (line 11) 48482* gimple_block: Manipulating GIMPLE statements. 48483 (line 20) 48484* gimple_build: GIMPLE API. (line 34) 48485* gimple_build <1>: GIMPLE API. (line 36) 48486* gimple_build <2>: GIMPLE API. (line 38) 48487* gimple_build <3>: GIMPLE API. (line 41) 48488* gimple_build <4>: GIMPLE API. (line 44) 48489* gimple_build <5>: GIMPLE API. (line 47) 48490* gimple_build_nop: GIMPLE_NOP. (line 6) 48491* gimple_build_omp_master: GIMPLE_OMP_MASTER. (line 6) 48492* gimple_build_omp_ordered: GIMPLE_OMP_ORDERED. (line 6) 48493* gimple_build_omp_return: GIMPLE_OMP_RETURN. (line 6) 48494* gimple_build_omp_section: GIMPLE_OMP_SECTION. (line 6) 48495* gimple_build_omp_sections_switch: GIMPLE_OMP_SECTIONS. 48496 (line 13) 48497* gimple_build_wce: GIMPLE_WITH_CLEANUP_EXPR. 48498 (line 6) 48499* GIMPLE_CALL: GIMPLE_CALL. (line 6) 48500* gimple_call_arg: GIMPLE_CALL. (line 65) 48501* gimple_call_arg_ptr: GIMPLE_CALL. (line 69) 48502* gimple_call_chain: GIMPLE_CALL. (line 56) 48503* gimple_call_copy_skip_args: GIMPLE_CALL. (line 90) 48504* gimple_call_fn: GIMPLE_CALL. (line 37) 48505* gimple_call_fndecl: GIMPLE_CALL. (line 45) 48506* gimple_call_lhs: GIMPLE_CALL. (line 28) 48507* gimple_call_lhs_ptr: GIMPLE_CALL. (line 31) 48508* gimple_call_noreturn_p: GIMPLE_CALL. (line 87) 48509* gimple_call_num_args: GIMPLE_CALL. (line 62) 48510* gimple_call_return_type: GIMPLE_CALL. (line 53) 48511* gimple_call_set_arg: GIMPLE_CALL. (line 74) 48512* gimple_call_set_chain: GIMPLE_CALL. (line 59) 48513* gimple_call_set_fn: GIMPLE_CALL. (line 41) 48514* gimple_call_set_fndecl: GIMPLE_CALL. (line 50) 48515* gimple_call_set_lhs: GIMPLE_CALL. (line 34) 48516* gimple_call_set_tail: GIMPLE_CALL. (line 79) 48517* gimple_call_tail_p: GIMPLE_CALL. (line 84) 48518* GIMPLE_CATCH: GIMPLE_CATCH. (line 6) 48519* gimple_catch_handler: GIMPLE_CATCH. (line 19) 48520* gimple_catch_set_handler: GIMPLE_CATCH. (line 26) 48521* gimple_catch_set_types: GIMPLE_CATCH. (line 23) 48522* gimple_catch_types: GIMPLE_CATCH. (line 12) 48523* gimple_catch_types_ptr: GIMPLE_CATCH. (line 15) 48524* gimple_code: Manipulating GIMPLE statements. 48525 (line 14) 48526* GIMPLE_COND: GIMPLE_COND. (line 6) 48527* gimple_cond_code: GIMPLE_COND. (line 20) 48528* gimple_cond_false_label: GIMPLE_COND. (line 59) 48529* gimple_cond_lhs: GIMPLE_COND. (line 29) 48530* gimple_cond_make_false: GIMPLE_COND. (line 63) 48531* gimple_cond_make_true: GIMPLE_COND. (line 66) 48532* gimple_cond_rhs: GIMPLE_COND. (line 37) 48533* gimple_cond_set_code: GIMPLE_COND. (line 24) 48534* gimple_cond_set_false_label: GIMPLE_COND. (line 54) 48535* gimple_cond_set_lhs: GIMPLE_COND. (line 33) 48536* gimple_cond_set_rhs: GIMPLE_COND. (line 41) 48537* gimple_cond_set_true_label: GIMPLE_COND. (line 49) 48538* gimple_cond_true_label: GIMPLE_COND. (line 45) 48539* gimple_convert: GIMPLE API. (line 50) 48540* gimple_copy: Manipulating GIMPLE statements. 48541 (line 146) 48542* GIMPLE_DEBUG: GIMPLE_DEBUG. (line 6) 48543* GIMPLE_DEBUG_BIND: GIMPLE_DEBUG. (line 6) 48544* gimple_debug_bind_get_value: GIMPLE_DEBUG. (line 46) 48545* gimple_debug_bind_get_value_ptr: GIMPLE_DEBUG. (line 50) 48546* gimple_debug_bind_get_var: GIMPLE_DEBUG. (line 43) 48547* gimple_debug_bind_has_value_p: GIMPLE_DEBUG. (line 68) 48548* gimple_debug_bind_p: Logical Operators. (line 162) 48549* gimple_debug_bind_reset_value: GIMPLE_DEBUG. (line 64) 48550* gimple_debug_bind_set_value: GIMPLE_DEBUG. (line 59) 48551* gimple_debug_bind_set_var: GIMPLE_DEBUG. (line 55) 48552* gimple_def_ops: Manipulating GIMPLE statements. 48553 (line 93) 48554* GIMPLE_EH_FILTER: GIMPLE_EH_FILTER. (line 6) 48555* gimple_eh_filter_failure: GIMPLE_EH_FILTER. (line 18) 48556* gimple_eh_filter_set_failure: GIMPLE_EH_FILTER. (line 27) 48557* gimple_eh_filter_set_types: GIMPLE_EH_FILTER. (line 22) 48558* gimple_eh_filter_types: GIMPLE_EH_FILTER. (line 11) 48559* gimple_eh_filter_types_ptr: GIMPLE_EH_FILTER. (line 14) 48560* gimple_eh_must_not_throw_fndecl: GIMPLE_EH_FILTER. (line 32) 48561* gimple_eh_must_not_throw_set_fndecl: GIMPLE_EH_FILTER. (line 36) 48562* gimple_expr_code: Manipulating GIMPLE statements. 48563 (line 30) 48564* gimple_expr_type: Manipulating GIMPLE statements. 48565 (line 23) 48566* GIMPLE_GOTO: GIMPLE_GOTO. (line 6) 48567* gimple_goto_dest: GIMPLE_GOTO. (line 9) 48568* gimple_goto_set_dest: GIMPLE_GOTO. (line 12) 48569* gimple_has_mem_ops: Manipulating GIMPLE statements. 48570 (line 71) 48571* gimple_has_ops: Manipulating GIMPLE statements. 48572 (line 68) 48573* gimple_has_volatile_ops: Manipulating GIMPLE statements. 48574 (line 133) 48575* GIMPLE_LABEL: GIMPLE_LABEL. (line 6) 48576* gimple_label_label: GIMPLE_LABEL. (line 10) 48577* gimple_label_set_label: GIMPLE_LABEL. (line 13) 48578* gimple_loaded_syms: Manipulating GIMPLE statements. 48579 (line 121) 48580* gimple_locus: Manipulating GIMPLE statements. 48581 (line 41) 48582* gimple_locus_empty_p: Manipulating GIMPLE statements. 48583 (line 47) 48584* gimple_modified_p: Manipulating GIMPLE statements. 48585 (line 129) 48586* GIMPLE_NOP: GIMPLE_NOP. (line 6) 48587* gimple_nop_p: GIMPLE_NOP. (line 9) 48588* gimple_no_warning_p: Manipulating GIMPLE statements. 48589 (line 50) 48590* gimple_num_ops: Logical Operators. (line 76) 48591* gimple_num_ops <1>: Manipulating GIMPLE statements. 48592 (line 74) 48593* GIMPLE_OMP_ATOMIC_LOAD: GIMPLE_OMP_ATOMIC_LOAD. 48594 (line 6) 48595* gimple_omp_atomic_load_lhs: GIMPLE_OMP_ATOMIC_LOAD. 48596 (line 16) 48597* gimple_omp_atomic_load_rhs: GIMPLE_OMP_ATOMIC_LOAD. 48598 (line 24) 48599* gimple_omp_atomic_load_set_lhs: GIMPLE_OMP_ATOMIC_LOAD. 48600 (line 12) 48601* gimple_omp_atomic_load_set_rhs: GIMPLE_OMP_ATOMIC_LOAD. 48602 (line 20) 48603* GIMPLE_OMP_ATOMIC_STORE: GIMPLE_OMP_ATOMIC_STORE. 48604 (line 6) 48605* gimple_omp_atomic_store_set_val: GIMPLE_OMP_ATOMIC_STORE. 48606 (line 11) 48607* gimple_omp_atomic_store_val: GIMPLE_OMP_ATOMIC_STORE. 48608 (line 15) 48609* gimple_omp_body: GIMPLE_OMP_PARALLEL. 48610 (line 23) 48611* GIMPLE_OMP_CONTINUE: GIMPLE_OMP_CONTINUE. 48612 (line 6) 48613* gimple_omp_continue_control_def: GIMPLE_OMP_CONTINUE. 48614 (line 12) 48615* gimple_omp_continue_control_def_ptr: GIMPLE_OMP_CONTINUE. 48616 (line 17) 48617* gimple_omp_continue_control_use: GIMPLE_OMP_CONTINUE. 48618 (line 26) 48619* gimple_omp_continue_control_use_ptr: GIMPLE_OMP_CONTINUE. 48620 (line 31) 48621* gimple_omp_continue_set_control_def: GIMPLE_OMP_CONTINUE. 48622 (line 21) 48623* gimple_omp_continue_set_control_use: GIMPLE_OMP_CONTINUE. 48624 (line 35) 48625* GIMPLE_OMP_CRITICAL: GIMPLE_OMP_CRITICAL. 48626 (line 6) 48627* gimple_omp_critical_name: GIMPLE_OMP_CRITICAL. 48628 (line 12) 48629* gimple_omp_critical_name_ptr: GIMPLE_OMP_CRITICAL. 48630 (line 16) 48631* gimple_omp_critical_set_name: GIMPLE_OMP_CRITICAL. 48632 (line 21) 48633* GIMPLE_OMP_FOR: GIMPLE_OMP_FOR. (line 6) 48634* gimple_omp_for_clauses: GIMPLE_OMP_FOR. (line 17) 48635* gimple_omp_for_clauses_ptr: GIMPLE_OMP_FOR. (line 20) 48636* gimple_omp_for_cond: GIMPLE_OMP_FOR. (line 80) 48637* gimple_omp_for_final: GIMPLE_OMP_FOR. (line 48) 48638* gimple_omp_for_final_ptr: GIMPLE_OMP_FOR. (line 51) 48639* gimple_omp_for_incr: GIMPLE_OMP_FOR. (line 58) 48640* gimple_omp_for_incr_ptr: GIMPLE_OMP_FOR. (line 61) 48641* gimple_omp_for_index: GIMPLE_OMP_FOR. (line 28) 48642* gimple_omp_for_index_ptr: GIMPLE_OMP_FOR. (line 31) 48643* gimple_omp_for_initial: GIMPLE_OMP_FOR. (line 38) 48644* gimple_omp_for_initial_ptr: GIMPLE_OMP_FOR. (line 41) 48645* gimple_omp_for_pre_body: GIMPLE_OMP_FOR. (line 67) 48646* gimple_omp_for_set_clauses: GIMPLE_OMP_FOR. (line 23) 48647* gimple_omp_for_set_cond: GIMPLE_OMP_FOR. (line 76) 48648* gimple_omp_for_set_final: GIMPLE_OMP_FOR. (line 54) 48649* gimple_omp_for_set_incr: GIMPLE_OMP_FOR. (line 64) 48650* gimple_omp_for_set_index: GIMPLE_OMP_FOR. (line 34) 48651* gimple_omp_for_set_initial: GIMPLE_OMP_FOR. (line 44) 48652* gimple_omp_for_set_pre_body: GIMPLE_OMP_FOR. (line 71) 48653* GIMPLE_OMP_MASTER: GIMPLE_OMP_MASTER. (line 6) 48654* GIMPLE_OMP_ORDERED: GIMPLE_OMP_ORDERED. (line 6) 48655* GIMPLE_OMP_PARALLEL: GIMPLE_OMP_PARALLEL. 48656 (line 6) 48657* gimple_omp_parallel_child_fn: GIMPLE_OMP_PARALLEL. 48658 (line 42) 48659* gimple_omp_parallel_child_fn_ptr: GIMPLE_OMP_PARALLEL. 48660 (line 47) 48661* gimple_omp_parallel_clauses: GIMPLE_OMP_PARALLEL. 48662 (line 30) 48663* gimple_omp_parallel_clauses_ptr: GIMPLE_OMP_PARALLEL. 48664 (line 33) 48665* gimple_omp_parallel_combined_p: GIMPLE_OMP_PARALLEL. 48666 (line 15) 48667* gimple_omp_parallel_data_arg: GIMPLE_OMP_PARALLEL. 48668 (line 56) 48669* gimple_omp_parallel_data_arg_ptr: GIMPLE_OMP_PARALLEL. 48670 (line 61) 48671* gimple_omp_parallel_set_child_fn: GIMPLE_OMP_PARALLEL. 48672 (line 52) 48673* gimple_omp_parallel_set_clauses: GIMPLE_OMP_PARALLEL. 48674 (line 37) 48675* gimple_omp_parallel_set_combined_p: GIMPLE_OMP_PARALLEL. 48676 (line 19) 48677* gimple_omp_parallel_set_data_arg: GIMPLE_OMP_PARALLEL. 48678 (line 65) 48679* GIMPLE_OMP_RETURN: GIMPLE_OMP_RETURN. (line 6) 48680* gimple_omp_return_nowait_p: GIMPLE_OMP_RETURN. (line 13) 48681* gimple_omp_return_set_nowait: GIMPLE_OMP_RETURN. (line 10) 48682* GIMPLE_OMP_SECTION: GIMPLE_OMP_SECTION. (line 6) 48683* GIMPLE_OMP_SECTIONS: GIMPLE_OMP_SECTIONS. 48684 (line 6) 48685* gimple_omp_sections_clauses: GIMPLE_OMP_SECTIONS. 48686 (line 29) 48687* gimple_omp_sections_clauses_ptr: GIMPLE_OMP_SECTIONS. 48688 (line 32) 48689* gimple_omp_sections_control: GIMPLE_OMP_SECTIONS. 48690 (line 16) 48691* gimple_omp_sections_control_ptr: GIMPLE_OMP_SECTIONS. 48692 (line 20) 48693* gimple_omp_sections_set_clauses: GIMPLE_OMP_SECTIONS. 48694 (line 35) 48695* gimple_omp_sections_set_control: GIMPLE_OMP_SECTIONS. 48696 (line 24) 48697* gimple_omp_section_last_p: GIMPLE_OMP_SECTION. (line 11) 48698* gimple_omp_section_set_last: GIMPLE_OMP_SECTION. (line 15) 48699* gimple_omp_set_body: GIMPLE_OMP_PARALLEL. 48700 (line 26) 48701* GIMPLE_OMP_SINGLE: GIMPLE_OMP_SINGLE. (line 6) 48702* gimple_omp_single_clauses: GIMPLE_OMP_SINGLE. (line 13) 48703* gimple_omp_single_clauses_ptr: GIMPLE_OMP_SINGLE. (line 16) 48704* gimple_omp_single_set_clauses: GIMPLE_OMP_SINGLE. (line 19) 48705* gimple_op: Logical Operators. (line 79) 48706* gimple_op <1>: Manipulating GIMPLE statements. 48707 (line 80) 48708* gimple_ops: Logical Operators. (line 82) 48709* gimple_ops <1>: Manipulating GIMPLE statements. 48710 (line 77) 48711* gimple_op_ptr: Manipulating GIMPLE statements. 48712 (line 83) 48713* GIMPLE_PHI: GIMPLE_PHI. (line 6) 48714* gimple_phi_arg: GIMPLE_PHI. (line 24) 48715* gimple_phi_arg <1>: SSA. (line 62) 48716* gimple_phi_arg_def: SSA. (line 68) 48717* gimple_phi_arg_edge: SSA. (line 65) 48718* gimple_phi_capacity: GIMPLE_PHI. (line 6) 48719* gimple_phi_num_args: GIMPLE_PHI. (line 10) 48720* gimple_phi_num_args <1>: SSA. (line 58) 48721* gimple_phi_result: GIMPLE_PHI. (line 15) 48722* gimple_phi_result <1>: SSA. (line 55) 48723* gimple_phi_result_ptr: GIMPLE_PHI. (line 18) 48724* gimple_phi_set_arg: GIMPLE_PHI. (line 28) 48725* gimple_phi_set_result: GIMPLE_PHI. (line 21) 48726* gimple_plf: Manipulating GIMPLE statements. 48727 (line 64) 48728* GIMPLE_RESX: GIMPLE_RESX. (line 6) 48729* gimple_resx_region: GIMPLE_RESX. (line 12) 48730* gimple_resx_set_region: GIMPLE_RESX. (line 15) 48731* GIMPLE_RETURN: GIMPLE_RETURN. (line 6) 48732* gimple_return_retval: GIMPLE_RETURN. (line 9) 48733* gimple_return_set_retval: GIMPLE_RETURN. (line 12) 48734* gimple_seq_add_seq: GIMPLE sequences. (line 30) 48735* gimple_seq_add_stmt: GIMPLE sequences. (line 24) 48736* gimple_seq_alloc: GIMPLE sequences. (line 61) 48737* gimple_seq_copy: GIMPLE sequences. (line 65) 48738* gimple_seq_deep_copy: GIMPLE sequences. (line 36) 48739* gimple_seq_empty_p: GIMPLE sequences. (line 69) 48740* gimple_seq_first: GIMPLE sequences. (line 43) 48741* gimple_seq_init: GIMPLE sequences. (line 58) 48742* gimple_seq_last: GIMPLE sequences. (line 46) 48743* gimple_seq_reverse: GIMPLE sequences. (line 39) 48744* gimple_seq_set_first: GIMPLE sequences. (line 53) 48745* gimple_seq_set_last: GIMPLE sequences. (line 49) 48746* gimple_seq_singleton_p: GIMPLE sequences. (line 78) 48747* gimple_set_block: Manipulating GIMPLE statements. 48748 (line 38) 48749* gimple_set_def_ops: Manipulating GIMPLE statements. 48750 (line 96) 48751* gimple_set_has_volatile_ops: Manipulating GIMPLE statements. 48752 (line 136) 48753* gimple_set_locus: Manipulating GIMPLE statements. 48754 (line 44) 48755* gimple_set_op: Manipulating GIMPLE statements. 48756 (line 86) 48757* gimple_set_plf: Manipulating GIMPLE statements. 48758 (line 60) 48759* gimple_set_use_ops: Manipulating GIMPLE statements. 48760 (line 103) 48761* gimple_set_vdef_ops: Manipulating GIMPLE statements. 48762 (line 117) 48763* gimple_set_visited: Manipulating GIMPLE statements. 48764 (line 53) 48765* gimple_set_vuse_ops: Manipulating GIMPLE statements. 48766 (line 110) 48767* gimple_simplify: GIMPLE API. (line 6) 48768* gimple_simplify <1>: GIMPLE API. (line 8) 48769* gimple_simplify <2>: GIMPLE API. (line 10) 48770* gimple_simplify <3>: GIMPLE API. (line 12) 48771* gimple_simplify <4>: GIMPLE API. (line 14) 48772* gimple_simplify <5>: GIMPLE API. (line 16) 48773* gimple_statement_with_ops: Tuple representation. 48774 (line 96) 48775* gimple_stored_syms: Manipulating GIMPLE statements. 48776 (line 125) 48777* GIMPLE_SWITCH: GIMPLE_SWITCH. (line 6) 48778* gimple_switch_default_label: GIMPLE_SWITCH. (line 41) 48779* gimple_switch_index: GIMPLE_SWITCH. (line 24) 48780* gimple_switch_label: GIMPLE_SWITCH. (line 31) 48781* gimple_switch_num_labels: GIMPLE_SWITCH. (line 14) 48782* gimple_switch_set_default_label: GIMPLE_SWITCH. (line 45) 48783* gimple_switch_set_index: GIMPLE_SWITCH. (line 27) 48784* gimple_switch_set_label: GIMPLE_SWITCH. (line 36) 48785* gimple_switch_set_num_labels: GIMPLE_SWITCH. (line 19) 48786* GIMPLE_TRY: GIMPLE_TRY. (line 6) 48787* gimple_try_catch_is_cleanup: GIMPLE_TRY. (line 19) 48788* gimple_try_cleanup: GIMPLE_TRY. (line 26) 48789* gimple_try_eval: GIMPLE_TRY. (line 22) 48790* gimple_try_kind: GIMPLE_TRY. (line 15) 48791* gimple_try_set_catch_is_cleanup: GIMPLE_TRY. (line 30) 48792* gimple_try_set_cleanup: GIMPLE_TRY. (line 38) 48793* gimple_try_set_eval: GIMPLE_TRY. (line 34) 48794* gimple_use_ops: Manipulating GIMPLE statements. 48795 (line 100) 48796* gimple_vdef_ops: Manipulating GIMPLE statements. 48797 (line 114) 48798* gimple_visited_p: Manipulating GIMPLE statements. 48799 (line 57) 48800* gimple_vuse_ops: Manipulating GIMPLE statements. 48801 (line 107) 48802* gimple_wce_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 48803 (line 10) 48804* gimple_wce_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 48805 (line 17) 48806* gimple_wce_set_cleanup: GIMPLE_WITH_CLEANUP_EXPR. 48807 (line 13) 48808* gimple_wce_set_cleanup_eh_only: GIMPLE_WITH_CLEANUP_EXPR. 48809 (line 20) 48810* GIMPLE_WITH_CLEANUP_EXPR: GIMPLE_WITH_CLEANUP_EXPR. 48811 (line 6) 48812* gimplification: Parsing pass. (line 13) 48813* gimplification <1>: Gimplification pass. 48814 (line 6) 48815* gimplifier: Parsing pass. (line 13) 48816* gimplify_assign: GIMPLE_ASSIGN. (line 41) 48817* gimplify_expr: Gimplification pass. 48818 (line 18) 48819* gimplify_function_tree: Gimplification pass. 48820 (line 18) 48821* GLOBAL_INIT_PRIORITY: Functions for C++. (line 141) 48822* global_regs: Register Basics. (line 59) 48823* GO_IF_LEGITIMATE_ADDRESS: Addressing Modes. (line 90) 48824* greater than: Comparisons. (line 60) 48825* greater than <1>: Comparisons. (line 64) 48826* greater than <2>: Comparisons. (line 72) 48827* gsi_after_labels: Sequence iterators. (line 74) 48828* gsi_bb: Sequence iterators. (line 82) 48829* gsi_commit_edge_inserts: Sequence iterators. (line 193) 48830* gsi_commit_edge_inserts <1>: Maintaining the CFG. 48831 (line 105) 48832* gsi_commit_one_edge_insert: Sequence iterators. (line 188) 48833* gsi_end_p: Sequence iterators. (line 59) 48834* gsi_end_p <1>: Maintaining the CFG. 48835 (line 48) 48836* gsi_for_stmt: Sequence iterators. (line 156) 48837* gsi_insert_after: Sequence iterators. (line 145) 48838* gsi_insert_after <1>: Maintaining the CFG. 48839 (line 60) 48840* gsi_insert_before: Sequence iterators. (line 134) 48841* gsi_insert_before <1>: Maintaining the CFG. 48842 (line 66) 48843* gsi_insert_on_edge: Sequence iterators. (line 173) 48844* gsi_insert_on_edge <1>: Maintaining the CFG. 48845 (line 105) 48846* gsi_insert_on_edge_immediate: Sequence iterators. (line 183) 48847* gsi_insert_seq_after: Sequence iterators. (line 152) 48848* gsi_insert_seq_before: Sequence iterators. (line 141) 48849* gsi_insert_seq_on_edge: Sequence iterators. (line 177) 48850* gsi_last: Sequence iterators. (line 49) 48851* gsi_last <1>: Maintaining the CFG. 48852 (line 44) 48853* gsi_last_bb: Sequence iterators. (line 55) 48854* gsi_link_after: Sequence iterators. (line 113) 48855* gsi_link_before: Sequence iterators. (line 103) 48856* gsi_link_seq_after: Sequence iterators. (line 108) 48857* gsi_link_seq_before: Sequence iterators. (line 97) 48858* gsi_move_after: Sequence iterators. (line 159) 48859* gsi_move_before: Sequence iterators. (line 164) 48860* gsi_move_to_bb_end: Sequence iterators. (line 169) 48861* gsi_next: Sequence iterators. (line 65) 48862* gsi_next <1>: Maintaining the CFG. 48863 (line 52) 48864* gsi_one_before_end_p: Sequence iterators. (line 62) 48865* gsi_prev: Sequence iterators. (line 68) 48866* gsi_prev <1>: Maintaining the CFG. 48867 (line 56) 48868* gsi_remove: Sequence iterators. (line 88) 48869* gsi_remove <1>: Maintaining the CFG. 48870 (line 72) 48871* gsi_replace: Sequence iterators. (line 128) 48872* gsi_seq: Sequence iterators. (line 85) 48873* gsi_split_seq_after: Sequence iterators. (line 118) 48874* gsi_split_seq_before: Sequence iterators. (line 123) 48875* gsi_start: Sequence iterators. (line 39) 48876* gsi_start <1>: Maintaining the CFG. 48877 (line 40) 48878* gsi_start_bb: Sequence iterators. (line 45) 48879* gsi_stmt: Sequence iterators. (line 71) 48880* gsi_stmt_ptr: Sequence iterators. (line 79) 48881* gt: Comparisons. (line 60) 48882* gt and attributes: Expressions. (line 83) 48883* gtu: Comparisons. (line 64) 48884* gtu and attributes: Expressions. (line 83) 48885* GTY: Type Information. (line 6) 48886* GT_EXPR: Unary and Binary Expressions. 48887 (line 6) 48888* H in constraint: Simple Constraints. (line 96) 48889* HAmode: Machine Modes. (line 146) 48890* HANDLER: Statements for C++. (line 6) 48891* HANDLER_BODY: Statements for C++. (line 6) 48892* HANDLER_PARMS: Statements for C++. (line 6) 48893* HANDLE_PRAGMA_PACK_WITH_EXPANSION: Misc. (line 442) 48894* hard registers: Regs and Memory. (line 9) 48895* HARD_FRAME_POINTER_IS_ARG_POINTER: Frame Registers. (line 57) 48896* HARD_FRAME_POINTER_IS_FRAME_POINTER: Frame Registers. (line 50) 48897* HARD_FRAME_POINTER_REGNUM: Frame Registers. (line 19) 48898* HARD_REGNO_CALLER_SAVE_MODE: Caller Saves. (line 10) 48899* HARD_REGNO_CALL_PART_CLOBBERED: Register Basics. (line 52) 48900* HARD_REGNO_MODE_OK: Values in Registers. 48901 (line 57) 48902* HARD_REGNO_NREGS: Values in Registers. 48903 (line 10) 48904* HARD_REGNO_NREGS_HAS_PADDING: Values in Registers. 48905 (line 24) 48906* HARD_REGNO_NREGS_WITH_PADDING: Values in Registers. 48907 (line 42) 48908* HARD_REGNO_RENAME_OK: Values in Registers. 48909 (line 117) 48910* HAS_INIT_SECTION: Macros for Initialization. 48911 (line 18) 48912* HAS_LONG_COND_BRANCH: Misc. (line 8) 48913* HAS_LONG_UNCOND_BRANCH: Misc. (line 17) 48914* HAVE_DOS_BASED_FILE_SYSTEM: Filesystem. (line 11) 48915* HAVE_POST_DECREMENT: Addressing Modes. (line 11) 48916* HAVE_POST_INCREMENT: Addressing Modes. (line 10) 48917* HAVE_POST_MODIFY_DISP: Addressing Modes. (line 17) 48918* HAVE_POST_MODIFY_REG: Addressing Modes. (line 23) 48919* HAVE_PRE_DECREMENT: Addressing Modes. (line 9) 48920* HAVE_PRE_INCREMENT: Addressing Modes. (line 8) 48921* HAVE_PRE_MODIFY_DISP: Addressing Modes. (line 16) 48922* HAVE_PRE_MODIFY_REG: Addressing Modes. (line 22) 48923* HCmode: Machine Modes. (line 199) 48924* HFmode: Machine Modes. (line 61) 48925* high: Constants. (line 150) 48926* HImode: Machine Modes. (line 29) 48927* HImode, in insn: Insns. (line 268) 48928* HONOR_REG_ALLOC_ORDER: Allocation Order. (line 36) 48929* host configuration: Host Config. (line 6) 48930* host functions: Host Common. (line 6) 48931* host hooks: Host Common. (line 6) 48932* host makefile fragment: Host Fragment. (line 6) 48933* HOST_BIT_BUCKET: Filesystem. (line 51) 48934* HOST_EXECUTABLE_SUFFIX: Filesystem. (line 45) 48935* HOST_HOOKS_EXTRA_SIGNALS: Host Common. (line 11) 48936* HOST_HOOKS_GT_PCH_ALLOC_GRANULARITY: Host Common. (line 43) 48937* HOST_HOOKS_GT_PCH_GET_ADDRESS: Host Common. (line 15) 48938* HOST_HOOKS_GT_PCH_USE_ADDRESS: Host Common. (line 24) 48939* HOST_LACKS_INODE_NUMBERS: Filesystem. (line 89) 48940* HOST_LONG_FORMAT: Host Misc. (line 45) 48941* HOST_LONG_LONG_FORMAT: Host Misc. (line 41) 48942* HOST_OBJECT_SUFFIX: Filesystem. (line 40) 48943* HOST_PTR_PRINTF: Host Misc. (line 49) 48944* HOT_TEXT_SECTION_NAME: Sections. (line 42) 48945* HQmode: Machine Modes. (line 110) 48946* i in constraint: Simple Constraints. (line 68) 48947* I in constraint: Simple Constraints. (line 79) 48948* identifier: Identifiers. (line 6) 48949* IDENTIFIER_LENGTH: Identifiers. (line 22) 48950* IDENTIFIER_NODE: Identifiers. (line 6) 48951* IDENTIFIER_OPNAME_P: Identifiers. (line 27) 48952* IDENTIFIER_POINTER: Identifiers. (line 17) 48953* IDENTIFIER_TYPENAME_P: Identifiers. (line 33) 48954* IEEE 754-2008: Decimal float library routines. 48955 (line 6) 48956* IFCVT_MACHDEP_INIT: Misc. (line 568) 48957* IFCVT_MODIFY_CANCEL: Misc. (line 562) 48958* IFCVT_MODIFY_FINAL: Misc. (line 556) 48959* IFCVT_MODIFY_INSN: Misc. (line 550) 48960* IFCVT_MODIFY_MULTIPLE_TESTS: Misc. (line 542) 48961* IFCVT_MODIFY_TESTS: Misc. (line 532) 48962* IF_COND: Statements for C++. (line 6) 48963* IF_STMT: Statements for C++. (line 6) 48964* if_then_else: Comparisons. (line 80) 48965* if_then_else and attributes: Expressions. (line 32) 48966* if_then_else usage: Side Effects. (line 56) 48967* IMAGPART_EXPR: Unary and Binary Expressions. 48968 (line 6) 48969* Immediate Uses: SSA Operands. (line 258) 48970* immediate_operand: Machine-Independent Predicates. 48971 (line 10) 48972* IMMEDIATE_PREFIX: Instruction Output. (line 153) 48973* include: Including Patterns. (line 6) 48974* INCLUDE_DEFAULTS: Driver. (line 331) 48975* inclusive-or, bitwise: Arithmetic. (line 163) 48976* INCOMING_FRAME_SP_OFFSET: Frame Layout. (line 179) 48977* INCOMING_REGNO: Register Basics. (line 86) 48978* INCOMING_REG_PARM_STACK_SPACE: Stack Arguments. (line 73) 48979* INCOMING_RETURN_ADDR_RTX: Frame Layout. (line 135) 48980* INCOMING_STACK_BOUNDARY: Storage Layout. (line 154) 48981* INDEX_REG_CLASS: Register Classes. (line 140) 48982* indirect_jump instruction pattern: Standard Names. (line 1454) 48983* indirect_operand: Machine-Independent Predicates. 48984 (line 70) 48985* INDIRECT_REF: Storage References. (line 6) 48986* initialization routines: Initialization. (line 6) 48987* INITIAL_ELIMINATION_OFFSET: Elimination. (line 84) 48988* INITIAL_FRAME_ADDRESS_RTX: Frame Layout. (line 77) 48989* INITIAL_FRAME_POINTER_OFFSET: Elimination. (line 34) 48990* INIT_ARRAY_SECTION_ASM_OP: Sections. (line 106) 48991* INIT_CUMULATIVE_ARGS: Register Arguments. (line 161) 48992* INIT_CUMULATIVE_INCOMING_ARGS: Register Arguments. (line 189) 48993* INIT_CUMULATIVE_LIBCALL_ARGS: Register Arguments. (line 183) 48994* INIT_ENVIRONMENT: Driver. (line 309) 48995* INIT_EXPANDERS: Per-Function Data. (line 36) 48996* INIT_EXPR: Unary and Binary Expressions. 48997 (line 6) 48998* init_machine_status: Per-Function Data. (line 42) 48999* init_one_libfunc: Library Calls. (line 15) 49000* INIT_SECTION_ASM_OP: Sections. (line 90) 49001* INIT_SECTION_ASM_OP <1>: Macros for Initialization. 49002 (line 9) 49003* inlining: Target Attributes. (line 95) 49004* insert_insn_on_edge: Maintaining the CFG. 49005 (line 105) 49006* insn: Insns. (line 63) 49007* insn and /f: Flags. (line 107) 49008* insn and /j: Flags. (line 157) 49009* insn and /s: Flags. (line 49) 49010* insn and /s <1>: Flags. (line 148) 49011* insn and /u: Flags. (line 39) 49012* insn and /v: Flags. (line 44) 49013* insn attributes: Insn Attributes. (line 6) 49014* insn canonicalization: Insn Canonicalizations. 49015 (line 6) 49016* insn includes: Including Patterns. (line 6) 49017* insn lengths, computing: Insn Lengths. (line 6) 49018* insn notes, notes: Basic Blocks. (line 52) 49019* insn splitting: Insn Splitting. (line 6) 49020* insn-attr.h: Defining Attributes. 49021 (line 34) 49022* insns: Insns. (line 6) 49023* insns, generating: RTL Template. (line 6) 49024* insns, recognizing: RTL Template. (line 6) 49025* INSN_ANNULLED_BRANCH_P: Flags. (line 39) 49026* INSN_CODE: Insns. (line 295) 49027* INSN_DELETED_P: Flags. (line 44) 49028* INSN_FROM_TARGET_P: Flags. (line 49) 49029* insn_list: Insns. (line 540) 49030* INSN_REFERENCES_ARE_DELAYED: Misc. (line 469) 49031* INSN_SETS_ARE_DELAYED: Misc. (line 458) 49032* INSN_UID: Insns. (line 23) 49033* INSN_VAR_LOCATION: Insns. (line 236) 49034* instruction attributes: Insn Attributes. (line 6) 49035* instruction latency time: Processor pipeline description. 49036 (line 6) 49037* instruction latency time <1>: Processor pipeline description. 49038 (line 105) 49039* instruction latency time <2>: Processor pipeline description. 49040 (line 196) 49041* instruction patterns: Patterns. (line 6) 49042* instruction splitting: Insn Splitting. (line 6) 49043* insv instruction pattern: Standard Names. (line 1239) 49044* insvM instruction pattern: Standard Names. (line 1191) 49045* insvmisalignM instruction pattern: Standard Names. (line 1201) 49046* int iterators in .md files: Int Iterators. (line 6) 49047* INT16_TYPE: Type Layout. (line 216) 49048* INT32_TYPE: Type Layout. (line 217) 49049* INT64_TYPE: Type Layout. (line 218) 49050* INT8_TYPE: Type Layout. (line 215) 49051* INTEGER_CST: Constant expressions. 49052 (line 6) 49053* INTEGER_TYPE: Types. (line 6) 49054* Interdependence of Patterns: Dependent Patterns. (line 6) 49055* interfacing to GCC output: Interface. (line 6) 49056* interlock delays: Processor pipeline description. 49057 (line 6) 49058* intermediate representation lowering: Parsing pass. (line 13) 49059* INTMAX_TYPE: Type Layout. (line 192) 49060* INTPTR_TYPE: Type Layout. (line 239) 49061* introduction: Top. (line 6) 49062* INT_FAST16_TYPE: Type Layout. (line 232) 49063* INT_FAST32_TYPE: Type Layout. (line 233) 49064* INT_FAST64_TYPE: Type Layout. (line 234) 49065* INT_FAST8_TYPE: Type Layout. (line 231) 49066* INT_LEAST16_TYPE: Type Layout. (line 224) 49067* INT_LEAST32_TYPE: Type Layout. (line 225) 49068* INT_LEAST64_TYPE: Type Layout. (line 226) 49069* INT_LEAST8_TYPE: Type Layout. (line 223) 49070* INT_TYPE_SIZE: Type Layout. (line 11) 49071* INVOKE__main: Macros for Initialization. 49072 (line 50) 49073* in_struct: Flags. (line 245) 49074* in_struct, in code_label and note: Flags. (line 59) 49075* in_struct, in insn and jump_insn and call_insn: Flags. (line 49) 49076* in_struct, in insn, call_insn, jump_insn and jump_table_data: Flags. 49077 (line 148) 49078* in_struct, in subreg: Flags. (line 187) 49079* ior: Arithmetic. (line 163) 49080* ior and attributes: Expressions. (line 50) 49081* ior, canonicalization of: Insn Canonicalizations. 49082 (line 51) 49083* iorM3 instruction pattern: Standard Names. (line 301) 49084* IRA_HARD_REGNO_ADD_COST_MULTIPLIER: Allocation Order. (line 44) 49085* IS_ASM_LOGICAL_LINE_SEPARATOR: Data Output. (line 123) 49086* is_gimple_addressable: Logical Operators. (line 113) 49087* is_gimple_asm_val: Logical Operators. (line 117) 49088* is_gimple_assign: Logical Operators. (line 149) 49089* is_gimple_call: Logical Operators. (line 152) 49090* is_gimple_call_addr: Logical Operators. (line 120) 49091* is_gimple_constant: Logical Operators. (line 128) 49092* is_gimple_debug: Logical Operators. (line 155) 49093* is_gimple_ip_invariant: Logical Operators. (line 137) 49094* is_gimple_ip_invariant_address: Logical Operators. (line 142) 49095* is_gimple_mem_ref_addr: Logical Operators. (line 124) 49096* is_gimple_min_invariant: Logical Operators. (line 131) 49097* is_gimple_omp: Logical Operators. (line 166) 49098* is_gimple_val: Logical Operators. (line 107) 49099* iterators in .md files: Iterators. (line 6) 49100* IV analysis on GIMPLE: Scalar evolutions. (line 6) 49101* IV analysis on RTL: loop-iv. (line 6) 49102* JMP_BUF_SIZE: Exception Region Output. 49103 (line 83) 49104* jump: Flags. (line 286) 49105* jump instruction pattern: Standard Names. (line 1332) 49106* jump instruction patterns: Jump Patterns. (line 6) 49107* jump instructions and set: Side Effects. (line 56) 49108* jump, in call_insn: Flags. (line 161) 49109* jump, in insn: Flags. (line 157) 49110* jump, in mem: Flags. (line 70) 49111* Jumps: Jumps. (line 6) 49112* JUMP_ALIGN: Alignment Output. (line 8) 49113* jump_insn: Insns. (line 73) 49114* jump_insn and /f: Flags. (line 107) 49115* jump_insn and /s: Flags. (line 49) 49116* jump_insn and /s <1>: Flags. (line 148) 49117* jump_insn and /u: Flags. (line 39) 49118* jump_insn and /v: Flags. (line 44) 49119* JUMP_LABEL: Insns. (line 80) 49120* JUMP_TABLES_IN_TEXT_SECTION: Sections. (line 150) 49121* jump_table_data: Insns. (line 166) 49122* jump_table_data and /s: Flags. (line 148) 49123* jump_table_data and /v: Flags. (line 44) 49124* LABEL_ALIGN: Alignment Output. (line 57) 49125* LABEL_ALIGN_AFTER_BARRIER: Alignment Output. (line 26) 49126* LABEL_ALTERNATE_NAME: Edges. (line 180) 49127* LABEL_ALT_ENTRY_P: Insns. (line 146) 49128* LABEL_DECL: Declarations. (line 6) 49129* LABEL_KIND: Insns. (line 146) 49130* LABEL_NUSES: Insns. (line 142) 49131* LABEL_PRESERVE_P: Flags. (line 59) 49132* label_ref: Constants. (line 127) 49133* label_ref and /v: Flags. (line 65) 49134* label_ref, RTL sharing: Sharing. (line 35) 49135* LABEL_REF_NONLOCAL_P: Flags. (line 65) 49136* language-dependent trees: Language-dependent trees. 49137 (line 6) 49138* language-independent intermediate representation: Parsing pass. 49139 (line 13) 49140* lang_hooks.gimplify_expr: Gimplification pass. 49141 (line 18) 49142* lang_hooks.parse_file: Parsing pass. (line 6) 49143* large return values: Aggregate Return. (line 6) 49144* LAST_STACK_REG: Stack Registers. (line 30) 49145* LAST_VIRTUAL_REGISTER: Regs and Memory. (line 51) 49146* lceilMN2: Standard Names. (line 860) 49147* LCSSA: LCSSA. (line 6) 49148* LDD_SUFFIX: Macros for Initialization. 49149 (line 121) 49150* ldexpM3 instruction pattern: Standard Names. (line 653) 49151* LD_FINI_SWITCH: Macros for Initialization. 49152 (line 28) 49153* LD_INIT_SWITCH: Macros for Initialization. 49154 (line 24) 49155* le: Comparisons. (line 76) 49156* le and attributes: Expressions. (line 83) 49157* leaf functions: Leaf Functions. (line 6) 49158* leaf_function_p: Standard Names. (line 1416) 49159* LEAF_REGISTERS: Leaf Functions. (line 23) 49160* LEAF_REG_REMAP: Leaf Functions. (line 37) 49161* left rotate: Arithmetic. (line 195) 49162* left shift: Arithmetic. (line 173) 49163* LEGITIMATE_PIC_OPERAND_P: PIC. (line 31) 49164* LEGITIMIZE_RELOAD_ADDRESS: Addressing Modes. (line 150) 49165* length: GTY Options. (line 47) 49166* less than: Comparisons. (line 68) 49167* less than or equal: Comparisons. (line 76) 49168* leu: Comparisons. (line 76) 49169* leu and attributes: Expressions. (line 83) 49170* LE_EXPR: Unary and Binary Expressions. 49171 (line 6) 49172* lfloorMN2: Standard Names. (line 855) 49173* LIB2FUNCS_EXTRA: Target Fragment. (line 11) 49174* LIBCALL_VALUE: Scalar Return. (line 56) 49175* libgcc.a: Library Calls. (line 6) 49176* LIBGCC2_CFLAGS: Target Fragment. (line 8) 49177* LIBGCC2_GNU_PREFIX: Type Layout. (line 102) 49178* LIBGCC2_UNWIND_ATTRIBUTE: Misc. (line 1090) 49179* LIBGCC_SPEC: Driver. (line 115) 49180* library subroutine names: Library Calls. (line 6) 49181* LIBRARY_PATH_ENV: Misc. (line 510) 49182* LIB_SPEC: Driver. (line 107) 49183* LIMIT_RELOAD_CLASS: Register Classes. (line 296) 49184* LINK_COMMAND_SPEC: Driver. (line 240) 49185* LINK_EH_SPEC: Driver. (line 142) 49186* LINK_GCC_C_SEQUENCE_SPEC: Driver. (line 232) 49187* LINK_LIBGCC_SPECIAL_1: Driver. (line 227) 49188* LINK_SPEC: Driver. (line 100) 49189* list: Containers. (line 6) 49190* Liveness representation: Liveness information. 49191 (line 6) 49192* load address instruction: Simple Constraints. (line 162) 49193* LOAD_EXTEND_OP: Misc. (line 59) 49194* load_multiple instruction pattern: Standard Names. (line 136) 49195* Local Register Allocator (LRA): RTL passes. (line 187) 49196* LOCAL_ALIGNMENT: Storage Layout. (line 254) 49197* LOCAL_CLASS_P: Classes. (line 73) 49198* LOCAL_DECL_ALIGNMENT: Storage Layout. (line 291) 49199* LOCAL_INCLUDE_DIR: Driver. (line 316) 49200* LOCAL_LABEL_PREFIX: Instruction Output. (line 151) 49201* LOCAL_REGNO: Register Basics. (line 100) 49202* log10M2 instruction pattern: Standard Names. (line 757) 49203* log1pM2 instruction pattern: Standard Names. (line 747) 49204* log2M2 instruction pattern: Standard Names. (line 764) 49205* logbM2 instruction pattern: Standard Names. (line 771) 49206* Logical Operators: Logical Operators. (line 6) 49207* logical-and, bitwise: Arithmetic. (line 158) 49208* LOGICAL_OP_NON_SHORT_CIRCUIT: Costs. (line 273) 49209* logM2 instruction pattern: Standard Names. (line 740) 49210* LOG_LINKS: Insns. (line 314) 49211* longjmp and automatic variables: Interface. (line 52) 49212* LONG_ACCUM_TYPE_SIZE: Type Layout. (line 92) 49213* LONG_DOUBLE_TYPE_SIZE: Type Layout. (line 57) 49214* LONG_FRACT_TYPE_SIZE: Type Layout. (line 72) 49215* LONG_LONG_ACCUM_TYPE_SIZE: Type Layout. (line 97) 49216* LONG_LONG_FRACT_TYPE_SIZE: Type Layout. (line 77) 49217* LONG_LONG_TYPE_SIZE: Type Layout. (line 32) 49218* LONG_TYPE_SIZE: Type Layout. (line 21) 49219* Loop analysis: Loop representation. 49220 (line 6) 49221* Loop manipulation: Loop manipulation. (line 6) 49222* Loop querying: Loop querying. (line 6) 49223* Loop representation: Loop representation. 49224 (line 6) 49225* Loop-closed SSA form: LCSSA. (line 6) 49226* looping instruction patterns: Looping Patterns. (line 6) 49227* LOOP_ALIGN: Alignment Output. (line 40) 49228* LOOP_EXPR: Unary and Binary Expressions. 49229 (line 6) 49230* lowering, language-dependent intermediate representation: Parsing pass. 49231 (line 13) 49232* lo_sum: Arithmetic. (line 25) 49233* lrintMN2: Standard Names. (line 845) 49234* lroundMN2: Standard Names. (line 850) 49235* lshiftrt: Arithmetic. (line 190) 49236* lshiftrt and attributes: Expressions. (line 83) 49237* LSHIFT_EXPR: Unary and Binary Expressions. 49238 (line 6) 49239* lshrM3 instruction pattern: Standard Names. (line 591) 49240* lt: Comparisons. (line 68) 49241* lt and attributes: Expressions. (line 83) 49242* LTGT_EXPR: Unary and Binary Expressions. 49243 (line 6) 49244* lto: LTO. (line 6) 49245* ltrans: LTO. (line 6) 49246* ltu: Comparisons. (line 68) 49247* LT_EXPR: Unary and Binary Expressions. 49248 (line 6) 49249* m in constraint: Simple Constraints. (line 17) 49250* machine attributes: Target Attributes. (line 6) 49251* machine description macros: Target Macros. (line 6) 49252* machine descriptions: Machine Desc. (line 6) 49253* machine mode conversions: Conversions. (line 6) 49254* machine modes: Machine Modes. (line 6) 49255* machine specific constraints: Machine Constraints. 49256 (line 6) 49257* machine-independent predicates: Machine-Independent Predicates. 49258 (line 6) 49259* machine_mode: Machine Modes. (line 6) 49260* macros, target description: Target Macros. (line 6) 49261* maddMN4 instruction pattern: Standard Names. (line 512) 49262* makefile fragment: Fragments. (line 6) 49263* makefile targets: Makefile. (line 6) 49264* MAKE_DECL_ONE_ONLY: Label Output. (line 281) 49265* make_safe_from: Expander Definitions. 49266 (line 151) 49267* MALLOC_ABI_ALIGNMENT: Storage Layout. (line 173) 49268* Manipulating GIMPLE statements: Manipulating GIMPLE statements. 49269 (line 6) 49270* marking roots: GGC Roots. (line 6) 49271* maskloadMN instruction pattern: Standard Names. (line 244) 49272* maskstoreMN instruction pattern: Standard Names. (line 251) 49273* MASK_RETURN_ADDR: Exception Region Output. 49274 (line 35) 49275* Match and Simplify: Match and Simplify. (line 6) 49276* matching constraint: Simple Constraints. (line 140) 49277* matching operands: Output Template. (line 49) 49278* match_dup: RTL Template. (line 73) 49279* match_dup <1>: define_peephole2. (line 28) 49280* match_dup and attributes: Insn Lengths. (line 16) 49281* match_operand: RTL Template. (line 16) 49282* match_operand and attributes: Expressions. (line 55) 49283* match_operator: RTL Template. (line 95) 49284* match_op_dup: RTL Template. (line 163) 49285* match_parallel: RTL Template. (line 172) 49286* match_par_dup: RTL Template. (line 219) 49287* match_scratch: RTL Template. (line 58) 49288* match_scratch <1>: define_peephole2. (line 28) 49289* match_test and attributes: Expressions. (line 64) 49290* math library: Soft float library routines. 49291 (line 6) 49292* math, in RTL: Arithmetic. (line 6) 49293* matherr: Library Calls. (line 59) 49294* MATH_LIBRARY: Misc. (line 503) 49295* maxM3 instruction pattern: Standard Names. (line 363) 49296* MAX_BITSIZE_MODE_ANY_INT: Machine Modes. (line 358) 49297* MAX_BITSIZE_MODE_ANY_MODE: Machine Modes. (line 364) 49298* MAX_BITS_PER_WORD: Storage Layout. (line 54) 49299* MAX_CONDITIONAL_EXECUTE: Misc. (line 525) 49300* MAX_FIXED_MODE_SIZE: Storage Layout. (line 436) 49301* MAX_MOVE_MAX: Misc. (line 105) 49302* MAX_OFILE_ALIGNMENT: Storage Layout. (line 208) 49303* MAX_REGS_PER_ADDRESS: Addressing Modes. (line 42) 49304* MAX_STACK_ALIGNMENT: Storage Layout. (line 202) 49305* maybe_undef: GTY Options. (line 139) 49306* may_trap_p, tree_could_trap_p: Edges. (line 114) 49307* mcount: Profiling. (line 12) 49308* MD_EXEC_PREFIX: Driver. (line 271) 49309* MD_FALLBACK_FRAME_STATE_FOR: Exception Handling. (line 93) 49310* MD_HANDLE_UNWABI: Exception Handling. (line 112) 49311* MD_STARTFILE_PREFIX: Driver. (line 299) 49312* MD_STARTFILE_PREFIX_1: Driver. (line 304) 49313* mem: Regs and Memory. (line 370) 49314* mem and /c: Flags. (line 81) 49315* mem and /f: Flags. (line 85) 49316* mem and /j: Flags. (line 70) 49317* mem and /u: Flags. (line 134) 49318* mem and /v: Flags. (line 76) 49319* mem, RTL sharing: Sharing. (line 40) 49320* memory model: Memory model. (line 6) 49321* memory reference, nonoffsettable: Simple Constraints. (line 254) 49322* memory references in constraints: Simple Constraints. (line 17) 49323* memory_barrier instruction pattern: Standard Names. (line 1802) 49324* MEMORY_MOVE_COST: Costs. (line 53) 49325* memory_operand: Machine-Independent Predicates. 49326 (line 57) 49327* MEM_ADDR_SPACE: Special Accessors. (line 48) 49328* MEM_ALIAS_SET: Special Accessors. (line 9) 49329* MEM_ALIGN: Special Accessors. (line 45) 49330* MEM_EXPR: Special Accessors. (line 19) 49331* MEM_KEEP_ALIAS_SET_P: Flags. (line 70) 49332* MEM_NOTRAP_P: Flags. (line 81) 49333* MEM_OFFSET: Special Accessors. (line 31) 49334* MEM_OFFSET_KNOWN_P: Special Accessors. (line 27) 49335* MEM_POINTER: Flags. (line 85) 49336* MEM_READONLY_P: Flags. (line 134) 49337* MEM_REF: Storage References. (line 6) 49338* mem_signal_fenceMODE instruction pattern: Standard Names. (line 2061) 49339* MEM_SIZE: Special Accessors. (line 39) 49340* MEM_SIZE_KNOWN_P: Special Accessors. (line 35) 49341* mem_thread_fenceMODE instruction pattern: Standard Names. (line 2053) 49342* MEM_VOLATILE_P: Flags. (line 76) 49343* METHOD_TYPE: Types. (line 6) 49344* MINIMUM_ALIGNMENT: Storage Layout. (line 304) 49345* MINIMUM_ATOMIC_ALIGNMENT: Storage Layout. (line 181) 49346* minM3 instruction pattern: Standard Names. (line 363) 49347* minus: Arithmetic. (line 38) 49348* minus and attributes: Expressions. (line 83) 49349* minus, canonicalization of: Insn Canonicalizations. 49350 (line 27) 49351* MINUS_EXPR: Unary and Binary Expressions. 49352 (line 6) 49353* MIN_UNITS_PER_WORD: Storage Layout. (line 64) 49354* MIPS coprocessor-definition macros: MIPS Coprocessors. (line 6) 49355* miscellaneous register hooks: Miscellaneous Register Hooks. 49356 (line 6) 49357* mnemonic attribute: Mnemonic Attribute. (line 6) 49358* mod: Arithmetic. (line 136) 49359* mod and attributes: Expressions. (line 83) 49360* mode classes: Machine Modes. (line 225) 49361* mode iterators in .md files: Mode Iterators. (line 6) 49362* mode switching: Mode Switching. (line 6) 49363* MODES_TIEABLE_P: Values in Registers. 49364 (line 127) 49365* MODE_ACCUM: Machine Modes. (line 255) 49366* MODE_BASE_REG_CLASS: Register Classes. (line 116) 49367* MODE_BASE_REG_REG_CLASS: Register Classes. (line 122) 49368* MODE_CC: Machine Modes. (line 274) 49369* MODE_CC <1>: MODE_CC Condition Codes. 49370 (line 6) 49371* MODE_CODE_BASE_REG_CLASS: Register Classes. (line 129) 49372* MODE_COMPLEX_FLOAT: Machine Modes. (line 266) 49373* MODE_COMPLEX_INT: Machine Modes. (line 263) 49374* MODE_DECIMAL_FLOAT: Machine Modes. (line 243) 49375* MODE_FLOAT: Machine Modes. (line 239) 49376* MODE_FRACT: Machine Modes. (line 247) 49377* MODE_FUNCTION: Machine Modes. (line 270) 49378* MODE_INT: Machine Modes. (line 231) 49379* MODE_PARTIAL_INT: Machine Modes. (line 235) 49380* MODE_POINTER_BOUNDS: Machine Modes. (line 279) 49381* MODE_RANDOM: Machine Modes. (line 284) 49382* MODE_UACCUM: Machine Modes. (line 259) 49383* MODE_UFRACT: Machine Modes. (line 251) 49384* modifiers in constraints: Modifiers. (line 6) 49385* MODIFY_EXPR: Unary and Binary Expressions. 49386 (line 6) 49387* MODIFY_JNI_METHOD_CALL: Misc. (line 874) 49388* modM3 instruction pattern: Standard Names. (line 301) 49389* modulo scheduling: RTL passes. (line 123) 49390* MOVE_MAX: Misc. (line 100) 49391* MOVE_MAX_PIECES: Costs. (line 199) 49392* MOVE_RATIO: Costs. (line 148) 49393* movM instruction pattern: Standard Names. (line 11) 49394* movmemM instruction pattern: Standard Names. (line 959) 49395* movmisalignM instruction pattern: Standard Names. (line 125) 49396* movMODEcc instruction pattern: Standard Names. (line 1253) 49397* movstr instruction pattern: Standard Names. (line 994) 49398* movstrictM instruction pattern: Standard Names. (line 119) 49399* msubMN4 instruction pattern: Standard Names. (line 535) 49400* mulhisi3 instruction pattern: Standard Names. (line 488) 49401* mulM3 instruction pattern: Standard Names. (line 301) 49402* mulqihi3 instruction pattern: Standard Names. (line 492) 49403* mulsidi3 instruction pattern: Standard Names. (line 492) 49404* mult: Arithmetic. (line 93) 49405* mult and attributes: Expressions. (line 83) 49406* mult, canonicalization of: Insn Canonicalizations. 49407 (line 27) 49408* mult, canonicalization of <1>: Insn Canonicalizations. 49409 (line 91) 49410* MULTIARCH_DIRNAME: Target Fragment. (line 170) 49411* MULTILIB_DEFAULTS: Driver. (line 256) 49412* MULTILIB_DIRNAMES: Target Fragment. (line 44) 49413* MULTILIB_EXCEPTIONS: Target Fragment. (line 70) 49414* MULTILIB_EXTRA_OPTS: Target Fragment. (line 132) 49415* MULTILIB_MATCHES: Target Fragment. (line 63) 49416* MULTILIB_OPTIONS: Target Fragment. (line 24) 49417* MULTILIB_OSDIRNAMES: Target Fragment. (line 139) 49418* MULTILIB_REQUIRED: Target Fragment. (line 82) 49419* MULTILIB_REUSE: Target Fragment. (line 103) 49420* multiple alternative constraints: Multi-Alternative. (line 6) 49421* MULTIPLE_SYMBOL_SPACES: Misc. (line 482) 49422* multiplication: Arithmetic. (line 93) 49423* multiplication with signed saturation: Arithmetic. (line 93) 49424* multiplication with unsigned saturation: Arithmetic. (line 93) 49425* MULT_EXPR: Unary and Binary Expressions. 49426 (line 6) 49427* MULT_HIGHPART_EXPR: Unary and Binary Expressions. 49428 (line 6) 49429* mulvM4 instruction pattern: Standard Names. (line 317) 49430* n in constraint: Simple Constraints. (line 73) 49431* name: Identifiers. (line 6) 49432* named address spaces: Named Address Spaces. 49433 (line 6) 49434* named patterns and conditions: Patterns. (line 49) 49435* names, pattern: Standard Names. (line 6) 49436* namespace, scope: Namespaces. (line 6) 49437* NAMESPACE_DECL: Declarations. (line 6) 49438* NAMESPACE_DECL <1>: Namespaces. (line 6) 49439* NATIVE_SYSTEM_HEADER_COMPONENT: Driver. (line 326) 49440* ne: Comparisons. (line 56) 49441* ne and attributes: Expressions. (line 83) 49442* nearbyintM2 instruction pattern: Standard Names. (line 829) 49443* neg: Arithmetic. (line 82) 49444* neg and attributes: Expressions. (line 83) 49445* neg, canonicalization of: Insn Canonicalizations. 49446 (line 27) 49447* NEGATE_EXPR: Unary and Binary Expressions. 49448 (line 6) 49449* negation: Arithmetic. (line 82) 49450* negation with signed saturation: Arithmetic. (line 82) 49451* negation with unsigned saturation: Arithmetic. (line 82) 49452* negM2 instruction pattern: Standard Names. (line 603) 49453* negMODEcc instruction pattern: Standard Names. (line 1273) 49454* negvM3 instruction pattern: Standard Names. (line 606) 49455* nested functions, trampolines for: Trampolines. (line 6) 49456* nested_ptr: GTY Options. (line 147) 49457* next_bb, prev_bb, FOR_EACH_BB, FOR_ALL_BB: Basic Blocks. (line 25) 49458* NEXT_INSN: Insns. (line 30) 49459* NEXT_OBJC_RUNTIME: Library Calls. (line 82) 49460* NE_EXPR: Unary and Binary Expressions. 49461 (line 6) 49462* nil: RTL Objects. (line 73) 49463* NM_FLAGS: Macros for Initialization. 49464 (line 110) 49465* nondeterministic finite state automaton: Processor pipeline description. 49466 (line 304) 49467* nonimmediate_operand: Machine-Independent Predicates. 49468 (line 100) 49469* nonlocal goto handler: Edges. (line 171) 49470* nonlocal_goto instruction pattern: Standard Names. (line 1636) 49471* nonlocal_goto_receiver instruction pattern: Standard Names. 49472 (line 1653) 49473* nonmemory_operand: Machine-Independent Predicates. 49474 (line 96) 49475* nonoffsettable memory reference: Simple Constraints. (line 254) 49476* NON_LVALUE_EXPR: Unary and Binary Expressions. 49477 (line 6) 49478* nop instruction pattern: Standard Names. (line 1449) 49479* NOP_EXPR: Unary and Binary Expressions. 49480 (line 6) 49481* normal predicates: Predicates. (line 31) 49482* not: Arithmetic. (line 154) 49483* not and attributes: Expressions. (line 50) 49484* not equal: Comparisons. (line 56) 49485* not, canonicalization of: Insn Canonicalizations. 49486 (line 27) 49487* note: Insns. (line 183) 49488* note and /i: Flags. (line 59) 49489* note and /v: Flags. (line 44) 49490* NOTE_INSN_BASIC_BLOCK: Basic Blocks. (line 50) 49491* NOTE_INSN_BASIC_BLOCK <1>: Basic Blocks. (line 52) 49492* NOTE_INSN_BLOCK_BEG: Insns. (line 208) 49493* NOTE_INSN_BLOCK_END: Insns. (line 208) 49494* NOTE_INSN_DELETED: Insns. (line 198) 49495* NOTE_INSN_DELETED_LABEL: Insns. (line 203) 49496* NOTE_INSN_EH_REGION_BEG: Insns. (line 214) 49497* NOTE_INSN_EH_REGION_END: Insns. (line 214) 49498* NOTE_INSN_FUNCTION_BEG: Insns. (line 221) 49499* NOTE_INSN_VAR_LOCATION: Insns. (line 225) 49500* NOTE_LINE_NUMBER: Insns. (line 183) 49501* NOTE_SOURCE_FILE: Insns. (line 183) 49502* NOTE_VAR_LOCATION: Insns. (line 225) 49503* NOTICE_UPDATE_CC: CC0 Condition Codes. 49504 (line 30) 49505* notMODEcc instruction pattern: Standard Names. (line 1280) 49506* NO_DBX_BNSYM_ENSYM: DBX Hooks. (line 25) 49507* NO_DBX_FUNCTION_END: DBX Hooks. (line 19) 49508* NO_DBX_GCC_MARKER: File Names and DBX. (line 27) 49509* NO_DBX_MAIN_SOURCE_DIRECTORY: File Names and DBX. (line 22) 49510* NO_DOLLAR_IN_LABEL: Label Output. (line 64) 49511* NO_DOT_IN_LABEL: Label Output. (line 70) 49512* NO_FUNCTION_CSE: Costs. (line 268) 49513* NO_IMPLICIT_EXTERN_C: Misc. (line 381) 49514* NO_PROFILE_COUNTERS: Profiling. (line 27) 49515* NO_REGS: Register Classes. (line 17) 49516* Number of iterations analysis: Number of iterations. 49517 (line 6) 49518* NUM_MACHINE_MODES: Machine Modes. (line 297) 49519* NUM_MODES_FOR_MODE_SWITCHING: Mode Switching. (line 30) 49520* N_REG_CLASSES: Register Classes. (line 81) 49521* o in constraint: Simple Constraints. (line 23) 49522* OACC_CACHE: OpenACC. (line 6) 49523* OACC_DATA: OpenACC. (line 6) 49524* OACC_DECLARE: OpenACC. (line 6) 49525* OACC_ENTER_DATA: OpenACC. (line 6) 49526* OACC_EXIT_DATA: OpenACC. (line 6) 49527* OACC_HOST_DATA: OpenACC. (line 6) 49528* OACC_KERNELS: OpenACC. (line 6) 49529* OACC_LOOP: OpenACC. (line 6) 49530* OACC_PARALLEL: OpenACC. (line 6) 49531* OACC_UPDATE: OpenACC. (line 6) 49532* OBJC_GEN_METHOD_LABEL: Label Output. (line 482) 49533* OBJC_JBLEN: Misc. (line 1085) 49534* OBJECT_FORMAT_COFF: Macros for Initialization. 49535 (line 96) 49536* offsettable address: Simple Constraints. (line 23) 49537* OFFSET_TYPE: Types. (line 6) 49538* OImode: Machine Modes. (line 51) 49539* OMP_ATOMIC: OpenMP. (line 6) 49540* OMP_CLAUSE: OpenMP. (line 6) 49541* OMP_CONTINUE: OpenMP. (line 6) 49542* OMP_CRITICAL: OpenMP. (line 6) 49543* OMP_FOR: OpenMP. (line 6) 49544* OMP_MASTER: OpenMP. (line 6) 49545* OMP_ORDERED: OpenMP. (line 6) 49546* OMP_PARALLEL: OpenMP. (line 6) 49547* OMP_RETURN: OpenMP. (line 6) 49548* OMP_SECTION: OpenMP. (line 6) 49549* OMP_SECTIONS: OpenMP. (line 6) 49550* OMP_SINGLE: OpenMP. (line 6) 49551* one_cmplM2 instruction pattern: Standard Names. (line 956) 49552* operand access: Accessors. (line 6) 49553* Operand Access Routines: SSA Operands. (line 116) 49554* operand constraints: Constraints. (line 6) 49555* Operand Iterators: SSA Operands. (line 116) 49556* operand predicates: Predicates. (line 6) 49557* operand substitution: Output Template. (line 6) 49558* Operands: Operands. (line 6) 49559* operands: SSA Operands. (line 6) 49560* operands <1>: Patterns. (line 55) 49561* operator predicates: Predicates. (line 6) 49562* optc-gen.awk: Options. (line 6) 49563* OPTGROUP_ALL: Optimization groups. 49564 (line 25) 49565* OPTGROUP_INLINE: Optimization groups. 49566 (line 15) 49567* OPTGROUP_IPA: Optimization groups. 49568 (line 9) 49569* OPTGROUP_LOOP: Optimization groups. 49570 (line 12) 49571* OPTGROUP_OTHER: Optimization groups. 49572 (line 21) 49573* OPTGROUP_VEC: Optimization groups. 49574 (line 18) 49575* optimization dumps: Optimization info. (line 6) 49576* optimization groups: Optimization groups. 49577 (line 6) 49578* optimization info file names: Dump files and streams. 49579 (line 6) 49580* Optimization infrastructure for GIMPLE: Tree SSA. (line 6) 49581* OPTIMIZE_MODE_SWITCHING: Mode Switching. (line 8) 49582* option specification files: Options. (line 6) 49583* optional hardware or system features: Run-time Target. (line 59) 49584* options, directory search: Including Patterns. (line 47) 49585* OPTION_DEFAULT_SPECS: Driver. (line 25) 49586* order of register allocation: Allocation Order. (line 6) 49587* ordered_comparison_operator: Machine-Independent Predicates. 49588 (line 115) 49589* ORDERED_EXPR: Unary and Binary Expressions. 49590 (line 6) 49591* Ordering of Patterns: Pattern Ordering. (line 6) 49592* ORIGINAL_REGNO: Special Accessors. (line 53) 49593* other register constraints: Simple Constraints. (line 171) 49594* outgoing_args_size: Stack Arguments. (line 48) 49595* OUTGOING_REGNO: Register Basics. (line 93) 49596* OUTGOING_REG_PARM_STACK_SPACE: Stack Arguments. (line 79) 49597* output of assembler code: File Framework. (line 6) 49598* output statements: Output Statement. (line 6) 49599* output templates: Output Template. (line 6) 49600* output_asm_insn: Output Statement. (line 52) 49601* OUTPUT_QUOTED_STRING: File Framework. (line 106) 49602* OVERLAPPING_REGISTER_NAMES: Instruction Output. (line 20) 49603* OVERLOAD: Functions for C++. (line 6) 49604* OVERRIDE_ABI_FORMAT: Register Arguments. (line 153) 49605* OVL_CURRENT: Functions for C++. (line 6) 49606* OVL_NEXT: Functions for C++. (line 6) 49607* p in constraint: Simple Constraints. (line 162) 49608* PAD_VARARGS_DOWN: Register Arguments. (line 234) 49609* parallel: Side Effects. (line 210) 49610* parameters, c++ abi: C++ ABI. (line 6) 49611* parameters, miscellaneous: Misc. (line 6) 49612* parameters, precompiled headers: PCH Target. (line 6) 49613* parity: Arithmetic. (line 242) 49614* parityM2 instruction pattern: Standard Names. (line 943) 49615* PARM_BOUNDARY: Storage Layout. (line 133) 49616* PARM_DECL: Declarations. (line 6) 49617* PARSE_LDD_OUTPUT: Macros for Initialization. 49618 (line 125) 49619* pass dumps: Passes. (line 6) 49620* passes and files of the compiler: Passes. (line 6) 49621* passing arguments: Interface. (line 36) 49622* pass_duplicate_computed_gotos: Edges. (line 161) 49623* PATH_SEPARATOR: Filesystem. (line 31) 49624* PATTERN: Insns. (line 284) 49625* pattern conditions: Patterns. (line 43) 49626* pattern names: Standard Names. (line 6) 49627* Pattern Ordering: Pattern Ordering. (line 6) 49628* patterns: Patterns. (line 6) 49629* pc: Regs and Memory. (line 357) 49630* pc and attributes: Insn Lengths. (line 20) 49631* pc, RTL sharing: Sharing. (line 25) 49632* PCC_BITFIELD_TYPE_MATTERS: Storage Layout. (line 330) 49633* PCC_STATIC_STRUCT_RETURN: Aggregate Return. (line 64) 49634* PC_REGNUM: Register Basics. (line 107) 49635* pc_rtx: Regs and Memory. (line 362) 49636* PDImode: Machine Modes. (line 40) 49637* peephole optimization, RTL representation: Side Effects. (line 244) 49638* peephole optimizer definitions: Peephole Definitions. 49639 (line 6) 49640* per-function data: Per-Function Data. (line 6) 49641* percent sign: Output Template. (line 6) 49642* PHI nodes: SSA. (line 31) 49643* PIC: PIC. (line 6) 49644* PIC_OFFSET_TABLE_REGNUM: PIC. (line 15) 49645* PIC_OFFSET_TABLE_REG_CALL_CLOBBERED: PIC. (line 25) 49646* pipeline hazard recognizer: Processor pipeline description. 49647 (line 6) 49648* pipeline hazard recognizer <1>: Processor pipeline description. 49649 (line 53) 49650* Plugins: Plugins. (line 6) 49651* plus: Arithmetic. (line 14) 49652* plus and attributes: Expressions. (line 83) 49653* plus, canonicalization of: Insn Canonicalizations. 49654 (line 27) 49655* PLUS_EXPR: Unary and Binary Expressions. 49656 (line 6) 49657* Pmode: Misc. (line 329) 49658* pmode_register_operand: Machine-Independent Predicates. 49659 (line 34) 49660* pointer: Types. (line 6) 49661* POINTERS_EXTEND_UNSIGNED: Storage Layout. (line 76) 49662* POINTER_PLUS_EXPR: Unary and Binary Expressions. 49663 (line 6) 49664* POINTER_SIZE: Storage Layout. (line 70) 49665* POINTER_TYPE: Types. (line 6) 49666* popcount: Arithmetic. (line 238) 49667* popcountM2 instruction pattern: Standard Names. (line 931) 49668* pops_args: Function Entry. (line 104) 49669* pop_operand: Machine-Independent Predicates. 49670 (line 87) 49671* portability: Portability. (line 6) 49672* position independent code: PIC. (line 6) 49673* POSTDECREMENT_EXPR: Unary and Binary Expressions. 49674 (line 6) 49675* POSTINCREMENT_EXPR: Unary and Binary Expressions. 49676 (line 6) 49677* post_dec: Incdec. (line 25) 49678* post_inc: Incdec. (line 30) 49679* POST_LINK_SPEC: Driver. (line 236) 49680* post_modify: Incdec. (line 33) 49681* post_order_compute, inverted_post_order_compute, walk_dominator_tree: Basic Blocks. 49682 (line 34) 49683* POWI_MAX_MULTS: Misc. (line 963) 49684* powM3 instruction pattern: Standard Names. (line 785) 49685* pragma: Misc. (line 387) 49686* PREDECREMENT_EXPR: Unary and Binary Expressions. 49687 (line 6) 49688* predefined macros: Run-time Target. (line 6) 49689* predicates: Predicates. (line 6) 49690* predicates and machine modes: Predicates. (line 31) 49691* predication: Conditional Execution. 49692 (line 6) 49693* predict.def: Profile information. 49694 (line 24) 49695* PREFERRED_DEBUGGING_TYPE: All Debuggers. (line 41) 49696* PREFERRED_RELOAD_CLASS: Register Classes. (line 249) 49697* PREFERRED_STACK_BOUNDARY: Storage Layout. (line 147) 49698* prefetch: Side Effects. (line 324) 49699* prefetch and /v: Flags. (line 214) 49700* prefetch instruction pattern: Standard Names. (line 1779) 49701* PREFETCH_SCHEDULE_BARRIER_P: Flags. (line 214) 49702* PREINCREMENT_EXPR: Unary and Binary Expressions. 49703 (line 6) 49704* presence_set: Processor pipeline description. 49705 (line 223) 49706* preserving SSA form: SSA. (line 74) 49707* pretend_args_size: Function Entry. (line 110) 49708* prev_active_insn: define_peephole. (line 60) 49709* PREV_INSN: Insns. (line 26) 49710* pre_dec: Incdec. (line 8) 49711* PRE_GCC3_DWARF_FRAME_REGISTERS: Frame Registers. (line 126) 49712* pre_inc: Incdec. (line 22) 49713* pre_modify: Incdec. (line 52) 49714* PRINT_OPERAND: Instruction Output. (line 95) 49715* PRINT_OPERAND_ADDRESS: Instruction Output. (line 122) 49716* PRINT_OPERAND_PUNCT_VALID_P: Instruction Output. (line 115) 49717* probe_stack instruction pattern: Standard Names. (line 1628) 49718* probe_stack_address instruction pattern: Standard Names. (line 1621) 49719* processor functional units: Processor pipeline description. 49720 (line 6) 49721* processor functional units <1>: Processor pipeline description. 49722 (line 68) 49723* processor pipeline description: Processor pipeline description. 49724 (line 6) 49725* product: Arithmetic. (line 93) 49726* profile feedback: Profile information. 49727 (line 14) 49728* profile representation: Profile information. 49729 (line 6) 49730* PROFILE_BEFORE_PROLOGUE: Profiling. (line 34) 49731* PROFILE_HOOK: Profiling. (line 22) 49732* profiling, code generation: Profiling. (line 6) 49733* program counter: Regs and Memory. (line 358) 49734* prologue: Function Entry. (line 6) 49735* prologue instruction pattern: Standard Names. (line 1717) 49736* PROMOTE_MODE: Storage Layout. (line 87) 49737* pseudo registers: Regs and Memory. (line 9) 49738* PSImode: Machine Modes. (line 32) 49739* PTRDIFF_TYPE: Type Layout. (line 163) 49740* purge_dead_edges: Edges. (line 103) 49741* purge_dead_edges <1>: Maintaining the CFG. 49742 (line 81) 49743* push address instruction: Simple Constraints. (line 162) 49744* pushM1 instruction pattern: Standard Names. (line 288) 49745* PUSH_ARGS: Stack Arguments. (line 17) 49746* PUSH_ARGS_REVERSED: Stack Arguments. (line 25) 49747* push_operand: Machine-Independent Predicates. 49748 (line 80) 49749* push_reload: Addressing Modes. (line 176) 49750* PUSH_ROUNDING: Stack Arguments. (line 31) 49751* PUT_CODE: RTL Objects. (line 47) 49752* PUT_MODE: Machine Modes. (line 294) 49753* PUT_REG_NOTE_KIND: Insns. (line 346) 49754* PUT_SDB_...: SDB and DWARF. (line 114) 49755* QCmode: Machine Modes. (line 199) 49756* QFmode: Machine Modes. (line 57) 49757* QImode: Machine Modes. (line 25) 49758* QImode, in insn: Insns. (line 268) 49759* QQmode: Machine Modes. (line 106) 49760* qualified type: Types. (line 6) 49761* qualified type <1>: Types for C++. (line 6) 49762* querying function unit reservations: Processor pipeline description. 49763 (line 90) 49764* question mark: Multi-Alternative. (line 42) 49765* quotient: Arithmetic. (line 116) 49766* r in constraint: Simple Constraints. (line 64) 49767* RDIV_EXPR: Unary and Binary Expressions. 49768 (line 6) 49769* READONLY_DATA_SECTION_ASM_OP: Sections. (line 62) 49770* real operands: SSA Operands. (line 6) 49771* REALPART_EXPR: Unary and Binary Expressions. 49772 (line 6) 49773* REAL_CST: Constant expressions. 49774 (line 6) 49775* REAL_LIBGCC_SPEC: Driver. (line 124) 49776* REAL_NM_FILE_NAME: Macros for Initialization. 49777 (line 105) 49778* REAL_TYPE: Types. (line 6) 49779* REAL_VALUE_ABS: Floating Point. (line 58) 49780* REAL_VALUE_ATOF: Floating Point. (line 39) 49781* REAL_VALUE_FIX: Floating Point. (line 31) 49782* REAL_VALUE_ISINF: Floating Point. (line 49) 49783* REAL_VALUE_ISNAN: Floating Point. (line 52) 49784* REAL_VALUE_NEGATE: Floating Point. (line 55) 49785* REAL_VALUE_NEGATIVE: Floating Point. (line 46) 49786* REAL_VALUE_TO_TARGET_DECIMAL128: Data Output. (line 147) 49787* REAL_VALUE_TO_TARGET_DECIMAL32: Data Output. (line 145) 49788* REAL_VALUE_TO_TARGET_DECIMAL64: Data Output. (line 146) 49789* REAL_VALUE_TO_TARGET_DOUBLE: Data Output. (line 143) 49790* REAL_VALUE_TO_TARGET_LONG_DOUBLE: Data Output. (line 144) 49791* REAL_VALUE_TO_TARGET_SINGLE: Data Output. (line 142) 49792* REAL_VALUE_TYPE: Floating Point. (line 25) 49793* REAL_VALUE_UNSIGNED_FIX: Floating Point. (line 34) 49794* recognizing insns: RTL Template. (line 6) 49795* recog_data.operand: Instruction Output. (line 54) 49796* RECORD_TYPE: Types. (line 6) 49797* RECORD_TYPE <1>: Classes. (line 6) 49798* redirect_edge_and_branch: Profile information. 49799 (line 71) 49800* redirect_edge_and_branch, redirect_jump: Maintaining the CFG. 49801 (line 90) 49802* reduc_plus_scal_M instruction pattern: Standard Names. (line 390) 49803* reduc_smax_scal_M instruction pattern: Standard Names. (line 380) 49804* reduc_smin_scal_M instruction pattern: Standard Names. (line 380) 49805* reduc_umax_scal_M instruction pattern: Standard Names. (line 385) 49806* reduc_umin_scal_M instruction pattern: Standard Names. (line 385) 49807* reference: Types. (line 6) 49808* REFERENCE_TYPE: Types. (line 6) 49809* reg: Regs and Memory. (line 9) 49810* reg and /f: Flags. (line 94) 49811* reg and /i: Flags. (line 89) 49812* reg and /v: Flags. (line 98) 49813* reg, RTL sharing: Sharing. (line 17) 49814* register allocation order: Allocation Order. (line 6) 49815* register class definitions: Register Classes. (line 6) 49816* register class preference constraints: Class Preferences. (line 6) 49817* register pairs: Values in Registers. 49818 (line 69) 49819* Register Transfer Language (RTL): RTL. (line 6) 49820* register usage: Registers. (line 6) 49821* registers arguments: Register Arguments. (line 6) 49822* registers in constraints: Simple Constraints. (line 64) 49823* REGISTER_MOVE_COST: Costs. (line 9) 49824* REGISTER_NAMES: Instruction Output. (line 8) 49825* register_operand: Machine-Independent Predicates. 49826 (line 29) 49827* REGISTER_PREFIX: Instruction Output. (line 150) 49828* REGISTER_TARGET_PRAGMAS: Misc. (line 387) 49829* REGMODE_NATURAL_SIZE: Values in Registers. 49830 (line 49) 49831* REGNO_MODE_CODE_OK_FOR_BASE_P: Register Classes. (line 172) 49832* REGNO_MODE_OK_FOR_BASE_P: Register Classes. (line 150) 49833* REGNO_MODE_OK_FOR_REG_BASE_P: Register Classes. (line 160) 49834* REGNO_OK_FOR_BASE_P: Register Classes. (line 146) 49835* REGNO_OK_FOR_INDEX_P: Register Classes. (line 186) 49836* REGNO_REG_CLASS: Register Classes. (line 105) 49837* regs_ever_live: Function Entry. (line 21) 49838* regular expressions: Processor pipeline description. 49839 (line 6) 49840* regular expressions <1>: Processor pipeline description. 49841 (line 105) 49842* REG_ALLOC_ORDER: Allocation Order. (line 8) 49843* REG_BR_PRED: Insns. (line 526) 49844* REG_BR_PROB: Insns. (line 519) 49845* REG_BR_PROB_BASE, BB_FREQ_BASE, count: Profile information. 49846 (line 82) 49847* REG_BR_PROB_BASE, EDGE_FREQUENCY: Profile information. 49848 (line 52) 49849* REG_CC_SETTER: Insns. (line 491) 49850* REG_CC_USER: Insns. (line 491) 49851* reg_class_contents: Register Basics. (line 59) 49852* REG_CLASS_CONTENTS: Register Classes. (line 91) 49853* reg_class_for_constraint: C Constraint Interface. 49854 (line 48) 49855* REG_CLASS_NAMES: Register Classes. (line 86) 49856* REG_CROSSING_JUMP: Insns. (line 405) 49857* REG_DEAD: Insns. (line 357) 49858* REG_DEAD, REG_UNUSED: Liveness information. 49859 (line 32) 49860* REG_DEP_ANTI: Insns. (line 513) 49861* REG_DEP_OUTPUT: Insns. (line 509) 49862* REG_DEP_TRUE: Insns. (line 506) 49863* REG_EH_REGION, EDGE_ABNORMAL_CALL: Edges. (line 109) 49864* REG_EQUAL: Insns. (line 420) 49865* REG_EQUIV: Insns. (line 420) 49866* REG_EXPR: Special Accessors. (line 58) 49867* REG_FRAME_RELATED_EXPR: Insns. (line 532) 49868* REG_FUNCTION_VALUE_P: Flags. (line 89) 49869* REG_INC: Insns. (line 373) 49870* reg_label and /v: Flags. (line 65) 49871* REG_LABEL_OPERAND: Insns. (line 387) 49872* REG_LABEL_TARGET: Insns. (line 396) 49873* reg_names: Register Basics. (line 59) 49874* reg_names <1>: Instruction Output. (line 107) 49875* REG_NONNEG: Insns. (line 379) 49876* REG_NOTES: Insns. (line 321) 49877* REG_NOTE_KIND: Insns. (line 346) 49878* REG_OFFSET: Special Accessors. (line 62) 49879* REG_OK_STRICT: Addressing Modes. (line 99) 49880* REG_PARM_STACK_SPACE: Stack Arguments. (line 58) 49881* REG_PARM_STACK_SPACE, and TARGET_FUNCTION_ARG: Register Arguments. 49882 (line 56) 49883* REG_POINTER: Flags. (line 94) 49884* REG_SETJMP: Insns. (line 414) 49885* REG_UNUSED: Insns. (line 366) 49886* REG_USERVAR_P: Flags. (line 98) 49887* REG_VALUE_IN_UNWIND_CONTEXT: Frame Registers. (line 158) 49888* REG_WORDS_BIG_ENDIAN: Storage Layout. (line 35) 49889* relative costs: Costs. (line 6) 49890* RELATIVE_PREFIX_NOT_LINKDIR: Driver. (line 266) 49891* reloading: RTL passes. (line 170) 49892* reload_completed: Standard Names. (line 1416) 49893* reload_in instruction pattern: Standard Names. (line 98) 49894* reload_in_progress: Standard Names. (line 57) 49895* reload_out instruction pattern: Standard Names. (line 98) 49896* remainder: Arithmetic. (line 136) 49897* remainderM3 instruction pattern: Standard Names. (line 639) 49898* reorder: GTY Options. (line 173) 49899* representation of RTL: RTL. (line 6) 49900* reservation delays: Processor pipeline description. 49901 (line 6) 49902* restore_stack_block instruction pattern: Standard Names. (line 1542) 49903* restore_stack_function instruction pattern: Standard Names. 49904 (line 1542) 49905* restore_stack_nonlocal instruction pattern: Standard Names. 49906 (line 1542) 49907* rest_of_decl_compilation: Parsing pass. (line 51) 49908* rest_of_type_compilation: Parsing pass. (line 51) 49909* RESULT_DECL: Declarations. (line 6) 49910* return: Side Effects. (line 72) 49911* return instruction pattern: Standard Names. (line 1390) 49912* return values in registers: Scalar Return. (line 6) 49913* returning aggregate values: Aggregate Return. (line 6) 49914* returning structures and unions: Interface. (line 10) 49915* RETURN_ADDRESS_POINTER_REGNUM: Frame Registers. (line 64) 49916* RETURN_ADDR_IN_PREVIOUS_FRAME: Frame Layout. (line 129) 49917* RETURN_ADDR_OFFSET: Exception Handling. (line 59) 49918* RETURN_ADDR_RTX: Frame Layout. (line 118) 49919* RETURN_EXPR: Statements for C++. (line 6) 49920* RETURN_STMT: Statements for C++. (line 6) 49921* return_val: Flags. (line 274) 49922* return_val, in call_insn: Flags. (line 24) 49923* return_val, in reg: Flags. (line 89) 49924* return_val, in symbol_ref: Flags. (line 202) 49925* reverse probability: Profile information. 49926 (line 66) 49927* REVERSE_CONDITION: MODE_CC Condition Codes. 49928 (line 92) 49929* REVERSIBLE_CC_MODE: MODE_CC Condition Codes. 49930 (line 77) 49931* right rotate: Arithmetic. (line 195) 49932* right shift: Arithmetic. (line 190) 49933* rintM2 instruction pattern: Standard Names. (line 837) 49934* RISC: Processor pipeline description. 49935 (line 6) 49936* RISC <1>: Processor pipeline description. 49937 (line 223) 49938* roots, marking: GGC Roots. (line 6) 49939* rotate: Arithmetic. (line 195) 49940* rotate <1>: Arithmetic. (line 195) 49941* rotatert: Arithmetic. (line 195) 49942* rotlM3 instruction pattern: Standard Names. (line 591) 49943* rotrM3 instruction pattern: Standard Names. (line 591) 49944* roundM2 instruction pattern: Standard Names. (line 814) 49945* ROUND_DIV_EXPR: Unary and Binary Expressions. 49946 (line 6) 49947* ROUND_MOD_EXPR: Unary and Binary Expressions. 49948 (line 6) 49949* ROUND_TYPE_ALIGN: Storage Layout. (line 427) 49950* RSHIFT_EXPR: Unary and Binary Expressions. 49951 (line 6) 49952* rsqrtM2 instruction pattern: Standard Names. (line 619) 49953* RTL addition: Arithmetic. (line 14) 49954* RTL addition with signed saturation: Arithmetic. (line 14) 49955* RTL addition with unsigned saturation: Arithmetic. (line 14) 49956* RTL classes: RTL Classes. (line 6) 49957* RTL comparison: Arithmetic. (line 46) 49958* RTL comparison operations: Comparisons. (line 6) 49959* RTL constant expression types: Constants. (line 6) 49960* RTL constants: Constants. (line 6) 49961* RTL declarations: RTL Declarations. (line 6) 49962* RTL difference: Arithmetic. (line 38) 49963* RTL expression: RTL Objects. (line 6) 49964* RTL expressions for arithmetic: Arithmetic. (line 6) 49965* RTL format: RTL Classes. (line 72) 49966* RTL format characters: RTL Classes. (line 77) 49967* RTL function-call insns: Calls. (line 6) 49968* RTL insn template: RTL Template. (line 6) 49969* RTL integers: RTL Objects. (line 6) 49970* RTL memory expressions: Regs and Memory. (line 6) 49971* RTL object types: RTL Objects. (line 6) 49972* RTL postdecrement: Incdec. (line 6) 49973* RTL postincrement: Incdec. (line 6) 49974* RTL predecrement: Incdec. (line 6) 49975* RTL preincrement: Incdec. (line 6) 49976* RTL register expressions: Regs and Memory. (line 6) 49977* RTL representation: RTL. (line 6) 49978* RTL side effect expressions: Side Effects. (line 6) 49979* RTL strings: RTL Objects. (line 6) 49980* RTL structure sharing assumptions: Sharing. (line 6) 49981* RTL subtraction: Arithmetic. (line 38) 49982* RTL subtraction with signed saturation: Arithmetic. (line 38) 49983* RTL subtraction with unsigned saturation: Arithmetic. (line 38) 49984* RTL sum: Arithmetic. (line 14) 49985* RTL vectors: RTL Objects. (line 6) 49986* RTL_CONST_CALL_P: Flags. (line 19) 49987* RTL_CONST_OR_PURE_CALL_P: Flags. (line 29) 49988* RTL_LOOPING_CONST_OR_PURE_CALL_P: Flags. (line 33) 49989* RTL_PURE_CALL_P: Flags. (line 24) 49990* RTX (See RTL): RTL Objects. (line 6) 49991* RTX codes, classes of: RTL Classes. (line 6) 49992* RTX_FRAME_RELATED_P: Flags. (line 107) 49993* run-time conventions: Interface. (line 6) 49994* run-time target specification: Run-time Target. (line 6) 49995* s in constraint: Simple Constraints. (line 100) 49996* SAD_EXPR: Vectors. (line 6) 49997* same_type_p: Types. (line 86) 49998* SAmode: Machine Modes. (line 150) 49999* satfractMN2 instruction pattern: Standard Names. (line 1141) 50000* satfractunsMN2 instruction pattern: Standard Names. (line 1154) 50001* satisfies_constraint_M: C Constraint Interface. 50002 (line 36) 50003* sat_fract: Conversions. (line 90) 50004* SAVE_EXPR: Unary and Binary Expressions. 50005 (line 6) 50006* save_stack_block instruction pattern: Standard Names. (line 1542) 50007* save_stack_function instruction pattern: Standard Names. (line 1542) 50008* save_stack_nonlocal instruction pattern: Standard Names. (line 1542) 50009* SBSS_SECTION_ASM_OP: Sections. (line 75) 50010* Scalar evolutions: Scalar evolutions. (line 6) 50011* scalars, returned as values: Scalar Return. (line 6) 50012* scalbM3 instruction pattern: Standard Names. (line 646) 50013* SCHED_GROUP_P: Flags. (line 148) 50014* SCmode: Machine Modes. (line 199) 50015* scratch: Regs and Memory. (line 294) 50016* scratch operands: Regs and Memory. (line 294) 50017* scratch, RTL sharing: Sharing. (line 35) 50018* scratch_operand: Machine-Independent Predicates. 50019 (line 49) 50020* SDATA_SECTION_ASM_OP: Sections. (line 57) 50021* SDB_ALLOW_FORWARD_REFERENCES: SDB and DWARF. (line 132) 50022* SDB_ALLOW_UNKNOWN_REFERENCES: SDB and DWARF. (line 127) 50023* SDB_DEBUGGING_INFO: SDB and DWARF. (line 8) 50024* SDB_DELIM: SDB and DWARF. (line 120) 50025* SDB_OUTPUT_SOURCE_LINE: SDB and DWARF. (line 137) 50026* SDmode: Machine Modes. (line 88) 50027* sdot_prodM instruction pattern: Standard Names. (line 395) 50028* search options: Including Patterns. (line 47) 50029* SECONDARY_INPUT_RELOAD_CLASS: Register Classes. (line 391) 50030* SECONDARY_MEMORY_NEEDED: Register Classes. (line 447) 50031* SECONDARY_MEMORY_NEEDED_MODE: Register Classes. (line 466) 50032* SECONDARY_MEMORY_NEEDED_RTX: Register Classes. (line 457) 50033* SECONDARY_OUTPUT_RELOAD_CLASS: Register Classes. (line 392) 50034* SECONDARY_RELOAD_CLASS: Register Classes. (line 390) 50035* SELECT_CC_MODE: MODE_CC Condition Codes. 50036 (line 6) 50037* sequence: Side Effects. (line 259) 50038* Sequence iterators: Sequence iterators. (line 6) 50039* set: Side Effects. (line 15) 50040* set and /f: Flags. (line 107) 50041* setmemM instruction pattern: Standard Names. (line 1005) 50042* SETUP_FRAME_ADDRESSES: Frame Layout. (line 96) 50043* SET_ASM_OP: Label Output. (line 451) 50044* SET_ASM_OP <1>: Label Output. (line 462) 50045* set_attr: Tagging Insns. (line 31) 50046* set_attr_alternative: Tagging Insns. (line 49) 50047* set_bb_seq: GIMPLE sequences. (line 75) 50048* SET_DEST: Side Effects. (line 69) 50049* SET_IS_RETURN_P: Flags. (line 157) 50050* SET_LABEL_KIND: Insns. (line 146) 50051* set_optab_libfunc: Library Calls. (line 15) 50052* SET_RATIO: Costs. (line 216) 50053* SET_SRC: Side Effects. (line 69) 50054* set_thread_pointerMODE instruction pattern: Standard Names. 50055 (line 2073) 50056* SET_TYPE_STRUCTURAL_EQUALITY: Types. (line 6) 50057* SET_TYPE_STRUCTURAL_EQUALITY <1>: Types. (line 81) 50058* SFmode: Machine Modes. (line 69) 50059* sharing of RTL components: Sharing. (line 6) 50060* shift: Arithmetic. (line 173) 50061* SHIFT_COUNT_TRUNCATED: Misc. (line 112) 50062* SHLIB_SUFFIX: Macros for Initialization. 50063 (line 133) 50064* SHORT_ACCUM_TYPE_SIZE: Type Layout. (line 82) 50065* SHORT_FRACT_TYPE_SIZE: Type Layout. (line 62) 50066* SHORT_IMMEDIATES_SIGN_EXTEND: Misc. (line 86) 50067* SHORT_TYPE_SIZE: Type Layout. (line 15) 50068* sibcall_epilogue instruction pattern: Standard Names. (line 1749) 50069* sibling call: Edges. (line 121) 50070* SIBLING_CALL_P: Flags. (line 161) 50071* signed division: Arithmetic. (line 116) 50072* signed division with signed saturation: Arithmetic. (line 116) 50073* signed maximum: Arithmetic. (line 141) 50074* signed minimum: Arithmetic. (line 141) 50075* significandM2 instruction pattern: Standard Names. (line 778) 50076* sign_extend: Conversions. (line 23) 50077* sign_extract: Bit-Fields. (line 8) 50078* sign_extract, canonicalization of: Insn Canonicalizations. 50079 (line 87) 50080* SIG_ATOMIC_TYPE: Type Layout. (line 214) 50081* SImode: Machine Modes. (line 37) 50082* simple constraints: Simple Constraints. (line 6) 50083* simple_return: Side Effects. (line 86) 50084* simple_return instruction pattern: Standard Names. (line 1405) 50085* sincosM3 instruction pattern: Standard Names. (line 674) 50086* sinM2 instruction pattern: Standard Names. (line 668) 50087* SIZETYPE: Type Layout. (line 153) 50088* SIZE_ASM_OP: Label Output. (line 33) 50089* SIZE_TYPE: Type Layout. (line 137) 50090* skip: GTY Options. (line 76) 50091* SLOW_BYTE_ACCESS: Costs. (line 117) 50092* SLOW_UNALIGNED_ACCESS: Costs. (line 132) 50093* smax: Arithmetic. (line 141) 50094* smin: Arithmetic. (line 141) 50095* sms, swing, software pipelining: RTL passes. (line 123) 50096* smulM3_highpart instruction pattern: Standard Names. (line 504) 50097* soft float library: Soft float library routines. 50098 (line 6) 50099* special: GTY Options. (line 236) 50100* special predicates: Predicates. (line 31) 50101* SPECS: Target Fragment. (line 191) 50102* speed of instructions: Costs. (line 6) 50103* splitting instructions: Insn Splitting. (line 6) 50104* split_block: Maintaining the CFG. 50105 (line 97) 50106* SQmode: Machine Modes. (line 114) 50107* sqrt: Arithmetic. (line 206) 50108* sqrtM2 instruction pattern: Standard Names. (line 613) 50109* square root: Arithmetic. (line 206) 50110* SSA: SSA. (line 6) 50111* ssaddM3 instruction pattern: Standard Names. (line 301) 50112* ssadM instruction pattern: Standard Names. (line 404) 50113* ssashlM3 instruction pattern: Standard Names. (line 579) 50114* SSA_NAME_DEF_STMT: SSA. (line 184) 50115* SSA_NAME_VERSION: SSA. (line 189) 50116* ssdivM3 instruction pattern: Standard Names. (line 301) 50117* ssmaddMN4 instruction pattern: Standard Names. (line 527) 50118* ssmsubMN4 instruction pattern: Standard Names. (line 551) 50119* ssmulM3 instruction pattern: Standard Names. (line 301) 50120* ssnegM2 instruction pattern: Standard Names. (line 603) 50121* sssubM3 instruction pattern: Standard Names. (line 301) 50122* ss_abs: Arithmetic. (line 200) 50123* ss_ashift: Arithmetic. (line 173) 50124* ss_div: Arithmetic. (line 116) 50125* ss_minus: Arithmetic. (line 38) 50126* ss_mult: Arithmetic. (line 93) 50127* ss_neg: Arithmetic. (line 82) 50128* ss_plus: Arithmetic. (line 14) 50129* ss_truncate: Conversions. (line 43) 50130* stack arguments: Stack Arguments. (line 6) 50131* stack frame layout: Frame Layout. (line 6) 50132* stack smashing protection: Stack Smashing Protection. 50133 (line 6) 50134* STACK_ALIGNMENT_NEEDED: Frame Layout. (line 43) 50135* STACK_BOUNDARY: Storage Layout. (line 139) 50136* STACK_CHECK_BUILTIN: Stack Checking. (line 31) 50137* STACK_CHECK_FIXED_FRAME_SIZE: Stack Checking. (line 83) 50138* STACK_CHECK_MAX_FRAME_SIZE: Stack Checking. (line 74) 50139* STACK_CHECK_MAX_VAR_SIZE: Stack Checking. (line 90) 50140* STACK_CHECK_MOVING_SP: Stack Checking. (line 53) 50141* STACK_CHECK_PROBE_INTERVAL_EXP: Stack Checking. (line 45) 50142* STACK_CHECK_PROTECT: Stack Checking. (line 62) 50143* STACK_CHECK_STATIC_BUILTIN: Stack Checking. (line 38) 50144* STACK_DYNAMIC_OFFSET: Frame Layout. (line 69) 50145* STACK_DYNAMIC_OFFSET and virtual registers: Regs and Memory. 50146 (line 83) 50147* STACK_GROWS_DOWNWARD: Frame Layout. (line 8) 50148* STACK_PARMS_IN_REG_PARM_AREA: Stack Arguments. (line 89) 50149* STACK_POINTER_OFFSET: Frame Layout. (line 53) 50150* STACK_POINTER_OFFSET and virtual registers: Regs and Memory. 50151 (line 93) 50152* STACK_POINTER_REGNUM: Frame Registers. (line 8) 50153* STACK_POINTER_REGNUM and virtual registers: Regs and Memory. 50154 (line 83) 50155* stack_pointer_rtx: Frame Registers. (line 104) 50156* stack_protect_set instruction pattern: Standard Names. (line 2083) 50157* stack_protect_test instruction pattern: Standard Names. (line 2093) 50158* STACK_PUSH_CODE: Frame Layout. (line 12) 50159* STACK_REGS: Stack Registers. (line 19) 50160* STACK_REG_COVER_CLASS: Stack Registers. (line 22) 50161* STACK_SAVEAREA_MODE: Storage Layout. (line 443) 50162* STACK_SIZE_MODE: Storage Layout. (line 454) 50163* STACK_SLOT_ALIGNMENT: Storage Layout. (line 275) 50164* standard pattern names: Standard Names. (line 6) 50165* STANDARD_STARTFILE_PREFIX: Driver. (line 278) 50166* STANDARD_STARTFILE_PREFIX_1: Driver. (line 285) 50167* STANDARD_STARTFILE_PREFIX_2: Driver. (line 292) 50168* STARTFILE_SPEC: Driver. (line 147) 50169* STARTING_FRAME_OFFSET: Frame Layout. (line 34) 50170* STARTING_FRAME_OFFSET and virtual registers: Regs and Memory. 50171 (line 74) 50172* Statement and operand traversals: Statement and operand traversals. 50173 (line 6) 50174* Statement Sequences: Statement Sequences. 50175 (line 6) 50176* Statements: Statements. (line 6) 50177* statements: Function Properties. 50178 (line 6) 50179* statements <1>: Statements for C++. (line 6) 50180* Static profile estimation: Profile information. 50181 (line 24) 50182* static single assignment: SSA. (line 6) 50183* STATIC_CHAIN_INCOMING_REGNUM: Frame Registers. (line 77) 50184* STATIC_CHAIN_REGNUM: Frame Registers. (line 76) 50185* stdarg.h and register arguments: Register Arguments. (line 51) 50186* STDC_0_IN_SYSTEM_HEADERS: Misc. (line 350) 50187* STMT_EXPR: Unary and Binary Expressions. 50188 (line 6) 50189* STMT_IS_FULL_EXPR_P: Statements for C++. (line 22) 50190* storage layout: Storage Layout. (line 6) 50191* STORE_FLAG_VALUE: Misc. (line 201) 50192* store_multiple instruction pattern: Standard Names. (line 159) 50193* strcpy: Storage Layout. (line 228) 50194* STRICT_ALIGNMENT: Storage Layout. (line 325) 50195* strict_low_part: RTL Declarations. (line 9) 50196* strict_memory_address_p: Addressing Modes. (line 186) 50197* STRING_CST: Constant expressions. 50198 (line 6) 50199* STRING_POOL_ADDRESS_P: Flags. (line 165) 50200* strlenM instruction pattern: Standard Names. (line 1076) 50201* structure value address: Aggregate Return. (line 6) 50202* structures, returning: Interface. (line 10) 50203* STRUCTURE_SIZE_BOUNDARY: Storage Layout. (line 317) 50204* subM3 instruction pattern: Standard Names. (line 301) 50205* SUBOBJECT: Statements for C++. (line 6) 50206* SUBOBJECT_CLEANUP: Statements for C++. (line 6) 50207* subreg: Regs and Memory. (line 97) 50208* subreg and /s: Flags. (line 187) 50209* subreg and /u: Flags. (line 180) 50210* subreg and /u and /v: Flags. (line 170) 50211* subreg, in strict_low_part: RTL Declarations. (line 9) 50212* SUBREG_BYTE: Regs and Memory. (line 285) 50213* SUBREG_PROMOTED_UNSIGNED_P: Flags. (line 170) 50214* SUBREG_PROMOTED_UNSIGNED_SET: Flags. (line 180) 50215* SUBREG_PROMOTED_VAR_P: Flags. (line 187) 50216* SUBREG_REG: Regs and Memory. (line 285) 50217* subst iterators in .md files: Subst Iterators. (line 6) 50218* subvM4 instruction pattern: Standard Names. (line 317) 50219* SUCCESS_EXIT_CODE: Host Misc. (line 12) 50220* SUPPORTS_INIT_PRIORITY: Macros for Initialization. 50221 (line 57) 50222* SUPPORTS_ONE_ONLY: Label Output. (line 290) 50223* SUPPORTS_WEAK: Label Output. (line 264) 50224* SWITCHABLE_TARGET: Run-time Target. (line 164) 50225* SWITCH_BODY: Statements for C++. (line 6) 50226* SWITCH_COND: Statements for C++. (line 6) 50227* SWITCH_STMT: Statements for C++. (line 6) 50228* symbolic label: Sharing. (line 20) 50229* SYMBOL_FLAG_ANCHOR: Special Accessors. (line 117) 50230* SYMBOL_FLAG_EXTERNAL: Special Accessors. (line 99) 50231* SYMBOL_FLAG_FUNCTION: Special Accessors. (line 92) 50232* SYMBOL_FLAG_HAS_BLOCK_INFO: Special Accessors. (line 113) 50233* SYMBOL_FLAG_LOCAL: Special Accessors. (line 95) 50234* SYMBOL_FLAG_SMALL: Special Accessors. (line 104) 50235* SYMBOL_FLAG_TLS_SHIFT: Special Accessors. (line 108) 50236* symbol_ref: Constants. (line 117) 50237* symbol_ref and /f: Flags. (line 165) 50238* symbol_ref and /i: Flags. (line 202) 50239* symbol_ref and /u: Flags. (line 10) 50240* symbol_ref and /v: Flags. (line 206) 50241* symbol_ref, RTL sharing: Sharing. (line 20) 50242* SYMBOL_REF_ANCHOR_P: Special Accessors. (line 117) 50243* SYMBOL_REF_BLOCK: Special Accessors. (line 130) 50244* SYMBOL_REF_BLOCK_OFFSET: Special Accessors. (line 135) 50245* SYMBOL_REF_CONSTANT: Special Accessors. (line 78) 50246* SYMBOL_REF_DATA: Special Accessors. (line 82) 50247* SYMBOL_REF_DECL: Special Accessors. (line 67) 50248* SYMBOL_REF_EXTERNAL_P: Special Accessors. (line 99) 50249* SYMBOL_REF_FLAG: Flags. (line 206) 50250* SYMBOL_REF_FLAG, in TARGET_ENCODE_SECTION_INFO: Sections. (line 277) 50251* SYMBOL_REF_FLAGS: Special Accessors. (line 86) 50252* SYMBOL_REF_FUNCTION_P: Special Accessors. (line 92) 50253* SYMBOL_REF_HAS_BLOCK_INFO_P: Special Accessors. (line 113) 50254* SYMBOL_REF_LOCAL_P: Special Accessors. (line 95) 50255* SYMBOL_REF_SMALL_P: Special Accessors. (line 104) 50256* SYMBOL_REF_TLS_MODEL: Special Accessors. (line 108) 50257* SYMBOL_REF_USED: Flags. (line 197) 50258* SYMBOL_REF_WEAK: Flags. (line 202) 50259* sync_addMODE instruction pattern: Standard Names. (line 1848) 50260* sync_andMODE instruction pattern: Standard Names. (line 1848) 50261* sync_compare_and_swapMODE instruction pattern: Standard Names. 50262 (line 1808) 50263* sync_iorMODE instruction pattern: Standard Names. (line 1848) 50264* sync_lock_releaseMODE instruction pattern: Standard Names. (line 1913) 50265* sync_lock_test_and_setMODE instruction pattern: Standard Names. 50266 (line 1887) 50267* sync_nandMODE instruction pattern: Standard Names. (line 1848) 50268* sync_new_addMODE instruction pattern: Standard Names. (line 1880) 50269* sync_new_andMODE instruction pattern: Standard Names. (line 1880) 50270* sync_new_iorMODE instruction pattern: Standard Names. (line 1880) 50271* sync_new_nandMODE instruction pattern: Standard Names. (line 1880) 50272* sync_new_subMODE instruction pattern: Standard Names. (line 1880) 50273* sync_new_xorMODE instruction pattern: Standard Names. (line 1880) 50274* sync_old_addMODE instruction pattern: Standard Names. (line 1863) 50275* sync_old_andMODE instruction pattern: Standard Names. (line 1863) 50276* sync_old_iorMODE instruction pattern: Standard Names. (line 1863) 50277* sync_old_nandMODE instruction pattern: Standard Names. (line 1863) 50278* sync_old_subMODE instruction pattern: Standard Names. (line 1863) 50279* sync_old_xorMODE instruction pattern: Standard Names. (line 1863) 50280* sync_subMODE instruction pattern: Standard Names. (line 1848) 50281* sync_xorMODE instruction pattern: Standard Names. (line 1848) 50282* SYSROOT_HEADERS_SUFFIX_SPEC: Driver. (line 176) 50283* SYSROOT_SUFFIX_SPEC: Driver. (line 171) 50284* t-TARGET: Target Fragment. (line 6) 50285* table jump: Basic Blocks. (line 67) 50286* tablejump instruction pattern: Standard Names. (line 1478) 50287* tag: GTY Options. (line 88) 50288* tagging insns: Tagging Insns. (line 6) 50289* tail calls: Tail Calls. (line 6) 50290* TAmode: Machine Modes. (line 158) 50291* tanM2 instruction pattern: Standard Names. (line 685) 50292* target attributes: Target Attributes. (line 6) 50293* target description macros: Target Macros. (line 6) 50294* target functions: Target Structure. (line 6) 50295* target hooks: Target Structure. (line 6) 50296* target makefile fragment: Target Fragment. (line 6) 50297* target specifications: Run-time Target. (line 6) 50298* targetm: Target Structure. (line 6) 50299* targets, makefile: Makefile. (line 6) 50300* TARGET_ABSOLUTE_BIGGEST_ALIGNMENT: Storage Layout. (line 168) 50301* TARGET_ADDRESS_COST: Costs. (line 323) 50302* TARGET_ADDR_SPACE_ADDRESS_MODE: Named Address Spaces. 50303 (line 42) 50304* TARGET_ADDR_SPACE_CONVERT: Named Address Spaces. 50305 (line 89) 50306* TARGET_ADDR_SPACE_DEBUG: Named Address Spaces. 50307 (line 99) 50308* TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P: Named Address Spaces. 50309 (line 59) 50310* TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS: Named Address Spaces. 50311 (line 67) 50312* TARGET_ADDR_SPACE_POINTER_MODE: Named Address Spaces. 50313 (line 36) 50314* TARGET_ADDR_SPACE_SUBSET_P: Named Address Spaces. 50315 (line 74) 50316* TARGET_ADDR_SPACE_VALID_POINTER_MODE: Named Address Spaces. 50317 (line 48) 50318* TARGET_ADDR_SPACE_ZERO_ADDRESS_VALID: Named Address Spaces. 50319 (line 83) 50320* TARGET_ALIGN_ANON_BITFIELD: Storage Layout. (line 402) 50321* TARGET_ALLOCATE_INITIAL_VALUE: Misc. (line 810) 50322* TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS: Misc. (line 1107) 50323* TARGET_ALWAYS_STRIP_DOTDOT: Driver. (line 250) 50324* TARGET_ARG_PARTIAL_BYTES: Register Arguments. (line 95) 50325* TARGET_ARM_EABI_UNWINDER: Exception Region Output. 50326 (line 134) 50327* TARGET_ARRAY_MODE_SUPPORTED_P: Register Arguments. (line 345) 50328* TARGET_ASAN_SHADOW_OFFSET: Misc. (line 1135) 50329* TARGET_ASM_ALIGNED_DI_OP: Data Output. (line 9) 50330* TARGET_ASM_ALIGNED_HI_OP: Data Output. (line 7) 50331* TARGET_ASM_ALIGNED_SI_OP: Data Output. (line 8) 50332* TARGET_ASM_ALIGNED_TI_OP: Data Output. (line 10) 50333* TARGET_ASM_ASSEMBLE_UNDEFINED_DECL: Label Output. (line 231) 50334* TARGET_ASM_ASSEMBLE_VISIBILITY: Label Output. (line 301) 50335* TARGET_ASM_BYTE_OP: Data Output. (line 6) 50336* TARGET_ASM_CAN_OUTPUT_MI_THUNK: Function Entry. (line 202) 50337* TARGET_ASM_CLOSE_PAREN: Data Output. (line 133) 50338* TARGET_ASM_CODE_END: File Framework. (line 57) 50339* TARGET_ASM_CONSTRUCTOR: Macros for Initialization. 50340 (line 68) 50341* TARGET_ASM_DECLARE_CONSTANT_NAME: Label Output. (line 177) 50342* TARGET_ASM_DECL_END: Data Output. (line 38) 50343* TARGET_ASM_DESTRUCTOR: Macros for Initialization. 50344 (line 82) 50345* TARGET_ASM_EMIT_EXCEPT_PERSONALITY: Dispatch Tables. (line 80) 50346* TARGET_ASM_EMIT_EXCEPT_TABLE_LABEL: Dispatch Tables. (line 73) 50347* TARGET_ASM_EMIT_UNWIND_LABEL: Dispatch Tables. (line 61) 50348* TARGET_ASM_EXTERNAL_LIBCALL: Label Output. (line 337) 50349* TARGET_ASM_FILE_END: File Framework. (line 35) 50350* TARGET_ASM_FILE_START: File Framework. (line 8) 50351* TARGET_ASM_FILE_START_APP_OFF: File Framework. (line 16) 50352* TARGET_ASM_FILE_START_FILE_DIRECTIVE: File Framework. (line 29) 50353* TARGET_ASM_FINAL_POSTSCAN_INSN: Instruction Output. (line 82) 50354* TARGET_ASM_FUNCTION_BEGIN_EPILOGUE: Function Entry. (line 59) 50355* TARGET_ASM_FUNCTION_END_PROLOGUE: Function Entry. (line 53) 50356* TARGET_ASM_FUNCTION_EPILOGUE: Function Entry. (line 65) 50357* TARGET_ASM_FUNCTION_PROLOGUE: Function Entry. (line 9) 50358* TARGET_ASM_FUNCTION_RODATA_SECTION: Sections. (line 213) 50359* TARGET_ASM_FUNCTION_SECTION: File Framework. (line 121) 50360* TARGET_ASM_FUNCTION_SWITCHED_TEXT_SECTIONS: File Framework. 50361 (line 131) 50362* TARGET_ASM_GLOBALIZE_DECL_NAME: Label Output. (line 222) 50363* TARGET_ASM_GLOBALIZE_LABEL: Label Output. (line 213) 50364* TARGET_ASM_INIT_SECTIONS: Sections. (line 159) 50365* TARGET_ASM_INTEGER: Data Output. (line 25) 50366* TARGET_ASM_INTERNAL_LABEL: Label Output. (line 380) 50367* TARGET_ASM_JUMP_ALIGN_MAX_SKIP: Alignment Output. (line 21) 50368* TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP: Alignment Output. 50369 (line 34) 50370* TARGET_ASM_LABEL_ALIGN_MAX_SKIP: Alignment Output. (line 68) 50371* TARGET_ASM_LOOP_ALIGN_MAX_SKIP: Alignment Output. (line 53) 50372* TARGET_ASM_LTO_END: File Framework. (line 52) 50373* TARGET_ASM_LTO_START: File Framework. (line 47) 50374* TARGET_ASM_MARK_DECL_PRESERVED: Label Output. (line 343) 50375* TARGET_ASM_MERGEABLE_RODATA_PREFIX: Sections. (line 221) 50376* TARGET_ASM_NAMED_SECTION: File Framework. (line 113) 50377* TARGET_ASM_OPEN_PAREN: Data Output. (line 132) 50378* TARGET_ASM_OUTPUT_ADDR_CONST_EXTRA: Data Output. (line 42) 50379* TARGET_ASM_OUTPUT_ANCHOR: Anchored Addresses. (line 42) 50380* TARGET_ASM_OUTPUT_DWARF_DTPREL: SDB and DWARF. (line 108) 50381* TARGET_ASM_OUTPUT_IDENT: File Framework. (line 100) 50382* TARGET_ASM_OUTPUT_MI_THUNK: Function Entry. (line 160) 50383* TARGET_ASM_OUTPUT_SOURCE_FILENAME: File Framework. (line 91) 50384* TARGET_ASM_RECORD_GCC_SWITCHES: File Framework. (line 162) 50385* TARGET_ASM_RECORD_GCC_SWITCHES_SECTION: File Framework. (line 207) 50386* TARGET_ASM_RELOC_RW_MASK: Sections. (line 168) 50387* TARGET_ASM_SELECT_RTX_SECTION: Sections. (line 230) 50388* TARGET_ASM_SELECT_SECTION: Sections. (line 179) 50389* TARGET_ASM_TM_CLONE_TABLE_SECTION: Sections. (line 226) 50390* TARGET_ASM_TRAMPOLINE_TEMPLATE: Trampolines. (line 28) 50391* TARGET_ASM_TTYPE: Exception Region Output. 50392 (line 128) 50393* TARGET_ASM_UNALIGNED_DI_OP: Data Output. (line 13) 50394* TARGET_ASM_UNALIGNED_HI_OP: Data Output. (line 11) 50395* TARGET_ASM_UNALIGNED_SI_OP: Data Output. (line 12) 50396* TARGET_ASM_UNALIGNED_TI_OP: Data Output. (line 14) 50397* TARGET_ASM_UNIQUE_SECTION: Sections. (line 201) 50398* TARGET_ASM_UNWIND_EMIT: Dispatch Tables. (line 87) 50399* TARGET_ASM_UNWIND_EMIT_BEFORE_INSN: Dispatch Tables. (line 93) 50400* TARGET_ATOMIC_ALIGN_FOR_MODE: Misc. (line 1154) 50401* TARGET_ATOMIC_ASSIGN_EXPAND_FENV: Misc. (line 1160) 50402* TARGET_ATOMIC_TEST_AND_SET_TRUEVAL: Misc. (line 1145) 50403* TARGET_ATTRIBUTE_TABLE: Target Attributes. (line 10) 50404* TARGET_ATTRIBUTE_TAKES_IDENTIFIER_P: Target Attributes. (line 17) 50405* TARGET_BINDS_LOCAL_P: Sections. (line 308) 50406* TARGET_BRANCH_TARGET_REGISTER_CALLEE_SAVED: Misc. (line 907) 50407* TARGET_BRANCH_TARGET_REGISTER_CLASS: Misc. (line 900) 50408* TARGET_BUILD_BUILTIN_VA_LIST: Register Arguments. (line 285) 50409* TARGET_BUILTIN_CHKP_FUNCTION: Misc. (line 625) 50410* TARGET_BUILTIN_DECL: Misc. (line 604) 50411* TARGET_BUILTIN_RECIPROCAL: Addressing Modes. (line 261) 50412* TARGET_BUILTIN_SETJMP_FRAME_VALUE: Frame Layout. (line 103) 50413* TARGET_CALLEE_COPIES: Register Arguments. (line 127) 50414* TARGET_CALL_ARGS: Varargs. (line 123) 50415* TARGET_CALL_FUSAGE_CONTAINS_NON_CALLEE_CLOBBERS: Miscellaneous Register Hooks. 50416 (line 6) 50417* TARGET_CANNOT_FORCE_CONST_MEM: Addressing Modes. (line 234) 50418* TARGET_CANNOT_MODIFY_JUMPS_P: Misc. (line 887) 50419* TARGET_CANNOT_SUBSTITUTE_MEM_EQUIV_P: Register Classes. (line 597) 50420* TARGET_CANONICALIZE_COMPARISON: MODE_CC Condition Codes. 50421 (line 55) 50422* TARGET_CANONICAL_VA_LIST_TYPE: Register Arguments. (line 306) 50423* TARGET_CAN_ELIMINATE: Elimination. (line 73) 50424* TARGET_CAN_FOLLOW_JUMP: Misc. (line 796) 50425* TARGET_CAN_INLINE_P: Target Attributes. (line 165) 50426* TARGET_CAN_USE_DOLOOP_P: Misc. (line 760) 50427* TARGET_CASE_VALUES_THRESHOLD: Misc. (line 46) 50428* TARGET_CC_MODES_COMPATIBLE: MODE_CC Condition Codes. 50429 (line 120) 50430* TARGET_CHECK_PCH_TARGET_FLAGS: PCH Target. (line 26) 50431* TARGET_CHECK_STRING_OBJECT_FORMAT_ARG: Run-time Target. (line 119) 50432* TARGET_CHKP_BOUND_MODE: Misc. (line 697) 50433* TARGET_CHKP_BOUND_TYPE: Misc. (line 695) 50434* TARGET_CHKP_FUNCTION_VALUE_BOUNDS: Varargs. (line 182) 50435* TARGET_CHKP_INITIALIZE_BOUNDS: Misc. (line 703) 50436* TARGET_CHKP_MAKE_BOUNDS_CONSTANT: Misc. (line 699) 50437* TARGET_CLASS_LIKELY_SPILLED_P: Register Classes. (line 489) 50438* TARGET_CLASS_MAX_NREGS: Register Classes. (line 505) 50439* TARGET_COMMUTATIVE_P: Misc. (line 803) 50440* TARGET_COMPARE_VERSION_PRIORITY: Misc. (line 737) 50441* TARGET_COMP_TYPE_ATTRIBUTES: Target Attributes. (line 25) 50442* TARGET_CONDITIONAL_REGISTER_USAGE: Register Basics. (line 59) 50443* TARGET_CONST_ANCHOR: Misc. (line 1118) 50444* TARGET_CONST_NOT_OK_FOR_DEBUG_P: Addressing Modes. (line 230) 50445* TARGET_CONVERT_TO_TYPE: Misc. (line 1072) 50446* TARGET_CPU_CPP_BUILTINS: Run-time Target. (line 8) 50447* TARGET_CSTORE_MODE: Register Classes. (line 620) 50448* TARGET_CXX_ADJUST_CLASS_AT_DEFINITION: C++ ABI. (line 86) 50449* TARGET_CXX_CDTOR_RETURNS_THIS: C++ ABI. (line 37) 50450* TARGET_CXX_CLASS_DATA_ALWAYS_COMDAT: C++ ABI. (line 61) 50451* TARGET_CXX_COOKIE_HAS_SIZE: C++ ABI. (line 24) 50452* TARGET_CXX_DECL_MANGLING_CONTEXT: C++ ABI. (line 92) 50453* TARGET_CXX_DETERMINE_CLASS_DATA_VISIBILITY: C++ ABI. (line 52) 50454* TARGET_CXX_GET_COOKIE_SIZE: C++ ABI. (line 17) 50455* TARGET_CXX_GUARD_MASK_BIT: C++ ABI. (line 11) 50456* TARGET_CXX_GUARD_TYPE: C++ ABI. (line 6) 50457* TARGET_CXX_IMPLICIT_EXTERN_C: Misc. (line 373) 50458* TARGET_CXX_IMPORT_EXPORT_CLASS: C++ ABI. (line 28) 50459* TARGET_CXX_KEY_METHOD_MAY_BE_INLINE: C++ ABI. (line 42) 50460* TARGET_CXX_LIBRARY_RTTI_COMDAT: C++ ABI. (line 68) 50461* TARGET_CXX_USE_AEABI_ATEXIT: C++ ABI. (line 73) 50462* TARGET_CXX_USE_ATEXIT_FOR_CXA_ATEXIT: C++ ABI. (line 79) 50463* TARGET_C_PREINCLUDE: Misc. (line 361) 50464* TARGET_DEBUG_UNWIND_INFO: SDB and DWARF. (line 36) 50465* TARGET_DECIMAL_FLOAT_SUPPORTED_P: Storage Layout. (line 507) 50466* TARGET_DECLSPEC: Target Attributes. (line 72) 50467* TARGET_DEFAULT_PACK_STRUCT: Misc. (line 446) 50468* TARGET_DEFAULT_SHORT_ENUMS: Type Layout. (line 129) 50469* TARGET_DEFAULT_TARGET_FLAGS: Run-time Target. (line 55) 50470* TARGET_DEFERRED_OUTPUT_DEFS: Label Output. (line 465) 50471* TARGET_DELAY_SCHED2: SDB and DWARF. (line 65) 50472* TARGET_DELAY_VARTRACK: SDB and DWARF. (line 69) 50473* TARGET_DELEGITIMIZE_ADDRESS: Addressing Modes. (line 221) 50474* TARGET_DIFFERENT_ADDR_DISPLACEMENT_P: Register Classes. (line 590) 50475* TARGET_DLLIMPORT_DECL_ATTRIBUTES: Target Attributes. (line 55) 50476* TARGET_DWARF_CALLING_CONVENTION: SDB and DWARF. (line 16) 50477* TARGET_DWARF_FRAME_REG_MODE: Exception Region Output. 50478 (line 114) 50479* TARGET_DWARF_HANDLE_FRAME_UNSPEC: Frame Layout. (line 167) 50480* TARGET_DWARF_REGISTER_SPAN: Exception Region Output. 50481 (line 105) 50482* TARGET_EDOM: Library Calls. (line 59) 50483* TARGET_EMUTLS_DEBUG_FORM_TLS_ADDRESS: Emulated TLS. (line 67) 50484* TARGET_EMUTLS_GET_ADDRESS: Emulated TLS. (line 18) 50485* TARGET_EMUTLS_REGISTER_COMMON: Emulated TLS. (line 23) 50486* TARGET_EMUTLS_TMPL_PREFIX: Emulated TLS. (line 44) 50487* TARGET_EMUTLS_TMPL_SECTION: Emulated TLS. (line 35) 50488* TARGET_EMUTLS_VAR_ALIGN_FIXED: Emulated TLS. (line 62) 50489* TARGET_EMUTLS_VAR_FIELDS: Emulated TLS. (line 48) 50490* TARGET_EMUTLS_VAR_INIT: Emulated TLS. (line 55) 50491* TARGET_EMUTLS_VAR_PREFIX: Emulated TLS. (line 40) 50492* TARGET_EMUTLS_VAR_SECTION: Emulated TLS. (line 30) 50493* TARGET_ENCODE_SECTION_INFO: Sections. (line 251) 50494* TARGET_ENCODE_SECTION_INFO and address validation: Addressing Modes. 50495 (line 82) 50496* TARGET_ENCODE_SECTION_INFO usage: Instruction Output. (line 127) 50497* TARGET_END_CALL_ARGS: Varargs. (line 137) 50498* TARGET_ENUM_VA_LIST_P: Register Arguments. (line 289) 50499* TARGET_EXCEPT_UNWIND_INFO: Exception Region Output. 50500 (line 46) 50501* TARGET_EXECUTABLE_SUFFIX: Misc. (line 861) 50502* TARGET_EXPAND_BUILTIN: Misc. (line 614) 50503* TARGET_EXPAND_BUILTIN_SAVEREGS: Varargs. (line 64) 50504* TARGET_EXPAND_TO_RTL_HOOK: Storage Layout. (line 513) 50505* TARGET_EXPR: Unary and Binary Expressions. 50506 (line 6) 50507* TARGET_EXTRA_INCLUDES: Misc. (line 973) 50508* TARGET_EXTRA_LIVE_ON_ENTRY: Tail Calls. (line 20) 50509* TARGET_EXTRA_PRE_INCLUDES: Misc. (line 980) 50510* TARGET_FIXED_CONDITION_CODE_REGS: MODE_CC Condition Codes. 50511 (line 105) 50512* TARGET_FIXED_POINT_SUPPORTED_P: Storage Layout. (line 510) 50513* target_flags: Run-time Target. (line 51) 50514* TARGET_FLAGS_REGNUM: MODE_CC Condition Codes. 50515 (line 133) 50516* TARGET_FLOAT_EXCEPTIONS_ROUNDING_SUPPORTED_P: Run-time Target. 50517 (line 183) 50518* TARGET_FLT_EVAL_METHOD: Type Layout. (line 110) 50519* TARGET_FN_ABI_VA_LIST: Register Arguments. (line 301) 50520* TARGET_FOLD_BUILTIN: Misc. (line 720) 50521* TARGET_FORCE_AT_COMP_DIR: SDB and DWARF. (line 60) 50522* TARGET_FORMAT_TYPES: Misc. (line 1001) 50523* TARGET_FRAME_POINTER_REQUIRED: Elimination. (line 8) 50524* TARGET_FUNCTION_ARG: Register Arguments. (line 10) 50525* TARGET_FUNCTION_ARG_ADVANCE: Register Arguments. (line 198) 50526* TARGET_FUNCTION_ARG_BOUNDARY: Register Arguments. (line 252) 50527* TARGET_FUNCTION_ARG_ROUND_BOUNDARY: Register Arguments. (line 258) 50528* TARGET_FUNCTION_ATTRIBUTE_INLINABLE_P: Target Attributes. (line 93) 50529* TARGET_FUNCTION_INCOMING_ARG: Register Arguments. (line 71) 50530* TARGET_FUNCTION_OK_FOR_SIBCALL: Tail Calls. (line 6) 50531* TARGET_FUNCTION_VALUE: Scalar Return. (line 9) 50532* TARGET_FUNCTION_VALUE_REGNO_P: Scalar Return. (line 96) 50533* TARGET_GENERATE_VERSION_DISPATCHER_BODY: Misc. (line 753) 50534* TARGET_GEN_CCMP_FIRST: Misc. (line 927) 50535* TARGET_GEN_CCMP_NEXT: Misc. (line 938) 50536* TARGET_GET_DRAP_RTX: Misc. (line 1101) 50537* TARGET_GET_FUNCTION_VERSIONS_DISPATCHER: Misc. (line 746) 50538* TARGET_GET_PCH_VALIDITY: PCH Target. (line 6) 50539* TARGET_GET_RAW_ARG_MODE: Aggregate Return. (line 81) 50540* TARGET_GET_RAW_RESULT_MODE: Aggregate Return. (line 76) 50541* TARGET_GIMPLE_FOLD_BUILTIN: Misc. (line 730) 50542* TARGET_GIMPLIFY_VA_ARG_EXPR: Register Arguments. (line 311) 50543* TARGET_GOACC_DIM_LIMIT: Addressing Modes. (line 443) 50544* TARGET_GOACC_FORK_JOIN: Addressing Modes. (line 447) 50545* TARGET_GOACC_REDUCTION: Addressing Modes. (line 458) 50546* TARGET_GOACC_VALIDATE_DIMS: Addressing Modes. (line 430) 50547* TARGET_HANDLE_C_OPTION: Run-time Target. (line 73) 50548* TARGET_HANDLE_OPTION: Run-time Target. (line 59) 50549* TARGET_HARD_REGNO_SCRATCH_OK: Values in Registers. 50550 (line 141) 50551* TARGET_HAS_IFUNC_P: Misc. (line 1149) 50552* TARGET_HAS_NO_HW_DIVIDE: Library Calls. (line 52) 50553* TARGET_HAVE_CONDITIONAL_EXECUTION: Misc. (line 921) 50554* TARGET_HAVE_CTORS_DTORS: Macros for Initialization. 50555 (line 63) 50556* TARGET_HAVE_NAMED_SECTIONS: File Framework. (line 139) 50557* TARGET_HAVE_SRODATA_SECTION: Sections. (line 297) 50558* TARGET_HAVE_SWITCHABLE_BSS_SECTIONS: File Framework. (line 144) 50559* TARGET_HAVE_TLS: Sections. (line 317) 50560* TARGET_INIT_BUILTINS: Misc. (line 588) 50561* TARGET_INIT_DWARF_REG_SIZES_EXTRA: Exception Region Output. 50562 (line 120) 50563* TARGET_INIT_LIBFUNCS: Library Calls. (line 15) 50564* TARGET_INIT_PIC_REG: Register Arguments. (line 91) 50565* TARGET_INSERT_ATTRIBUTES: Target Attributes. (line 80) 50566* TARGET_INSTANTIATE_DECLS: Storage Layout. (line 521) 50567* TARGET_INVALID_ARG_FOR_UNPROTOTYPED_FN: Misc. (line 1025) 50568* TARGET_INVALID_BINARY_OP: Misc. (line 1044) 50569* TARGET_INVALID_CONVERSION: Misc. (line 1031) 50570* TARGET_INVALID_PARAMETER_TYPE: Misc. (line 1050) 50571* TARGET_INVALID_RETURN_TYPE: Misc. (line 1057) 50572* TARGET_INVALID_UNARY_OP: Misc. (line 1037) 50573* TARGET_INVALID_WITHIN_DOLOOP: Misc. (line 777) 50574* TARGET_IN_SMALL_DATA_P: Sections. (line 293) 50575* TARGET_IRA_CHANGE_PSEUDO_ALLOCNO_CLASS: Register Classes. (line 557) 50576* TARGET_KEEP_LEAF_WHEN_PROFILED: Profiling. (line 39) 50577* TARGET_LEGITIMATE_ADDRESS_P: Addressing Modes. (line 48) 50578* TARGET_LEGITIMATE_COMBINED_INSN: Misc. (line 791) 50579* TARGET_LEGITIMATE_CONSTANT_P: Addressing Modes. (line 213) 50580* TARGET_LEGITIMIZE_ADDRESS: Addressing Modes. (line 129) 50581* TARGET_LEGITIMIZE_ADDRESS_DISPLACEMENT: Register Classes. (line 605) 50582* TARGET_LIBCALL_VALUE: Scalar Return. (line 65) 50583* TARGET_LIBC_HAS_FUNCTION: Library Calls. (line 77) 50584* TARGET_LIBFUNC_GNU_PREFIX: Library Calls. (line 24) 50585* TARGET_LIBGCC_CMP_RETURN_MODE: Storage Layout. (line 463) 50586* TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P: Register Arguments. 50587 (line 369) 50588* TARGET_LIBGCC_SDATA_SECTION: Sections. (line 131) 50589* TARGET_LIBGCC_SHIFT_COUNT_MODE: Storage Layout. (line 469) 50590* TARGET_LIB_INT_CMP_BIASED: Library Calls. (line 42) 50591* TARGET_LOAD_BOUNDS_FOR_ARG: Varargs. (line 153) 50592* TARGET_LOAD_RETURNED_BOUNDS: Varargs. (line 172) 50593* TARGET_LOOP_UNROLL_ADJUST: Misc. (line 954) 50594* TARGET_LRA_P: Register Classes. (line 564) 50595* TARGET_MACHINE_DEPENDENT_REORG: Misc. (line 573) 50596* TARGET_MANGLE_ASSEMBLER_NAME: Label Output. (line 356) 50597* TARGET_MANGLE_DECL_ASSEMBLER_NAME: Sections. (line 241) 50598* TARGET_MANGLE_TYPE: Storage Layout. (line 525) 50599* TARGET_MAX_ANCHOR_OFFSET: Anchored Addresses. (line 38) 50600* TARGET_MD_ASM_ADJUST: Misc. (line 491) 50601* TARGET_MEMBER_TYPE_FORCES_BLK: Storage Layout. (line 415) 50602* TARGET_MEMMODEL_CHECK: Misc. (line 1140) 50603* TARGET_MEMORY_MOVE_COST: Costs. (line 79) 50604* TARGET_MEM_CONSTRAINT: Addressing Modes. (line 107) 50605* TARGET_MEM_REF: Storage References. (line 6) 50606* TARGET_MERGE_DECL_ATTRIBUTES: Target Attributes. (line 45) 50607* TARGET_MERGE_TYPE_ATTRIBUTES: Target Attributes. (line 37) 50608* TARGET_MIN_ANCHOR_OFFSET: Anchored Addresses. (line 32) 50609* TARGET_MIN_DIVISIONS_FOR_RECIP_MUL: Misc. (line 90) 50610* TARGET_MODE_AFTER: Mode Switching. (line 57) 50611* TARGET_MODE_DEPENDENT_ADDRESS_P: Addressing Modes. (line 196) 50612* TARGET_MODE_EMIT: Mode Switching. (line 42) 50613* TARGET_MODE_ENTRY: Mode Switching. (line 64) 50614* TARGET_MODE_EXIT: Mode Switching. (line 71) 50615* TARGET_MODE_NEEDED: Mode Switching. (line 50) 50616* TARGET_MODE_PRIORITY: Mode Switching. (line 78) 50617* TARGET_MODE_REP_EXTENDED: Misc. (line 175) 50618* TARGET_MS_BITFIELD_LAYOUT_P: Storage Layout. (line 479) 50619* TARGET_MUST_PASS_IN_STACK: Register Arguments. (line 64) 50620* TARGET_MUST_PASS_IN_STACK, and TARGET_FUNCTION_ARG: Register Arguments. 50621 (line 56) 50622* TARGET_NARROW_VOLATILE_BITFIELD: Storage Layout. (line 408) 50623* TARGET_NO_REGISTER_ALLOCATION: SDB and DWARF. (line 73) 50624* TARGET_NO_SPECULATION_IN_DELAY_SLOTS_P: Costs. (line 359) 50625* TARGET_N_FORMAT_TYPES: Misc. (line 1006) 50626* TARGET_OBJC_CONSTRUCT_STRING_OBJECT: Run-time Target. (line 88) 50627* TARGET_OBJC_DECLARE_CLASS_DEFINITION: Run-time Target. (line 109) 50628* TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE: Run-time Target. 50629 (line 104) 50630* TARGET_OBJECT_SUFFIX: Misc. (line 856) 50631* TARGET_OBJFMT_CPP_BUILTINS: Run-time Target. (line 45) 50632* TARGET_OFFLOAD_OPTIONS: Misc. (line 1183) 50633* TARGET_OMIT_STRUCT_RETURN_REG: Scalar Return. (line 117) 50634* TARGET_OPTAB_SUPPORTED_P: Costs. (line 278) 50635* TARGET_OPTF: Misc. (line 988) 50636* TARGET_OPTION_DEFAULT_PARAMS: Run-time Target. (line 160) 50637* TARGET_OPTION_FUNCTION_VERSIONS: Target Attributes. (line 157) 50638* TARGET_OPTION_INIT_STRUCT: Run-time Target. (line 156) 50639* TARGET_OPTION_OPTIMIZATION_TABLE: Run-time Target. (line 142) 50640* TARGET_OPTION_OVERRIDE: Target Attributes. (line 144) 50641* TARGET_OPTION_POST_STREAM_IN: Target Attributes. (line 125) 50642* TARGET_OPTION_PRAGMA_PARSE: Target Attributes. (line 137) 50643* TARGET_OPTION_PRINT: Target Attributes. (line 131) 50644* TARGET_OPTION_RESTORE: Target Attributes. (line 119) 50645* TARGET_OPTION_SAVE: Target Attributes. (line 112) 50646* TARGET_OPTION_VALID_ATTRIBUTE_P: Target Attributes. (line 100) 50647* TARGET_OS_CPP_BUILTINS: Run-time Target. (line 41) 50648* TARGET_OVERRIDES_FORMAT_ATTRIBUTES: Misc. (line 1010) 50649* TARGET_OVERRIDES_FORMAT_ATTRIBUTES_COUNT: Misc. (line 1016) 50650* TARGET_OVERRIDES_FORMAT_INIT: Misc. (line 1020) 50651* TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE: Run-time Target. (line 126) 50652* TARGET_PASS_BY_REFERENCE: Register Arguments. (line 115) 50653* TARGET_PCH_VALID_P: PCH Target. (line 11) 50654* TARGET_POSIX_IO: Misc. (line 517) 50655* TARGET_PREFERRED_OUTPUT_RELOAD_CLASS: Register Classes. (line 284) 50656* TARGET_PREFERRED_RELOAD_CLASS: Register Classes. (line 213) 50657* TARGET_PREFERRED_RENAME_CLASS: Register Classes. (line 201) 50658* TARGET_PREPARE_PCH_SAVE: PCH Target. (line 34) 50659* TARGET_PRETEND_OUTGOING_VARARGS_NAMED: Varargs. (line 144) 50660* TARGET_PROFILE_BEFORE_PROLOGUE: Sections. (line 301) 50661* TARGET_PROMOTED_TYPE: Misc. (line 1064) 50662* TARGET_PROMOTE_FUNCTION_MODE: Storage Layout. (line 109) 50663* TARGET_PROMOTE_PROTOTYPES: Stack Arguments. (line 10) 50664* TARGET_PTRMEMFUNC_VBIT_LOCATION: Type Layout. (line 256) 50665* TARGET_RECORD_OFFLOAD_SYMBOL: Misc. (line 1178) 50666* TARGET_REF_MAY_ALIAS_ERRNO: Register Arguments. (line 322) 50667* TARGET_REGISTER_MOVE_COST: Costs. (line 31) 50668* TARGET_REGISTER_PRIORITY: Register Classes. (line 569) 50669* TARGET_REGISTER_USAGE_LEVELING_P: Register Classes. (line 580) 50670* TARGET_RELAYOUT_FUNCTION: Target Attributes. (line 172) 50671* TARGET_RESOLVE_OVERLOADED_BUILTIN: Misc. (line 709) 50672* TARGET_RETURN_IN_MEMORY: Aggregate Return. (line 15) 50673* TARGET_RETURN_IN_MSB: Scalar Return. (line 124) 50674* TARGET_RETURN_POPS_ARGS: Stack Arguments. (line 98) 50675* TARGET_RTX_COSTS: Costs. (line 292) 50676* TARGET_SCALAR_MODE_SUPPORTED_P: Register Arguments. (line 329) 50677* TARGET_SCHED_ADJUST_COST: Scheduling. (line 35) 50678* TARGET_SCHED_ADJUST_PRIORITY: Scheduling. (line 50) 50679* TARGET_SCHED_ALLOC_SCHED_CONTEXT: Scheduling. (line 294) 50680* TARGET_SCHED_CLEAR_SCHED_CONTEXT: Scheduling. (line 309) 50681* TARGET_SCHED_DEPENDENCIES_EVALUATION_HOOK: Scheduling. (line 101) 50682* TARGET_SCHED_DFA_NEW_CYCLE: Scheduling. (line 255) 50683* TARGET_SCHED_DFA_POST_ADVANCE_CYCLE: Scheduling. (line 172) 50684* TARGET_SCHED_DFA_POST_CYCLE_INSN: Scheduling. (line 156) 50685* TARGET_SCHED_DFA_PRE_ADVANCE_CYCLE: Scheduling. (line 165) 50686* TARGET_SCHED_DFA_PRE_CYCLE_INSN: Scheduling. (line 144) 50687* TARGET_SCHED_DISPATCH: Scheduling. (line 363) 50688* TARGET_SCHED_DISPATCH_DO: Scheduling. (line 368) 50689* TARGET_SCHED_EXPOSED_PIPELINE: Scheduling. (line 372) 50690* TARGET_SCHED_FINISH: Scheduling. (line 122) 50691* TARGET_SCHED_FINISH_GLOBAL: Scheduling. (line 137) 50692* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BACKTRACK: Scheduling. (line 235) 50693* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_BEGIN: Scheduling. (line 223) 50694* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD: Scheduling. 50695 (line 179) 50696* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_DFA_LOOKAHEAD_GUARD: Scheduling. 50697 (line 207) 50698* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_END: Scheduling. (line 240) 50699* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_FINI: Scheduling. (line 250) 50700* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_INIT: Scheduling. (line 245) 50701* TARGET_SCHED_FIRST_CYCLE_MULTIPASS_ISSUE: Scheduling. (line 229) 50702* TARGET_SCHED_FREE_SCHED_CONTEXT: Scheduling. (line 313) 50703* TARGET_SCHED_FUSION_PRIORITY: Scheduling. (line 382) 50704* TARGET_SCHED_GEN_SPEC_CHECK: Scheduling. (line 335) 50705* TARGET_SCHED_H_I_D_EXTENDED: Scheduling. (line 289) 50706* TARGET_SCHED_INIT: Scheduling. (line 111) 50707* TARGET_SCHED_INIT_DFA_POST_CYCLE_INSN: Scheduling. (line 161) 50708* TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN: Scheduling. (line 153) 50709* TARGET_SCHED_INIT_GLOBAL: Scheduling. (line 129) 50710* TARGET_SCHED_INIT_SCHED_CONTEXT: Scheduling. (line 298) 50711* TARGET_SCHED_ISSUE_RATE: Scheduling. (line 11) 50712* TARGET_SCHED_IS_COSTLY_DEPENDENCE: Scheduling. (line 267) 50713* TARGET_SCHED_MACRO_FUSION_P: Scheduling. (line 87) 50714* TARGET_SCHED_MACRO_FUSION_PAIR_P: Scheduling. (line 91) 50715* TARGET_SCHED_NEEDS_BLOCK_P: Scheduling. (line 328) 50716* TARGET_SCHED_REASSOCIATION_WIDTH: Scheduling. (line 377) 50717* TARGET_SCHED_REORDER: Scheduling. (line 58) 50718* TARGET_SCHED_REORDER2: Scheduling. (line 75) 50719* TARGET_SCHED_SET_SCHED_CONTEXT: Scheduling. (line 305) 50720* TARGET_SCHED_SET_SCHED_FLAGS: Scheduling. (line 347) 50721* TARGET_SCHED_SMS_RES_MII: Scheduling. (line 354) 50722* TARGET_SCHED_SPECULATE_INSN: Scheduling. (line 316) 50723* TARGET_SCHED_VARIABLE_ISSUE: Scheduling. (line 22) 50724* TARGET_SECONDARY_RELOAD: Register Classes. (line 312) 50725* TARGET_SECTION_TYPE_FLAGS: File Framework. (line 149) 50726* TARGET_SETUP_INCOMING_VARARGS: Varargs. (line 71) 50727* TARGET_SETUP_INCOMING_VARARG_BOUNDS: Varargs. (line 188) 50728* TARGET_SET_CURRENT_FUNCTION: Misc. (line 838) 50729* TARGET_SET_DEFAULT_TYPE_ATTRIBUTES: Target Attributes. (line 33) 50730* TARGET_SET_UP_BY_PROLOGUE: Tail Calls. (line 29) 50731* TARGET_SHIFT_TRUNCATION_MASK: Misc. (line 138) 50732* TARGET_SIMD_CLONE_ADJUST: Addressing Modes. (line 420) 50733* TARGET_SIMD_CLONE_COMPUTE_VECSIZE_AND_SIMDLEN: Addressing Modes. 50734 (line 412) 50735* TARGET_SIMD_CLONE_USABLE: Addressing Modes. (line 424) 50736* TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P: Register Arguments. 50737 (line 377) 50738* TARGET_SPILL_CLASS: Register Classes. (line 613) 50739* TARGET_SPLIT_COMPLEX_ARG: Register Arguments. (line 273) 50740* TARGET_STACK_PROTECT_FAIL: Stack Smashing Protection. 50741 (line 16) 50742* TARGET_STACK_PROTECT_GUARD: Stack Smashing Protection. 50743 (line 6) 50744* TARGET_STATIC_CHAIN: Frame Registers. (line 90) 50745* TARGET_STORE_BOUNDS_FOR_ARG: Varargs. (line 163) 50746* TARGET_STORE_RETURNED_BOUNDS: Varargs. (line 177) 50747* TARGET_STRICT_ARGUMENT_NAMING: Varargs. (line 107) 50748* TARGET_STRING_OBJECT_REF_TYPE_P: Run-time Target. (line 114) 50749* TARGET_STRIP_NAME_ENCODING: Sections. (line 288) 50750* TARGET_STRUCT_VALUE_RTX: Aggregate Return. (line 44) 50751* TARGET_SUPPORTS_SPLIT_STACK: Stack Smashing Protection. 50752 (line 25) 50753* TARGET_SUPPORTS_WEAK: Label Output. (line 272) 50754* TARGET_SUPPORTS_WIDE_INT: Misc. (line 1191) 50755* TARGET_TERMINATE_DW2_EH_FRAME_INFO: Exception Region Output. 50756 (line 99) 50757* TARGET_TRAMPOLINE_ADJUST_ADDRESS: Trampolines. (line 74) 50758* TARGET_TRAMPOLINE_INIT: Trampolines. (line 54) 50759* TARGET_UNSPEC_MAY_TRAP_P: Misc. (line 829) 50760* TARGET_UNWIND_TABLES_DEFAULT: Exception Region Output. 50761 (line 73) 50762* TARGET_UNWIND_WORD_MODE: Storage Layout. (line 475) 50763* TARGET_UPDATE_STACK_BOUNDARY: Misc. (line 1097) 50764* TARGET_USES_WEAK_UNWIND_INFO: Exception Handling. (line 123) 50765* TARGET_USE_ANCHORS_FOR_SYMBOL_P: Anchored Addresses. (line 53) 50766* TARGET_USE_BLOCKS_FOR_CONSTANT_P: Addressing Modes. (line 248) 50767* TARGET_USE_BLOCKS_FOR_DECL_P: Addressing Modes. (line 255) 50768* TARGET_USE_BY_PIECES_INFRASTRUCTURE_P: Costs. (line 164) 50769* TARGET_USE_JCR_SECTION: Misc. (line 1079) 50770* TARGET_USE_PSEUDO_PIC_REG: Register Arguments. (line 87) 50771* TARGET_VALID_DLLIMPORT_ATTRIBUTE_P: Target Attributes. (line 66) 50772* TARGET_VALID_POINTER_MODE: Register Arguments. (line 317) 50773* TARGET_VECTORIZE_ADD_STMT_COST: Addressing Modes. (line 375) 50774* TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_SIZES: Addressing Modes. 50775 (line 352) 50776* TARGET_VECTORIZE_BUILTIN_CONVERSION: Addressing Modes. (line 308) 50777* TARGET_VECTORIZE_BUILTIN_GATHER: Addressing Modes. (line 398) 50778* TARGET_VECTORIZE_BUILTIN_MASK_FOR_LOAD: Addressing Modes. (line 266) 50779* TARGET_VECTORIZE_BUILTIN_MD_VECTORIZED_FUNCTION: Addressing Modes. 50780 (line 328) 50781* TARGET_VECTORIZE_BUILTIN_SCATTER: Addressing Modes. (line 405) 50782* TARGET_VECTORIZE_BUILTIN_VECTORIZATION_COST: Addressing Modes. 50783 (line 292) 50784* TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION: Addressing Modes. 50785 (line 320) 50786* TARGET_VECTORIZE_DESTROY_COST_DATA: Addressing Modes. (line 393) 50787* TARGET_VECTORIZE_FINISH_COST: Addressing Modes. (line 386) 50788* TARGET_VECTORIZE_GET_MASK_MODE: Addressing Modes. (line 360) 50789* TARGET_VECTORIZE_INIT_COST: Addressing Modes. (line 366) 50790* TARGET_VECTORIZE_PREFERRED_SIMD_MODE: Addressing Modes. (line 345) 50791* TARGET_VECTORIZE_SUPPORT_VECTOR_MISALIGNMENT: Addressing Modes. 50792 (line 335) 50793* TARGET_VECTORIZE_VECTOR_ALIGNMENT_REACHABLE: Addressing Modes. 50794 (line 298) 50795* TARGET_VECTORIZE_VEC_PERM_CONST_OK: Addressing Modes. (line 304) 50796* TARGET_VECTOR_ALIGNMENT: Storage Layout. (line 268) 50797* TARGET_VECTOR_MODE_SUPPORTED_P: Register Arguments. (line 340) 50798* TARGET_VTABLE_DATA_ENTRY_DISTANCE: Type Layout. (line 309) 50799* TARGET_VTABLE_ENTRY_ALIGN: Type Layout. (line 303) 50800* TARGET_VTABLE_USES_DESCRIPTORS: Type Layout. (line 292) 50801* TARGET_WANT_DEBUG_PUB_SECTIONS: SDB and DWARF. (line 55) 50802* TARGET_WARN_FUNC_RETURN: Tail Calls. (line 35) 50803* TARGET_WEAK_NOT_IN_ARCHIVE_TOC: Label Output. (line 308) 50804* TCmode: Machine Modes. (line 199) 50805* TDmode: Machine Modes. (line 97) 50806* TEMPLATE_DECL: Declarations. (line 6) 50807* Temporaries: Temporaries. (line 6) 50808* termination routines: Initialization. (line 6) 50809* testing constraints: C Constraint Interface. 50810 (line 6) 50811* TEXT_SECTION_ASM_OP: Sections. (line 37) 50812* TFmode: Machine Modes. (line 101) 50813* The Language: The Language. (line 6) 50814* THEN_CLAUSE: Statements for C++. (line 6) 50815* THREAD_MODEL_SPEC: Driver. (line 162) 50816* THROW_EXPR: Unary and Binary Expressions. 50817 (line 6) 50818* THUNK_DECL: Declarations. (line 6) 50819* THUNK_DELTA: Declarations. (line 6) 50820* TImode: Machine Modes. (line 48) 50821* TImode, in insn: Insns. (line 268) 50822* TLS_COMMON_ASM_OP: Sections. (line 80) 50823* TLS_SECTION_ASM_FLAG: Sections. (line 85) 50824* tm.h macros: Target Macros. (line 6) 50825* TQFmode: Machine Modes. (line 65) 50826* TQmode: Machine Modes. (line 122) 50827* trampolines for nested functions: Trampolines. (line 6) 50828* TRAMPOLINE_ALIGNMENT: Trampolines. (line 48) 50829* TRAMPOLINE_SECTION: Trampolines. (line 39) 50830* TRAMPOLINE_SIZE: Trampolines. (line 44) 50831* TRANSFER_FROM_TRAMPOLINE: Trampolines. (line 110) 50832* trap instruction pattern: Standard Names. (line 1759) 50833* tree: Tree overview. (line 6) 50834* tree <1>: Macros and Functions. 50835 (line 6) 50836* Tree SSA: Tree SSA. (line 6) 50837* TREE_CHAIN: Macros and Functions. 50838 (line 6) 50839* TREE_CODE: Tree overview. (line 6) 50840* tree_fits_shwi_p: Constant expressions. 50841 (line 6) 50842* tree_fits_uhwi_p: Constant expressions. 50843 (line 6) 50844* TREE_INT_CST_ELT: Constant expressions. 50845 (line 6) 50846* tree_int_cst_equal: Constant expressions. 50847 (line 6) 50848* TREE_INT_CST_LOW: Constant expressions. 50849 (line 6) 50850* tree_int_cst_lt: Constant expressions. 50851 (line 6) 50852* TREE_INT_CST_NUNITS: Constant expressions. 50853 (line 6) 50854* TREE_LIST: Containers. (line 6) 50855* TREE_OPERAND: Expression trees. (line 6) 50856* TREE_PUBLIC: Function Basics. (line 6) 50857* TREE_PUBLIC <1>: Function Properties. 50858 (line 28) 50859* TREE_PURPOSE: Containers. (line 6) 50860* TREE_READONLY: Function Properties. 50861 (line 37) 50862* tree_size: Macros and Functions. 50863 (line 13) 50864* TREE_STATIC: Function Properties. 50865 (line 31) 50866* TREE_STRING_LENGTH: Constant expressions. 50867 (line 6) 50868* TREE_STRING_POINTER: Constant expressions. 50869 (line 6) 50870* TREE_THIS_VOLATILE: Function Properties. 50871 (line 34) 50872* tree_to_shwi: Constant expressions. 50873 (line 6) 50874* tree_to_uhwi: Constant expressions. 50875 (line 6) 50876* TREE_TYPE: Macros and Functions. 50877 (line 6) 50878* TREE_TYPE <1>: Types. (line 6) 50879* TREE_TYPE <2>: Working with declarations. 50880 (line 11) 50881* TREE_TYPE <3>: Expression trees. (line 6) 50882* TREE_TYPE <4>: Expression trees. (line 17) 50883* TREE_TYPE <5>: Function Basics. (line 47) 50884* TREE_TYPE <6>: Types for C++. (line 6) 50885* TREE_VALUE: Containers. (line 6) 50886* TREE_VEC: Containers. (line 6) 50887* TREE_VEC_ELT: Containers. (line 6) 50888* TREE_VEC_LENGTH: Containers. (line 6) 50889* TRULY_NOOP_TRUNCATION: Misc. (line 162) 50890* truncate: Conversions. (line 38) 50891* truncMN2 instruction pattern: Standard Names. (line 1119) 50892* TRUNC_DIV_EXPR: Unary and Binary Expressions. 50893 (line 6) 50894* TRUNC_MOD_EXPR: Unary and Binary Expressions. 50895 (line 6) 50896* TRUTH_ANDIF_EXPR: Unary and Binary Expressions. 50897 (line 6) 50898* TRUTH_AND_EXPR: Unary and Binary Expressions. 50899 (line 6) 50900* TRUTH_NOT_EXPR: Unary and Binary Expressions. 50901 (line 6) 50902* TRUTH_ORIF_EXPR: Unary and Binary Expressions. 50903 (line 6) 50904* TRUTH_OR_EXPR: Unary and Binary Expressions. 50905 (line 6) 50906* TRUTH_XOR_EXPR: Unary and Binary Expressions. 50907 (line 6) 50908* TRY_BLOCK: Statements for C++. (line 6) 50909* TRY_HANDLERS: Statements for C++. (line 6) 50910* TRY_STMTS: Statements for C++. (line 6) 50911* Tuple specific accessors: Tuple specific accessors. 50912 (line 6) 50913* tuples: Tuple representation. 50914 (line 6) 50915* type: Types. (line 6) 50916* type declaration: Declarations. (line 6) 50917* TYPENAME_TYPE: Types for C++. (line 6) 50918* TYPENAME_TYPE_FULLNAME: Types. (line 6) 50919* TYPENAME_TYPE_FULLNAME <1>: Types for C++. (line 6) 50920* TYPEOF_TYPE: Types for C++. (line 6) 50921* TYPE_ALIGN: Types. (line 6) 50922* TYPE_ALIGN <1>: Types. (line 30) 50923* TYPE_ALIGN <2>: Types for C++. (line 6) 50924* TYPE_ALIGN <3>: Types for C++. (line 44) 50925* TYPE_ARG_TYPES: Types. (line 6) 50926* TYPE_ARG_TYPES <1>: Types for C++. (line 6) 50927* TYPE_ASM_OP: Label Output. (line 76) 50928* TYPE_ATTRIBUTES: Attributes. (line 24) 50929* TYPE_BINFO: Classes. (line 6) 50930* TYPE_BUILT_IN: Types for C++. (line 66) 50931* TYPE_CANONICAL: Types. (line 6) 50932* TYPE_CANONICAL <1>: Types. (line 41) 50933* TYPE_CONTEXT: Types. (line 6) 50934* TYPE_CONTEXT <1>: Types for C++. (line 6) 50935* TYPE_DECL: Declarations. (line 6) 50936* TYPE_FIELDS: Types. (line 6) 50937* TYPE_FIELDS <1>: Types for C++. (line 6) 50938* TYPE_FIELDS <2>: Classes. (line 6) 50939* TYPE_HAS_ARRAY_NEW_OPERATOR: Classes. (line 96) 50940* TYPE_HAS_DEFAULT_CONSTRUCTOR: Classes. (line 81) 50941* TYPE_HAS_MUTABLE_P: Classes. (line 86) 50942* TYPE_HAS_NEW_OPERATOR: Classes. (line 93) 50943* TYPE_MAIN_VARIANT: Types. (line 6) 50944* TYPE_MAIN_VARIANT <1>: Types. (line 19) 50945* TYPE_MAIN_VARIANT <2>: Types for C++. (line 6) 50946* TYPE_MAX_VALUE: Types. (line 6) 50947* TYPE_METHODS: Classes. (line 6) 50948* TYPE_METHOD_BASETYPE: Types. (line 6) 50949* TYPE_METHOD_BASETYPE <1>: Types for C++. (line 6) 50950* TYPE_MIN_VALUE: Types. (line 6) 50951* TYPE_NAME: Types. (line 6) 50952* TYPE_NAME <1>: Types. (line 33) 50953* TYPE_NAME <2>: Types for C++. (line 6) 50954* TYPE_NAME <3>: Types for C++. (line 47) 50955* TYPE_NOTHROW_P: Functions for C++. (line 154) 50956* TYPE_OFFSET_BASETYPE: Types. (line 6) 50957* TYPE_OFFSET_BASETYPE <1>: Types for C++. (line 6) 50958* TYPE_OPERAND_FMT: Label Output. (line 87) 50959* TYPE_OVERLOADS_ARRAY_REF: Classes. (line 104) 50960* TYPE_OVERLOADS_ARROW: Classes. (line 107) 50961* TYPE_OVERLOADS_CALL_EXPR: Classes. (line 100) 50962* TYPE_POLYMORPHIC_P: Classes. (line 77) 50963* TYPE_PRECISION: Types. (line 6) 50964* TYPE_PRECISION <1>: Types for C++. (line 6) 50965* TYPE_PTRDATAMEM_P: Types for C++. (line 6) 50966* TYPE_PTRDATAMEM_P <1>: Types for C++. (line 69) 50967* TYPE_PTRFN_P: Types for C++. (line 76) 50968* TYPE_PTROBV_P: Types for C++. (line 6) 50969* TYPE_PTROB_P: Types for C++. (line 79) 50970* TYPE_PTR_P: Types for C++. (line 72) 50971* TYPE_QUAL_CONST: Types. (line 6) 50972* TYPE_QUAL_CONST <1>: Types for C++. (line 6) 50973* TYPE_QUAL_RESTRICT: Types. (line 6) 50974* TYPE_QUAL_RESTRICT <1>: Types for C++. (line 6) 50975* TYPE_QUAL_VOLATILE: Types. (line 6) 50976* TYPE_QUAL_VOLATILE <1>: Types for C++. (line 6) 50977* TYPE_RAISES_EXCEPTIONS: Functions for C++. (line 149) 50978* TYPE_SIZE: Types. (line 6) 50979* TYPE_SIZE <1>: Types. (line 25) 50980* TYPE_SIZE <2>: Types for C++. (line 6) 50981* TYPE_SIZE <3>: Types for C++. (line 39) 50982* TYPE_STRUCTURAL_EQUALITY_P: Types. (line 6) 50983* TYPE_STRUCTURAL_EQUALITY_P <1>: Types. (line 77) 50984* TYPE_UNQUALIFIED: Types. (line 6) 50985* TYPE_UNQUALIFIED <1>: Types for C++. (line 6) 50986* TYPE_VFIELD: Classes. (line 6) 50987* uaddvM4 instruction pattern: Standard Names. (line 320) 50988* UDAmode: Machine Modes. (line 170) 50989* udiv: Arithmetic. (line 130) 50990* udivM3 instruction pattern: Standard Names. (line 301) 50991* udivmodM4 instruction pattern: Standard Names. (line 576) 50992* udot_prodM instruction pattern: Standard Names. (line 396) 50993* UDQmode: Machine Modes. (line 138) 50994* UHAmode: Machine Modes. (line 162) 50995* UHQmode: Machine Modes. (line 130) 50996* UINT16_TYPE: Type Layout. (line 220) 50997* UINT32_TYPE: Type Layout. (line 221) 50998* UINT64_TYPE: Type Layout. (line 222) 50999* UINT8_TYPE: Type Layout. (line 219) 51000* UINTMAX_TYPE: Type Layout. (line 203) 51001* UINTPTR_TYPE: Type Layout. (line 240) 51002* UINT_FAST16_TYPE: Type Layout. (line 236) 51003* UINT_FAST32_TYPE: Type Layout. (line 237) 51004* UINT_FAST64_TYPE: Type Layout. (line 238) 51005* UINT_FAST8_TYPE: Type Layout. (line 235) 51006* UINT_LEAST16_TYPE: Type Layout. (line 228) 51007* UINT_LEAST32_TYPE: Type Layout. (line 229) 51008* UINT_LEAST64_TYPE: Type Layout. (line 230) 51009* UINT_LEAST8_TYPE: Type Layout. (line 227) 51010* umaddMN4 instruction pattern: Standard Names. (line 523) 51011* umax: Arithmetic. (line 149) 51012* umaxM3 instruction pattern: Standard Names. (line 301) 51013* umin: Arithmetic. (line 149) 51014* uminM3 instruction pattern: Standard Names. (line 301) 51015* umod: Arithmetic. (line 136) 51016* umodM3 instruction pattern: Standard Names. (line 301) 51017* umsubMN4 instruction pattern: Standard Names. (line 547) 51018* umulhisi3 instruction pattern: Standard Names. (line 495) 51019* umulM3_highpart instruction pattern: Standard Names. (line 509) 51020* umulqihi3 instruction pattern: Standard Names. (line 495) 51021* umulsidi3 instruction pattern: Standard Names. (line 495) 51022* umulvM4 instruction pattern: Standard Names. (line 325) 51023* unchanging: Flags. (line 296) 51024* unchanging, in call_insn: Flags. (line 19) 51025* unchanging, in jump_insn, call_insn and insn: Flags. (line 39) 51026* unchanging, in mem: Flags. (line 134) 51027* unchanging, in subreg: Flags. (line 170) 51028* unchanging, in subreg <1>: Flags. (line 180) 51029* unchanging, in symbol_ref: Flags. (line 10) 51030* UNEQ_EXPR: Unary and Binary Expressions. 51031 (line 6) 51032* UNGE_EXPR: Unary and Binary Expressions. 51033 (line 6) 51034* UNGT_EXPR: Unary and Binary Expressions. 51035 (line 6) 51036* unions, returning: Interface. (line 10) 51037* UNION_TYPE: Types. (line 6) 51038* UNION_TYPE <1>: Classes. (line 6) 51039* UNITS_PER_WORD: Storage Layout. (line 60) 51040* UNKNOWN_TYPE: Types. (line 6) 51041* UNKNOWN_TYPE <1>: Types for C++. (line 6) 51042* UNLE_EXPR: Unary and Binary Expressions. 51043 (line 6) 51044* UNLIKELY_EXECUTED_TEXT_SECTION_NAME: Sections. (line 48) 51045* UNLT_EXPR: Unary and Binary Expressions. 51046 (line 6) 51047* UNORDERED_EXPR: Unary and Binary Expressions. 51048 (line 6) 51049* unshare_all_rtl: Sharing. (line 58) 51050* unsigned division: Arithmetic. (line 130) 51051* unsigned division with unsigned saturation: Arithmetic. (line 130) 51052* unsigned greater than: Comparisons. (line 64) 51053* unsigned greater than <1>: Comparisons. (line 72) 51054* unsigned less than: Comparisons. (line 68) 51055* unsigned less than <1>: Comparisons. (line 76) 51056* unsigned minimum and maximum: Arithmetic. (line 149) 51057* unsigned_fix: Conversions. (line 77) 51058* unsigned_float: Conversions. (line 62) 51059* unsigned_fract_convert: Conversions. (line 97) 51060* unsigned_sat_fract: Conversions. (line 103) 51061* unspec: Side Effects. (line 299) 51062* unspec <1>: Constant Definitions. 51063 (line 111) 51064* unspec_volatile: Side Effects. (line 299) 51065* unspec_volatile <1>: Constant Definitions. 51066 (line 99) 51067* untyped_call instruction pattern: Standard Names. (line 1375) 51068* untyped_return instruction pattern: Standard Names. (line 1438) 51069* UPDATE_PATH_HOST_CANONICALIZE (PATH): Filesystem. (line 59) 51070* update_ssa: SSA. (line 74) 51071* update_stmt: Manipulating GIMPLE statements. 51072 (line 140) 51073* update_stmt <1>: SSA Operands. (line 6) 51074* update_stmt_if_modified: Manipulating GIMPLE statements. 51075 (line 143) 51076* UQQmode: Machine Modes. (line 126) 51077* usaddM3 instruction pattern: Standard Names. (line 301) 51078* usadM instruction pattern: Standard Names. (line 405) 51079* USAmode: Machine Modes. (line 166) 51080* usashlM3 instruction pattern: Standard Names. (line 579) 51081* usdivM3 instruction pattern: Standard Names. (line 301) 51082* use: Side Effects. (line 168) 51083* used: Flags. (line 314) 51084* used, in symbol_ref: Flags. (line 197) 51085* user: GTY Options. (line 243) 51086* user gc: User GC. (line 6) 51087* USER_LABEL_PREFIX: Instruction Output. (line 152) 51088* USE_C_ALLOCA: Host Misc. (line 19) 51089* USE_LD_AS_NEEDED: Driver. (line 135) 51090* USE_LOAD_POST_DECREMENT: Costs. (line 233) 51091* USE_LOAD_POST_INCREMENT: Costs. (line 228) 51092* USE_LOAD_PRE_DECREMENT: Costs. (line 243) 51093* USE_LOAD_PRE_INCREMENT: Costs. (line 238) 51094* USE_SELECT_SECTION_FOR_FUNCTIONS: Sections. (line 193) 51095* USE_STORE_POST_DECREMENT: Costs. (line 253) 51096* USE_STORE_POST_INCREMENT: Costs. (line 248) 51097* USE_STORE_PRE_DECREMENT: Costs. (line 263) 51098* USE_STORE_PRE_INCREMENT: Costs. (line 258) 51099* USING_STMT: Statements for C++. (line 6) 51100* usmaddMN4 instruction pattern: Standard Names. (line 531) 51101* usmsubMN4 instruction pattern: Standard Names. (line 555) 51102* usmulhisi3 instruction pattern: Standard Names. (line 499) 51103* usmulM3 instruction pattern: Standard Names. (line 301) 51104* usmulqihi3 instruction pattern: Standard Names. (line 499) 51105* usmulsidi3 instruction pattern: Standard Names. (line 499) 51106* usnegM2 instruction pattern: Standard Names. (line 603) 51107* USQmode: Machine Modes. (line 134) 51108* ussubM3 instruction pattern: Standard Names. (line 301) 51109* usubvM4 instruction pattern: Standard Names. (line 325) 51110* us_ashift: Arithmetic. (line 173) 51111* us_minus: Arithmetic. (line 38) 51112* us_mult: Arithmetic. (line 93) 51113* us_neg: Arithmetic. (line 82) 51114* us_plus: Arithmetic. (line 14) 51115* us_truncate: Conversions. (line 48) 51116* UTAmode: Machine Modes. (line 174) 51117* UTQmode: Machine Modes. (line 142) 51118* V in constraint: Simple Constraints. (line 43) 51119* values, returned by functions: Scalar Return. (line 6) 51120* varargs implementation: Varargs. (line 6) 51121* variable: Declarations. (line 6) 51122* Variable Location Debug Information in RTL: Debug Information. 51123 (line 6) 51124* VAR_DECL: Declarations. (line 6) 51125* var_location: Debug Information. (line 14) 51126* vashlM3 instruction pattern: Standard Names. (line 595) 51127* vashrM3 instruction pattern: Standard Names. (line 595) 51128* VA_ARG_EXPR: Unary and Binary Expressions. 51129 (line 6) 51130* vcondMN instruction pattern: Standard Names. (line 227) 51131* vconduMN instruction pattern: Standard Names. (line 237) 51132* vcond_mask_MN instruction pattern: Standard Names. (line 240) 51133* vector: Containers. (line 6) 51134* vector operations: Vector Operations. (line 6) 51135* VECTOR_CST: Constant expressions. 51136 (line 6) 51137* VECTOR_STORE_FLAG_VALUE: Misc. (line 293) 51138* vec_cmpMN instruction pattern: Standard Names. (line 217) 51139* vec_cmpuMN instruction pattern: Standard Names. (line 224) 51140* vec_concat: Vector Operations. (line 28) 51141* vec_duplicate: Vector Operations. (line 33) 51142* vec_extractM instruction pattern: Standard Names. (line 207) 51143* vec_initM instruction pattern: Standard Names. (line 212) 51144* vec_load_lanesMN instruction pattern: Standard Names. (line 165) 51145* VEC_LSHIFT_EXPR: Vectors. (line 6) 51146* vec_merge: Vector Operations. (line 11) 51147* VEC_PACK_FIX_TRUNC_EXPR: Vectors. (line 6) 51148* VEC_PACK_SAT_EXPR: Vectors. (line 6) 51149* vec_pack_sfix_trunc_M instruction pattern: Standard Names. (line 440) 51150* vec_pack_ssat_M instruction pattern: Standard Names. (line 433) 51151* VEC_PACK_TRUNC_EXPR: Vectors. (line 6) 51152* vec_pack_trunc_M instruction pattern: Standard Names. (line 426) 51153* vec_pack_ufix_trunc_M instruction pattern: Standard Names. (line 440) 51154* vec_pack_usat_M instruction pattern: Standard Names. (line 433) 51155* vec_permM instruction pattern: Standard Names. (line 258) 51156* vec_perm_constM instruction pattern: Standard Names. (line 274) 51157* VEC_RSHIFT_EXPR: Vectors. (line 6) 51158* vec_select: Vector Operations. (line 19) 51159* vec_setM instruction pattern: Standard Names. (line 202) 51160* vec_shr_M instruction pattern: Standard Names. (line 420) 51161* vec_store_lanesMN instruction pattern: Standard Names. (line 189) 51162* vec_unpacks_float_hi_M instruction pattern: Standard Names. 51163 (line 461) 51164* vec_unpacks_float_lo_M instruction pattern: Standard Names. 51165 (line 461) 51166* vec_unpacks_hi_M instruction pattern: Standard Names. (line 447) 51167* vec_unpacks_lo_M instruction pattern: Standard Names. (line 447) 51168* vec_unpacku_float_hi_M instruction pattern: Standard Names. 51169 (line 461) 51170* vec_unpacku_float_lo_M instruction pattern: Standard Names. 51171 (line 461) 51172* vec_unpacku_hi_M instruction pattern: Standard Names. (line 454) 51173* vec_unpacku_lo_M instruction pattern: Standard Names. (line 454) 51174* VEC_UNPACK_FLOAT_HI_EXPR: Vectors. (line 6) 51175* VEC_UNPACK_FLOAT_LO_EXPR: Vectors. (line 6) 51176* VEC_UNPACK_HI_EXPR: Vectors. (line 6) 51177* VEC_UNPACK_LO_EXPR: Vectors. (line 6) 51178* VEC_WIDEN_MULT_HI_EXPR: Vectors. (line 6) 51179* VEC_WIDEN_MULT_LO_EXPR: Vectors. (line 6) 51180* vec_widen_smult_even_M instruction pattern: Standard Names. 51181 (line 470) 51182* vec_widen_smult_hi_M instruction pattern: Standard Names. (line 470) 51183* vec_widen_smult_lo_M instruction pattern: Standard Names. (line 470) 51184* vec_widen_smult_odd_M instruction pattern: Standard Names. (line 470) 51185* vec_widen_sshiftl_hi_M instruction pattern: Standard Names. 51186 (line 481) 51187* vec_widen_sshiftl_lo_M instruction pattern: Standard Names. 51188 (line 481) 51189* vec_widen_umult_even_M instruction pattern: Standard Names. 51190 (line 470) 51191* vec_widen_umult_hi_M instruction pattern: Standard Names. (line 470) 51192* vec_widen_umult_lo_M instruction pattern: Standard Names. (line 470) 51193* vec_widen_umult_odd_M instruction pattern: Standard Names. (line 470) 51194* vec_widen_ushiftl_hi_M instruction pattern: Standard Names. 51195 (line 481) 51196* vec_widen_ushiftl_lo_M instruction pattern: Standard Names. 51197 (line 481) 51198* verify_flow_info: Maintaining the CFG. 51199 (line 117) 51200* virtual operands: SSA Operands. (line 6) 51201* VIRTUAL_INCOMING_ARGS_REGNUM: Regs and Memory. (line 59) 51202* VIRTUAL_OUTGOING_ARGS_REGNUM: Regs and Memory. (line 87) 51203* VIRTUAL_STACK_DYNAMIC_REGNUM: Regs and Memory. (line 78) 51204* VIRTUAL_STACK_VARS_REGNUM: Regs and Memory. (line 69) 51205* VLIW: Processor pipeline description. 51206 (line 6) 51207* VLIW <1>: Processor pipeline description. 51208 (line 223) 51209* vlshrM3 instruction pattern: Standard Names. (line 595) 51210* VMS: Filesystem. (line 37) 51211* VMS_DEBUGGING_INFO: VMS Debug. (line 8) 51212* void: Misc. (line 686) 51213* void <1>: Misc. (line 691) 51214* VOIDmode: Machine Modes. (line 192) 51215* VOID_TYPE: Types. (line 6) 51216* volatil: Flags. (line 328) 51217* volatil, in insn, call_insn, jump_insn, code_label, jump_table_data, barrier, and note: Flags. 51218 (line 44) 51219* volatil, in label_ref and reg_label: Flags. (line 65) 51220* volatil, in mem, asm_operands, and asm_input: Flags. (line 76) 51221* volatil, in reg: Flags. (line 98) 51222* volatil, in subreg: Flags. (line 170) 51223* volatil, in subreg <1>: Flags. (line 180) 51224* volatil, in symbol_ref: Flags. (line 206) 51225* volatile memory references: Flags. (line 329) 51226* volatile, in prefetch: Flags. (line 214) 51227* voting between constraint alternatives: Class Preferences. (line 6) 51228* vrotlM3 instruction pattern: Standard Names. (line 595) 51229* vrotrM3 instruction pattern: Standard Names. (line 595) 51230* walk_dominator_tree: SSA. (line 195) 51231* walk_gimple_op: Statement and operand traversals. 51232 (line 30) 51233* walk_gimple_seq: Statement and operand traversals. 51234 (line 47) 51235* walk_gimple_stmt: Statement and operand traversals. 51236 (line 10) 51237* WCHAR_TYPE: Type Layout. (line 171) 51238* WCHAR_TYPE_SIZE: Type Layout. (line 179) 51239* which_alternative: Output Statement. (line 58) 51240* WHILE_BODY: Statements for C++. (line 6) 51241* WHILE_COND: Statements for C++. (line 6) 51242* WHILE_STMT: Statements for C++. (line 6) 51243* whopr: LTO. (line 6) 51244* widen_ssumM3 instruction pattern: Standard Names. (line 413) 51245* widen_usumM3 instruction pattern: Standard Names. (line 414) 51246* WIDEST_HARDWARE_FP_SIZE: Type Layout. (line 116) 51247* window_save instruction pattern: Standard Names. (line 1730) 51248* WINT_TYPE: Type Layout. (line 184) 51249* WORDS_BIG_ENDIAN: Storage Layout. (line 28) 51250* WORDS_BIG_ENDIAN, effect on subreg: Regs and Memory. (line 215) 51251* word_mode: Machine Modes. (line 367) 51252* WORD_REGISTER_OPERATIONS: Misc. (line 53) 51253* wpa: LTO. (line 6) 51254* X in constraint: Simple Constraints. (line 122) 51255* x-HOST: Host Fragment. (line 6) 51256* XCmode: Machine Modes. (line 199) 51257* XCOFF_DEBUGGING_INFO: DBX Options. (line 12) 51258* XEXP: Accessors. (line 6) 51259* XFmode: Machine Modes. (line 82) 51260* XImode: Machine Modes. (line 54) 51261* XINT: Accessors. (line 6) 51262* xm-MACHINE.h: Filesystem. (line 6) 51263* xm-MACHINE.h <1>: Host Misc. (line 6) 51264* xor: Arithmetic. (line 168) 51265* xor, canonicalization of: Insn Canonicalizations. 51266 (line 78) 51267* xorM3 instruction pattern: Standard Names. (line 301) 51268* XSTR: Accessors. (line 6) 51269* XVEC: Accessors. (line 41) 51270* XVECEXP: Accessors. (line 48) 51271* XVECLEN: Accessors. (line 44) 51272* XWINT: Accessors. (line 6) 51273* zero_extend: Conversions. (line 28) 51274* zero_extendMN2 instruction pattern: Standard Names. (line 1129) 51275* zero_extract: Bit-Fields. (line 30) 51276* zero_extract, canonicalization of: Insn Canonicalizations. 51277 (line 87) 51278 51279 51280 51281Tag Table: 51282Node: Top1789 51283Node: Contributing4971 51284Node: Portability5700 51285Node: Interface7488 51286Node: Libgcc10529 51287Node: Integer library routines12356 51288Node: Soft float library routines19324 51289Node: Decimal float library routines31262 51290Node: Fixed-point fractional library routines47020 51291Node: Exception handling routines147416 51292Node: Miscellaneous routines148523 51293Node: Languages150643 51294Node: Source Tree152190 51295Node: Configure Terms152772 51296Node: Top Level155728 51297Node: gcc Directory159215 51298Node: Subdirectories160167 51299Node: Configuration162335 51300Node: Config Fragments163055 51301Node: System Config164280 51302Node: Configuration Files165216 51303Node: Build168033 51304Node: Makefile168445 51305Ref: Makefile-Footnote-1175249 51306Ref: Makefile-Footnote-2175396 51307Node: Library Files175470 51308Node: Headers176032 51309Node: Documentation178115 51310Node: Texinfo Manuals178974 51311Node: Man Page Generation181303 51312Node: Miscellaneous Docs183216 51313Node: Front End184603 51314Node: Front End Directory188277 51315Node: Front End Config189593 51316Node: Front End Makefile192409 51317Node: Back End196177 51318Node: Testsuites199958 51319Node: Test Idioms200889 51320Node: Test Directives204287 51321Node: Directives204814 51322Node: Selectors215111 51323Node: Effective-Target Keywords216467 51324Ref: arm_fp_ok223643 51325Ref: arm_neon_ok224572 51326Ref: arm_neonv2_ok224730 51327Ref: arm_neon_fp16_ok224902 51328Ref: arm_vfp3_ok225542 51329Node: Add Options237421 51330Node: Require Support238924 51331Node: Final Actions241431 51332Node: Ada Tests247090 51333Node: C Tests248421 51334Node: libgcj Tests252816 51335Node: LTO Testing253943 51336Node: gcov Testing255591 51337Node: profopt Testing258581 51338Node: compat Testing260296 51339Node: Torture Tests264536 51340Node: Options266151 51341Node: Option file format266592 51342Node: Option properties273581 51343Node: Passes287227 51344Node: Parsing pass288117 51345Node: Cilk Plus Transformation291650 51346Node: Gimplification pass295032 51347Node: Pass manager296877 51348Node: Tree SSA passes298723 51349Node: RTL passes319908 51350Node: Optimization info332212 51351Node: Dump setup333031 51352Node: Optimization groups334160 51353Node: Dump files and streams335049 51354Node: Dump output verbosity336247 51355Node: Dump types337303 51356Node: Dump examples338793 51357Node: GENERIC340139 51358Node: Deficiencies342015 51359Node: Tree overview342256 51360Node: Macros and Functions346380 51361Node: Identifiers347205 51362Node: Containers348814 51363Node: Types349971 51364Node: Declarations362045 51365Node: Working with declarations362540 51366Node: Internal structure368144 51367Node: Current structure hierarchy368528 51368Node: Adding new DECL node types370621 51369Node: Attributes374905 51370Node: Expression trees376149 51371Node: Constant expressions377903 51372Node: Storage References381199 51373Node: Unary and Binary Expressions384718 51374Node: Vectors404866 51375Node: Statements410061 51376Node: Basic Statements410593 51377Node: Blocks415100 51378Node: Statement Sequences416801 51379Node: Empty Statements417134 51380Node: Jumps417708 51381Node: Cleanups418361 51382Node: OpenMP420128 51383Node: OpenACC425973 51384Node: Functions427014 51385Node: Function Basics427485 51386Node: Function Properties431169 51387Node: Language-dependent trees433950 51388Node: C and C++ Trees434837 51389Node: Types for C++437741 51390Node: Namespaces442711 51391Node: Classes445817 51392Node: Functions for C++450874 51393Node: Statements for C++457125 51394Node: C++ Expressions465902 51395Node: Java Trees467407 51396Node: GIMPLE467520 51397Node: Tuple representation471185 51398Node: Class hierarchy of GIMPLE statements478145 51399Node: GIMPLE instruction set483133 51400Node: GIMPLE Exception Handling484765 51401Node: Temporaries486677 51402Ref: Temporaries-Footnote-1487995 51403Node: Operands488060 51404Node: Compound Expressions488821 51405Node: Compound Lvalues489055 51406Node: Conditional Expressions489817 51407Node: Logical Operators490476 51408Node: Manipulating GIMPLE statements497340 51409Node: Tuple specific accessors503276 51410Node: GIMPLE_ASM504055 51411Node: GIMPLE_ASSIGN506438 51412Node: GIMPLE_BIND511142 51413Node: GIMPLE_CALL512956 51414Node: GIMPLE_CATCH516984 51415Node: GIMPLE_COND518134 51416Node: GIMPLE_DEBUG520929 51417Node: GIMPLE_EH_FILTER524302 51418Node: GIMPLE_LABEL525865 51419Node: GIMPLE_GOTO526478 51420Node: GIMPLE_NOP527001 51421Node: GIMPLE_OMP_ATOMIC_LOAD527363 51422Node: GIMPLE_OMP_ATOMIC_STORE528359 51423Node: GIMPLE_OMP_CONTINUE529058 51424Node: GIMPLE_OMP_CRITICAL530537 51425Node: GIMPLE_OMP_FOR531531 51426Node: GIMPLE_OMP_MASTER534947 51427Node: GIMPLE_OMP_ORDERED535325 51428Node: GIMPLE_OMP_PARALLEL535719 51429Node: GIMPLE_OMP_RETURN538488 51430Node: GIMPLE_OMP_SECTION539133 51431Node: GIMPLE_OMP_SECTIONS539793 51432Node: GIMPLE_OMP_SINGLE541403 51433Node: GIMPLE_PHI542349 51434Node: GIMPLE_RESX543628 51435Node: GIMPLE_RETURN544347 51436Node: GIMPLE_SWITCH544921 51437Node: GIMPLE_TRY546796 51438Node: GIMPLE_WITH_CLEANUP_EXPR548568 51439Node: GIMPLE sequences549447 51440Node: Sequence iterators552653 51441Node: Adding a new GIMPLE statement code561110 51442Node: Statement and operand traversals562455 51443Node: Tree SSA565047 51444Node: Annotations566835 51445Node: SSA Operands567240 51446Node: SSA581315 51447Node: Alias analysis591021 51448Node: Memory model594795 51449Node: RTL596154 51450Node: RTL Objects598342 51451Node: RTL Classes602216 51452Node: Accessors607262 51453Node: Special Accessors609656 51454Node: Flags615443 51455Node: Machine Modes630207 51456Node: Constants643855 51457Node: Regs and Memory651942 51458Node: Arithmetic669830 51459Node: Comparisons679875 51460Node: Bit-Fields684167 51461Node: Vector Operations685719 51462Node: Conversions687600 51463Node: RTL Declarations692098 51464Node: Side Effects692919 51465Node: Incdec709930 51466Node: Assembler713266 51467Node: Debug Information714811 51468Node: Insns716008 51469Node: Calls742401 51470Node: Sharing744994 51471Node: Reading RTL748105 51472Node: Control Flow749096 51473Node: Basic Blocks750865 51474Node: Edges756319 51475Node: Profile information764948 51476Node: Maintaining the CFG769632 51477Node: Liveness information775494 51478Node: Loop Analysis and Representation777620 51479Node: Loop representation778656 51480Node: Loop querying786219 51481Node: Loop manipulation789040 51482Node: LCSSA791401 51483Node: Scalar evolutions793470 51484Node: loop-iv796714 51485Node: Number of iterations798636 51486Node: Dependency analysis801442 51487Node: Machine Desc807792 51488Node: Overview810355 51489Node: Patterns812395 51490Node: Example815903 51491Node: RTL Template817364 51492Node: Output Template828020 51493Node: Output Statement831983 51494Node: Predicates836322 51495Node: Machine-Independent Predicates839240 51496Node: Defining Predicates844184 51497Node: Constraints850147 51498Node: Simple Constraints851616 51499Node: Multi-Alternative864456 51500Node: Class Preferences867665 51501Node: Modifiers868557 51502Node: Machine Constraints873290 51503Node: Disable Insn Alternatives934128 51504Node: Define Constraints937620 51505Node: C Constraint Interface945015 51506Node: Standard Names948142 51507Ref: shift patterns973568 51508Ref: prologue instruction pattern1023865 51509Ref: window_save instruction pattern1024358 51510Ref: epilogue instruction pattern1024635 51511Node: Pattern Ordering1042205 51512Node: Dependent Patterns1043441 51513Node: Jump Patterns1045061 51514Ref: Jump Patterns-Footnote-11047208 51515Node: Looping Patterns1047256 51516Node: Insn Canonicalizations1051985 51517Node: Expander Definitions1056570 51518Node: Insn Splitting1064784 51519Node: Including Patterns1074387 51520Node: Peephole Definitions1076171 51521Node: define_peephole1077424 51522Node: define_peephole21083754 51523Node: Insn Attributes1086820 51524Node: Defining Attributes1088002 51525Ref: define_enum_attr1091495 51526Node: Expressions1092531 51527Node: Tagging Insns1099281 51528Node: Attr Example1103634 51529Node: Insn Lengths1106007 51530Node: Constant Attributes1109415 51531Node: Mnemonic Attribute1110591 51532Node: Delay Slots1112110 51533Node: Processor pipeline description1115333 51534Ref: Processor pipeline description-Footnote-11134150 51535Node: Conditional Execution1134474 51536Node: Define Subst1137957 51537Node: Define Subst Example1139993 51538Node: Define Subst Pattern Matching1142987 51539Node: Define Subst Output Template1144213 51540Node: Constant Definitions1146283 51541Ref: define_enum1150065 51542Node: Iterators1150553 51543Node: Mode Iterators1151131 51544Node: Defining Mode Iterators1152109 51545Node: Substitutions1153603 51546Node: Examples1155845 51547Node: Code Iterators1157293 51548Node: Int Iterators1159572 51549Node: Subst Iterators1162018 51550Node: Target Macros1163710 51551Node: Target Structure1166722 51552Node: Driver1168838 51553Node: Run-time Target1187808 51554Node: Per-Function Data1197519 51555Node: Storage Layout1200283 51556Node: Type Layout1226033 51557Node: Registers1239659 51558Node: Register Basics1240633 51559Node: Allocation Order1246071 51560Node: Values in Registers1248555 51561Node: Leaf Functions1256033 51562Node: Stack Registers1258892 51563Node: Register Classes1260164 51564Node: Stack and Calling1292806 51565Node: Frame Layout1293372 51566Node: Exception Handling1304219 51567Node: Stack Checking1310429 51568Node: Frame Registers1315270 51569Node: Elimination1323535 51570Node: Stack Arguments1327763 51571Node: Register Arguments1334945 51572Node: Scalar Return1355990 51573Node: Aggregate Return1362446 51574Node: Caller Saves1366635 51575Node: Function Entry1367377 51576Node: Profiling1378469 51577Node: Tail Calls1380579 51578Node: Stack Smashing Protection1382480 51579Node: Miscellaneous Register Hooks1384143 51580Node: Varargs1385009 51581Node: Trampolines1395118 51582Node: Library Calls1401161 51583Node: Addressing Modes1405845 51584Node: Anchored Addresses1429238 51585Node: Condition Code1431881 51586Node: CC0 Condition Codes1434208 51587Node: MODE_CC Condition Codes1437454 51588Node: Costs1444262 51589Node: Scheduling1462438 51590Node: Sections1485616 51591Node: PIC1501309 51592Node: Assembler Format1503368 51593Node: File Framework1504506 51594Ref: TARGET_HAVE_SWITCHABLE_BSS_SECTIONS1511438 51595Node: Data Output1514708 51596Node: Uninitialized Data1522654 51597Node: Label Output1527665 51598Node: Initialization1552276 51599Node: Macros for Initialization1558237 51600Node: Instruction Output1564956 51601Node: Dispatch Tables1575585 51602Node: Exception Region Output1579985 51603Node: Alignment Output1587079 51604Node: Debugging Info1591682 51605Node: All Debuggers1592352 51606Node: DBX Options1595207 51607Node: DBX Hooks1600645 51608Node: File Names and DBX1601954 51609Node: SDB and DWARF1604066 51610Node: VMS Debug1610549 51611Node: Floating Point1611136 51612Node: Mode Switching1613891 51613Node: Target Attributes1618327 51614Node: Emulated TLS1627293 51615Node: MIPS Coprocessors1630683 51616Node: PCH Target1631842 51617Node: C++ ABI1633684 51618Node: Named Address Spaces1638478 51619Node: Misc1643747 51620Ref: TARGET_SHIFT_TRUNCATION_MASK1650494 51621Node: Host Config1706669 51622Node: Host Common1707737 51623Node: Filesystem1710111 51624Node: Host Misc1714226 51625Node: Fragments1716675 51626Node: Target Fragment1717870 51627Node: Host Fragment1728499 51628Node: Collect21728739 51629Node: Header Dirs1731375 51630Node: Type Information1732798 51631Node: GTY Options1736074 51632Node: Inheritance and GTY1747321 51633Ref: Inheritance and GTY-Footnote-11748886 51634Node: User GC1749156 51635Node: GGC Roots1752895 51636Node: Files1753608 51637Node: Invoking the garbage collector1756315 51638Node: Troubleshooting1757820 51639Node: Plugins1758895 51640Node: Plugins loading1760024 51641Node: Plugin API1760894 51642Node: Plugins pass1768620 51643Node: Plugins GC1770591 51644Node: Plugins description1772309 51645Node: Plugins attr1772845 51646Node: Plugins recording1775119 51647Node: Plugins gate1775969 51648Node: Plugins tracking1776560 51649Node: Plugins building1777148 51650Node: LTO1778938 51651Node: LTO Overview1779810 51652Node: LTO object file layout1785637 51653Node: IPA1790267 51654Node: WHOPR1799232 51655Node: Internal flags1803792 51656Node: Match and Simplify1805203 51657Node: GIMPLE API1806157 51658Node: The Language1808952 51659Node: Funding1820057 51660Node: GNU Project1822556 51661Node: Copying1823205 51662Node: GNU Free Documentation License1860717 51663Node: Contributors1885838 51664Node: Option Index1924647 51665Node: Concept Index1925524 51666 51667End Tag Table 51668